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:抖动大,线路不稳
什么时候该开工单
同时满足这三个条件,再找商家:
- 终点持续丢包(MTR 跑 100 个包,Loss% >2%)
- 换个时间测还是一样(排除临时拥塞)
- 换个网络测也一样(排除本地问题)
带着 MTR 报告去开工单,商家没法敷衍。什么都不测就去喊"卡",客服也只能回你"重启试试"。
什么时候开工单
同时满足三个条件再找商家:
- 终点持续丢包(MTR 100 个包,Loss% >2%)
- 换个时间测还是一样(排除临时拥塞)
- 换个网络测也一样(排除本地问题)
带着 MTR 报告去,商家没法敷衍。什么都不测就喊"卡",只能得到"重启试试"。
读 MTR:三秒判断法
终点 Loss% > 0 → 真丢包,重视
中间某跳 Loss% 高、终点 0 → 假的,不用理
Worst >> Avg → 抖动大,不稳
记住这三条,MTR 就够用了。别被中间的红色数字吓到,看终点——终点好才是真的好,中间再花哨都是纸老虎。学会这套,你就超过了 90% 对着星号干着急的人。
一句话总结
星号 ≠ 故障。先看后面通不通,再看有没有规律,最后用 MTR 确认。学会这套,你就超过了 90% 对着星号干着急的人。排错和买 VPS 一样,靠的是方法,不是感觉。