如何看懂路由追踪:跳数、星号与延迟详解 | Check Host

通俗解读 traceroute 输出:每一跳代表什么、为什么有些显示星号,以及如何判断网络路径真正中断在哪里。

路由追踪(traceroute)会列出数据包前往主机途中经过的每一台路由器,以及每台路由器的响应时间。它是回答"到底断在哪里?"的最佳工具——但它的输出很容易被误读。

路由追踪的原理

每个 IP 数据包都带有一个 TTL(生存时间),每经过一台路由器就减一。减到零时,路由器丢弃数据包并返回一条错误信息。traceroute 依次发送 TTL 为 1、2、3……的数据包,这样路径上的每台路由器就会依次暴露出来。输出中的每一行就是一跳:路由器的地址、主机名(如果有)以及往返时间。

怎么看每一行

星号通常不是问题

一行 * * * 表示该路由器没有及时响应。很多路由器会限制或忽略 traceroute 探测包,但仍正常转发流量。只要后面的跳有响应,这些星号就无关紧要。只有星号一直持续到最后,才说明真的断了——断点就在最后一个有响应的跳之后。

延迟突然升高——并且一直很高

中间某一跳单独变慢往往说明不了什么:路由器以低优先级响应 traceroute。关键在于新增的延迟是否延续到之后的所有跳。如果第 7 跳从 20 ms 跳到 150 ms,之后所有跳也都在 150 ms 左右,那么慢的链路就在第 6 跳和第 7 跳之间。这种幅度的跳升通常意味着路径跨越了大洋——对于另一个大洲的主机来说是正常的。

ICMP、UDP 还是 TCP?

防火墙对它们的处理各不相同。经典的 Unix traceroute 使用 UDP,Windows 的 tracert 使用 ICMP,而发往 443 端口的 TCP traceroute 看起来就像普通的网页流量,因此最有可能穿过严格的防火墙到达主机。在线路由追踪可以让你选择协议和端口。

为什么一次路由追踪不够

互联网路由是非对称的,而且因地区而异:从德国出发的路径和从日本出发的路径毫无共同之处。同时从多个国家运行路由追踪,可以看出故障是某个运营商的局部问题,还是靠近目标的问题。如果所有地点都停在同样的最后几跳,问题就在主机附近。如果只有一个地区失败,那就是该地区的路由或互联互通问题。

配合 Ping 使用

路由追踪显示路径;Ping 测试显示连接在多个数据包中的稳定程度。两者结合使用:用 Ping 发现丢包,用路由追踪定位丢包。我们的延迟与丢包指南介绍了哪些数值属于正常。