路由追踪是排查网络问题最基础的技能,但绝大多数人只会敲一条 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 跳是内网网关(
192.168.1.1),第 2 跳是100.64.0.1——这是 CGNAT 地址段,说明你在运营商级 NAT 后面 - 第 3 跳全是
*,但第 4 跳正常——典型的路由器不回 ICMP,不代表断链 - 第 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
八、五个常见误区
- 只用 ICMP 就下结论。骨干对 ICMP 限速普遍,结果失真。用
--tcp。 - 看到中间跳丢包就以为链路坏了。只看末跳,中间跳的丢包大多是路由器行为。
- 只看延迟不看 AS 路径。40ms 但绕半个地球的路径,晚高峰必然崩。AS 号比延迟数值更能说明问题。
- 白天测完就写结论。晚高峰(20:00–23:00)的表现才是真实体验。
- 把单次结果当定论。网络状态是动态的,至少跑 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 |
十、小结
路由追踪的价值不在于「跑一条命令」,而在于判读。记住三条就够用:
- 用 TCP 模式,别用 ICMP 下结论
- 只看末跳丢包,中间跳的丢包多数是假象
- 看 AS 路径判断线路等级,别只盯延迟数字
再加上「晚高峰重测」和「去回程分别测」这两条纪律,基本可以避免 90% 的误判。测出来的结果怎么改善,见路由优化那篇。
相关阅读
- 多线 VPS 的源地址选择与策略路由 —— 出口 IP 怎么强制指定
- 路由优化实战:回程怎么看,线路怎么选,中转怎么加 —— 测出问题之后怎么改
- 线路机、落地机、家宽、前置、IX、专线(IPLC/IEPL)都是什么 —— 概念层,先搞清各层分工
- 中转家宽代理搭建实战:三种架构与完整配置 —— 追踪完发现链路长,怎么搭中转

Comments NOTHING