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 分钟前
接口测试需要注意的一些BUG
网络·数据库·python·单元测试·bug·压力测试·tornado
小糖学代码7 分钟前
计算机网络理论:2.物理层
网络·计算机网络
Xzq2105099 分钟前
Reactor模式
linux·网络
小鸡吃米…13 分钟前
Python 中的并发 —— 进程池
linux·服务器·开发语言·python
badwomen__25 分钟前
SRAM与DRAM:速度 vs 容量的永恒博弈
服务器·性能优化
代码派26 分钟前
免费本地部署的数据库 DevOps 工具,能覆盖多少日常工作场景?以 NineData 社区版为例
运维·数据库·database·devops·数据库管理工具·数据管理·sql工具
枕布响丸辣38 分钟前
Nginx 安全防护与 HTTPS 部署实战
linux·运维·服务器·系统安全
Yan-英杰41 分钟前
远程控制软件哪个安全?2026 ToDesk/向日葵/RayLink加密、隐私与防护全面对比评测
网络·人工智能·网络协议·tcp/ip·http
顶点多余42 分钟前
进程控制详解
linux·运维·服务器
CCPC不拿奖不改名1 小时前
RAG基础:评测系统RAGAS的四大指标
linux·服务器·人工智能·计算机视觉·前端框架·知识库搭建