traceroute

显示从源到目的主机之间途经的路由信息


语法格式

traceroute [-46AdeFInrTU] [-f firstttl] [-g gateways] [-i device] [-m maxttl] [-p port] [-s srcaddr] [-q queries] [-N queries] [-t tos]
 [-w waittime] [-z sendwait] [-UL] [-P proto] [--sport=port]
 [-M method] [-O opts] [--mtu] [--back] host [packetlen]
traceroute [--help] [-V|--version]

命令简介

traceroute命令主要用于跟踪路由分组数据从本地系统到达指定目标主机途经的IP网络路由。traceroute命令利用IP协议的生存时间(TTL)字段,监听从本地系统到指定主机路径上途经的每个中间路由器返回一个ICMP“TIME_EXCEEDED”响应信息。

其中,host是目标主机的名字或IP地址,选用的参数packetlen是探测分组数据的总和,默认的长度是60(IPv4)或80(IPv6)。

traceroute命令利用发送的探测分组数据,其中设置了较小的生存时间,监听中间路由器的ICMP“TIME EXCEEDED”响应信息,尝试跟踪IP分组数据到达指定目标主机途经的路由。

在traceroute命令的跟踪过程中,TTL字段从默认值1开始,每经过一个中间路由器,TTL字段依次加1,直至收到一个ICMP“PORT UNREACHABLE”信息(表示已经到达指定的主机),或达到TTL的最大值(默认值为30),跟踪过程立即结束。针对每一个TTL值,即途经的每一个中间路由器,traceroute命令通常会发送3个UDP数据报或“ICMP ECHO”查询,因而期望得到3个ICMP“TIME EXCEEDED”响应信息。

traceroute命令将会显示到达目的主机期间途经的每一个路由器(包括目的主机)的IP地址,以及分组数据往返传输的时间。这个时间信息对于分析两个主机之间任何环节的网络流量或通信能力是非常有用的。如果在发出UDP数据报或“ICMP ECHO”查询信息的5秒钟(默认值)之内一直没有接收到ICMP响应信息,traceroute命令将会在相应的中间路由器或目的主机的返回时间字段中输出一个星号“*”字符。

traceroute命令的每行输出信息通常包含下列3个字段:

地址字段可能还会附加某些特殊符号。例如,!H(主机无法到达)、!N(网络无法到达)、!P(协议问题)、!S(源路由失败)、!F(需要分段)或!X(禁止通信)等。如果所有的探测分组数据几乎都会引起某种不可到达的错误,traceroute将会放弃并终止运行。

如果未指定任何选项,默认的做法是发送UDP数据报,使用不同的端口,探测与跟踪路由。第一个探测分组数据使用的端口号为33434,随后每发送一次探测分组数据,其端口号依次加1。由于选用的端口号是不用的端口号,因此作为最终的响应信息,目标主机通常会返回一条“icmp unreach port”信息。

在现代网络环境中,由于防火墙的广泛使用,传统的traceroute方法并非总能奏效。有些防火墙可能会过滤UDP端口甚至ICMP ECHO分组数据。为解决此类问题,可以使用“-T” 和“-p”等选项,采用特定的协议、源/目的端口以及协议与端口的组合等不同方法跟踪路由,以绕过防火墙。

命令选项

-4, -6  强制跟踪IPv4或IPv6路由。通常,traceroute命令将会尝试解析给定的主机名,自动选择适当的协议。解析主机名时,如果返回的是地址既有IPv4也有IPv6,traceroute将选用IPv4。

-A, --as-path-lookups  执行自治系统(Autonomous System)中的路由检索,显示相应地址直接返回的查询结果。

-d, --debug  启用套接字级的调试功能(如果Linux系统内核支持)。

-e, --extensions  显示ICMP扩充的信息(RFC4884)。

-f firstttl, --first=firstttl  指定从哪一个TTL值开始,默认值为1。

-F, --dont-fragment  禁止对探测分组数据分段(在IPv4中设置DF标志位,告诉中间路由器也不要分段)。

-g gateways, --gateway=gateways  在发送的分组数据中增加一个IP源路由选项,表示通过指定的网关发送路由分组数据。注意,出于安全的考虑,大多数路由器都会禁用源路由。在指定网关时,可以同时指定多个,中间加逗号分隔符。

-i interface, --interface=interface  指定从哪一个网络接口发送分组数据(通常是按路由表选择网络接口的)。

-I, --icmp  使用ICMP ECHO进行调查或测试。采用ICMP ECHO分组数据进行探测是当前最常用的方法。如果使用ping命令能够测通目标主机,采用icmp方法跟踪路由也是可行的。

-m maxttl, --max-hops=maxttl  指定需要尝试探测的最大网段跳转数量(即最大的TTL值),默认值为30。

