1. 现象解析:ICMP分片包的头部信息分布特性
当我们在网络抓包分析中观察ICMP协议的分片传输时,会发现一个有趣的现象:只有第一个分片包(Fragment)携带完整的ICMP头部信息,后续分片仅包含数据部分。这种设计并非ICMP独有,而是IP分片机制的通用特性。理解这个现象需要从IP层分片原理说起。
IP协议在设计时就考虑到了不同网络MTU(最大传输单元)的差异。当IP数据报长度超过路径MTU时,路由器会执行分片操作。分片过程遵循以下规则:
- 原始IP数据报被分割为多个适合MTU大小的分片
- 每个分片都复制原始IP头部(包含源/目的IP等基础信息)
- 传输层协议头(如ICMP头部)仅保留在第一个分片
- 后续分片通过Fragment Offset字段标识数据位置
以ICMP Echo Request为例,当发送一个3000字节的ping包(假设MTU=1500)时:
- 第一个分片:20字节IP头 + 8字节ICMP头 + 1472字节数据
- 第二个分片:20字节IP头 + 1480字节数据
- 第三个分片:20字节IP头 + 剩余数据
关键点:接收端依赖IP头中的Identification字段将所有分片重组为完整数据报,因此传输层头只需在第一个分片出现
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术原理:IP分片机制深度剖析
2.1 IP分片头部字段解析
IP头部中有三个关键字段控制分片行为:
- Identification(16位):唯一标识属于同一数据报的所有分片
- Flags(3位):
- Bit 0: 保留位
- Bit 1(DF): 禁止分片(Don't Fragment)
- Bit 2(MF): 更多分片(More Fragments)
- Fragment Offset(13位):指示当前分片数据在原始数据报中的偏移量(单位8字节)
分片过程示例:
- 原始ICMP数据报:总长度3028字节(IP头20 + ICMP头8 + 数据3000)
- MTU=1500时:
- 分片1:1480字节数据(20+8+1472),MF=1, Offset=0
- 分片2:1480字节数据(20+1480),MF=1, Offset=185 (1472/8)
- 分片3:60
