linux下ping诊断丢包核心是确认“有没有丢”和“丢在哪”:ping仅能显示整条链路总丢包率,无法定位节点;必须用mtr -n -r逐跳统计loss%和stdev,才能精准识别过载或异常跃点。

Linux 下用 ping 诊断丢包,核心是看两点:有没有丢、丢在哪。单靠 ping 只能确认整条链路的总丢包率,不能定位故障节点;必须配合参数调整和工具组合,才能高效排查。
基础测试:快速确认丢包是否存在
执行带次数限制的 ping,避免无限发送:
-
ping -c 50 www.baidu.com—— 发 50 个包,适合初步判断 - 关注末尾统计行,例如
50 packets transmitted, 47 received, 6% packet loss,这个百分比就是当前链路的总丢包率 - 若丢包率 > 0%,说明存在异常;若为 0%,但业务仍卡顿,问题可能不在网络层(如 DNS、服务响应慢或本地缓冲区满)
绕过 DNS:排除解析干扰
域名解析失败可能导致“假性丢包”,需直连 IP 验证:
- 先查目标 IP:
dig +short www.baidu.com或nslookup www.baidu.com - 再 ping 对应 IP:
ping -c 20 180.101.49.12(以实际解析结果为准) - 对比两次结果:如果域名丢包而 IP 正常,问题出在本地 DNS 配置或上游解析服务
观察延迟特征:识别抖动与高延迟节点
延迟波动(jitter)和持续高延迟常伴随丢包,影响 TCP 性能:
- 加
-q参数获取统计摘要:ping -c 100 -q www.baidu.com,输出含min/avg/max/mdev,其中mdev(平均偏差)大说明抖动严重 - 若
max明显高于avg(如 avg=25ms,max=850ms),且mdev > 50ms,大概率存在队列拥塞或中间设备处理不均 - 注意 TTL 值:连续 ping 中 TTL 逐步递减(如 64→63→62),可能是路由环路,不是单纯丢包
进阶定位:用 mtr 找出具体哪一跳丢包
丢包必须逐跳分析,ping 不具备该能力,mtr 是唯一可靠选择:
- 执行最小可靠命令:
mtr -n -r -c 30 www.baidu.com,-n跳过 DNS 解析防卡顿,-r输出静态报告 - 重点看每跳的
Loss%列:某跳出现非零值(如 35%),且后续所有跳Loss%持续升高或达 100%,说明问题就在此跳或其上游 - 结合
StDev(标准差)判断稳定性:若某跳Loss% = 0%但StDev > 100ms,说明延迟极不稳定,虽未丢包,但已影响应用











