网络层也称为IP层,在TCP/IP协议中为第三层,主要目的是在互联网中对目的主机的寻址。IP层结构比较完善,因此除了路由外还有许多其它的应用。下面就IP层的分类及结构进行介绍。
1. IP层分类
IP层按照IP地址的长短可以分为IPV4和IP6两种。IPv4的IP地址是由4个字节组成,而IPv6的IP 地址是由16个字节组成。这两种网络层的协议不仅IP地址长度不同,协议结构也有差别,因此后续篇幅将分开对IPv4和IPv6的组成、结构和应用分开介绍。
-
IPv4相关的内容
-
IPv4的表示方法
-
IPv4总共32位2进制数(4个字节),IPv4以4位十进制的方式表示:如192.168.1.199,实际上每个分段都是8位2进制数。
-
-
IPv4地址的分类:
-
总共分为A,B,C,D四类。以网络ID(Net-id)与主机ID(Host-id)表示,如图1所示。
-
-
-
A类地址:
-
-
第一个bit 为零,Net-id由第一个字节表示,因此Net-id的范围为0-127.因此常见10.x.x.x到 127.x.x.x等都是A类地址。A类地址的网络ID最多127个,主机是24-bit,因此主机可以多达1600万个。
-
-
-
B类地址:
-
-
B类地址的第一个bit为1,第二个bit为0,以网络ID(Net-id)总共16个bit,其中只有14个bits 可以使用,因此表达范围128.0到191.255总共16384个,主机ID可达65536个。
-
-
-
C类地址:
-
-
C类地址的前三个bits为110,Net-id总共24个bits,其中只有21个bits 可以使用,因此表达范围192.0到223.255总共200万个,主机ID只剩8bits,因此范围为0-255。
-
-
-
D类地址:
-
-
D类地址的前四个bits为1110,是多播地址,关于多播(组播)的,后面会有专门的篇幅介绍。
-
-
-
E类地址:
-
-
E类地址前4bits为1111,为保留地址。目前没有被使用。

图1
-
子网掩码(subnet mask)
子网掩码又叫网络掩码、地址掩码、子网络遮罩等,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
子网掩码是一个32位数据,是与IP地址结合使用的一种技术。它的主要作用有两个,一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。二是用于将一个大的IP网络划分为若干小的子网络。
使用子网是为了减少IP的浪费。因为随着互联网的发展,越来越多的网络产生,有的网络多则几百台,有的只有区区几台,这样就浪费了很多IP地址,所以要划分子网。使用子网可以提高网络应用的效率。
通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是,将计算机十进制的IP地址和子网掩码转换为二进制的形式,然后进行二进制“与”(AND)计算(全1则得1,不全1则得0),如果得出的结果是相同的,那么这两台计算机就属于同一网段。
-
-
子网掩码分类:
-
子网掩码一共分为两类。第一类是缺省(自动生成)子网掩码,一类是自定义子网掩码。A类网络缺省子网掩码:255.0.0.0,B类网络缺省子网掩码:255.255.0.0,C类网络缺省子网掩码:255.255.255.0 。
第二类为自定义类,自定义子网掩码是将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:子网号、子网主机号。形式如下:
(1)未做子网划分的IP地址:网络号+主机号
(2)做子网划分后的IP地址:网络号+子网号+子网主机号。
举例说明子网掩码255.255.255.128的作用,
子网掩码255.255.255.128,网络号为255.255.255,子网号为128, 子网主机号为0-127,合在一起表示网络IP地址范围为255.255.255.128–255.255.255.255.
-
-
实验网段(也就是常说的内网)
-
RFC 1918为私有网络预留出了三个IP地址块,如下:
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP或注册中心申请而在公司或企业内部自由使用。
NAT最初的设计目的是用于实现私有网络访问公共网络的功能,后扩展到实现任意两个网络间进行访问时的地址转换应用,本文中将这两个网络分别称为内部网络(内网)和外部网络(外网),通常私网为内部网络,公网为外部网络。NAT技术在后续章节中会详解。
-
IP的报文格式
IP报文格式如图2所示,IP v4报文字段详解见表1.

图2 IP v4报文结构
表1
| 字段 | 长度 | 含义 | 缺省/常用值 |
| 版本(version) | 4bit | IP版本号 IPv4/IPv6 | 4/6 |
| 首部长度(IHL) | 4bit | IPv4的首部长度(32-bit计算) | 5 |
| 区分服务(TOS) | 8bit | 提供更好的服务,一般很少使用 type of service | 0 |
| 总长度 | 16bit | IP首部与数据之和的总长度,按字节计算 | |
| 标识(identifier) | 16bit | IPv4 在软件中维持一个计数器,每发送一个数据包计数器+1,初始值可以为随机数 | |
| 标志 | 3bit | bit [16: 18],只有bit[17],bit[18]有效,bit[16]必须为0。bit[18] :‘0’表示后面没有分片,‘1’表示后面还有分片数据。bit[17]:为‘1’表示不能分片,‘0’表示可以分片 | 000/001/010 |
| 片偏移 | 13bit | 分片的偏移量,初始值为0,后续为前面所有片的累计长度,按字节计算,以8个字节为计算单位,最大的累计长度是(213 – 1) × 8 = 65528 | 0 |
| 生存时间(TTL) | 8bit | 记录多少跳,每跳(hop)一次减1,当TTL等于0时,该IP包就被路由器丢弃,并通过ICMP将信息发送给发送者 | 64/128/255 |
| 协议 | 8bit | TCP = 6,UDP = 17(0x11),ICMP = 1,IGMP = 2 | |
| 首部校验和 | 16bit | 发送者提供16位checksum计算值,接收者校验(包含路由器) | |
| 源地址 | 32bit | 源IP地址 | |
| 目的地址 | 32bit | 目的IP地址 | |
| 选项 | 可变 | 自定义,通常会用来排错,测量,安全等,如有选项数据,应32bit对齐,并在首部长度指出 | 0 |
2. IPv6的组成及表示方法:
由128位二进制数据组成,其中每16位以“:”分割,如:fd00:bc4d:fbcb:0a72:f98f:b46f:710e:df2f
如果在“:”分割序列中,前面的四个bit都为0,则0可以省略不写,如:
2001:0db8:0000:0000:0000:ff00:0042:8329 -> 2001:0db8:0:0:0:ff00:0042:8329->
2001:db8::ff00:42:8329(在不引起混淆的前提下)
回环地址:0000:0000:0000:0000:0000:0000:0000:0001 –> ::1
表3
|
0 3 |
4 11 | 12 15 | 16 23 | 24 31 |
| Version | Traffic class | flow label | ||
| Payload length |
Next header |
Hop limit | ||
| Source address | ||||
| Destination address | ||||
IPv6报文格式
(1)版本号(Version):与IPv4一样,指定IPv6 还是IPv4
(2)区分服务(Traffic class):区分数据包的服务类别,与IPv4的同名字段一样(TOS)
(3)流标签(flow label):对一些要求低延迟的连接建立一种伪连接,随机填充该字段(0~220)。当一个流标签字段非0的数据包出现时。所有的路由器都在自己的内部表中查找该流标签的值,看它是否要求那一种特殊待遇(比如尽快被发送)。
(4)有效载荷长度(payload length):数据载荷的长度,不包含头部。
(5)下一个头(next header):指明了当前包头之后还有哪种扩展头。指定上层的传输类型。
(6)跳数限制(Hop limit):与IPv4的TTL类似。
(7)原地址和目的地址:各16字节的源和目的IP地址。
后续章节中将继续介绍IP层的应用。