两端之间的网络丢包
前面提到的是两端机器内部的网络丢包,除此之外,两端之间那么长的一条链路都属于外部网络,这中间有各种路由器和交换机还有光缆啥的,丢包也是很经常发生的。
这些丢包行为发生在中间链路的某些个机器上,我们当然是没权限去登录这些机器。但我们可以通过一些命令观察整个链路的连通情况。
ping命令查看丢包
比如我们知道目的地的域名是 baidu.com。想知道你的机器到baidu服务器之间,有没有产生丢包行为。可以使用ping命令。
ping查看丢包倒数第二行里有个100% packet loss,意思是丢包率100%。
但这样其实你只能知道你的机器和目的机器之间有没有丢包。
那如果你想知道你和目的机器之间的这条链路,哪个节点丢包了,有没有办法呢?
有。
mtr命令
mtr命令可以查看到你的机器和目的机器之间的每个节点的丢包情况。
像下面这样执行命令。
mtr_icmp其中-r是指report,以报告的形式打印结果。
可以看到Host那一列,出现的都是链路中间每一跳的机器,Loss的那一列就是指这一跳对应的丢包率。
需要注意的是,中间有一些是host是???,那个是因为mtr默认用的是ICMP包,有些节点限制了ICMP包,导致不能正常展示。
我们可以在mtr命令里加个-u,也就是使用udp包,就能看到部分???对应的IP。
mtr_udp把ICMP包和UDP包的结果拼在一起看,就是比较完整的链路图了。
还有个小细节,Loss那一列,我们在icmp的场景下,关注最后一行,如果是0%,那不管前面loss是100%还是80%都无所谓,那些都是节点限制导致的虚报。
但如果最后一行是20%,再往前几行都是20%左右,那说明丢包就是从最接近的那一行开始产生的,长时间是这样,那很可能这一跳出了点问题。如果是公司内网的话,你可以带着这条线索去找对应的网络同事。如果是外网的话,那耐心点等等吧,别人家的开发会比你更着急。
参考
使用ping命令丢包或不通时的链路测试方法
https://help.aliyun.com/document_detail/40573.html
Diagnosing Network Issues with MTR
https://www.linode.com/docs/guides/diagnosing-network-issues-with-mtr
mtr命令详解
https://www.cnblogs.com/my-show-time/p/15062134.html
用了TCP协议,就一定不会丢包吗?
https://mp.weixin.qq.com/s/8cXYXAHZCJMPSaaMpDqYtQ
TCP粘包 数据包:我只是犯了每个数据包都会犯的错
https://mp.weixin.qq.com/s/0-YBxU1cSbDdzcZEZjmQYA
漫画图解HTTP知识点
https://mp.weixin.qq.com/s/wNRoDoW_VEqiq8JelePj2g
网友评论