如何在 Linux 上使用 traceroute 命令

您可以使用 Linux traceroute
命令来发现网络数据包传输过程中的慢段,并对缓慢的网络连接进行故障排除。我们会告诉你怎么做!
traceroute 的工作原理
当您了解 traceroute
的工作原理时,它会更容易理解结果。网络数据包到达目的地所采用的路由越复杂,就越难查明可能发生减速的位置。
小型组织的局域网 (LAN) 可能相对简单。它可能至少有一台服务器和一两个路由器。在不同位置之间或通过 Internet 进行通信的广域网 (WAN) 上,复杂性会增加。然后,您的网络数据包会遇到(并被转发和路由)许多硬件,例如路由器和网关。
数据包的元数据头描述了它的长度、来自哪里、要去哪里、使用的协议等等。协议的规范定义了标头。如果可以识别协议,则可以确定标头中每个字段的开始和结束并读取元数据。
traceroute
使用 TCP/IP 协议套件,并发送用户数据报协议数据包。标头包含生存时间 (TTL) 字段,该字段包含一个八位整数值。尽管顾名思义,它代表的是计数,而不是持续时间。
数据包通过路由器从其起点传输到终点。每次数据包到达路由器时,它都会减少 TTL 计数器。如果 TTL 值达到 1,则接收数据包的路由器会递减该值并注意到它现在为零。然后数据包被丢弃并且不会转发到其旅程的下一跳,因为它已经“超时”。
路由器将 Internet 消息控制协议 (ICMP) 超时消息发送回数据包的来源,以告知数据包超时。 Time Exceeded 消息包含原始报头和原始数据包数据的前 64 位。这是在 Request for Comments 792 的第六页上定义的。
因此,如果 traceroute
发送了一个数据包,但随后将 TTL 值设置为 1,则该数据包在被丢弃之前只会到达第一个路由器。它会收到来自路由器的 ICMP time exceeded 消息,它可以记录往返所用的时间。
然后它将 TTL 设置为 2 重复该练习,这将在两跳后失败。 traceroute
将 TTL 增加到 3,然后重试。重复此过程,直到到达目的地或测试了最大跳数(默认为 30)。
有些路由器不能很好地发挥作用
一些路由器有错误。他们尝试转发 TTL 为零的数据包,而不是丢弃它们并发出 ICMP 超时消息。
据思科称,一些互联网服务提供商 (ISP) 对其路由器中继的 ICMP 消息数量进行了速率限制。
某些设备配置为从不发送 ICMP 数据包。这通常是为了确保设备不会在不知不觉中被迫参与分布式拒绝服务,如 smurf 攻击。
traceroute
有一个默认的五秒回复超时。如果在这五秒钟内没有收到响应,则尝试放弃。这意味着来自非常慢的路由器的响应将被忽略。
安装跟踪路由
traceroute
已安装在 Fedora 31 上,但必须安装在 Manjaro 18.1 和 Ubuntu 18.04 上。要在 Manjaro 上安装 traceroute
,请使用以下命令:
sudo pacman -Sy traceroute

要在 Ubuntu 上安装 traceroute
,请使用以下命令:
sudo apt-get install traceroute

使用跟踪路由
正如我们上面所述,traceroutes
的目的是在从您的计算机到目的地的每一跳处从路由器中获取响应。有些人可能守口如瓶,什么也不说,而另一些人可能会毫不犹豫地泄露秘密。
例如,我们将运行 traceroute
到爱尔兰的布拉尼城堡网站,这里是著名的巧言石的故乡。传说如果您亲吻巧言石,您将获得“能言善道的礼物”。让我们希望我们一路上遇到的路由器是适当的唠叨。
我们输入以下命令:
traceroute www.blarneycastle.ie

