本文主要是介绍IP 分片过程及偏移量计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
IP 报头中与分片相关的三个字段
1、 标识符( ldentifier ):16 bit
该字段与 Flags
和 Fragment Offest
字段联合使用, 对较大的上层数据包进行分段( fragment ) 操作。
路由器将一个包拆分后,所有拆分开的小包被标记相同的值
,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
2、 标记( Flags ):3 bit
该字段第 1 位不使用。
第 2 位是 DF( Don’t Fragment ) 位,DF 位设为 1 时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个 ICMP
错误信息。
第 3 位是 MF( More Fragments ) 位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的 IP 报文头中将 MF 位设为 1。
3、 片偏移( Fragment Offset ):13 bit
表示该 IP 报文在该组分片中的位置,接收端靠此来组装还原 IP 报文。
数据报的分片举例
举例 1
举例 2
IPv4 vs IPv6 分段扩展头
在 IPv4 中,中间路由器对于超过接口 MTU 的数据包可以进行再分段处理,数据包在转发过程中可能被多次分段,会降低数据包的转发效率。
而在 IPv6 中,只有源端数据包发送方才能对数据包进行分段处理。如果源端需要发送的数据包 PMTU 超过中间路由器转发的数据包接口的 MTU 值,数据包将被丢弃,同时该路由会向源端发送一个 ICMPv6
的错误信息报文。
这篇关于IP 分片过程及偏移量计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!