traceroute,traceroute命令详解
traceroute原理
一、traceroute原理一
1、从源地址发出一个UDP探测包到目的地址,并将TTL设置为1;
2、到达路由器时,将TTL减1;
3、当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;
4、当源地址收到该ICMP包时,显示这一跳路由信息;
5、重复1~5,并每次设置TTL加1;
6、直至目标地址收到探测数据包,并返回端口不可达通知(ICMP Port Unreachable);
7、当源地址收到ICMP Port Unreachable包时停止traceroute。
二、traceroute原理二
1、从源地址发出一个ICMP请求回显(ICMP Echo Request)数据包到目的地址,并将TTL设置为1;
2、到达路由器时,将TTL减1;
3、当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;
4、当源地址收到该ICMP包时,显示这一跳路由信息;
5、重复1~5,并每次设置TTL加1;
6、直至目标地址收到探测数据包,并返回ICMP回应答复(ICMPEcho Reply);
7、当源地址收到ICMP Echo Reply包时停止tracert。
路由跟踪命令traceroute / tracert
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。
当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,
但基本上来说大部分时候所走的路由是相同的。
linux系统中,我们称之为traceroute,在MS Windows中为tracert。
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。
一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
说明:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是-q的默认参数。
探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 ,表示向每个网关发送4个数据包。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。
出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。
当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;
您可以加-n 参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。
如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;
但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
说明:
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地址,三个包每次来回所花时间。
traceroute
traceroute 是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。traceroute 的原理是试图以最小的TTL发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。发送数据包的大小默认为 38个字节。
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
SYNOPSIS
???????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 waittime] [-z sendwait]
???????????????[-UL] [-P proto] [--sport=port] [-M method] [-O mod_options]
???????????????[--mtu] [--back]
???????????????host [packet_len]
traceroute [参数选项] hostname,域名或 IP地址
-i 指定网络接口,对于多个网络接口有用。比如 -i eth1 或-i ppp1等;
-m 把在外发探测试包中所用的最大生存期设置为max-ttl次转发,默认值为30次;
-n 显示IP地址,不查主机名。当DNS不起作用时常用到这个参数;
-p port 探测包使用的基本UDP端口设置为port ,默认值是33434
-q n 在每次设置生存期时,把探测包的个数设置为值n,默认时为3;
-r 绕过正常的路由表,直接发送到网络相连的主机;
-w n 把对外发探测包的等待响应时间设置为n秒,默认值为3秒;
用法实例:
traceroute? ?
pc:~$ traceroute?
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to (220.181.111.188), 64 hops max, 52 byte packets
1??bogon (10.x.x.x)??0.968 ms??0.711 ms??0.710 ms
2??bogon (172.x.x.x)??0.571 ms??0.545 ms??0.429 ms
3 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (219.x.x.x)??4.131 ms??3.252 ms??2.789 ms
4 25.x.x.x.static.bjtelecom.net (106.x.x.x)??2.565 ms??2.067 ms??2.133 ms
5??* * *
6??36.x.x.x (36.x.x.x)??3.360 ms
????219.x.x.x (219.x.x.x)??3.425 ms
????36.x.x.x (36.x.x.x)??3.304 ms
7??* * *
8??220.x.x.x (220.x.x.x)??2.803 ms??4.935 ms
????220.x.x.x (220.x.x.x)??3.736 ms
9??* * *
traceroute?-m?10? ? ? ? 设置跳数为10
pc:~ $ traceroute -m 10?
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to? (220.181.111.188), 10 hops max, 52 byte packets
1??bogon (10.x.x.x)??1.067 ms??4.024 ms??0.712 ms
2??bogon (172.x.x.x)??0.309 ms??0.337 ms??0.607 ms
3?? 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (219.x.x.x)??2.683 ms??3.353 ms??2.947 ms
4?? 25.x.x.x.static.bjtelecom.net (x.x.x.25)??2.179 ms??2.325 ms??2.043 ms
5??* * *
6??36.x.x.x (36.x.x.x)??3.590 ms??7.793 ms??6.461 ms
7??* * *
8??220.x.x.x (220.x.x.x)??3.175 ms??2.893 ms
????220.x.x.x (220.x.x.x)??5.538 ms
9??* * *
10??* * *
traceroute?-n? ? ? ?只显示ip
pc:~ $ traceroute -n?
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to? (220.181.111.188), 64 hops max, 52 byte packets
1??10.x.x.x??0.946 ms??0.761 ms??0.718 ms
2??172.x.x.x??0.452 ms??0.338 ms??0.389 ms
3??219.x.x.x??3.174 ms??4.038 ms??2.379 ms
4??106.x.x.x??2.910 ms??1.960 ms??1.654 ms
5??* * *
6??36.x.x.x??3.321 ms??4.275 ms??3.637 ms
traceroute?-p?6888? ?? ? 设置探测包使用的基本UDP端口
pc:~ $ traceroute -p 6888?
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to? (220.181.111.188), 64 hops max, 52 byte packets
1??bogon (10.x.x.x)??0.989 ms??0.752 ms??0.722 ms
2??bogon (172.x.x.x)??0.489 ms??0.399 ms??0.327 ms
3?? 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (219.x.x.x)??3.094 ms??3.442 ms??3.529 ms
4?? 25.x.x.x.static.bjtelecom.net (106.x.x.x)??1.837 ms??2.488 ms??2.516 ms
5??* * *
6??* 36.x.x.x (36.x.x.x)??4.876 ms
traceroute?-q?4? ? ?设置探测包的个数
pc:~$ traceroute -q 4?
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to? (220.181.111.188), 64 hops max, 52 byte packets
1??bogon (10.x.x.x)??0.970 ms??0.721 ms??4.360 ms??0.667 ms
2??bogon (172.x.x.x)??0.534 ms??0.640 ms??0.363 ms??0.449 ms
3?? 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (x.x.x.129)??2.831 ms??3.221 ms??2.878 ms??2.814 ms
4?? 25.x.x.x.static.bjtelecom.net (x.x.x.25)??1.921 ms??2.564 ms??2.472 ms??3.979 ms
5?? 177.x.x.x.static.bjtelecom.net (x.x.x.177)??2.465 ms * * *
6??219.x.x.x (219.x.x.x)??4.245 ms
????36.x.x.x (36.x.x.x)??3.681 ms??3.053 ms
????220.x.x.x (220.x.x.x)??3.444 ms
traceroute?-r? ? ? ?绕过正常的路由表直接发送到网络相连的主机
pc:~ $ traceroute -r?
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to? (220.181.111.188), 64 hops max, 52 byte packets
traceroute: sendto: Network is unreachable
1 traceroute: wrote 52 chars, ret=-1
*traceroute: sendto: Network is unreachable
traceroute: wrote 52 chars, ret=-1
*traceroute: sendto: Network is unreachable
traceroute: wrote 52 chars, ret=-1
*
traceroute: sendto: Network is unreachable
2 traceroute: wrote 52 chars, ret=-1
traceroute -w 3? ? ? ? ?把对外发探测包的等待响应时间设置为n秒,默认值为3秒
pc:~ $ traceroute -w 3
traceroute: Warning: has multiple addresses; using 220.181.111.188
traceroute to? (220.181.111.188), 64 hops max, 52 byte packets
1??bogon (10.x.x.x)??0.957 ms??0.710 ms??0.713 ms
2??bogon (172.x.x.x)??0.603 ms??0.616 ms??0.321 ms
3? 129.x.x.x.broad.bj.bj.dynamic.163data.com .cn (x.x.x.129)??3.744 ms??2.371 ms??2.625 ms
4? 25.x.x.x.static.bjtelecom.net (x.x.x.25)??2.022 ms *??3.474 ms
5??* * *
6??36.x.x.x (36.x.x.x)??4.408 ms??5.760 ms??3.091 ms
7??* * *
8??220.x.x.x (220.x.x.x)??3.482 ms
????220.x.x.x (220.x.x.x)??3.024 ms
????220.x.x.x (220.x.x.x)??3.377 ms
9??* *
traceroute -i eth0 -4? ?使用eth0网口以及IPV4协议
[root@ip-ops]# traceroute -i eth0 -4?
traceroute to (220.181.112.244), 30 hops max, 60 byte packets
1? compute.amazonaws.com .cn (54.x.x.x)??15.993 ms? compute.amazonaws.com .cn (54.x.x.x)??11.778 ms .compute.amazonaws.com .cn (54.x.x.x)??12.896 ms
2??100.x.x.x (100.x.x.x)??21.890 ms 100.x.x.x (100.x.x.x)??21.880 ms 100.x.x.x (100.x.x.x)??21.630 ms
3??100.x.x.x (100.x.x.x)??12.609 ms 100.x.x.x (100.x.x.x)??22.017 ms 100.x.x.x(100.x.x.x)??14.010 ms
4??100.x.x.x (100.x.x.x)??0.256 ms 100.x.x.x (100.x.x.x)??0.261 ms 100.x.x.x (100.x.x.x)??0.209 ms
5??54.x.x.x (54.x.x.x)??1.071 ms 54.x.x.x (54.x.x.x)??1.536 ms??1.639 ms