版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子科技大学硕士学位论文Linux操作系统网络协议栈的设计与实现研究姓名:陈慧春申请学位级别:硕士专业:计算机软件与理论指导教师:杨国纬20040201中文摘要操作系统在当今服务器市场上占有相当大的份额,这说明它的网络协议栈的设计是成功和高质量的。同时,作为一个开放源码的操作系统,它不仅继承了系统的大部分优良特性,而且将当今最先进的技术融入其中,比如支持最大数量的流量控制算法、最新的拥塞控制算法的实现,防火墙设计的高度模块化。所以研究操作系统的网络协议栈就能较快地掌握最先进的计算机技术、获得大量有益的经验。继而将这些技术运用到国产操作系统、嵌入式软件和信息安全产品的开发和设计上来。最终打破国外
2、公司在这些领域的垄断地位,将中国的民族软件业真正地发展起来,走上独立自主的道路。由于是一个宏内核的操作系统,网络协议栈属于内核的一部分,而且它是建立在进程管理系统、存储管理系统、文件系统、进程问通信和设备驱动之上的。所以要完成本课题的任务实际上需要对整个操作系统内核进行研究。针对论文的撰写,鉴于篇幅和重点,本论文先从总体上对网络协议栈的分层实现进行深入剖析,并与标准的协议栈的设计进行对比。接着对内核中协议栈的初始化过程进行深入分析,这主要包括套接字层初始化、各种协议模块的初始化、网络接口设备的初始化以及流量控制和防火墙模块的初始化几个过程。然后按照协议栈的从低到高顺序分为四个专题,对其重要部分
3、的实现用理论与具体实现相结合的方法加以研究。第一个专题是网卡驱动,主要讲述网卡的硬件特性与具体的软件驱动程序设计。第二个专题是流量控制,主要讲述两大理论模型和内核中流量控制模块的具体设计,以及的一个实例。第三个专题是内核防火墙的具体设计与实现,主要讲述整个防火墙框架的建立和包过滤子系统的设计。第四个专题是协议的拥塞控制,主要对的拥塞控制状态机的设计、拥塞控制的重要特征、的实现和规范异同之比较进行深入研究。这四个专题基本上覆盖了网络协议栈设计的重要特征,融合了当今最先进的计算机技术,是非常值得借鉴和学习的。关键词:,网卡驱动,流量控制,防火墙,拥塞控制,:,独创性声明本人声明所呈交的学位论文是本
4、人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。签名:煎慧查日期:如牛年土月硝日关于论文使用授权的说明本学位论文作者完全了解电子科技大学有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位
5、论文。(保密的学位论文在解密后应遵守此规定)签名:!塾整:查导师签名:日期:二口蚌年工月可日女拯任丕煎圆堡拯邀拢的遮过呈塞现班壹第一章引言课题背景操作系统在当今服务器市场上占有相当大的份额,这说明它的网络协议栈的设计是成功的、也是高质量的。这一方面来自于是一个开放源码的操作系统,不仅继承了系统的大部分优良特性,而且将当今先进的技术融入其中,比如支持最大数量的流量控制策略、最新的拥塞控制算法,防火墙设计的高度模块化。另一方面来自于它对众多网络协议的广泛支持,包括、等。研究和学习操作系统是我国软件业走上独立自主和实现腾飞的重要途径。由于操作系统是所有软件赖以生存的基础,但我国操作系统市场长期被国外
6、公司垄断,因而民族软件业的发展非常迟缓,在国际上处于不利地位。面对这种局面,出路何在?的开放性和技术的先进性可以帮助我们打破国外公司的垄断,我们可以借鉴它的技术加速国产操作系统、嵌入式软件和信息安全产品的丌发。所以在年月,国家计委、科技部向社会公布的我国重点发展的高技术项目中,把操作系统的研究放到一个重要的位置,这说明我国政府对和发展自主版权操作系统的重视。现在国内外研究操作系统的机构和个人很多,大型的跨国公司像、和等,科研院校如芬兰的赫尔辛基大学、美国的加州大学伯克利分校、我国的中科院软件所和浙江大学等都投入了大量的人力物力,成立了专门的研发团队。但令人遗憾地是,在国内,大多数人着力于进程管
7、理系统、存储管理系统、文件系统、进程闯通信、设备驱动以及多处理机这几部分的研究,惟独缺少人对网络协议栈这部分进行深入研究。所以本课题在科研和实际工作中都显得非常迫切。课题任务简介及本人所作的工作丛些蛙佳丕缝圜络协邀缝笪超盐生塞现班嚣由于是一个宏内核的操作系统,网络协议栈属于内核的一部分,而且它是建立在进程管理系统、存储管理系统、文件系统、进程间通信和设备驱动之上的。所以要完成本课题的任务实际上需要对整个操作系统内核进行研究。内核中最核心的代码大约可以占磁盘的空间,有几十万行,因而工作量大,任务也比较重。作者在近两年的时间内,不仅仔细阅读了这几十万行源代码,而且详细地写了几十万行的分析和注释。在
8、此期间,作者查阅了大量有关计算机操作系统和网络协议栈的中外文资料,和相关的专家和研究人员进行了多次讨论,并针对疑难问题进行了多次实验和论证。针对论文的撰写,鉴于篇幅和重点,我只对网络协议栈方面的研究成果加以表述。由于网络协议栈也属于内核的一部分,其自然地也会受到其它子系统的制约,比如文件系统、中断处理等,我在叙述中会对相关部分加以讲解,以期达到内容的整体性和连贯性。论文从网络协议栈的总体设计开始,按照网络协议栈的初始化、网卡驱动、流量控制、防火墙和协议的拥塞控制的顺序进行深入细致地论述。课题的最终实现目标是掌握整个网络协议栈的设计和实现技术,并可以根据实际需要对其进行相关的改进和增删。论文的结
9、构论文共分七章。主要内容分别阐述如下:第一章:引言。介绍本课题的背景和来源,作者所做的工作和论文结构。第二章:网络协议栈的总体设计。先阐述标准的协议栈的分层设计,再着重分析网络协议栈的分层设计,这包括各层的模块设计和实现方法,同时也和标准的协议栈的设计进行对比。第三章:网络协议栈的初始化。先简要地阐述系统初始化的整个过程,再着重对网络协议栈的初始化过程进行描述,这主要包括套接字层初始化、各种协议模块的初始化、网络接口设备的初始化以及流量控制和防火墙模块的初始化。塾坠苎握往丕统圆终协这拢曲丝让皇塞班班巍一第四章:网卡驱动研究。在对一种网卡的硬件结构和功能进行研究和分析的基础上,通过分析下芯片的侦
10、测和初始化、数据帧的收发以及相应的中断服务程序的设计和实现,推广到其它各种类型的网卡驱动软件设计。第五章:流量控制。先介绍目前的两种服务模型:集成服务模型和区分服务模型。然后介绍内核如何来实现流量控制的,最后讲解中流量控制算法的具体实现。第六章:防火墙设计。主要对防火墙框架的设计、包过滤子系统的具体设计、包过滤子系统对数据包的处理过程和命令的实现过程进行详尽地分析。第七章:拥塞控制策略。主要对的拥塞控制状态机的设计、拥塞控制的重要特征、的实现和规范异同之比较进行深入研究。些援拄丕筮圜缝边邀拔的送让皇塞理班宜第二章网络协议栈的总体设计网络协议栈的总体设计有以下几个重要特点;()协议栈设计基本遵循
11、协议的要求,但在具体实现上有所改动,比如将协议处理模块和协议处理模块放到相同的层次位置。()高度模块化。模块与模块之间的通信,多采用函数指针。这样,当某个模块的内容有较大的改变时,另一个相关的模块只需做较小的改动或无需改动。()数据包在不同的协议层次上传递,只需相应地修改描述数据包的数据结构的相关指针,这样简化的设计将大大地提高系统的性能。本章就着手从这三个重要特点展开对网络协议栈的总体设计的论述。标准协议与网络协议栈具体设计的对比标准的协议是一个四层协议系统,如图所示。一一一卜!二厂。厂厂一卜网络层。一一、讶,:、一传输层,【匕兰型一兰一鼢层媒体图协议族中不同层次的协议其各层的功能分述如下:
12、)链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备丛逮捱丕箕圆终垃达挂的遮让当塞班班宜驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。)网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在协议族中,网络层协议包括协议(网际协议),协议(互联网控制报文协议),以及协议(组管理协议)。)传输层主要为两台主机上的应用程序提供端到端的通信。在协议族中,有两个互不相同的传输协议:(传输控制协议)(用户数据报协议)。为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收
13、到的分组,设置发送最后确认分组的超时时钟等。由于传输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,月为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种传输层协议分别在不同的应用程序中有不同的用途,这点将在后面看到。)应用层负责处理特定的应用程序细节。网络协议栈基本按此标准进行设计的,但在具体实现上有所不同,这可以从图看出,内核将协议处理模块和协议处理模块放在同一层的位置上,而且将、协议处理模块和、协议处理模块放在同一个层次(都在层之上)。之所以这样设计主要是
14、出自程序调用逻辑的考虑。举例来说,从链路管理层向上传的数据包,到底是传给哪个协议处理模块,判别程序是根据数据包的帧头决定的,如果是帧头则传递给协议处理模块,若是帧头则传递给协议处理模块,所以在实现上协议处理模块和协议处理模块在同一层上。从整体上看,网络系统可以分为硬件驱动层、链路管理层、协议处理层、套接字层和应用层五个部分,在内核中包括前四层。从实现上看,我们还可以将协议层分为两层:和分在一层,而、和分在一层。下面分别论述各层的功能设计和相邻层的数据传递实现技术。垦坚避任丕筮豳鳖拯丝拢的遮让皇实现硒宜一下一。广。出世半世叫圳采镜“,永搜、:泵统州÷川甜掘雕蜷珧厂鳃,商一阿赢习
15、8;:。¨卜觚”旧拙戟制触?。懈,内拉,叫:诅踔。“。惯块一拿嚣娴州蹈扯卡驱动网一糕糊物娜图一内核的协议栈的体系结构图网络协议栈的分层设计下面对每层各个重要模块的设计以及功能进行分别论述。硬件驱动层如果计算机与网络进行通信的硬件设备是网络接口卡,那么硬件驱动层主要实现的就是网卡驱动。其在软件设计上可以分为四大模块:网卡侦测及其初始化,数据包的发送,网卡中断服务程序和数据包的接收。网卡的侦测和初始化过程在操作系统的初始化阶段完成。侦测的方法主要是检查该网卡的空间和特征寄存器。初始化过程包括对网卡内部的各个寄存器的初始化,侦测网卡的中断号,并向内核注册相应的中断服务程序等。数据包发送模块
16、负责接收从链路管理层传递来的数据帧,并将它发送到网络。实际的发送过程分为两步:第一步是通过远程操作将数据包从内存发也丝蝗往丕红圆缝迹越挂盥邀让星塞班班宜送到网卡的发送缓冲区,第二步是通过本地将数据包从发送缓冲区发送到网络。网卡中断服务程序模块完成三方面的工作。如果中断是由于网卡接收到网络上的数据帧而触发的,中断服务程序将调用相应的接收函数,将数据帧从接收缓冲区转移到内存缓冲区,并设置相应的结构;如果中断是由于发送一个数据包的过程结束而触发的,则根据需要判断是否需要进一步进行下一个数据包的发送;如果中断是由于网络接口出现某些错误而触发的,则根据一些专用的网络错误统计寄存器的内容来更新网卡在系统中
17、的统计变量。数据包的接收模块只是负责将网卡缓冲区的数据包转移到内存缓冲区。这是因为对网络上的数据帧检测,接收数据帧到网卡缓冲中,并触发相应的中断的整个过程是由硬件完成的。硬件驱动层是通过软中断机制向上层发送数据包的。这里所谓的软中断实际上应该叫做中断后半部分的处理机制。它的出现主要基于以下考虑:中断服务程序一般在关中断情况下执行,以免中断嵌套而使中断控制复杂化。但中断是随机事件,若关中断的时间太长,就不能及时的响应其它的中断请求,从而导致中断的丢失。为此,将一个中断请求需要的服务分成两部分,前半部分在关中断情况下进行,而后半部分对时间的要求并不那么高,可稍后执行,并且后半部分是开中断执行。使用
18、三种软中断机制:、和。它们具有一个共同点:中断服务程序的后部分的执行不允许嵌套(这个嵌套是指其它中断服务程序的后部分的嵌入执行)。特别地,在网络协议栈链路层中使用的软中断机制是。该机制相对于其它两种机制在多处理机的环境下有两大区别:()在同一时刻,如果有多个采用此机制的中断服务程序的后半部分需要执行,它们可以分别运行在不同的上。()中断请求在某个上被响应之后,其中断服务程序必然在该上被执行,但相应地中断后半部分程序就不定在该上被执行。这里要特别指出的是若上层向硬件驱动层放送数据包,如果发现网卡正在发送数据,则采用软中断机制,否则将直接向硬件驱动层发送数据包。丛攮佳丕红圈终垃这挂的遮让复塞现班窥
19、链路管理层流量控制是链路管理层的主要功能。具体来说就是接收由上层协议处理模块传递过来的数据包,决定是排队还是丢弃(队列满或流量太高时),或者将某一个数据包推迟送出,以及安排发送数据包的次序。流量控制模块将负责把合适的数据包发送到硬件驱动层。需要特别指出的是:在中,上层协议处理模块传递过来的数据包才经过流量控制模块,而从硬件驱动层传上来的数据包不经过流量控制模块。目前在中共支持种流量控制算法,它们分别是:(基于类排序)、(令牌桶过滤)、(先进先出)、(优先级)、(随机公平队列)、(随机早期检测)、和。一种流量控制算法在实现上由队列规程()、类()、过滤器()和管辖器()四个部分组成。每个网络接口
20、设备都对应一个队列规程,它用来指定网络接口设备中数据包的处理方式。类总是附着在某种队列规程之下的,一个类代表了该队列规范中的一类数据包,这些数据包具有某种相同的特性(如它们的目的地址都相同),并且接受相似的处理。过滤器的作用在于根据、地址等信息对包进行分类。管辖器的作用在于确保一个数据流的特性符合预先规定的值(如发送速率不超过一定的上限)。协议处理层该层负责各种协议的处理,每种协议基本上都是按照标准具体设计和实现的,这里主要论述几个重要的模块,包括路由管理模块、数据包的分片与组装、防火墙模块和协议处理模块。路由管理模块使用两个数据库来保存路由信息,一个是(),它包含着有关已知目的和它们的最佳路
21、由的详细列表;另一个是,即路由缓存,它用来快速查找目的的路由,和其它缓存一样,它包含的只是常用的路由,它的内容来自于,无论什么时候查找路由,首先都要在路由缓存中检查是否有匹配的路由,如果路由缓存中没有匹配的路由,则需要到中去查找路由;如果那里也没有找到路由,些女攮佳墓统圆缗垃邀拄的遮让星塞现研究则包发送失败并通知应用程序;如果在路由缓存中没有而在中找到路出,则使用此路由信息,并为此路由生成一个新项,添加到路由缓存中。分片和组装模块用来解决(最大传输单元)不同的网络间报文的传送问题。当分组过大而不适合在所选硬件接口上发送时,能够对分组进行分片。过大的分组被分成两个或多个大小适合在所选定网络上发送
22、的分片。而在去目的主机的路途中,分片还可能被中间的路由器继续分片。因此,在目的主机上,一个数据报可能放在一个分组内,或者,如果在发送时被分片,就放在多个分组内。因为各个分片可能以不同的路径到达目的主机,所以只有目的主机才有机会看到所有分片。因此,也只有目的主机才能把所有分片重装成一个完整的数据报,提交给合适的传输层协议。在内核版本中,防火墙采用高度模块化的框架。它在内核中建立了一个函数指针链表,称为钩子函数链表,加入到链表中的函数指针所指的函数称为钩子函数。当内核模块需要参与层中对数据包的处理时,通过调用中钩子函数的注册函数,注册内核模块的数据包处理函数,将在钩子函数链表中记录下此模块中的数据
23、包处理函数指针。层在数据包处理过程中,会检查相应的钩子函数链表中是否有钩子函数被注册,如果存在注册的钩子函数,便会调用此函数,并且根据该函数的处理结果,决定是继续完成层中的后续处理过程,还是丢弃此数据包,中断数据包的传输;如果不存在注册的钩子函数,则继续完成层中的后续处理。当内核模块不需要参与层的数据包处理时,调用钩子函数的注销函数,从钩子函数链表中去掉此钩子函数指针,这样层检测不到钩子函数的存在,会继续其后续操作。由此可见,通过结构,内核模块可以动态地参与层中数据包的处理,这使得防火墙代码可完全从层功能的实现代码中分离出来,形成独立的内核模块。同时可以根据需要,添加新的防火墙功能模块,新添功
24、能模块的代码集中在此内核模块中,代码清晰,而且新添功能不会影响其它的防火墙功和层功能。同时数据包的处理权在层和防火墙功能模块之间切换时,不需复制数据包,它们对同一数据包内存空间进行操作,节省了数据包在内存中的复制时间,使防火墙对数据包的处理可以保持高速进行。协议的处理模块对规定的拥塞控制算法做了些改进,添入了一垦塾坚搓住丞蕴囹终协邀挂鲍远过§塞王皿硒宜些新的技术。它设计了一个拥塞控制的有限状态机,用以决定数据发送端在收到一报文后的状态转换。另外,它还增加了一种发送方检测不必要重传的方法,即让接收方用来通知该报文段是重复的报文段。如果在最近的期间重传的报文段都被块确认,发送方就知道在期
25、间进行了不必要的重传。套接字层套接字是网络通信中应用程序对应的进程和网络协议之间的接口,它的设计思想如下:()该层位于协议处理层之上,屏蔽了不同网络协议之间的差异。()套接字是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主体。()在操作系统中,套接字属于文件系统的一部分,网络通信可以看作是对文件的读取,使得我们对网络的控制和对文件的控制一样方便。在网络协议栈的不同层次中传递数据包的技术如果我们从高层协议向低层协议传递数据包时,需要对数据包加头进行封装,反之则需要解封拆头。采用数据结构来管理在内存中的数据包,如图所示:兵中、和是个地址指针,和分别指向存储数据包的缓冲区起始地址和结束地
26、址,而和分别指向数据包的起始地址和结束地址。有了这个指针,我们就只需要相应地移动相关地址指针,就可以方便地进行加头和拆头操作了。互必握住丕统圆终迹邀挂的遮让皇塞现班宜存储数据包的内存缓冲区习一数组厂。卜一链表图及其以上版本的与存储在内存缓冲区的数据包之间的关系在及其以上版本的内核中,数据包在内存中不一定是连续存储的,同一个数据包有可能被分成几片存放在内存的不同位置,这一点与不同(注意不要和的分片混淆,分片是将一个报文分成多个报文,这里是将一个数据包分成几片存放在不同的内存空间中)。其示意图如图:存储数据包的内存缓冲区的末尾设置了一个结构,这是在为数据包申请内存空间时特意增加了()个字节。采用此
27、结构主要是为了使用共享内存技术,使得在数据包的克隆和共享时操作更简便,系统开销较小。结构的域是一个数组,域是一个单向链表。它们所指向的存储空间是一个页的大小(即)。这些额外的存储空间并不是一开始就使用的,只有在所指的存储空间不够用的情况下才使用这些存储空间。先是用数组作为描述增加缓冲区的情况,若空间仍然不够,我们再采用链表。以页为单位划分的存储空间有利于和用户空间的程序共享这一块内存的数据。为了记录数据包的长度,在里增加了一个变量。这个变量记录的是在和里面存储的数据的长度。原有的变量记录数据包的总长度。是第一个缓冲区加结构长度的总和。女蝗侄丕筮囝终垃邀栈的逡让当塞现硒宜第三章网络协议栈的初始化
28、网络协议栈的初始化过程也就是网络协议栈在内核中建立的过程,而这个过程是属于操作系统整个初始化过程中的一部分。本章先将整个系统的初始化做一个介绍,然后具体深入地对其中网络协议栈的初始化过程加以剖析。整个系统的初始化过程概述在机器加电或复位时,先由处理器完成一系列的自检和寄存器的初始化。然后由完成整个机器硬件系统的检测任务,并将有关系统配置的基本信息记录在内存的数据区,以便操作系统在启动时或启动后使用。最后,将从硬盘或软盘读入引导装入程序(),到底是从硬盘启动还是从软盘启动要看设置。如果是从硬盘启动,将读入该盘的柱面扇区(),这个扇区就存放着引导装入程序,在这里将控制权交给引导装入程序。引导程序将
29、保存在外部存储设备上的内核装入内存后,将控制权交给程序。该程序的主要任务就是检测系统参数和负责系统从实模式向保护模式的转化。检测到的系统参数,比如内存的图数据、硬盘参数等都将保存到内存的固定区域,以便后继的初始化过程和检测系统时调用。在进入保护模式的启动阶段后,先转入程序段,它负责保护模式下的内存管理和中断管理框架的建立。在此之后,控制权将转移给函数。该函数是内核初始化过程中最为重要的函数,它完成了虚拟内存管理系统、进程调度和切换机制、中断和异常处理机制、虚拟文件系统以及进程问通信机制等操作系统最重要的几大子系统的建立。到此为止,子系统已经初始化完毕,内存管理系统和进程管理系统已经开始工作,接
30、下来就是各种外设,网络协议栈,实际文件系统的注册等的初始化工作,它是由进程完成的。最后,进程调用函数将自己转化为用户进程,系统切换到用!二握住丕筮圆终垃邀找曲遮让皇塞现娈宜户态。这时,整个系统的初始化过程宣告完成。协议栈的初始化过程从前面讲述的系统初始化过程可以看出:网络协议栈是在内存管理系统、进程管理系统以及虚拟文件系统已经建立的基础上进行初始化的。它由多个函数共同完成,下面按执行顺序进行分析:函数在初始化阶段,系统支持的每种协议族都需要在协议族数组中注册。该数组的每个元素都是一个结构,该结构含有两个域,一个是协议族号,另一个是初始化该协议族的套接字的函数指针(用于创建该协议族套接字的过程)
31、。在函数中将协议族数组的各个元素设置为,为后面的注册做准备。创建结构(套接字的数据结构)和结构(用于管理数据包在内存里的缓冲区)的专用内存缓冲区。内存分配机制是建立在页面分配机制之上的。引入的原因在于,页面管理机制申请最小内存单位是个物理页面,但内核经常使用小内存,如建立内核管理所需要的各种数据结构等,而这些内核内存分配和释放的频率都非常高,所以,以页为单位管理内核内存是一种非常低效的方案。在内存分配机制中,引入了对象这个概念,所谓对象就是存放一组数据结构的内存区,其方法就是构造和析构函数,构造函数用于初始化数据结构所在的内存区(或者说是设置该数据结构的相关域),而析构函数收回相应的内存区(或
32、者说是使该数据结构恢复到被初始化之前的状态)。注意机制并不丢弃已分配的对象,而是释放,但它们依然保留在内存中。当以后又要请求分配同一对象时,就可以从内存获取而不用进行初始化。的机制对于预期使用频率较高的数据结构,在系统初始化阶段就创建了相应的专用缓冲区,这样可以最大限度地减少内碎片的产生。而对于使坠握侄丕红圆堑垃达拢曲丝士与塞现硒塞用频率较低的数据结构,在系统初始化阶段创建了一组通用缓冲区,即使这样处理会产生内碎片,但对整个系统的性能影响较小。由于结构的分配和释放的频率都相当高,所以系统除了为其建立专用的缓存区外,还为它创建了相应的缓冲池。系统用数组来管理缓冲池,每个处理机对应该数组中的一个元
33、素,而每个元素包含一个结构链表的链表头结构,这样,每当释放一个结构就将其链入相应处理机的链表中,而申请一个结构就可以先从这个数组中相应处理机的链表中申请,若不成功再从缓冲区中获得。函数将初始化该数组每个元素的链表头结构。套接字文件系统是一种特殊的文件系统,它不存在任何块设备上,而是存放在内存中,并且它是借用虚拟文件系统的框架来使套接字与文件描述符具有相同的用户接口。注册套接字文件系统的过程实际上就是填写一个数据结构的过程,该结构包含了实际文件系统的名称以及一个对应的超级块读取函数的地址指针,所有已经注册的文件系统的结构形成一个链表,我们称之为注册链表。由于套接字文件系统并不物理地存在任何设备上
34、,所以它的安装和这样的文件系统不一样。安装函数首先申请一个设备号,由于系统规定主设备号为的设备是虚拟设备,所以这里只需要申请一个次设备号。接着是创建一个内存超级块结构(文件系统是从磁盘上读入个超级块结构),其域(表示超级块所在的块设备号)就设置为申请的虚拟设各号。然后创建相应的内存根节点结构、根目录项结构以及安装点结构,并初始化这三个数据结构,同时将三者以及超级块结构相互挂上钩。协议族号钩子点号是钩子函数链表的链表头数组,在注册个钩子函数时就将个函数指针添加到指定协议的指定钩子点的函数链表中,而注销个钩子函数就是将此函数指针从链表中去掉。在函数中将坚递征丞统圆终迹达拽的遮让皇塞班班窥该数组的各
35、个元素设置为,为后面的注册做准备。在函数中完成的初始化任务可以直观地从图了解到。【()的初始化网络协议族数组竺竺竺望兰竺型。对防火墙的钩子数组的初始化!兰!竺!竺兰竺竺竺兰图一网络初始化第一部分(缓存及上层模块初始化)函数由于函数体位于初始化调用段中,所以这里先介绍一下初始化调用段。对于内核映象而言,在初始化阶段有两个重要的段:初始化代码段()和初始化调用段()。凡是函数名前有限定词的,在初始化代码段中都有一个指向其函数体的指针,而其函数体就放在初始化调用段中。这些代码所占的内存在初始化之后将被回收以备它用。从下面的代码可以看出在初始化代码段的函数指针所指向的函数都将被执行。()()()十:丝
36、握侄丕统圆鳖盐越拢的遮让与塞强班窥函数指针就存在于初始化代码段中,它完成协议栈的初始化工作。下面具体描述该函数完成的初始化工作。首先,调用函数将协议族(也就是)注册到内核中有一个全局链表,其链表头为,该链表上的所有节点都是结构,其中主要包含了需要从协议层接收数据的上层协议的接收处理函数的地址指针,从第二章我们可以知道,这样的协议有四个,分别为、,它们都有相应的结构并且被静态地链接在内核中。为了快速地找到这些协议,函数将调用函数把这几个关于协议处理的数据结构加入全局哈希结构数组。内核中有一个静态数组,数组中的元素皆是结构类型的,此结构反映了服务类型和具体的协议之间的映射关系,比如有连接的服务映射
37、到协议,无连接的服务映射到协议,而原始服务类型映射到协议。另外,系统还有一个数组,其中每个元素都是一个双向链表的链表头,数组的下标值就是服务类型编号。函数将调用函数把静态数组中相同服务类型的结构注艘到数组的相应链表中。函数完成协议模块的初始化,先是将类型的数据结构进行初始化(该结构用于方式来判断邻居),然后是将处理拯佳丕缠囹鳖地:邀找的篮让皇塞丑班五包类型的数据结构()加入本机全局哈希数组中这个数组保存的是从链路层向上传送数据包的协议处理函数,实际上就是在层位置上的接收函数,这里包括的协议有和。函数先向口数组注册处理包类型的数据结构,然后是对路由模块的初始化,这包括邻居表(记录在物理上和本机相
38、连接的主机地址信息表)、转发信息数据库()和路由缓存表的初始化函数一用来初始化协议相对应的全局变量和它对应的套接字类型的变量结构。函数()完成对协议的初始化。它分配几个使用机制的缓冲区和几卜表。函数也是用来初始化和它对应的和【结构变量的。另外,如果系统配置要求支持隧道则通过调用函数进行相应的初始化。从函数中完成的初始化任务可以直观地从图了解到。!握往丕统圈鳖垃邀拢的超让与塞现班窟)!燮塑到二二工二嘶藤嘉一中注册盯协议族?摸块的缓存数据初始化;【、归、盱)叫协议模块的初始化初始化协议处理模块【根据系统配置决定的一些初始化(如隧道机制、多播路由器、文件系统中网络部分的初始化)、旒嗍处理模块(“模块
39、的初始化一)图网络初始化第二部分(协议的初始化)函数函数完成网络接口设备的侦测和初始化工作,同时也完成流量控制模块的初始化工作。该函数也位于初始化代码段中。对其的具体分析请见第四章“网卡驱动研究”。防火墙模块的初始化函数初始化代码段中有不少的防火墙模块的初始化函数,它们分别完成包过滤子系统、网络地址转换子系统、数据报处理子系统以及连线跟踪子系统的初始化工作。具体分析请见第六章“防火墙设计”。小结网络协议栈的初始化主要包括各种与网络相关的数据结构的缓冲区的建立,注册各种协议族,注册和安装套接字文件系统,各种协议处理模块的初始化,网络接口设备与流量控制模块的初始化,以及防火墙模块的初始化。丛握侄丕
40、统圆终垃选拔盥逯让兰塞现班究第四章网卡驱动研究网卡作为主机与网络直接交互的硬件设备,其重要性不言而喻。网络接口控制器(,简称)是网卡上的一个核心控制芯片,它负责完成数据链路层的功能。通常使用的网卡就是和其它的外围芯片和电路构成的,而网卡性能的好坏主要取决于的结构功能和控制的驱动程序。另外,它也是基于网卡进行网络编程的主要控制对象,程序通过对的直接控制,就可以实现特定目的的网络软件。本章先介绍现在市面上应用较为广泛的型网卡(采用)的硬件特性,然后再分析和研究在下的)芯片的侦测和初始化、数据帧的收发以及相应中断服务程序的设计和实现。网卡的硬件结构介绍网卡是公司生产的位适合于总线的网卡。利用网卡可以
41、组成总线结构的以太计算机局域网。该网卡遵循标准。其硬件结构如图。按功能可以划分为接口电路、缓冲、站地址、自举、状态设置跳线器、连接器、以及九个部分。下面对其主要部分进行介绍。接口电路主要实现了两种功能:一是与计算机的总线相连,包括数据总线读写、地址总线驱动、中断控制信号的产生、存储器读写信号以及端口读写信号的引入等:二是对网卡内部的操作,包括对缓冲的读写、对的控制、读站地址以及读自举等。数据缓冲用于缓存发送和接收的数据包。数据缓冲的读写操作是在的控制下进行的。利用对的编程可将数据缓冲划分为发送缓冲区和接收缓冲区两部分。在发送过程中,通过网卡的远程将主机内存中待发送的数据包送入发送缓冲区,然后通
42、过本地将数据包从发送缓冲翌型埋挂丕煎圆堡垃选拔的遮让曼实现班窥区发送至的区进行发送。在接收过程中,通过本地将内接收中的数据包取出送接收缓冲区,再利用网卡远程将接收缓冲区的数据包送至主机内存进行处理。站地址(可编程只读存储器)中固化了本站的物理地址。具有字节,其中最低个字节存放的是本站的物理地址,用户可以通过远程从网卡数据端口读出这一物理地址。与缓冲在网卡中是统一编址的,缓冲处在高地址部分,处在低地址部分。、和是由美国公司生产的标准的器件系列。是网络接口控制器(),该器件有三部分的功能:第一是(媒体访问控制)子层协议逻辑,实现数据帧的封装和解封,(带碰撞检测功能的载波侦听多址接入)协议以及校验等
43、功能:第二是寄存器页,用户对网卡通信过程的控制主要通过对某个寄存器页中的命令寄存器编程实现;第三是对网卡上缓冲的读写控制逻辑,包括计算机与本身分别对缓冲读写的控制电路及两者同时读写的仲裁电路。是曼彻斯特编码译码器,该器件有两部分功能:第一是完成曼彻斯特代码的转换,曼彻斯特代码是以太网()标准中物理媒体上传输信号的代码,该代码的特点是有足够的位定时信息,便于检测网络激活状态;第二是与内部收发器协同完成碰撞检测和载波侦听,将物理媒体的状态送至网络接口控制电路。是内部收发器电路,它是网卡和作为媒体的同轴电缆的接口,信号从直接输出到脉冲变压器上。从输入大于的信号才允许通过。这样,由噪声产生的错误可降至
44、最低,保证正确的数据分组传输。图网卡硬件连接框图丛搓佳丕统回终协邀拢的遮盐当塞丑登窥内部寄存器在图中的的内部寄存器都是位的,它们按功能可以分为组:配置与状态寄存器组:主要完成网络接口发送和接收操作方式的选择和配置,比如:采用何种数据传输方式,即以字节方式(位)还是以字方式(位)等,以及通过这些寄存器了解发送和接收过程的状态信息。接收缓冲管理寄存器组:负责管理和控制缓冲的分配,提供了三种基本功能:链接功能、恢复功能、循环队列的缓冲管理功能。发送管理寄存器组:的帧是由本地实现的。由发送页起始地址寄存器、发送字节计数寄存器和发送字节计数寄存器共个寄存器来控制本地进行帧的发送。远程管理寄存器组:用于配合远程操作,提供了两对与远程有关的寄存器:远程起始地址寄存器(,)和远程字节计数寄存器(,),前者用来存放待传输数据的起始地址,后者用来存放待传输数据的长度(用字节表示)。地址管理寄存器组:该寄存器组通过与数据帧的目的地址比较,用于确定是否接收该数据帧。内部功能模块主要用来控制网络和主机之间的数据传输,主要由以下几个模块来实现数据传输。()接收解串功能模块当检测到信号载波后,在接收时钟的控制下,将数据线上的信息位依次移入串行移位寄存器中。同时,串
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西柳州柳北区锦绣街道办事处招聘公益性岗位1人参考考试题库及答案解析
- 2025河南新乡封丘县建勋学校招聘备考笔试题库及答案解析
- 2025山东阳昇甄选产业运营有限公司选聘7人考试参考试题及答案解析
- 2025年杭州市临安区第三人民医院招聘编外工作人员2人备考笔试试题及答案解析
- 2025甘肃嘉峪关市第三幼儿园招聘公益性岗位人员2人备考考试题库及答案解析
- 2025广东中山大学肿瘤防治中心肝脏外科陈敏山教授课题组自聘技术员招聘2人参考考试试题及答案解析
- 美业聘用合同范本
- 职业病禁忌协议书
- 职工非工亡协议书
- 联合摄制合同范本
- 卓有成效的管理者要事优先
- 生产车间安全管理检查表及整改措施
- 电厂标识系统KKS编码说明pdf
- 2023年郴州职业技术学院单招职业倾向性考试题库及答案详解1套
- 2025年福建省综合评标专家库考试题库(二)
- 完整版医疗器械基础知识培训考试试题及答案
- 220kV电网输电线路的继电保护设计
- 《无人机地面站与任务规划》 课件全套 第1-9章 概论 -无人机内业数据整与处理
- 屋顶光伏承重安全检测鉴定
- 长输管道项目验收总结与报告
- 2025年高考数学真题分类汇编专题03 三角函数(全国)(解析版)
评论
0/150
提交评论