traceroute 用于追踪数据包在网络上的传输时的全部路径。
通过 traceroute 我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
traceroute 通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备 traceroute 要测 3 次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其 IP 地址。
traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...][-i device] [-m max_ttl] [-p port] [-s src_addr][-q nqueries] [-N squeries] [-t tos][-l flow_label] [-w waittimes] [-z sendwait] [-UL] [-D][-P proto] [--sport=port] [-M method] [-O mod_options][--mtu] [--back]host [packet_len]
traceroute6 [options]
traceroute6 等价于 traceroute -6。
-d, --debug使用 Socket 层级的排错功能。
-f, --first=设置第一个检测数据包的存活数值 TTL 的大小。
-F, --dont-fragment设置勿离断位。
-g, --gateway=设置来源路由网关,最多可设置 8 个。
-i, --interface=使用指定的网络界面送出数据包。
-I, --icmp使用 ICMP 回应取代 UDP 资料信息。
-m, --max-hops=设置检测数据包的最大存活数值 TTL 的大小。
-n直接使用 IP 地址而非主机名称。
-p, --port=设置 UDP 传输协议的通信端口。
-r忽略普通的 Routing Table,直接将数据包送到远端主机上。
-s,--source=设置本地主机送出数据包的 IP 地址。
-t, --tos=设置检测数据包的 TOS 数值。
-v详细显示指令的执行过程
-w, --wait=max[,here,near]设置等待远端主机回报的时间。
(1)追踪本地数据包到百度的传输路径。
traceroute www.baidu.com
traceroute to www.baidu.com (220.181.38.150), 30 hops max, 60 byte packets1 11.78.8.225 (11.78.8.225) 2.433 ms 2.634 ms 2.811 ms2 11.78.56.206 (11.78.56.206) 1.370 ms 11.78.55.202 (11.78.55.202) 4.412 ms 4.513 ms3 10.162.71.253 (10.162.71.253) 1.478 ms 1.611 ms 10.162.71.173 (10.162.71.173) 4.687 ms4 10.196.7.57 (10.196.7.57) 0.704 ms 10.196.7.61 (10.196.7.61) 4.564 ms 10.196.7.57 (10.196.7.57) 0.727 ms5 10.200.17.34 (10.200.17.34) 1.138 ms 10.200.17.22 (10.200.17.22) 0.996 ms 10.200.17.30 (10.200.17.30) 0.918 ms6 121.59.124.17 (121.59.124.17) 5.637 ms 5.936 ms 121.59.124.5 (121.59.124.5) 6.480 ms7 69.194.166.13 (69.194.166.13) 10.959 ms 69.194.165.245 (69.194.165.245) 5.319 ms 5.311 ms8 69.194.186.9 (69.194.186.9) 39.255 ms 39.573 ms 69.194.186.85 (69.194.186.85) 39.522 ms9 203.22.178.98 (203.22.178.98) 74.293 ms 203.22.178.102 (203.22.178.102) 74.782 ms 203.22.178.98 (203.22.178.98) 75.312 ms
10 59.43.182.189 (59.43.182.189) 77.611 ms 59.43.249.54 (59.43.249.54) 74.102 ms 59.43.249.38 (59.43.249.38) 73.877 ms
11 * * *
12 * * *
13 * * *
...
(2)设置跳数。
traceroute -m 7 www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 7 hops max, 60 byte packets1 11.78.8.225 (11.78.8.225) 6.552 ms 6.736 ms 6.917 ms2 11.78.56.74 (11.78.56.74) 6.177 ms 11.78.56.204 (11.78.56.204) 4.516 ms 11.78.55.204 (11.78.55.204) 14.675 ms3 10.162.72.21 (10.162.72.21) 5.630 ms 5.541 ms *4 10.196.7.69 (10.196.7.69) 0.587 ms 10.196.7.61 (10.196.7.61) 6.825 ms 6.858 ms5 10.200.17.34 (10.200.17.34) 1.160 ms 10.200.17.30 (10.200.17.30) 1.054 ms 10.200.17.22 (10.200.17.22) 1.126 ms6 121.59.124.5 (121.59.124.5) 6.153 ms 6.077 ms 6.078 ms7 * * 69.194.166.21 (69.194.166.21) 6.055 ms
(3)显示 IP 地址,不查主机名。
traceroute -n www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 30 hops max, 60 byte packets1 11.78.8.225 25.196 ms 25.482 ms 25.652 ms2 11.78.56.72 23.195 ms 11.78.55.72 4.692 ms 11.78.55.76 4.981 ms3 * * *4 10.196.7.65 0.662 ms 10.196.7.69 5.507 ms 10.196.7.61 0.730 ms5 10.200.17.26 4.861 ms 4.858 ms 0.851 ms6 121.59.124.5 6.188 ms 121.59.124.17 5.838 ms 121.59.124.5 6.422 ms7 69.194.165.177 5.373 ms * 69.194.165.209 5.997 ms8 69.194.186.85 39.251 ms 69.194.165.61 44.690 ms 69.194.166.121 42.017 ms9 203.22.178.102 76.251 ms 203.22.178.98 74.774 ms 74.547 ms
10 59.43.249.50 75.237 ms 59.43.182.93 76.105 ms 59.43.249.54 73.602 ms
11 * * *
12 * * *
13 * * *
...
(4)设置探测包的个数。
traceroute -q 4 www.baidu.com1 11.78.8.225 (11.78.8.225) 66.193 ms 66.368 ms 67.125 ms 67.400 ms2 11.78.55.78 (11.78.55.78) 4.961 ms 11.78.56.200 (11.78.56.200) 7.657 ms 11.78.55.76 (11.78.55.76) 5.052 ms 11.78.55.204 (11.78.55.204) 6.132 ms3 10.162.72.21 (10.162.72.21) 4.026 ms * 10.162.71.225 (10.162.71.225) 4.193 ms 10.162.72.21 (10.162.72.21) 3.845 ms
...
(5)设置等待响应时间。
traceroute -w 3 www.baidu.com
traceroute to www.baidu.com (220.181.38.150), 30 hops max, 60 byte packets1 11.78.8.225 (11.78.8.225) 3.784 ms 4.114 ms 4.279 ms2 11.78.56.76 (11.78.56.76) 4.073 ms 11.78.55.72 (11.78.55.72) 103.810 ms 11.78.55.76 (11.78.55.76) 103.894 ms3 10.162.71.129 (10.162.71.129) 4.708 ms 10.162.71.173 (10.162.71.173) 4.781 ms *
...
(6)绕过正常的路由表,直接发送到网络相连的主机。
traceroute -r www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 30 hops max, 60 byte packets
connect: Network is unreachable
(7)探测包使用的基本UDP端口设置 10086。
traceroute -p 10086 www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 30 hops max, 60 byte packets1 11.78.8.225 (11.78.8.225) 3.447 ms 3.691 ms 3.993 ms2 11.78.55.202 (11.78.55.202) 4.210 ms 11.78.56.202 (11.78.56.202) 6.387 ms 11.78.56.200 (11.78.56.200) 6.675 ms3 * * *4 10.196.7.65 (10.196.7.65) 0.664 ms 10.196.7.57 (10.196.7.57) 0.703 ms 10.196.7.65 (10.196.7.65) 0.658 ms
...
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 地址,三个包每次来回所花时间。
tracetroute(8) - Linux manual page - man7.org
上一篇:人别太猖狂的说说
下一篇:如何用一句话来形容自己对画画的爱