如何用路由跟踪(tracert/traceroute)诊断网络路径

按照以下顺序逐步排查。

  1. 路由跟踪到底是做什么的

    路由跟踪是一种诊断工具,能逐行显示数据从你的电脑到目标服务器之间经过了哪些路由器。它的原理是把数据包的TTL(生存时间)值从1开始,依次增加到2、3、4发送出去;每台路由器在TTL降到0时都会丢弃这个包,并返回一条"ICMP Time Exceeded"消息,按顺序收集这些消息,就能还原出完整的路径。

  2. 在Windows上运行(tracert)

    打开命令提示符,输入"tracert google.com"或"tracert 8.8.8.8"即可。Windows使用ICMP方式,命令名也从traceroute简化成了tracert,这是它的一个特点。

  3. 在Mac和Linux上运行(traceroute)

    在终端里输入"traceroute google.com"。Mac和Linux默认发送UDP数据包来追踪路径,到达目的地时,由于目标端口是关闭的,会返回一条"ICMP Port Unreachable"消息,以此确认已经到达。

  4. 怎么读结果

    每一行代表一跳(经过的一台路由器),会显示该路由器的IP地址或域名,以及三次测量的响应时间。跳数越大说明越接近目的地;国内段通常在5~10毫秒左右,一旦切换到国际段,响应时间会明显跳升,这个位置也能从结果里看出来。

  5. 如果某一跳响应时间突然大幅增加

    如果某一跳的响应时间突然大幅跳升,并且之后每一跳都维持在差不多的水平,说明那个区间(通常是连接国内外的骨干网或海底电缆段)确实存在延迟。但如果只是某一跳暂时变慢,下一跳又恢复正常速度,那多半是那台路由器把ICMP响应的优先级设得比较低,并不代表真的有问题。

  6. 星号(* * *)代表什么

    如果某一跳显示的是星号而不是响应时间,通常是因为那台路由器出于安全策略,被设置为不发送ICMP或UDP响应。这种情况非常常见,只要星号之后的几跳又恢复正常响应、并且最终能到达目的地,通常就不是真正的连接问题。

只想快速看一下往返时间

如果不需要完整路径,只想知道到目的地的整体响应时间和丢包情况,用Ping会更简单快捷。

想区分是自己的问题还是运营商的问题

如果结果里最开始的1到3跳(自己的路由器和接入运营商的这一段)看起来都正常,但从那之后开始持续出现延迟或无响应,那问题更可能出在运营商或目标服务器一侧,而不是自己的网络。如果想先排除是不是路由器本身的问题,可以先试着重启一下路由器。

常见问题

看到 * * * 是不是说明网络断了?

不是。很多路由器出于安全策略,被设置为根本不发送ICMP、UDP响应,所以出现星号是很常见的现象。只要星号之后的几跳又恢复正常响应,并且最终到达了目的地,通常就说明实际上并没有问题。

tracert和traceroute只是命令名不同,工作方式完全一样吗?

目的相同,但内部实现有区别。Windows的tracert使用ICMP数据包,而Mac、Linux的traceroute默认使用UDP数据包来追踪路径。因此即便是同一个目的地,两种操作系统跑出来的结果也可能会有细微差异。