第一行为我们提供了以下信息:
- 目的地及其 IP 地址。
traceroute
在放弃之前将尝试的跳数。- 我们发送的 UDP 数据包的大小。
所有其他行都包含有关其中一个跃点的信息。不过,在我们深入了解细节之前,我们可以看到我们的计算机和 Blarney Castle 网站之间有 11 跳。 Hop 11 还告诉我们我们到达了目的地。
每条跳线的格式如下:
- 设备的名称,或者如果设备无法识别自身,则为 IP 地址。
- IP 地址。
- 三个测试中每一个的往返时间。如果此处有星号,则表示该测试没有响应。如果设备根本没有响应,您会看到三个星号,并且没有设备名称或 IP 地址。
让我们回顾一下下面的内容:
- 第 1 跳:第一个停靠点(没有双关语意)是本地网络上的 DrayTek Vigor 路由器。这就是我们的 UDP 数据包离开本地网络并进入互联网的方式。
- 第 2 跳:此设备没有响应。也许它被配置为从不发送 ICMP 数据包。或者,也许它确实响应了但速度太慢,因此
traceroute
超时。 - 第 3 跳:设备响应,但我们没有得到它的名称,只有 IP 地址。请注意,此行中有一个星号,这意味着我们没有收到对所有三个请求的响应。这可能表示数据包丢失。
- Hops 4 和 5:更多匿名跃点。
- 第 6 跳:这里有很多文本,因为不同的远程设备处理了我们的三个 UDP 请求中的每一个。打印了每个设备的(相当长的)名称和 IP 地址。当您遇到一个“人口稠密”的网络时,就会发生这种情况,该网络上有很多硬件来处理大量流量。这一跃点位于英国最大的 ISP 之一。因此,如果同一个远程硬件能够处理我们的三个连接请求,那将是一个小小的奇迹。
- 跃点 7:这是我们的 UDP 数据包离开 ISP 网络时经过的跃点。
- 第 8 跳:同样,我们获得了 IP 地址,但没有获得设备名称。所有三个测试都成功返回。
- 第 9 跳 和 10:另外两个匿名跳。
- 第 11 步:我们已经到达布拉尼城堡网站。该城堡位于爱尔兰科克,但根据 IP 地址地理位置,该网站位于伦敦。
所以,这是一个混合包。有些设备会玩球,有些会回应但没有告诉我们他们的名字,还有一些则完全匿名。
然而,我们确实到达了目的地,我们知道它有 11 跳的距离,旅程的往返时间为 13.773 和 14.715 毫秒。
隐藏设备名称
正如我们所见,有时包含设备名称会导致显示混乱。为了更容易查看数据,您可以使用 -n
(无映射)选项。
要在我们的示例中执行此操作,我们键入以下内容:
traceroute -n blarneycastle.ie

这使得更容易为可能表明瓶颈的往返时间选择大量数字。
Hop 3 开始看起来有点可疑。上一次,它只回应了两次,而这一次,它只回应了一次。在这种情况下,当然是我们无法控制的。
但是,如果您正在调查您的公司网络,则值得深入挖掘该节点。
设置 traceroute 超时值
也许如果我们延长默认的超时时间(五秒),我们会得到更多的响应。为此,我们将使用 -w
(等待时间)选项将其更改为七秒。 (注意这是一个浮点数。)
我们输入以下命令:
traceroute -w 7.0 blarneycastle.ie

这并没有太大的区别,所以响应可能超时了。匿名啤酒花很可能是故意保密的。
设置测试次数
默认情况下,traceroute
向每一跳发送三个 UDP 数据包。我们可以使用 -q
(查询次数)选项来向上或向下调整它。
为了加快 traceroute
测试,我们键入以下内容以减少我们发送的 UDP 探测数据包的数量:
traceroute -q 1 blarneycastle.ie

这会向每个跃点发送一个探测。
设置初始 TTL 值
我们可以将 TTL 的初始值设置为除 1 之外的其他值,并跳过一些跃点。通常,第一组测试的 TTL 值设置为一个,下一组测试的 TTL 值设置为两个,依此类推。如果我们将其设置为 5,则第一个测试将尝试跳到第 5 跳并跳过第 1 跳到第 4 跳。
因为我们知道 Blarney Castle 网站距离这台计算机有 11 跳,所以我们键入以下内容直接转到第 11 跳:
traceroute -f 11 blarneycastle.ie

这为我们提供了一份关于与目的地的连接状态的精简报告。
体贴
traceroute
是调查网络路由、检查连接速度或识别瓶颈的绝佳工具。 Windows 也有一个功能类似的 tracert
命令。
但是,您不想用 UDP 数据包的洪流轰炸未知设备,并且要小心在脚本或无人值守的作业中包含 traceroute
。
traceroute
可以放置在网络上的负载可能对其性能产生不利影响。除非您处于立即修复的情况,否则您可能希望在正常工作时间之外使用它。
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts