使用操作系统的 traceroute 命令

您所在的位置:网站首页 追踪路由器命令怎么用的 使用操作系统的 traceroute 命令

使用操作系统的 traceroute 命令

2023-07-16 11:16| 来源: 网络整理| 查看: 265

目录 简介 先决条件 要求 使用的组件 规则 一般操作 Cisco IOS 和 Linux Microsoft Windows ICMP 不可达消息速率限制 Examples 使用 Cisco IOS 软件的 Cisco 路由器 使用 Linux 的 PC 使用 MS Windows 的 PC 其他说明 摘要 相关信息 简介

使用 traceroute 命令可以返回数据包所经过的跃点序列,从而确定数据包从给定源到达目的地所通过的路径。您的主机操作系统(例如 Linux 或 Microsoft (MS) Windows)以及 Cisco IOS® 软件都附带此实用程序。

先决条件 要求

本文读者应具备以下某个操作系统的基础知识:

Cisco IOS 软件

Linux

Microsoft Windows

使用的组件

本文档中的信息适用于以下软件和硬件版本:

运行 Cisco IOS 软件版本 12.2(27) 的 Cisco 路由器

运行 Red Hat Linux 版本 9 的 PC

运行 MS Windows 2000 的 PC

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。

规则

有关文件规则的更多信息请参见“ Cisco技术提示规则”。

一般操作

如果在源设备(例如主机或作为主机的路由器)上执行 traceroute ip-address 命令,它会将 IP 数据包连同一个递增至最大指定跃点计数的存活时间 (TTL) 值发往目的地。默认为 30。通常,在转发这些数据包时,通往目的地的路径中的每个路由器都会将 TTL 字段递减一个单位。当路径中间的一个路由器发现 TTL = 1 的数据包时,会向源发出一条 Internet Control Message Protocol (ICMP)“time exceeded”消息进行响应。通过此消息,源可以知道数据包将该特定路由器作为一个跃点。

在本文档讨论的各种操作系统中,traceroute 命令的实现方式有所不同。

Cisco IOS 和 Linux

初始 User Datagram Protocol (UDP) 数据报探报的 TTL 设置为 1(或为用户在 extended traceroute 命令中指定的最小 TTL)。初始数据报探报的目的地 UDP 端口设置为 33434(或为在扩展 traceroute 命令输出中指定的端口)。 扩展 traceroute 命令是普通 traceroute 命令的变体,该命令允许对 traceroute 操作(如 TTL)使用的参数默认值以及目的地端口号进行修改。有关如何使用扩展 traceroute 命令的更多信息,请参阅使用扩展 ping 和扩展 traceroute 命令。初始数据报探报的源 UDP 端口随机使用,并且与 0x8000 执行逻辑 OR 运算(从而确保源端口最小为 0x8000)。 以下步骤说明在启动 UDP 数据报时发生的情况:

注意:参数是可配置的。此示例从 n = 1 开始,到 n = 3 结束。

UDP 数据报在调度时 TTL = 1,目的地 UDP 端口 = 33434,源端口随机使用。

UDP 目的地端口递增,源 UDP 端口随机使用,调度第二个数据报。

对最多三个探报重复步骤 2 (或执行在 traceroute 命令输出中要求的次数)。 对于发送的每个探报,您都会收到“TTL exceeded”消息,该消息用于生成到目的地主机的逐步路径。

如果收到 ICMP“time exceeded”消息,则 TTL 会递增,并使用递增的目的地端口号重复此循环。您也会收到以下消息之一:

ICMP 类型 3,编码 3(“destination unreachable”、“port unreachable”)消息,表明到达主机。

“host unreachable”、“net unreachable”、“maximum TTL exceeded”或“timeout”类型的消息,表示重新发送了探报。

Cisco 路由器采用随机源端口和递增目的地端口(用以区分不同的探报)发送 UDP 探报数据包。 Cisco 路由器将 ICMP 消息“time exceeded”发送回收到 UDP/ICMP 数据包的源。

Linux traceroute 命令类似于 Cisco 路由器实现。不过,它使用固定源端口。traceroute 命令中的 -n 选项用于避免对名称服务器的请求。

Microsoft Windows

MS Windows tracert 命令使用 ICMP Echo 请求数据报而不是作为探报的 UDP 数据报。ICMP Echo 请求使用递增 TTL 启动,Cisco IOS 和 Linux 中也会发生同样的操作。使用 ICMP Echo 请求数据报的意义在于,最后一跳不依赖于来自目的地主机的 ICMP“unreachable”消息响应,而是依赖于 ICMP Echo 回复消息。

命令语法为:

tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name

下表介绍命令参数:

参数 描述 -d 指定不将地址解析为计算机名称。 -h maximum_hops 指定搜索目标的最大跃点数。 -j computer-list 指定沿计算机列表的松散源路由。 -w timeout 对于每个答复等待的超时毫秒数。 target_name 目标计算机的名称。

