1、问题现象

一般来说,网卡只会接收目的地址是自身的数据包,丢弃其它目的的数据包,但如果网卡开启了混杂模式,该网卡会接收所有来到该网卡的数据包。这也是tcpdump 等一些抓包工具的原理。最近一个客户在使用网卡时,开启了混杂模式,当网卡收到数据包后,并没有被内核统计计数,cat /proc/net/dev 看不到 rx packets 有增加。

在网卡对端,使用 tcpreplay 发包:

# tcpreplay -i eth1 -K -M 100 -l 0 udp.pcap

此时看不到 RX packet 一直增加,说明没有被内核统计,应该是被dropped,但是也没有被 统计到 dropped。(PROMISC 表示已经开启混杂模式,ifconfig eth8 promisc可开启)

# tcprewrite --enet-dmac=5c:d2:0b:10:7e:1b --infile=udp.pcap --outfile=0.pcap

# tcpreplay -i eth1 -K -M 100 -l 0 0.pcap

修改目的MAC地址后,再次发包

说明 混杂模式下的网卡,收到目的地址不是自己的数据包,并没有被内核统计,而是被直接丢弃掉,注意这个丢弃和  ifconfig 显示的RX dropped不一样:

RX dropped: 表示数据包已经进入了 Ring Buffer,但是由于内存不够,上层协议不支持等系统原因,导致在拷贝到内存的过程中被丢弃,netstat -s可以看到更详细的原因。

RX overruns: 表示了 fifo 的 overruns,这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的,而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。

2、分析

经过上面的分析,猜测是网卡在混杂模式下,数据包没有被内核统计,直接丢弃掉了。下面就来分析验证一下。先找的网卡 MAC驱动 收包的入口。

可以设备上看下, 寻找一下关键字信息

然后再内核里搜索相关信息,确定MAC驱动

然后 检索  rx_packets 字符串

可以看到 drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_sg.c  有关 rx_packet的处理,我们打开这个驱动文件看下。

在上图中,发现有两个地方确实会有 drop packet的情况,而且并没有被内核统计计数,我们可以在这个地方可以加入打印,验证一下是否是真的在这里被drop掉了,经过验证是蓝色箭头导致的  unlikely(netif_receive_skb(skb) == NET_RX_DROP) 这个条件满足了,就被drop掉了。

3、解决

经过上面的分析,收取数据包的时候,显示没有考虑混杂模式的情况,而是直接抛弃了,我们只需要将 混杂模式的情况处理下即可。

先看下,内核里,别人都是如何 处理 混杂模式的

看来是net_device 里有 flag可以判定是否是 混杂模式,那么就简单了

搞定,解决!

LS1046A平台 网卡混杂模式,无法收到DMAC不是自己的包相关推荐

  1. 【博客635】tcpdump原理与网卡混杂模式

    tcpdump原理与网卡混杂模式 案例分析 场景: k8s机器上由于桥上未打开hairpin mode,使得流量通过service回到本身的时候不通了,但是使用tcpdump抓包的时候,流量就通了,不 ...

  2. 网卡混杂模式介绍与设置

    1.混杂模式介绍 混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包.默认情况下网卡只把发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃.简单的讲,混杂模式就是指网卡能接受所有通过它 ...

  3. 将网卡设为混杂模式_网卡混杂模式实现方法

    一.在普通程序中设置网卡混杂模式. 在普通程序中普遍用ioctl函数来设置,该函数很值得大家好好的了解,因为它的使用非常的广泛.下面 给出设置网卡混杂模式的实现代码: #include #includ ...

  4. linux网卡混杂模式重启生效,linux下网卡混杂模式设置与恢复

    网卡混杂模式的设置可以通过下面的命令来进行设置: root@dell-desktop:/home/dell/libppf/bin# ifconfig eth0 eth0 Link encap:Ethe ...

  5. 【genius_platform软件平台开发】第三十七讲:网卡混杂模式和原始套接字

    Linux下网卡的混杂模式 混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址.普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃.一般来说,混 ...

  6. 分享:设置网卡混杂模式

    分享:设置网卡混杂模式 设置网卡混杂模式 http://my.oschina.net/u/138210/blog/110517 posted on 2013-02-27 09:24  lexus 阅读 ...

  7. 网卡混杂模式Promiscuous与linux上混杂模式的设置

    1 网卡工作模式 (1) 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 0Xffffff 的帧为广播帧,工作在广播模式的网卡接收广播帧. (2) 多播传送(MultiCa ...

  8. linux 取消混杂模式,Linux下网卡混杂模式设置和取消

    1.Linux下网卡常用的几种模式说明: 广播方式:该模式下的网卡能够接收网络中的广播信息. 组播方式:设置在该模式下的网卡能够接收组播数据. 直接方式:在这种模式下,只有目的网卡才能接收该数据. 混 ...

  9. linux网卡混杂模式和监听模式

    混杂模式(promiscuous mode)是电脑网络中的术语.是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它. 一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口 ...

  10. 网络流量监控之网卡混杂模式

    混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程 序就是在这种模式下运行的.网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和 发给自 ...

最新文章

  1. blf文件用什么软件打开_如何用皕杰流程创建一个blf演示流程文件?
  2. 软件工程——理论、方法与实践 第六章
  3. 二分于最大流之间的关系
  4. numpy的生成网格矩阵 meshgrid()
  5. 第三十二期:MySQL常见的图形化工具
  6. Mysql对应的dul_MySQL InnoDB 数据字典介绍
  7. mysql的复制详解
  8. atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结
  9. php脚本是什么,PHP脚本的编写
  10. x4提示你的产品已经被禁用_win10系统注册表已被管理员禁用的解决方法
  11. 如何保护眼睛,可采用语音方式获取外界知识,并积极锻炼身体做到劳逸结合。
  12. NetLimiter 4 Pro(网络控制软件)官方中文版V4.1.6.0 | netlimiter软件下载 | 电脑防火墙软件哪个好
  13. Android高德混淆问题
  14. Barsetto百胜图TripressoES意式便携咖啡机测评,咖啡随行玩味无穷
  15. android app申请内存大小,Android中App可分配内存的大小
  16. 电脑软件测试英雄联盟,lol电脑配置检测,如何测试自己的网络玩lol的具体情况?...
  17. 迅雷播放插件下载的在线字幕位置
  18. Surfer图件转MapGis图件总结
  19. nodejs与js区别
  20. 累加功能的实现 (累计计算)

热门文章

  1. 软件硕士和计算机硕士,详解软件工程硕士和计算机硕士区别
  2. 024 正交向量 正交矩阵及性质
  3. 人人互动直播之Swoole通讯服务重启教程
  4. 为什么Google要将LiveData设计成粘性的
  5. 基于MATLAB的双重积分的数值求解
  6. web测试-WEB常用测试用例集
  7. webService接口的荆棘之路
  8. Linux下几种定时器的使用
  9. 2021年全球与中国飞机导航镜行业市场规模现状及企业市场份额分析
  10. 联想e570c固态接口支持协议_thinkpad e570c15.6英寸笔记本电脑支持什么固态硬盘接口...