PMTUD 与黑洞问题
路径 MTU 发现(PMTUD)依赖两个条件:发送端给报文打上 DF 位禁止分片,中间设备遇到超过自身 MTU 的报文时丢弃并回报一个「需要分片」的 ICMP 差错报文;发送端据此降低报文长度重试。问题在于很多网络出于安全考虑会拦截 ICMP,一旦这个反馈报文回不到发送端,大包会被静默丢弃,形成典型的大包黑洞:ping 通、登录正常(小包),但传输文件、加载页面或建立 TLS 握手时超时。定位方法是分档探测找到可通过的最大包长,缓解手段通常是调整隧道 MTU 或在设备上做 MSS 钳制。
基本信息
| 机制 | DF 位加 ICMP 需分片反馈共同完成 |
|---|---|
| 典型症状 | 小包正常、大包超时,握手卡住 |
| 常见成因 | 中间设备拦截 ICMP 差错报文 |
| 探测方法 | 用 DF 位逐档加大包长 |
| 缓解手段 | MSS 钳制、调整隧道 MTU |
| 常见高发位置 | IPsec 隧道、GRE 隧道、PPPoE 链路 |
典型使用场景
- VPN 隧道内网页打不开或大文件传输中断
- TLS 握手卡在证书交换阶段(报文较大)
- 跨运营商链路间歇性大包失败
- 新上线隧道验收:验证不同包长的可达性
- 安全策略评审:评估拦截 ICMP 对业务的实际影响
定位与缓解
定位与缓解
# 分档探测,找到失败的分界
ping -M do -c 3 -s 1200 10.2.2.1
ping -M do -c 3 -s 1400 10.2.2.1
ping -M do -c 3 -s 1450 10.2.2.1
# Cisco:在隧道接口做 MSS 钳制
interface Tunnel100
ip tcp adjust-mss 1360
# 查看接口 MTU 与隧道开销
show interfaces Tunnel100 | include MTU
# 华为侧对照
display interface Tunnel0 | include MTU现象与处置
| 现象 | 原因 | 处置 |
|---|---|---|
| 小包通大包不通 | ICMP 反馈被拦 | MSS 钳制或调小隧道 MTU |
| 某档包长起失败 | 路径某段 MTU 更小 | 按失败分界设置 MTU |
| 仅特定业务异常 | 该业务报文较大 | 评估该业务端设备 MSS 设置 |
| 隧道建立即异常 | 隧道开销未计算 | 按封装开销重新计算 MTU |
MSS 钳制作用于经过设备的 TCP 会话,对 UDP 或其他协议无效;UDP 大包问题需要从应用侧或 MTU 层面解决。
隧道模式下 IPsec 会增加外层 IP 头与 ESP 头尾开销,计算 MTU 时要把这些字节扣掉,否则仍会出现大包失败。