路由追踪怎么读:traceroute、mtr 与 AS 路径判读

发布于 8 天前 37 次阅读


路由追踪是排查网络问题最基础的技能,但绝大多数人只会敲一条 traceroute,看一眼跳数就完了。真正的问题是:那几行输出里那些 * * * 到底该不该管?延迟在哪一跳开始变坏?这条路径走的是优质线路还是普通骨干?

这篇讲三件事:用什么工具(三种协议的区别很关键)、输出怎么读(五个字段和一串符号)、异常怎么判(五种典型场景)。

本文属于 VPS 网络与代理链路系列,该系列共六篇,可从此页查看完整阅读顺序与全部索引。

一、三个工具的定位

工具 特点 适合
traceroute 最基础,一次性探测 快速看路径走向
mtr 持续统计,实时刷新 看丢包率、延迟分布
nexttrace 现代实现,支持地图和 AS 反查 看地理位置和归属

三者的探测原理类似,区别在呈现方式。排查问题优先用 mtr,因为它给的是统计值(丢包率、平均延迟),而不是单次的三个采样点。

# Debian / Ubuntu 安装
apt install -y traceroute mtr-tiny

# nexttrace(Go 实现,单文件)
bash -c "$(curl -Ls https://raw.githubusercontent.com/nxtrace/NTrace-core/main/nexttrace.sh)"

二、协议选择:这一步决定了结果准不准

这是最容易被忽略、但影响最大的一步。探测包有三种协议可选,不同协议的探测结果可能完全不同。

协议 命令 特点
ICMP traceroute / mtr(默认) 最常用,但也最容易被限速和丢弃
UDP traceroute -U Linux 默认行为,部分网络屏蔽高端口 UDP
TCP traceroute -T -p 443 最接近真实业务流量,穿透性最好

结论:排查代理、网站、SSH 这类 TCP 业务的问题,一律用 TCP 模式。

# ICMP(默认,但结果可能失真)
mtr 目标IP

# TCP 模式(推荐):模拟真实的 HTTPS 连接
mtr --tcp --port 443 目标IP

# traceroute 的 TCP 模式
traceroute -T -p 443 目标IP

为什么 ICMP 结果会失真?因为骨干路由器普遍对 ICMP 做「低优先级处理」——它要优先转发真实业务流量,探测包排队靠后,甚至直接不回。所以 ICMP 模式下看到的丢包,很多时候是路由器不愿理你,不是链路有问题。

三、读懂输出:五个字段与一串符号

3.1 traceroute 的基本输出

 1  192.168.1.1        0.5 ms   0.4 ms   0.5 ms
 2  100.64.0.1         3.2 ms   3.1 ms   3.4 ms
 3  * * *
 4  202.97.12.1       12.3 ms  12.1 ms  12.5 ms
 5  59.43.182.1      158.2 ms 157.9 ms 158.5 ms

每一行的含义:

  • 第一列:跳数(TTL 值)
  • 第二列:该跳的 IP 或反解域名
  • 后三列:三次探测各自的往返时间(RTT)

这份输出能读出三件事:

  1. 第 1 跳是内网网关(192.168.1.1),第 2 跳是 100.64.0.1——这是 CGNAT 地址段,说明你在运营商级 NAT 后面
  2. 第 3 跳全是 *,但第 4 跳正常——典型的路由器不回 ICMP,不代表断链
  3. 第 4 跳到第 5 跳延迟从 12ms 跳到 158ms——这里是国际出口

3.2 特殊符号对照

符号 含义 该不该管
* 探测超时(未收到回应) 中间跳出现可忽略,末跳出现是问题
!H Host unreachable(主机不可达) 目标机或最后一跳路由有问题
!N Network unreachable(网络不可达) 路由表缺条目
!X Communication administratively prohibited 被防火墙显式拒绝
!P Protocol unreachable 目标不支持该协议/端口未监听

四、AS 号:判断线路质量的核心

光看 IP 和延迟,看不出这条路径走的什么线路。加上 AS 号就一目了然——AS 号是判断「优质线路还是普通骨干」最直接的依据。

# 显示每一跳的 AS 号
mtr -z 目标IP

# 同时显示 AS 号和 AS 名称(可读性更好)
mtr -rwzb -c 100 目标IP

4.1 常用 AS 号速查

AS 号 归属 定位
AS4134 中国电信 163 骨干 普通,晚高峰拥塞明显
AS4809 中国电信 CN2 优质(GIA 最佳,GT 次之)
AS9929 中国联通 A 网 优质
AS4837 中国联通 169 骨干 普通
AS58807 中国移动 CMIN2 优质
AS58453 中国移动国际 CMI 中等
AS9808 中国移动 骨干 普通
AS17676 SoftBank(日本) 优质
AS2497 IIJ(日本) 优质
AS2914 NTT(国际骨干) 国际大厂,质量中上
AS3356 Lumen / Level3 国际骨干
AS1299 Arelion(原 Telia) 国际骨干
AS6939 Hurricane Electric 国际骨干
AS174 Cogent 国际骨干,价格便宜质量一般

4.2 怎么用这张表判断

看到路径里出现 AS4809(CN2)、AS9929、AS58807(CMIN2),说明走的是优化线路;如果只出现 AS4134 或 AS4837,那就是普通骨干,晚高峰要打折。

注意一个细节:AS4809 同时包含 CN2 GIA 和 CN2 GT,两者优先级和带宽不同。要区分得看具体网段——59.43.x.x 是 CN2 的地址段,但 GIA 和 GT 在路由优先级上仍有差异,这一点从 mtr 看不出,只能靠实测晚高峰表现。

