网卡丢包怎么办?或者再具体点,使用ifconfig查看网卡,发现有dropped统计时可以从哪些方面进行调查?要想知道为什么丢包,首先要弄清楚接收数据包的流程。

一. 收包模块间的关系

Linux系统从网卡收到数据包到最终上层应用处理之间涉及到多个模块,包括物理硬件、驱动、缓存队列、内核、再到应用程序。如下图,其中任一模块出问题都有可能导致网卡丢包。

二. 数据包接收流程

如上图,接收数据包会遵循硬件(device)->内核(kernel)->用户态应用(user)这一处理流程。

1. 数据包到达网卡(物理硬件)时,对数据包进行CRC校验,如果校验无误,就把帧头去掉,把数据包拷贝(DMA)到内存的ringbuffer中,然后网卡会向cpu发送一个irq硬中断,cpu在收到硬中断后会通知驱动处理数据。

2. 驱动收到cpu的通知,会开启NAPI(一种轮询机制,能够避免频繁触发中断),然后发出软中断。软中断会触发ksoftirqd内核线程进行数据处理,ksoftirqd会将数据包封装为skb结构,然后上送到内核协议栈。

3. 协议栈分层对数据进行解析,如解析以太头、IP头、TCP/UDP头等,随后将数据拷贝到socket buffer中。

4. 用户态应⽤程序从socket buffer 中读取数据,进行业务处理。

三. 丢包分析思路

可以了解到接收数据包主要会涉及⽹卡设备、⽹卡驱动、内核协议栈三⼤类。排查丢包原因也要从这三类入手。

四. 硬件网卡丢包

1. Ring Buffer溢出

1) 数据帧由物理介质到达网卡(NIC)后,首先会写入设备内部缓冲区Ring Buffer中,再向cpu发送硬中断。

2) cpu收到硬中断后通知网卡驱动,驱动程序触发Softirq,由ksoftirqd内核线程从Ring Buffer中消费数据。

Ring Buffer的大小因网卡设备而异。当网络数据包到达(生产)的速率快于内核处理(消费)的速率时,Ring Buffer很快会被填满,新来的数据包将被丢弃。

查看方式

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

ethtool -S ens5f0 | grep rx_fifo

cat /proc/net/dev

查看网卡Ring Buffer最大值和当前设置

ethtool -g ens5f0

解决方案

修改网卡接收与发送硬件缓存区大小

ethtool -G ens5f0 rx 4096 tx 4096

2. 网卡端口协商丢包

接收设备的网卡会和与之相连的另一块网卡协商传输速率,正常情况下,两端的传输速率硬相同,但仍有可能出现两端速率不一致的情况。

查看方式

使用ethtool查看网卡配置状态:

ethtool ens5f0

黄色框中为传输速率,红色框为是否开启自动协商。

解决方案

  • 重新自协商:
ethtool -r ens5f0;
  • 如果上游不支持自协商,可以强制设置端口速率:
ethtool -s ens5f0 speed 1000 duplex full autoneg off

3. 网卡流控丢包

查看方式

1) 查看流控统计:

ethtool -S ens5f0 | grep control

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

2) 查看网络流控配置:

ethtool -a ens5f0

解决方案

关闭网卡流控

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

4. CRC校验错误

查看方式

查看crc校验统计:

ethtool -S ens5f0 | grep crc_errors

解决方案

一般试着重新插拔一下网线,或者换一根网线,排查插口是否符合端口规格等。

5. 报文长度丢包

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

查看方式

ethtool -S ens5f0|grep length_errors

解决方案

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

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

