核心要点
在 Linux 中,没有名为 tracert 的命令,Windows 的 tracert 命令实际上是 traceroute 命令的一个特定实现,在 Linux 上,你需要使用 traceroute 命令来完成同样的功能。

traceroute 的作用是显示数据包从你的主机到达目标主机所经过的路由路径(即经过了哪些路由器或网关),并测量每个“跳”(hop)的往返时间。
主要命令:traceroute
这是最标准、最常用的命令。
基本语法
traceroute [选项] <目标主机或IP地址>
常用选项
-I:使用 ICMP ECHO 包进行探测,这是 Windowstracert的默认行为,在许多现代 Linux 系统上,普通用户可能没有权限创建原始套接字来发送 UDP 包,因此使用-I选项会更可靠。-T:使用 TCP 包进行探测,可以指定目标端口,-T -p 80(HTTP) 或-T -p 443(HTTPS),这对于测试防火墙规则非常有用。-U:使用 UDP 包进行探测,这是traceroute的传统默认行为。-n:以数字形式显示主机地址,不进行 DNS 反向解析,这会让命令执行得更快,因为避免了查询 DNS 的时间。-m <max_hops>:设置最大跳数,默认是 30,如果目标主机 unreachable,可以在设置更大的值以防中间路由器响应过慢。-q <num_probes>:设置每个跳的探测包数量,默认是 3。-w <seconds>:设置等待每个包响应的超时时间(秒),默认是 5 秒。
示例
示例 1:基本用法(类似 Windows tracert)
我们使用 -I 选项,使其行为与 Windows tracert 更接近。

traceroute -I www.google.com
示例 2:快速数字显示
当你只关心 IP 地址,不关心主机名时,使用 -n 选项。
traceroute -n www.google.com
示例 3:使用 TCP 协议探测
通过 443 (HTTPS) 端口探测,可以检测中间是否有防火墙阻止了 UDP 或 ICMP 包。

traceroute -T -p 443 www.google.com
traceroute 命令的输出解析
traceroute 的输出非常直观,每一行代表一“跳”(一个路由器)。
输出格式:
traceroute to www.google.com (142.250.196.142), 30 hops max, 60 byte packets
1 gateway (192.168.1.1) 2.345 ms 1.234 ms 1.456 ms <-- 第1跳(你的网关)
2 12.34.56.78 15.678 ms 14.321 ms 16.543 ms <-- 第2跳(你的ISP的第一个路由器)
3 10.20.30.40 25.111 ms 24.987 ms 25.234 ms <-- 第3跳
...
8 * * * <-- 超时,没有收到响应
9 142.250.196.142 150.123 ms 149.456 ms 151.789 ms <-- 第9跳(目标主机)
每一列的含义:
- Hop Number (跳数):从 1 开始,表示这是第几跳的路由器。
- Hostname / IP Address (主机名或IP地址):显示该跳路由器的域名或 IP 地址,如果显示为 ,则表示在该跳上没有收到任何响应(可能由于路由器配置、防火墙或网络问题)。
- Round-Trip Time (RTT, 往返时间):后面跟着三个时间值(单位通常是毫秒, ms),分别代表发送了三个探测包后收到的响应时间。
- 表示该探测包超时,没有收到响应。
- 如果三个时间值差异很大,说明该跳的网络连接不稳定或有拥塞。
traceroute 命令不可用怎么办?
如果你在终端输入 traceroute 提示 command not found,说明你的 Linux 系统没有安装它,这通常发生在最小化安装的系统上。
在基于 Debian/Ubuntu 的系统上安装
sudo apt update sudo apt install traceroute
在基于 RHEL/CentOS/Fedora 的系统上安装
# 对于 CentOS 7, RHEL 7, Fedora sudo yum install traceroute # 对于 CentOS 8, RHEL 8, Fedora (使用 dnf) sudo dnf install traceroute
现代 Linux 系统的替代方案:tracepath
许多现代 Linux 发行版(如较新的 Ubuntu, Fedora)还包含一个名为 tracepath 的命令,它不需要 root 权限,并且功能与 traceroute 类似,但实现方式更简单。
tracepath 的特点
- 无需 root 权限:它使用一种巧妙的机制,利用 IP 包的“生 ttl”(Time To Live)字段来发现路径,因此不需要创建原始套接字。
- 自动调整参数:它会自动探测网络延迟,并动态调整重试次数和超时时间。
- 输出更简洁:输出信息相对较少。
基本语法
tracepath <目标主机或IP地址>
示例
tracepath www.google.com
输出示例:
1?: lost 0.123ms pmtu 1500
1: 192.168.1.1 0.456ms
1: 192.168.1.1 0.321ms
2: 12.34.56.78 10.123ms
3: 10.20.30.40 20.456ms
...
9?: lost 150.123ms pmtu 1460
9: 142.250.196.142 155.678ms 154.321ms !N <-- !N 表示收到了一个 "ICMP Fragmentation Needed" 消息,通常用于发现 MTU
Resume: pmtu 1460
总结对比
| 特性 | traceroute (Linux) |
tracert (Windows) |
tracepath (Linux) |
|---|---|---|---|
| 命令名称 | traceroute |
tracert |
tracepath |
| 默认协议 | UDP | ICMP | ICMP-like (利用TTL) |
| Root权限 | 通常需要(UDP/TCP) | 不需要 | 不需要 |
| 主要用途 | 标准路径探测和延迟测量 | 标准路径探测和延迟测量 | 快速路径探测,无需权限 |
| 灵活性 | 高(可指定ICMP, TCP, UDP等) | 较低(仅ICMP) | 较低 |
| 安装情况 | 需要单独安装 | 系统内置 | 通常系统内置 |
实用技巧
- 排查网络问题:
traceroute在某一跳之后全部显示为 ,通常意味着问题出在该跳的路由器上,或者是目标网络配置了防火墙阻止了探测包。 - 绕过防火墙:如果使用默认的 UDP 探测被阻止,可以尝试使用
-I(ICMP) 或-T -p 80/443(TCP) 选项,因为这些流量通常更受允许。 - 性能分析:关注每一跳的 RTT 时间,如果某几跳的 RTT 突然变得非常高,说明网络路径上可能存在拥塞或性能瓶颈。
