traceroute - 绘制数据包的旅程

如果说 ping 检查的是"能否到达目的地",那么 traceroute 可视化的是"经过哪条路径到达目的地"。当你访问 IP 确认时,你的数据包会经过数十个网络设备,从家用路由器经过 ISP、IX (互联网交换点)、海底光缆到数据中心。traceroute 显示沿途每一跳 (中继点) 的 IP 地址和延迟。

TTL 技巧 - 巧妙的机制

traceroute 巧妙地利用了 IP 数据包中的 TTL (Time To Live,生存时间) 字段。

TTL 是一个计数器,每经过一个路由器就减 1。当 TTL 减到 0 时,该路由器丢弃数据包并向发送方返回 ICMP Time Exceeded 消息。这个机制原本是为了防止数据包在网络上无限循环。

traceroute 反其道而行之:

  1. 发送 TTL=1 的数据包 → 在第一个路由器 TTL 减为 0,返回 ICMP Time Exceeded → 第 1 跳的 IP 地址和延迟被揭示
  2. 发送 TTL=2 的数据包 → 在第二个路由器 TTL 减为 0 → 第 2 跳被揭示
  3. 依次将 TTL 增加到 3、4、5……重复直到到达目的地

"每次将 TTL 加 1"这个简单的想法,使网络路由可视化成为可能。

traceroute 与 tracert - Unix 和 Windows 的差异

在 Unix/Linux/macOS 上命令是 traceroute,在 Windows 上是 tracert。除了名称不同,默认行为也有差异。

  • Unix traceroute:默认使用 UDP 数据包。向目标端口 33434 开始发送,每次递增。到达目的地时返回 ICMP Port Unreachable
  • Windows tracert:默认使用 ICMP Echo Request。由于使用与 ping 相同的协议,更容易被阻止 ICMP 的防火墙影响

Unix traceroute 可以用 -I 选项切换到 ICMP 模式,用 -T 切换到 TCP 模式。在防火墙阻止 UDP 或 ICMP 的环境中,TCP 模式 (端口 80 或 443) 很有效。

解读 traceroute 输出

典型的 traceroute 输出如下:

1 192.168.1.1 1.2 ms 0.9 ms 1.1 ms
2 10.0.0.1 5.3 ms 4.8 ms 5.1 ms
3 203.0.113.1 12.4 ms 11.9 ms 12.2 ms
4 * * *
5 198.51.100.1 85.3 ms 84.7 ms 85.1 ms
6 93.184.216.34 90.2 ms 89.8 ms 90.5 ms
  • 第 1 跳:你的家用路由器。延迟约 1 毫秒,本地网络通信
  • 第 2-3 跳:ISP 网络内的路由器。延迟逐渐增加
  • 第 4 跳 "* * *":该路由器被配置为不返回 ICMP Time Exceeded。数据包正在通过,但没有响应。这不是故障
  • 第 5 跳:延迟急剧跳升 (12 ms → 85 ms)。这很可能表示穿越了海底光缆
  • 第 6 跳:目标服务器

每一跳进行三次测量,因为网络延迟会波动,多次测量可以提高可靠性。

通过 traceroute 看到的"互联网地理"

traceroute 的结果可以揭示数据包的物理路径。

  • 延迟突然飙升:穿越洲际海底光缆的跳数会出现数十毫秒的延迟增加。东京到洛杉矶通常增加约 50-60 毫秒,东京到伦敦约 100-120 毫秒
  • 主机名中的城市名:许多 ISP 和运营商在路由器主机名中包含城市名。tky (东京)、lax (洛杉矶)、ams (阿姆斯特丹) 等缩写揭示了数据包的地理路径
  • AS 号traceroute -a (Linux) 显示每一跳的 AS (自治系统) 号。AS 号揭示了数据包正在穿越哪个组织的网络

traceroute 的局限性和注意事项

  • 非对称路由:去程和回程数据包可能走不同的路径。traceroute 只显示去程路由
  • MPLS 隧道:当 ISP 使用 MPLS (多协议标签交换) 时,隧道内的跳数可能不可见
  • 负载均衡器:多次对同一目标运行 traceroute 可能显示不同路由,因为负载均衡器将数据包分配到不同路径
  • 速率限制:当路由器对 ICMP Time Exceeded 响应进行速率限制时,显示的延迟可能高于实际值

总结

traceroute 是一个利用简单的 TTL 机制来可视化数据包路由的优秀工具。试着对你在 IP 确认上看到的 IP 地址运行 traceroute,你会看到数据包经过了哪些 ISP、城市和海底光缆。亲眼看到互联网"地图"的体验,将加深你对网络的理解。

相关术语

IP 地址 traceroute 在每一跳显示的路由器和服务器的标识符。 ISP traceroute 前几跳中出现的互联网服务提供商网络。 延迟 每一跳的响应时间。穿越海底光缆时会急剧飙升。 BGP 决定 traceroute 中可见路径的 ISP 间路由交换协议。 防火墙 阻止 ICMP 会导致 traceroute 结果中出现 "* * *"。