traceroute 命令
traceroute命令用于追踪网络数据包的路由途径
命令利用ICMP协议定位您的计算机和目标计算机之间的所有路由器。TTL 值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP呼叫报文的TTL 值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由节点。
原理
程序利用增加存活时间(TTL)值来实现其功能。每当数据包经过一个路由器,其存活时间就会减1。当其存活时间是0时,主机便取消数据包,并传送一个ICMP TTL数据包给原数据包的发出者。
程序发出的首3个数据包TTL值是1,之后3个是2,如此类推,它便得到一连串数据包路径。注意IP不保证每个数据包走的路径都一样
语法
traceroute [-46dFITnreAUDV][ -f first_ttl ] [ -g gate,... ] [ -i device ] [ -m max_ttl ] [ -N squeries ] [ -p port ] [ -t tos ]
[ -l flow_label ] [ -w waittime ] [ -q nqueries ] [ -s src_addr ] [ -z sendwait ] [ --fwmark=num ] 目标主机 [数据包大小]
数据包默认大小是IP头的长度加40
选项:
- -4 使用IPv4
- -6 使用IPv6
- -d --debug 使用Socket层级的排错功能。
- -f first_ttl 设置第一个检测数据包的存活数值TTL的大小
- -F 不分割数据包
- -g gate,... 将报文路由到指定网关(IPv4最多8个,IPv6最多127个)
- -i device 使用指定的网络接口(网卡)发出数据包
- -I --icmp 使用ICMP ECHO进行跟踪路由
- -m max_ttl 设置检测数据包的最大存活数值TTL的大小。
- -M method 对traceroute操作使用指定的方法。默认的传统UDP方法有名称Default,ICMP(-I)和TCP(-T)分别有ICMP和TCP。特定于方法的选项可以通过-O传递。
- -n 不解析IP地址到他们的域名。
- -p port 设置目标主机UDP通信端口。
- --sport=port 选择本机源端口
- -q nqueries 设置探测数据包个数,默认3个
- -r 忽略普通的 Routing Table,直接将数据包送到远端主机上。
- -s src_addr 设置本地主机送出数据包的 IP地址。
- -t<服务类型> 设置检测数据包的 TOS 数值。
- -v 详细显示指令的执行过程。
- -w waittime 设置等待远端主机回报的时间。
- -x 开启或关闭数据包的正确性检验。
- -z 探测之间的最小时间间隔
实例
$ traceroute www.baidu.com
traceroute to www.baidu.com (14.119.104.254), 30 hops max, 60 byte packets
1 gateway (10.18.200.1) 6.383 ms 6.895 ms 5.853 ms
2 10.18.1.2 (10.18.1.2) 0.514 ms 0.502 ms 0.483 ms
3 218.18.96.62 (218.18.96.62) 0.958 ms 0.923 ms 1.099 ms
4 14.147.83.5 (14.147.83.5) 1.535 ms 1.710 ms 1.444 ms
5 * * 125.176.37.59.broad.dg.gd.dynamic.163data.com.cn (59.37.176.125) 2.278 ms
6 113.106.35.5 (113.106.35.5) 4.876 ms * *
7 113.96.0.18 (113.96.0.18) 4.942 ms 113.96.4.254 (113.96.4.254) 5.767 ms *
8 121.14.14.162 (121.14.14.162) 7.144 ms 86.96.135.219.broad.fs.gd.dynamic.163data.com.cn (219.135.96.86) 5.293 ms 5.249 ms
9 121.14.67.170 (121.14.67.170) 11.427 ms 121.14.67.178 (121.14.67.178) 5.919 ms 121.14.67.174 (121.14.67.174) 6.490 ms
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
记录按序列号从1开始,每个序号表示一跳,每一条代表一个网关,我们看到每行有三个时间,单位是 ms ,即数据包到达此跳路由或主机再返回你的主机所需要的时间。traceroute默认每次发送3个数据包,所以显示三个往返时间。
这里的 * 号代表 路由器禁止了ICMP数据包返回或者是防火墙的过滤。 traceroute程序本身就被用来发现网络故障,如果从某跳开始所有的时间都成了星号,即超时,则网络故障很有可能就出现在了这一跳
$ traceroute -n -q 2 www.baidu.com
traceroute to www.baidu.com (14.119.104.189), 30 hops max, 60 byte packets
1 10.18.200.1 1.647 ms 2.400 ms
2 10.18.1.2 0.544 ms 0.510 ms
3 218.18.96.62 0.669 ms 0.903 ms
4 61.146.247.177 6.987 ms 7.171 ms
5 59.37.176.125 1.548 ms 1.515 ms
6 113.106.35.1 4.091 ms 113.106.34.249 3.840 ms
7 * 113.96.4.254 5.850 ms
8 121.14.14.162 6.066 ms 6.051 ms
9 * *
10 * *
11 * *
12 * *
13 * *
14 * *
15 * *
16 * *
17 * *
18 * *
19 * *
20 * *
21 * *
22 * *
23 * *
24 * *
25 * *
26 * *
27 * *
28 * *
29 * *
30 * *