Linux如何查看网卡是否丢包 ifconfig详解

轻浩酱_4539

轻浩酱_4539

2026-04-08

842人浏览

原创

ifconfig 的 dropped 和 overruns 仅反映内核收包末端丢弃,无法覆盖网卡硬件层和驱动 ring buffer 丢包;需结合 ethtool -s 和 netstat -s 交叉验证。

linux如何查看网卡是否丢包 ifconfig详解

ifconfig 显示的 dropped 和 overruns 是关键指标,但不能单看它下结论——它只反映内核收包路径末端的丢弃,漏掉了网卡硬件层和驱动环形缓冲区(ring buffer)的丢包。

ifconfig 输出里哪些字段真有用

执行 ifconfig eth0 后,重点关注 RX(接收)段的这几个字段:

  • dropped:表示已成功进入内核协议栈、但因套接字缓冲区满、无监听进程或内存不足等原因被丢弃的包。常见于 UDP 服务未启动或 net.core.rmem_max 过小
  • overruns:更关键——它通常意味着网卡 ring buffer 溢出,即数据包到达太快,驱动还没来得及取走,新包就覆盖了旧包。这是典型的“硬件级丢包”信号
  • errors 和 frame:多由物理链路问题引起(如网线接触不良、光衰过大、双工不匹配),但现代网卡较少见;若持续增长,优先查物理连接和 ethtool -D eth0 的驱动调试日志

注意:ifconfig 在较新系统中已被 ip -s link show eth0 取代,但字段含义一致,ip 输出中的 rx_dropped 和 rx_over_errors 对应原 dropped 和 overruns。

为什么 ifconfig 的 dropped=0 不代表没丢包

因为 ifconfig 统计的是“内核软中断处理完之后”的丢弃,而真正的大头常发生在更早环节:

  • 网卡 DMA 写入 ring buffer 时,buffer 满了 → 包直接被网卡硬件丢弃,ifconfig 完全不统计(需用 ethtool -S eth0 | grep -i "drop\|fifo\|overflow" 查 rx_fifo_errors 或 rx_missed_errors)
  • 驱动未及时从 ring buffer 取包,导致后续包被覆盖 → overruns 会上升,但若驱动实现绕过了标准路径(如某些 DPDK 或 XDP 应用),overruns 也可能为 0
  • iptables 或 nftables 规则在 PREROUTING 链显式 DROP → 这类丢包不计入 ifconfig,得看 iptables -t raw -L -v -n 或 nft list ruleset

对比验证:必须配合 ethtool 和 netstat -s

单靠 ifconfig 容易误判,建议三步交叉确认:

  • 查硬件层丢包:ethtool -S eth0 | grep -E "(rx_|tx_).*[dD]rop|fifo|miss",重点关注 rx_fifo_errors(ring buffer 溢出)、rx_missed_errors(驱动取包太慢)、rx_bad_count(校验失败)
  • 查协议栈丢包:netstat -s -u 看 Udp: 段下的 packets to unknown port received(端口无监听)、packet receive errors(套接字缓冲区溢出)
  • 查实时变化:用 watch -n1 'cat /proc/net/dev | grep eth0' 观察 rx_dropped 和 rx_over_errors 是否持续上涨,比静态截图更有说服力

如果 ifconfig 的 overruns 为 0,但 ethtool -S 中 rx_fifo_errors 持续增长,说明 ring buffer 太小,该调大了——这时改 ifconfig 没用,得用 ethtool -G eth0 rx 4096。

容易忽略的兼容性陷阱

有些虚拟化环境(如 KVM + virtio_net)或容器网络(如 Cilium 使用 eBPF)会让 ifconfig 统计失效:

  • ethtool -S eth0 可能返回 no stats available,此时只能依赖 /proc/net/dev 和 netstat -s
  • 使用 SR-IOV 或 DPDK 的网卡,ifconfig 显示的其实是 PF 接口统计,VF 的丢包需单独查 VF 设备名(如 eth0v0)
  • systemd-networkd 管理的接口可能不更新 ifconfig 的历史计数器,优先用 ip -s link show

真实排查中,ifconfig 只是第一眼快筛工具,它的数字安静不代表链路干净——尤其对 UDP 流量,ring buffer 和套接字缓冲区两道关卡,一个没守住,包就无声消失了。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3108

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

4669

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3729

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

426

15

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5407

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2368

6

overflow什么意思
overflow什么意思

overflow是一个用于控制元素溢出内容的属性,当元素的内容超出其指定的尺寸时,overflow属性可以决定如何处理这些溢出的内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.15

3180

3

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.25

483

5

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

2023.08.08

2691

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习