网络连通性测试工具ping、tracert、mtr
Ping工具
Ping是基于ICMP协议实现的。通过从源端向目的端发送ICMP回显请求(Echo Request)报文后,根据是否收到目的端的ICMP回显应答(Echo Reply)报文来判断目的端是否可达。即源端在一个有效时间内(等待回显应答报文超时时间之前)收到目的端返回的ICMP回显应答报文,则说明目的端可达。如果在有效时间内,没有收到应答报文,则说明目的端不可达。对于可达的目的端,根据发送报文个数、接收到响应报文个数来判断链路的质量,根据Ping报文的往返时间来判断链路的质量。
ping命令格式
这里只列举了常用的参数,并对参数进行解释说明。
ping [ ip ] [ -a source-ip-address | -c count | -f | -s packetsize | -t timeout ] *host
- -a:设置发送ECHO-Request报文的源IP地址,如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHO-Request报文发送的源地址。
- -c:设置发送ECHO-Request报文的次数,缺省为5。当网络质量不高时,可以增加发送报文数目,通过丢包率来检测网络质量。
- -f:设置发送的报文不分片,如果MTU值小于报文大小会丢弃该报文。
- -s:设置发送ECHO-Request报文大小(不含IP和ICMP头),缺省报文长度是56字节。
- -t:设置发送完ECHO-Request后,等待ECHO-REPLY的超时时间。在网络状况不好的情况下,可以适当改大该参数。缺省为2s,即2s内没有收到回复报文即认为目的不可达。
- host:可以是IP地址或域名,如果是域名会首先进行DNS解析,并显示解析后的IP地址。
可以配合-s和-f参数来探测中间链路最大的MTU(链路PMTU),如设置-s为1472可以通而1473不通,则该链路最大MTU为1500(1472+20IP头+8ICMP头)。
PC上的Ping功能与操作系统相关,这里以Windows操作系统为例说明:
ping [ -n number ] [ -t ] [ -l number ] [ -f ] [ -a ] ip-address
- -n:Ping报文的个数,缺省值为5。
- -t:持续地Ping直到人为中断,Ctrl+Break暂时中止Ping命令并查看当前的统计结果,而Ctrl+C则中断命令的执行。
- -l:设置Ping报文所携带的数据部分的字节数,设置范围从0至65500。
- -f:设置发送的报文不分片,如果MTU值小于报文大小会丢弃该报文。
- -a:反向解析IP地址为主机名。
- ip-address:设置Ping命令的目的IP地址。
ping信息说明
<HUAWEI> ping 10.135.18.118 PING 10.135.18.118: 56 data bytes, press CTRL_C to break Reply from 10.135.18.118: bytes=56 Sequence=1 ttl=255 time=1 ms Reply from 10.135.18.118: bytes=56 Sequence=2 ttl=255 time=1 ms Reply from 10.135.18.118: bytes=56 Sequence=3 ttl=255 time=2 ms Reply from 10.135.18.118: bytes=56 Sequence=4 ttl=255 time=1 ms Reply from 10.135.18.118: bytes=56 Sequence=5 ttl=255 time=2 ms --- 10.135.18.118 ping statistics --- 5 packet(s) transmitted 5 packet(s) received 0.00% packet loss round-trip min/avg/max = 1/1/2 ms
ping命令的显示信息说明:
- 设备发出了5个ping包,均收到了回应。
- 发出的ping包的大小为缺省的56字节。
- ttl=255说明ping的目的设备与发出ping报文的设备直接相连。
- time=1ms说明报文回应时间为1ms,该参数通常可以作为网络是否拥塞的参考。
缺省情况下,ping命令发送5个ping报文,建议使用-c参数进行多次ping,可以更准确反应当前网络的状况。根据返回的ping报文个数,可以对网络状况进行判断。
故障现象 |
可能原因 |
---|---|
全部可达,但时间较长 |
|
全部不可达 |
|
部分可达 |
|
Tracert工具
Ping可以告诉用户目标是否可达,而Tracert命令用于测试数据报文从发送主机到目的地所经过的网关,它主要检查网络连接是否可达,以及分析网络什么地方发生了故障。
Tracert也是基于ICMP协议来实现的,如图1所示,Tracert的工作流程为:
- 源端(SwitchA)向目的端(日志主机)发送一个UDP报文,TTL值为1,目的UDP端口号是大于30000的一个数,因为在大多数情况下,大于30000的UDP端口号是任何一个应用程序都不可能使用的端口号。
- 第一跳(SwitchB)收到源端发出的UDP报文后,判断出报文的目的IP地址不是本机IP地址,将TTL值减1后,判断出TTL值等于0,则丢弃报文并向源端发送一个ICMP超时(Time Exceeded)报文(该报文中含有第一跳的IP地址10.1.1.2),这样源端就得到了SwitchB的地址。
- 源端收到SwitchB的ICMP超时报文后,再次向目的端发送一个UDP报文,TTL值为2。
- 第二跳(SwitchC)收到源端发出的UDP报文后,回应一个ICMP超时报文,这样源端就得到了SwitchC的地址(10.1.2.2)。
- 以上过程不断进行,直到目的端收到源端发送的UDP报文后,判断出目的IP地址是本机IP地址,则处理此报文。根据报文中的目的UDP端口号寻找占用此端口号的上层协议,因目的端没有应用程序使用该UDP端口号,则向源端返回一个ICMP端口不可达(Destination Unreachable)报文(该报文含有目的端的IP地址10.1.3.2)。
- 源端收到ICMP端口不可达报文后,判断出UDP报文已经到达目的端,则停止Tracert程序,从而得到数据报文从源端到目的端所经历的路径(10.1.1.2;10.1.2.2;10.1.3.2)。
tracert命令格式
tracert [ -a source-ip-address | -f first-ttl | -m max-ttl | -p port | -q nqueries | -w timeout ] *host
- -a:指明本次Tracert命令配置的报文源地址。如果不指定源地址,将采用出接口的IP地址作为Tracert报文发送的源地址。
- -f:指定初始TTL。设置first-TTL,当经过的跳数小于此参数值,由于TTL字段的值大于0,经过的这几个节点不会返回ICMP超时报文给源主机。如果已经设置了max-TTL参数值,first-TTL的取值必须小于max-TTL。
- -m:指定最大TTL。通常情况下,max-TTL的值被设置为经过站点的跳数。如果已经设置了first-TTL参数值,max-TTL的取值必须大于first-TTL。缺省情况下,最大TTL为30。
- -p:指定目的主机的UDP端口号。
- 如果不指定目的主机的UDP端口号,Tracert命令使用大于32768的随机的端口作为目标设备的接收报文端口。
- 如果指定目的UDP端口号,需要避免采用对端已经开启的端口号,否则会导致Tracert失败。
- -q:指定每次发送的UDP探测数据报文的个数。当网络质量不高时,可以增加发送探测数据报文的数目,保证探测报文能够到达目的节点。缺省情况下,每次发送三个UDP探测数据报文。
- -w:等待响应报文的超时时间。当发送数据报文到达某网关超时,则输出“ * ”。如果网络质量不高且速度很慢,建议增加发送数据报文的超时时间。缺省超时时间为5000毫秒。
- host:可以是IP地址或域名,如果是域名会首先进行DNS解析,并显示解析后的IP地址。
PC上的Tracert功能与操作系统相关,这里以Windows操作系统为例说明:
tracert [ -d ] [ -h maximum_hops ] [ -j host-list ] [ -w timeout ] host
- -d:不解析主机名。
- -h:指定最大TTL的数值。
- -j:设定松散源地址路由列表。
- -w:用于设置UDP报文的超时时间,单位为毫秒。
- host:指定目的主机的域名或IP地址。
tracert信息说明
<HUAWEI> tracert 10.135.18.118 traceroute to 10.135.18.118(10.135.18.118), max hops: 30 ,packet length: 40,press CTRL_C to break 1 192.168.200.100 10 ms 2 ms 2 ms 2 * * * 3 10.135.18.118 10 ms 1 ms 2 ms
显示信息每行包含编号、到达的设备IP地址、3次报文的响应时间。中间部分显示为“* * *”,说明该节点设备配置不允许Ping和Tracert。
当网络上出现路由环路时,使用ping命令只能知道接收端出现超时错误,而tracert命令能够很容易发现路由环路等潜在问题。在Tracert某地址时,多次出现相同的地址,即可认为出现了路由环路。
Linux系统traceroute
linux系统中使用traceroute命令来测试路由追踪,其原理用法和windows系统一样。
MTR工具
Windows操作系统WinMTR介绍和使用
- 通过浏览器访问外网,搜索并下载WinMTR安装包。
- 解压缩WinMTR安装包,WinMTR无需安装,可以直接解压运行。
- 双击WinMTR.exe,打开WinMTR工具。
- 在WinMTR窗口的Host处,输入目的服务器IP地址或者域名,单击“Start”。
根据实际情况,等待WinMTR运行一段时间,单击“Stop”,结束测试。如下图所示:
测试结果的主要信息如下:
- Hostname:到目的服务器要经过的每个主机IP或域名。
- Nr:经过节点的数量。
- Loss%:对应节点的丢包率。
- Sent:已发送的数据包数量。
- Recv:已接收到响应的数量。
- Best:最短的响应时间。
- Avrg:平均响应时间。
- Worst:最长的响应时间。
- Last:最近一次的响应时间。
Linux操作系统MTR介绍和使用
安装MTR
目前现有的Linux发行版本都预装了MTR,如果您的Linux服务器没有安装MTR,则可以执行以下命令进行安装:
CentOS 操作系统:
yum install mtr
Ubuntu 操作系统:
sudo apt-get install mtr
MTR相关参数说明
- -h/--help:显示帮助菜单。
- -v/--version:显示MTR版本信息。
- -r/--report:结果以报告形式输出。
- -p/--split:与 --report相对,分别列出每次追踪的结果。
- -c/--report-cycles:设置本次探测一共发送的数据包数量,默认是10。
- -s/--psize:设置数据包的大小。
- -n/--no-dns:不对IP地址做域名解析。
- -a/--address:用户设置发送数据包的IP地址,主要用户单一主机多个IP地址的场景。
- -4:IPv4。
- -6:IPv6。
以本机到IP为119.xx.xx.xx的服务器为例。
执行以下命令,以报告形式输出MTR的诊断报告。
mtr 119.xx.xx.xx -- report
回显信息如下:
[root@ecs-0609 ~]# mtr 119.xx.xx.xx --report Start: Thu Aug 22 15:41:22 2019 HOST: ecs-652 Loss% Snt Last Avg Best Wrst StDev 1.|-- 100.70.0.1 0.0% 10 3.0 3.4 2.8 7.5 1.3 2.|-- 10.242.7.174 0.0% 10 52.4 51.5 34.2 58.9 6.3 3.|-- 10.242.7.237 0.0% 10 3.2 5.0 2.7 20.8 5.5 4.|-- 10.230.2.146 0.0% 10 1.0 1.0 1.0 1.1 0.0 5.|-- 192.168.21.1 0.0% 10 3.5 4.2 2.8 11.6 2.5 6.|-- 10.242.7.238 0.0% 10 35.3 34.5 6.0 56.4 22.6 7.|-- 10.242.7.173 0.0% 10 3.3 4.7 3.1 14.7 3.6 8.|-- ??? 100.0 10 0.0 0.0 0.0 0.0 0.0
备注:以上内容摘自华为文档