丢包与时延定位60 条

MTU 黑洞现象判读

PMTUD 依赖 ICMP 反馈:反馈被过滤时大包静默丢失、小包正常(能握手能小请求,大响应卡住),是典型黑洞特征。

黑洞是怎么形成的

路径 MTU 发现依赖中间设备用 ICMP「需要分片」消息告知发送方把包改小。一旦这些 ICMP 被策略过滤,发送方就收不到任何反馈:大于某长度且不允许分片的报文在途中被静默丢弃,而小报文一路正常。于是现象很迷惑人——握手成功、小接口正常,一旦响应体变大就卡住或超时。这种「小包通、大包丢」的组合就是 MTU 黑洞最典型的特征,隧道与叠加封装场景尤其常见。

基本信息

适用平台Linux、Windows、网络设备与隧道链路均可出现
关键字段ip.flags.df、icmp.type == 3 && icmp.code == 4
探测方法Linux 用 ping -M do -s 逐档加大体积;Windows 用带不分片选项的 ping
常见诱因GRE/IPsec/VXLAN 等封装削减可用载荷、中间设备过滤 ICMP

典型使用场景

  • 小接口正常、大响应卡死的接口定位
  • 建立 VPN 或专线后发现部分业务不可用,确认是否封装改变了可用载荷
  • 容器或云网络叠加封装后出现间歇性超时
  • 升级网络设备或调整过滤策略后排查新出现的连接停滞
  • 验证路径 MTU 探测是否被正确放行
  • 为「ping 正常但业务慢」类工单提供可复核的解释

核对步骤

核对步骤
ip.flags.df == 1 && frame.len > 1400        # 捞出不分片的大包
icmp.type == 3 && icmp.code == 4            # 正常时应能看到分片需求通报
# 逐档加大探测体积,找到由通到不通的临界长度
ping -M do -s 1472 <目标>                    # 1500 MTU 下的常用临界探测
ping -M do -s 1400 <目标>                    # 封装的隧道通常需要更小

结果逐项读法

观察结果含义处置方向
小包通、大包无响应典型黑洞特征检查 ICMP 是否被过滤并调整路径 MTU
收到 needs fragmentation探测机制正常工作按提示长度收敛即可,问题在参数不在策略
临界值明显偏小存在封装或隧道按隧道可用载荷设置 MSS 而非物理 MTU
各长度都通但业务仍慢不是 MTU 问题转向窗口、丢包与重传方向排查
TCP 侧通常会自动收敛到更小的报文段长度,表现为「慢」而不是「完全不通」,把这种慢误判为性能问题会绕远路。
用 ping 探测时要注意探测路径与业务路径未必完全一致:策略路由、隧道选择都可能让两者走出不同链路,结论要结合业务侧抓包确认。

易错点

  • 直接用 ping 通不通判断链路健康:ICMP 小包能通不代表业务大包能通,二者 MTU 需求不同
  • 只顾调大设备 MTU:任一段不支持更大的帧,问题依旧,关键路段的能力要逐段确认
  • 把黑洞当作丢包率问题处理:链路质量指标可能完全正常,方向应从策略与封装上找
  • 忽略 ICMP 对可用性的作用:一味过滤所有 ICMP 会让路径 MTU 发现失效,需要保留必要的类型与码点

数据来源与参考

  • RFC 1191(PMTUD)
  • RFC 4821(PLPMTUD)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