由IP网络承载点到多点的分配式业务正成为网络应用热点,如IPTV、网络视频会议等,组播技术是这类应用的关键。组播数据从一个源发送到多个接收目的地址,传统的单播路由必须确定每一个目的地址,并分别向这些地址发送数据包,而组播则可以通过一个组播地址只发送一个数据包的拷贝,因此,组播能够有效地利用网络带宽并减少服务器的负载。网络理论与协议的研究多采用模拟网络来进行,可以不受实际网络条件的限制没置模拟网络环境,并能够精确控制网络事件的产生。NS2(Network Simulation version 2)是一个开放源代码的网络模拟器,其开放结构便于进行协议扩展及仿真研究。
一、基本原理
IPv6网络中组播组成员管理和组播分组转发是由路由器实现的,实现上述功能依赖专门的协议。IPv6组播组成员管理通过组播侦听者发现协议(MLD:Muhicast Listener Discovery)来实现,该协议是IPv6的Internet控制消息协议(ICMPv6)的一部分;组播分组转发则通过组播路由协议来实现,协议无关组播(PIM:Protocol Independent Multicast)是一种不依赖于特定单播路由协议的组播路由协议,现已成为事实上的域内标准组播路由协议,该协议又分为密集模式(PIM-DM:Protocol lndependem Multicast - Dense Mode)和稀疏模式(PIM-SM:Protocol IndependentMuhicast - Sparse Mode),分别采用不同策略生成和维护组播树。特定源组播(SSM:Source Specific Multieast)是PIM协议的扩展,在组播源相对稳定的情况下,采用PIM-SSM能够更加有效地传送数据。
1、PIM-SM协议
PIM-SM协议采用了汇聚点机制,它规定每个组播组必须有一个有效的汇聚点路由器,组播转发捌分为两种,即以组G的汇聚点(RP)为根的共享树(RPT)和以组播源为根的最短路径树(SPT)。PIM-SM允许有直连组播数据接收者的路由器从RPT切换到SPT来接收组播数据。PIM-SM协议工作的基本机制主要包括以下几个方面。
(1)共享树的建立
共享树的根结点称为RP。如果某一主机准备加入一个组播组会将“MLD组成员关系”消息发送到上游直连指定路南器(DR:Designated Router),这意味着该主机可以接收该组的组播数据了。为此,中间路由器必须通知RP,申请加入RPT。这一过程是通过沿着RP方向向上游PIM-SM邻居发送“Join”消息来完成的。PIM-SM路由器接收到来白下游路由器的(*,G)的“join”消息时,检查组播路由表,如果关于G组的(*,G)状态己存在,则表明“Join”消息己到达了共享树,且接收“Join”消息的接口己加入到出口列表中;如果状态不存在,则将创建一个(*,G)项,并把接收“Join”消息的接口加入到出口列表,然后继续向RP发送“Join”消息,直至到达RP。一旦创建从DR路由器到RP路由器的(*,G)状态,则从RP到主机的RIYF就建立起来了,组播组G的数据就能通过RP沿着RPT树下行发送到已经加入该组的主机。
(2)组播源注册到RP
在组播流量初始传送时,PIM-SM通过一个注册机制,将源主机的组播包传递给RP。当与源主机直连的路由器DR最初接收到组播数据时,将组播数据封装进“Regisler”消息中,目的地址为RP的地址,源地址为组播源的地址,将该消息单播至该组的RP。RP解析“Register”消息,并将其解封,取出数据包,然后将数据包转发至下游成员。
(3)最短路径树和共享树的切换
在有组播组成员直连路由器上,配置一个阈值,当数据传输速率超过一个规定的阈值时,路由器将从RPT切换到SPT。由于组播源与RP位置不同,这种切换有可能减少刚络的拥塞,提高网络的服务质量,但这种情况下路由器必须保留更多的组播组状态。
(4)剪枝接口
当RP接收到“Prune”消息时,就不再为“Prune”消息中指出的源转发数据。剪枝从一个叶路由器(即与接收者南连的路由器)开始。假设叶路由器为DR,如果组播组的最后一个成员向DR发送了一个MLD“Prune”消息,那么DR的MLD状态将被删除,同叫从(S,G)和(*,G)出口列表中删除该出口信息。
(5)“声明(assert)”消息的传递
为避免组播包在多路访问网络中重复流动,PIM-SM引入了“声明”信息,用以为一个多路访问网络指定一个转发路由器,PIM-SM通过assert机制来选定一个惟一的转发者,通过发送assert报文,选出一个最优的路径。
2、PIM-SSM协议
PIM-SSM组播用一个组播源地址S和组播组地址G对(S,G)来表示一个会话,也称为一个频道。接收主机不仅要知道组播组地址G,还要知道组播源地址S。在路由复杂性方面,SSM进行了很好的简化。在PIM-SM协议中,路由器不但要处理从RPT到SPT切换等复杂的问题,而且要处理(*,*,RP)、(*,G)、(S,G)、(S,G,RPT)等4种不同的组播路由表项。采用SSM之后,路由器中只需要处理(S,G)这一种路由表项,便于使用硬件进行组播数据报文的转发,从而提高路由器组播数据的处理效率。SSM能够部分解决传统组播面临的访问控制问题,由于接收者明确告诉了路由器要接收来自哪个源地址的数据,这样就可以实现对数据源的控制,来自非法数据源的数据会被丢弃。SSM还解决了组播地址冲突的问题.IETF已经为SSM专门保留了地址段,IPv6地址段为FF3x∷/32。
3、PIM-DM协议
PIM-DM采用“扩散/剪枝”机制建立组播转发树。在PIM-DM域中,运行PIM-DM协议的路由器周期性地发送Hello消息,发现邻接的PIM路由器,进行叶子网络、叶子路由器的判断,并且负责在多路访问网络中选举DR。PIM-DM协议假定当组播源开始发送数据时域内所有的网络节点都需要接收,因此首先将数据扩散到全网,然后通过协议剪枝不需要数据的网段。为了完成组播转发,沿途的路由器需要为组G和源S创建相应的组播路由项(S,G)。(S,G)路由项包括组播源地址、组播组地址、入接口列表、出接口列表、定时器和标志等。
二、IPv6组播路由协议仿真
NS2是面向对象的、离散事件驱动的网络模拟器。NS2由OTc1语言、网络模块、调度模块和网络仿真四个部分组成。OTc1语言和c++分层结构是NS2的特征;网络模块是其主体部分,并具有可扩展性;调度模块是总控模块,控制仿真的进程;网络仿真则实现特定功能的网络仿真。NS2网络仿真是按照网络协议分层模型来实现的,由低到高依次为:离散事件调度、网络拓扑(结点、链路)、路由、传输层和应用层。NS2中建立了一些Node、Agent等类,通过这些类来仿真网络层、传输层和应用层实体。
1、PlM仿真系统模型
图1所示基类TclObject是NS2所有编译类的基类,它的子类NsObject是所有网络组件的基础,其主要任务是处理数据包(Packet),它的子类包括一个分类器(Classfier),此分类器包括组播地址分类器McaslClassfier,完成组播地址分类的初始化工作和基本的组播路由功能,预留join-group()和leave-group()接口。它下面的继承类完成各个路由协议的路由计算功能,路由计算类用Tcl脚本语言编写。其中的SSMcast和SSMeaslcomp是笔者添加的新类,目的是使NS2能够支持PIM-SSM协议的仿真。
图1 部分组播类结构
2.PIM-SSM协议扩展
由于NS2不提供对SSM模型的仿真支持,为了能实现对SSM协议的应用仿真,通过修改NS2,添加对SSM协议的支持。
利用扩展集中式组播中的路由计算单元(CtrComp)来支持SSM组播路由计算,同时要使节点支持(S,G)方式的SSM组播加入方式,这仅限于扩展NS2的Otcl脚本,主要方法如下:
(1)增加两个扩展名为tcl的SSM类和SSMComp类,代码如下。
if{$mproto==”CtrMcast”}
{set MrtHandle_[new CtrMcastComp $self]}
if{$mproto=="SSM"}
{set MrtHandle_new SSMComp $self]}
(2)修改ns-mcast.tcl文件中的源代码,该文件功能是建立由Simulator类派生出来的层类,该类描述了用户运行组播仿真所需的特定命令。其中的“mrtproto”函数的主要功能是通过创建相应的组播对象来说明在仿真过程中采用的组播协议类型。随后可以利用tcl脚本命令来配置组播协议。具体命令为:set mproto SSM和sel mrthandle [$ns mrtproto $mproto]。
(3)修改ns-packet.tcl,在foreach proc{…}中加入SSMcast,激活分组头。
(4)在tcl/lib/ns-lib.tcl中加入SSMcast.tcl和SSMcastcomp.tcl,重新编译生成新的ns_tcl.cc,从而将tcl/lib/ns-lib.tcl中所声明的所有Tcl脚本通过EmbeddedTcl对象封装,以便在NS2开始运行时载入。
(5)修改Makefile.in加入tcl/ssm-mcast/SSM cast.tcl\和tcl/ssm-mcast/SSMcastcomp.tcl \,使扩展的Otcl脚本放在ns/tcl/目录下。
3、仿真数据处理
仿真模拟结束后,会产生两个文件,一个是以.nam为后缀的文件,这是给nam用的,用来把模拟的过程用可视化的方式表现出来;另一个是以.tr为后缀的文件,这个文件记录了模拟过程中的所有事件。
用awk语言编写代码从庞大的.tr文件中提取需要的性能参数,包括端到端延时、丢包特性等,同时在NS2中直接新增模组来测量以用户数据报(UDP)为传输协议的OWD(0ne Way Delay)、IPDV(IP Delay Vatiance,或是Jitter)和Packet Loss。方法如下:①新增sendtime_栏,修改文件common/packet.h;②tools目录内新增measure.h和measure.cc;③修改ns-defaul.tcl,定义Agent/measure中的缺省值;④将tools/measure.o加入Makefile中OBJ_CC内,再重新用make命令编译。
三、仿真结果分析
定义一个13个节点的网络,拓扑结构如图2所示。采用UDP传输,在UDP上绑定流量发生器虚拟发送数据包。建立两个源(节点3、9),五个接收节点(节点1,4,5,1O,11),接收节点加入组播组,源向组内的节点发送数据包,其中每个接收节点和源都要实现通信。应用PIM-SM协议时指定节点O为RP(中心点)。对PIM-SM、PIM-DM、PIM-SSM三个协议进行分析比较。
图2 仿真网络拓扑
1.基于恒定比特率仿真分析
在这部分仿真中,设置节点9以恒定比特率(CBR)发出组播数据包。数据包大小为1000 byte,发送速率为1024 kbit/s,发送的目的地址为组地址。各节点问采用全双工链路传输,带宽是1.5 Mbit/s,9-4-2链路的延时为30 ms,采用先来先服务(FCFS)的原则,其余链路延时为10 ms。针列节点9发出的组播数据,各链路丢包率如表1。
表1 链路丢包率(源:节点9)
链路丢包主要发生在0-l、2-5、2-6链路。PIM-SM协议采用RPT-SPT结合的策略,在把数据单播到中心点过程中基本上没有包丢失的情况,这条链路的路由器不用维护很多的路由信息。而当转换成SPT时,不通过中心点向接收节点转发数据,即建立9-4-2-6-10这种最短路径,出现了丢包现象,这是由于SPT需要路南器维护更多的信息。从0节点传到节点2的链路数据包很少,这主要是由于应用PIM-SM协议的组播树建立以后,从源到中心点的单播数据包,会在与接收节点最近的组播树路由器转发,而不用到中心点再到共享树发送,即这些包在节点2转发。司以看出,PIM-SSM协泌和PIM-DM协议都应用SPT树,其丢包特性在对应链路上是基本一致的。
2.可变比特率仿真分析
为了更好地比较协议性能,将节点9发送组播数据的速率设为可变,范围从864~992 kbit/s,间隔为32 kbit/s,网络拓扑结构不变。考虑链路总的丢包率,即所有链路总丢包数占应收包数的比例,仿真结果见表2。
表2 不同比特率丢包率
表2数据用图表示如图3所示。从图3可见,就三个协议而言,PIM-SM协议的性能较优,其包的丢失率一直低于另外两个协议。
图3 不同发送速率的丢包示意
进一步统计了PIM-SM和PIM-SSM协议下的两个源节点至节点10的端到端延时特性,结果如图4所示。
图4 端到端延时特性
在O.5秒附近,由于源节点9开始发送数据。两个协议下至源点3的延时在这以后明显递增。由于PIM-SM要利用共享树转发,即单播到中心点0,再经过0转发到接收点,延迟要大一些。而PIM-SSM协议要建立SPT树,并不需要通过中心点进行转发,而直接在端到端间建立最短路径树。
四、结语
本文利用NS2仿真软件模拟分析了常用的IPv6组播路由协议,仿真结果与理论预期一致。从丢包率来看,PIM-SM协议具有优势;从实现原理来看,PIM-SSM协议实现起来较PIM-SM协议简单,能够避免中心点的拥塞,但在发送节点较多的情况下会增大链路的丢包率;在延时特性方面,由于PIM-SM协议需要涉及RPT,有一个阶段不使用最短路径发送信息,这就使链路的延时比PIM-DM和PIM-SSM协议要长,即在减少路由信息并降低链路丢包率的同时增加了链路延时。
作者:周金和 郑飞 孙晖 来源:泰尔网