网络排查工具MTR

常用的 ping , tracert , nslookup 一般用来判断主机的网络连通性 , 其实 linux 下有一个更好用的网络联通性判断工具 , 它可以结合ping nslookup tracert 来判断网络的相关特性 , 这个命令就是 mtr 。mtr 全称 my traceroute , 是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具 。
traceroute默认使用UDP数据包探测 , 而mtr默认使用ICMP报文探测 , ICMP在某些路由节点的优先级要比其他数据包低 , 所以测试得到的数据可能低于实际情况 。
安装方法
1.windows系统可以直接在https://cdn.ipip.net/17mon/besttrace.exe下载BestTrace工具并安装 。也可以在https://github.com/oott123/WinMTR/releases GitHub上下载MTR专用工具 , 该工具为免安装 , 下载后可以直接使用 。
2.Linux可以直接运行命令进行安装 。
# Debian/Ubuntu 系统
apt install mtr
# RedHat/centos 系统
yum install mtr
3.Apple客户端可以在App store搜索Best NetTools下载安装
4.Android客户端:可以在google Play上下载TracePing , 但是由于国内Google Play无法访问 , 笔者自行下载下来 , 可以直接访问 https://dwz.cn/KCdNPH4c 下载TracePing 。
使用
MTR使用非常简单 , 查看本机到 qq.com 的路由以及连接情况直接运行如下命令:
mtr qq.com

网络排查工具MTR

文章插图
   MTR qq.com 测试界面
具体输出的参数含义为:
  • 第一列是IP地址
  • 丢包率:
  • Loss
  • 已发送的包数:
  • Snt
  • 最后一个包的延时:
  • Last
  • 平均延时:
  • Avg
  • 最低延时:
  • Best
  • 最差延时:
  • Wrst
  • 方差(稳定性):
  • StDev
参数说明
-r or --report
使用 mtr -r qq.com 来打印报告 , 如果不使用 -r or --report 参数 mtr 会不断动态运行 。使用 report 选项 ,  mtr 会向 qq.com 主机发送 10 个 ICMP 包 , 然后直接输出结果 。通常情况下 mtr 需要几秒钟时间来输出报告 。mtr 报告由一系列跳数组成 , 每一跳意味着数据包通过节点或者路由器来达到目的主机 。
一般情况下 mtr 前几跳都是本地 ISP , 后几跳属于服务商比如 腾讯数据中心 , 中间跳数则是中间节点 , 如果发现前几跳异常 , 需要联系本地 ISP 服务提供上 , 相反如果后几跳出现问题 , 则需要联系服务提供商 , 中间几跳出现问题 , 则需要联系运营商进行处理
默认使用 -r 参数来生成报告 , 只会发送10个数据包 , 如果想要自定义数据包数量 , 可以使用 -c 参数
-s or --packetsize
使用 -s 来指定ping数据包的大小
mtr -s 100 qq.com
100 bytes 数据包会用来发送 , 测试 , 如果设置为负数 , 则每一次发送的数据包的大小都会是一个随机数 。
-c
指定发送数量
mtr -c 100 qq.com
-n
不进行主机解释
使用 -n 选项来让 mtr 只输出 IP , 而不对主机 host name 进行解释
mtr -n qq.com
MTR结果分析
当我们分析 MTR 报告时候 , 最好找出每一跳的任何问题 。除了可以查看两个服务器之间的路径之外 , MTR 在它的七列数据中提供了很多有价值的数据统计报告 。Loss% 列展示了数据包在每一跳的丢失率 。Snt 列记录的多少个数据包被送出 。使用 –report 参数默认会送出10个数据包 。如果使用 –report-cycles=[number-of-packets] 选项 , MTR 就会按照 [number-of-packets] 指定的数量发出 ICMP 数据包 。
Last, Avg, Best 和 Wrst 列都标识数据包往返的时间 , 使用的是毫秒( ms )单位表示 。Last 表示最后一个数据包所用的时间 ,  Avg 表示评价时间 ,  Best 和 Wrst 表示最小和最大时间 。在大多数情况下 , 平均时间( Avg)列需要我们特别注意 。
最后一列 StDev 提供了数据包在每个主机的标准偏差 。如果标准偏差越高 , 说明数据包在这个节点的延时越不相同 。标准偏差会让您了解到平均延时是否是真的延时时间的中心点 , 或者测量数据受到某些问题的干扰 。
例如 , 如果标准偏差很大 , 说明数据包的延迟是不确定的 。一些数据包延迟很小(例如:25ms) , 另一些数据包延迟很大(例如:350ms) 。当10个数据包全部发出后 , 得到的平均延迟可能是正常的 , 但是平均延迟是不能很好的反应实际情况的 。如果标准偏差很高 , 使用最好和最坏的延迟来确定平均延迟是一个较好的方案 。


推荐阅读