Linux traceroute 命令

2025年3月17日 | 阅读 7 分钟

Traceroute 简介

Linux traceroute 命令是一个网络故障排除实用程序,可帮助我们确定到达目标所需的跳数和数据包传输路径。它用于显示数据从本地机器传输到远程机器的过程。加载网页是 traceroute 的常见用例之一。网页加载通过网络和路由器传输数据。traceroute 可以显示网络上的路由器路由、IP 地址和主机名。这对于诊断网络问题很有用。

在计算中,tracert 和 traceroute 是用于计算机网络诊断的命令,用于显示可能的路由并测量 IP 网络中数据包传输延迟。路由历史记录是从所有连续主机到路由的数据包往返时间记录的;每次跳数的平均时间总和是创建连接所花费的总时间。

traceroute 命令将一直运行,直到所有发送的数据包丢失超过两次;连接丢失,路径无法评估。另一方面,ping 命令仅测量到达目标点的最后往返时间。有时,该工具有一个类似名称 tracert6 和 traceroute6,用于 IPv6。

语法

选项

traceroute 命令支持以下命令行选项

-f, --first-hop=NUM:用于设置初始跳数。

-g, --gateways=GATES:用于显示松散源路由的网关列表。

-I, --icmp:指定使用 ICMP ECHO 作为探针。

-m, --max-hop=NUM:用于设置最大跳数,默认为 64。

-M, --type=METHOD:指定 traceroute 操作的 METHOD(icmp 或 udp),默认方法是 udp。

-p, --port=PORT:定义使用目标 PORT 端口,默认 PORT 为 33434。

-q, --tries=NUM:用于每跳发送 NUM 个探测包,默认为 3。

--resolve-hostnames:用于解析主机名。

-t, --tos=NUM:用于将服务类型(TOS)设置为 NUM。

-w, --wait=NUM:用于设置等待响应的秒数,默认为 3。

-?, --help:用于显示帮助手册,其中包含支持的命令行选项和用法的简要说明。

--usage:显示简短的用法消息。

-V, --version:用于显示 traceroute 的版本信息。

让我们看看该主题的快速索引

  • 安装 traceroute 命令
  • 它是如何工作的?
  • 使用 Ipv6 跟踪路由
  • 使用 Ipv4 跟踪路由
  • 禁用 IP 地址和主机名映射
  • 设置每跳查询数
  • 设置响应等待时间
  • 指定要使用的接口
  • 设置初始 TTL 值
  • 设置最大跳数
  • 获取帮助

traceroute 的实现

traceroute 命令在多种现代操作系统上可用。在类 Unix 系统(如 Linux、macOS 和 FreeBSD)上,它是一个命令行工具。此外,traceroute 在 macOS 的 Network Utilities 套件中也可用,尽管这些实用程序自 macOS Big Sur 发布以来已被弃用。

ReactOS 和 Microsoft Windows 提供了一个名为 tracert 的程序,它实现了类似的路由跟踪功能。此外,基于 Windows NT 的操作系统提供了 PathPing,它可以将 ping 命令的功能与 tracert 结合起来。ReactOS 版本由 Get Murphy 集成,并根据 GPL 获得许可。

默认情况下,traceroute 在类 Unix 操作系统上发送一系列 UDP(用户数据报协议)数据包,目标端口号范围为 33434 到 33534。macOS、DragonFly BSD、OpenBSD、NetBSD、FreeBSD 和 Linux 随附的 traceroute 实现可以选择使用 ICMP Echo Request 数据包,以及使用 ICMP 或 TCP SYN 数据包的 TCP 和 UDP。默认情况下,tracert 在 Windows 上传输 ICMP Echo Request 数据包,而不是 traceroute 传输的 UDP 数据包。

traceroute 的用法

大多数实现至少提供了一些选项来定义每跳要发送的查询数、等待响应的时间、跳数限制以及使用的端口。如果我们不带指定选项调用 traceroute,它会显示可用的选项列表,而 man traceroute 命令则提供更多详细信息,例如错误标志。

traceroute 的起源

traceroute 的手册页指出,实际的 traceroute 程序由 Van Jacobson 于 1987 年根据 Steve Deering 的建议指定,并得到了 C. Philip Wood、Ken Adelman 和 Tim Seaver 的具体有说服力的修复和建议。ping 程序作者 Mike Muuss 表示,traceroute 是在支持他早期编码以激活原始 ICMP 套接字的内核 ICMP 的支持下指定的,而他最初是指定 ping 程序的。

