插件窝 干货文章 IP数据报的分片和组装原理是什么

IP数据报的分片和组装原理是什么

分片 字节 偏移 数据 529    来源:    2025-04-22

IP数据报的分片和重组是网络层(IP协议)的核心功能之一,用于处理数据报在传输过程中因MTU(最大传输单元)限制而需要拆分的场景。以下是详细原理和过程分析:


1. 分片(Fragmentation)

当IP数据报长度超过传输路径中某链路的MTU时,路由器会将其分片为多个更小的数据报。分片过程遵循以下规则:

关键字段控制分片

  • Identification(标识符):16位,同一数据报的所有分片共享相同值,用于重组时识别属于同一原始数据报。
  • Flags(标志位):3位
    • DF(Don't Fragment):若置1,则禁止分片(若MTU不足,丢弃并返回ICMP错误)。
    • MF(More Fragments):除最后一片外,其他分片均置1,表示后续还有分片。
  • Fragment Offset(片偏移):13位,以8字节为单位,表示当前分片在原始数据报中的位置(例如,偏移值5对应原始数据中的第40字节)。

分片过程

  1. 计算分片数量

    • 有效载荷长度 = MTU - IP头部长度(通常20字节)。
    • 分片数量 = ⌈(原始数据报长度 - 头部长度) / (MTU - 头部长度)⌉。
  2. 生成分片

    • 每个分片包含独立的IP头部(复制原始头部,修改相关字段)。
    • 分片数据长度必须为8的整数倍(因偏移以8字节为单位)。
    • 最后一个分片的MF标志置0,其余置1。

示例
原始数据报长1500字节(1480字节载荷 + 20字节头部),MTU=500字节:
- 分片1:480字节载荷(偏移0,MF=1)
- 分片2:480字节载荷(偏移60,MF=1)
- 分片3:520字节载荷(偏移120,MF=0)


2. 重组(Reassembly)

目标主机收到分片后,根据IP头部字段重组原始数据报:

重组规则

  1. 标识符匹配:所有分片的Identification字段相同。
  2. 排序依据:按Fragment Offset升序排列。
  3. 完整性检查
    • 首个分片偏移必须为0。
    • 最后一个分片的MF=0。
    • 中间分片的偏移连续且无重叠。

重组过程

  1. 缓存分片:收到分片后暂存,等待其他分片。
  2. 超时机制:若在规定时间(通常30-60秒)内未收到全部分片,丢弃所有分片并可能发送ICMP超时报文。
  3. 重组验证:检查分片覆盖范围是否完整(从0到最终偏移+长度)。

3. 关键问题与注意事项

  • 性能开销:分片增加路由器处理负担,重组消耗接收端资源。
  • 避免分片
    • 应用层可通过Path MTU Discovery(PMTUD)动态探测路径最小MTU。
    • 对UDP等协议,建议应用层限制报文大小(如IPv4下UDP不超过1472字节)。
  • 安全风险:分片攻击(如重叠分片)可绕过防火墙规则,需在重组时严格校验。

4. 典型场景示例

  • 以太网(MTU=1500)PPPoE(MTU=1492):若原始数据报长1500字节,需分片为1492-20=1472字节有效载荷的分片。
  • IPv6差异:IPv6仅允许源端分片,路由器不分片(若MTU不足则返回ICMPv6 Packet Too Big报文)。

通过上述机制,IP层实现了数据报的透明分片与重组,确保大数据块能跨异构网络传输。实际应用中应尽量通过PMTUD或协议设计避免分片,以提升效率。