traceroute命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其ip地址。
格式:traceroute [选项] [参数]
-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.1 追踪本地数据包到百度的传输路径
[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (183.232.231.172), 30 hops max
4.2 设置跳数
[root@localhost ~]# traceroute -m 7 www.baidu.com
traceroute to www.baidu.com (183.232.231.174), 7 hops max, 60 byte packets
1 gateway (172.16.0.1) 0.907 ms 2.072 ms 3.795 ms
2 * * *
4.3 显示IP地址,不查主机名
[root@localhost ~]# traceroute -n www.baidu.com
traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packets
1 172.16.0.1 1.103 ms 2.567 ms 3.163 ms
2 * * *
4.4 设置探测包的个数
[root@localhost ~]# traceroute -q 4 www.baidu.com
traceroute to www.baidu.com (183.232.231.172), 30 hops max, 60 byte packets
1 gateway (172.16.0.1) 0.927 ms 2.614 ms 3.645 ms 4.239 ms
2 * * * *
4.5 设置等待响应时间
[root@localhost ~]# traceroute -w 3 www.baidu.com
traceroute to www.baidu.com (183.232.231.172), 30 hops max, 60 byte packets
1 gateway (172.16.0.1) 2.017 ms 3.584 ms 4.136 ms
2 * * *
4.6 绕过正常的路由表,直接发送到网络相连的主机
[root@localhost ~]# traceroute -r www.baidu.com
traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packets
connect: 网络不可达
[root@localhost ~]#
4.7 探测包使用的基本UDP端口设置10086
[root@localhost ~]# traceroute -p 10086 www.baidu.com
traceroute to www.baidu.com (183.232.231.172), 30 hops max, 60 byte packets
1 gateway (172.16.0.1) 1.055 ms 2.671 ms 3.537 ms
2 * * *
4.8 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地址,三个包每次来回所花时间。
参考:【Linux】一步一步学Linux系列教程汇总