traceroute 的局限性

traceroute 的局限性是众所周知的,在使用该工具时应予以考虑。例如,traceroute 在接口级别识别路径,但在路由级别不识别。当路由器不响应检查或路由器限制 ICMP 响应时,会出现其他限制。

在负载均衡流量存在的情况下,traceroute 可能会显示一个不存在的路径。为了最小化此问题,存在一个名为 Paris-traceroute 的 traceroute 修改版,它管理检查流标识符以忽略负载均衡。

安装 traceroute 命令

traceroute 不是 Linux 系统的默认实用程序。要使用 traceroute,我们需要手动安装它。要安装它,请执行以下命令之一

以上命令将在我们的系统上安装 traceroute 实用程序。成功安装后,输出将如下所示

Linux traceroute

它是如何工作的?

要跟踪已连接网络主机的路由,请传递您想要连接的服务器名称或 IP 地址。例如,要跟踪“javatpoint.com”服务器的路由,请执行以下命令

上述命令将显示给定路由上的跳数、数据包和其他许多信息。考虑以下输出

Linux traceroute

从上面的输出中,我们可以看到几件事。让我们来理解输出的每个部分

  • 第一行显示要到达的主机名和 IP 地址、traceroute 命令将尝试的跳数,以及将发送的数据包的大小。
  • 从第二行开始,每一行显示到达目标的跳数。然后是主机名以及该主机的 IP 地址、往返时间。往返时间是从发送信号到主机响应所需的时间总和。
  • 默认情况下,它为每个主机发送三个数据包,因此列出了三个响应时间。
  • “*”符号表示数据包丢失。数据包丢失发生的原因是网络中断、网络拥塞流量过大,或者防火墙正在丢弃流量。在大量数据包丢失的情况下,traceroute 将显示错误“目标未到达”。

使用 IPv6 跟踪路由

“6”选项用于使用 Ipv6 协议跟踪到主机网络的路由。考虑以下命令

上述命令将使用 Ipv6 协议跟踪到“google.com”的路由。考虑以下输出

Linux traceroute

使用 Ipv4 跟踪路由

“4”选项用于使用 Ipv6 协议跟踪到主机网络的路由。考虑以下命令

上述命令将使用 Ipv6 协议跟踪到“google.com”的路由。考虑以下输出

Linux traceroute

禁用 IP 地址和主机名映射

“n”选项用于禁用 IP 地址和主机名映射。考虑以下命令

上述命令将产生如下输出

Linux traceroute

设置每跳查询数

“-q”选项用于设置每跳查询数。考虑以下命令

上述命令将产生如下输出

Linux traceroute

设置响应等待时间

“-w”选项用于在 traceroute 中设置响应等待时间。它将以秒为单位指定响应探测的等待时间。考虑以下命令

从上面的命令中,响应等待时间为 1 秒。它将产生如下输出

Linux traceroute

指定要使用的接口

“i”选项用于设置 traceroute 应该使用的网络接口。如果未设置,它将根据路由表设置接口。考虑以下命令

上述命令将产生如下输出

Linux traceroute

设置初始 TTL 值

我们可以设置初始 TTL(生存时间)值,而不是默认值。它将跳过一些跳。通常,它设置为一、二、三等,用于相应的测试集。因此,如果我们将其设置为七,第一个测试将尝试第七跳,并跳过从一到六的跳。考虑以下命令

上述命令将直接跳到第七跳。考虑以下输出

Linux traceroute

设置最大跳数

“-m”选项用于设置数据包到达目标的最大跳数。最大跳数的默认值为 30。考虑以下命令

上述命令将设置 7 个最大跳数让数据包到达目标。考虑以下输出

Linux traceroute

获取帮助

要显示包含用法摘要和支持的选项的帮助手册,请执行以下命令

上述命令将显示帮助。它将产生如下输出

Linux traceroute

我们也可以通过执行 man 命令来访问手册页

上述命令将显示 traceroute 命令的手册页。它将如下所示

Linux traceroute

滚动页面以阅读更多内容,然后按“q”键退出手册页。


下一主题Linux tracepath