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

相关推荐
志栋智能8 小时前
超自动化巡检:保障数字化转型的“底座工程”
运维·自动化
Python-AI Xenon8 小时前
Linux逻辑卷(LVM)初始化与文件系统选型全指南
linux·运维·性能测试·存储
z202305088 小时前
RDMA之RoCEv2 无损网络PFC 、DCQCN 和ECN (7)
linux·服务器·网络·人工智能·ai
不吃土豆的马铃薯8 小时前
Spdlog 入门:日志记录器与日志槽基础详解
服务器·开发语言·c++·c·日志·spdlog
汪汪大队u9 小时前
基于 K8s 的物联网平台运维体系:Ansible+Zabbix 自动化监控与故障自愈(三)—— Zabbix Server 启动排错记
运维·kubernetes·ansible
凯瑟琳.奥古斯特9 小时前
传输层核心功能解析
开发语言·网络·职场和发展
我星期八休息9 小时前
Linux系统编程—库制作与原理
linux·运维·服务器·数据结构·人工智能·python·散列表
William.csj9 小时前
服务器——交互式 NVIDIA GPU 监控工具
运维·服务器
Elastic 中国社区官方博客9 小时前
Elasticsearch 下采样方法:最后值采样 vs. 聚合采样
大数据·运维·elasticsearch·搜索引擎·全文检索
大明者省9 小时前
Ubuntu22.04 宝塔面板与 XFCE 远程桌面端口兼容性分析
运维·服务器·数据库·笔记