宿州市网站建设_网站建设公司_色彩搭配_seo优化
2026/1/16 9:06:52 网站建设 项目流程

IP 分片是 TCP/IP 协议栈中网络层(IP 层)的核心机制,目的是解决 “IP 报文长度超过数据链路层 MTU 限制” 的传输问题 —— 确保大型 IP 数据报能通过不同 MTU 的网络链路(如以太网、PPP 链路)成功送达目标主机。以下从核心背景、关键字段、分片过程、组装过程、注意事项、实例演示六个维度详细讲解:

为什么需要 IP 分片

1. MTU 的定义

MTU(最大传输单元)是数据链路层(如以太网、WiFi)对 “封装后的 IP 数据包” 的最大数据长度限制(单位:字节),代表该链路单次能传输的最大 IP 数据报尺寸(不含数据链路层头部)。

  • 常见 MTU 值:以太网默认 1500 字节(最常用)、PPP 链路默认 1500 字节、部分窄带链路(如卫星网)可能低至 576 字节。

2. 分片的触发条件

当 IP 层收到上层协议(如 TCP、UDP)传递的 IP 数据报时,会先检查其总长度

  • 若总长度 ≤ 出接口 MTU:直接转发,无需分片;
  • 若总长度 > 出接口 MTU:且 IP 头部 “禁止分片(DF)” 标志未置 1,则触发分片;
  • 若总长度 > 出接口 MTU:且 DF 标志置 1(禁止分片),IP 层会丢弃该报文,并向源主机发送 “ICMP 不可达(需要分片但被禁止)” 报文。

IP 头部中与分片相关的核心字段

IP 分片和组装的逻辑完全依赖 IP 头部的 3 个关键字段(文档中已提及,此处细化解释),需先明确其作用:

字段名称位数核心作用
16 位标识(ID)16唯一标识源主机发送的一个原始 IP 数据报。同一原始报文的所有分片,ID 字段值完全相同,用于接收方分组。
3 位标志(Flags)3- 第 0 位:保留(未使用);- 第 1 位(DF):禁止分片(1 = 禁止,0 = 允许);- 第 2 位(MF):更多分片(1 = 后续还有分片,0 = 当前是最后一个分片)。
13 位片偏移(Fragment Offset)13指示当前分片在 “原始 IP 数据报的数据部分” 中的偏移位置,单位是 8 字节(即实际偏移字节数 = 片偏移值 × 8)。用于接收方排序分片。

关键约束

由于片偏移以 8 字节为单位,因此:

  • 除最后一个分片外,所有分片的数据部分长度必须是 8 的整数倍(确保分片拼接后数据连续);
  • 片偏移的最大值为 2¹³ - 1 = 8191,对应实际偏移字节数 = 8191 × 8 = 65528 字节,与 IP 头部 “总长度” 字段(16 位,最大 65535 字节)匹配(65528 + 7 字节 = 65535,最后一个分片可不足 8 字节)。

IP 分片的具体过程(发送方侧)

1. 计算分片阈值

首先确定 “单个分片的数据部分最大长度”:分片阈值 = 出接口 MTU - IP 头部固定长度(默认 20 字节,无选项字段时)→ 例:以太网 MTU=1500 字节,则分片阈值 = 1500 - 20 = 1480 字节(每个分片的数据部分最多 1480 字节)。

2. 分割原始数据报

将原始 IP 数据报拆分为多个片段,遵循规则:

  • 原始 IP 头部的 “版本、源 IP、目的 IP、协议” 等核心字段保留不变;
  • 每个分片的数据部分长度 ≤ 分片阈值,且除最后一个分片外,其余分片数据长度必须是 8 的整数倍;
  • 原始数据报的 “数据部分” 被连续分割,无重叠、无遗漏。

3. 为每个分片构建新 IP 头部

每个分片都会生成独立的 IP 头部(并非复用原始头部),关键调整如下:

  • 标识(ID):与原始数据报的 ID 保持一致(确保接收方识别为同一组分片);
  • 标志(Flags):
    • 除最后一个分片外,其余分片的 MF 位 = 1(表示 “还有更多分片”);
    • 最后一个分片的 MF 位 = 0(表示 “分片结束”);
    • DF 位 = 0(分片后自动置为允许分片);
  • 片偏移:按 “当前分片数据在原始数据中的起始位置 ÷ 8” 计算(单位:8 字节);
  • 总长度:当前分片的 IP 头部长度 + 数据部分长度(每个分片的总长度 ≤ MTU);
  • 首部检验和:重新计算(因头部字段已修改)。

4. 独立发送分片

每个分片都是 “独立的 IP 数据包”,会:

  • 各自封装到数据链路层帧中(如以太网帧);
  • 独立选择路由(可能经过不同路径到达目标主机);

只要有一个丢包了,tcp就需要对整个数据包重传,然后再走一遍上面的流程,所以看出分片增大了丢包概率,一个包丢包率1%,把他拆成三个包丢包率就是3%了。


IP 分片的组装过程(接收方侧)

