IP
数据包由首部和数据两部分构成。首部的前一部分是固定长度,共20个字节,是所有IP
数据包必须有的。在首部的固定部分是一些可选字段,长度可变。
- 版本:占4位,指定
IP
协议的版本。目前IP
协议有两个版本IPV4
和IPV6
。通信双方使用的IP
协议版本必须一致。目前广泛使用的是IPV4
版本。 - 首部长度:占4位,可表示的最大十进制数为15。需要注意的是这个字段所表示的长度的单位是32位二进制数,也就是4个字节。所以最大15的情况下,可选字段长度最大可有40个字节,整个首部的长度为60个字节。
- 区分服务:占8位,配置计算机给特定应用程序的数据包添加一个标识,然后再配置网络中的路由器优先转发带有标识的数据包,在网络带宽比较紧张的情况下,也能确保这种应用的带宽有保障,这就是区分服务,为这种服务确保服务质量(
Quality of Service
,QoS
) - 总长度:总长度指
IP
首部和数据之和的长度,也就是数据包的长度,单位为字节。总长度字段为16位,因此,数据包的最大长度为(2^16)- 1
,65535字节。
- 标识(
identification
):占16位,IP
软件在存储器中维持一个计数器,每产生一个数据包,计数器就加一,并将此赋值给标识字段。但这个“标识”并不是序号,因为IP
是无法连接服务,数据包不存在按序接收的问题。当数据包由于长度超过网络的MTU
而必须分片时,同一个数据包被分成多个片,这些片的标识都一样,也就是数据包这个标识的值被复制到所有的数据包分片的标识字段中。相同的标识字段的值使分片后的各个数据包最后能正确地重新组装成为原来的数据包。 - 标志(
flag
):占3位,但是目前只有两位有意义。标志字段中的最低位记为MF
(More Fragment
)。MF = 1
即表示后面“还有分片”的数据包,MF = 0
表示这个数据包已经是若干数据包片中的最后一个。标志字段中间的一位为DF
(Don`t Fragment
),意思是“不能分片”。只有当DF = 0
时才允许分片。 - 片偏移:占13位。片偏移指出较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该分片从何处开始。片偏移以8个字节为偏移单位。每个分片的长度一定是8字节(64位)的整数倍。