traceroute命令使用详解

  • A+

一、说明

  通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MS Windows中为tracert。 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。

  在大多数情况下,我们会在linux主机系统下,直接执行命令行:

  # traceroute hostname

  而在Windows系统下是执行tracert的命令:

  # tracert hostname

二、使用

1、命令格式:

# traceroute [参数] [主机或域名]

2、命令功能

  traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。

  具体参数格式:traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]

3、命令参数及说明

    -d 使用Socket层级的排错功能。

    -f 设置第一个检测数据包的存活数值TTL的大小。

    -F 设置勿离断位。

    -g 设置来源路由网关,最多可设置8个。

    -i 使用指定的网络界面送出数据包。

    -I 使用ICMP回应取代UDP资料信息。

    -m 设置检测数据包的最大存活数值TTL的大小。

    -n 直接使用IP地址而非主机名称。

    -p 设置UDP传输协议的通信端口。

    -r 忽略普通的Routing Table,直接将数据包送到远端主机上。

    -s 设置本地主机送出数据包的IP地址。

    -t 设置检测数据包的TOS数值。

    -v 详细显示指令的执行过程。

    -w 设置等待远端主机回报的时间。

    -x 开启或关闭数据包的正确性检验。

4、实践

4.1、最简单常用的方法

# traceroute www.baidu.com
traceroute to www.baidu.com (14.215.177.39), 30 hops max, 60 byte packets
1 * * *
2 11.220.36.93 (11.220.36.93) 5.092 ms 5.183 ms 11.220.37.29 (11.220.37.29) 6.562 ms
3 * 11.220.37.54 (11.220.37.54) 5.119 ms 11.220.36.118 (11.220.36.118) 4.308 ms
4 11.217.38.254 (11.217.38.254) 1.983 ms 1.858 ms 11.217.38.222 (11.217.38.222) 1.500 ms
5 119.38.215.138 (119.38.215.138) 1.958 ms 42.120.253.13 (42.120.253.13) 2.127 ms 116.251.117.150 (116.251.117.150) 1.978 ms
6 116.251.113.153 (116.251.113.153) 2.678 ms 116.251.113.133 (116.251.113.133) 2.266 ms 42.120.242.225 (42.120.242.225) 3.190 ms
7 183.2.180.237 (183.2.180.237) 2.499 ms 183.2.180.93 (183.2.180.93) 3.255 ms 183.2.180.45 (183.2.180.45) 5.624 ms
8 183.2.182.129 (183.2.182.129) 3.568 ms 3.518 ms 183.2.182.125 (183.2.182.125) 3.999 ms
9 119.147.220.65 (119.147.220.65) 7.930 ms 119.147.222.41 (119.147.222.41) 5.746 ms 119.147.220.101 (119.147.220.101) 4.741 ms
10 113.96.4.78 (113.96.4.78) 14.452 ms 113.96.4.46 (113.96.4.46) 12.892 ms 113.96.4.70 (113.96.4.70) 8.820 ms
11 86.96.135.219.broad.fs.gd.dynamic.163data.com.cn (219.135.96.86) 7.549 ms * *
12 14.29.121.186 (14.29.121.186) 7.568 ms 14.215.32.98 (14.215.32.98) 8.714 ms 14.29.121.186 (14.29.121.186) 7.824 ms
13 * * *
...
30 * * *

说明:

  记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.58.com ,表示向每个网关发送4个数据包。

  有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

  有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免DNS解析,以IP格式输出数据。

  如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。

4.2、多参数

# traceroute -n -m 10 -p 6888 -q 4 -w 3 www.baidu.com
traceroute to www.baidu.com (14.215.177.39), 10 hops max, 60 byte packets
1 * * * *
2 11.220.37.29 6.438 ms 11.220.36.29 4.151 ms 11.220.37.93 7.097 ms 11.220.36.29 4.444 ms
3 11.220.37.138 8.703 ms 8.507 ms 11.220.36.130 4.876 ms *
4 11.217.38.250 1.718 ms 11.217.38.234 2.042 ms 11.217.38.218 2.183 ms 11.217.38.206 1.538 ms
5 42.120.253.5 3.170 ms 42.120.253.1 2.725 ms 42.120.253.5 2.683 ms 119.38.215.142 11.231 ms
6 116.251.113.137 2.179 ms 42.120.242.217 3.392 ms 42.120.239.249 3.301 ms 42.120.242.217 3.174 ms
7 183.2.180.81 20.749 ms 183.2.180.133 3.301 ms 183.2.180.105 18.751 ms 183.2.180.17 2.986 ms
8 183.2.182.113 4.411 ms 183.2.182.129 4.623 ms 183.2.182.117 4.081 ms 183.2.182.129 4.442 ms
9 119.147.222.81 4.233 ms 119.147.220.129 6.370 ms 119.147.222.93 7.104 ms 119.147.220.101 4.340 ms
10 113.96.4.66 11.174 ms 113.96.4.46 9.450 ms 113.96.4.50 11.777 ms 113.96.4.78 12.212 ms

参数说明:

    -n : 只显示ip,不查询主机名;

    -m : 跳数设置,上面的测试中设置了10跳(即只显示10跳的路由);

    -p : 探测包使用基本UDP端口,上面测试中设置了6888端口;

    -q : 设置探测包的个数值,上面的测试定义为4;

    -w : 设置对外探测包的等待时间,上面的测试设置为3秒;

4.3、绕过正常的路由表,直接发送到网络相连的主机

# traceroute -r www.baidu.com
traceroute to www.baidu.com (14.215.177.39), 30 hops max, 60 byte packets
connect: Network is unreachable

traceroute工作原理说明:

Traceroute最简单的基本用法是:traceroute hostname

  Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?

  Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。

  Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。

三、Windows之tracert

命令使用格式:

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

参数说明:

    -d 指定不对计算机名解析地址。

    -h maximum_hops 指定查找目标的跳转的最大数目。

    -jcomputer-list 指定在 computer-list 中松散源路由。

   -w timeout 等待由 timeout 对每个应答指定的毫秒数。

    target_name 目标计算机的名称。

工作原理:

  该诊断实用程序通过向目的地发送具有不同生存时间 (TL) 的 Internet 控制信息协议 (CMP) 回应报文,以确定至目的地的路由。路径上的每个路由器都要在转发该 ICMP 回应报文之前将其 TTL 值至少减 1,因此 TTL 是有效的跳转计数。当报文的 TTL 值减少到 0 时,路由器向源系统发回 ICMP 超时信息。通过发送 TTL 为 1 的第一个回应报文并且在随后的发送中每次将 TTL 值加 1,直到目标响应或达到最大 TTL 值,Tracert 可以确定路由。通过检查中间路由器发发回的 ICMP 超时 (ime Exceeded) 信息,可以确定路由器。注意,有些路由器“安静”地丢弃生存时间 (TLS) 过期的报文并且对 tracert 无效。

实践:

>tracert www.baidu.com

通过最多 30 个跃点跟踪
到 www.a.shifen.com [61.135.169.125] 的路由:

1 <1 毫秒 <1 毫秒 <1 毫秒 bogon [192.168.100.254]
2 3 ms 1 ms 2 ms 123.121.80.1
3 2 ms 1 ms 5 ms 61.148.185.9
4 9 ms 13 ms 22 ms 221.219.202.205
5 3 ms 3 ms 2 ms 124.65.63.146
6 12 ms 2 ms 2 ms 202.106.43.38
7 * * * 请求超时。
8 * * * 请求超时。
9 2 ms 1 ms 1 ms 61.135.169.125

跟踪完成。

 

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: