常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Linux 下有一个更好用的网络联通性判断工具,它可以结合ping nslookup tracert 来判断网络的相关特性,这个命令就是 mtr。mtr 全称 my traceroute,是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具。
traceroute 默认使用 UDP 数据包探测,而 mtr 默认使用ICMP报文探测,ICMP在某些路由节点的优先级要比其他数据包低,所以测试得到的数据可能低于实际情况。
安装
Debian/Ubuntu/Linux Mint 下
sudo apt install mtr-tiny
sudo apt install mtr # with GUI
macOS 下:
brew install mtr
使用
简单使用,查看本地到 google.com 的路由连接情况:
mtr google.com
输出参数解释:
- 第一列是IP地址
- 丢包率:Loss
- 已发送的包数:Snt
- 最后一个包的延时:Last
- 平均延时:Avg
- 最低延时:Best
- 最差延时:Wrst
- 方差(稳定性):StDev
参数说明
report
使用 mtr -r google.com
来打印报告,如果不使用 -r
or --report
参数 mtr 会不断动态运行。使用 report 选项, mtr 会向 google.com 主机发送 10 个 ICMP 包,然后直接输出结果。通常情况下 mtr 需要几秒钟时间来输出报告。mtr 报告由一系列跳数组成,每一跳意味着数据包通过节点或者路由器来达到目的主机。
一般情况下 mtr 前几跳都是本地 ISP,后几跳属于服务商比如 Google 数据中心,中间跳数则是中间节点,如果发现前几跳异常,需要联系本地 ISP 服务提供上,相反如果后几跳出现问题,则需要联系服务提供商,中间几跳出现问题,则两边无法完全解决问题。
packetsize
使用 -s
来指定ping数据包的大小
mtr -s 100
100 bytes 数据包会用来发送,测试,如果设置为负数,则每一次发送的数据包的大小都会是一个随机数。
指定发送数量
默认使用 -r
参数来生成报告,只会发送10个数据包,如果想要自定义数据包数量,可以使用 -c
参数
mtr -c 100 google.com
不进行主机解释
使用 -n
选项来让 mtr 只输出 IP,而不对主机 host name 进行解释
mtr -n github.com
常用例子
查看路由:
mtr -rn 1.1.1.1
延伸
在晚上或者 VPS 交流的时候经常能看到别人用可视化的方式展示路由跳转,其实都是使用的 best trace 这样一个软件。
官网地址: https://www.ipip.net/download.html
对于 Windows,Mac 和 Android 页面上都有相应的GUI客户端,Linux 下可使用命令行:
wget http://cdn.ipip.net/17mon/besttrace4linux.zip
unzip besttrace4linux.zip
chmod +x besttrace32
sudo ./besttrace -q 1 www.google.com
如果下载地址失效了,去官网上找最新的即可。