在 Windows 中排查网络相关问题时,可以使用 tracert
路由跟踪命令。它是基于网络协议的路由跟踪工具,通过向目标发送 ICMP 回响数据包并追踪沿途的每一个跃点(通常是路由器/网关),帮助诊断和定位网络连接中的问题。
tracert
实用程序可以用于分析互联网上的数据包传输路径,有助于检测在路由中连接变慢或无响应的位置。执行 tracert
命令后,会显示每个数据包沿途往返的时间以及跃点的 IP 地址或主机名。通过分析输出,可以对有问题的路由节点有一个大致的了解。下面是在 Windows 中使用路由跟踪命令的步骤。🚀
Tracert 路由跟踪基础
相信大多数人都使用过 ping
命令来测试网络中设备的可到达性。虽然它是检测潜在网络异常的有效工具,但也仅能告诉用户指定的目标是否可达。
与 Ping
类似,tracert
命令也运行在 OSI 模型的第三层。它能够向目标主机发送 ICMP 请求数据包,不仅测试服务器是否可达,还会输出明确的路由信息。每当数据包到达一个路由跃点时,路由跟踪的生存时间(TTL)值就会减 1。当值为 0 时,路由器/网关就会响应一个 ICMP 回复数据包。🔎
Tracert 工作原理示意
简单来说,tracert
工作方式就是:通过递增 TTL 值的方法,发送回显请求并记录每个请求经过的路由器/网关,从而获得到达目标主机的路径信息。
举一个简单的例子来帮助大家理解,假设您正在尝试跟踪系统极客网站 www.sysgeek.cn 的路由信息:
tracert
通过 ICMP 或其他协议发送第一个回显请求到目标主机,初始的TTL = 1
,并且该数据包离开源主机后,其 TTL 值减 1。(现在TTL = 0
)- 当第一个路由器接收到数据包时,由于
TTL = 0
,路由器会将其丢弃,并向源主机发送「TTL exceeded」消息。 - 源主机接收到消息后,会将目标主机的 IP 地址记录在
tracert
输出中,并将 TTL 增加 1(TTL = 2
),然后再次发送回显请求。同样,该值减 1(现在TTL = 1
),数据包被转发到目标服务器。 tracert
会持续发送回显请求,每次 TTL 增加 1,直到达到用户指定的最大跃点数或成功到达目标主机。tracert
会将路由跟踪信息显示给用户,包括每个跃点的 IP 地址、平均往返时间(RTT)和域名(如果有)。🌐
执行 Tracert 命令后分析 TTL
在 Windows 系统中,路由跟踪数据包可传输的默认最大跳数为 30。一旦跃点计数器达到限制,数据包就会被丢弃,并且无法达到最终目标。(可以通过参数来增加最大跳数)🔍
在 Windows 中使用 Tracert 路由跟踪命令
您可以在「命令提示符」或 PowerShell 中执行 tracert
命令,以确定源设备到目标的路由信息。这两种情况下的语法都是相同的:
tracert
只运行 tracert 命令可以查看帮助,了解用法和各种可用参数开关。
Tracert 参数 | 说明 |
---|---|
-d | 不将地址解析成主机名。 |
-h maximum_hops | 搜索目标的最大跃点数。 |
-j host-list | 与主机列表一起的松散源路由(仅适用于 IPv4)。 |
-w timeout | 等待每个回复的超时时间(以毫秒为单位)。 |
-R | 跟踪往返行程路径(仅适用于 IPv6)。 |
-S srcaddr | 要使用的源地址(仅适用于 IPv6)。 |
-4 | 强制使用 IPv4。 |
-6 | 强制使用 IPv6。 |
Windows 中的 Tracert 命令参数
我们以跟踪系统极客网站的路由信息作为示例。请打开「命令提示符」并执行 tracert www.sysgeek.cn
命令。
Tracert 命令输出
- 第一列是跃点计数器,它显示在到达指定目标之前命中的跃点总数。
- 接下来的三列分别输出每个数据包的往返时间(以毫秒为单位)。这里的 RTT 是数据包命中一个跃点并返回所需的时间。不难理解,每一步时间都在增加,路由跃点越远,回显请求到达和返回所需的时间就越长。
- 最后一列输出每个路由跃点的 IP 地址。如果这些跃点有主机名,会显示在 IP 地址的左侧。
参考上表中的参数,还可以执行 tracert -d www.sysgeek.cn
来丢弃主机名,这将仅列出路由中每个跃点的 IP 地址。
如果跃点跳数达到或超过 30,可以执行 tracert -h 50 www.sysgeek.cn
来增加到达目标的最大跳数。
使用 -h 参数指定 tracert 最大跃点数
通过类似的方式,您可以根据上表中包含的语法和描述测试其他参数开关。
附加提示
虽然在 Windows PowerShell 中使用相同的命令效果很好,但还有一个可替代的 cmdlet 可以运行路由跟踪:
Test-netconnection -traceroute
使用 Powershell 执行路由跟踪
它需要几秒钟来加载以下输出:
- ComputerName: 显示目标主机名
- RemoteAddress: 显示分配的 IP 地址
- InterfaceAlias: 网络适配器名称
- SourceAddress: 设备的源 IP 地址
- PingSucceeded: 显示布尔值(如果 ping 成功则为
True
,失败为False
。) - PingReplyDetails (RTT): 显示平均往返时间
- TraceRoute: 显示每个跃点的关联 IP 地址(最大限制为 30)
使用 Tracert 解决网络问题
tracert
命令可以帮助定位网络故障点,您可以比较每个数据包的往返时间和 IP 列中可能存在的错误消息。
- 在大多数情况下,列表中的
*
星号表示数据包丢失,通常发生在路径中的跃点(路由器)未响应 ICMP 请求消息的情况下。🌟
执行 Tracert 命令时的「*」星号
- 如果所有三个数据包都显示
*
星号且后面会跟着「Request timed out」请求超时提示,可能意味着某个特定路由器或其相关连接存在问题(或被防探测主动丢弃)。虽然这可能只发生在其中某一个跃点上,但所有后续的跃点也可能受到影响。🚧
执行 Tracert 命令时出现「请求超时」错误
- 如果目标设备/服务器不可用或存在 IP 相关问题,
tracert
命令可能会显示「Destination host unreachable」表示目标主机不可达。💔
执行 Tracert 命令时出现「无法访问目标主机」错误
- 如果命令没有提示任何错误,还可以通过 RTT 列来检查延迟。跃点增加就增加延迟并不总表示问题,但到达相同跃点的数据包却有不同的延迟,基本就上可以预测故障点。🕒
Tracert 第 8 跳存在高延迟
另外,如果在跃点开始或结束处遇到超时或高延迟问题,则表示本地网络或目标主机可能存在问题。🚫
虽然 tracert
路由跟踪命令不能实际解决网络问题,但它为检测从源设备到目标主机的数据传输提供了一种可行方法。