ICMP 不可达消息速率限制

在 Cisco 路由器中,ICMP 不可达限制为每 500 ms 一个数据包(作为针对“拒绝服务”(DoS) 攻击的保护措施)。在 Cisco IOS 软件版本 12.1 和更高版本中,此速率值是可配置的。引入的命令是:

ip icmp rate-limit unreachable [DF] no ip icmp rate-limit unreachable [DF] (DF limits rate for code=4)

有关详细信息,请参阅 Cisco bug ID CSCdp28161(仅限注册用户)。

此限制是所有 ICMP 不可达的总速率,如以下输出所示。有关更多信息,请参阅 RFC 792 。

type = 3, code 0 = net unreachable; 1 = host unreachable; 2 = protocol unreachable; 3 = port unreachable; 4 = fragmentation needed and DF set; 5 = source route failed.

此限制不影响其他数据包(如 ICMP Echo 请求或 ICMP“time exceeded”消息)。

Examples

示例中使用以下网络拓扑:

在三个示例中,每个示例分别使用一个不同的 Device A。从 Device A 开始,traceroute 150.1.4.2 命令执行到 Device 7C。

在每个示例中,都在 Device 11A 上运行 debug ip packet detail 命令。

使用 Cisco IOS 软件的 Cisco 路由器

此扩展 traceroute 命令示例显示从 Cisco 路由器执行 traceroute 命令时可以更改的选项。在本例中,一切均采用默认设置:

rp-10c-2611#traceroute Protocol [ip]: Target IP address: 150.1.4.2 Source address: 150.1.1.1 Numeric display [n]: Timeout in seconds [3]: Probe count [3]: Minimum Time to Live [1]: Maximum Time to Live [30]: Port Number [33434]: Loose, Strict, Record, Timestamp, Verbose[none]: Type escape sequence to abort. Tracing the route to 150.1.4.2 1 150.1.1.2 4 msec 0 msec 4 msec 2 150.1.2.2 4 msec 4 msec 0 msec 3 150.1.3.2 0 msec 0 msec 4 msec 4 150.1.4.2 4 msec * 0 msec rp-11a-7204# *Dec 29 13:13:57.060: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 13:13:57.060: ICMP type=11, code=0 *Dec 29 13:13:57.064: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 13:13:57.064: ICMP type=11, code=0 *Dec 29 13:13:57.064: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Dec 29 13:13:57.068: ICMP type=11, code=0

在此调试输出中,Device 11A 向探报源 (150.1.1.1) 发送 ICMP“time exceeded”消息。 这些ICMP消息是对TTL=1的初始探测的响应。设备11A将TTL递减到零,并以“time exceeded”消息响应。

注意:  出于两个原因,您在此调试输出中看不到 UDP 探报:

Device 11A 不是 UDP 探报的目的地。

TTL 递减到零,并且数据包从未路由。所以,调试操作从未识别该数据包。

*Dec 29 13:13:57.068: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.068: UDP src=40309, dst=33437 *Dec 29 13:13:57.068: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.068: ICMP type=11, code=0 *Dec 29 13:13:57.072: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.072: UDP src=37277, dst=33438 *Dec 29 13:13:57.072: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.072: ICMP type=11, code=0 *Dec 29 13:13:57.076: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.076: UDP src=36884, dst=33439 *Dec 29 13:13:57.076: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.076: ICMP type=11, code=0

此调试输出显示 UDP 探报源为 150.1.1.1,目的地为 150.1.4.2。

注意:  在这些探报中,TTL=2(使用调试看不到)。 Device 11A 将 TTL 递减到 1 并将 UDP 数据包转发到 Device 7A。Device 7A 将 TTL 递减到零,并以 ICMP“time exceeded”消息进行响应。

*Dec 29 13:13:57.080: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.080: UDP src=37479, dst=33440 *Dec 29 13:13:57.080: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.080: ICMP type=11, code=0 *Dec 29 13:13:57.084: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.084: UDP src=40631, dst=33441 *Dec 29 13:13:57.084: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.084: ICMP type=11, code=0 *Dec 29 13:13:57.084: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.088: UDP src=39881, dst=33442 *Dec 29 13:13:57.088: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.088: ICMP type=11, code=0

在此调试输出中可以看到接下来的三个 UDP 探报。这些探报的 TTL 是 3。Device 11A 将 TTL 递减到 2 并将它们转发到 Device 7A。Device 7A 将 TTL 递减到 1 并将数据包转发到 Device 7B,Device 7B 将 TTL 递减到零并以 ICMP“time exceeded”消息进行响应。

*Dec 29 13:13:57.088: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.088: UDP src=39217, dst=33443 *Dec 29 13:13:57.092: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:13:57.092: ICMP type=3, code=3 *Dec 29 13:13:57.092: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:13:57.096: UDP src=34357, dst=33444 *Dec 29 13:14:00.092: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2 (FastEthernet0/0), g=150.1.2.2, len 28, forward *Dec 29 13:14:00.092: UDP src=39587, dst=33445 *Dec 29 13:14:00.092: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1 (Ethernet4/0), g=150.1.1.1, len 56, forward *Dec 29 13:14:00.092: ICMP type=3, code=3

