ping 的包大小参数
ping 默认只发很小的探测包,真正的链路问题往往在大包上才暴露。iputils 的 ping 用 -s 指定 ICMP 载荷字节数(不含 8 字节 ICMP 头与 20 字节 IP 头),Windows 下对应参数是 -l。改变载荷大小,等于顺着包长这一维给链路做体检:小包正常、大包丢,基本可以锁定 MTU 或中间设备对分片与超大包的处理。
为什么看包长最有价值
TCP 建连与 DNS 查询这类交互都是小包,所以「网页能打开」并不代表链路健康;一旦进入数据传输阶段,包变大就会撞上路径上最小的一跳 MTU。把包长从几十字节加到两千字节以上做梯度测试,能把「协议栈问题」「路径 MTU 问题」「中间设备限速/丢弃」三类原因分开,比反复重装服务高效得多。
基本信息
| 适用平台 | Linux(iputils ping)、Windows(ping -l)、网络设备 ping |
|---|---|
| 语法 | ping -s <载荷字节> -c <次数> 目标 |
| 关键选项 | -s 载荷大小、-M do 禁止分片、-c 次数、-W 超时 |
| 权限要求 | 普通用户即可;小于最小 ICMP 大小时需 root,实践中很少用 |
大小梯度测试
大小梯度测试
ping -c 4 -s 56 10.0.0.5 # 常规小包,等价于默认行为
ping -c 4 -s 1000 10.0.0.5 # 中大包,多数链路应无压力
ping -c 4 -s 1472 10.0.0.5 # 1472+28=1500,以太网不分片的载荷上限
ping -c 4 -s 2000 10.0.0.5 # 超过 1500:未设 DF 时将被分片
ping -c 4 -s 8000 10.0.0.5 # 大包分片压力,观察丢包与延迟抬升输出与口径读法
| 项目 | 含义 | 怎么看 |
|---|---|---|
| 64 bytes from 中的数字 | 等于 -s 值加 8 的 ICMP 头 | 核对是否与预期一致,防止参数写错 |
| 链路总长度 | -s 值加 8 的 ICMP 头,再加 20 或 40 的 IP 头 | 超过 1500 就要考虑分片 |
| 分片临界值 | 1472 是以太网 IPv4 不分片的载荷上限 | 从 1472 往下二分可定位路径 MTU |
| icmp_seq 是否连续 | 序号跳号说明中间丢包 | 与 loss 百分比对照看规律性 |
| time 一栏 | 往返时延 | 大包时延显著抬升说明链路或设备排队 |
典型使用场景
- 网页能打开但文件上传卡住:用包长梯度确认是否为路径 MTU 问题
- VPN 或隧道建好后业务时通时断:用大包测试验证封装后是否超出路径 MTU
- 云主机跨可用区访问变慢:对比不同包长的时延与丢包,判断是带宽还是 MTU
- 更换中间设备后做验收:用固定包长做前后对比,形成可量化的基线
- 与厂商沟通故障:把包长与丢包率的对应关系一并给出,比只描述现象有用
「小包通、大包不通」几乎等于 MTU 或分片链路问题;下一步用 ping -M do 从 1472 往下二分,直到找到能通过的最大包长,这个值就是路径 MTU。
IPv6 链路的最小 MTU 是 1280,且中间设备不允许分片,用 IPv4 的 1472 经验值直接套用会得出错误结论;IPv6 下应围绕 1232 这类保守值测试。