网站时好时坏,ping 一下却全是绿的这种最让人抓狂的情况,其实八九不离十出在路径中间。ping 只告诉你「我这台机器到某个地址通不通」,而线路好不好,取决于数据包一路走过的十几个路由器:中间哪一跳在丢、哪一跳只是不回 ICMP、回程走的是不是精品线路,这些都得看路径报告才能说清。给海外服务器做线路诊断,最常用的工具就是 MTR,它是 traceroute 加持续探测的合体,能把整条路径每一跳的丢包率和往返时间都列出来。
如果你正在排查海外线路质量,或者想先挑一台路径干净的机器把环境跑起来,可以先看看这两家的线路说明和技术参数:六六云(CN2 GIA / 9929 精品回程线路)、V.PS(自有 ASN 与对等互连路由),先看清回程走的是哪条骨干网,再谈机器配置。

一、先分清 MTR 报告里的三个数字
MTR 每一行有四列:Loss%(丢包率)、Snt(发出的探测包数)、Recv(收到的回应数)、Last(最近一次往返时间),最后一列是 Avg / Stv / Jitter,也就是平均延迟、标准差和抖动。看报告别一上来就盯丢包率,先看 Snt 和 Recv 的绝对差:丢了 2 个包和丢了 200 个包都是「5%」,但含义完全相反。样本量太小的时候,5% 很可能只是某个探测包碰巧撞上了路由器忙的那么一瞬间。
第二个要看的,是 Stv(标准差)。一行显示 avg 85ms、stv 3ms,说明这条路径很稳;avg 85ms、stv 40ms,说明延迟在剧烈波动很多用户体感「网站一会儿快一会儿慢」,根源就在这。真正影响业务体验的往往不是那点平均延迟,而是标准差。

二、丢包有三种形态,只有一种值得紧张
第一种是终点跳丢包:前面十几跳 loss 全是 0,只有最后一跳 loss 涨到 3% 或 5%。这说明路径是通的,问题出在目标服务器本身或者它的上游可能是服务器带宽跑满、防火墙限速 ICMP、也可能是目标机器回包能力不足。这种丢包基本无法通过换线路解决。
第二种是中间某一跳丢包,但后面的跳又是 0。这种情况经常被误判成「线路烂」,其实更常见的原因是那一跳的路由器对 ICMP 限速了:它转发数据包没问题,只是对 ping 的回应慢,被顺手丢掉了。判断方法是看丢包点有没有规律性如果是间歇性、时有时无,多半是限速;如果是从某一跳开始,后面每一跳都稳定保持同一个丢包率,那才更接近真实的路径丢包。
第三种是从某跳开始,后面全部 100%。这条不用查了,说明路径断了,不是线路质量问题是彻底不通。此时能做的只有换目标 IP、换端口,或者联系机房。
三、那三个问号(???)才是 MTR 的关键
MTR 报告里最容易被跳过、也最有信息量的,就是某一行末尾的 ???,它的含义是「这一跳在 TTL 超时后没有回送 ICMP 超时报文」。新手往往把问号当成丢包,其实问号和丢包是两回事:丢包是「我不回你」,问号是「我压根不搭理你」。很多骨干路由器和云厂商的网关对 ICMP TTL 超时报文默认不响应,尤其是 IPv4 的第一跳,它只负责把你的包转发出去,并不关心你的 traceroute 探针。
那问号出现时怎么判断后面还通不通?看两点:一是问号之后的跳如果又有回应并且丢包是 0,说明数据包确实穿过了这一跳,问号只是这一跳不说话;二是如果 MC 列(丢包计数)从问号跳开始持续增长,那才是真丢包。MTR 默认发的是 ICMP Echo,很多机房会限速甚至屏蔽它,这时更稳的做法是改用 TCP 探测:mtr --tcp --port 80 -r 目标IP,用真实业务端口去试探,能大幅减少问号和假丢包带来的误判。

四、回程和去程,必须分开测
很多人拿着 mtr 跑一遍就下结论,这有个致命问题:你从本地到服务器测的是去程,服务器回你才是回程,而国内用户真正卡的是回程。要看回程,得登录到服务器上反过来跑:mtr -r 你本地的公网IP。两边的路径往往完全不一样去程走 CN2,回程被丢到普通的 163 骨干,这就是典型的「商家说三网 CN2,你测却不像」的情况。
读路径时看 ASN 归属最直观:AS4809 是电信 CN2,AS4134 是电信 163 骨干(AS4134 下挂的 9929 是电信精品网),AS4837 是联通骨干,AS58807 和 CMIN2 是移动的新一代骨干,AS9929 则要看它挂在哪一层。一条回程如果在境内段出现 AS4134、AS4837 这类普通骨干,说明它没走精品线路;晚高峰时段这些骨干的拥塞就是丢包和延迟抖动的主要来源。
顺便提一句,如果你想同时盯多台机器的连通情况,用 深蓝群Ping 这类多服务器断线与网络质量检测工具一次排开看,比一台台登录进去跑要省事得多,也更容易看出是「全网都抖」还是「就这一台抖」。
五、晚高峰到底该怎么测才有意义
单次快照没有参考价值。我的做法是:选 20:0023:00 的窗口,用 mtr -rw -c 100 --interval 1 连跑几分钟,重点盯三处第 2 跳(本地接入是否正常)、路径中段出现 100% loss 的那一跳(谁掐了你的包)、以及终点跳的 Avg / Stv。
还有两个细节很容易被忽略。一是去程和回程要分时段各测一次,如果只测白天,看到的往往是一台线路还不错但晚上就崩的机器。二是区分「限速」和「丢包」:限速的表现是延迟曲线平稳但吞吐被卡住,丢包的表现是延迟出现毛刺、RTT 出现跳变,一个用 iperf3 看带宽上限,一个看 RTT 抖动,工具不同,结论也不同。

六、写在最后
MTR 报告的价值不在于「看到几个问号」,而在于用它把「线路好」这个模糊说法拆成可验证的三件事:哪一跳在丢、丢的是 ICMP 回应还是真实数据包、回程走的是哪条骨干网。这三件事理清了,「这家线路到底行不行」就有了答案,而不是靠销售的一句「CN2 GIA 直连」。
再补一句实操:判断线路前先确认目标端口是通的、确认 ICMP 没被机房屏蔽,然后在晚高峰实测。一台白天跑分漂亮、晚上八点 RTT 抖成筛子的服务器,对做站的人来说没有任何意义。


喜欢
顶
难过
囧
围观
无聊



