首页/网络/协议速查/MTU 黑洞排查

MTU 黑洞排查

典型症状:小包正常、大包超时;TCP 能建连但卡在传数据;不同网站有的能开有的打不开——都是大包在路径中某段被吞。

协议速查网络更新于 2026-10-13

MTU 黑洞的典型症状

路径 MTU 是整条链路上最小的一跳决定的。当路径中某台设备不允许分片、又无法回送「需要分片」的 ICMP 差错时,超过该尺寸的大包会被静默丢弃:小包(ping、握手)都正常,一旦传输大文件或 TLS 握手携带大证书就卡住。表现为「能登录、能 ping 通,但页面打不开或传文件卡在某个百分比」。

基本信息

本质路径 MTU 变小,且中间设备不回送 ICMP 类型 3 代码 4
常见诱因GRE/IPsec 隧道开销、PPPoE 的 1492、中间防火墙禁用 ICMP、云网络网关行为
本机缓解net.ipv4.tcp_mtu_probing=1 让内核自动降低 MSS 并探测
网关缓解iptables 的 TCPMSS --clamp-mss-to-pmtu,仅对 TCP 生效

分层排查

层面可疑点验证方式
隧道GRE/IPsec 外层开销压缩可用 MTU查两端 MTU 与 MSS 设置
接入PPPoE 场景实际为 1492 而非 1500用大包 ping 逐步试探
中间防火墙禁用 ICMP 导致 PMTUD 失效放行差错类 ICMP 或做 MSS clamp
云网络VPC 网关与负载均衡的分片行为查云厂商文档或提工单确认

定位与缓解

定位与缓解
ping -M do -s 1400 -c 3 host        # 禁分片发 1400 字节载荷,逐步逼近真实 MTU
mtr -rwz host                       # 结合丢包位置判断在哪一跳开始丢
tcpdump -nn -i eth0 'icmp and icmp[0] == 3 and icmp[1] == 4'   # 观察「需要分片」差错
sysctl -w net.ipv4.tcp_mtu_probing=1                           # 自动降低 MSS 并探测
# iptables 网关侧:仅对 TCP 握手做 MSS 收敛
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

典型使用场景

  • VPN 隧道建成后网页打不开但 ping 正常,优先怀疑隧道开销导致 MTU 变小
  • 云主机与本地机房互通时大文件传输中断,检查专线或隧道 MTU
  • TLS 握手偶发失败:证书链较长时超过 MTU 且被静默丢弃
  • 给网关加 MSS clamp 作为快速止血手段,再回头修正真实 PMTU
「能 ping 通但打不开网页」的经典三查顺序是:MTU 黑洞、DNS 解析、TLS 证书。先排除 MTU 往往能最快定位,因为症状与包大小高度相关。
MSS clamp 只是缓解:它只作用于 TCP,遇到 UDP 与 QUIC 流量仍需真实的 PMTUD 能力,根治要么放开 ICMP 差错报文,要么修好路径 MTU 配置。

易错点

  • 为了「安全」全面禁 ICMP:PMTUD 依赖类型 3 代码 4 的差错报文,禁掉之后大包被静默丢弃,故障表现为完全随机
  • 只在客户端调 TCP 参数:路径问题需要链路侧修复,单侧调优只是掩盖症状,换一条路径又会复现
  • 只测小包就宣布链路正常:必须用禁分片的大包测试才能暴露 MTU 黑洞
  • MSS clamp 配在错误的位置(如 OUTPUT 而非 FORWARD):转发链路上的握手包没被收敛,问题依旧存在

数据来源与参考

  • RFC 4821(PLPMTUD)
  • RFC 8899(DPLPMTUD)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