五、五种典型场景怎么判

5.1 中间跳丢包,末跳正常 —— 忽略

 3  202.97.12.1    0.0%  ...(正常)
 5  202.97.50.2   80.0%  ← 这里丢包 80%
 8  目标IP          0.0%  ← 末跳 0% 丢包

这是最常见的「假故障」。中间路由器对探测包限速,不回或延迟回,但真实的业务流量正常转发。只看末跳。

5.2 末跳丢包 —— 真问题

 8  目标IP   15.0%  ← 末跳丢包 15%

末跳是目标机自己,它对探测包的响应反映了真实状况。末跳丢包超过 1–2%,基本可以确定链路拥堵或目标机过载。

5.3 延迟突增 —— 找跨境点

延迟在某两跳之间突然从几十毫秒跳到一两百毫秒,那一跳就是国际出口或跨境点。这个信息很有用:如果跨境点之后还有很长的路径(十几跳),说明在境外绕路。

5.4 路径不对称 —— 正常现象

去程和回程走不同路径是 BGP 的常态,不是配置错误。判断依据是从两端分别追踪:

# 客户端侧:看去程
mtr --tcp --port 443 服务器IP

# 服务器侧:看回程(在服务器上执行)
mtr --tcp --port 443 你的公网IP

5.5 出现私有地址 —— 多半正常

地址段 含义
100.64.0.0/10 CGNAT(运营商级 NAT),说明你在 NAT 后面
10.x.x.x / 172.16–31.x.x / 192.168.x.x 运营商内网或你本地内网

运营商在骨干内部使用私有地址是常见做法,看到不必惊慌。

六、实战:追踪一条代理链路

6.1 先看客户端到服务器(去程)

mtr --tcp --port 443 -rwzbc 100 服务器IP

重点看三处:跨境点在哪(延迟突增的位置)、跨境后还绕了几跳(跳数越多越可能绕路)、末跳丢包率。

6.2 再看服务器到客户端(回程)

# 在服务器上执行,目标是你的家宽公网 IP
mtr --tcp --port 443 -rwzbc 100 你的公网IP

回程往往比去程更影响体感——下载、网页响应都走回程。如果去程正常而回程绕路,表现就是「打开快、下载慢」。

6.3 对比三步走

步骤 做什么 看什么
第一步 去程 mtr 跨境点位置、末跳丢包
第二步 回程 mtr 是否绕路、末跳丢包
第三步 晚高峰重测,对比白天 丢包是否恶化

三步都做完才谈得上结论。只做第一步就断定「线路好」是最常见的误判——很多线路白天完美、晚高峰崩盘。

七、进阶技巧

7.1 指定源地址(多 IP 机器)

# 机器有多个 IP 时,指定从哪个 IP 发出
mtr -a 源IP 目标IP

7.2 加大样本量,结果更可信

# 探测 100 次,间隔 0.5 秒
mtr -c 100 -i 0.5 目标IP

默认只探测 10 次,丢包率的误差很大。样本至少 50–100 次才有参考价值。

7.3 导出报告做对比

# 文本报告
mtr -rwzc 100 目标IP > /tmp/mtr-day.txt

# JSON 格式,便于脚本处理
mtr --json -c 100 目标IP > /tmp/mtr.json

7.4 用 nexttrace 看地理路径

# TCP 模式追踪 + 地理位置
nexttrace -T 目标IP

# 生成路径地图(输出链接)
nexttrace --map 目标IP

nexttrace 的优势是把 IP 反查到具体城市,一眼能看出「这条路径是不是绕到了不该去的国家」。

7.5 批量对比多台机器

#!/bin/bash
# 同时追踪多个目标,快速横向对比
for ip in 1.1.1.1 8.8.8.8 目标IP1 目标IP2; do
  echo "===== $ip ====="
  mtr -rwzc 50 "$ip" | tail -5
done

八、五个常见误区

  1. 只用 ICMP 就下结论。骨干对 ICMP 限速普遍,结果失真。用 --tcp。
  2. 看到中间跳丢包就以为链路坏了。只看末跳,中间跳的丢包大多是路由器行为。
  3. 只看延迟不看 AS 路径。40ms 但绕半个地球的路径,晚高峰必然崩。AS 号比延迟数值更能说明问题。
  4. 白天测完就写结论。晚高峰(20:00–23:00)的表现才是真实体验。
  5. 把单次结果当定论。网络状态是动态的,至少跑 100 次探测、不同时段多测几轮。

九、命令速查

目的 命令
最常用的完整命令 mtr -rwzbc 100 目标IP
TCP 模式(推荐) mtr --tcp --port 443 -rwzbc 100 目标IP
只看 AS 号 mtr -z 目标IP
不解析域名(更快) mtr -n 目标IP
指定源 IP mtr -a 源IP 目标IP
导出报告 mtr -rwzc 100 目标IP > report.txt
JSON 输出 mtr --json -c 100 目标IP
基础 traceroute traceroute -T -p 443 目标IP
地理路径 nexttrace -T --map 目标IP

十、小结

路由追踪的价值不在于「跑一条命令」,而在于判读。记住三条就够用:

  1. 用 TCP 模式,别用 ICMP 下结论
  2. 只看末跳丢包,中间跳的丢包多数是假象
  3. 看 AS 路径判断线路等级,别只盯延迟数字

再加上「晚高峰重测」和「去回程分别测」这两条纪律,基本可以避免 90% 的误判。测出来的结果怎么改善,见路由优化那篇。

相关阅读