本文概览
本文主要介绍 IPv4 分片与重组机制,包括:
- 分片的基本概念和原因
- 分片的计算方法
- 分片可能带来的问题
- 现代网络中的替代方案
IPv4 分片与重组
每个链路都受到它可以在单个 IP 数据包中传送的字节数量的限制。这个限制被称为最大传输单元(MTU,Maximum Transmission Unit)。当 IP 数据包的大小超过链路的 MTU 时,路由器会将数据包分成多个较小的片段,这个过程称为分片(Fragmentation)。
分片的计算方法
-
MTU 限制
- 以太网 MTU:1500 字节
- PPPoE MTU:1492 字节
- 其他链路可能有不同的 MTU 值
-
分片字段
- Identification(标识):用于识别属于同一数据包的所有分片
- Fragment Offset(分片偏移):表示分片在原始数据包中的位置
- More Fragments(更多分片):标识是否还有后续分片
- Total Length(总长度):分片后的数据包大小
-
分片大小计算
- 每个分片的大小 = MTU - IP 头部大小(20字节)
- 最后一个分片可能更小
- 分片偏移量 = 分片位置 / 8
分片可能导致的问题
-
性能影响
- 增加路由器处理负担
- 增加端到端延迟
- 降低网络吞吐量
-
可靠性问题
- 分片丢失导致整个数据包重组失败
- 分片乱序到达影响重组效率
- 防火墙可能过滤分片数据包
-
安全风险
- 分片攻击(Fragment Attack)
- 分片重叠攻击
- 分片超时攻击
分片的替代方案
-
路径 MTU 发现(PMTUD)
- 源主机主动探测路径 MTU
- 避免不必要的分片
- 提高传输效率
-
TCP 分段
- 在传输层进行分段
- 更可靠的重传机制
- 更好的拥塞控制
-
现代网络优化
- 使用更大的 MTU(如巨型帧)
- 网络设备优化
- 协议栈优化
-
IPv6 改进
- 只在源端进行分片
- 简化分片头部
- 更好的分片管理机制
分片重组机制
-
重组过程
- 接收端根据 Identification 字段识别属于同一数据包的分片
- 使用 Fragment Offset 字段确定分片的顺序
- 通过 More Fragments 字段判断是否收到所有分片
- 按照正确的顺序重组原始数据包
-
重组超时
- 通常设置 30-60 秒的重组超时时间
- 超时后丢弃所有未完成重组的分片
- 触发源端重传整个数据包
-
重组缓冲区管理
- 需要维护重组队列
- 处理内存分配和释放
- 防止缓冲区溢出攻击
-
重组优化策略
- 预分配重组缓冲区
- 使用哈希表加速分片查找
- 实现分片缓存机制
- 支持并行重组处理
实际应用建议
-
网络配置
- 合理设置 MTU 大小
- 启用 PMTUD
- 配置适当的分片超时时间
-
性能优化
- 避免不必要的分片
- 使用 TCP 分段代替 IP 分片
- 考虑使用巨型帧(Jumbo Frames)
-
安全考虑
- 配置防火墙规则处理分片
- 监控异常分片行为
- 实施分片攻击防护
-
故障排查
- 使用网络分析工具检查分片
- 监控分片重组失败率
- 分析分片相关性能问题