Q在 Linux 里如何发送比默认更大的 ping 包?我想测试网络是否能正常传输较大的 ICMP 数据包,在 Linux 中应该怎样设置 ping 的包大小?
A使用 ping 的 -s 参数指定数据长度
可以通过 ping 命令的 -s 参数来设置数据部分大小,例如 ping -s 1472 目标IP。需要注意的是,ping 显示的是 ICMP 数据部分长度,不包含 IP 和 ICMP 头部;如果想避免分片,还要结合 MTU 来计算合适的大小。
Q测试大包时 ping 失败,可能是什么原因?我用较大的 ping 包测试连通性时,经常出现丢包或无法到达,这通常是哪里出了问题?
A常见原因包括 MTU 限制、路径分片和防火墙拦截
大包 ping 失败常见于路径 MTU 不匹配、链路中间设备不允许分片,或防火墙对 ICMP 做了限制。可以尝试逐步减小包大小,观察临界值,也可以使用带 DF 标记的 ping 来判断路径是否支持该尺寸的数据包。
Q怎么判断 Linux 网络是否支持不分片传输的大包?我希望确认当前网络路径能否直接传输较大的 ICMP 数据包,不发生分片,应该怎么测试?
A使用带 DF 标志的 ping 进行 MTU 探测
可以使用 ping 的 -M do 选项配合 -s 参数进行测试,例如 ping -M do -s 1472 目标IP。若路径不支持该大小,通常会返回需要分片或报错信息。通过不断调整 -s 的值,可以找到当前路径可承载的最大不分片包大小。