计算机网络trace命令,使用操作系统的 traceroute 命令

  • Post author:
  • Post category:其他


使用 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 命令的实现方式有所不同。

初始 User Datagram Protocol (UDP) 数据报探报的 TTL 设置为 1(或为用户在 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 选项用于避免对名称服务器的请求。

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

目标计算机的名称。

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

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

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

icon_popup_short.gif

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”消息)。

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

37b1c1d5acef09e9a0356c9c8d62e2ae.png

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

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

此扩展 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, send