接收方的 IP 层会按以下 3 步完成组装(仅在目标主机执行,中间路由器不组装分片):

1. 分片分组(按 ID 聚合)

接收方收到 IP 数据包后,根据 “标识(ID)+ 源 IP + 目的 IP + 协议” 四元组,将属于同一原始数据报的所有分片归为一组 —— 核心依据是 “ID 相同”(同一原始报文的分片 ID 一致)。

2. 分片排序(按片偏移排序)

对同一组内的分片,按 “片偏移” 字段升序排列:→ 片偏移 = 0 的分片是第一个分片(原始数据的起始部分);→ 片偏移最大且 MF=0 的分片是最后一个分片(原始数据的末尾部分)。

3. 完整性检查与拼接

  • 完整性判断:当收到 “MF=0” 的最后一个分片后,计算 “所有分片的数据长度之和” 是否等于 “原始数据总长度”(通过最后一个分片的片偏移 + 数据长度推导),确认无分片丢失;
  • 数据拼接:将排序后的分片数据部分连续拼接,还原原始数据报的 “数据部分”;
  • 恢复原始 IP 头部:用原始数据报的核心字段(版本、源 IP、目的 IP 等)构建完整 IP 头部,丢弃各分片的独立头部信息;
  • 传递给上层:将组装后的完整 IP 数据报传递给上层协议(如 TCP、UDP)——IP 分片对传输层完全透明,TCP/UDP 无需感知分片过程,仅接收完整数据。

IP 分片的关键注意事项

  1. 传输层透明性:TCP、UDP 等传输层协议看不到分片过程,仅接收组装后的完整数据;若某一分片丢失,IP 层不重传,需依赖 TCP 的重传机制(UDP 无重传,会导致数据丢失)。
  2. 中间路由器不组装:分片仅在发送方拆分、目标主机组装,中间路由器仅转发分片(可能因链路 MTU 更小而再次分片,但需遵循分片规则)。
  3. 分片丢失的影响:只要有一个分片丢失,整个原始数据报就无法组装,需等待上层协议重传(TCP 会重传完整原始报文,UDP 则直接丢失数据)。
  4. 禁止分片的场景:若 IP 头部 DF 位 = 1(禁止分片),则报文超过 MTU 时会被丢弃,常见于 “路径 MTU 发现(PMTUD)” 机制(TCP 通过 DF 位探测路径上的最小 MTU,避免分片)。

实例演示:3000 字节 IP 报文的分片过程

假设场景:原始 IP 数据报总长度 = 3000 字节(其中 IP 头部 20 字节,数据部分 2980 字节),发送方出接口 MTU=1500 字节(以太网默认),无 IP 选项字段。

1. 计算分片阈值

分片阈值 = MTU - IP 头部长度 = 1500 - 20 = 1480 字节(每个分片的数据部分最大 1480 字节,且 1480 是 8 的整数倍:1480 ÷ 8 = 185)。

2. 分片数量与参数计算

原始数据部分 = 2980 字节,需拆分为 3 个分片(前 2 个分片数据长度 = 1480 字节,最后 1 个 = 2980 - 1480×2=20 字节),各分片参数如下:

分片序号数据部分长度片偏移(值)片偏移(实际字节)MF 位分片总长度(头部 + 数据)
11480 字节00×8=0120 + 1480 = 1500 字节
21480 字节185185×8=1480120 + 1480 = 1500 字节
320 字节370370×8=2960020 + 20 = 40 字节

3. 组装逻辑(接收方侧)

  • 按 ID 分组:3 个分片的 ID 相同,归为一组;
  • 按片偏移排序:分片 1(0)→ 分片 2(185)→ 分片 3(370);
  • 完整性检查:分片 3 的 MF=0(最后一个分片),且数据总长度 = 1480+1480+20=2980 字节(与原始数据长度一致);
  • 拼接数据:0~1479 字节(分片 1)→ 1480~2959 字节(分片 2)→ 2960~2979 字节(分片 3),还原原始数据,再加上原始 IP 头部,传递给上层协议。

常见问题解答

1. 接收方如何得知报文被分片?

两种判断依据:

  • 分片的 MF 位 = 1(表示还有后续分片);
  • 片偏移值>0(表示当前分片不是原始报文的起始部分)。只要满足其一,即可判定为分片。

2. 接收方如何得知分片收全了?

当收到 “MF=0” 的最后一个分片后,通过以下公式验证:所有分片的数据长度之和 = 最后一个分片的片偏移 ×8 + 最后一个分片的数据长度→ 例:1480+1480+20 = 370×8 + 20 = 2960 + 20 = 2980 字节(与原始数据长度一致),则判定收全。

3. 接收方如何组合形成完整报文?

  • 按 “ID + 源 IP + 目的 IP + 协议” 分组;
  • 按片偏移升序排序;
  • 连续拼接所有分片的数据部分;
  • 用原始报文的核心字段(版本、源 IP、目的 IP 等)构建完整 IP 头部,最终形成原始 IP 数据报。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询