当客户端访问目标服务器出现 ping丢包或 ping不通时,可以通过 tracert或 mtr等工具进行链路测试来判断问题根源。
作系统类型不同,链路测试所使用的工具也有所不同。
Linux 系统
工具一:mtr 命令
mtr(My traceroute)几乎是所有 Linux发行版本预装的网络测试工具。其将 ping和 traceroute的功能合并,所以功能更强大。
mtr默认发送 ICMP数据包进行链路探测。您也可以通过“-u”参数来指定使用 UDP数据包进行探测。
相对于 traceroute只会做一次链路跟踪测试,mtr 会对链路上的相关节点做持续探测并给出相应的统计信息。所以,mtr能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。
用法说明
常见可选参数说明
- --report:以报告模式显示输出。
- --split:将每次追踪的结果分别列出来,而非统计整个结果。
- --psize:指定ping数据包的大小。
- --no-dns:不对IP地址做域名反解析。
- --address:主机有多个 IP地址时,设置发送数据包的IP地址。
- -4:只使用 IPv4协议。
- -6:只使用 IPv6协议。
另外,也可以在mtr运行过程中,输入类似如下的字母来快速切换模式。
- ?或h:显示帮助菜单。
- d:切换显示模式。
- n:启用或禁用DNS域名解析。
- u:切换使用ICMP或UDP数据包进行探测。
命令输出示例
返回结果说明
默认配置下,返回结果中各数据列的说明如下。
- 第一列(Host):节点IP地址和域名。按 n 键可切换显示。
- 第二列(Loss%):节点丢包率。
- 第三列(Snt):每秒发送数据包数。默认值是10,可以通过“-c”参数指定。
- 第四列(Last):最近一次的探测延迟。
- 第五、六、七列(Avg、Best、Worst):分别是探测延迟的平均值、最小值和最大值。
- 第八列(StDev):标准偏差。越大说明相应节点越不稳定。
工具二:traceroute命令
traceroute也是几乎所有Linux发行版本预装的网络测试工具,用于跟踪Internet协议(IP)数据包传送到目标地址时经过的路径。
traceroute先发送小的具有最大存活时间值(Max_TTL)的UDP探测数据包,然后侦听从网关开始的整个链路上的ICMP TIME_EXCEEDED响应。
探测从TTL=1开始,TTL值逐步增加,直至接收到ICMP PORT_UNREACHABLE消息。ICMP PORT_UNREACHABLE消息用于标识目标主机已经被定位,或命令已经达到允许跟踪的最大TTL值。
traceroute默认发送UDP数据包进行链路探测。可以通过“-I”参数来指定使用ICMP数据包进行探测。
用法说明
traceroute [-I] [ -m Max_ttl ] [ -n ] [ -p Port ] [ -q Nqueries ] [ -r ] [ -s SRC_Addr ] [ -t TypeOfService ] [ -f flow ] [ -v ] [ -w WaitTime ] Host [ PacketSize ]
常见可选参数说明
- -d:使用Socket层级的排错功能。
- -f:设置第一个检测数据包的存活数值TTL的大小。
- -F:设置不要分段标识。
- -g:设置来源路由网关,最多可设置8个。
- -i:主机有多个网卡时,使用指定的网卡发送数据包。
- -I:使用ICMP数据包替代UDP数据包进行探测。
- -m:设置检测数据包的最大存活数值TTL的大小。
- -n:直接使用IP地址而非主机名称(禁用DNS反查)。
- -p:设置UDP传输协议的通信端口。
- -r:忽略普通的Routing Table,直接将数据包发送到目标主机上。
- -s:设置本地主机发送数据包的IP地址。
- -t:设置检测数据包的TOS数值。
- -v:详细显示指令的执行过程。
- -w:设置等待远端主机回包时间。
- -x:开启或关闭数据包的正确性检验。
命令输出示例