在日常的 Linux 运维工作中,网络故障诊断是不可避免的挑战。当您的服务器连接出现延迟、访问不畅,或是部署的应用响应缓慢时,如何迅速定位问题所在?traceroute 命令便是您手中的一把利器,它能帮助我们追踪数据包在网络中传输的路径,揭示潜在的瓶颈和故障点。
对于广大的 FinalShell 用户而言,这款集成了 SSH 客户端、服务器管理、文件传输等多种功能的强大工具,无疑为执行 traceroute 等网络诊断操作提供了极大的便利。本文将深入讲解如何在 FinalShell 中高效利用 traceroute 命令,并结合实际场景解析其输出,助您快速成为网络路由追踪的高手。
Traceroute 是什么?为何你需要它?
traceroute (在某些系统上可能为 tracert 或 tracepath) 是一款网络诊断工具,用于显示数据包从源主机到目标主机所经过的路由器跳数(hops)以及每个跳的延迟。它的工作原理是发送一系列数据包(通常是 UDP 或 ICMP),并逐步增加数据包的存活时间(TTL,Time To Live)值。
当数据包的 TTL 达到零时,路由器会向源主机发送一个 ICMP "Time Exceeded" 消息。通过记录这些消息,traceroute 就能绘制出数据包的完整路径。每个跳都会显示该路由器的主机名、IP 地址以及数据包往返时间(RTT)。
为什么 traceroute 对你很重要?
- 定位网络瓶颈: 如果数据包在某个跳的延迟突然升高,那可能就是该节点或其上行链路存在拥堵或性能问题。
- 诊断丢包现象: 某些跳显示星号
* * *或高丢包率,可能表明该路由器配置了防火墙阻止 ICMP 请求,或者存在严重的网络丢包。 - 理解网络拓扑: 它可以帮助你了解数据包如何从你的服务器到达用户或外部服务,揭示网络服务提供商(ISP)之间的路由情况。
- 验证网络连通性: 在
ping命令无法到达目标时,traceroute能够告诉你数据包在哪一步中断了。
对于需要频繁与远程 Linux 服务器交互的运维人员,一个高效的 SSH 工具至关重要。如果您还未安装 FinalShell,可以参考本站的 FinalShell Windows安装设置 指南,快速部署您的工作环境。
在 FinalShell 中快速执行 Traceroute
FinalShell 提供了直观且功能丰富的终端界面,让您在连接到 Linux 服务器后,能够像在本地命令行一样执行各种 Shell 命令。
步骤一:连接到您的 Linux 服务器
首先,打开 FinalShell 客户端。如果您是首次使用,请按照 FinalShell 首次服务器连接 的指引,输入服务器的 IP 地址、端口、用户名和密码(或使用 SSH 密钥对登录)。成功连接后,您会看到熟悉的 Shell 终端界面。
步骤二:执行 Traceroute 命令
在 FinalShell 的终端中,直接输入 traceroute 命令,后跟您想要追踪的目标 IP 地址或域名。
基本语法:
traceroute [目标IP地址或域名]
示例:追踪到百度主页的路由
traceroute www.baidu.com
示例:追踪到某个具体IP地址的路由
traceroute 8.8.8.8
执行命令后,FinalShell 的终端会实时输出路由追踪的结果。您会看到一系列的行,每行代表一个网络跳点。
traceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets
1 router.local (192.168.1.1) 0.785 ms 0.729 ms 0.716 ms
2 10.0.0.1 (10.0.0.1) 1.523 ms 1.488 ms 1.556 ms
3 120.241.xx.xx (120.241.xx.xx) 5.678 ms 5.712 ms 5.701 ms
4 112.90.xx.xx (112.90.xx.xx) 6.890 ms 6.855 ms 6.877 ms
...
Traceroute 命令常用选项解析
traceroute 命令有许多选项,可以帮助您更精确地诊断网络问题。
-I或--icmp:强制使用 ICMP ECHO 请求包。这是 Windowstracert的默认行为,但在 Linux 上traceroute默认使用 UDP。如果遇到防火墙拦截 UDP 包,尝试使用此选项。-T或--tcp:使用 TCP SYN 包进行探测。这对于一些只允许 TCP 流量通过的防火墙后的服务器很有用。通常需要指定端口-p。-U或--udp:明确指定使用 UDP 包进行探测(Linux 默认)。-p [端口号]或--port=[端口号]:当使用 UDP 或 TCP 探测时,指定目标端口。例如:traceroute -T -p 80 www.example.com。-n或--numeric:不解析 IP 地址到域名。这会加快命令执行速度,并避免 DNS 解析问题。在您只关心 IP 地址时非常有用。-m [最大跳数]或--max-hops=[最大跳数]:设置最大跳数,默认为 30。如果你只需要检查前几个跳点,可以减少这个值。-q [查询次数]或--queries=[查询次数]:设置每个跳点发送的探测包数量,默认为 3。增加此值可以提高测量的准确性,但会增加时间。
示例:使用 ICMP 模式且不解析域名,最大跳数为 10
traceroute -I -n -m 10 www.google.com
Traceroute 结果解读与故障定位
理解 traceroute 的输出是诊断问题的关键:
- 第一列 (跳数):数据包经过的路由器序号,从 1 开始递增。
- 中间三列 (RTT):每个数据包从源主机到当前跳并返回所需的往返时间(Round-Trip Time),通常以毫秒(ms)为单位。
traceroute默认发送 3 个探测包,所以会显示 3 个 RTT 值。 - 最后一列 (IP 地址/主机名):当前跳路由器的 IP 地址,如果未禁用 DNS 解析,还会显示其主机名。
如何识别问题:
- 高延迟: 如果某个跳点的 RTT 值突然显著增加,并持续到后续的跳点,那么问题可能就出在这个高延迟的跳点本身,或者它上游的网络链路。
- 星号
* * *: 这表示在规定时间内没有收到该跳点的回复。原因可能包括:- 该路由器配置了防火墙,阻止了 ICMP 或 UDP 探测包。
- 网络拥堵导致数据包超时。
- 路由器本身故障或丢包严重。
- 如果连续多个跳点都是星号,可能意味着数据包在某个地方被完全丢弃,导致路由中断。
- 丢包: 如果某个跳点在三组 RTT 值中只返回了一两个,或者显示为
!H(Host Unreachable),!N(Network Unreachable) 等错误代码,则表明存在丢包。 - 路由不对称: 有时,去程和回程的路径可能不同,
traceroute只显示去程信息。