在此调试输出中可以看到最后三个 UDP 探报。这些探测器的原始TTL为4。TTL由设备11A递减到3,然后由设备7A递减到2,然后由设备7B递减到1。Device 7C 以 ICMP“port unreachable”消息进行响应,因为它是探报的目的地。

注意:由于速率限制,设备7C只发送两条ICMP“port unreachable”消息。

使用 Linux 的 PC [root#linux-pc]#traceroute -n 150.1.4.2 traceroute to 150.1.4.2 (150.1.4.2), 30 hops max, 40 byte packets 1. 150.1.1.2 1.140 ms 0.793 ms 0.778 ms 2. 150.1.2.2 2.213 ms 2.105 ms 3.491 ms 1. 150.1.3.2 3.146 ms 2.314 ms 2.347 ms 1. 150.1.4.2 3.579 ms * 2.954 ms rp-11a-7204# *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Jan 2 07:17:27.894: ICMP type=11, code=0 *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Jan 2 07:17:27.894: ICMP type=11, code=0 *Jan 2 07:17:27.894: IP: s=150.1.1.2 (local), d=150.1.1.1 (Ethernet4/0), len 56, sending *Jan 2 07:17:27.894: ICMP type=11, code=0

在此调试输出中,Device 11A 向探报源 (150.1.1.1) 发送 ICMP“time exceeded”消息。 这些ICMP消息是对TTL=1的初始探测的响应。设备11A将TTL递减到零,并以“time exceeded”消息响应。

注意:您在此调试输出中看不到UDP探测,原因有二:

Device 11A 不是 UDP 探报的目的地。

TTL 递减到零,并且数据包从未路由。所以,调试操作从未识别该数据包。

*Jan 2 07:17:27.894: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.894: UDP src=33302, dst=33438 *Jan 2 07:17:27.898: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.898: ICMP type=11, code=0 *Jan 2 07:17:27.898: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.898: UDP src=33302, dst=33439 *Jan 2 07:17:27.898: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.898: ICMP type=11, code=0 *Jan 2 07:17:27.898: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.898: UDP src=33302, dst=33440 *Jan 2 07:17:27.902: IP: s=150.1.2.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.902: ICMP type=11, code=0

注意:在此调试输出中,您现在看到从源150.1.1.1发往150.1.4.2的UDP探测。

注意:在这些探测中,TTL=2(这在调试中无法看到)。 Device 11A 将 TTL 递减到 1 并将 UDP 数据包转发到 Device 7A。Device 7A 将 TTL 递减到零,并以 ICMP“time exceeded”消息进行响应。

*Jan 2 07:17:27.902: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.902: UDP src=33302, dst=33441 *Jan 2 07:17:27.906: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.906: ICMP type=11, code=0 *Jan 2 07:17:27.906: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.906: UDP src=33302, dst=33442 *Jan 2 07:17:27.910: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.910: ICMP type=11, code=0 *Jan 2 07:17:27.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.910: UDP src=33302, dst=33443 *Jan 2 07:17:27.910: IP: s=150.1.3.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.910: ICMP type=11, code=0

现在,在此调试输出中可以看到接下来的三个 UDP 探报。这些探报的 TTL 是 3。Device 11A 将 TTL 递减到 2 并将它们转发到 Device 7A。Device 7A 将 TTL 递减到 1 并将数据包转发到 Device 7B,Device 7B 将 TTL 递减到零并以 ICMP“time exceeded”消息进行响应。

*Jan 2 07:17:27.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.910: UDP src=33302, dst=33444 *Jan 2 07:17:27.914: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:27.914: ICMP type=3, code=3 *Jan 2 07:17:27.914: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:27.914: UDP src=33302, dst=33445 *Jan 2 07:17:32.910: IP: s=150.1.1.1 (Ethernet4/0), d=150.1.4.2(FastEthernet0/0), g=150.1.2.2, len 40, forward *Jan 2 07:17:32.910: UDP src=33302, dst=33446 *Jan 2 07:17:32.914: IP: s=150.1.4.2 (FastEthernet0/0), d=150.1.1.1(Ethernet4/0), g=150.1.1.1, len 56, forward *Jan 2 07:17:32.914: ICMP type=3, code=3

此调试输出显示最后三个 UDP 探报。这些探测器的原始TTL为4。TTL由设备11A递减到3,然后由设备7A递减到2,然后由设备7B递减到1。然后,Device 7C 以 ICMP“port unreachable”消息进行响应,因为它是探报的目的地。

注意:由于速率限制,设备7C只发送两条ICMP“port unreachable”消息。

使用 MS Windows 的 PC C:\>tracert 150.1.4.2 1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3