Linux tracepath 命令及实用示例

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何使用 Linux 的 tracepath 命令来追踪从本地主机到远程主机的数据包路径,并识别沿途可能存在的网络问题。实验内容涵盖了 tracepath 命令的用途、如何使用它来追踪到远程主机的路径,以及如何利用该命令进行网络故障排查。你将学会解读 tracepath 命令的输出,并利用它来识别潜在的网络问题,例如高延迟、数据包丢失或 MTU(最大传输单元)问题。

Linux 命令速查表


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("Network Testing") subgraph Lab Skills linux/netstat -.-> lab-422964{{"Linux tracepath 命令及实用示例"}} linux/ping -.-> lab-422964{{"Linux tracepath 命令及实用示例"}} end

理解 tracepath 命令的用途

在这一步骤中,你将学习 Linux 中 tracepath 命令的用途和用法。tracepath 命令是一种网络诊断工具,用于追踪从本地主机到远程主机的数据包路径,并识别沿途的中间跳数或网络问题。

tracepath 命令与 traceroute 命令类似,但它使用路径 MTU 发现(PMTUD)机制来确定路径上的最大传输单元(MTU),这有助于识别与数据包分片相关的网络问题。

让我们从运行 tracepath 命令到一个远程主机开始:

$ sudo tracepath google.com
 1?: [LOCALHOST]                                         pmtu 1500
 1:  192.168.1.1                                           0.161ms
 1:  192.168.1.1                                           0.158ms
 2:  10.0.0.1                                              1.694ms
 3:  203.0.113.1                                           9.717ms
 4:  142.250.209.174                                      10.843ms
 5:  142.250.209.174                                      10.518ms
     Resume: pmtu 1500 hops 5 back 5

示例输出:

输出显示了从本地主机到远程主机 google.com 的数据包路径。每一行代表路径中的一个跳数,输出包括以下信息:

  • 跳数编号
  • 中间路由器或网络设备的 IP 地址
  • 数据包到达该跳数并返回本地主机的往返时间(RTT)

tracepath 命令还会报告路径上的最大传输单元(MTU),在本例中为 1500 字节。

通过运行 tracepath 命令,你可以识别路径上的任何网络问题或瓶颈,例如高延迟、数据包丢失或 MTU 问题。

使用 tracepath 追踪到远程主机的路径

在这一步骤中,你将学习如何使用 tracepath 命令追踪到远程主机的路径,并识别沿途可能存在的网络问题。

让我们从追踪到远程主机(例如 google.com)的路径开始:

$ sudo tracepath google.com
 1?: [LOCALHOST]                                         pmtu 1500
 1:  192.168.1.1                                           0.161ms
 1:  192.168.1.1                                           0.158ms
 2:  10.0.0.1                                              1.694ms
 3:  203.0.113.1                                           9.717ms
 4:  142.250.209.174                                      10.843ms
 5:  142.250.209.174                                      10.518ms
     Resume: pmtu 1500 hops 5 back 5

示例输出:

输出显示了从本地主机到远程主机 google.com 的数据包路径。每一行代表路径中的一个跳数,输出包括以下信息:

  • 跳数编号
  • 中间路由器或网络设备的 IP 地址
  • 数据包到达该跳数并返回本地主机的往返时间(RTT)

tracepath 命令还会报告路径上的最大传输单元(MTU),在本例中为 1500 字节。

你也可以使用 tracepath 命令追踪到其他远程主机的路径,例如 example.com

$ sudo tracepath example.com
 1?: [LOCALHOST]                                         pmtu 1500
 1:  192.168.1.1                                           0.161ms
 1:  192.168.1.1                                           0.158ms
 2:  10.0.0.1                                              1.694ms
 3:  203.0.113.1                                           9.717ms
 4:  93.184.216.34                                        10.843ms
 5:  93.184.216.34                                        10.518ms
     Resume: pmtu 1500 hops 5 back 5

通过运行 tracepath 命令到不同的远程主机,你可以识别路径上的任何网络问题或瓶颈,例如高延迟、数据包丢失或 MTU 问题。

使用 tracepath 排查网络问题

在这一步骤中,你将学习如何使用 tracepath 命令排查网络问题。

让我们通过使用 iptables 防火墙阻止到远程主机的连接来模拟一个网络问题:

$ sudo iptables -A OUTPUT -d 8.8.8.8 -j DROP

该命令将阻止所有到 IP 地址 8.8.8.8 的出站流量,这是 Google 的公共 DNS 服务器之一。

现在,让我们尝试使用 tracepath 命令追踪到 8.8.8.8 的路径:

$ sudo tracepath 8.8.8.8
 1?: [LOCALHOST]                                         pmtu 1500
 1:  192.168.1.1                                           0.161ms
 1:  192.168.1.1                                           0.158ms
 2:  10.0.0.1                                              1.694ms
 3:  no reply
 4:  no reply
 5:  no reply
     Resume: pmtu 1500 hops 5 back 2

示例输出:

输出显示 tracepath 命令能够追踪到第三跳的路径,但随后遇到了 "no reply" 消息,表明连接被阻止或远程主机未响应。

要排查此问题,你可以尝试以下步骤:

  1. 检查防火墙规则,确保连接按预期被阻止:

    $ sudo iptables -L
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    DROP       all  --  anywhere             8.8.8.8
  2. 尝试 ping 远程主机,查看连接是否确实被阻止:

    $ ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    ^C
    --- 8.8.8.8 ping statistics ---
    3 packets transmitted, 0 received, 100% packet loss, time 2023ms

    输出显示连接被阻止,表现为 100% 的数据包丢失。

  3. 移除防火墙规则以恢复连接:

    $ sudo iptables -D OUTPUT -d 8.8.8.8 -j DROP

通过使用 tracepath 命令识别连接被阻止的位置,你可以快速排查网络问题并找到根本原因。

总结

在本实验中,你将学习 Linux 中 tracepath 命令的用途和用法。tracepath 是一种网络诊断工具,用于追踪从本地主机到远程主机的数据包路径,并识别沿途的中间跳数或网络问题。你还将学习如何使用 tracepath 命令追踪到远程主机的路径,并通过命令的输出排查网络问题。

tracepath 命令与 traceroute 命令类似,但它使用路径 MTU 发现(PMTUD)机制来确定路径上的最大传输单元(MTU),这有助于识别与数据包分片相关的网络问题。通过运行 tracepath 命令,你可以识别路径上的任何网络问题或瓶颈,例如高延迟、数据包丢失或 MTU 问题。

Linux 命令速查表