已阅读5页,还剩70页未读, 继续免费阅读
(计算机软件与理论专业论文)linux操作系统网络协议栈的设计与实现研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中文摘要 l i n u x 操作系统在当今服务器市场上占有相当大的份额,这说明它的网络 协议栈的设计是成功和高质量的。同时,l i n u x 作为一个开放源码的操作系统, 它不仅继承了u n i x 系统的大部分优良特性,而且将当今最先进的技术融入其 中,比如支持最大数量的流量控制算法、最新的t c p 拥塞控制算法的实现,防 火墙设计的高度模块化。所以研究l i n u x 操作系统的网络协议栈就能较快 地掌握最先进的计算机技术、获得大量有益的经验。继而将这些技术运用到国 产操作系统、嵌入式软件和信息安全产品的开发和设计上来。最终打破国外公 司在这些领域的垄断地位,将中国的民族软件业真正地发展起来,走上独立自 主的道路。 由于l i n u x 是一个宏内核的操作系统,网络协议栈属于内核的一部分,而 且它是建立在进程管理系统、存储管理系统、文件系统、进程问通信和设备驱 动之上的。所以要完成本课题的任务实际上需要对整个l i n u x 操作系统内核进 行研究。 针对论文的撰写,鉴于篇幅和重点,本论文先从总体上对l i n u x 2 4 x 网络 协议栈的分层实现进行深入剖析,并与标准的t c p i p 协议栈的设计进行对比。 接着对内核中协议栈的初始化过程进行深入分析,这主要包括套接字层初始化、 各种协议模块的初始化、网络接口设备的初始化以及流量控制和防火墙模块的 初始化几个过程。然后按照协议栈的从低到高顺序分为四个专题,对其重要部 分的实现用理论与具体实现相结合的方法加以研究。第一个专题是网卡驱动, 主要讲述n e 2 0 0 0 网卡的硬件特性与具体的软件驱动程序设计。第二个专题是流 量控制,主要讲述两大理论模型和内核中流量控制模块的具体设计,以及f i f o 的一个实例。第三个专题是内核防火墙的具体设计与实现,主要讲述整个防火 墙框架的建立和包过滤子系统的设计。第四个专题是t c p 协议的拥塞控制,主 要对l i n u x 的t c p 拥塞控制状态机的设计、l i n u x 拥塞控制的重要特征、l i n u x 的t c p 实现和i e t f 规范异同之比较进行深入研究。这四个专题基本上覆盖了 l i n u x 网络协议栈设计的重要特征,融合了当今最先进的计算机技术,是非常 值得借鉴和学习的。 关键词:l i n u x 2 4 x ,网卡驱动,流量控制,防火墙,拥塞控制 a b s t r a c t b e c a u s et h ef r e e l ya v a i f a b l el i n u xo p e r a t i n gs y s t e mh a sg a i n e d p o p u l a r i t ye s p e c i a l l yi nt h en e t w o r ks e r v e r s ,i t sn e t w o r kp r o t o c o ls t a c k d e s i g ni ss u c c e s s f u la n da d v a n c e d l i n u x ,a sas h a r e w a r eo p e r a t i n gs y s t e m , s u p p o r t san u m b e ro fa d v a n c e dn e t w o r k i n gf e a t u r e s b e s i d e st h er e l i a b l e t c p u d p i pp r o t o c o ls u i t e ,an u m b e ro fn e wf e a t u r e sl i k ef i r e w a l i s ,q o s , u p t od a t e c o n g e s t i o nc o n t r o la l g o r i t h m se t c h a sb e e na d d e dt o t h e n e t w o r k i n gk e r n e l i ti sv e r yi m p r o v e m e n tf o ru st or e s e a r c hl i n u xn e t w o r k p r o t o c o ls t a c kt ob em a s t e ro fa d v a n c e dt e c h n o l o g ya n de x p e r i e n c ea n dt o d e v e l o po p e r a t i n gs y s t e mb yo u r s e l v e s i nt h ef i r s tp l a c e ,t h i st h e s i sw i l ia n a l y z ep r o t o c o lh i e r a r c h i e so f l i n u x2 4 xn e t w o r kp r o t o c o ls t a c k ,a n dc o n t r a s ti tt os t a n d a r dt c p i p p r o t o c o ls t a c k ,t h e na n a l y z ei n i t i a l i z t i o no fl i n u x2 4 xn e t w o r k p r o t o c o ls t a c k a f t e r w a r d ,t h em a i ne m p h a s e so ft h i sp a p e rc o n c e n t r a t e o nf o u rs u b j e c t s ,t h ef i r s ts u b j e c ti sn e t w o r kc a r dd r i v e r ,w h i c hg i v e s a ni n t r o d u c t i o nt h es t r u c t u r ea n df u n c t i o no fn e 2 0 0 0n e t w o r kc a r da n d d i s c u s s e sd e s i g no fn e t c a r d s d r i v e r t h es e c o n ds u b j e c ti st r a f f i c c o n t r o l ,w h i e ha n a l y z e sa c a d e m i cm o d e la n dd e s i g no fl i n u x2 4 xt r a f f i c c o n t r o lm o d u l e t h et h i r ds u b j e c ti sd e s i g na n dr e a l i z a t i o no ff i r e w a l l s t h ef o u r t hs u b j e c ti st h ec o n g e s t i o nc o n t r o la l g o r i t h m so fl i n u x2 4 x t c p ,w h i c hd i s c u s s e sc o n g e s t i o nd e s i g no fc o n t r o ls t a t em a c h i n ea n dl i n u x t c pf e a t u r e st h a td i f f e rf r o mat y p i c a lt c p i m p l e m e n t a t i o n k e yw o r d s :l i n u x 2 4 x ,n e t c a r dd r i v e r ,t r a f f i cc o n t r o l ,f i r e w a l l s c o n g e s t io nc o n t r o l i l 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名:煎慧查日期:如牛年土月硝日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:! 塾整:查导师签名: 日期:二口d 蚌年工月可日 女x 拯任丕煎圆堡拯邀拢的遮过呈塞现班壹 1 1 课题背景 第一章引言 l i n u x 操作系统在当今服务器市场上占有相当大的份额,这说明它的网络 协议栈的设计是成功的、也是高质量的。这一方面来自于l i n u x 是一个开放源 码的操作系统,不仅继承了u n i x 系统的大部分优良特性,而且将当今先进的技 术融入其中,比如支持最大数量的流量控制策略、最新的t c p 拥塞控制算法, 防火墙设计的高度模块化。另一方面来自于它对众多网络协议的广泛支持, 包括t c p i p 、i p x s p x 、n e t l i n k 、b l u e t o o t h 、e c o n e t 、i p v 6 、s n a 、i r d a 等。 研究和学习l i n u x 操作系统是我国软件业走上独立自主和实现腾飞的重要 途径。由于操作系统是所有软件赖以生存的基础,但我国操作系统市场长期被 国外公司垄断,因而民族软件业的发展非常迟缓,在国际上处于不利地位。面 对这种局面,出路何在? l i l u x 的开放性和技术的先进性可以帮助我们打破国 外公司的垄断,我们可以借鉴它的技术加速国产操作系统、嵌入式软件和信息 安全产品的丌发。所以在1 9 9 9 年7 月,国家计委、科技部向社会公布的我国重 点发展的高技术项目中,把l i n u x 操作系统的研究放到一个重要的位置,这说 明我国政府对l i l 3 u x 和发展自主版权操作系统的重视。 现在国内外研究l i n u x 操作系统的机构和个人很多,大型的跨国公司像 i n t e l 、i b m 、s u n 和n o k i a 等,科研院校如芬兰的赫尔辛基大学、美国的加州 大学伯克利分校、我国的中科院软件所和浙江大学等都投入了大量的人力物力, 成立了专门的研发团队。但令人遗憾地是,在国内,大多数人着力于进程管理 系统、存储管理系统、文件系统、进程闯通信、设备驱动以及多处理机这几部 分的研究,惟独缺少人对网络协议栈这部分进行深入研究。所以本课题在科研 和实际工作中都显得非常迫切。 1 2 课题任务简介及本人所作的工作 丛n 些蛙佳丕缝圜络协邀缝笪超盐生塞现班嚣 由于l i n u x 是一个宏内核的操作系统,网络协议栈属于内核的一部分,而 且它是建立在进程管理系统、存储管理系统、文件系统、进程间通信和设备驱 动之上的。所以要完成本课题的任务实际上需要对整个l i n u x 操作系统内核进 行研究。l i n u x 内核中最核心的代码大约可以占磁盘1 0 m 的空间,有几十万行, 因而工作量大,任务也比较重。作者在近两年的时间内,不仅仔细阅读了这几 十万行源代码,而且详细地写了几十万行的分析和注释。在此期间,作者查阅 了大量有关计算机操作系统和网络协议栈的中外文资料,和相关的专家和研究 人员进行了多次讨论,并针对疑难问题进行了多次实验和论证。 针对论文的撰写,鉴于篇幅和重点,我只对网络协议栈方面的研究成果加 以表述。由于网络协议栈也属于内核的一部分,其自然地也会受到其它子系统 的制约,比如文件系统、中断处理等,我在叙述中会对相关部分加以讲解,以 期达到内容的整体性和连贯性。论文从网络协议栈的总体设计开始,按照网络 协议栈的初始化、网卡驱动、流量控制、n e t f i l t e r 防火墙和t c p 协议的拥塞 控制的顺序进行深入细致地论述。课题的最终实现目标是掌握整个l i n h x 网络 协议栈的设计和实现技术,并可以根据实际需要对其进行相关的改进和增删。 1 3 论文的结构 论文共分七章。主要内容分别阐述如下: 第一章:引言。介绍本课题的背景和来源,作者所做的工作和论文结构。 第二章:网络协议栈的总体设计。先阐述标准的t c p i p 协议栈的分层设计, 再着重分析l i n u x 网络协议栈的分层设计,这包括各层的模块设计和实现方法, 同时也和标准的t c p i p 协议栈的设计进行对比。 第三章:网络协议栈的初始化。先简要地阐述系统初始化的整个过程,再 着重对网络协议栈的初始化过程进行描述,这主要包括套接字层初始化、各种 协议模块的初始化、网络接口设备的初始化以及流量控制和防火墙模块的初始 化。 l i 塾坠苎握往丕统圆终协这拢曲丝让皇塞班班巍一 第四章:网卡驱动研究。在对一种网卡的硬件结构和功能进行研究和分析 的基础上,通过分析l i n u x 下d p 8 3 9 0 芯片的侦测和初始化、数据帧的收发以及 相应的中断服务程序的设计和实现,推广到其它各种类型的网卡驱动软件设计。 第五章:流量控制。先介绍目前的两种服务模型:集成服务模型和区分服 务模型。然后介绍l i n u x 内核如何来实现流量控制的,最后讲解l i n u x 中f i f o 流量控制算法的具体实现。 第六章:防火墙设计。主要对防火墙n e t f f l t e r 框架的设计、包过滤子系 统的具体设计、包过滤子系统对数据包的处理过程和i p t a b l e s 命令的实现过程 进行详尽地分析。 第七章:t c p 拥塞控制策略。主要对l i n u x 的t c p 拥塞控制状态机的设计、 l i n u x 拥塞控制的重要特征、l i n u x 的t c p 实现和i e t f 规范异同之比较进行深 入研究。 l i n 些援拄丕筮圜缝边邀拔的送让皇塞理班宜 第二章网络协议栈的总体设计 l i f l u x 网络协议栈的总体设计有以下几个重要特点; ( 1 ) 协议栈设计基本遵循t c p i p 协议的要求,但在具体实现上有所改动,比如 将a r p 协议处理模块和i p 协议处理模块放到相同的层次位置。 ( 2 ) 高度模块化。模块与模块之间的通信,多采用函数指针。这样,当某个模块 的内容有较大的改变时,另一个相关的模块只需做较小的改动或无需改动。 ( 3 ) 数据包在不同的协议层次上传递,只需相应地修改描述数据包的数据结构的 相关指针,这样简化的设计将大大地提高系统的性能。 本章就着手从这三个重要特点展开对l i n u x 网络协议栈的总体设计的论 述。 2 1 标准t c p i p 协议与l i n u x 网络协议栈具体设计的对比 标准的t c p i p 协议是一个四层协议系统,如图2 - 1 所示。 一一d l 一一 i讶i 卜! 二j 传输层 i ,:j 7、 、, 厂。 厂2 厂1 1i c m p | 一jd 卜ii l 网络层 【l 。一j 一r jl 匕_ 兰型一兰一鼢层 媒体 图2 - 1t c p i p 协议族中不同层次的协议 其各层的功能分述如下: 1 ) 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备 l i n 丛逮捱丕箕圆终垃达挂的遮让当塞班班宜 驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆( 或其他任何传 输媒介) 的物理接口细节。 2 ) 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。 在t c p i p 协议族中,网络层协议包括i p 协议( 网际协议) ,i c m p 协议( t n t e r n e t 互联网控制报文协议) ,以及i g m p 协议( i n t e r n e t 组管理协议) 。 3 ) 传输层主要为两台主机上的应用程序提供端到端的通信。在t c p i p 协议族 中,有两个互不相同的传输协议:t c p ( 传输控制协议) s u u d p ( 用户数据报协 议) 。t c p 为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序 交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发 送最后确认分组的超时时钟等。由于传输层提供了高可靠性的端到端的通信, 因此应用层可以忽略所有这些细节。而另一方面,u d p 月j j 为应用层提供一种非常 简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并 不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两 种传输层协议分别在不同的应用程序中有不同的用途,这点将在后面看到。 4 ) 应用层负责处理特定的应用程序细节。 l i n u x 网络协议栈基本按此标准进行设计的,但在具体实现上有所不同, 这可以从图2 - 2 看出,内核将a r p 协议处理模块和i p 协议处理模块放在同一 层的位置上,而且将i c m p 、i g m p 协议处理模块和t c p 、u d p 协议处理模块 放在同一个层次( 都在i p 层之上) 。之所以这样设计主要是出自程序调用逻辑 的考虑。举例来说,从链路管理层向上传的数据包,到底是传给哪个协议处理 模块,判别程序是根据数据包的帧头决定的,如果是a r p 帧头则传递给a r p 协议处理模块,若是i p 帧头则传递给i p 协议处理模块,所以在实现上a r p 协 议处理模块和i p 协议处理模块在同一层上。 从整体上看,l i n u x 网络系统可以分为硬件驱动层、链路管理层、协议处 理层、套接字层和应用层五个部分,在内核中包括前四层。从实现上看,我们 还可以将协议层分为两层:a r p 和i p 分在一层,而i c m p 、i g m p 、t c p 和u d p 分在一层。下面分别论述各层的功能设计和相邻层的数据传递实现技术。 垦i n 坚避任丕筮豳鳖拯丝拢的遮让皇实现硒宜 出l 世半j 世叫一下一。 广。 ii 泵统州 : 圳采镜 i d “,- ck | lz n 永搜、 ml ji 。 l 商一阿赢习 l 厂鳃, 卜觚”j , 川 1 :i j 甜掘* 雕蜷珧 :一j1 拿嚣 诅踔i 。“。惯块l - _ 娴网 州蹈扯n 卡驱动 物娜2 = 旧拙0 0 戟制 1 触 ? l 。懈 内拉 ,叫 图2 一内核的协议栈的体系结构图 网络协议栈的分层设计 下面对每层各个重要模块的设计以及功能进行分别论述。 2 2 1 硬件驱动层 如果计算机与网络进行通信的硬件设备是网络接口卡,那么硬件驱动层主 要实现的就是网卡驱动。其在软件设计上可以分为四大模块:网卡侦测及其初 始化,数据包的发送,网卡中断服务程序和数据包的接收。 网卡的侦测和初始化过程在操作系统的初始化阶段完成。侦测的方法主要 是检查该网卡的空间和特征寄存器。初始化过程包括对网卡内部的各个寄 存器的初始化,侦测网卡的中断号,并向内核注册相应的中断服务程序等。 数据包发送模块负责接收从链路管理层传递来的数据帧,并将它发送到网 络。实际的发送过程分为两步:第一步是通过远程操作将数据包从内存发 j + 糕糊 一 l 也丝蝗往丕红圆缝迹越挂盥邀让星塞班班宜 送到网卡的发送缓冲区,第二步是通过本地d m a 将数据包从发送缓冲区发送到 网络。 网卡中断服务程序模块完成三方面的工作。如果中断是由于网卡接收到网 络上的数据帧而触发的,中断服务程序将调用相应的接收函数,将数据帧从接 收缓冲区转移到内存缓冲区,并设置相应的s k b u f f 结构;如果中断是由于发 送一个数据包的过程结束而触发的,则根据需要判断是否需要进一步进行下一 个数据包的发送;如果中断是由于网络接口出现某些错误而触发的,则根据一 些专用的网络错误统计寄存器的内容来更新网卡在系统中的统计变量。 数据包的接收模块只是负责将网卡缓冲区的数据包转移到内存缓冲区。这 是因为对网络上的数据帧检测,接收数据帧到网卡缓冲中,并触发相应的中断 的整个过程是由硬件完成的。 硬件驱动层是通过软中断机制向上层发送数据包的。这里所谓的软中断实 际上应该叫做中断后半部分的处理机制。它的出现主要基于以下考虑:中断服 务程序一般在关中断情况下执行,以免中断嵌套而使中断控制复杂化。但中断 是随机事件,若关中断的时间太长,c p u 就不能及时的响应其它的中断请求, 从而导致中断的丢失。为此,1 i n u x 将一个中断请求需要的服务分成两部分, 前半部分在关中断情况下进行,而后半部分对时间的要求并不那么高,可稍后 执行,并且后半部分是开中断执行。 l i n u x 2 4 x 使用三种软中断机制:b o t t o mh a l f 、t a s k l e t 和s o f t i r q 。它 们具有一个共同点:中断服务程序的后部分的执行不允许嵌套( 这个嵌套是指 其它中断服务程序的后部分的嵌入执行) 。特别地,在l i n u x 网络协议栈链路层 中使用的软中断机制是s o f t i r q 。该机制相对于其它两种机制在多处理机的环 境下有两大区别: ( 1 ) 在同一时刻,如果有多个采用此机制的中断服务程序的后半部分需要执行, 它们可以分别运行在不同的c p u 上。 ( 2 ) 中断请求在某个c p u 上被响应之后,其中断服务程序必然在该c p u 上被执行, 但相应地中断后半部分程序就不定在该c p u 上被执行。 这里要特别指出的是若上层向硬件驱动层放送数据包,如果发现网卡正在 发送数据,则采用软中断机制,否则将直接向硬件驱动层发送数据包。 l i n 丛攮佳丕红圈终垃这挂的遮让复塞现班窥 2 2 2 链路管理层 流量控制是l i n u x 链路管理层的主要功能。具体来说就是接收由上层协议 处理模块传递过来的数据包,决定是排队还是丢弃( 队列满或流量太高时) ,或 者将某一个数据包推迟送出,以及安排发送数据包的次序。流量控制模块将负 责把合适的数据包发送到硬件驱动层。需要特别指出的是:在l i n u x 中,上层 协议处理模块传递过来的数据包才经过流量控制模块,而从硬件驱动层传上来 的数据包不经过流量控制模块。 目前在1 i n u x 中共支持1 1 种流量控制算法,它们分别是:c b q ( 基于类排 序) 、t b f ( 令牌桶过滤) 、f i f o ( 先进先出) 、p r i o r i t y ( 优先级) 、s f q ( 随机公 平队列) 、r e d ( 随机早期检测) 、c s z 、t e q l 、a t m 、g r e d 和d s _ m a r k 。 一种流量控制算法在实现上由队列规程( q u e u i n gd i s c i p l i n e ) 、类 ( c l a s s ) 、过滤器( f i l t e r ) 和管辖器( p o l i c e r ) 四个部分组成。每个网络接 口设备都对应一个队列规程,它用来指定网络接口设备中数据包的处理方式。 类总是附着在某种队列规程之下的,一个类代表了该队列规范中的一类数据包, 这些数据包具有某种相同的特性( 如它们的目的i p 地址都相同) ,并且接受相 似的处理。过滤器的作用在于根据t o s 、i p 地址等信息对i p 包进行分类。管 辖器的作用在于确保一个数据流的特性符合预先规定的值( 如发送速率不超过 一定的上限) 。 2 2 3 协议处理层 该层负责各种协议的处理,每种协议基本上都是按照r f c 标准具体设计和 实现的,这里主要论述几个重要的模块,包括路由管理模块、数据包的分片与 组装、n e t f i i t e r 防火墙模块和t c p 协议处理模块。 路由管理模块使用两个数据库来保存路由信息,一个是f o r w a r d i n g i n f o r m a t i o nb a s e ( f i b ) ,它包含着有关已知目的i p 和它们的最佳路由的详细 列表;另一个是r o u t ec a c h e ,即路由缓存,它用来快速查找目的i p 的路由, 和其它缓存一样,它包含的只是常用的路由,它的内容来自于f i b ,无论什么 时候查找i p 路由,首先都要在路由缓存中检查是否有匹配的路由,如果路由缓 存中没有匹配的路由,则需要到f i b 中去查找路由;如果那里也没有找到路由, 些n 女x 攮佳墓统圆缗垃邀拄的遮让星塞现研究 则i p 包发送失败并通知应用程序;如果在路由缓存中没有而在f i b 中找到路出, 则使用此路由信息,并为此路由生成一个新项,添加到路由缓存中。 分片和组装模块用来解决m t u ( 最大传输单元) 不同的网络间i p 报文的传送 问题。当分组过大而不适合在所选硬件接口上发送时,能够对分组进行分片。 过大的分组被分成两个或多个大小适合在所选定网络上发送的i p 分片。而在去 目的主机的路途中,分片还可能被中间的路由器继续分片。因此,在目的主机 上,一个i p 数据报可能放在一个i p 分组内,或者,如果在发送时被分片,就放 在多个i p 分组内。因为各个分片可能以不同的路径到达目的主机,所以只有目 的主机才有机会看到所有分片。因此,也只有目的主机才能把所有分片重装成 一个完整的数据报,提交给合适的传输层协议。 在l i n u x 内核2 4 x 版本中,防火墙采用高度模块化的n e t f i i t e r 框架。它在 内核中建立了一个函数指针链表,称为钩子函数链表,加入到链表中的函数指 针所指的函数称为钩子函数。当内核模块需要参与i p 层中对数据包的处理时, 通过调用n e t f i i t e r 中钩子函数的注册函数,注册内核模块的数据包处理函数, n e t f i l t e r 将在钩子函数链表中记录下此模块中的数据包处理函数指针。i p 层在 数据包处理过程中,会检查相应的钩子函数链表中是否有钩子函数被注册,如 果存在注册的钩子函数,便会调用此函数,并且根据该函数的处理结果,决定 是继续完成i p 层中的后续处理过程,还是丢弃此数据包,中断数据包的传输; 如果不存在注册的钩子函数,则继续完成i p 层中的后续处理。当内核模块不需 要参与i p 层的数据包处理时,调用n e t f i i t e r 钩子函数的注销函数,n e t f i l t e r 从钩子函数链表中去掉此钩子函数指针,这样i p 层检测不到钩子函数的存在, 会继续其后续操作。由此可见,通过n e t f i i t e r 结构,内核模块可以动态地参与 i p 层中数据包的处理,这使得防火墙代码可完全从i p 层功能的实现代码中分离 出来,形成独立的内核模块。同时可以根据需要,添加新的防火墙功能模块, 新添功能模块的代码集中在此内核模块中,代码清晰,而且新添功能不会影响 其它的防火墙功和i p 层功能。同时数据包的处理权在i p 层和防火墙功能模块 之间切换时,不需复制数据包,它们对同一数据包内存空间进行操作,节省了 数据包在内存中的复制时间,使防火墙对数据包的处理可以保持高速进行。 t c p 协议的处理模块对r f c 规定的拥塞控制算法做了些改进,添入了一 9 垦i 塾坚搓住丞蕴囹终协邀挂鲍远过塞王皿硒宜 些新的技术。它设计了一个拥塞控制的有限状态机,用以决定数据发送端在收 到一a c k 报文后的状态转换。另外,它还增加了一种t c p 发送方检测不必要重 传的方法,即让接收方用d - s a c k 来通知该报文段是重复的报文段。如果在最近 的r e c o v e r y 期间重传的报文段都被d - s a c k 块确认,发送方就知道在r e c o v e r y 期间进行了不必要的重传。 2 2 4 套接字层 套接字是网络通信中应用程序对应的进程和网络协议之间的接口,它的设 计思想如下: ( 1 ) 该层位于协议处理层之上,屏蔽了不同网络协议之间的差异。 ( 2 ) 套接字是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主 体。 ( 3 ) 在l i n u x 操作系统中,套接字属于文件系统的一部分,网络通信可以看作是 对文件的读取,使得我们对网络的控制和对文件的控制一样方便。 2 3 在网络协议栈的不同层次中传递数据包的技术 如果我们从高层协议向低层协议传递数据包时,需要对数据包加头进行封 装,反之则需要解封拆头。l i n u x 采用数据结构s k b u f f 来管理在内存中的数 据包,如图2 - 3 所示: 兵中h e a d 、d a t a 、t a i l 和e n d 是4 个地址指针,h e a d 和e n d 分别指向存 储数据包的缓冲区起始地址和结束地址,而d a t a 和t a i l 分别指向数据包的起 始地址和结束地址。有了这4 个指针,我们就只需要相应地移动相关地址指针, 就可以方便地进行加头和拆头操作了。 互必k 握住丕统圆终迹邀挂的遮让皇塞现班宜 h e a d r o o m存 储 数 据 包 的 内 存 缓 冲 区 t a i1 r o o a l h s k b _ s h a r e d _ i n f o l 一 厂l _ 。卜一j iiil f r a y s 数组 f r a gl i s t 链表 图2 - 3l i n u x 2 4 7 及其以上版本的s k b u f f 与存储在内存缓冲区的数据包之间的关系 在l i n u x 2 4 7 及其以上版本的内核中,数据包在内存中不一定是连续存储 的,同一个数据包有可能被分成几片存放在内存的不同位置,这一点与 l i n u x 2 2 x 不同( 注意不要和i p 的分片混淆,i p 分片是将一个i p 报文分成多 个i p 报文,这里是将一个数据包分成几片存放在不同的内存空间中) 。其示意 图如图2 3 :存储数据包的内存缓冲区的末尾设置了一个s k b s h a r e d i n f o 结 构,这是在为数据包申请内存空间时特意增加了s i z e o f ( s k b s h a r e d i n f o ) 个字节。采用此结构主要是为了使用共享内存技术,使得在数据包的克隆和共 享时操作更简便,系统开销较小。s k b s h a r e d i n f o 结构的f r a g s 域是一个数 组,f r a g _ l i s t 域是一个单向链表。它们所指向的存储空间是一个页的大小( 即 4 k ) 。这些额外的存储空间并不是一开始就使用的,只有在d a t a 所指的存储空 间不够用的情况下才使用这些存储空间。先是用f r a g s 数组作为描述增加缓冲 区的情况,若空间仍然不够,我们再采用f r a g l i s t 链表。以页为单位划分的 存储空间有利于和用户空间的程序共享这一块内存的数据。 为了记录数据包的长度,在s k b u f f 里增加了一个变量d a t a l e n 。这个变 量记录的是在f r a g s 和f r a g l i s t 里面存储的数据的长度。原有的变量f e n 记 录数据包的总长度。t r u e s i z e 是第一个缓冲区加s k b u f f 结构长度的总和。 习- l i 女k 蝗侄丕筮囝终垃邀栈的逡让当塞现硒宜 第三章网络协议栈的初始化 网络协议栈的初始化过程也就是网络协议栈在内核中建立的过程,而这个 过程是属于l i n u x 操作系统整个初始化过程中的一部分。本章先将整个系统的 初始化做一个介绍,然后具体深入地对其中网络协议栈的初始化过程加以剖析。 3 i 整个系统的初始化过程概述 在机器加电或复位时,先由处理器完成一系列的自检和寄存器的初始化。 然后由b i o s 完成整个机器硬件系统的检测任务,并将有关系统配置的基本信息 记录在内存的b i o s 数据区,以便操作系统在启动时或启动后使用。最后,b i o s 将从硬盘或软盘读入引导装入程序( b o o tl o a d e r ) ,到底是从硬盘启动还是从 软盘启动要看b i o s 设置。如果是从硬盘启动,b i o s 将读入该盘的0 柱面0 扇 区( m b r ) ,这个扇区就存放着引导装入程序,b i o s 在这里将控制权交给引导装 入程序。 引导程序将保存在外部存储设备上的内核装入内存后,将控制权交给 s e t u p s 程序。该程序的主要任务就是检测系统参数和负责系统从实模式向保 护模式的转化。检测到的系统参数,比如内存的e 8 2 0 图数据、硬盘参数等都将 保存到内存的固定区域,以便后继的初始化过程和检测系统时调用。 在进入保护模式的启动阶段后,先转入h e a d s 程序段,它负责保护模式下 的内存管理和中断管理框架的建立。在此之后,控制权将转移给s t a r t _ k e r n e l 函数。该函数是内核初始化过程中最为重要的函数,它完成了虚拟内存管理系 统、进程调度和切换机制、中断和异常处理机制、虚拟文件系统以及进程问通 信机制等操作系统最重要的几大子系统的建立。 到此为止,c p u 子系统已经初始化完毕,内存管理系统和进程管理系统已 经开始工作,接下来就是各种外设,网络协议栈,实际文件系统的注册等的初 始化工作,它是由i n i t 进程完成的。 最后,i n i t 进程调用e x e c v e 函数将自己转化为用户进程,系统切换到用 l i ! ! 二握住丕筮圆终垃邀找曲遮让皇塞现娈宜 户态。这时,整个系统的初始化过程宣告完成。 3 2 协议栈的初始化过程 从前面讲述的系统初始化过程可以看出:网络协议栈是在内存管理系统、 进程管理系统以及虚拟文件系统已经建立的基础上进行初始化的。它由多个函 数共同完成,下面按执行顺序进行分析: 3 2 1s o c k i n i t 函数 在初始化阶段,系统支持的每种协议族都需要在协议族数组 n e t f a m i l i e s 中注册。该数组的每个元素都是一个n e t _ p r o t o f a m i l y 结构, 该结构含有两个域,一个是协议族号,另一个是初始化该协议族的套接字的函 数指针( 用于创建该协议族套接字的过程) 。在s o c k i n i t 函数中将协议族数 组的各个元素设置为n u l l ,为后面的注册做准备。 创建s o c k 结构( 套接字的数据结构) 和s k - b u f f 结构( 用于管理数据包在 内存里的缓冲区) 的专用s l a b 内存缓冲区。s l a b 内存分配机制是建立在页面 分配机制之上的。引入s l a b 的原因在于,页面管理机制申请最小内存单位是 个物理页面,但内核经常使用小内存,如建立内核管理所需要的各种数据结构 等,而这些内核内存分配和释放的频率都非常高,所以,以页为单位管理内核 内存是一种非常低效的方案。 在s l a b 内存分配机制中,引入了对象这个概念,所谓对象就是存放一组数 据结构的内存区,其方法就是构造和析构函数,构造函数用于初始化数据结构 所在的内存区( 或者说是设置该数据结构的相关域) ,而析构函数收回相应的 内存区( 或者说是使该数据结构恢复到被初始化之前的状态) 。注意s l a b 机制 并不丢弃已分配的对象,而是释放,但它们依然保留在内存中。当以后又要请 求分配同一对象时,就可以从内存获取而不用进行初始化。 l i n u x 的s l a b 机制对于预期使用频率较高的数据结构,在系统初始化阶段就 创建了相应的专用缓冲区,这样可以最大限度地减少内碎片的产生。而对于使 l i 坠握侄丕红圆堑垃达拢曲丝j 士与塞现硒塞 用频率较低的数据结构,在系统初始化阶段创建了一组通用缓冲区,即使这样 处理会产生内碎片,但对整个系统的性能影响较小。 由于s k b u f f 结构的分配和释放的频率都相当高,所以系统除了为其建立专 用的s l a b 缓存区外,还为它创建了相应的缓冲池。系统用数组s k b h e a d p o o l 来管理缓冲池,每个处理机对应该数组中的一个元素,而每个元素包含一个 s k b u f f 结构链表的链表头s k b u f f _ h e a d 结构,这样,每当释放一个s k b u f f 结 构就将其链入相应处理机的链表中,而申请一个s k b u f f 结构就可以先从这个数 组中相应处理机的链表中申请,若不成功再从s l a b 缓冲区中获得。s o c k i n i t 函数将初始化该数组每个元素的链表头结构。 套接字文件系统是一种特殊的文件系统,它不存在任何块设备上,而是存 放在内存中,并且它是借用虚拟文件系统的框架来使套接字与文件描述符具有 相同的用户接口。 注册套接字文件系统的过程实际上就是填写一个f i l e _ s y s t e m _ t y p e 数据结 构的过程,该结构包含了实际文件系统的名称以及一个对应的v f s 超级块读取函 数的地址指针,所有已经注册的文件系统的f i l e s y s t e m t y p e 结构形成一个链 表,我们称之为注册链表。 由于套接字文件系统并不物理地存在任何设备上,所以它的安装和e x t 2 这 样的文件系统不一样。安装函数首先申请一个设备号,由于系统规定主设备号 为0 的设备是虚拟设备,所以这里只需要申请一个次设备号。接着是创建一个内 存超级块结构( e x t 2 文件系统是从磁盘上读入个超级块结构) ,其s d e v 域( 表 示超级块所在的块设备号) 就设置为申请的虚拟设各号。然后创建相应的内存 根节点结构、根目录项结构以及安装点结构,并初始化这三个数据结构,同时 将三者以及超级块结构相互挂上钩。 n fh o o k s 协议族号 钩子点号 是钩子函数链表的链表头数组,在注册 个钩子函数时就将个函数指针添加到指定协议的指定钩子点的函数链表中, 而注销个钩子函数就是将此函数指针从链表中去掉。在s o c k i n i t 函数中将 1 4 u n 坚递征丞统圆终迹达拽的遮让皇塞班班窥 该数组的各个元素设置为n u l l ,为后面的注册做准备。 在s o c k i n i t 函数中完成的初始化任务可以直观地从图3 - 1 了解到。 l s o c ki n i t j 网络协议族数组【 ( n e t _ f a m i l i e s ) 的初始化i 竺竺竺望兰竺型1 1 1 1 j 。j ! 兰! 竺! 竺兰竺竺竺兰j 对防火墙的钩子数组的初始化 图3 一l 网络初始化第一部分( 缓存及上层模块初始化) 3 2 2i n e t i n i t 函数 由于i n e t i n i t 函数体位于初始化调用段中,所以这里先介绍一下初始化 调用段。对于内核映象而言,在初始化阶段有两个重要的段:初始化代码段 ( t e x t i n i t ) 和初始化调用段( i n i t c a l l i n i t ) 。凡是函数名前有i n i t 限 定词的,在初始化代码段中都有一个指向其函数体的指针,而其函数体就放在 初始化调用段中。这些代码所占的内存在初始化之后将被回收以备它用。从下 面的代码可以看出在初始化代码段的函数指针所指向的函数都将被执行。 s t a t i cv o i d i n i td o i n i t c a l l s ( v o i d ) c a l l d of ( * o a l l ) ( ) c a t l + 十: l i n 丝握侄丕统圆鳖盐越拢的遮让与塞强班窥 i n e ti n i t 函数指针就存在于初始化代码段中,它完成i p v 4 协议栈的初始 化工作。下面具体描述该函数完成的初始化工作。 首先,调用s o c k r e g i s t e r 函数将p f i n e t 协议族( 也就是i p v 4 ) 注册到 内核中有一个全局链表,其链表头为i n e t p r o t o c o l b a s e ,该链表上的所 有节点都是i n e t p r o t o c o l 结构,其中主要包含了需要从i p 协议层接收数据的 上层协议的接收处理函数的地址指针,从第二章我们可以知道,这样的协议有 四个,分别为t c p 、u d p 、i c m p 、i g m p ,它们都有相应的i n e t p r o t o c o l 结构 并且被静态地链接在内核中。为了快速地找到这些协议,i n e t i n i t 函数将调 用i n e t a d d p r o t o c o l 函数把这几个关于协议处理的数据结构加入 in e t p r o t o s 全局哈希结构数组。 内核中有一个静态数组i n e t s w a r r a y ,数组中的元素皆是i n e t p r o t o s w 结构类型的,此结构反映了服务类型和具体的协议之间的映射关系,比如有连 接的服务映射到t c p 协议,无连接的服务映射到u d p 协议,而原始服务类型映 射到i p 协议。另外,系统还有一个i n e t s w 数组,其中每个元素都是一个双 向链表的链表头,数组的下标值就是服务类型编号。i n e t i n i t 函数将调用函 数i n e t r e g i s t e r p r o t o s w 把静态数组i n e t s w _ a r r a y 中相同服务类型的 i n e t p r o t o s w 结构注艘到i n e t s w 数组的相应链表中。 函数a r p i n i t 完成a r p 协议模块的初始化,先是将a r p 类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年八年级物理下册 第十章 浮力 第1节 浮力说课稿 (新版)新人教版
- 一年级品德与生活上册 冬天的活动说课稿 首师大版
- 2025购房合同模板
- 2025合同模板软件开发合同(国际)范本
- 电力系统管理制度
- 2025年的耕地承包合同书样本
- 锚网支护工考试题及答案
- 护理自考考试题及答案
- 2025年低空经济产业政策实施效果评估体系设计报告
- 信息化2.0背景下小学语文阅读教学“瘦身”与“增效”策略研究
- 医院纪检干部培训课件
- 智能制造+工业机器人行业白皮书方案2025年市场前景展望
- 化妆品安全管理培训资料课件
- 药品监管知识培训课件
- 2025党校中青班入学考试试题及答案
- 通信安全生产考题及参考答案
- 租赁储罐管理办法
- 《Access数据库》课程标准
- 宁夏交通投资集团有限公司招聘笔试题库2025
- 岗位评估管理暂行办法
- 4s店市场管理制度
评论
0/150
提交评论