Linux网卡丢包分类整理(1)——网卡篇相关推荐

  1. centos 7 局域网丢包排查_ethtool原理介绍和解决网卡丢包排查思路

    前言 之前记录过处理因为LVS网卡流量负载过高导致软中断发生丢包的问题,RPS和RFS网卡多队列性能调优实践,对一般人来说压力不大的情况下其实碰见的概率并不高.这次想分享的话题是比较常见服务器网卡丢包 ...

  2. ethtool 原理介绍和解决网卡丢包排查思路(附ethtool源码下载)

    Table of Contents 1. 了解接收数据包的流程 将网卡收到的数据包转移到主机内存(NIC 与驱动交互) 通知系统内核处理(驱动与 Linux 内核交互) 2. ifconfig 解释 ...

  3. DHCP的工作原理 公网IP与私网IP 网络通信的流程与数据包发送 网卡的工作原理 网卡丢包问题

    网络通信的四个要素 本机的IP地址 子网掩码 网关的IP地址 DNS服务器的IP地址 获取以上配置,有两种方式 : 静态获取==>手动配置 动态获取==>dhcp自动获取 DHCP的作用 ...

  4. linux编译安装网卡驱动详解(网卡丢包)

    安装编译网卡驱动 这两天发现一台server丢包很严重,使用cacti监控工具时能获得snmp包,时常又不能,丢包严重,导致使用ssh工具连接过慢,连接数据库访问超时,此时要先确定是中病毒还是网卡问题 ...

  5. linux 无线网卡 延时 丢包 模拟,Linux模拟网络丢包与延迟的方法

    netem 与 tc: netem 是 linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽.传输延迟.丢包等等 ...

  6. linux内核丢包分析工具,Linux模拟网络丢包与延迟的方法

    netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽.传输延迟.丢包等等 ...

  7. linux网络丢包测试工具,用NETEM模拟网络丢包 (转)

    [linux] tc netem 模拟网络丢包linux下的tc可以操纵网络,比如分配带宽给不同的应用.模拟网络时延.模拟糟糕网络环境下的丢包等. 但在实际使用模拟丢包时,我们 发现了问题:两台服务器 ...

  8. linux tcp 丢包命令_在Linux下实现测试TCP和UDP的丢包检测!

    在Linux下实现测试TCP和UDP的丢包检测! 疯狂の猿猴 • 2020 年 12 月 11 日 前言 本人平时基本上都是win,一下子转战到linux,有点不习惯! 因此做个记录,便于以后自己查阅 ...

  9. Linux 模拟网络丢包和延迟命令

    在Ubuntu上使用 tc 和 netem命令组合模拟客户环境网络波动情况测试,如丢包和延迟, 1. 延迟设置 //延迟 300ms ± 100ms sudo tc qdisc add dev eth ...

最新文章

  1. Vs2015 mysql ef_VS2015 +EF6 连接MYSQL数据库生成实体
  2. 课堂练习之谁是水王(一)
  3. 关于HTTPS的七个误解
  4. android怎么刷新活动,Android 如何刷新当前activity的显示数据?
  5. multipartfile 获取音频时长_QQ音乐移动端加入倍速播放,蓄力长音频发展 | 产品观察...
  6. [POI2004]GRA
  7. BZOJ 4043 [HAOI2015]树上操作 dfs序 线段树
  8. Android对话框总结(普通对话框,单选对话框,多选对话框,自定义对话框)
  9. python aks_使用环回aks和terraform构建基于打字稿的游戏后端
  10. Unity3D游戏高性能战争迷雾系统实现
  11. 6月书讯 | 初夏,正好读新书
  12. html段前段间距设置,Word里标题段前距设置不管用,段后管用
  13. python中去除全角空格
  14. 2018我的博客历程:你带来微笑,我有幸得到
  15. 【二分查找】详细图解
  16. HQChart使用教程89-最后一根k线倒计时功能
  17. 金半接触-肖特基接触(Schottky contact)-欧姆接触(Ohmic contact)
  18. xp系统一直跳出宽带连接服务器,电脑开机后会自动弹出自动宽带连接提示窗口 怎么关闭?...
  19. UIScrollView 平滑划动处理
  20. 一个月学通Python(九):Python文件及异常处理

热门文章

  1. 回文日期 php,c语言程序实例大全,220个详细程序源代码
  2. 【看表情包学Linux】环境安装 | 安装XShell | 基本的账号管理
  3. 横扫13项中文NLP记录,中文字型深度学习模型Glyce问世!
  4. python函数调用关系分析
  5. HTML中让整个效果居中,仅使用CSS做到完全居中的超级攻略
  6. Vue 移动端 hash模式下微信授权登录
  7. 小福利,带你快速入门sumifs多条件求和函数、设置下拉菜单结合vlookup函数双条件查找数据、excel的切片器(表关联)、数据透视表、数据透视图
  8. Scrapy爬取贝壳网并存入csv
  9. 2020年黑龙江省大豆种植分布数据
  10. 软键盘实例 request参数修改