traceroute 命令


用途


显示 IP 信息包至某个网络主机的路由。


语法

traceroute [ -m Max_ttl ] [ -n ] [ -p Port ] [ -q Nqueries ] [ -r ] [ -s SRC_Addr ] [  -t TypeOfService ] [ -v ] [  -w WaitTime ] Host [ PacketSize


描述

 

提示: traceroute 命令旨在用于网络测试、评估和管理。它应主要用于手动故障隔离。由于它对网络施加的负荷, traceroute 命令不应用于正常的操作中或自动脚本。


traceroute 命令试图跟踪 IP 信息包至某个因特网主机的路由,其具体方法是:先启动具有小的最大存活时间值(Max_ttl 变量)的 UDP 探测信息包,然后侦听从网关开始一路上的 ICMP TIME_EXCEEDED 响应。探测以一个一跳跃位的 Max_ttl 值开始,该值一次增加一个跳跃值,直至返回 ICMP PORT_UNREACHABLE 消息。ICMP PORT_UNREACHABLE 消息可以指出主机已经被定位,或命令已经达到允许跟踪的最大跳跃数目。


traceroute 命令在每一个 Max_ttl 设置上发送三个探测值以记录以下一些内容:

  • Max_ttl
  • 网关地址
  • 每次成功探测的往返时间


通过使用 -q 标志,可以增加发送的探测数目。如果探测的回答来自不同的网关,则命令会显示各个响应系统的地址。如果在 3 秒的超时时间间隔中没有来自探测的应答,则会针对该探测显示出 *(星号)。


如果 Max_ttl 值为一个跳跃或更小,则 traceroute 命令会在往返时间后显示一个“!”(感叹号)。一个跳跃或更小的最大存活时间值一般都指出了不同网络软件处理 ICMP 应答的方式的不兼容性。不兼容性通常是通过将上次使用的 Max_ttl 值加倍并再次尝试来解析的。


在往返注释后,其他可能的注释有:


!H

主机不可到达

!N

网络不可达

!P

协议不可达

!S

源路由失败

!F

需要碎片


如果有许多探测都产生某一错误,则 traceroute 命令退出。


traceroute 命令唯一的强制性参数就是目标主机名称或 IP 数字。traceroute 命令将根据输出接口的最大传输单元(MTU)确定探测信息包的长度。UDP 探测信息包被设置为一个不可能的值,以防止目标主机的处理。


标志

 


-m Max_ttl

设置用于输出探测信息包的最大存活时间(最大的跳跃数)。缺省值为 30 个跳跃(TCP 连接也使用相同的缺省值)。

-n

以数字方式而不以符号加数字的方式显示跳跃地址。该标志为在路径上找到的每个网关保存名称服务器的“地址到姓名”查询。

-pPort

设置用于探测的基本 UDP 端口号。缺省值为 33434。 traceroute 命令取决于目标主机的开放式 UDP 端口范围,basebase + nhops - 1。如果 UDP 端口不可用,则该选项可以用于选择一个未曾使用的端口范围。

-q Nqueries

指定 traceroute 命令在每个 Max_ttl 设定值处发出的探测数目。缺省值为三次探测。

-r

忽略正常的路由表,并直接发送探测信息包至已链接网络上的主机。如果指定的主机不在直接连接的网络上,则返回一个错误。该选项可以用于通过 routed 守护程序路由表中未注册的接口向本地主机发出 ping命令。

-s SRC_Addr

以数字格式将下一 IP 地址用作输出探测信息包的源地址。在具有多个 IP 地址的主机上,可以用 -s 标志来强制源地址成为不同于探测软件包被发送到的那个接口的 IP 地址的其他内容。如果下一个 IP 地址不是机器接口地址之一,则返回一个错误且不发送任何内容。

-t TypeOfService

将探测信息包中的 TypeOfService 变量设置为 0 到 255 范围内的一个十进制整数。缺省值为 0。该标志可用于调查不同的服务类型是否产生了不同的路径。有关更多信息,请参阅《网络与通信管理》中的『TCP/IP 协议』。有用的数值为 -t 16(低延迟)和 -t 8(高吞吐量)。

-v

接收除 TIME_EXCEEDEDPORT_UNREACHABLE 以外的信息包(详细输出)。

-w WaitTime

设置等待探测响应的时间(以秒计)。缺省值为 3 秒。


参数

 


Host

通过主机名或 IP 数字指定目标主机。该参数是必要的。

PacketSize

指定探测数据报长度。缺省信息包大小可以通过 traceroute 命令根据输出接口的 MTU 来确定。


示例

  1. 一个使用和输出的样本为:   [yak 71]% traceroute nis.nsf.net. traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 56 byte packet 1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms 5 ccn-nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms 6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms 8 129.140.70.13 (129.140.70.13) 99 ms 99 ms 80 ms 9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms 10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms 11 nic.merit.edu (35.1.1.48) 239 ms 239 ms 239 ms 由于第二个跳跃系统(lbl-csam.arpa)内核中的错误(向前转发了零存活时间的信息包),结果第二行和第三行相同。在第 6 到第 10 行中,不显示主机名称,因为国家科学基金会网络(NSFNet,129.140)不提供其节点的地址到名称的转换。
  2. 另外一个输出样本如下:   [yak 72]% traceroute rip.Berkeley.EDU (128.32.131.22) traceroute to rip.Berkeley.EDU (128.32.131.22), 30 hops max 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms 5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms 6 csgw/Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms 7 * * * 8 * * * 9 * * * 10 * * * 11 * * * 12 * * * 13 rip.Berkeley.EDU (128.32.131.22) 59 ms! 39 ms! 39 ms! 在本示例中,恰好“丢失”了 12 个网关跳跃的一半(13 是最后的目标)。但是,这些跳跃实际并不是网关。目标主机,一个运行 Sun OS3.5 的 Sun-3 工作站,将来自到达数据报的 ttl 用作其 ICMP 回复的 ttl,因此回复会在返回路径上发生超时。由于 ICMP 不是对 ICMP 发送的,因此不会接收到任何通知。每个往返时间后的 !(感叹号)指示某种类型的软件不相兼容性问题。(其原因是在 traceroute 命令发布一个两倍路径长的探测之后进行诊断。目标主机实际只是在 7 个跳跃以外。)