tech/network · 集群 A · 网络基础原理 · 6/6

路由与丢包:traceroute 和 mtr 结果怎么读

发布时间 待核实核实日期 待核实最近更新 待核实测试状态 Not Tested
Answer First · 核心结论

traceroute 通过逐步增加数据包的生存时间,让沿途每一跳路由器回报自己的位置和响应时间;mtr 在此基础上持续采样并统计丢包率。读结果时关键看两点:丢包是否从某一跳开始一直延续到终点,以及延迟是否在某一跳出现跃升。如果只有中间某跳显示丢包而后续正常,通常只是该设备对探测包限速,不代表真实丢包。

路由追踪的工作原理

路由追踪利用的是 IP 包里的“生存时间”(TTL)字段:每经过一个路由器,TTL 减 1,减到 0 时路由器会丢弃这个包,并回送一条“超时”消息。traceroute 就是故意从 TTL=1 开始发包,然后 2、3、4……逐个增加,让沿途每一跳都暴露自己。

TTL=1 ──▶ [第1跳] 超时 → 回报 "我是第1跳,耗时 x ms"
TTL=2 ──▶ [第1跳] ──▶ [第2跳] 超时 → 回报
TTL=3 ──▶ [第1跳] ──▶ [第2跳] ──▶ [第3跳] 超时 → 回报
  ...
TTL=n ──▶ ...................................▶ [终点] 正常回应

不同系统的默认探测方式不同:有的用 UDP,有的用 ICMP,也可以指定用 TCP。不同探测方式经过防火墙时的待遇可能不同,所以同一条路径用不同方式测,结果可能不完全一样。

mtr 是把 traceroute 与持续 ping 结合起来的工具,它会反复向每一跳发包,统计每一跳的丢包率、平均延迟、最好与最差延迟、以及延迟波动,比单次 traceroute 更适合观察间歇性问题。

读懂一份 mtr 输出

一份典型的 mtr 输出包含跳数、地址、丢包率、发包数和延迟统计。下面是一个示意结构,地址与数值均为虚构,仅用于说明读法,并非任何节点的实测结果:

跳 地址(示意) 丢包率 平均延迟 最差延迟 波动 解读
1 家用路由器 0% 低 低 小 本地正常
2 运营商接入 0% 低 低 小 接入正常
3 城域网 30% 低 中 中 后续正常,疑为限速应答
4 骨干网 0% 中 中 小 正常
5 国际出口 0% 高 很高 大 延迟跃升,跨境段
6 境外网络 5% 高 很高 大 丢包开始出现
7 境外网络 5% 高 很高 大 丢包延续
8 终点 5% 高 很高 大 丢包延续至终点,真实丢包

读这张表的关键是两条规则:

  1. 丢包要“延续”才算数:第 3 跳 30% 丢包但第 4 跳恢复到 0%,说明数据转发正常,只是第 3 跳设备不愿意(或限速)回应探测包。第 6 跳开始的 5% 一直延续到终点,才是真实丢包。
  2. 延迟要看“跃升点”:第 5 跳延迟突然变高,说明这里跨越了较长的物理距离(例如跨境),这种跃升是正常的;如果在境内段出现大幅跃升,则可能是绕路或拥塞。

星号、超时与“假丢包”

星号与中间跳丢包是最常被误读的两种情况。

**星号(* * *)**表示该跳在超时时间内没有回应。原因可能是:

  • 设备被配置为不回应探测包;
  • 设备对回应消息限速,高负载时不回;
  • 防火墙过滤了探测包或回应包。

只要后续跳和终点仍有回应,星号就不代表中断。

**“假丢包”**是指中间跳显示丢包但终点正常。路由器的首要任务是转发流量,生成回应消息是低优先级的“副业”,繁忙时会被限速或跳过。所以中间跳的丢包率往往高于真实值。

判断真实丢包的简易决策:
终点丢包率 = 0%?
 ├─ 是 → 中间丢包多为限速应答,链路正常
 └─ 否 ↓
从哪一跳开始,丢包一直延续到终点?
 ├─ 第1–2跳 → 本地网络或接入问题
 ├─ 境内段   → 运营商网络问题
 ├─ 跨境段   → 国际出口或跨境链路拥塞
 └─ 最后几跳 → 目标机房或目标服务器问题

