(通信与信息系统专业论文)pimsm组播协议的软件设计与实现.pdf_第1页
(通信与信息系统专业论文)pimsm组播协议的软件设计与实现.pdf_第2页
(通信与信息系统专业论文)pimsm组播协议的软件设计与实现.pdf_第3页
(通信与信息系统专业论文)pimsm组播协议的软件设计与实现.pdf_第4页
(通信与信息系统专业论文)pimsm组播协议的软件设计与实现.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

(通信与信息系统专业论文)pimsm组播协议的软件设计与实现.pdf.pdf 免费下载

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

文档简介

摘要 随着p t v 与网络会议等基于d 网络的业务的广泛应用,这种在同一时刻进行一 对多数据传输的业务方式,若采取单播转发的方式会在用户大量激增的情况下对主干 带宽带来严重的负荷,因此国际上提出了组播协议,以组播数据转发代替单播数据转 发,尽量保证在同一方向上线路上只传送一份数据拷贝,以缓解各种业务增长而带来 的带宽压力。 本文主要研究组播路由协议p i m - s m 。匝t f 在r f c 2 3 6 2 中对该协议进行了完整的 定义,而基本思想是通过建立属性的组播转发路径达到节约网络带宽的目的,在进行 协议分解的基础上,文中建立了组播p i m s m 的o o a 模型,实现了底层函数接口并 在嵌入式v x w o r k s 平台上进行了协议的具体实现,包括:( 1 ) 采用面向对象的设计方 法提供更容易理解的切入点;( 2 ) 实现中引入泛型以提高代码重用率;( 3 ) 保持模块问 低耦合性使得代码具有较高可维护性:( 4 ) 实现一个初始版本p i m - s m 协议的软件模型, 并可后续完善;( 5 ) 完成大部分p i m 8 1 1 1 协议定义的逻辑功能包括转发组播数据功能。 论文包括以下几个部分:第一章介绍组播由来,并描述p i m s m 协议机制原理; 第二章以o o a 设计出p i m s i l l 的软件架构;第三章从架构模型出发,实现底层实现 库、边界类以及p i m 8 m 类,最终搭建一个代码框架;第四章设计了p i m 接口类以及 接口容器类,并实现邻居机制;第五章设计了p i m 组播组类以及组容器类,实现了组 播路由的维护管理机制,并测试组播路由和组播数据转发功能;第六章对软件模型细 节进行了完善;第七章为总结与展望并以此结束全文。 本文的创新点在于以下几点: ( 1 ) 在嵌入式通信软件的设计中借用o o a 的对过程化封装思想来提高软件设计 的可理解性,保持模块间的松藕和性。 ( 2 ) 在实现中引入泛型概念提高代码的重用率。 ( 3 ) 周期性j p 消息生成设计中采用特殊的中间信息维护与刷新机制。 关键词:p i m s m 、面向对象、泛型、r p 、r p t 、s p t a b s t r a c t w i t ht h ee x t e n s i v eu s eo fi p t va n do t h e ri p b a s e da p p l i c a t i o n s ,w h i c hc o n d u c tp o i n t - t o m u l t i p o i n t ( p 2 m p ) d a t at r a n s m i s s i o na tt h es a m et i m e ,t h e t r a d i t i o n a lu n i c a s tf o r w a r d i n g w i l lb r i n gs e v e r eb u r d e nt ot h eb a c k b o n eb a n d w i d t hw i t ht h ed r a s t i ci n c r e a s eo fu s e r s t h e r e f o r e ,i n t e r n a t i o n a lr e s e a r c ho r g a n i z a t i o n sh a v ep u tf o r w a r dm u l t i c a s tp r o t o c o l s ,w h i c h f o r w a r dt h ed a t ai np 2 m pw a yi n s t e a do fu n i c a s t t h em u l t i c a s tp r o t o c o lw i l lg u a r a n t e et h a t o n l yo n ed a t ac o p ye x i s t si na l o n ga n yf o r w a r d i n gp a t h t h i sa r t i c l ew i l ls e l e c tt h em o s t w i d e l yu s e dp i m - s mp r o t o c o la st h er e s e a r c hs u b j e c t t h eg o a lo ft h i sp a p e r :( 1 ) t h eo o at op r o v i d ea ne a s i e rw a yf o ru n d e r s t a n d i n g ;( 2 ) i n t r o d u c i n gt h eg e n e r i cc o d et oi n c r e a s et h er e u s er a t e ;( 3 ) m a i n t a i n i n gal o wc o u p l i n g b e t w e e nm o d u l e so fc o & f o rh i g hm a i n t a i n a b i l i t y ;( 4 ) a c h i e v i n ga ni n i t i a lv e r s i o no fp i m s ms o f t w a r em o d e l ,u p o nw h i c hi m p r o v e m e n t sc o u l db em a d e ;( 5 ) c o m p l e t i n gm o s to ft h e p i m - s m - d e 甑e d1 0 9 i cf u n c t i o n st of o r w a r dm u l t i c a s tp a c k e t s ; t h ef i r s tc h a p t e ro ft h i st h e s i si n t r o d u c e st h eo r i g i no ft h em u l t i c a s t ,a n dg i v ea d e s c r i p t i v ep r e s e n t a t i o nt ot h ep i m s mp r i n c i p l e ;t h es e c o n dc h a p t e rw i l le v e n t u a l l yg e tt h e p i m s ms o f t w a r ea r c h i t e c t u r em o d e lf r o mt h eo b j e c t o r i e n t e dd e s i g n ,a n a l y s i s ;t h et h i r d c h a p t e rw i l li m p l e m e n t st h ep u b l i cl i b r a r y , b o r d e rc l a s s a n dp i m - s mm a i nc l a s si n a c c o r d i n g t ot h ed e s i g no ft h em o d e l ,a n du s e st h e s em o d u l e st ob u i l das o f t w a r e f r a m e w o r kw h i c hc a nb et e s t e da n da d d e df e a t u r e s t h ef o u r t hc h a p t e rd e s i g na n dr e a l i z e t h ep i m s mi n t e r f a c ec l a s sa n di n t e r f a c ec o n l a i n e rc l a s s e s ,a n da d da l lt h e s et ot h es o f t w a r e f r a m e w o r k ,f i n a l l yg i v eat e s tt ot h ep i m - s mn e i g h b o rf u n c t i o n s c h a p t e rvd e s i g n sa n d r e a l i z e st h ep i m - s mg r o u pc l a s sa n dg r o u pc o n t a i n e rc l a s s ,a n da d d sa l lt h e s et o t h e s o f t w a r ef r a m e w o r k ,a n dh a v eat e s ta b o u tt h ep i m s mm u l t i c a s tr o u t e sa n dm u l t i c a s t f o r w a r d i n g c h a p t e rv ii n t r o d u c e ss o m ed e t a i l sa b o u tt h em o d e l c h a p t e r v i is u m m a r i z e s t h i sp a p e ra n dl o o k si n t ot h ef u t u r ef o rp o s s i b l er e s e a r c h k e yw o r d s :p i m s m ,o b j e c t o r i e n t e d ,g e n e r i cc l a s s ,r p ,r p t ,s p t 理。 第1 章p i m s m 组播协议概述 本章将探讨组播的由来以及组播于口网络的意义,并描述p i m - s m 协议的机制原 1 1 组播技术由来 组播的历史可以追溯到传统电视模拟信号广播网络了,机房将数据信号加载在载 波波形上形成模拟型号,通过主干网传输,接收端接收到模拟信号解码形成最终的声 音图像信息。注意到只要主干网上波形信号能量足够,该模拟信号实际可以一直传播 下去,而且主干网上传输的信号实际只有一份,但是接收者却为看电视的千家万户。 这种传输方式是面向链路层的,称之为面向链路的组播方式。 现如今基于p 的网络以成主流,在m 网络中不同终端都通过p 地址来标识, 对于数据的发送采用单播的方式,可以假设一个发送端,若存在多个接收端的话,那 么同一个口数据包可能要被拷贝发送多份,这对于带宽是极大的浪费,为应对该情 况组播协议应运而生,对于同一个方向上的接收端,在主干上只传送一份m 数据包。 这种传输方式为面向p 层的,称之为面向p 的组播方式,这是本文的研究对象。 基于p 的网络存在一些对带宽消耗很大的业务,如将传统电视业务与p 网结合 的i p t v 的视频点播以及英特网上比赛现场直播等,这类业务的共同特征都是在同一 时刻的一对多进行大量数据转发,若采取单播转发数据则会因用户大量增加而造成传 输上瓶颈,而组播技术能在有限带宽条件下有效应对上述业务的用户数量大量激增的 情况,降低该传输瓶颈发生的几率。 p i m s m 是互联网上主要的组播标准协议,下面以r f c 2 3 6 2 定义的p i m - s m 的协 议标准展开各功能点的探讨,并作为后续架构与实现的需求分析。 1 2 组播树r p t 的建立与维护 p i m s m 组播协议本质上是构建并维护个分布式系统,组播数据通过该分布系 统进行传输。根据r f c 2 3 6 2 描述,p i m s m 所构建的分布式系统主体为汇聚点树 t , 如图1 1 所示即为r p t ,其核心为汇聚点r p ,组播数据沿着建立的组播树往下游转 发,在往同一方向的干路上,组播数据只用拷贝一份,该转发过程称之为反转树转发 r p f 。注意,不同的组播组可能拥有不同的r p ,并以该组r p 构建出不同的r p t ,下 面的描述都是对某单个组播组而言。 r p t 的存在是通过域中每个节点所维护的组播路由表来实现的,已经加入到s p t 中的节点至少会有一条奎g 路由条目,可能存在r p 和s g 路由,所有的路由条目都 拥有一个入接口i i f 和一个出接口表o i f - l i s t ,而对于与r p t 相关的g 或者s g r p t 路由条目而言,其入接口指向r p ,出接口表指向下游接收者。这样,组播数据将以 r p 为起点,根据当地节点的s g r p t 或g 的出接口表沿着r p t 往下转发。 h 3 h 2 图1 1r p t 组播树 以图1 1 为例来描述r p t 建立过程,最初由3 台主机h 1 ,h 2 和h 3 向各自相连 的第一跳节点r 1 和r 3 发送i g m p j o i n 通告,r 1 和i 玛上都产生g 路由,同时r 1 和r 3 会继续往r p 方向发* g j o i n 通告,最后r 1 上g 的出接口表为r 1 h 3 和r 1 r 3 , r 3 上的囊g 路由的出接口表则为r 3 - h 1 和r 3 - h 2 。而r p 上也存在g 路由其出接口 表为r p r 1 ,于是因这些路由条目的存在整个r p t 就建立了。若有组播数据从r p 发送,则会根据各地节点的g 路由出接口表最终到达h 1 ,h 2 和h 3 ,实现数据组播 转发的目的。 2 若中途有主机不想再接收主播数据,则发送i g m p 离丌消息到第一跳节点。以图 1 1 中的h 3 为例,h 3 发送i g m pl e a v e 消息到r 1 ,经处理后r 1 的g 条目的出接口 表将只剩下r 1 r 3 ,组播数据将不会再到达h 3 。注意若第一条节点在收到并处理 i g m p 离开消息后其出接口表若为空,则会删除本地的木g 路由条目并触发发向r p 方 向的gl e a v e 消息。 r p t 的维护实际上是r p t 上每个节点所拥有的组播路由的维护,与r p t 相关的 路由条目为木掌r p ,g 和s g r p t ,而路由条目的维护则与j o i n p r u n e 消息相关。以 下将描述与这些路由条目相关的j p 消息发送以及处理过程,该描述也许不同于最终 完整的路由处理过程,因为此处只关注了与r p t 相关的处理。 在皿消息中,j o i n 表示下游的加入请求,p r u n e 表示下游的离开请求,对于j o i n 或者p r u n e 而言,按消息格式的定义,里面还有2 个标志位,r p t 位和w c 位,若r p t 位设置为1 ,则说明该j o i n 或p r u n e 是与r p t 相关的,而w c 位为1 则说明该j o i n 或p r u n e 是对应g 或宰掌i 冲条目的,否则对应的s g 条目,而r p t 位为1 w e 位为0 则对应的为s g r p t 条目。 在r p t 的节点上,g 条目会周期性的朝上游发送j p 消息,若g 条目的出接口 表不为空,则将r p 地址包含在j o i n 中,否则将r p 地址包含在p r u n e 中,而r p t 位 和w c 位都设为1 。一般而言,在点对点网络中若g 条目出接口为空会立即删除或 在秒的周期性检查中删除,所以第2 种情况基本不会发生。而g 条目的建立也会触 发性往上游发送口消息。s g r p t 条目周期性发送j p 消息只会出现在出接口表为空 的时候,将源s 地址包含在p r u n e 中,其r p t 位为1 w c 位为0 。若s g r p t 条目出 接口由空变为非空则会触发性的发送对应幸g 条目的j p 消息,将r p 地址包含在i o i n 中,而r p t 位和w c 位都设为l 。因对s p t 上节点而言一定会存在聿g 条目,而g 条目和宰r p 条目同时存在只处理g 条目,所以此处不考虑木幸r p 条目。 对于节点接收到的j p 消息,只有r p t 位为l 时才与r p t 相关,收到包的接口记 为i 。收到的消息首先要检查其合法性再作后续处理,如校验和是否j 下确,是否从p i m 邻居发送而来等。对于j p 消息中的i o i n ,r p t 位和w c 位都为l 针对宰g 条目,判断 消息中r p 地址与本地知道的r p 地址是否相同,不同放弃处理。然后判断本地宰g 是 否存在,若不存在则创建宰g 条目,最后在木g 的出接口表中查找接口i ,如果不存在 3 则将i 加入至w j * g 的出接口表中。若本地还存在s g r p t ,且i 不在后续的p r u n e 中则 将i 加到s g r p t 出接口表中,如果加后s g r p t 的出接口表和牛g 的出接口表相同 则删除该s g r p t 条目。 对于j p 消息中的p r u n e ,若r p t 位和w c 位都为1 则只对宰g 条目处理,判断消 息中r p 地址与本地知道的r p 地址是否相同,不同放弃处理。查找拳g 条目,不存在 则根据r p 生成g ,再判断i 是否存在于g 的出接口表中,存在则删除该接口。若 r p t 位为l 而w c 位为0 则对s g r p t 处理,查找s o 是否存在,若不存在则创建s g o r p t ,若已存在则判断该s g 的r p t 位是否为l ,为l 则重启s g r p t 路由定时器。 最后将i 从s g 的出接口表中删除。 1 3 $ p t 切换机制 大部分的组播数据转发都是通过r p t 来完成的,但在现实的网络拓扑中某个终 端h o s t 通过r p t 接收数据可能并不是最优选择,如图1 3 所示,若假设拓扑中每 跳的开销为1 ,r 3 距离源s 的开销2 要小于通过r p t 到源s 的开销3 ,于是r 3 可能 寻求直接从源s 接收数据,因此p i m s m 中引入了s p t 切换计数。 当某个与主机相连的最后一跳节点因速率需求或路径原因希望不再从s p t 路径 上获得组播数据包,而是直接与源建立联系,s p t 切换就会发生。s p t 切换是依靠路 由s g 以及与s g r p t 来完成的,其中s g 用于维护切换后的转发路径,s g - r p t 用 于改变r p t ,阻止继续从r p t 接收数据。典型的s p t 切换过程描述如下。 图1 3 中发生s p t 切换前的r p t ,r 2 和r 3 上都存在着g 条目。其中r 2 的g 条目出接口表为r 2 r 3 和r 2 h 2 ,而源s 上存在s g 路由,其出接口表为s r p ,源s 发出的组播数据将从r 2 到达r 3 。 若r 3 上触发了s p t 切换,则r 3 向源s 的方向即r 1 发送s g j o i n 消息,r l 收 到该消息后产生s g 路由,其入接口为s r 1 ,出接口为r 1 - r 3 ,并继续向源s 发送s g j o i n 。源s 收到后在其s g 条目的出接口表中增加出接口s r l ,这样在r 3 与源s 之 间通过沿途产生s g 路由建立一条新的转发路径。同时r 3 还朝r p 方向即r 2 发送s g p r u n e ,在i 也节点产生s g r p t 路由,其出接口表将从原有的木g 路由拷贝并去掉r 2 r 3 ,这样从r p t 上转发的数据到达r 2 后因优先采用s g - r p t 路由将不再往r 3 发送。 4 当s p t 切换完成后,源s 发出的数据将通过r l 到达r 3 。 h l 图1 3s p t 切换图 当发生s p t 切换的节点通往源s 和r p 的出接口相同,则当前节点不发送s g p r u n e ,直到朝源s 的路径上某跳节点通往源s 和r p 的出接1 :3 不同再触发该s gp r u n e 。 因为不同的源s x 在拓扑中会有不同的( s x ,g ) 路由条目,因此不同源s 共存有着良好 的隔离性。但是对于同一个源若有多个接收者进行s p t 切换时,因隔离性较羞:对 同一源的多个s p t 切换之间可能会相互影响,该影响表现在s g 路由条目上。图1 4 所示的拓扑对该问题对做共性的分析。 图1 4 中,若最开始只有r 3 发生s p t 切换,则r 1 上的s g 出接口表为r 1 - r 3 , r 2 上存在路由s g r p t ,其入接口为r 2 r p ,出接口表为r 2 h 2 和r 2 r 4 。若r 4 也 做s p t 切换,将朝源s 方向即r 2 发送s g j o i n ,因朝r p 方向与源s 方向出接口重合 而不发送s gp r u n e 。r 2 收到s gj o i n 后其已有的s g r p t 路由将会因接收到s g j o i n 而转换为s g 条目,入接口也会改为r 1 r 2 ,出接口表不变,并且再次收到来自r 3 的s g p r u n e 消息后不会又转为s g r p t 。同时,因r 2 上朝源s 与朝r p 出接口不同, r 2 将会向r p 发送s gp r u n e 消息。最终当所有s p t 切换完成后,从源s 发出的组播 数据将从r 1 到达r 3 和r 2 ,再从r 2 到达r 4 。 h l 图1 4 多接收端8 p t 切换图 从上面的分析可知,对于同一源s 的多个s p t 切换,多个接收者与源s 之间建 立的多个最优转发路径能共用s g 条目即重合部分最优路径而无影响。但是对修改 r p t 的s g r p t 路由可能会受到s g 路由的影响。注意r f c 2 3 6 2 中规定r 3 的s g p r u n e 对r 2 维护的s g 路由定时器有刷新效果,假设若r 4 决定停止接收组播数据,按预计 的r 2 将不在从r l 上收到数据包,但实际情况为由于r 2 上s g 路由不停被刷新,导 致r 1 到r 2 之间的r p t 无法取消,即r 2 还是会不断从r 1 收到数据,遂决定实现中 此处行为不遵循i 强c 2 3 6 2 。 与s p t 切换及切换后路径维护相关的路由为s g 和s g r p t ,其中s g r p t 已经 在上一节讲述,下面将只描述s g 路由相关的j o i n p r u n e 消息发送处理行为。与源s 之间新的转发路径上的s g 若其出接口表不为空则将会周期性的朝源s 发送j p 消息, 源s 地址在j o i n 中,r p t 位和w c 位都为0 若该s g 条目的r p t 位为0 而s p t 位 为l ,且朝源s 方向与朝r p 方向的出接口不同,则还要周期性朝r p 方向发送乃消 息,源s 地址在p r u n e 中,r p t 位为1 ,w c 位为0 。若s g 条目被创建也会触发朝s 的呼消息。 对节点上接收的旧消息而言,假设收到包的接口为i ,若r p t 位和w c 位都为o 则是对应s g 条目的,若源s 在j o i n 中,查找s g 条目,没有则创建,已有s g r p t 则将其改为s g ,最后将i 加入到出接口表中。若源s 在p r u n e 中,若s g 存在,无论 囝 r p t 位是否设置,将i 从出接口表中移去,没有则返回。 s p t 的建立是一种破坏r p t 的行为,有违组播只发送一个拷贝数据包的定义, 并会引发大量的s g 路由以及路由计算维护,事实上组播路由的复杂性就是s g 带来 的,为了解决这一问题,t f 又提出双向p i m - s m 去掉s g 路由从而降低协议复杂度。 现实中的网络拓扑可能极其复杂,所有接收端都从r p 主导的r p t 上接收主播包在路 径上也许并不是最优的选择,此时s p t 能选择最短路径进行传播,但是该s p t 却可 能影响整体r p t 拓扑的效率,总之,s p t 切换行为在实际应用中需要经过相应评估 后设置。 1 4 组播数据发送 沿着r p t 的组播数据转发可分为2 个部分,第一部分为从源s 到达r p 的j 过程, 第二部分为从l 理沿着r p t 到达下游各接收者的过程。其中第二个部分直接按最长匹 配查找路由并转发,路由匹配顺序为s g g 埠r p ,在上小节中已经介绍。而第 一部分中从源s 到r p 的过程一般是通过单播的注册包实现。以图1 5 为例说明该过 程。 h o s t d r r 1 r 2r p 图1 5h o s t 到r p 拓扑 r 1 作为与h o s t 相连的第一跳节点,与h o s t 相连的p i m 接口为d r ,h o s t 将组播 数据包发给d r ,d r 将数据按协议规定的格式封装到注册消息中,然后单播到r p , r p 在接收到注册消息后解封装注册包,再根据当地组播路由条目进行转发。该逻辑 在大部分的情况下能正常工作,但是预想一种特殊情况,若r 1 已经为r p t 中的一个 节点,即r 1 上存在宰g 路由,这时候r p 会将组播数据又转发回来,因此需要通过沿 途建立s g - r p t 路由将r 1 到r p 的路径从r p t 上暂时裁剪掉。 当大量的组播数据发送时,会在d r 和r p 上占用大量的c p u 时间用于封装注册 7 与解封装,为了节省该c p u 开支,协议引入的注册与停止注册机制,当i 冲上收到的 组播数据包的速率大于某值时,将引发r p 向d r 单播注册停止消息,同时从r p 到 d r 上建立s g 路由,以后d r 及沿途的节点将根据s g 路由直接转发,相当于将r p t 扩展到了源s 。 最终d r 上处理流程将按以下描述进行,协议规定将d r 和源s 视为同一个,实 现的做法为用d r 的地址代替源s 地址作为p 头的源地址。 ( 1 ) 当d r 收到包为注册停止消息时,重启s g 条目的注册抑制定时器。当一个d r 收到直联源s 的组播数据包后,判断本地节点若不是r p 则进行下一步。 ( 2 ) 没有s g 路由则创建s g 并设定注册抑制定时器关闭,若已有s g 则重启路由定 时器。最后判定若s g 条目注册抑制定时器没有运行,则将组播数据封装到注册包中 直接单播到r p ,若s g 条目注册抑制定时器正在运行,则不封装组播数据直接根据s g , 的出接口表转发。 ( 3 ) 若本地存在娟或,i c 木r p ,则还要向r p 方向发送j p 消息,其中d r 地址代替源s 位于p r u n e 中,r p t 位设1 。当d r 收到包为注册停止消息时,重启s g 条目的注册抑 制定时器。 而对于r p 收到一个注册包后,解封装该注册包后按以下描述进行操作。 ( 1 ) 查找相应的s g 条目,如果s g 存在则其路由定时器重启,若s p t 位为0 则根 据s g 出接口表转发组播数据,否则丢弃该包并向d r 单播注册停止如果s g 不存在 则查找水g ,如果木g 不存在则根据,l c 水r p 建立,根据虬的出接口表转发组播数据,如果 料r p 不存在则丢弃包。 ( 2 ) 若匹配的s g 或帖条目出接口表为空,单播注册停止消息到源实际为d r 。 ( 3 ) 若注册消息达到注册包收包速率限制,没有s g 则创建一个且s p t 设为0 。该 s g 条目的路由定时器由从源收到直接转发的数据包刷新,该s g 路由导致r p 朝源s 发送j p 消息,但若s g 的出接口为空,则j p 消息将不再朝源s 发送。 第2 章总体架构 本章以o o a 的方式给出p i m s m 的总体架构方案,并对各逻辑模块进行了功能 描述。 2 1 模型分析 从网络拓扑的角度来看,p i m s i n 是一个分布式的软件,其模式属于点对点模型, 点对点模式特点是每个节点都是对等的,同时存在一个中心服务器来告知并维护端点 的信息。对p i m s m 而言,每个节点上运行的协议软件都是相同的的,而协议中规定 的b s r 相当于起到中心服务器的作用。 对单节点而言,p i m s m 协议软件是一个独立运行的小型系统,属系统软件范畴, 其成熟的架构方案有分层模型,管道模型等。在此采用分层架构模型,从不同的层次 来观察系统,并将处理不同问题的对象以及内聚度较高的模块封装到不同层,局部降 低软件复杂度。 2 2 1 软件分析 套 按照o o a 的设计思想,通过用例图并提取实体类和概念类。以下就二个场景给 出相应的用例图并做分析。 网络节点s 2 内p i m s m 协议 图2 1j p 消息处理用例图 9 图2 1 对应的场景为节点接收到一个j p 消息的处理流程,节点s l 发送j p 包到达 节点s 2 ,s 2 收到包后先查找相应的组播组,最后在对该组内的组播路由进行相应的 处理。从此图,可以提取出一个边界类用于处理收发包的行为,抽象一个组播组类来 对组信息以及路由进行管理。 节点s 2 内p i m s m 协议 图2 2c r p 配置用例图 图2 2 对应的场景为接口c r p 的配置,网络管理员通过命令行或图形化网管发 出c r p 的配置命令,节点s 2 接收配置查找相应的接口,并在接口上保留该配置信息。 从该图中看出,已经提取的边界类还应负责配置交互,再抽象出接口类管理p i m 接口。 为管理p i m $ 1 t i 协议运行中出现的多个组播组和很多个p i m 接口,借鉴s t l 中有 容器的概念,抽象出组播容器类,接口容器类。设计d e b u g 类来保存各种调试信息, 以及一个底层库来提供一些公用a p i 2 3 整体分层架构模型 结合设计的各个类,给出相应的p i m s i t i 协议总体分层设计框架图,如图2 3 所 示,p i m s r l l 软件架构将其主要分为3 层,最上层的边界类,中间的接口容器类以及 最下面的组容器类,具体的描述如下。 ( 1 ) p i m s m 协议类:以聚合的形势管理所有其它类,并提供协议启动初使化以 及关闭资源释放等功能。 ( 2 ) 边界类:提供收发包a p i 以及其它信息交互功能。 ( 3 ) 接口容器类:提供对所有p i m 接口的管理与维护。 ( 4 ) 组容器类:提供对所有组播组的管理与维护。 i o ( 5 ) 接口类t 封装所有的与接口相关的行为,接口上实现的功能点包括邻居机制, c r p 以及b s r 等角色机制,还要维护生成周期性j p 消息的中间信息。 ( 6 ) 组播组类:封装所有与组相关的逻辑行为,维护所有组播路由,保存组信息 如c r p 列表,b s r 等。实现的功能点包括所有与路由相关的机制,如口消息发送, s p t 切换,消息注册与停止注册机制,组播数据包转发等。 ( 7 ) 公用库:提供了所有公用a p t ,如单播路由查询等,并提供了一套基于双链 表的泛型函数库用以提高代码的重用性。 ( 8 ) d e b u g 类:保存了与调式测试有关的信息,以及内存堆上分配情况的跟踪。 图2 3 总体软件架构图 下面的章节将添加不同模块逐步实现整个p i m - s m 软件模型,该过程将从侧面印 证各个类之间满足松耦合关系。 第3 章p i m s m 软件框架 本章将实现底层实现库、边界类以及p i m - s m 主类,搭建一个软件框架,该软件 框架可根据应用需求,进行功能上的扩展。 3 1 底层实现库 底层实现库包含3 个部分,一部分为提供通用通用操作,最重要部分为泛型算法 库,最后还提供了一个定时器类。 3 1 1 通用操作函数 下表所列为其中较重要的a p i 。 表3 1 部分公用库a p i 函数名功能 p i m c a l c u l a t e c h k s u m计算p i m 报文的校验和 p i m g e t p i f f r o m u n i t 根据u n i t 号获得p i f 接1 2 指针 p i m r o u t e e n t r y l o o k u p 查询单播路由表项 p i r n r p f l n f o g e t封装p i m r o u t e e n t r y l o o k u p 操作 p i m i n t t o b u f将3 2 位地址转到b u f 中去 p i m r o u t e e n t r y l o o k u p 函数用于查询本地的单播路由信息,获取到达目的地址的 下一跳地址,按照r f c 2 3 6 2 的描述,p i m s m 组播协议是独立于单播协议的,其意义 为p i m s m 在创建组播路由时对所使用的单播路由来源不做限定,可以来自于o s p f , 疋或任何其它单播路由协议。 p i m i n t t o b u f 函数用于将3 2 地址转换为x x x x x x x x 的十进制格式,一般用于 打印调试,在转换之初,因网络字节序的高字节在前的顺序符合人的阅读习惯,首先 将整形地址转成网络字节序再做后续转换。 1 2 3 1 2 泛型算法库 p i m s m 数据结构中将大量使用带管理节点的双链表,而很多共通的操作作用于 双链表上,其中大部分操作行为与元素的类型无关或关系不大,借鉴s t l 的思想实 现出基于双链表的泛型算法库作为底层实现库的第二部分。 对于泛型本质理解可以参见附录a 2 ,实现中以宏来传递类型信息用作运行时的 特化。所有算法在下表中列出,并将对某几个典型算法做出实现分析。 表3 2 泛型算法库 函数名功能 p i m f u n e实现函数的多参重载 p i m l i s t w a l k u p x多参版的遍历并对每个节点操作 p i m l i s t f o re a c h 零参数版w a l k u p x p i m l i s t f o re a c h l 一参数版w a l k u p x p i m l i s t s e a r c l 多参版的查询 p i m l i s t s e a r c h零参数版s e a r c h x p i m l i s t s e a r c hl一参数版s e a r c h x p i m l i s t s e a r c h 3三参数版s e a r c h x p i m l i s t r e m o v ei 多参版的遍历移除满足条件节点 p i m l i s t r e m o v ei f零参版的r e m o v ei t x p i m l i s t r e m o v ei f 3三参版的r e m o v ei t x p i m l i s t b e g i n 返回链的头节点 p i m l i s t n e x t返回链中某元素下一个节点 p i m l i s t p r e v i o u s返回链中某元素前一个节点 p i m l i s t i n s e r t链尾插入元素 p i m l i s t e r a s e删除某节点并释放其维护的资源 p i m l i s t c l e a r清楚整个链并释放所有资源 其中p i m l i s t w a l k u p x 遍历实现如下,由于编译器在预编译期间对宏直接做替换 操作,因此类型信息能以参数的形式传进去,在遍历的过程中,通过p i m f u n c 函数转 化为相应参数版本的操作实施于每个链表的每个节点上。 # d e f i n ep i m l i s t w a l k u p x ( p l i s t ,f u n c ,t y p e ,p a r a m n u m ,p a r a m l ,p a r a m 2 ,p a r a m 3 ) d o t y p ep n o d e = n u l l ; t m o d u l s c a n ( ( p l i s t ) ,p n o d e ,t y p e ) p i m f u n c ( ( f u n c ) ,p n o d e ,p a r a m n u m ,p a r a m l ,p a r a m 2 ,p a r a m 3 ) ; w h i l e ( o ) 而一参数版的遍历通过设定相应的参数调用p i m l i s t w a l k u p x 实现,如下。 # d e f i n ep i m l i s t f o r _ e a c h l ( p l i s t ,f u n e ,t y p e ,p a r a m l ) p i m l i s t w a l k u p x ( p l i s t , f u n c ,t y p e ,1 ,p a r a m l ,0 ,o ) : 算法库中其它算法如r e m o v e _ i f o 和s e a r c h ( ) 及其不同参数版实现与刚才讲述的 f o r e a c h o 类似。较特殊的p i m l i s t e r a s e 所执行的删除操作,将节点从链表中移除后还 需调用相应类型提供的d e l e t e f u n c 函数做析构之用,避免内存泄露。 3 1 3 定时器类 通用的定时器类用于计时操作,其定义如下。 t y p e d e fs t r u c t _ p i m t i m e r u i n t 4u 4 c u r r e n t ;当前时钟值 u i n t 4u 4 m i n e x p i r e ;严超时时间 t p i m t i m e r ;, 定时器包含两个变量,一个用于保存当前计数,一个保存最大超时限度。 表3 3 计时器类函数 函数名功能 p i m t i m e r l n i t初始化 p i m t m r j u d g e e x c e e d判断定时器是否超时 1 4 函数p i m t i m e r l n i t 在初始化定时器的过程中将根据不同的定时器类型设置不同 的超时时间。 函数p i m t m r j u d g e e x c e e d 在判断定时器是否超时的过程中,若未超时则将当前 计数器加1 ,若超时则将计数器清0 。 3 2d e b u g 类 设计d e b u g 类用以保存相应的d e b u g 信息,提供对堆上或内存池中对象分配情况 的跟踪,其重要的成员如下。 表3 4d e b u g 类成员表 类型成员名 描述 m tr e c e ed e b u g 收包d e b u g 开关 i n t s e n dd e b u g 发包d e b u g 开关 t n ti f o u n t接口类对象计数 l i l tn b r c o u n t邻居类对象计数 m 。t j p n o d e c o u n tj p n o d e 对象计数 i n t j p s r c n o d e c o u n tj p s r c n o d e 对象计数 m t g r p c o u n t组播组类对象计数 m t o i f l 2 0 u n t出接口对象计数 i n t r o u t e c o u n t路由对象计数 其中d e b u g 开关用于决定是否打印相应调试信息,计数变量用于跟踪对象的分配 情况,其原理为每一个对象分配或释放的时候都会对相应的计数器进行加l 或减l 的操作,通过打印出这些计数变量的值获知当前的内存堆上分配情况。 d e b u g 类提供的函数如下表。 一 表3 5d e b u g 类函数表 函数名功能 p i m d e b u g l n i t初始化d e b u g 类 i p v 4 _ l o g _ t i m e _ p r i n t 获得当前时间信息 p i md b gl o g提供带时间标记的打印功能 3 3 边界类 边界类处理所有的交互行为,其提供的最主要操作为收发包,收到组播包后对该 包做共性的处理以便进行后续处理,发包时对包完成最后组装过程并发送。边界类的 重要成员见下表。 表3 6 边界类成员表 类型成员名描述 u 玳t 1u 1s e n d b u f 4 0 0 0 】发包缓存 u i n t lu1r e c e i v e b u f 4 0 0 0 】收包缓存 m s q q 刃m s g q u e p i m 消息队列 其中u l s e n d b u f 和u l r e c e i v e b u f 二个字符数组为收发缓存,用以防止可能出现 的内存泄漏并降低软件实现复杂度。在协议栈架构中存在一个与驱动层交互的m u x 层,该层的设计决定所有数据包收发都是通过位于内存堆上的p m b l k 指针来指向包, 若处理过程中过多传递该指针可能因途中某步处理失败而造成内存泄露,因此p m b l k 指针的存在会极大增加逻辑复杂度与代码维护困难。 从安全性考虑,将与p m b l k 指针的交互完全封装到边界类中,从这点出发设计 了缓存b u f f 每当边界类收到包后将p m b l k 指针所指的数据拷贝到收包缓存中并随后 释放掉该p m b l k 指针,而发包时先将包存到发包缓存,当包组装完毕后再分配p m b l k 指针,从而只在收发包的最后处理步骤中才与p m b l k 指针做相互转换,避免因过多 使用p m b l k 指针引入的缺陷。该设计的缺陷为不能并发或并行处理包,而只能串行, 1 6 由于p i m s m 的设计的主流程是串行的,所以该问题实际无影响。 m s g q u e 为消息队列,所有收到包的p m b l k 指针都放里面。 作用于边界类的函数在下表中列出。其中大部分函数都是对组播控制报文或数据 包的初步处理。 表3 7 边界类函数表 函数名功能 p i m b o r d e r l n i t边界类初使化 p i m b o r d e r r e c l a i m资源释放 p i m b o r d e r p a c k e t r e c v收包,用于和d

温馨提示

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

评论

0/150

提交评论