用ping探测路径MTU需禁用分片、逐步增大ICMP载荷,首次失败前的最大成功载荷+28即为MTU;须先确认基础连通性,注意路径不对称、设备过滤DF包及IPv4/IPv6差异。

用 ping 命令探测网络路径的 MTU 值,核心是发送不同大小的 ICMP 数据包并观察是否分片或丢包。关键在于禁用分片(DF 位),逐步增大包长,直到首次出现“Packet needs to be fragmented but DF set”提示,此时前一个成功通过的尺寸 + 28(IP 头 20 字节 + ICMP 头 8 字节)即为路径 MTU。
确认目标地址并测试基础连通性
先确保能正常通信,避免误判为 MTU 问题:
- 执行 ping -c 4 www.example.com(Linux/macOS)或 ping -n 4 www.example.com(Windows),确认有响应且无丢包
- 若不通,先排查 DNS、路由、防火墙等基础问题,MTU 测试需建立在可达前提下
- 建议使用稳定 IP 地址(如 8.8.8.8)而非域名,排除 DNS 延迟或解析波动干扰
Windows 系统下逐步探测 MTU
Windows 使用 -f(禁止分片)和 -l(指定 ICMP 载荷字节数)参数:
- 从较大值开始试探,例如:ping -f -l 1472 8.8.8.8(载荷 1472 字节 → 总包长 = 1472 + 28 = 1500)
- 若返回“Packet needs to be fragmented but DF set.”,说明该尺寸不可达,尝试更小值(如 1400、1300)
- 若返回“Reply from …”,说明当前载荷可通过;继续增大(每次+10 或 +50),直到首次失败
- 最后一次成功的 -l 值 + 28 即为路径 MTU(例如 -l 1462 成功,-l 1463 失败 → MTU = 1462 + 28 = 1490)
Linux/macOS 系统下探测 MTU
使用 -M do(禁止分片)和 -s(指定 ICMP 载荷字节数):
- 命令示例:ping -M do -s 1472 8.8.8.8(注意:-s 指载荷,不包含 IP/ICMP 头)
- 若提示 “Frag needed and DF set” 或超时(部分中间设备静默丢弃 DF 包),说明已超限
- 成功响应后逐步增大 -s 值(如 1400→1450→1472→1473),定位临界点
- 最终 MTU = 最大成功 -s 值 + 28(同 Windows 逻辑)
注意事项与常见误区
实际探测中易忽略的关键细节:
- 路径不对称:去程和回程可能经过不同链路,MTU 可能不同;建议双向测试(如从 A→B 和 B→A)
- 中间设备策略:某些防火墙或运营商设备会过滤带 DF 标志的 ICMP,导致假性超时,可换用 TCP MSS 探测辅助验证
- IPv4 vs IPv6:IPv6 不允许中间分片,MTU 必须端到端一致;IPv6 下 ping 默认禁用分片,-s 值即对应 MTU(无需加 28)
- 不要混淆 -l(Windows)和 -s(Linux):两者都指 ICMP 数据部分,但 Windows 的 -l 是载荷,Linux 的 -s 也是载荷,单位均为字节,计算方式一致










