traceroute+mtr
traceroute与mtr
traceroute
-
从源地址发出一个UDP探测包到目的地址,并将TTL设置为1;
-
到达路由器时,将TTL减1;
-
当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;
-
当源地址收到该ICMP包时,显示这一跳路由信息;
-
重复1~5,并每次设置TTL加1;
-
直至目标地址收到探测数据包,并返回端口不可达通知(ICMP Port Unreachable);
-
当源地址收到ICMP Port Unreachable包时停止traceroute。
注:1. Linux和Mac OS等系统使用UDP包进行探测,目标端口号默认为33434,每次探测目标端口号加1。Traceroute故意使用了一个大于 30000 的目标端口号,以保证目标地址收到数据包后能够返回一个“端口不可达”的 ICMP 报文,于是源地址就可将端口不可达报文当作跟踪结束的标志。2.每个探测包都有唯一的标识号,使得Traceroute能够识别返回的包。UDP数据包使用递增的目标端口号进行标识。traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
1.命令格式:
traceroute[参数][主机]
2.命令功能:
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
3.命令参数:
-d 允许进行socket级别的调试(当Linux kernel支持它的时候)Enable socket level debugging (when the Linux kernel supports it)-f 设置第一个检测数据包的存活数值TTL的大小。-F 将`“不要分段Don't Fragment”`位置位。这将告诉中间路由器不要将该包分段(当路由器发现该探测包对于网络中MTU来说太大的时候)-g 设置来源路由网关,最多可设置8个。-i 使用指定的网络接口送出数据包。-I 使用ICMP回应取代UDP资料信息。-T 对探测使用TCP SYN-m 设置检测数据包的最大存活数值TTL的大小。默认30-n 直接使用IP地址而非主机名称。-p port 设置要使用的目标端口。要么是“默认”方法的初始udp端口值(按每个探测递增,默认值为33434),或“icmp”的初始序列(也递增,默认值为1),或某个固定目标其他方法的端口(默认为80“tcp”,53代表“udp”等)-r 忽略普通的Routing Table,直接将数据包送到远端主机上。-s 设置本地主机送出数据包的IP地址。源地址-t 设置检测数据包的TOS数值。对于IPv 4,设置服务类型(TOS)和优先级值。有用的值是16(低延迟)和8(高吞吐量)。注意,为了使用一些TOS优先级值,您必须是超级用户。对于IPv 6,设置流量控制值-v 详细显示指令的执行过程。-w 指定等待应答的时间,默认5s。-q nqueries设置每个跳的探测数据包数。默认为3-z 探测之间的最小时间间隔(默认为0)。如果值大于10,则它指定一个以毫秒为单位的数字,否则为秒数(浮点值也允许)。当某些路由器对icmp消息使用速率限制时非常有用。-M 对traceroute操作使用指定的方法。默认的传统udp方法名为默认情况下,icmp(-I)和tcp(-T)分别有icmp和tcp名称。方法特定的选项可以通过-O传递。大多数方法都有其简单的快捷方式,(-I意思是-M icmp等)。-O 指定一些特定于方法的选项。几个选项用逗号分隔(或在cmdline上使用多个-O)。-U 使用UDP对特定的目标端口进行跟踪(而不是增加每个探针的端口)。默认端口为53(DNS)-P protocol 使用指定协议的原始数据包进行跟踪路由。默认协议是253(rfc3692)。
例1:traceroute 用法简单、最常用的用法
命令:
traceroute www.baidu.com输出traceroute to www.baidu.com (220.181.38.149), 30 hops max, 60 byte packets1 bogon (192.168.0.1) 11.205 ms 11.283 ms 15.513 ms2 bogon (10.18.0.1) 18.147 ms 18.089 ms 18.013 ms3 bogon (172.17.4.53) 18.811 ms 18.737 ms 18.667 ms4 bogon (172.17.2.74) 17.919 ms 17.877 ms 17.813 ms5 bogon (172.17.3.73) 18.413 ms 18.358 ms 18.300 ms6 1.193.202.1.static.bjtelecom.net (1.202.193.1) 42.078 ms 23.129 ms 6.226 ms7 * * *8 36.110.244.46 (36.110.244.46) 12.896 ms 18.089 ms 19.891 ms9 36.110.244.94 (36.110.244.94) 21.361 ms 36.110.244.90 (36.110.244.90) 20.628 ms *10 220.181.182.30 (220.181.182.30) 19.863 ms 220.181.182.170 (220.181.182.170) 19.821 ms 220.181.182.178 (220.181.182.178) 19.759 ms11 * * *12 * * *30 * * *
说明:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;
Traceroute每跳默认发送3个探测包(发包的数量可通过-q进行设置),探测包的返回会受到网络情况的影响。如果防火墙封掉了ICMP的返回信息,那么相应的延时位置会以*显示。如果某台网关阻塞或者某台DNS出现问题,那么相应行的延时会变长。可以加-n 参数来避免DNS解析,以IP格式输出数据。
traceroute 主要利用 IP 数据包的 TTL 字段值 + ICMP 来实现,它发送的用于探测网络路径的数据包的 IP 之上的协议可以是 UDP、TCP或ICMP。不同模式下,探测过程中设计的数据包如下:UDP 模式UDP 探测数据包(目标端口大于 30000) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 ICMP Destination Unreachable 数据包TCP 模式TCP [SYN] 探测数据包(目标端口为 Web 服务的 80) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 TCP [SYN ACK] 数据包ICMP 模式ICMP Echo (ping) Request 探测数据包 + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 ICMP Echo (ping) reply 数据包
MTR
运行Mtr指定一个IP地址,Mtr会查看运行Mtr的主机和指定目标主机之间的网络节点。在确定目标主机和本地主机间每个网络节点的IP地址后,它向每个网络节点发送一个ICMP ECHO请求,以确定到每个节点的链路的质量。就像这样它会打印到每个节点的运行统计信息。通过这个工具我们可以大概定位到网络出问题的节点,再来具体分析。
查看mtr的参数
mtr -h 提供帮助命令mtr -v 显示mtr的版本信息mtr -r 已报告模式显示mtr -w 选项标志使用主机名mtr -c 设置每秒发送数据包的数量mtr -s 用来指定ping数据包的大小mtr -n no-dns不对IP地址做域名解析mtr -a 来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的mtr -i 使用这个参数来设置ICMP返回之间的要求默认是1秒。因此将其设置为十分之几秒(0.1,0.2等)通常很有帮助。mtr -u 使用UDP数据报而不是ICMP ECHO。mtr -4 IPv4mtr -6 IPv6
例1
mtr -r -c 30 -s 1024 -n www.baidu.com
[root@master ~]# mtr -r -c 30 -s 1024 -n www.baidu.comHOST: master Loss% Snt Last Avg Best Wrst StDev1. 192.168.0.1 3.3% 30 5.1 10.2 1.8 33.8 7.82. 10.18.0.1 0.0% 30 7.0 10.7 3.3 40.7 9.53. 172.17.4.53 0.0% 30 5.4 10.4 3.6 32.0 7.84. ??? 100.0 30 0.0 0.0 0.0 0.0 0.05. 172.17.3.73 3.3% 30 10.4 11.9 4.3 25.5 6.56. 1.202.193.1 0.0% 30 19.8 20.3 4.5 106.8 24.37. ??? 100.0 30 0.0 0.0 0.0 0.0 0.08. 36.110.244.46 93.3% 30 9.0 17.4 9.0 25.8 11.89. 36.110.246.242 33.3% 30 32.0 16.2 7.0 55.5 11.010. 220.181.17.18 0.0% 30 5.9 17.0 5.9 49.2 11.211. ??? 100.0 30 0.0 0.0 0.0 0.0 0.012. ??? 100.0 30 0.0 0.0 0.0 0.0 0.013. ??? 100.0 30 0.0 0.0 0.0 0.0 0.014. ??? 100.0 30 0.0 0.0 0.0 0.0 0.015. 220.181.38.150 0.0% 24 22.9 14.2 7.7 26.4 5.5
报告说明:
第一列:显示的是IP地址和本机域名
第二列:是显示的到每个对应节点IP的丢包率
第三列:snt:30 设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。
第四列:显示到对应节点最后一次值的返回时延(毫秒)
第五列:发送的数据包到对应节点返回的平均(average)时延(毫秒)
第六列:发送的数据包到对应节点返回的最好或者说时延最短的(毫秒)
第七列:发送的数据包到对应节点返回的最差或者说时延最常的(毫秒)
第八列:每个节点时延的标准偏差(standard deviation )(毫秒)
#注:在大多数情况下,average(Avg)列是关注的焦点。最后一列StDev提供了每个主机的延迟标准偏差。标准差越大,延迟测量之间的差异越大。标准偏差允许您评估所提供的平均值(平均值)是否代表数据集的真实中心,或者是否因某种现象或测量误差而偏斜。如果标准偏差很高,请查看最佳和最差延迟测量,以确保平均值是实际延迟的良好表示,而不是太大波动的结果。
1、为什么提示有???
问号:是因为该节点防火墙封掉了ICMP的返回信息,所以我们得不到相关的数据包返回数据。
2、为什么中间某些节点有丢包而后面节点有没有丢包了:
对于MTR报告我们主要关注丢包率和延时。如果在Loss% 列有丢包,说明这一跳可能有问题。但是,ISP会人为的限制ICMP的速率,这也会导致丢包现象。
3、如何排除是限速干扰了?
我们只需要观察丢包的下一跳或者后面几跳是否有丢包率为0的情况,如果有,则说明是设备本身的干扰。
判定理由:如果中间路由某跳确实丢包,那么后续节点肯定收不到预定的数据包数量了。对于MTR测试结果,一般首先看最后一跳,如果最后一跳有丢包,那么这个分析才是有意义的。
例2
mtr -r -n www.google.com
[root@master ~]# mtr -r -n www.google.comHOST: master Loss% Snt Last Avg Best Wrst StDev1. 192.168.0.1 0.0% 10 6.5 5.8 1.4 12.5 3.92. 10.18.0.1 0.0% 10 3.6 6.3 2.6 12.2 3.83. 172.17.4.53 0.0% 10 3.3 9.0 2.9 27.5 9.54. 172.17.2.74 0.0% 10 11.9 7.4 2.8 14.5 4.25. 172.17.3.73 0.0% 10 8.1 11.1 4.4 34.8 8.86. 1.202.193.1 0.0% 10 9.8 24.5 6.8 84.9 25.37. 106.120.235.13 60.0% 10 6.4 20.5 6.4 54.1 22.78. 219.141.135.174 0.0% 10 8.4 13.4 5.1 48.5 12.79. ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
流量确实到达目标主机。但是,MTR报告显示丢失,因为目标主机未发送回复。这可能是由于未正确配置的网络或防火墙(iptables)规则导致主机丢弃ICMP数据包的结果。

浙公网安备 33010602011771号