当你访问一个网站时,数据并不是直接从你的电脑"跳"到服务器的。它需要经过一系列中间设备——路由器——的转发,就像寄快递一样要经过多个中转站。路由追踪(Traceroute)就是一个能让你看到数据包经过了哪些"中转站"的工具。本文将从 IP 网络的基本原理出发,详细讲解路由追踪的工作机制,以及如何利用它来排查网络问题。
一、数据包是怎么在网络中传输的
要理解路由追踪,首先要了解 IP 网络的基本工作方式。
互联网由无数个网络组成,每个网络都有一些路由器负责将数据包转发到下一个网络。当你从北京访问一个位于洛杉矶的网站时,你的数据包大致会经历这样的旅程:
首先,数据包从你的电脑出发,到达你家路由器(第 1 跳)。然后经过小区汇聚层、城域网,到达你所在城市的运营商骨干网节点(可能是第 3-5 跳)。接着通过省级骨干网、国家级骨干网,到达国际出口(可能是第 6-10 跳)。跨过太平洋的海底光缆,到达美国的接入点(可能是第 11-13 跳)。最后经过美国本土的几级网络转发,到达洛杉矶的目标服务器(可能是第 14-18 跳)。
每一次转发就叫做一"跳"(Hop)。每经过一个路由器,路由器都会根据自己的路由表决定下一步把数据包发往哪里。这个过程就像问路:你到一个路口问"去洛杉矶怎么走",路人告诉你"先往西走到下一个路口",到了下一个路口你再问,直到到达目的地。
二、TTL:路由追踪的关键机制
路由追踪的核心原理依赖于 IP 协议中的一个字段:TTL(Time To Live,生存时间)。
每个 IP 数据包在发出时都会设置一个 TTL 值(比如 64)。每经过一个路由器,TTL 值就会减 1。当某个路由器收到一个 TTL 为 1 的数据包时,它不会继续转发,而是将这个包丢弃,同时向发送方回复一个 ICMP "Time Exceeded"(超时)消息,告诉发送方"你的包在我这里到期了",并附带自己的 IP 地址。
TTL 机制本来的目的是防止数据包在网络中无限循环(比如路由环路导致数据包兜圈子),但路由追踪巧妙地利用了这个机制。
三、路由追踪是怎么工作的
理解了 TTL,路由追踪的原理就很好理解了。它的工作过程如下:
第一轮:TTL = 1。发送一个 TTL 为 1 的数据包。第一个路由器(你的网关)收到后,TTL 减为 0,丢弃数据包,回复 Time Exceeded 消息。你收到这条消息,就知道了第 1 跳路由器的 IP 地址和延迟。
第二轮:TTL = 2。发送一个 TTL 为 2 的数据包。它顺利通过第 1 跳路由器(TTL 减为 1),但在第 2 跳路由器处 TTL 减为 0,被丢弃并回复 Time Exceeded。你就知道了第 2 跳的信息。
第三轮:TTL = 3。同理,你得到了第 3 跳的信息。
如此往复,每次增加 TTL 值,就能"探测"到更远一跳的路由器。直到数据包最终到达目标服务器,服务器不会回复 Time Exceeded,而是正常响应(或回复 ICMP Echo Reply),路由追踪就知道已经到达终点了。
整个过程就像这样:你想知道从你家到公司经过哪些路口,于是你每天出门走得远一点。第一天走到第一个路口就回来,记下路口名字;第二天走到第二个路口再回来;第三天走到第三个路口……直到走到公司,你就把沿途所有路口都记录下来了。
四、Traceroute 的不同实现方式
虽然原理相同,但不同操作系统上的 Traceroute 实现方式有所不同:
Linux/macOS 的 traceroute:默认使用 UDP 数据包,向目标的高端口号(33434 起递增)发送数据。目标收到后因为端口不可达,回复 ICMP Port Unreachable,表示到达终点。也可以加 -I 参数切换为 ICMP 模式。
Windows 的 tracert:默认使用 ICMP Echo Request 数据包(和 Ping 一样),目标收到后回复 ICMP Echo Reply,表示到达终点。
TCP Traceroute:使用 TCP SYN 包来探测。优点是 TCP 流量通常不会被防火墙拦截,能更准确地反映实际 TCP 连接的路由路径。在 Linux 上可以用 tcptraceroute 或 mtr -T 来实现。
五、在 Biuping 上使用路由追踪
在自己电脑上运行 traceroute 只能看到从你自己到目标的路径。但如果你想知道全国各地的用户是走什么路由到达你服务器的,就需要从多个地点发起路由追踪。
打开 Biuping 路由追踪工具,输入目标 IP 或域名。你可以选择从不同省份、不同运营商的节点发起测试。测试完成后会展示完整的路由路径,你可以清楚地看到数据包经过了哪些网络。
如果你还需要 IPv6 网络的路由追踪,可以使用 Biuping IPv6 路由追踪工具。
六、如何读懂路由追踪结果
6.1 识别路由器归属
路由追踪结果中每一跳会显示 IP 地址,有时还会显示主机名(反向 DNS 记录)。通过主机名你通常能判断出一些有用的信息。
比如,主机名中包含 ChinaTelecom 或 chinanet 说明是中国电信的网络;包含 ChinaUnicom 或 cu 是联通;包含 CMNet 或 cmcc 是移动。包含城市代码如 bj(北京)、sh(上海)、gz(广州)可以判断路由器的物理位置。
常见的国际出口标识包括:202.97.x.x 开头的是电信 163 骨干网出口;59.43.x.x 开头的是电信 CN2 出口;223.120.x.x 开头的是移动 CMI 出口。这些信息能帮你判断走的是什么线路。
6.2 分析延迟变化
正常的路由追踪结果中,延迟应该是逐渐递增的(因为路径在变长)。需要重点关注延迟发生突变的位置:
合理的跳变:从国内到海外的跳变(通常增加 100-200ms),从骨干网到城域网的跳变(通常增加 5-20ms),这些都属于正常现象。
异常的跳变:同一个城市内两个路由之间延迟增加 50ms 以上,或者延迟从 30ms 突然跳到 300ms 又回落到 40ms(说明中间某跳的延迟是虚高的),这些需要关注。
6.3 处理星号(* * *)
路由追踪结果中经常会看到某些跳显示 * * *(三个星号),表示没有收到该跳的回复。这不一定意味着网络断了,可能有以下原因:
该路由器配置了不回复 ICMP Time Exceeded 消息(出于安全或性能考虑),数据包实际上正常通过了,只是路由器不"告诉"你而已。这种情况最常见——如果后续跳还有正常的延迟数据,说明网络是通的。
该路由器对 ICMP 做了限速,偶尔回复、偶尔不回复。表现为同一跳有的包有延迟数据,有的包是星号。
只有当从某一跳开始,后续所有跳都是星号直到结尾,才可能是真正的网络中断或被防火墙阻拦。
七、路由追踪的局限性
只能看去程,看不到回程:你从节点 A 追踪到服务器 B 的路由,只能看到 A→B 的路径。B→A 的回程路径可能完全不同。如果你有服务器的权限,可以在服务器上反向做 traceroute 来查看回程路由。
ICMP 路径可能与实际流量路径不同:部分运营商对 ICMP 流量和 TCP/UDP 流量使用不同的路由策略。所以 traceroute 看到的路径,不一定是你实际访问网站时数据走的路径。
负载均衡导致路径跳动:大型网络通常使用 ECMP(等价多路径路由)做负载均衡,同一个目标的不同数据包可能走不同的路径。这会导致路由追踪结果中出现路径跳动或延迟不一致的现象,看起来像是网络不稳定,但实际上是正常的负载均衡行为。
八、实际案例:用路由追踪分析线路质量
假设你买了一台美西洛杉矶的 VPS,想知道它走的是什么线路。你可以在 Biuping 上选择一个电信节点发起路由追踪,观察路由路径。
如果路径中出现 59.43.x.x 的节点,说明走的是 CN2 线路。如果是 CN2 GIA,你会在回程和去程都看到 59.43 开头的节点。如果只在一个方向看到,可能是半程 CN2(去程 CN2 回程 163,或反过来)。
如果路径中只有 202.97.x.x,说明走的是普通 163 骨干网,高峰期可能会比较拥堵。
如果是联通线路,看到 219.158.x.x 是普通的 AS4837,而看到 210.x.x.x 可能是联通 AS9929 优化线路(通常标记为 CNCNET)。
这些信息能帮你判断 VPS 提供商宣称的"CN2 GIA 线路"是否属实,也能帮你理解为什么某些线路在晚高峰特别慢——因为走的是拥堵的 163 骨干网。
九、总结
路由追踪是理解网络拓扑和排查网络问题的必备工具。它利用 IP 协议的 TTL 机制,巧妙地探测出数据包从起点到终点经过的每一个中间节点。通过 Biuping 路由追踪工具,你可以从全国各地的节点发起测试,全面了解不同地区、不同运营商到你服务器的路由路径,判断线路质量,定位网络瓶颈。
配合 Ping 和 TCPing 工具一起使用,你就拥有了一套完整的网络诊断工具链。先用 Ping/TCPing 发现问题(延迟高、丢包),再用路由追踪定位问题(哪一跳出的问题),最后有针对性地解决问题。