traceroute 里的星号是什么意思:超时不等于丢包

traceroute 看到一排 * * *,是不是线路断了?小够讲清星号的三种成因、traceroute 的三种实现方式、怎么看星号判断线路好坏,以及 MTR 的正确用法。

我是小够。今天回答一个 traceroute 新手最慌的问题:看到 * * *,是不是线路出问题了?

先说结论:大多数星号都没事。星号只表示"这一跳没回你的探测包",原因有好几种,挨个看。

先懂原理:traceroute 的三种实现

traceroute 靠"寿命到期"来探测路径,但探测包有三种发法:

  • UDP 版(Linux/macOS 默认):发 UDP 包到高位端口,靠 ICMP 超时报错回显。
  • ICMP 版(Windows 的 tracert):直接发 ICMP Echo,和 ping 一个路子。
  • TCP 版(traceroute -T):发 TCP SYN,专门对付禁 ICMP 的防火墙。

不同的防火墙对这三种的态度不一样,所以同一次探测,换种方式结果可能完全不同。看到满屏星号,先换种方式再测一次,别急着下结论。

星号的三种成因

1. 对方禁了回显(最常见)

很多路由器为了安全或减负,直接不响应 traceroute 的探测包。它照常转发你的数据,只是懒得回你一句"我在"。于是显示星号,但流量好好的。

特征:星号之后,后面的跳数都正常,终点也能到达。这种星号纯属"已读不回",不用理。

2. 负载均衡

运营商骨干网常用负载均衡,一条"逻辑路径"背后是多条物理链路。traceroute 的三个探测包可能走了三条不同的路,某条路上的节点没回包,就显示星号。

特征:星号时有时无,多测几次位置会变。这种也是正常的,骨干网的日常。

3. 真丢包(最少见,但要警惕)

如果星号连续出现好几跳,而且从某跳开始后面全是星号、到不了终点,那可能是真有问题:中间链路故障或严重拥塞。

怎么看:看规律,不看个数

判断口诀:

  • 星号在中间、后面正常 → 没事,继续用。
  • 星号时有时无 → 负载均衡,没事。
  • 从某跳起全是星号、终点不可达 → 真有问题,换个时间再测,持续就找商家开工单。
  • 终点那几跳延迟突然暴涨 → 比星号更值得关注,说明拥塞。

和 MTR 配合:录像比快照准

traceroute 是快照,MTR 是录像。看到可疑的星号,用 MTR 跑 100 个包:

mtr -rwc 100 your-vps-ip

读法要点:

  • 某跳 Loss% 很高,但它后面的跳 Loss% 是 0 → 这一跳只是"不回包",线路没事。这是最常见的误判。
  • 终点也有丢包 → 才是真的丢包,要重视。
  • Best/Worst 差距巨大 → 抖动大,线路不稳。

记住:只有终点丢包才是真丢包。这个判断方法,比数星号靠谱十倍。

三个常见误判案例

案例一:“第 5 跳全是星号,商家线路断了?” → 后面 20 跳都正常,终点延迟 150ms。这是典型的禁回显,线路好好的。

案例二:“星号越来越多,越来越卡” → 先看终点延迟和丢包。如果终点正常,星星再多也是纸老虎;如果终点也丢包,再开工单。

案例三:“换了 TCP 方式,星号没了” → 说明中间防火墙禁了 UDP/ICMP 探测,TCP 能过。线路本来就没问题,是探测方式的问题。

traceroute 的三种实现:先选对工具

traceroute 靠"寿命到期"来探测路径,但探测包有三种发法:

  • UDP 版(Linux/macOS 默认):发 UDP 包到高位端口,靠 ICMP 超时报错回显。最通用,但最容易被防火墙拦。
  • ICMP 版(Windows 的 tracert):直接发 ICMP Echo,和 ping 一个路子。简单直接。
  • TCP 版(traceroute -T):发 TCP SYN,专门对付禁 ICMP 的防火墙。对端只要端口是开的,就会回包。

不同的防火墙对这三种的态度不一样,所以同一次探测,换种方式结果可能完全不同。看到满屏星号,先换种方式再测一次,别急着下结论。

MTR 参数详解

mtr -rwc 100 your-vps-ip
  • -r:报告模式,跑完直接出结果,不交互
  • -w:宽报告,不截断长主机名
  • -c 100:每个跳发 100 个包,样本越多越准

读法要点:

  • Loss%:丢包率。某跳高、后面跳 0——假的;终点也高——真的。
  • Avg/Best/Worst:平均/最好/最坏延迟。Worst 远大于 Avg,说明抖动大。
  • StDev:标准差,抖动的量化,越小越稳。

两个补充误判案例

案例四:“TCP 方式没星号,UDP 全是星号” → 中间防火墙禁了 UDP 探测,线路本身没问题。以后测这条路就用 TCP 方式。

案例五:“MTR 显示中间某跳 50% 丢包” → 看最后一跳:如果终点 0 丢包,中间那跳只是在"偷懒不回包"。路由器回探测包的优先级很低,忙起来就扔,这是正常行为,不是故障。

MTR 输出逐列解读

跑 mtr -rwc 100 your-vps-ip,输出大概长这样(示意):

HOST                          Loss%   Avg   Best   Wrst
1. 网关                        0.0%    1.2    0.8    2.1
2. 运营商节点                   0.0%   15.3   12.1   45.6
5. * * *                       -      -      -      -
8. 目标机房                     0.0%  150.2  148.9  165.3

读法:

  • 第 1 跳是你的路由器,延迟应该 <5ms,否则是本地网络问题
  • 中间某跳 Loss% 高、后面 0%:假丢包,不用理
  • 终点 Loss% >0:真丢包,重视
  • Wrst 远大于 Avg:抖动大,线路不稳

什么时候该开工单

同时满足这三个条件,再找商家:

  1. 终点持续丢包(MTR 跑 100 个包,Loss% >2%)
  2. 换个时间测还是一样(排除临时拥塞)
  3. 换个网络测也一样(排除本地问题)

带着 MTR 报告去开工单,商家没法敷衍。什么都不测就去喊"卡",客服也只能回你"重启试试"。

什么时候开工单

同时满足三个条件再找商家:

  1. 终点持续丢包(MTR 100 个包,Loss% >2%)
  2. 换个时间测还是一样(排除临时拥塞)
  3. 换个网络测也一样(排除本地问题)

带着 MTR 报告去,商家没法敷衍。什么都不测就喊"卡",只能得到"重启试试"。

读 MTR:三秒判断法

终点 Loss% > 0 → 真丢包,重视
中间某跳 Loss% 高、终点 0 → 假的,不用理
Worst >> Avg → 抖动大,不稳

记住这三条,MTR 就够用了。别被中间的红色数字吓到,看终点——终点好才是真的好,中间再花哨都是纸老虎。学会这套,你就超过了 90% 对着星号干着急的人。

一句话总结

星号 ≠ 故障。先看后面通不通,再看有没有规律,最后用 MTR 确认。学会这套,你就超过了 90% 对着星号干着急的人。排错和买 VPS 一样,靠的是方法,不是感觉。