全面了解Linux网卡的工作原理

运维 系统运维
Linux的很多优点,使它成为很多人选择的对象,很多企业也成为其用户,本文为你详细介绍Linux网卡的工作原理,为你在学习Linux网卡时起一定的作用。

Linux的很多优点,使它成为很多人选择的对象,很多企业也成为其用户,本文为你详细介绍Linux网卡的工作原理,为你在学习Linux网卡时起一定的作用。Linux支持的网卡主要是以太网卡。如3COM、ACCTON、AT&T、IBM、CRYSTAL、D-LINK等众多品牌的以太网卡只要安装配置正确,都可以得到你所期望的效果。

为了将这个问题说明的更清楚一些,不妨先简要地剖析一下Linux是如何让网卡工作的。一般来说,Linux核心已经实现了OSI参考模型的网络层及更上层部分。网络层的实现依赖于数据链路层的有效工作。网卡的驱动程序就是数据链路层与物理层的接口。通过调用驱动程序的发送例程向物理端口发送数据,调用驱动程序的接收例程从物理端口接收数据。

1.网卡驱动程序

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

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

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

2.驱动程序工作参数

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

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

3.驱动程序的使用方式

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

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

通过本文的介绍你就全面了解了Linux网卡的工作原理。

【编辑推荐】

  1. 全面介绍在Linux和路由器建立日志服务器
  2. linux实用命令-pv: 管道查看器
  3. 在64位Linux下编译dtAgeiaPhysX
  4. 决战紫禁之巅:Linux桌面Mint 8与Windows 7
  5. 简单理论Linux ReiserFS系统分析特点与效果
责任编辑:小霞 来源: 博客园
相关推荐

2009-12-23 17:14:28

2009-12-25 11:22:13

Linux进程技术

2011-12-14 10:31:43

2009-12-03 19:02:05

Linux

2010-01-05 14:46:03

Linux软件安装

2009-08-18 10:56:40

Linux网卡配置Linux网卡配置

2009-12-23 11:05:28

Linux内核

2010-10-27 14:57:24

Oracle查询

2010-08-29 21:09:57

DHCP协议

2022-09-21 18:06:10

Python内存管理

2018-08-29 10:04:43

2009-06-15 10:43:45

Java程序员Java程序GC

2012-05-31 11:23:13

Linux路由

2011-05-04 16:55:22

复印机

2011-02-21 13:14:29

Qmail

2020-12-08 20:20:15

神经网络深度学习机器学习

2020-05-13 08:10:32

HTTPS安全网站

2009-03-10 19:19:16

Linux日志文件系统安装使用

2009-12-30 16:48:45

2024-11-15 12:04:33

K8S容器化应用
点赞
收藏

51CTO技术栈公众号