所以你以为你理解 IP 分片?
事实证明,IP 分片和路径 MTU 发现在实践中的可靠性与互操作性远低于 IP 规范所暗示的水平,主要因为路由器、防火墙和中间盒常常出于性能或安全原因丢弃分片或 ICMP 消息。评论者探讨了这如何破坏 VPN、DNS 和其他基于 UDP 的协议,为什么许多系统会尽量避免分片,以及像在途截断或更严格的底层处理这样的替代设计是否本应更好。整场讨论最终将分片框定为一种遗留的、最后手段式的机制,而世界正越来越期望更高层显式地管理数据包大小。
ICMP、MTU 发现与真实世界路由器行为
- 许多网络无法为 IPv4/IPv6 生成正确的 ICMP Time Exceeded / Too Big 消息,通常是由于限速或一刀切的 ICMP 过滤。
- 有人认为这实际上改变了“真实”的标准;也有人将其视为出于成本考虑的工程取舍,以保持路由器稳定。
- 路径 MTU 发现(PMTUD)及其变体被描述为脆弱的,尤其是在中间设备静默丢弃 ICMP 或过大数据包时。
防火墙对分片的处理与攻击故事
- 多条评论描述防火墙丢弃分片,甚至只丢弃第一个分片,导致奇怪的部分流量。
- 分片重组缓冲区可能被用于 DDoS 攻击;大型自动扩展缓冲区加上天真的线性搜索,使一些系统在不可重组分片的洪泛下崩溃。
- 有人指出,直接丢弃所有分片仍然很常见,而且“能用”,因为许多端点实际上并不依赖分片。
关于 IP 分层与分片设计的争论
- 一种讨论观点认为,分片不携带更高层头部是个错误,这样会让过滤和路由更简单。
- 另一些人认为这违背了分层原则:IP 不应该需要理解传输层头部,尽管许多现代路由器已经为了哈希和策略而查看 TCP/UDP。
- 有人提出诸如可配置的“下一头部长度”或通用元数据字段之类的想法,但被认为会为一个很少使用的功能增加硬件复杂性。
提案:用在途截断代替分片
- 一个重要分支讨论探索用路由器将数据包截断到适配下一跳 MTU 并做标记的方式,来替代分片。
- 其宣称的好处包括:一次往返即可完成带内 PMTU 发现、无需依赖 ICMP、可在快速数据路径中实现,并且至少能传递部分信息。
- 批评者指出校验和、协议复杂度、L2 MTU 不匹配、加密,以及已经会被交换机丢弃的过大帧路径等问题。
- 共识是:这个想法很有意思,但并不是完整解决方案;它仍会遭遇许多当今 PMTU 的病症。
当今分片的用途与相关性
- 有人认为分片“从来就没有真正合适的位置”,长期以来都被视为有害;健壮的系统会尽量避免它。
- 也有人为其辩护,指出它适用于受控或嵌入式环境(例如单向链路、受限网络上的 UDP、固定 1500 字节分片的汽车以太网)。
- 现实中的痛点也被提及:VPN(如 WireGuard)会因为封装缩小有效 MTU,而配置错误的路径或 DF 处理会破坏连接。
- 讨论还涉及 DNS 和 DNSSEC:趋势是避免大的 UDP 响应或改用 TCP/其他传输方式,但未来后量子签名可能再次使响应膨胀。
安全检测与重叠分片
- IDS/IPS 系统必须以高速度对分片和段进行重组,通常依赖 FPGA/ASIC。
- 重叠分片是一个已知歧义;标准并未清楚定义优先级。
- 这可能导致安全设备与端点之间不一致,从而使规避技术成为可能。
审查、路由与 VPN 旁支讨论
- 一个旁枝话题探讨了,是否可以通过由内向外的连接以及类隧道行为,绕过封锁出站流量的国家级防火墙。
- 其他人回应说,这类体制本来就允许选择性流量(例如商业流量),审查的重点是基于内容的阻断,而不是绝对隔离。
- 这一线程与分片大体无关;参与者指出,VPN 和隧道无论连接方向如何,工作方式都类似。
API、标准与文档中的怪异之处
- 对
IP_MTU_DISCOVER行为和 DF 位语义的困惑被提出来;人们认为文档的表述含糊,而实际内核行为则更明确。 - 还出现了关于在已分片数据包上设置 DF 的问题;讨论指出基础规范并未禁止,但边缘情况和 bug 是需要担心的。
- 有人质疑,在数据包可能走不同路径且 MTU 各不相同时,探测 PMTU 是否有意义;也有人暗示这仍然是目前最好的近似方式。