ping仅能测端到端基础延迟和丢包率,必须结合-c限定次数、-n绕过DNS、观察末尾统计行(尤其丢包率与mdev抖动值);真要定位瓶颈需用mtr -n查看逐跳Loss%、Avg及StDev,或hping3测TCP层延迟。

直接看 ping 输出末尾的 rtt min/avg/max/mdev 行,但这个数字本身不说明问题——必须结合丢包率、抖动分布和测试方式才能判断是否真延迟高。
用 ping -c 看基础 RTT 和丢包率
默认不加参数的 ping 会无限发包,脚本里会卡死,人工看也容易漏统计行。必须用 -c 限定次数:
-
ping -c 5 1.1.1.1:发 5 个包,够看趋势又不至于被单次抖动带偏 - 重点不是每行的
time=xx.x ms,而是结尾这行:5 packets transmitted, 5 received, 0% packet loss—— 丢包率比平均值更关键 - 如果出现
Request timeout或Destination Host Unreachable,time=数值就无效了,链路已断 - 别信“平均 20ms”就代表网络好:5 次里有 1 次
time=480 ms,说明存在明显抖动,应用层很可能卡顿
绕过 DNS 直接 ping IP 地址
你 ping www.example.com 超时,不等于网络坏了——可能是本地 /etc/hosts 写错、DNS 缓存污染、或解析服务挂了。必须把 DNS 层和网络层分开验证:
- 先用
dig +short www.example.com或nslookup www.example.com拿到真实 IP - 再
ping -c 5 93.184.216.34(以实际 IP 替换) - 如果域名 ping 不通但 IP 通,问题在 DNS;如果 IP 也不通,才进网络排查流程
- 云主机或容器环境尤其要注意:有些镜像默认禁用 IPv6,
dig返回 AAAA 记录但没开 IPv6 支持,会导致看似解析成功实则连不上
用 mtr -n 定位哪一跳出问题
ping 只告诉你“到目标整体慢”,mtr 才能告诉你“慢在哪一跳”。它本质是持续运行的 traceroute + ping,每跳都给延迟、丢包、抖动数据:
-
mtr -n 223.5.5.5:-n禁用 DNS 解析,避免卡在反向查询上 - 重点关注三列:
Loss%(非 0 就可疑)、Avg(连续 ≥ 100ms 要查)、StDev(标准差 > 30ms 说明抖动大) - 如果某跳
Avg正常但Wrst突然飙到 500ms+,大概率是该节点队列拥塞或做了限速 -
mtr -r -c 20 -n 223.5.5.5 > report.txt:生成静态报告,适合发给运营商或跨团队协作时留痕
当 ping 失效时,改用 hping3 -S 测 TCP 握手延迟
很多生产环境防火墙会放行 HTTP/HTTPS 流量但禁 ICMP,这时 ping 显示超时,其实是假阴性。得换 TCP 层探测:
-
hping3 -c 3 -S -p 443 1.1.1.1:发 3 个 SYN 包,看rtt=值,这是服务端回 SYN-ACK 的单向延迟 - 若
rtt波动极大(比如 5ms → 220ms),说明中间设备(如 WAF、负载均衡)在做深度包检测或限速 -
hping3 -c 3 -2 -p 53 8.8.8.8:对 DNS 用 UDP 模式,验证是不是协议被策略拦截 - 注意:
hping3需要 root 权限;没有安装的话,sudo apt install hping3(Debian/Ubuntu)或sudo yum install hping3(RHEL/CentOS)
真正难搞的延迟,往往藏在“看起来正常”的地方:比如 ping 全绿但 curl 耗时 2 秒,问题可能在 TLS 握手、本地 socket 缓冲区、甚至系统时间不同步导致 TCP 时间戳校验失败。别只盯着一个命令输出。


















