如何在Mac上运行路由追踪:命令、输出及其含义
如何在Mac上运行路由追踪,读取每一跳,发现速度瓶颈和防火墙,以及如果不想用终端如何使用图形界面。涵盖macOS Sequoia及更高版本。
您的网络很慢,但连接在技术上是通的。页面最终会加载,视频通话卡顿,某个地方出了问题。路由追踪会告诉您确切在哪里。
macOS路由追踪显示您的数据在到达目的地途中经过的每一个路由器,以及每个路由器的响应时间。如果存在拥塞、路由配置错误或断开的链路,它会在输出中显示出来。本指南涵盖traceroute命令、如何读取其返回内容、常见模式的含义,以及如果您偏好可视化界面如何在不使用终端的情况下在Mac上运行路由追踪。
路由追踪做什么
数据不会直接从您的Mac传输到服务器。它会经过一系列路由器跳转:您的家用路由器、ISP的设备、区域骨干网络,最后是目标网络。每个步骤称为一跳。
路由追踪通过利用每个网络数据包中称为TTL(存活时间)的字段来映射这条链路。TTL是一个计数器,每当路由器转发一个数据包时,就将其减1。当TTL减到零时,路由器丢弃该数据包并发回一条标识自己的错误消息。
路由追踪发送TTL=1的数据包,第一个路由器丢弃它并回复。路由追踪记录该路由器的地址和响应时间,然后发送TTL=2的数据包,第二个路由器回复。如此逐跳进行,直到数据包到达目的地。
结果是一个完整的路径映射,每步都有延迟测量。
在macOS上运行路由追踪
打开终端(应用程序 > 实用工具 > 终端),然后运行:
traceroute google.com
结果随着每一跳响应而逐行出现。您不必等待整个运行完成就可以阅读早期的跳点。
输出看起来是什么样的
traceroute to google.com (142.250.80.46), 64 hops max, 52 byte packets
1 192.168.1.1 (192.168.1.1) 2.849 ms 2.103 ms 1.987 ms
2 96.120.68.69 (96.120.68.69) 12.445 ms 11.203 ms 10.987 ms
3 68.87.167.117 (68.87.167.117) 14.221 ms 13.008 ms 12.445 ms
4 * * *
5 72.14.215.171 (72.14.215.171) 18.334 ms 17.112 ms 16.889 ms
6 108.170.246.33 (108.170.246.33) 19.441 ms 18.902 ms 18.776 ms
7 lga34s32-in-f14.1e100.net (142.250.80.46) 20.112 ms 19.887 ms 19.654 ms
各列的含义:
- 跳点编号(最左侧):在链路中的位置。第1跳是您的家用路由器。
- 主机名和IP:路由器的标识。反向DNS在可用时提供主机名;否则您只看到IP地址。
- 三个时间读数(毫秒):路由追踪每跳发送三个探测。这些是每个探测的往返时间。三个读数让您发现不一致:如果两个是12ms而一个是80ms,说明该跳有偶发的延迟峰值。
常用参数
| 参数 | 作用 |
|---|---|
-n |
跳过DNS查询,只显示IP地址,运行更快。 |
-m 30 |
设置最大跳数(默认64)。当您知道目标较近时很有用。 |
-q 1 |
每跳只发送一个探测而不是三个,更快但数据更少。 |
-w 2 |
每跳等待仅2秒而不是5秒,加快对无响应跳点的处理。 |
快速获取结果的常用组合:
traceroute -n -q 1 -w 2 google.com
如何读取路由追踪结果
延迟递进
延迟通常随跳点离您越来越远而增加。您的家用路由器在1-5ms内响应,ISP的设备可能是10-20ms,国际目标可能是100-200ms或更多。这种递进是正常的。
您要寻找的是突然的跳跃:几个连续的跳点延迟相近,然后某个跳点延迟急剧上升,并在之后的所有跳点上保持高位。这个峰值指向速度减慢发生的位置。
如果在一跳处延迟峰值,但在下一跳恢复正常,峰值来自该路由器处理路由追踪探测的方式,而不是实际数据路径。某些路由器在正常传递常规流量的同时,对诊断数据包进行降优先级处理。
星号:* * *
一行星号意味着该跳点的路由器在超时时间内没有发回回复。三种原因:
- 防火墙阻止ICMP:许多路由器,尤其是企业和运营商网络上的,被配置为静默丢弃路由追踪探测。这是最常见的原因。
- 速率限制:路由器响应了部分探测但不是全部。您可能看到
* 14ms *的部分响应。 - 实际丢包:跳点之间的链路存在真实问题。
关键测试是星号之后发生了什么。如果路由继续并到达目的地,星号几乎可以肯定是防火墙配置问题,而不是真实的问题。如果路由在星号处停止并永远无法到达目的地,那个位置就存在真实的断开。
读取完整示例
1 192.168.1.1 2 ms 2 ms 1 ms ← 家用路由器,健康
2 10.20.30.1 11 ms 10 ms 10 ms ← ISP第一跳,正常
3 * * * ← 静默跳,可能是防火墙
4 68.86.90.34 14 ms 13 ms 13 ms ← 路由继续,第3跳只是防火墙
5 96.110.40.1 15 ms 15 ms 15 ms
6 96.110.40.2 180 ms 178 ms 179 ms ← 延迟在此处跳跃,此链路存在瓶颈
7 162.151.77.10 182 ms 181 ms 180 ms ← 从此处开始保持高位
8 destination 184 ms 183 ms 182 ms
在这次追踪中:第1-5跳健康,静默的第3跳是防火墙(路由继续正常),第6跳是速度减慢的位置。问题在第6跳或之前。
常见模式及其含义
从第1跳开始持续高延迟:您的家用路由器是瓶颈。这发生在过载的旧路由器、同时运行太多客户端的路由器或存在硬件问题的路由器上。重启有时有帮助;更换旧硬件是更持久的解决方案。
第2-4跳延迟峰值:您ISP的本地基础设施拥塞。这通常在住宅区的晚高峰时段出现。您可以尝试致电ISP报告问题,但通常除了等待什么都做不了。
某一跳延迟高,之后的跳点正常:该路由器对ICMP响应降低优先级,实际通过它的数据路径可能没问题。除非目标也显示高延迟,否则不要对此采取行动。
延迟急剧上升并保持高位:这是真正的信号。找到延迟跳升的跳点,那就是瓶颈所在。如果是第1-2跳,问题在您的本地网络。如果是第3-5跳,问题在您的ISP。如果是第8跳或更后面,这超出了您的控制范围。
路由经过出乎意料的地理位置:到附近服务器的连接可能经过另一个地区甚至另一个大陆。这会增加显著的延迟。互联网路由由路由表控制,这些路由表针对成本和对等协议进行优化,而不一定针对物理距离进行优化。如果您看到到50英里外数据中心的连接经过欧洲路由,这是某处路由表的配置问题。
数据包永远到不了目的地:路由完全停止。要么目的地已关闭,要么您和它之间的链路出现中断,要么防火墙阻止了您的探测到达目标。尝试ping同一目的地,看看ICMP是否至少能得到回复。
不用终端在Mac上运行路由追踪
如果您不想在终端中操作,NetUtil包含一个基于表格界面的路由追踪工具。输入主机名,点击"追踪",结果会逐跳出现在结构化表格中,各列分别是跳点编号、主机名、IP地址和三个时间值。
Apple曾在"网络实用工具"中提供这个功能——一款带有图形路由追踪标签页的内置应用。“网络实用工具"在macOS Monterey中被移除。NetUtil是免费的替代品,涵盖路由追踪以及Ping、DNS查询、端口扫描和其他诊断功能。
图形界面相对终端输出的实际优势不仅仅是美观。当您比较相隔几分钟运行的两次追踪时,在相同列布局的单独窗口中查看,差异更容易发现。高延迟跳点无需扫描原始文本即可突出显示。
所有操作都在您的Mac本地运行。路由追踪探测直接从您的机器发送到目标,不经过任何第三方服务器。
如何处理您发现的问题
路由追踪能诊断但不能修复。您学到的内容决定接下来该做什么。
第1-2跳存在问题(您的本地网络):重启路由器。检查网络中其他设备是否也出现同样的问题。如果只有一台设备有问题,检查该设备的网络配置。如果所有设备都有问题,路由器是问题所在。
第3-5跳存在问题(您的ISP):携带路由追踪输出联系客服。知道哪一跳很慢,能给客服团队提供具体可查的内容。具体询问该IP地址的拥塞或问题情况。
问题超出您的ISP范围:如果慢速跳点位于链路的很后面,可能是在骨干网或目标基础设施上。通常您这边没有可以采取的行动,等待一段时间再检查,或者尝试通过VPN路由,看看不同的路径是否能绕过瓶颈。
完全无法到达目的地:使用downdetector.com等服务检查该网站是否对所有人都无法访问。如果不是普遍性中断,尝试从不同的网络(如手机LTE)访问,以确定问题是特定于您的连接还是更广泛的。
下次某些东西感觉很慢时,在假设最坏的情况之前先运行一次路由追踪。大约需要30秒,可以立即告诉您问题是您能修复的,还是只需等待的。