网络丢包,网络延迟?这款神器帮你搞定所有!
常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Linux 下有一个更好用的网络联通性判断工具,它可以结合ping nslookup traceroute 来判断网络的相关特性,这个命令就是 mtr。
mtr 全称 my traceroute,是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具。
traceroute 默认使用 UDP 数据包探测,而 mtr 默认使用 ICMP 报文探测,ICMP 在某些路由节点的优先级要比其他数据包低,所以测试得到的数据可能低于实际情况。
安装方法
# Debian/Ubuntu 系统
sudo apt install mtr
# RedHat/CentOS 系统
sudo yum install mtr
3. Apple 客户端可以在 App store 搜索 Best NetTools 下载安装
使用
MTR 使用非常简单,查看本机到 qq.com 的路由以及连接情况直接运行如下命令:
mtr qq.com
MTR qq.com 测试界面
具体输出的参数含义为:
第一列是IP地址 丢包率:Loss 已发送的包数:Snt 最后一个包的延时:Last 平均延时:Avg 最低延时:Best 最差延时:Wrst 方差(稳定性):StDev
参数说明
-r or -- report
-c
参数。-s or -- packetsize
-s
来指定ping数据包的大小mtr -s 100 qq.com
-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 数据包。
网络丢包
人为限制MTR丢包
网络延迟
MTR查看网络延迟
从上面的MTR报告截图中,我们可以看到从第11跳到12跳的延迟猛增,直接导致了后面的延迟也很大,一般有可能是11跳到12跳属于不同地域,物理距离导致时延猛增,也有可能是第12条的路由器配置不当,或者是线路拥塞。需要具体问题进行具体的分析。
然而,高延迟并不一定意味着当前路由器有问题。延迟很大的原因也有可能是在返回过程中引发的。从这份报告的截图看不到返回的路径,返回的路径可能是完全不同的线路,所以一般需要进行双向MTR测试。
注:ICMP 速率限制也可能会增加延迟,但是一般可以查看最后一条的时间延迟来判断是否是上述情况。
根据MTR结果解决网络问题
- END - 推荐阅读 Go+Vue DevOps 从入门到项目实战 顶级 DevOps 工具链大盘点 某外企从 0 建设 SRE 运维体系经验分享 Nginx+Redis:高性能缓存利器 主流监控系统 Prometheus 学习指南 基于 eBPF 的 Kubernetes 问题排查全景图发布 一文掌握 Ansible 自动化运维 Linux的10个最危险命令 Kubernetes网络难懂?可能是没看到这篇文章 24 个 Docker 常见问题处理技巧 Shell分析日志文件,全面解锁新姿势! 这篇文章带你全面掌握 Nginx ! 基于Nginx实现灰度发布与AB测试 一文搞懂 Kubernetes 网络通信原理 SRE本质就是一个懂运维的资深开发 搭建一套完整的企业级 K8s 集群(v1.22,二进制方式) 点亮,服务器三年不宕机