IP分片和组装的具体过程

• 16位标识(id): 唯⼀的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每⼀个片里面的这个id都是相同的.

• 3位标志字段: 第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到). 第⼆位置为1表示禁⽌分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后⼀个分片置为0, 其他是1. 类似于⼀个结束标记.

• 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 除以 8 得到的. 因此, 除了最后⼀个报文之外(之前如果都是8的整数倍,最后⼀片的偏移量也⼀定是8的整数倍), 其他报文的长度必须是8的整数倍(否则报文就不连续了).

• 注意:片偏移(13位)表示本片数据在它所属的原始数据报数据区中的偏移量(以8字节为单位)

分片与组装的过程

分片

  1. 检查MTU限制:

    1. 当⼀个IP数据报的大小超过了⽹络的MTU(最大传输单元)限制时,就需要进行分片。MTU是数据链路层对IP层数据包进行封装时所能接受的最大数据长度。
  2. 分割数据报:

    1. IP层将原始的IP数据报分割成多个较小的片段。

    2. 对于每个片段,IP层会设置相应的标识(Identification)、偏移量(Fragment Offset)和标志位(Flags)等字段。

    3. 标识字段⽤于标识属于同⼀个数据报的不同分片,确保所有分片能够被正确地重新组装。

    4. 偏移量字段指示了当前分片相对于原始数据报的起始位置,以8字节为单位。

    5. 标志位字段包含了3个位,其中MF(More Fragment)位⽤于指示是否还有更多的分片,DF(Do Not Fragment)位⽤于指示数据报是否允许进行分片。

  3. 添加IP头部:

    1. 每个分片都会加上自己的IP头部,与完整IP报文拥有类似的IP头结构,但MF和Fragment Offset等字段的值会有所不同。
  4. 发送分片:

    1. 分片在传输过程中独⽴传输,每个分片都有自己的IP头部,并且各自独⽴地选择路由。

组装

  1. 接收分片:

    1. 当⽬的主机的IP层接收到这些分片后,会根据标识字段将属于同⼀个数据报的所有分片挑选出来。
  2. 排序与组装:

    1. 利⽤片偏移字段,IP层会对属于同⼀个数据报的分片进行排序。

      • 当所有的分片都到达并正确排序后,IP层会将这些分片重新组装成⼀个完整的IP数据报。
  3. 传递给上层协议:

    1. 组装好的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头,重组时按偏移量拼接。整个过程对传输层透明,确保大数据报可靠传输。

相关推荐
野犬寒鸦2 小时前
从零起步学习并发编程 || 第三章:JMM(Java内存模型)详解及对比剖析
java·服务器·开发语言·分布式·后端·学习·spring
小李独爱秋2 小时前
计算机网络经典问题透视:无线局域网的物理层主要有哪几种?
服务器·网络·物联网·计算机网络·信息与通信
Honmaple2 小时前
OpenClaw 钉钉插件安装指南
服务器·网络·钉钉
IT研究所2 小时前
信创浪潮下 ITSM 的价值重构与实践赋能
大数据·运维·人工智能·安全·低代码·重构·自动化
代码AI弗森2 小时前
WSL2:在 Windows 上获得一整套可托付的 Linux 工程环境
linux·运维·服务器
玉梅小洋3 小时前
Docker 镜像在节点间的高效拷贝的方案
运维·docker·容器
niceffking3 小时前
Linux信号相关函数
linux·运维·服务器·linux信号
蚰蜒螟3 小时前
Linux 7 中的系统调用原理
linux·运维·服务器
AC赳赳老秦3 小时前
DeepSeek一体机部署:中小企业本地化算力成本控制方案
服务器·数据库·人工智能·zookeeper·时序数据库·terraform·deepseek