
每一行都由32位比特,即4个字节组成,每个格子称为字段或者域。IP数据报由20字节的固定部分和最大40字节的可变部分组成。
总长度
 总长度为16个比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度(首部长度+数据载荷长度)最大取值为二进制的16个比特1,即十进制的65535。
 
 tip:IP数据报的分片概念
 
为了让不同分片知道自己属于同一个IPv4数据报,因此需要
 标识
 标识长度为16个比特,属于同一个IPv4数据报的各分片数据报应该具有相同的标识。IP软件会维持一个计数器,每产生一个IPv4数据报,计数器值就加1,并将此值赋给标识字段。
标志
 最低位(More Fragment,MF)
 MF=1表示本分片后面还有分片
 MF=0表示本分片后面没有分片
 中间位(Don’t Fragment, DF)
 DF=1表示不允许分片
 DF=0表示允许分片
 最高位为保留位,必须设置为0
片偏移
 片偏移长度为13个比特,该字段的取值以8字节为单位,用来指出分片IPv4数据报的数据载荷偏移其在原IPv4数据报的位置有多远。
举例:
 

 特殊举例:
 
 
生存时间(Time To Live,TTL)
 长度为8个比特,最大取值为二进制的11111111,即十进制的255。
 生存时间字段后来改为以“跳数”为单位,路由器收到待转发的IPv4数据报时,将其首部中的该字段的值减1,若结果不为0就转发,否则就丢弃。

 协议
 长度为8个比特,用来指明IPv4数据报的数据载荷是何种协议数据单元PDU。
 常用的一些协议和相应的协议字段值
 |
 ------|------|—|-||
| 协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | 
|---|---|---|---|---|---|
| 协议字段值 | 1 | 2 | 6 | 17 | 41 | 
首部校验和
 
 首部检验和
 长度为16个比特,用于检测IPv4数据报在传输过程中其首部是否出现了差错。
 IPv4数据报每经过一个路由器,其首部中的某些字段的值(例如生存时间TTL、标志以及片偏移等)都可能发生变化,因此路由器都要重新计算一下首部检验和。
 由于网际层并不向其高层提供可靠传输的服务,并且计算首部检验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部检验和,从而更快转发IP数据报。
 两数进行二进制反码求和运算规则:
 从低位到高位逐列计算
 00相加为0
 01相加为1
 11相加为0,进1到下一位
 若最高位相加后产生进位,最后得到的结果要加1
可选字段
 长度从1字节到40字节不等,用来支持排错、测量以及安全措施等功能。虽然可选字段增加了IPv4数据报的功能,但这同时也使得IPv4数据报的首部长度成为可变的,这就增加了因特网中每一个路由器处理IPv4数据报的开销。
 实际上,可选字段很少被使用。
填充
 当首部长度(20字节固定部分+可变部分)的长度不是4字节整数倍时,填充相应数量的全0字节,以确保IPv4数据报的首部长度是4字节的整数倍。