Linux网卡的工作原理

转载 2012年03月26日 13:50:31

一般来说,Linux核心已经实现了OSI参考模型的网络层及更上层部分。网络层的实现依赖于数据链路层的有效工作。网卡的驱动程序就是数据链路层与物理层的接口。通过调用驱动程序的发送例程向物理端口发送数据,调用驱动程序的接收例程从物理端口接收数据。

1.网卡驱动程序

简单地说,要将你手中的网卡利用起来,你唯一要做的是得到这块网卡的驱动程序。驱动程序提供了面向操作系统核心的接口和面向物理层的接口。

驱动程序的操作系统接口是一些用于发现网卡、检测网卡参数以及发送接收数据的例程。当驱动程序开始运作时,操作系统首先调用检测例程以发现系统中安装的网卡。如果该网卡支持即插即用,那么检测例程应该可以自动发现网卡的各种参数;否则你就要在驱动程序运作前,设置好网卡的参数供驱动程序使用。当核心要发送数据时,它调用驱动程序的发送例程。发送例程将数据写入正确的空间,然后激活物理发送过程。

驱动程序面向物理层的接口是中断处理例程。当网卡接收到数据、发送过程结束,或者发现错误时,网卡产生一个中断,然后核心调用该中断的处理例程。中断处理例程判断中断发生的原因,并进行响应的处理。比如当网卡接收到数据而发生中断时,中断处理例程调用接收例程进行接收。

2.驱动程序工作参数

驱动程序的工作参数因网卡性质的不同而不同,大致包括I/O端口号、中断号、DMA通道、共享存储区等。输入输出端口号又被称为输入输出基地址,当网卡工作于端口输入输出模式时被使用。端口输入输出模式需要CPU的全程干预,但所需硬件及存储空间要求较低。CPU通过端口号指定的空间与网卡交换数据。中断号是网卡的中断序号,只要不与其它设备冲突即可。当网卡使用DMA方式时,它要使用DMA通道批量传输数据而不需要CPU的干预。

对于一块具体的网卡,如果网卡支持完全自动检测,那么一个参数也不用指定,驱动程序的检测例程会自动设定所需参数。一般情况,你需要人工设定这些参数的一部分。如果你的网卡使用端口输入输出模式,你要设定端口号和中断号。如果你的网卡使用DMA模式,你要设定DMA通道和中断号。如果你的网卡使用共享存储区的模式,那你就得设定共享存储区的地址范围。

3.驱动程序的使用方式

有了网卡的驱动程序后,你可以选择是把驱动程序加入到Linux核心之中还是把驱动程序加工成独立模块。Linux系统一个引人入胜的长处就是可以定制系统的核心。把需要频繁调用的功能加入系统核心,可以大大提高系统的效率。在这种情况下系统启动时,系统核心自动加载网卡的驱动程序。驱动程序的参数可以通过LILO命令参数加以指定。系统启动后驱动程序永久驻留核心,不能用常规的方法将其卸载。至于定制的系统核心,是通过重新编译得到的;如何编译核心将在后文叙及。

如果把驱动程序编译成可装载模块,就可以用系统提供的命令在系统启动后随时加载。随时加载的好处是减少内存开销,易于管理,但同时也牺牲了一点网络传输的效率。驱动程序的参数是在命令行中直接输入或通过配置文件指定。


图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN

Linux的网卡驱动中内含了很多“虚拟网卡”。早先的文章曾经详细分析过tun,ifb等虚拟网卡,类似的思路,在虚拟化大行其道的趋势下,Linux源码树中不断增加对“网络虚拟化”的支持,不光是为了支持“...
  • dog250
  • dog250
  • 2015年05月17日 13:57
  • 20532

Linux 网络设备驱动开发(三) —— 网络设备驱动基本原理和框架

一、协议栈层次对比 二.Linux网络子系统     Linux网络子系统的顶部是系统调用接口层。它为用户空间提供的应用程序提供了一种访问内核网络子系统的方法(socket)。位于其下面是一...
  • zqixiao_09
  • zqixiao_09
  • 2016年04月13日 21:17
  • 6256

intel万兆网卡驱动简要分析

原创文章,转载请注明: 转载自pagefault 本文链接地址: intel万兆网卡驱动简要分析 这里分析的驱动代码是给予linux kernel 3.4.4 对应的文件在dri...
  • u012275397
  • u012275397
  • 2015年01月10日 20:23
  • 2181

网卡组成及工作原理1

  • 2010年09月06日 23:03
  • 68KB
  • 下载

8139d网卡工作原理 [不断更新]

工欲善其事,必先利其器。想学习8139网卡驱动程序,但是连它怎么工作的都不知道看代码看的我头都大了!!!特地看了不少文档总结出如下几点,便于学习! 8139d网卡发送一个数据包的过程中: 1:将数...
  • longerzone
  • longerzone
  • 2012年08月21日 11:00
  • 1462

网卡工作原理

Linux操作系统的功能可以概括为进程管理、内存管理、文件系统管理、设备管理、网络等几部分。所有的系统操作最终都可以映射到对物理设备的操作。除去对CPU、内存以及其他少数几个物理实体的操作之外,系统对...
  • qq_21334991
  • qq_21334991
  • 2017年02月06日 21:58
  • 112

网卡工作原理详解

此篇文章对网上现有资料进行了整理和补充,提取出有用的部分,进行存档学习。 一,认识网卡        网卡(Network Interface Card,简称NIC),也称网络适配器,是电脑与局域网...
  • tao546377318
  • tao546377318
  • 2016年06月07日 11:17
  • 10330

网卡的工作原理

原文地址:http://bbs.ednchina.com/BLOG_ARTICLE_284787.HTM 1. 网卡概述     网卡(Network Interface Card,简称NIC),...
  • yazhouren
  • yazhouren
  • 2012年08月02日 10:41
  • 466

网卡的组成工作原理

1.认识网卡,我们上网必备组件之一。         网卡工作在osi的最后两层,物理层和数据链路层,物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链...
  • fengying765
  • fengying765
  • 2011年09月09日 17:06
  • 449

Linux 下 Shell的工作原理

  • 2010年06月04日 16:16
  • 164KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux网卡的工作原理
举报原因:
原因补充:

(最多只允许输入30个字)