网络丢包定位记录(一)

news/2024/9/23 3:22:07 标签: 网络, 服务器, 运维

数据在Internet上是以数据包为单位传输的,单位为字节,数据在网络上传输,受网络设备,网络质量等原因的影响,使得接收到的数据少于发送出去的数据,造成丢包。

数据包接收、发送原理

发送数据包:

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。

1.⽹卡收到⽹线上的packet,⾸先检查packet的CRC校验,保证完整性,然后将packet头去掉,得到frame。(⽹卡会检查MAC包内的⽬的MAC地址是否和本⽹卡的MAC地址⼀样,不⼀样则会丢弃。)
2.⽹卡将frame拷贝到预分配的ring buffer缓冲。
3.⽹卡驱动程序通知内核处理,经过TCP/IP协议栈层层解码处理。
4.应⽤程序从socket buffer 中读取数据。

网络丢包可分为以下6种情况

1.硬件网卡丢包

2.网卡驱动丢包

3.以太网链路层丢包

4.网络IP层丢包

5.传输层UDP/TCP丢包

6.应用socket丢包

硬件网卡丢包

ring Buffer溢出

        物理介质上的数据帧到达后首先由NIC(网络适配器)读取,写入设备内部缓冲区Ring Buffer中,再由中断处理程序触发Softirq从中消费,Ring Buffer的大小因网卡设备而异。当网络数据包到达(生产)的速率快于内核处理(消费)的速率时,Ring Buffer很快会被填满,新来的数据包将被丢弃;

通过ethtool或/proc/net/dev可以查看因Ring Buffer满而丢弃的包统计,在统计项中以fifo标识:

ethtool -S eth0|grep rx_fifo
rx_fifo_errors: 0
$ cat /proc/net/dev
Inter-|Receive | Transmitface |bytes packets errs drop fifo frame compressed 
multicast|bytes packets errs drop fifo colls carrier compressed
eth0: 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

网卡端口协商丢包

查看网卡丢包统计:ethtool -S eth1/eth0

查看网卡配置状态:ethtool eth1/eth0

主要查看网卡和上游网络设备协商速率和模式是否符合预期;

解决方案:

1 重新自协商: ethtool -r eth1/eth0;

2 如果上游不支持自协商,可以强制设置端口速率:

ethtool -s eth1 speed 1000 duplex full autoneg off

网卡流控丢包

1. 查看流控统计:

ethtool -S eth1 | grep control

rx_flow_control_xon是在网卡的RX Buffer满或其他网卡内部的资源受限时,给交换机端口发送的开启流控的pause帧计数。对应的,tx_flow_control_xoff是在资源可用之后发送的关闭流控的pause帧计数。

查看网络流控配置:ethtool -a eth1

解决方案:关闭网卡流控

ethtool -A ethx autoneg off //自协商关闭
ethtool -A ethx tx off //发送模块关闭
ethtool -A ethx rx off //接收模块关闭

报文mac地址丢包

一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据,如果报文的目的mac地址不是对端的接口的mac地址,一般都会丢包,一般这种情况很有可能是源端设置静态arp表项或者动态学习的arp表项没有及时更新,但目的端mac地址已发生变化(换了网卡),没有更新通知到源端(比如更新报文被丢失,中间交换机异常等情况);

查看:

1.目的端抓包,tcpdump可以开启混杂模式,可以抓到对应的报文,然后查看mac地址;

2.源端查看arp表或者抓包(上一跳设备),看发送的mac地址是否和下一跳目的端的mac地址一致;

解决方案:

1.刷新arp表然后发包触发arp重新学习(可能影响其他报文,增加延时,需要小心操作);

2.可以在源端手动设置正确的静态的arp表项;

网线接触不良:

如果网卡统计里面存在crc error 计数增长,很可能是网线接触不良,可以排查一下:

ethtool -S eth0

解决方案:一般试着重新插拔一下网线,或者换一根网线,排查插口是否符合端口规格等;

报文长度丢包

网卡有接收正确报文长度范围,一般正常以太网报文长度范围:64-1518,发送端正常情况会填充或者分片来适配,偶尔会发生一些异常情况导致发送报文不正常丢包;

查看:

ethtool -S eth1|grep length_errors

解决方案:

1 调整接口MTU配置,是否开启支持以太网巨帧;

2 发送端开启PATH MTU进行合理分片;

接下来介绍网卡驱动丢包,待续。


http://www.niftyadmin.cn/n/5671204.html

相关文章

C++标准库容器类——string类

引言 在c中,string类的引用极大地简化了字符串的操作和管理,相比 C 风格字符串(char*或cahr[]),std::string 提供了更高效和更安全的字符串操作。接下来让我们一起来深入学习string类吧! 1.string 的构造…

Java | Leetcode Java题解之第414题第三大的数

题目: 题解: class Solution {public int thirdMax(int[] nums) {Integer a null, b null, c null;for (int num : nums) {if (a null || num > a) {c b;b a;a num;} else if (a > num && (b null || num > b)) {c b;b num;…

SecureCRT下载

文章目录 1.下载链接2.说明 1.下载链接 通过百度网盘分享的文件: 通过百度网盘分享的文件:securecrt8.0安装包&配色主题&永久激活 链接:https://pan.baidu.com/s/1NpkjFUIpKDf9VcSYhmumrg? 提取码:https://item.taobao…

C++面向对象:多态!

前言 多态是面向对象三大基本特性其一,多态可以实现“一个接口,多个方法”。 一.多态的基本概念 在使用多态时,不同的对象完成同一件事可能会有不同的结果。 如下例:买地铁票时,普通人全价,学生半价&am…

等保测评:企业如何构建安全的网络架构

等保测评的目的和重要性 等保测评(信息安全等级保护测评)是企业构建安全网络架构的重要依据。它通过对信息系统的安全等级进行评估,帮助企业识别潜在的安全风险,提供科学的安全保护建议,确保网络系统的稳定和可靠运行。…

DataX-Web项目的Windows环境部署及基本使用

一,datax-web是什么? DataX Web 是一个在 DataX 基础上开发的分布式数据同步工具,它提供了一个简单易用的操作界面,旨在降低用户使用 DataX 的学习成本,缩短任务配置时间,并减少配置过程中的错误。DataX Web 支持多种数据源,包括 RDBMS、Hive、HBase、ClickHouse、Mongo…

张正友相机标定算法

1.标定算法 2.标定误差 2.1相关定义 A 设计外参: 车型设计中,规定的相机装配外参, 一般从车厂数据模型中得到 B 实际外参: 相机安装后的实际外参 C 标定输出的外参: 标定算法输出的外参, 需要非常接近实际外参 D 超差阈值:算法判定,标定输出的外参与设计外参之间的差超过…

MFC - 常用基础控件

前言 各位师傅大家好,我是qmx_07,今天给大家讲解MFC中的基础控件 基础控件 单选按钮 绘图准备: 调整窗口大小,设置 radio button 单选按钮button 按钮 设置单选按钮变量分别为 m_BN1、 m_BN2、m_BN3 void CMFCApplication3Dlg::OnBnC…