区分本地、运营商与远端问题

根据丢包开始的位置,可以大致判断问题属于哪一段,这对决定“找谁解决”很有帮助。

丢包起点 可能原因 用户可做的事
第 1 跳 Wi-Fi 干扰、路由器过载 换有线、重启路由器、检查其他设备占用
第 2–3 跳 宽带接入、光猫问题 联系宽带运营商
境内骨干 运营商拥塞或故障 换时段测试,或等待恢复
跨境段 出口拥塞、链路问题 换线路类型不同的节点对比
最后几跳 节点或目标机房 换节点,或向服务商反馈

跨境段的结构与拥塞原理见 跨境网络访问的基本结构,线路类型差异可参考 线路与专线 专题。

回程路径与双向测试

网络路由往往是不对称的:去程走 A 路径,回程走 B 路径完全有可能。你在本地做 traceroute 只能看到去程,回程的问题对你是“隐形”的。

这带来一个常见困惑:去程看起来一切正常,但实际访问仍然很慢——问题可能在回程。如果你有可以登录的境外服务器,可以从服务器向你的公网地址做反向追踪;对于代理节点,用户通常没有这样的条件,可以把去程测试结果提供给服务商,请他们协助查看回程。

用路由追踪测代理节点的局限

用路由追踪测试代理节点时,需要清楚它能看到什么、看不到什么:

  • 只能看到你到节点入口的一段,节点到目标网站那段看不到;
  • 入口不等于落地:部分服务使用中转,入口地址可能在境内,追踪结果只反映到中转的路径;
  • 负载均衡与任播:同一地址背后可能有多台设备,不同时刻走的路径不同;
  • 探测流量与实际流量不同:路由追踪的包和你的代理流量可能被不同对待。

所以,路由追踪更适合判断“本地到节点入口这一段是否正常”,而不是评价节点的整体质量。节点与 IP 的相关知识可参考 节点与 IP 专题。

测试时的几个好习惯

为了让路由追踪结果更有参考价值,建议养成几个习惯:测试时关闭其他占用带宽的任务,避免本地拥塞干扰结果;mtr 至少持续采样一段时间再看统计,单次结果偶然性太大;同一目标在不同时段各测一次,便于区分固定问题和时段性拥塞;保存原始输出而不是凭记忆描述,向服务商反馈时附上原始结果更容易被处理。注意在分享输出前隐去你自己的公网地址,避免暴露个人网络信息。

小结

读懂 traceroute 和 mtr 的关键只有两句话:丢包要延续到终点才算真实丢包,延迟要看在哪一跳发生跃升。掌握这两点,就能避免被中间跳的星号和假丢包误导,并把问题大致定位到本地、运营商或远端。路由层面确认正常后,可以继续按 分层排障法 向上排查。

需要对照服务商的线路类型资料时,可以访问 机场品牌库 或 对比工具。品牌资料本站未实测,具体表现请以你的测试结果为准。

常见问题

traceroute 中出现星号是什么意思?

星号表示该跳在超时时间内没有回应。可能是设备配置为不回应探测包,也可能是对回应限速,不一定代表链路中断。只要后续跳和终点有回应,就说明数据仍在正常转发。

中间某跳丢包 50%,但终点丢包 0%,有问题吗?

通常没有。这多半是该路由器对探测包的应答做了限速,真实转发的流量并未丢失。判断真实丢包要看终点及其之前连续几跳是否都出现丢包。

为什么要做双向测试?

网络去程和回程的路径可能不同,从你这边测只能看到去程。如果条件允许从服务器侧反向测试,才能看到回程是否存在问题。

测代理节点时 traceroute 准确吗?

只能作为参考。traceroute 测的是你到节点地址这一段,节点到目标网站的那段看不到;另外部分节点前置了中转或负载均衡,看到的路径未必是实际承载流量的路径。

信息来源与更新时间

信息来源
品牌清单资料(品牌公开信息整理)
测试范围
本站未进行测速与解锁实测,所有能力描述均为资料声明或未测试状态。
发布时间
待核实
核实日期
待核实
最近更新
待核实

字段含义与数据状态见 字段说明;核查进度见 品牌动态与核查日志。