
• 16位标识(id): 唯⼀的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每⼀个片里面的这个id都是相同的.
• 3位标志字段: 第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到). 第⼆位置为1表示禁⽌分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后⼀个分片置为0, 其他是1. 类似于⼀个结束标记.
• 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 除以 8 得到的. 因此, 除了最后⼀个报文之外(之前如果都是8的整数倍,最后⼀片的偏移量也⼀定是8的整数倍), 其他报文的长度必须是8的整数倍(否则报文就不连续了).
• 注意:片偏移(13位)表示本片数据在它所属的原始数据报数据区中的偏移量(以8字节为单位)
分片与组装的过程
分片
-
检查MTU限制:
- 当⼀个IP数据报的大小超过了⽹络的MTU(最大传输单元)限制时,就需要进行分片。MTU是数据链路层对IP层数据包进行封装时所能接受的最大数据长度。
-
分割数据报:
-
IP层将原始的IP数据报分割成多个较小的片段。
-
对于每个片段,IP层会设置相应的标识(Identification)、偏移量(Fragment Offset)和标志位(Flags)等字段。
-
标识字段⽤于标识属于同⼀个数据报的不同分片,确保所有分片能够被正确地重新组装。
-
偏移量字段指示了当前分片相对于原始数据报的起始位置,以8字节为单位。
-
标志位字段包含了3个位,其中MF(More Fragment)位⽤于指示是否还有更多的分片,DF(Do Not Fragment)位⽤于指示数据报是否允许进行分片。
-
-
添加IP头部:
- 每个分片都会加上自己的IP头部,与完整IP报文拥有类似的IP头结构,但MF和Fragment Offset等字段的值会有所不同。
-
发送分片:
- 分片在传输过程中独⽴传输,每个分片都有自己的IP头部,并且各自独⽴地选择路由。
组装
-
接收分片:
- 当⽬的主机的IP层接收到这些分片后,会根据标识字段将属于同⼀个数据报的所有分片挑选出来。
-
排序与组装:
-
利⽤片偏移字段,IP层会对属于同⼀个数据报的分片进行排序。
- 当所有的分片都到达并正确排序后,IP层会将这些分片重新组装成⼀个完整的IP数据报。
-
-
传递给上层协议:
- 组装好的IP数据报会传递给上层的协议进行处理。
注意:
• IP分片对传输层是透明的,这意味着传输层⽆需关⼼数据是否被分片以及如何重新组装。
• 接收方如何得知自己收到的报文分片了?
• 接收方如何得知自己收到的分片收全了?
• 接收方如何组合形成完整的报文?
分片与组装过程的示意图
分片组装场景


分片组装过程
- 假设在IP层,有⼀个大小为3000字节的报文,如何分片?如何组装呢?
IP数据报分片与组装过程涉及标识、标志位和偏移量字段。
当数据报超过MTU时会被分片,每个分片保留相同标识,并设置标志位(DF表示是否允许分片,MF指示后续分片)和13位偏移量(以8字节为单位)。
接收方通过标识字段识别同属数据报的分片,利用偏移量排序重组。
分片对传输层透明,重组后完整报文才上传。
例如3000字节报文按MTU分片后,各分片携带独立IP头,通过偏移量确保正确重组。整个过程保证了大数据报在网络中的可靠传输
IP数据报分片与组装机制:当数据报超过网络MTU时,IP层会将其分片。
每个分片保留相同的16位标识,设置3位标志(DF禁止分片位、MF更多分片位)和13位偏移量(以8字节为单位)。
接收方通过标识识别同属分片,利用偏移量排序重组,MF位判断是否收齐。
例如3000字节报文被分片后,各分片携带独立IP头,重组时按偏移量拼接。整个过程对传输层透明,确保大数据报可靠传输。