- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
所谓丢包,是指在网络数据的收发过程中,由于种种原因,数据包还没传输到应用程序中,就被丢弃了。这些被丢弃包的数量,除以总的传输包数,也就是我们常说的丢包率。丢包率是网络性能中最核心的指标之一。丢包通常会带来严重的性能下降,特别是对TCP来说,丢包通常意味着网络拥塞和重传,进而还会导致网络延迟增大、吞吐降低。
一、哪里可能丢包
接下来,我就以最常用的反向代理服务器Nginx为例,带你一起看看如何分析网络丢包的问题。执行下面的hping3命令,进一步验证Nginx是不是可以正常访问。这里我没有使用ping,是因为ping基于ICMP协议,而Nginx使用的是TCP协议。
#?-c表示发送10个请求,-S表示使用TCP?SYN,-p指定端口为80
hping3?-c?10?-S?-p?80?0
?
HPING?0?(eth0?0):?S?set,?40?headers?+?0?data?bytes
len=44?ip=0?ttl=63?DF?id=0?sport=80?flags=SA?seq=3?win=5120?rtt=7.5?ms
len=44?ip=0?ttl=63?DF?id=0?sport=80?flags=SA?seq=4?win=5120?rtt=7.4?ms
len=44?ip=0?ttl=63?DF?id=0?sport=80?flags=SA?seq=5?win=5120?rtt=3.3?ms
len=44?ip=0?ttl=63?DF?id=0?sport=80?flags=SA?seq=7?win=5120?rtt=3.0?ms
len=44?ip=0?ttl=63?DF?id=0?sport=80?flags=SA?seq=6?win=5120?rtt=3027.2?ms
?
---?0?hping?statistic?---
10?packets?transmitted,?5?packets?received,?50%?packet?loss
round-trip?min/avg/max?=?3.0/609.7/3027.2?ms
从hping3的输出中,我们可以发现,发送了10个请求包,却只收到了5个回复,50%的包都丢了。再观察每个请求的RTT可以发现,RTT也有非常大的波动变化,小的时候只有3ms,而大的时候则有3s。根据这些输出,我们基本能判断,已经发生了丢包现象。可以猜测,3s的RTT,很可能是因为丢包后重传导致的。
那到底是哪里发生了丢包呢?排查之前,我们可以回忆一下Linux的网络收发流程,先从理论上分析,哪里有可能会发生丢包。你不妨拿出手边的笔和纸,边回忆边在纸上梳理,思考清楚再继续下面的内容。在这里,为了帮你理解网络丢包的原理,我画了一张图,你可以保存并打印出来使用
从图中你可以看出,可能发生丢包的位置,实际上贯穿了整个网络协议栈。换句话说,全程都有丢包的可能。
在两台VM连接之间,可能会发生传输失败的错误,比如网络拥塞、线路错误等;
在网卡收包后,环形缓冲区可能会因为溢出而丢包;
在链路层,可能会因为网络帧校验失败、QoS等而丢包;
在IP层,可能会因为路由失败、组包大小超过MTU等而丢包;
在传输层,可能会因为端口未监听、资源占用超过内核限制等而丢包;
在套接字层,可能会因为套接字缓冲区溢出而丢包;
在应用层,可能会因为应用程序异常而丢包;
此外,如果配置了iptables规则,这些网络包也可能因为iptables过滤规则而丢包
当然,上面这些问题,还有可能同时发生在通信的两台机器中。不过,由于我们没对VM2做任何修改,并且VM2也只运行了一个最简单的hping3命令,这儿不妨假设它是没有问题的。为了简化整个排查过程,我们还可以进一步假设,VM1的网络和内核配置也没问题。接下来,就可以从协议栈中,逐层排查丢包问题。
二、链路层
当链路层由于缓冲区溢出等原因导致网卡丢包时,Linux会在网卡收发数据的统计信息中记录下收发错误的次数。可以通过ethtool或者netstat,来查看网卡的丢包记录。
netstat?-i
?
Kernel?Interface?table
Iface??????MTU????RX-OK?RX-ERR?RX-DRP?RX-OVR????TX-OK?TX-ERR?TX-DRP?TX-OVR?Flg
eth0???????100???????31??????0??????0?0?????????????8??????0??????0??????0?BMRU
lo???????65536????????0??????0??????0?0????????
文档评论(0)