`
huangyongxing310
  • 浏览: 498474 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

网卡如何接收数据包

 
阅读更多




MAC包中含有发送端和接收端的MAC地址信息。既然是驱动程序创建的MAC包头信息,当然可以随便输入地址信息的,主机伪装就是这么实现的。

MAC是的由驱动程序进行设置写入的,不是网卡自动写入的,所以MAC可以进行伪装


网卡芯片对MAC包,再次封装成物理帧,添加头部同步信息和CRC校验。然后丢到网线上,就完成一个IP报文的发送。所有挂接到本网线的网卡都可以看到该物理帧。


网卡如何接收数据包:
正常情况:
    网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。其次,网卡芯片将物理帧头去掉,得到MAC包。
    网卡芯片检查MAC包内的目的MAC地址信息,和本网卡的MAC地址是否一致?不一致,抛弃。
    网卡芯片将MAC帧拷贝到网卡的内部缓冲区,触发中断。
    驱动程序通过中断,将MAC包拷贝到系统中,构建sk_buff。告诉上层。
    上层去掉MAC包头,得到需要的IP包。

    过程中,网卡芯片对物理帧进行了MAC匹配过滤。这样做可以减小系统负荷。试想一下,若网卡芯片对所有的MAC帧不加判断的直接提供给驱动,让CPU判决会是什么样子呢?当总线上数据繁忙,CPU将浪费大部分时间去判断该MAC包是否是自己需要的,效率低下。


不正常模式(混听):
    网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。其次,网卡芯片将物理帧头去掉,得到MAC包。网卡芯片发现自己当前被配置为混听模式,就不对MAC包过滤。网卡芯片将MAC帧拷贝到网卡内部的缓冲区,触发中断。驱动程序通过中断,将MAC包拷贝到系统中,构建sk_buff,告诉上层。上层去掉MAC包头,得到需要的IP包。显然,这里的IP包并不一定是发给自己的。


驱动的问题:
    网卡到底能不能接收其他MAC包,完全取决于网卡芯片中RCR( receive control register )配置。驱动程序是决定网卡能否工作于混听模式的桥梁。混听模式会加重CPU的负荷,而且也是不符合标准应用的!




网卡可以设置多个ip地址,但MAC还是一个的,这样就可以通过不同的IP访问同一个网卡了














分享到:
评论

相关推荐

    网卡接收和发送数据包的过程

    #### 网卡接收数据包过程 当网络接口卡(NIC)接收到数据帧时,它会触发一个硬件中断信号,通知操作系统有新的数据到达。这个中断信号由网卡硬件产生,通过中断控制器发送到处理器。操作系统接收到中断信号后,会...

    Python选择网卡发包及接收数据包

    而利用`socket`模块,能够更加灵活地指定网卡接收数据包。这些技术在多网卡环境中尤为重要,可以帮助开发者更有效地控制网络通信。 ### 相关链接 - [Scapy文档](https://scapy.readthedocs.io/en/latest/) - ...

    网卡数据包截获

    在正常模式下,网卡只接收发送给自己或广播的数据包。但在混杂模式下,它会捕获所有通过网络的数据包,包括那些不是为它设计的。 3. **协议分析**:截获的数据包包含了各种网络协议的信息,如TCP/IP、UDP、HTTP等。...

    多队列(queues)网卡DMA收包方式.pdf

    Rx_buffer是网卡接收数据包的缓冲区结构体。它包括一个struct sk_buff指针,用于存储接收的数据包。Rx_buffer结构体还包括其他成员变量,用于存储数据包的元数据。 Queue Ring Descriptor Queue Ring Descriptor是...

    适用老电脑的多种网卡驱动合集

    2. 数据传输管理:驱动程序负责将数据包从操作系统传输到网卡,以及从网卡接收数据包并传递给操作系统。 3. 错误检测和纠正:驱动程序能检测传输错误,并采取必要的纠正措施,确保数据的完整性和可靠性。 4. 协议...

    windows 2008 32位 网卡驱动

    2. **数据传输**:驱动程序负责将数据包从操作系统传输到网卡,以及从网卡接收数据包并传递给操作系统。 3. **错误检测与纠正**:当数据在传输过程中出现错误时,驱动程序会检测到并尝试纠正这些错误,以确保数据的...

    获取网络包到达网卡的时间.pdf

    接口机负责从网卡接收数据包,记录时间戳,然后将带有时间戳的包放入应用消息队列。这种方法虽然可以实现目的,但增加了系统的复杂性,且成本较高,不推荐作为首选方案。 另一种方法是利用ioctl系统调用来获取网卡...

    获取网卡数据包的控件

    数据包捕获的基本原理是利用网络接口控制器(NIC)的混杂模式,这种模式允许网卡接收所有经过的网络流量,而不仅仅是发送给它的数据。常见的数据包捕获库有libpcap(在Unix-like系统中)和WinPcap(在Windows系统中...

    聊聊Netty那些事儿之从内核角度看IO模型.doc

    网络数据包接收流程包括网卡接收数据包、DMA拷贝数据包到RingBuffer、网卡硬中断响应程序、软中断响应程序、内核协议栈处理、传输层处理和应用层处理等步骤。 7. 内核线程ksoftirqd 内核线程ksoftirqd是专门用来...

    linux网络协议栈(UDP收发)

    这个过程从网卡接收数据包开始,以DM9000网卡驱动为例。当网卡接收到数据包时,会触发中断处理函数`dm9000_interrupt`。这个中断处理函数会检查中断状态,并调用`dm9000_rx`来接收数据。在`dm9000_rx`中,系统会为新...

    数据包从以太网卡到传输层的整个过程的概述

    从以太网卡接收到数据包开始,直至数据包被传递至传输层,整个过程可以分为以下几个关键步骤: ### 1. 硬件中断响应 当以太网卡接收到数据包时,它会触发一个硬件中断,通知CPU有新的数据包到达。在Linux系统中,...

    PF_RING 翻译文档

    7. **NAPI集成**:PF_RING与网络设备的NAPI(Non-Blocking Poll Mode I/O)集成,能更高效地从网卡接收数据包,减轻中断处理负担。 8. **过滤机制**:由于数据包不需要经过完整的协议栈,PF_RING提供简单的过滤功能...

    TCI IP协议栈开发

    - **网卡接收数据包**:网卡(例如RTL8019AS)内部包含16K的RAM,按照256字节一页的方式组织,前12页用于存储发送的数据包,后52页用于存储接收的数据包。网卡接收任务的主要功能是检测网卡缓冲区是否有新数据到达,...

    用C++实现网络编程---抓取网络数据包的实现方法

    5. **接收数据包**:通过`recv()`函数从套接字接收数据。 6. **关闭资源**:完成捕获后,调用`closesocket()`和`WSACleanup()`函数释放资源。 #### 示例代码解析 虽然原文中的部分内容可能难以理解,但是可以通过...

    C/C++ 发送UDP数据与接收UDP数据完整代码(支持指定网卡)

    本文将深入讲解如何在Linux环境下使用C++实现UDP(User Datagram Protocol)数据的发送与接收,包括单播和组播功能,并且支持指定网卡操作。我们将讨论相关的核心知识点,以及提供给定的代码文件的作用。 首先,UDP...

    linux内核协议栈分析

    在数据包的接收处理流程中,分为驱动收包和应用层收包,驱动层负责从网卡接收数据包,应用层则接收经过内核协议栈处理后的数据包。而数据包的发送流程则包括应用层发包和协议栈发包,应用程序通过系统调用将数据发送...

    多CPU下基于e1000e驱动的数据包以及网卡中断流程分析

    1. 网卡接收到数据包,并通过DMA方式写入内存。 2. 网卡产生中断,通知CPU处理数据包。 3. CPU处理数据包,并将其发送到目标设备。 网卡中断流程 网卡中断流程是指网卡产生中断信号,以通知CPU处理数据包。该流程...

    各种网卡的高级设置.doc

    * Checksum Offload:建议关闭,关闭数据包校验功能,以提高网卡效率。 * Flow Control:建议关闭,关闭流量控制功能,以提高网卡效率。 * IEEE802.1P Support:建议关闭,关闭 IEEE802.1P 支持,以提高网卡效率。 *...

    Win7系统网络监视器程序功能介绍.docx

    2. **网络监视器驱动程序**:使得网络监视器能够从网卡接收数据包,并允许用户捕获远程计算机的数据包,包括通过拨号网络连接获取的数据包。 #### 五、具体操作指南 - **设计捕获筛选器**:在“捕获筛选器”对话框...

Global site tag (gtag.js) - Google Analytics