引言本期分享一个比较常见的网络问题--丢包 。例如我们去ping一个网站,如果能ping通,且网站返回信息全面,则说明与网站服务器的通信是畅通的,如果ping不通,或者网站返回的信息不全等,则很可能是数据被丢包了,类似情况想必大家都不陌生 。针对网络丢包,本人提供一些常见的丢包故障定位方法,希望能够帮助大家对网络丢包有更多的认识,遇到丢包莫要慌,且跟着一起来涨姿(知)势(识)···
什么是丢包数据在Internet上是以数据包为单位传输的,单位为字节,数据在网络上传输,受网络设备,网络质量等原因的影响,使得接收到的数据少于发送出去的数据,造成丢包 。
数据包接收、发送原理
![网络编程之网络丢包故障如何定位?如何解决?](http://img.jiangsulong.com/220505/14152Q143-0.jpg)
文章插图
发送数据包:
1.应用程序的数据包,在TCP层增加TCP报文头,形成可传输的数据包 。
2.在IP层增加IP报头,形成IP报文 。
3.经过数据网卡驱动程序将IP包再添加14字节的MAC头,构成frame(暂?CRC),frame(暂?CRC)中含有发送端和接收端的MAC地址 。
4.驱动程序将frame(暂?CRC)拷贝到网卡的缓冲区,由网卡处理 。
5.?卡为frame(暂?CRC)添加头部同步信息和CRC校验,将其封装为可以发送的packet,然后再发送到网线上,这样说就完成了一个IP报文的发送了,所有连接到这个网线上的网卡都可以看到该packet 。
接收数据包:
![网络编程之网络丢包故障如何定位?如何解决?](http://img.jiangsulong.com/220505/14152S0L-1.jpg)
文章插图
1.?卡收到?线上的packet,?先检查packet的CRC校验,保证完整性,然后将packet头去掉,得到frame 。(?卡会检查MAC包内的?的MAC地址是否和本?卡的MAC地址?样,不?样则会丢弃 。)
2.?卡将frame拷贝到预分配的ring buffer缓冲 。
3.?卡驱动程序通知内核处理,经过TCP/IP协议栈层层解码处理 。
4.应?程序从socket buffer 中读取数据 。
核心思路了解了收发包的原理,可以了解到丢包原因主要会涉及?卡设备、?卡驱动、内核协议栈三?类 。以下我们将遵循“从下到上分层分析(各层可能性出现的丢包场景),然后查看关键信息,最终得出分析结果”的原则展开介绍 。
目录--网络丢包情形概览> 硬件网卡丢包
> 网卡驱动丢包
> 以太网链路层丢包
> 网络IP层丢包
> 传输层UDP/TCP丢包
> 应用层socket丢包
针对以上6种情形,分别作出如下详述~
硬件网卡丢包Ring Buffer溢出
![网络编程之网络丢包故障如何定位?如何解决?](http://img.jiangsulong.com/220505/14152V2B-2.jpg)
文章插图
如图所示,物理介质上的数据帧到达后首先由NIC(网络适配器)读取,写入设备内部缓冲区Ring Buffer中,再由中断处理程序触发Softirq从中消费,Ring Buffer的大小因网卡设备而异 。当网络数据包到达(生产)的速率快于内核处理(消费)的速率时,Ring Buffer很快会被填满,新来的数据包将被丢弃;
查看:
通过ethtool或/proc/net/dev可以查看因Ring Buffer满而丢弃的包统计,在统计项中以fifo标识:
$ ethtool -S eth0|grep rx_fiforx_fifo_errors: 0$ cat /proc/net/devInter-|Receive | Transmitface |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressedeth0: 17253386680731 42839525880 0 0 0 0 0 244182022 14879545018057 41657801805 0 0 0 0 0 0
# 查看eth0网卡Ring Buffer最大值和当前设置$ ethtool -g eth0
解决方案:修改网卡eth0接收与发送硬件缓存区大小$ ethtool -G eth0 rx 4096 tx 4096
网卡端口协商丢包1. 查看网卡丢包统计:ethtool -S eth1/eth0
![网络编程之网络丢包故障如何定位?如何解决?](http://img.jiangsulong.com/220505/14152T034-3.jpg)
文章插图
2. 查看网卡配置状态:ethtool eth1/eth0
![网络编程之网络丢包故障如何定位?如何解决?](http://img.jiangsulong.com/220505/14152Wb9-4.jpg)
文章插图
主要查看网卡和上游网络设备协商速率和模式是否符合预期;
解决方案:
1 重新自协商: ethtool -r eth1/eth0;
2 如果上游不支持自协商,可以强制设置端口速率:
ethtool -s eth1 speed 1000 duplex full autoneg off
相关视频推荐《tcp/ip详解卷一》: 150行代码拉开协议栈实现的篇章
神奇的linux技术:Linux观测技术bpf,用bpf来观测tcp网络
学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
需要C/C++ linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
推荐阅读
- 红茶之回味,功夫红茶能泡多久
- Redmi|挑战中端性能之王!Redmi Note 11T官宣:5月见
- Redmi|天玑9000性价之王!Redmi K50 Pro首次降价:2949元起
- 中兴|呕心沥血之作!中兴Axon 40 Ultra来了:史上最完美全面屏
- 三大功夫红茶之首,演示泡红茶
- 8830米!为什么要在地球之巅建气象站?
- 青海旅游指南之旅
- 教师|同样是当老师,师范生与非师范生之间有何区别?主要存在3点不同
- 渗透实战之内网渗透流程
- 网络安全之内核提权漏洞深入分析