1.IPv4数据报的首部格式
笔记来源:
湖科大教书匠:IPv4数据报的首部格式
声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考
下图来源:以太网MAC帧格式
IP数据报属于MAC帧的数据部分
IPv4数据报的首部格式
1.1 IP数据报首部的固定部分
1.1.1 版本
占4比特,表示IP协议的版本。
通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。
1.1.2 首部长度
表示IP数据报首部的长度,占4比特,该字段的取值以4字节为单位。
最小十进制取值为5,表示IP数据报首部只有20字节固定部分
最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
1.1.3 区分服务字段(一般不使用)
用来获得更好的服务,占8比特,
利用该字段的不同数值可提供不同等级的服务质量。
只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。
1.1.4 总长度
表示IP数据报的总长度(首部+数据载荷),占16比特
最大取值为十进制的65535,以字节为单位。
总长度 = 首部长度 + 数据载荷长度
例子:
首部长度:0101
总长度:0000001111111100
下图所示为IP数据报首部格式
首部长度:
=
(
0101
)
2
×
4
=
5
×
4
=
20
Bytes
=(0101)_{2}×4=5×4=20\ \text{Bytes}
=(0101)2×4=5×4=20 Bytes(以4字节为单位)
总长度:
(
0000001111111100
)
2
=
1020
Bytes
(0000001111111100)_{2}=1020\ \text{Bytes}
(0000001111111100)2=1020 Bytes(以字节为单位)
数据载荷长度:
1020
−
20
=
1000
Bytes
1020-20=1000\ \text{Bytes}
1020−20=1000 Bytes
1.1.5 用于IP数据报分片的三个字段
标识
属于同一个数据报的各分片数据报应该具有相同的标识.,占16比特
IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
标志(占3bit)
DF位 | MF位 | 保留位 |
---|---|---|
1表示不允许分片 | 1表示后面还有分片 | 空 |
0表示允许分片 | 0表示这是最后一个分片 | 必须为0 |
片偏移
指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
占13比特,片偏移以8个字节为单位。
为什么要将IP数据报的数据载荷分片?
因为IP数据报的最大长度远远大于传输信号的数据链路的最大传输单元(MTU),可以理解为链路一下装不下那么多,所以需要将其分片,分开发送
为什么需要片偏移?
同一个IP数据报的分片标识相等,每发送一个包,标识的值就会增加,使得数据载荷部分不得不后移,偏移后原数据发生改变,为了恢复数据载荷的原数据,我们相应的往前偏移几个标识的位置后即可恢复
对IPv4数据报进行分片的例1
图中0 ~ 1399、1400 ~ 2799、2800 ~ 3799 是对每个字节的编号
对IPv4数据报进行分片的例2
1.1.6 生存时间(TTL)
现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
即每转发一次TTL-1,若值为0则丢弃,其他值对其进行转发
为什么需要生存时间TTL?
防止IP数据报在网络中永久兜圈
1.1.7 协议
指明IPv4数据报的数据部分是何种协议数据单元,占8比特。
协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | OSPF |
---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
1.1.8 首部检验和
用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和,占16比特
IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPV6中路由器不再计算首部校验和,从而更快转发IP数据报。
1.1.9 源IP地址、目的IP地址
源IP地址用来填写发送该IP数据报的源主机的IP地址,占32比特
目的IP地址用来填写接收该IP数据报的目的主机的IP地址,占32比特
1.2 IP数据报首部的可变部分
1.2.1 可选字段(很少被使用)
用来支持排错、测量及安全等措施。
长度从1个字节到40个字节不等。
可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。
1.2.2 填充字段
确保首部长度为4字节的整数倍。使用全0进行填充。