网卡的工作原理

时间:2021-12-17 15:09:15
原文地址: http://bbs.ednchina.com/BLOG_ARTICLE_284787.HTM
1. 网卡概述
    网卡(Network Interface Card,简称NIC),也称网络适配器,是电脑与局域网相互连接的设备。
一块网卡包括了OSI模型的两个层——物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据
链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错检查、传送控制、向网络层提供标准的数据接口等功能。以太网卡中数据链路层的芯片称之为MAC控制器。
  网卡的功能主要有两个:一是将电脑的数据封装为帧,并通过网线(对无线网络来说就是电磁波)将数据发送到网络上去;二是接收网络上其它设备传过
来的帧,并将帧重新组合成数据,发送到所在的电脑中。网卡能接收所有在网络上传输的信号,但正常情况下只接受发送到该电脑的帧和广播帧,将其余的帧丢弃。
然后,传送到系统CPU做进一步处理。当电脑发送数据时,网卡等待合适的时间将分组插入到数据流中。接收系统通知电脑消息是否完整地到达,如果出现问题,将要求对方重新发送。

2. 网卡的工作工程

2.1. 网卡发送数据的过程

    linux网卡驱动程序,将IP包添加MAC帧的包头,构成MAC帧。MAC帧中含有发送端和接收端的MAC地址信息等。驱动程序将MAC帧拷贝到网卡芯片内部的缓冲区,然后由网卡芯片接手处理。网卡芯片对MAC包,再次封装成物理帧,添加头部同步信息和CRC校验。然后丢到网线上,就完成一个IP报文的发送。所有挂接到本网线的网卡都可以看到该物理帧。网卡在发送数据的过程中首先侦听介质上是否有载波(载波由电压指示),如果有,则认为其他站点正在传送信息,继续侦听介质。一旦通信介质在一定时间段内(称为帧间缝隙IFG=9.6微秒)是安静的,即没有被其他站点占用,则开始进行帧数据发送,同时继续侦听通信介质,以检测冲突。在发送数据期间如果检测到冲突,则立即停止该次发送,并向介质发送一个“阻塞”信号,告知其他站点已经发生冲突,从而丢弃那些可能一直在接收的受到损坏的帧数据,并等待一段随机时间(CSMA/CD确定等待时间的算法是二进制指数退避算法)。在等待一段随机时间后,再进行新的发送。如果重传多次后(大于16次)仍发生冲突,就放弃发送。 

2.2.  网卡接收数据

    网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。其次,网卡芯片将物理帧头去掉,得到MAC帧。 网卡芯片检查MAC帧内的目的MAC地址信息,和本网卡的MAC地址是否一致?不一致,抛弃。
卡芯片将MAC帧拷贝到网卡内部的缓冲区,触发中断。驱动程序通过中断,将MAC包拷贝到系统中,构建sk_buff。告诉上层。上层去掉MAC包头,得到需要的IP包。过程中,网卡芯片对物理帧进行了MAC匹配过滤。这样做可以减小系统负荷。网卡到底能不能接收其他MAC包,完全取决于网卡芯片中
RCR(receive control register)配置。驱动程序是决定网卡能否工作以及工作模式的桥梁。