-M method  使用指定的方法运行traceroute命令。其中,default表示传统的UDP方法,icmp方法表示采用ICMP ECHO分组数据探测与跟踪路由(相当于“-I”选项),tcp方法是最著名的现代方法,表示采用TCP SYN分组数据探测与跟踪路由(相当于“-T”选项),udp方法采用UDP分组数据与固定的目的端口号探测与跟踪路由(相当于“-U”选项),udplite方法采用UDPLITE数据报跟踪路由(相当于“-UL”选项),raw方法采用原始分组数据探测与跟踪路由(相当于“-P”选项)。如果所有的方法均不奏效,可以使用“ping -R”命令进行最后的尝试。注意,利用“-O”选项可以传递方法特定的选项。

-n  显示时不必把IP地址映射为主机名。

-N queries, --sim-queries=queries  指定同时发送的探测分组数据的数量。同时发送若干探测分组数据能够极大地加速traceroute命令,提高其测试效率。queries的默认值是16。注意,某些路由器和主机可以使用ICMP速率阀限制ICMP消息。在此情况下,指定的数值太大有可能会导致丢失部分响应信息。

-O opts, --options=opts  指定方法特定的选项。若同时指定多个选项,选项间需加逗号分隔符。也可以并列指定多个“-O”选项。通常,每个方法都有自己特定的选项,当然也有许多方法根本就没有选项。若想了解都有哪些选项可用,可以使用“-O help”选项,显示有关的信息。

-p port, --port=port  对于UDP跟踪,指定traceroute使用的目的端口号的基值(每发送一个测试分组数据,端口号加1)。对于ICMP跟踪,指定初始的icmp序列值(每发送一个测试分组数据,序列值加1)。对于TCP跟踪,只是指定需要连接的目的端口。

-P proto, --protocol=proto  使用指定协议(如udp和tcp)的原始分组数据探索与跟踪路由。注意,原始分组数据不使用协议特定的头信息,只是采用IP头信息而已。这也蕴含着指定了“-N 1”选项。

-q queries, --queries=queries  设置每个跳转发送的探测分组数据的数量,默认值为3个。

-r  绕过常规的路由表,直接发送到网络直连的主机。如果主机不在直连的网络上,返回一条错误信息。这个选项用于测试通过网络接口直连且没有路由指向的本地主机。

-s srcaddr, --source=srcaddr  选择替代的源地址。注意,选用的地址必须是现有网络接口的地址之一。通常,traceroute命令使用发送分组数据的网络接口地址作为源地址。

-t tos, --tos=tos  对于IPv4,可设置服务类型(TOS)与优先级。其中有用的值是16(低延迟)和8(高流通量)。注意,只有超级用户才能设置TOS与优先级。对于IPv6,可以设置流量控制。

-T, --tcp  采用TCP SYN分组数据探测与跟踪路由,其主要目的是选用固定的目的端口号(默认的端口号是80,即http),绕过防火墙。

-U, --udp  使用UDP数据报与固定的目的端口号(默认的端口号是53,即DNS)探测与跟踪路由(发送测试分组数据后并不增加端口号)。采用UDP数据报与固定的目的端口号的主要目的是绕过防火墙。注意,这个选项不要求超级用户特权。

-UL  使用UDPLITE数据报和固定的目的端口号(默认的端口号是53)探测与跟踪路由。注意,这个选项不要求超级用户特权。

-w waittime, --wait=waittime  设置等待远程回应每个探测的等待时间(单位为秒),默认值为5.0秒。

-z sendwait, --sendwait=sendwait  指定每次探测的最少时间间隔(默认值为0)。当指定的数值大于10时,其单位是毫秒,否则其单位为秒(指定的数值可以是浮点数)。当某些路由器采用速率限制的方式限定消息时,可以选用这个选项。为了保持路由跟踪的稳定性,可以使用“-z”选项放慢路由探索的速度。例如,使用“-z 0.5”选项(0.5秒)指定发送路由探索分组数据的时间间隔。

--mtu  在跟踪路由的同时,以“F=num”的形式显示MTU。这蕴含着指定了“-F -N 1”选项。

--sport=port  选择使用的源端口。这蕴含着指定了“-N 1”选项。通常,源端口(如果可用)是由系统自动选择的。

--help  显示命令的用法与选项说明等帮助信息,然后退出。

-V  显示命令的版本信息,然后退出。

应用实例

1. 跟踪分组数据从本地主机到达远程主机www.google.com途经的路由,输出信息表示中间跨越13个网络路径,同时也给出了分组数据途经每个网段时耗费的时间。

$ traceroute www.google.com
traceroute to www.google.com (74.125.71.106), 30 hops max, 60 byte packets
 1  * * *
 2  61.148.174.33 (61.148.174.33)  16.645 ms  18.564 ms  20.707 ms
 3  124.65.59.101 (124.65.59.101)  22.902 ms  24.852 ms  27.025 ms
 4  202.96.12.57 (202.96.12.57)  32.459 ms  33.415 ms  33.951 ms

13  hx-in-f106.1e100.net (74.125.71.106)  68.887 ms  67.961 ms  66.209 ms
$

2. 如果默认的路由跟踪方法失败,可以使用“-T”、“-I”、“-U”或“-M”等选项再做尝试。

# traceroute –T www.google.com

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z