(计算机科学与技术专业论文)mpls+oam技术研究及其实现.pdf_第1页
(计算机科学与技术专业论文)mpls+oam技术研究及其实现.pdf_第2页
(计算机科学与技术专业论文)mpls+oam技术研究及其实现.pdf_第3页
(计算机科学与技术专业论文)mpls+oam技术研究及其实现.pdf_第4页
(计算机科学与技术专业论文)mpls+oam技术研究及其实现.pdf_第5页
已阅读5页,还剩61页未读 继续免费阅读

(计算机科学与技术专业论文)mpls+oam技术研究及其实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京邮电大学硕士生毕业论文 m p l s0 a m 技术研究及其平台实现 摘要 在和平时期,固定网络的故障率被控制在极低的水平,传统路由 协议的网络状态检测机制完全能够满足一般运营维护的要求。但在战 时、大规模自然灾害等极端环境下,网络结构将处在动态变化之中, 组网技术面临严峻挑战,必须解决两个方面的基本问题:第一,如何 准确、及时地获取网络状态信息;第二,如何处理这些信息、快速决 策。其中,灵敏、高效的网络状态信息检测机制和分发机制是解决第 一个问题的重要前提。本文的重点,在于对m p l so a m 技术进行研 究和分析,通过实现其中的基本功能,提供一种介于链路层与网络层 之间的故障检测解决方案,藉此提高网络效能。 o a m 是现代网络管理中的一个重要概念,它能够提高网络可靠 性、简化操作、降低网络运行成本,在提供保障服务质量的网络中, o a m 功能尤为重要。m p l s 故障检测机制用于对m p l s 网络故障进 行诊断和定位,是实现m p l so a m 、提高网络的可用性以及保障用 户服务质量的重要前提和基础。 本文的主要贡献在于,通过对m p l so a m 标准规范的深入分析, 在l i n u x 平台下实现了m p l s 基本故障检测工具m p l sl s pp i n g ,并 解决了其中的关键问题即m p l ss o c k e t 的设计与实现,完成了快 速、高效网络故障检测技术研发的前期基础性工作。论文首先介绍了 m p l s 技术及m p l so a m 的定义及i t u 和i e t f 的m p l so a m 研究 现状,接着提出了m p l so a m 的实现方案,给出了m p l s 基本故障 检测工具m p l sl s pp i n g 的各个功能模块的详细设计方案。并提出了 m p l ss o c k e t 的实现方案,论文的最后描述了m p l sl s pp i n g 的平 台测试方案。 关键词:多协议标记交换运行管理和维护标记交换路径 链路状态检测m p l ss o c k e t 北京邮电大学硕上生毕业论文 r e s e a r c ho nn n t i p r o t o c o ll a b e l s 丌i c h i n gf a u i jd e t e c t i o nm e c h a n i s ma n d i m p l e m e 1 :芦汀i o n a bs t r a c t i np e a c e f u lt i m e s ,t h ef i x e dn e t w o r kf a i l u r ew i l lb ec o n t r o l l e da ta v e r yl o wl e v e l t h en e t w o r ks t a t ed e t e c t i o nm e c h a n i s mo ft r a d i t i o n a l n e t w o r kr o u t i n gp r o t o c o lc a l lc o m p l e t e l ym e e tt h e r e q u i r e m e n t s o f n e t w o r ko p e r a t i o na n dm a i n t e n a n c e b t i ti nw a r t i m ee n v i r o n m e n t ,t h e e v e r - c h a n g i n gb a t t l e f i e l de n v i r o n m e n t ,t h en e t w o r ks t r u c t u r ew i l lc h a n g e d y n a m i c l ya n dt h en e t w o r kt e c h n o l o g yi sf a c i n gs e v e r ec h a l l e n g e s w e m u s ts o l v et w ob a s i cp r o b l e m s f i r s t ,h o wa c c e s st os t a t en e t w o r k i n f o r m a t i o n a c c u r a t e l ya n dt i m e l y s e c o n d l y , h o wh a n d l es u c h i n f o r m a t i o nr a p i d l y as e n s i t i v ea n de 伍c i e n td e t e c t i o na n dn e t w o r ks t a t u s i n f o r m a t i o nd i s t r i b u t i o nm e c h a n i s mi sa ni m p o r t a n tp r e r e q u i s i t et os o l v e t h ef i r s tp r o b l e m t h ef o c u so ft h i sp a p e ri so nm p l so a m t e c h n o l o g y r e s e a r c ha n da n a l y s i st oa c h i e v et h eb a s i cf u n c t i o n sa n dp r o v i d eaf a u l t d e t e c t i o ns o l u t i o nb e t w e e nt h en e t w o r kl a y e ra n dd a t a l i n kl a y e rt o i m p r o v et h ee f f i c i e n c yo ft h en e t w o r k o a mi si m p o r t a n ti nm o d e mn e t w o r km a n a g e m e n t ,w h i c hc a n i m p r o v en e t w o r kr e l i a b i l i t y , s i m p l i f yo p e r a t i o n s a n dl o w e rn e t w o r k o p e r a t i n gc o s t s m p l sn e t w o r kf a u l td e t e c t i o nm e c h a n i s m sa st h eb a s i c c o n t e n t so fm p l so a m h a v et h ea b i l i t i e so ft h em p l sn e t w o r kf a u l t d i a g n o s i sa n dl o c a l i z a t i o n i t sp u r p o s ei st oe n h a n c en e t w o r ka v a i l a b i l i t y a n dq u a l i t yo fs e r v i c et oc u s t o m e r s t h em a i nc o n t r i b u t i o no ft h i sp a p e rl i e si nt h ef a c tt h a t ,t h r o u g h i n d e p t ha n a l y s i so fm p l so a ms t a n d a r d s ,w ea c h i e v eab a s i ct o o lf o r f a u l td e t e c t i o no f 口l sl s pp i n go nl i n u xp l a t f o r ma n dc o m p l e t et h e p r e f o u n d a t i o nd e v e l o p m e n tw o r ko faf a s ta n de 衔c i e n tn e t w o r kf a u l t 第页 北京邮电大学硕上生毕业论文 d e t e c t i o nt e c h n o l o g y f i r s t ,t h ep a p e ri n t r o d u c e st h ed e f i n i t i o no fi t u t a n di e t fo nm p l so a m t h e n ,t h ep a p e ra n a l y s e st h ei m p l e m e n t i o no f m p l sb a s e do nt h el i n u xk e r n e la n dd i s c r i b e st h ep r o c e s so fa l lm o d u l e s o nt h i sb a s e ,t h ep a p e rg i v e st h eb l u ep r i n to fm p l sl s pp i n ga n d d e t a i l e dd i s c r i p i t o no fe a c hm o d u l e a n dt h ei m p l e m e n t a t i o no fm p l s s o c k e tt h et e s t i n gp l a t f o r ma n dp r o c e s so fm p l sl s pp i n gi si nt h e e n d k e yw o r d s :m p l so a ml s pf a u l td e t e c l :i o nm p l ss o c k 第v 页 北京邮电大学硕士生毕业论文 独创性( 或创新性) 声明 本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他 教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任 何贡献均已在论文中作了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名: 起刍革 日期:旦猡够 关于论文使用授权的说明 本人完全了解北京邮电大学有关保留和使用学位论文的规定,即:研究生在 校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保留并向国 家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借阅;学校 可以公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段 保存、汇编学位论文。 本学位论文不属于保密范围,适用本授权书。 本人签名: 导师签名: 第1 i 页 日期:q 壁:丝 日期: 旦筮:三二鉴 北京邮电大学硕士生毕业论文 第一章绪论 1 1 课题研究的背景和研究意义 o a m 功能在公众电信网中十分重要,它可以简化网络操作,检验网络性能 和降低网络运行成本。在提供保障服务质量的网络中,o a m 功能尤为重要。传 统的s d h s o n e t 和a t m 中都定义了相应的o a m 功能,m p l s 作为可扩展的 下一代网络的关键承载技术,提供具有q o s 保障的多业务能力,因此m p l s 网 络迫切需要具备o a m 能力。m p l so a m 技术目前还处于初始的发展阶段,只 形成了少量建议、标准和一些草案。i t u t 在建议y 1 7 0 即 么 接忉发送k刮触发送i 具体解释如下: 图4 1l s pp i n g 模型图 第1 6 页 北京邮电火学硕士生毕业论文 p i n g 的用户态程序,当用户态程序发包时,进行p i n g 包内容的填充,携带 l s p 的k e y 值或目的i p 地址,创建s o c km p l s 类型的s o c k e t 并发包。当p i n g 的用户态程序收包时使用r e c v f r o m 函数从对应s o c k 的接收队列中读取出数据, 并进行解析处理。 s o c k e t 接1 3 发包时调用s o c k e t 对应的发送函数m p l ss e n d m s 9 0 ,该函数可根 据k e y 值去找到n h l f e ,然后转入o a m 处理。收包时调用s o c k e t 对应的收包函 数m p l sr e c v m s g ( ) 函数,把收到的包交给用户态处理。s o c k e t 在l s pp i n g 的实 现中起着承上启下的关键作用,本文将在后面章节中给出这一问题的具体实现。 o a m 模块判断包的类型,如果为应答包,则调用m p l sl o c a ld e l i v e rf i n i s h 向上递交,将包填入接收队列。调用的函数为m p l sv 4i n p u t 。解析出包的类型, 如果是请求包,将源地址作为目的地址,查路由表,以确定对应的n h l f e ,再调 用t o p i ss k ba l l o ta n ds e n d 函数生成应答包去响应。 4 2p i n g 用户态程序模块 4 2 1 流程图 用户态模块流程图如图禾2 所示。 4 2 2 功能描述 图4 - 2p i n g 用户程序流程图 用l s pp i n gp i n g 对端主机,并且以唯一标识一条l s p 路径的关键字k e y 值作 为l s pp i n g 的参数,如果这条l s p 通信状况良好,则会返回s e q ,t t l ,以及r t t 等 第1 7 页 北京邮电人学硕士生毕业论文 值,根据这些值我们能看出链路的状况,如果链路出现故障,则会返回链路不通 的信息。 4 2 3 相关函数 r c a d l o o p ( v o i d ) :该函数中首先要创建一个m p l s 套接字,然后将套接口缓冲区 设为设为6 1 4 4 0 ( 6 0 1 0 2 4 ) 字节,这要比缺省值大很多。这样做主要是主要是 为了减少接收缓冲区溢出的可能行,因为如果无意中p i n g 了一个i p v 4 广播地址, 将引发大量的应答。然后调用信号处理程序发送第一个分组,并调度下一次 s i g a l r m 为一秒之后【1 0 】。程序的主循环是一个无限接收循环,它读取返回给 套接字的每一个分组,调用g e t t i m e o f d a y 来记录分组到达的时间,并调用相应的 协议处理函数p r o cv 4 来处理。 p r o cy a ( c h a r 幸p t r , s s i z etl e n , s t r u c tt i m e v a l * t v r e c v ) :协议处理函数,处理o a l r i 消息,通过将消息发出时间与当前时间相减,我们得出r t t 。r t t 从微秒转换 成毫秒并输出,同时输出的还有序列号和收到的1 t l 。 s i ga l r m ( m ts i g n o ) :信号处理函数,调用信号处理程序发送第一个分组,并调 度下一次s i g a l r m 为一秒之后。 s e n dy 4 ( v o i d ) :构造i c m p v 4 消息,用进程d 设置标识字段用全局变量1 1 s 饥t 设置序列号,并为下一分组将n s e n t 增l 。然后计算校验和,并将校验和结果存 入相应字段,然后发送数据报。 4 3m p l ss o c k e t 模块 从前面部分的分析知道,要实现l s pp i n g 首先要解决的问题就是m p l s s o c k e t 的问题,因为为了实现l s pp i n g ,需要从用户态到内核态通信的接口, 通过这一接口可以实现用户态到内核态m p l s 协议层收发数据包。而l i n u x 内核 中现有的s o c k e t 通信方式共支持三种类型的套接字,而这三种套接字无法满足 l s pp i n g 的需求,所以就需要定义新的套接字类型,称之为m p l ss o c k e t 。为 了在内核中成功添加这一新的套接字类型,本文首先分析了l i n u x 内核中原有的 s o c k e t 的实现机制,然后在此机制的基础上进行m p l ss o c k e t 的实现。首先简 单了解一下s o c k e t 。 第1 8 页 北京邮电大学硕士生毕业论文 4 3 1s o c k e t 简介 本部分内容主要介绍s o c k e t 数据结构,下面具体来看s o c k e t 这一数据结构。 4 3 1 1s o c k e t 套接字对应的数据结构是s o c k e t ,定义于i n c l u d e l i n u x n e t h 中。 创建一个套接字时实际上就是创建了一个s o c k e t ,创建s o c k e t 时首先要根据 全局变量s t a t i cs t r u c tv f s m o u n t * s o c km n t 新申请一个s t r u c ti n o d e i n o d e ,然后由 下面的结构体s o c k e ta l l o t ,我们可以看到i n o d e 和s o c k e t 是一一对应的,我们由 得到的i n o d e ,就可以得到我们需要的s o c k e t 。然后,我们会给我们刚申请的s o c k e t 获取一个未使用的f d 和f i l e 。用户态使用s o c k e t ( ) 创建s o c k e t 时,返回的就是 此f d 。 s t r u c ts o c k e t a l l o t s t r u c ts o c k e ts o c k e t : s t r u e ti n o d ev f s _ i n o d e ; 在u s e rs p a c e ,通过s o c k e t 0 创建的s o c k e tf d ,即上文提到的f d ,在内核中 对应的就是一个s t r u c ts o c k e t 。s o c k e t 具体定义如下: s t m c ts o c k e t s o c k e t s t a t es t a t e ; u n s i g n e dl o n g f l a g s ; s t r u c tp r o t o _ o p s o p s ; s t r u c tf a s y n c _ s t r u c t f a s y n c _ l i s t ; s t r u c tf i l e * f i l e ; s t r u c ts o c k s k ; w a i t _ q u e u e _ h e a d _ tw a i t ; s h o r t t y p e ; ) ; 下面来看s o c k e t 的各个成员的具体含义。 ( 1 ) s t a t e s t a t e 用于表示s o c k e t 所处的状态,是一个枚举变量,其类型定义如下: t y p e d e fe n u m s sf r e e = 0 ,该s o c k e t 还未分配 第1 9 页 北京邮电人学硕士生毕业论文 s s 二u n c o n n e c t e d , s s _ c o n n e c t i n g 5 l s s _ c o n n e c t e d , s s d i s c o n n e c t i n g s o c k e t _ s t a t e ; 未连向任何s o c k e t 正在连接过程中 已连向一个s o c k e t 正在断开连接的过程中 该成员表示s o c k e t 的状态,是否已经建立连接。 ( 2 ) 僦缪 f l a g s 是一组标志位。 ( 3 ) t y p e t y p e 是s o c k e t 的类型,对应的取值如下: e n u ms o c kt y p e s o c kd g r a m = 1 凡j d p 套接字 s o c ks t r e a m = 2 , t c p 套接字 s o c kr a w= 3 r a w 套接字 s o c k r d m= 4 , s o c k _ s e q p a c k e t = 5 , s o c km p l s = 6 m p l s 套接字 s o c k p a c k e t = 10 , ) ; 其中的s o c km p l s 是我们专门为m p l ss o c k e t 添加的m p l ss o c k e t a - i - - t y p e 但o s k 是网络层对于s o c k e t 的表示,结构体s t r u c ts o c k 比较庞大,后面会单独介 绍。 s t z u c ts o c k e t 的o p s 域指向一个s t r u c tp r o t o o p s 结构,s t r u c tp r o t o o p s 定 义于i n c l u d e l i n u x n e t h 中,它是s o c k e t 层提供给上层的接口,这个结构中,都 是b s ds o c k e ta p i 的具体实现的函数指针。 s t r u c tp r o t o _ o p s i n t f a m i l y ;, s t r u c tm o d u l e o w n e r , i n t ( * r e l e a s e )( s t r u e ts o c k e t s o c k ) ;释放函数 h a t ( * b i n d )( s t r u c ts o c k e t s o c l 【 s t r u e ts o e k a d d r m y a d d r , h a ts o c k a d d r _ l e n ) ;绑定函数 h a t ( * c o n n e c t ) ( s t r e e ts o c k e t 宰s o c k ,s t m c ts o e k a d d r 幸v a d d r , h a ts o c k a d d r _ l e n , i n tf l a g s ) ;连接函数 第2 0 页 北京邮电大学硕士生毕业论文 i n t ( * s o c k e t p a i r ) ( s t r u e ts o c k e t 宰s o c kl ,s t r u c ts o c k e t 幸s o c k 2 ) ; i n t ( * a c c e p t ) ( s t r u c ts o c k e t s o c k , s t r u c ts o c k e t n e w c k ,i n tf l a g s ) ;接收函数 i n t ( * g e t n a m e ) ( s t r u e ts o c k e t s o c l s t r u e ts o c k a d d r 毒a d d r , i n t s o c k a d d r _ l e n , i n tp e e r ) ; u n s i g n e di n t ( * p o l l ) ( s t r u c tf i l e 幸f i l e ,s t r u c ts o c k e t s o c k , s t r u c tp o l l _ t a b l e _ s t r e e t w a i t ) ; 砬 ( i o c t l )( s t r u e ts o c k e t 幸s o c k , u n s i g n e di n te m d , u n s i g n e dl o n ga r g ) ; i n t ( * l i s t e n )( s t r u c ts o c k e t * s o c k , i n tl e n ) ;监听函数 h a t ( * s h u t d o w n ) ( s 缸u e ts o c k e t s o c k , i n tf l a g s ) ; i n t ( * s e t s o c k o p t ) ( s t r u c ts o c k e t 幸s o c k , i n tl e v e l , i n to p t n a m e , c h a r u s e r * o p t v a l ,i n to p t l e n ) ;设置选项函数 i n t ( * g e t s o c k o p t ) ( s t r u e ts o c k e t s o c li n tl e v e l , h a to p t n a m e , c h a r u s e r o p t v a l ,i n t u s e r o p f l e n ) ; h a t ( * s e n d m s g ) ( s t r u e tk i o c b i o c b ,s t r u c ts o c k e t s o c k , s t r u c tm s g h d r l i l ,s i z e _ tt o t a l _ l e n ) ;发送数据包函数 i n t ( * r e e v m s g ) ( s t r u e tk i o c b 宰i o c b ,s l r u e ts o c k e t s o c k , s t r u c tm s d r 弛s i z e _ tt o t a l _ l e n , i n tf l a g s ) ;接收数据包函数 i n t ( * m m a p ) ( s t r u c tf i l e 木f i l e ,s t r u c ts o c k e t 奉s o c k , s t r u e tv m a r e a s t r u e t v r n a ) ; s s i z e t ( * s e n d p a g e ) ( s t r u e ts o c k e t s o c k , s t r u e tp a g e p a g e , i n to f f s e t , s i z e ts i z e ,i n tf l a g s ) ; ) ; 一个s o c k e ta p i 通过系统调用进入内核后,首先由s o c k e t 层处理。s o c k e t 层找到对应的s t r u c ts o c k e t ,通过它找到s t r u c tp r o t o o p s ,然后由它所指向的函数 进行进一步处理。 以s e n d m s g o 这个函数为例,从u s e rs p a c e 通过系统调用进入k e r n e l 后,由 s y s s e n d m s g o 、s o c k _ _ s e n d m s g o 依次处理,然后交给s t r u c tp r o t o _ o p s 的s e n d m s g ( ) 处理。 4 3 1 2s o c k s t r u e ts o c k 定义于i n c l u d e n e t s o c k h 中,用于 n e t 和i n e t 6 协议族。 应用层的s o c k e tf d ,在s o c k e t 层对应的是s t r u c ts o c k e t 。s t r u e ts o c k e t 很 第2 l 页 北京邮电人学硕上生毕业论文 简单,并不做什么具体的事情,它通过s k 域与一个s t r u c ts o c k 关联。因此, 对应用层的一个s o c k e tf d 来说,在内核中对应的是一个s t r u c ts o c k e t 加上一个 s t r u c ts o c k 结构,s t r u e ts o c k e t 负责s o c k e t 层的处理,s t r u e ts o c k 负责传输层、 网络层的处理。具体来看s o c k 各个字段的含义: ( 1 ) s t r u c ts k b u f f h e a d s k r e c e i v e _ q u e u e s kr e c e i v e,接收队列,s k 接收的 都放到这个队列。_ q u e u e s i cs k b ( 2 ) s t r u e ts k b u f f h e a d s k _ w r i t e q u e u e s i cw r i t e ,发送队列,s k 发送的都放到这个队列。q u e u e s ks k b ( 3 ) s t r u e tp r o t o s k _ p r o t s kp r o t ,指向s t r u c tp r o t o 的s k 函数指针,s k 的各种操作函数指针都在这个变 量中,创建s k 后要给这个指针赋值。 s t n l e ts o c k 通过s kp r o t 域指向s t r u c tp r o t o 结构。 s t r u e tp r o t o 是传输层提供给s o c k e t 层的接口。它的成员也都是b s ds o c k e t a p i 相关的函数指针。 应用层的s o c k e ta p i 调用进入内核空间后,首先由s o c k e t 层的s t r u c t p r o t oo p s 结构做处理,此后,对于i n e t 和i n e t 6 协议族来说,进一步由 s t r u e tp r o t o 的相应函数做处理。 对于每个i n e t 协议,它都有一个该类型的结构,其中包含着该协议的函数指 针,分别是t e p _ p r o t ,u d p _ _ p r o t , r a w _ p r o t ,还有为m p l s 定义的m p l s _ p r o t , 仓j 建s o c k e t 的时候,会给相应的s o c k e t 的s k 匹配s kp r o t 函数指针,即上文提到的 t e p p r o t ,u d p _ _ p r o t , r a w _ p r o t , m p l s _ p r o t 。 还是以s e u d m s g ( ) 为例,数据在s o c k e t 层由s t r u c tp r o t o _ o p s 的s e n d m s 9 0 处理完毕之后,会由s t r u c tp r o t o 的s e n d m s g ( ) 进行传输层的处理。 4 3 2s o c k e t 实现 分析完了l i n u xs o c k e t 的具体含义,再来以u d ps o c k e t 为例来具体看看一种 协议的s o c k e t 在l i n u x 内核中到底是如何实现的,用到了那些接e l 函数。s o c k e t 实现模型如图4 _ 3 所示。 第2 2 页 北京邮电人学硕士生毕业论文 图4 - 3s o c k e t 实现模型 下面针对模型中提到的各个模块具体介绍: 4 3 2 1 创建 创建模块主要实现的是 s o c k e t的创建,当调用 s o c k e t ( a f , ,( 参数的具体含义后面会讲) i n e t , s o c g d g r a mi p p r o t oi c m p ) 系统能正确的返回给我们一个创建成功的s o c k e tf d ,而且此s o c k e tf d 的a p i 函 数是遵照u d p 协议的。 下面来看一下l i n u x 已经实现的s o c k e t 的创建过程,例如:u d ps o c k e t 的创 建。具体的函数调用流程图如图“所示。 第2 3 页 北京邮电大学硕- 上生毕业论文 图4 - 4u d ps o c k e t 创建流程图 下面来具体分析s o c k e t 创建过程: 创建一个s o c k e t ,用户态会调用s o c k e t 创建函数,i n ts o c k e t ( i n td o m a i n , i n t t y p e ,i n tp r o t o c 0 1 ) ,它在内核中对应的是s y s _ s o c k e t ( i n tf a m i l y ,i n tt y p e ,i n tp r o t o c 0 1 ) 这两个函数都有3 个参数,而且这3 个参数是一一对应的。先来解释一下这3 个参数的含义,三个参数中,d o m a i n 和f a m i l y 域指定了一个套接字协议族,它 会影响到内核具体选择使用哪一个模块。比如,u d ps o c k e t 的创建过程中,使用 a fi n e t ( 2 ) 内核就会建立因特网协议域。而t y p e 表示域中的套接字类型,对应 i n e t s w 数组的一项,在a fi n e t 域中,现在有效的取值是s o c ks t r e a m , s o c kd g r a m 和s o c kr a w ,如果要增加其他的协议【1 2 】,这个有效的取值可 以扩充。最后一个参数p r o t o c o l ,指定具体的协议类型。 s o c kc r e a t e :s o c k e t 创建函数,检查参数的合法性,并根据f a m i l y 的值也 就是参数中的f a m i l y 以及n e t _ f a m i l i e s f a m i l y - c r e a t e ( s o c k , p r o t o c 0 1 ) ,来匹配 c r e a t e 函数,进一步完成s o c k e t 创建工作。对于f a m i l y = a fi n e t 来说就是函数 调用之前已经注册的i n e t的函数指针,也就是 数。f a m i l y o p s c r e a t ei n e tc r e a t e ( ) i 函 i n e tc r e a t e :进一步完成s o c k e t 创建过程,匹配协议操作集,具体地说就是该 函数通过套接字类型s o c k e t - t y p e 找到i n e t s w s o c kd g r a m ,并从该链表( 其 实只有一项) 的头部开始匹配网络层附属协议号,也就是从数组i n e t s w 中匹array 配与t y p e 值相对应的项,对于s o c kd g r a m 类型,就是数组中的第2 项。同 第2 4 页 北京邮电大学硕士生毕业论文 时,还需要检查权限,i n e tc r e a t e 函数进一步完善了s t r u c ts o c k e t 的内容。 接下来一个重要的工作,就是为s o c k e t 分配一个s o c k ,并初始化它。 每一个s o c k e t 套接字,都有一个对应的s t r u c ts o c k e t 结构来描述( 内核中一般 使用名称为s o c k ) ,但是同时又一个s t r u c ts o c k 结构( 内核中一般使用名称为s k ) 。 两者之间是一一对应的关系。在后面的s o c ki n i td a t a 函数中,可以看到 s k - s k _ s o c k e t = s o c k ; s o c k - s k = s k ; 分配完成s k 后,另一个重要的功能就是初始化它,s k 的成员相当复杂,其 主要的初始化工作是在函数s o c ki n i td a t a o q 丁完成的: 剩余的就是初始化其它成员变量了。 o k ,i n e tc r e a t e ( ) 运行完,一个s o c k e t 套接字基本上就创建完毕了,剩下的 就是与文件系统挂钩,回到最初的s y s函数中来,它在调用完socketr0 s o c kc r e a t e ( ) 后,紧接着调用s o c km a pf d ( ) 函数: 写到这里,可以为的创建下socket一个小结了: ( 1 ) 所谓创建s o c k e t ,对内核而言,最重要的工作就是分配s o c k 与s k ; ( 2 ) s o c k 面向上层系统调用,主要是与文件系统交互。通过进程的c u r r e n t 指针的f i l e s ,结合创建s o c k e t 时返回的文件描符述,可以找到内核中对应的s t r u c t f i l e ,再根据f i l e 的fd e n t r y 可以找到对应的目录项,而目录项s t r u c td e n t r y 中, 有di n o d e 指针,指向与s o c k 封装在一起的i n o d e 。s o c k 又与s k 指针互指,一一 对应。在这串结构中,有两个重要的函数集指针,一个是文件系统s t r u c tf i l e 中 的f0 p 指针,它指向了,对应的用户态调用的r e a d ,w r i t e 等操调用,但不支持 o p e n ,另一个是s t r u c ts o c k e t 结构,即s o c k 的o p s 指针,它在i n e tc r e a t e 0 中被置 为s o c k - o p s = a n s w 即- o p s ;指向具体协议类型的o p s :例如,i n e ts t r e a mo p s 、 i n e t 或者是等等。它用来支持上层的 的其它dgramo p s i n e ts o c k r a wo p ss o c k e t a p i 调用。 ( 3 ) s k 面向内核协议栈,协议栈与它的接口数据结构是s t r u c t p r o t o n a m e ,该结构中包含了一般性的结构和自己的私有成员, 的s第ock一个成员就是一个sk指针,而i分net配的sk,实际上空间大小是struetinets o c k s t r u c t p r o t o n a m e 这样,在一个套接字上作一个操作,比如说s e n d t o ,会先调用s t r u c t s o c k e t - o p s 一 s e n d m s 9 0 ,即i n e t _ s e n d m s 9 0 函数,该函数会调用s t r u c t s o c k e t - s k - s k _ p r o t - s e n d m s g 即u d p _ s e n d m s 9 0 完成实际的发送工作。 第2 5 页 北京邮电大学硕士生毕业论文 4 322 发送 创建了u d ps o c k e t 的后,下面来看看发送消息的过程。 调用s o c k e t ( a f1 n e t , s o c ku d p , i p p r o t o ! c m p ) 就会返回一个s o c k e t d 。 我们要发送数据就可以调用s e n d t o ( i n tf d , c o n s tv o i d * m s g , i n ti o n , u n s i g n e di n t f l a g s ,c o n s ts t r u c ts o c k a d d r t o ,i n tt o l e n ) 。参数f d 为已建好连线的s o c k e t , 如果利 用u d p 协议则不需经过连线操作。参数m s g 指向欲连线的数据内容,参数f l a g s 一般设0 。s c n d t o o i 函数对应s y s数。sendt00i函 s y s 数会把从用户态传送来的消息和目的地址信息,统一封装在 scndt中oo,i函structm s g h d r然后调用发送函数s o c ks e n d m s g o 发送数据包。 _ s o c k _ s e n d m s 9 0 函数中s o c k - o p s 一 s e n d m s g ( i o c b ,s o c k , m s g , s i z e ) ;指向 u d p _ s 朗d m s g ( ) 。 u d p 数中,把封装在中的目的地址信息取出,作为查找 路由表的依据,然后查找路由表,最后调用u d p _ p u s h _ p e n d i n g _ f r a m e s 0 。 u d pp l 珞bp 锄d i n g 翻m 铭o 函数中创建u d p 头,然后交给i p 转发。 发送函数流程图如图4 _ 5 所示。 s e a d t o o s y ss e n d t o ( ) j r s o c k s e n d 瞳s g 上 u d p _ 一n c h i s g 上 u d p _ p u s hp e n d i n g _ f r a m e s 图4 - 5 发送函数流程图 第2 6 页 北京邮电大学硕士生毕业论文 4 3 2 3 接收 前面了解过s k 有一个接收队列,用于存储接收到的s k b ,对于s o c k e t 层面上 来讲,数据接收,就是要把数据从这个队列中取出来,交给上层用户态。这里涉 及到出队操作,但是,要了解如何出队,就得了解传输层协议如何入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论