一、场景:那个让人血压升高的下午
运维群里弹来一张截图,某业务页面打开转圈 3 秒。你淡定连上跳板机,ping 了一下目标域名,返回 28ms、30ms、29ms,零丢包。
"网络没问题,看后端去。"
你打完这句话,DBA 查了慢查询,前端查了资源加载,结论是都没问题。
然后你发现,你被自己坑了。
二、原理:Ping 到底测了什么
ping 用的是 ICMP 协议,工作在网络层。本机发一个 ICMP Echo Request,服务器回一个 ICMP Echo Reply,算个往返时间就是你在屏幕上看到的那个毫秒数。
它只回答两件事:目标 IP 在不在,纯控制报文来回跑多快。
ICMP 不涉及端口、不建 TCP 连接、不握手 TLS、不触发任何业务代码。所以 Ping 值只是物理加路由底噪,不是网页速度。
三、浏览器打开网页真实走了几跳
用户在 Chrome 里敲下回车,到看到第一个字节,链路大致是:
DNS 解析,域名转 IP,冷查 10 到 120ms。
TCP 三次握手,一个 RTT。
TLS 握手,TLS1.2 要两个 RTT,TLS1.3 只要一个 RTT。
HTTP 请求到服务端处理,查数据库、渲染、读缓存,这部分完全不可控。
TTFB 等于上述全部之和,也就是 DNS 加 TCP 加 TLS 加服务端处理加末跳网络 RTT。
Ping 只约等于最后一项末跳网络 RTT 的一部分,且 ICMP 在不少运营商和云厂商会被降级调度,ICMP 的 RTT 甚至比真实 TCP 的 RTT 还低。你看到的 28ms,可能是最优情况下的控制报文延迟,不是用户实际体验。
四、实操:用分段计时拆穿 Ping 骗局
本地可以用 curl 的 w 参数输出各阶段耗时,拿到一个本地基线。但单机数据代表不了全国用户,需要用分布式拨测平台看多节点分段。
在拨测平台填入目标 URL,选电信、联通、移动、教育网多节点,高级项里指定 DNS,UA 切到移动端,勾上完整截图。平台会按浏览器真实顺序逐段报时:DNS 解析多少 ms,TCP 建连多少 ms,TLS 握手多少 ms,TTFB 多少 ms,完全加载多少 ms。
五、判读矩阵:一眼定位谁拖后腿
Ping 28ms 加 TCP 建连 30ms 加 TLS 40ms 加 TTFB 280ms,说明网络正常、后端慢,下一步查慢 SQL 和缓存命中率。
Ping 28ms 加 TCP 建连 120ms 加 TLS 150ms,说明中间链路对 TCP 降级或跨网绕路,下一步查 CDN 调度和路由追踪。
Ping 28ms 加 DNS 90ms,说明 Local DNS 烂或没预热,下一步换公共 DNS 再测。
广东移动 TTFB 300ms、北京联通 60ms,说明 CDN 没命中移动边缘,下一步调 CDN 调度策略。
Ping 全丢但 443 端口 TCPing 通,说明禁了 ICMP 服务活着,别慌正常。
六、避坑:运维老鸟也会犯的 3 个错
坑 1:把 Ping 当 SLA 汇报。单机 Ping 只代表你到服务器的网络层延迟,不代表新疆移动用户、教育网用户的体验,多节点拨测才是真实 SLA。
坑 2:Ping 丢包 0 百分比就以为没丢包。ICMP 优先级高,TCP 微突发丢包 ICMP 看不出,用 curl 的 w 参数看 TCP 重传,或者用 MTR 逐跳看。
坑 3:Ping 高就加带宽。带宽不解决 RTT,物理距离和路由绕路只能靠 CDN 就近收敛,加带宽让延迟从 28ms 变成 28ms,一分钱不值。
七、总结
Ping 是个好工具,但它只回答 IP 层通不通,不回答用户为什么觉得慢。
排障的正确顺序是:先用 Ping 确认基础连通性,再用 TCPing 确认端口可达,尤其是禁 ICMP 的场景,然后用分段拨测定位 DNS、TCP、TLS、TTFB 哪段异常,最后对应层去改,换 DNS、调 CDN、砍慢查询、开 TLS1.3。
下次再有人问网页为什么慢,别甩 Ping 截图了,甩分段计时表,谁也挑不出毛病。
附:上述分段计时用分布式拨测平台均可复现,我用的快快测 kkce,多运营商节点覆盖还行,免费版够日常排障用。你们有更好的工具欢迎评论区交流。