Fragment Offset 的作用

核心目的:让接收方知道每个分片应该拼回原始数据报的哪个位置。


为什么需要它

IP 数据报在传输过程中可能经过MTU 较小的链路,被路由器切成多个分片。这些分片:

  • 可能走不同路径到达目的地
  • 到达顺序可能乱序
  • 需要在目的主机重新组装成原始数据报

没有偏移量,接收方根本不知道每块碎片放在哪里。


⭐举例说明

原始数据报数据部分 4000 字节,MTU = 1500(IP头20字节,每片最多携带1480字节数据):

分片数据内容字节范围偏移值(÷8)MF标志
分片1第 0~1479 字节001
分片2第 1480~2959 字节14801851
分片3第 2960~3999 字节29603700

接收方收到这三个分片后,根据偏移量就能准确拼回原始顺序。


为什么以 8 字节为单位

13位最大表示 2¹³ - 1 = 8191,若单位是字节则最多只能表示 8191 字节的偏移,远不够用。

8字节为单位后,最大可表示:

8191 × 8 = 65528 字节

恰好覆盖 IP 数据报数据部分最大长度(65515字节),用更少的位表示更大的范围


配合 MF 标志一起理解

Fragment Offset 单独不够用,还需要配合 MF(More Fragments)标志位

情况MFOffset
未分片的完整报文00
分片中间片1>0
最后一个分片0>0

接收方同时根据这两个字段判断是否收齐所有分片,再重组。


一句话总结

Fragment Offset 本质上是一个**“拼图编号”**,告诉接收方这块碎片属于原始数据的第几个字节开始,以8字节为单位是为了用13位覆盖足够大的地址范围。