菜鸟科技网

Linux tracert命令如何使用?

核心要点

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

Linux tracert命令如何使用?-图1
(图片来源网络,侵删)

traceroute 的作用是显示数据包从你的主机到达目标主机所经过的路由路径(即经过了哪些路由器或网关),并测量每个“跳”(hop)的往返时间。


主要命令:traceroute

这是最标准、最常用的命令。

基本语法

traceroute [选项] <目标主机或IP地址>

常用选项

  • -I:使用 ICMP ECHO 包进行探测,这是 Windows tracert 的默认行为,在许多现代 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 更接近。

Linux tracert命令如何使用?-图2
(图片来源网络,侵删)
traceroute -I www.google.com

示例 2:快速数字显示

当你只关心 IP 地址,不关心主机名时,使用 -n 选项。

traceroute -n www.google.com

示例 3:使用 TCP 协议探测

通过 443 (HTTPS) 端口探测,可以检测中间是否有防火墙阻止了 UDP 或 ICMP 包。

Linux tracert命令如何使用?-图3
(图片来源网络,侵删)
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跳(目标主机)

每一列的含义:

  1. Hop Number (跳数):从 1 开始,表示这是第几跳的路由器。
  2. Hostname / IP Address (主机名或IP地址):显示该跳路由器的域名或 IP 地址,如果显示为 ,则表示在该跳上没有收到任何响应(可能由于路由器配置、防火墙或网络问题)。
  3. 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 突然变得非常高,说明网络路径上可能存在拥塞或性能瓶颈。
分享:
扫描分享到社交APP
上一篇
下一篇