MTR:Traceroute 的高级演进
虽然 traceroute 非常有用,但它是一个静态工具,只提供某一时刻的路由快照。在诊断持续性或间歇性网络问题时,mtr (My Traceroute) 是一个更强大的选择。mtr 结合了 ping 和 traceroute 的功能,持续发送数据包并实时更新每个跳点的延迟和丢包统计信息。
安装 MTR:
在大多数 Linux 发行版中,mtr 不是默认安装的。您可以通过包管理器进行安装:
- Debian/Ubuntu:
sudo apt update && sudo apt install mtr-tiny - CentOS/RHEL/Fedora:
sudo yum install mtr或sudo dnf install mtr
使用 MTR:
mtr [目标IP地址或域名]
例如:
mtr www.google.com
mtr 会在 FinalShell 终端中显示一个动态更新的表格,包含每个跳点的:
Host:主机名或 IP 地址Loss%:丢包百分比Snt:已发送包数量Last:最后一个探测包的延迟Avg:平均延迟Best:最佳延迟Wrst:最差延迟StDev:标准偏差(反映延迟的稳定性)
通过观察 Loss% 和 Avg 值的变化,您可以更准确地判断网络问题的性质和位置。例如,如果某个中间跳的 Loss% 很高,而后续跳的 Loss% 也很高,那问题可能就出在这个中间跳。
在 FinalShell 中优化网络诊断体验
FinalShell 不仅仅是一个简单的 SSH 客户端,它还提供了许多增强功能,能够帮助您更好地进行网络诊断:
- 多标签页/多窗口: 您可以同时打开多个标签页或窗口,在一个标签页中执行
traceroute或mtr,在另一个标签页中执行ping测试,甚至同时连接到不同的服务器进行交叉验证。 - 日志记录: FinalShell 支持会话日志记录,您可以将
traceroute或mtr的输出保存到本地文件,方便后续分析或与他人分享。 - 复制粘贴: 轻松地复制终端中的命令和输出,粘贴到其他应用程序或文档中。
- 快捷命令: FinalShell 支持自定义快捷命令,您可以将常用的
traceroute或mtr命令保存为快捷方式,一键执行。
这些功能使得在 FinalShell 中进行网络故障诊断更加高效和便捷。如果您在服务器连接上遇到问题,例如 FinalShell 连接超时修复,通过 traceroute 配合 FinalShell 的便捷操作,通常能快速找到线索。
常见问题
Traceroute 为什么会显示星号(* * *)?
星号 * * * 表示 traceroute 没有收到来自该跳点的 ICMP "Time Exceeded" 消息。常见原因有:
- 防火墙阻拦: 该路由器或其上游的防火墙可能配置为不响应或丢弃 ICMP/UDP 探测包。
- 网络拥堵或丢包: 数据包在网络中丢失,或者回复的 ICMP 包在返回途中丢失。
- 路由器过载: 路由器负载过高,优先级较低的 ICMP 回复被丢弃。
- 路由回路或路由黑洞: 数据包进入了一个无法到达目标的循环路由或被路由到一个不存在的目的地。 如果某个跳点显示星号,但后续跳点仍然能够响应,通常是防火墙配置导致;如果连续多个跳点都是星号,那可能就是数据包在该点之后无法继续转发。
Traceroute 结果中延迟很高怎么办?
如果某个跳点及其后续跳点的延迟突然显著增高,这可能意味着:
- 链路拥堵: 该路由器的网络链路带宽不足或流量过大。
- 路由器性能瓶颈: 路由器硬件性能不足或配置不当,无法快速处理数据包。
- 地理距离: 数据包经过了较远的地理距离。
您可以使用
mtr进一步确认丢包率和延迟的稳定性。如果确认是某个特定跳点的延迟高,而该跳点不属于您的控制范围,您可以联系您的网络服务提供商(ISP)或服务器提供商,提供traceroute或mtr的结果,让他们协助调查。
FinalShell 连接服务器后无法执行 traceroute 命令?
这通常是因为 traceroute 命令在您的 Linux 服务器上没有安装。
解决方法:
- 检查是否已安装: 尝试执行
which traceroute或type traceroute。 - 安装 traceroute:
- Debian/Ubuntu:
sudo apt update && sudo apt install traceroute - CentOS/RHEL/Fedora:
sudo yum install traceroute或sudo dnf install traceroute安装完成后,您就可以在 FinalShell 中正常执行traceroute命令了。
- Debian/Ubuntu:
Traceroute 和 Ping 有什么区别?
- Ping: 主要用于测试主机之间的网络连通性和往返延迟。它只发送到目标主机的 ICMP ECHO 请求包,并等待目标主机的 ICMP ECHO 回复包,不显示中间路由信息。
- Traceroute: 用于显示数据包从源主机到目标主机所经过的所有路由跳点,以及每个跳点的延迟。它通过逐步增加 TTL 值来探测中间路由器。 简而言之,Ping 告诉你是否能到,以及多快;Traceroute 告诉你怎么到,以及哪一段慢了或断了。
可以追踪到内网IP吗?
是的,traceroute 可以追踪到内网 IP。只要你的服务器能够通过其网络接口到达目标内网 IP(例如,在同一个局域网内,或通过 VPN 连接),traceroute 就能尝试追踪路径。但是,如果内网 IP 位于一个无法路由的私有网络中,或者受到防火墙的严格限制,traceroute 可能会显示星号或无法到达目标。

总结而言,traceroute 是 Linux 运维中不可或缺的网络诊断工具。结合 FinalShell 提供的强大功能和友好的用户界面,您可以更快速、更直观地追踪网络路由,定位故障点。掌握 traceroute 的使用和结果解读技巧,将大大提升您的网络故障排除能力。除了 traceroute,FinalShell 还有许多其他强大的功能等待您探索,例如方便快捷的 SFTP 拖拽上传 功能,极大提升您的运维效率。
延伸阅读
若需进一步查阅,可先看本站以下教程: