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

相关推荐
子琦啊5 分钟前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
智慧光迅AINOPOL5 分钟前
校园全光网建设指南:从架构到调优,打造稳定高体验校园网络
网络·全光网解决方案·全光网·酒店全光解决方案·泛住宿全光网解决方案
被摘下的星星14 分钟前
Internet 的域名系统:从“名字”到“地址”的翻译官
网络
跨境数据猎手41 分钟前
跨境独立站系统技术拆解(附带源码)
服务器·前端·php
AOwhisky1 小时前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..2 小时前
目录结构(FHS 标准)
linux·运维·服务器
刘延林.2 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
星恒讯工业路由器2 小时前
星恒讯工业生产自动化解决方案
运维·物联网·自动化·智能路由器·信息与通信
Diros1g2 小时前
如何通过普通网线给另一个设备供网
网络·网络协议