IPv6 没有分片,MTU 更敏感
IPv4 允许路由器分片,IPv6 把分片的责任完全交给源端,中间设备遇到过大的包直接回 Packet Too Big 并丢弃。
问题在于很多防火墙把 ICMPv6 也一起禁了,源端收不到 Packet Too Big,PMTUD 失效,表现就是“小包通、大包卡”。
排查:
ping -6 -M do -s 1452 example.com
从 1452 往下试,找到能通的最大值。IPv6 头 40 字节,加上 ICMPv6 的 8 字节,实际负载上限比 IPv4 少。
修法:把接口 MTU 调到 1480 或 1400,或者放行 ICMPv6 的 type 2(Packet Too Big)。禁 ICMPv6 是 IPv6 环境里最常见的自伤操作。