平进我们在对远程主机的网络情况的好坏进行监测时用到的最多命令莫过于ping和tracert了,而且为了排查具体的问题原因,可能要试上半天才行。那有没有一个工具,把这两者的功能集中在一块,又不停的进行网络状态监测的工具呢?有,他就是mtr ,windows下的版本叫WinMTR
ping 与 tracert 通常被用來检测网络状况和服务器状态。ping 命令会送出封包到指定的服务器,如果服务器有回应就会传送回封包,另外也会告诉我们封包来回的时间。而 tracert 命令则是用来告诉我们从用户的电脑到指定的服务器中间一共会经过那些节点(路由)和每个节点的回应速度。
1软件下载安装
- linux
yum install mtr -y #CentOS
apt-get install mtr -y #Debian/Ubuntu
- Windows
WinMTR 下载
2操作说明
MTR参数:
例如:mtr -n -i -a 0.0.0.0 1.1.1.1
-n no-dns(或简写为-n) :不对IP地址做域名解析
-s :用来指定ping数据包的大小
-i :使用这个参数来设置ICMP返回之间的要求默认是1秒
-a :来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
-r :已报告模式显示
-c : 每秒发送多少包,默认为10个。英文是(–report-cycles COUNT)
–report :结果显示,并不动态显示
在MTR运行过程中,可以输入快捷字母切换模式例如:
?或 h:显示帮助菜单。
d:切换显示模式。
n:切换启用或禁用 DNS 域名解析。
u:切换使用 ICMP或 UDP 数据包进行探测。
Hostname | Nr | Loss% | Sent | Recv | Best | Avg | Worst | Last | StDev |
---|---|---|---|---|---|---|---|---|---|
节点 IP 或域名 | 编号 | 丢包率 | 已发送的数据包数量 | 已成功接收的数据包数量 | 延迟的最小值 | 延迟的平均值 | 延迟的最大值 | 延迟的最后一次值 | 标准偏差。越大说明相应节点越不稳定 |
3具体例子
mtr 报告主要关注延迟(主要看 Avg
)和波动(标准差 StDev
)信息,丢包率(LOSS
)这个指标参考价值不大。一个是有些节点可能会禁止响应ICMP
,这样在这一跳丢包会变成 100% 还有一个原因是骨干网(202.97.*)这里对 ICMP package 的优先级很低,骨干网本身流量压力就很大,ICMP package 该丢就丢
- 上图显示经过20次才到达网址 http://speedtest.fremont.linode.com
- 100.64开头的ip地址为预留的内网ip来用 ,运营商未给我们家庭快递分配公网iP所以 ,通过网络供应商的路由器NAT出去上网的
- 出了公网后来到了 运营商骨干网络
- 网络链路方向->武汉移动->北京移动->香港移动->美国
- 到达目标服务器本地网络,即目标服务器所属提供商的网络。
由于链路抖动或其它因素的影响,节点的Best和Worst值可能相差很大。Avg统计了自链路测试以来所有探测的平均值,所以能更好的反应出相应节点的网络质量。而StDev越高,则说明数据包在相应节点的延时值越不相同,即越离散。所以标准偏差值可用于协助判断Avg是否真实反应了相应节点的网络质量。
4常见的链路异常场景
- 目标地址出现了100%的丢包 ->目标服务器设置了防火墙等相关安全策略
- 运营商骨干网络,出现了明显的丢包,但后续节点均未见异常 ->ICMP限速所致
- 出现循环跳转 ->运营商相关节点路由配置异常所致
- 骨干网络跳中无法收到任何反馈 ->相应节点中断所致。建议结合反向链路测试做进一步确认
5链路测试步骤
本地网络对应的公网IP ->正向链路测试->反向链路测试->测试结果分享