构建Ad Hoc网络跨层协议交互机制
——
关键词:无线,网络,跨层,自组织,仿真
1.引言
传统的基于TCP/IP的网络协议栈将各个协议层独立开来,相邻层之间通过良好的层间接口进行直接通信,而非相邻层之间不允许进行直接通信。每个协议层专注于完成本层内部的全部功能,而不必去关心其它层的功能实现。这样做的好处在于,设备厂商内能够专注于某一协议层的网络设备的开发,进行功能优化与添加,只要保证层间接口的标准化,就不会影响到整个网络的互通。这一理念鼓励了设备厂商的技术创新,使得市场上不断出现质优价廉的产品和服务,促成了全球互联网Internet的飞速发展。但是,对于无线动态网络和有线、无线混合异构网络来说,严格的分层限制了信息获取的灵活性,使得网络设计者无法根据无线网络的动态特性做出自适应优化,导致传统用于有线网络的严格分层的协议栈在上述网络中无法高效运行[1]。
在一个典型的无线移动自组织网络(MANET)中,由于无线信道的时变性和节点的移动性,使得链路的断开、路由的改变频繁发生,要维护网络的正常运行,就要及时发送网络控制信息,这就会给目前低带宽的无线链路带来很大的开销。在某一层次的性能优化也许还会导致全局协议栈的性能的降低[2]。同时,基于严格分层的协议栈使得高层协议希望直接得到的网络底层信息需要经历几个中间协议层才能得到,信息的更新带有明显的迟滞性[3]。针对无线网络的特点及问题,许多研究人员提出,打破基于TCP/IP协议栈的严格分层限制,使得相关协议层次能够直接进行信息的交互,从而极大提高网络的传输性能。Vineet Srivastava等人综述了跨层设计的现状和发展方向,将跨层定义为违反参考协议栈构架的协议设计,并将跨层分类为创建新接口、合并相邻层、无新接口的耦合设计和全局垂直信息交互四种[4]。Taesang Yoo等人利用NS-2网络仿真器构建了一个跨层设计框架用以研究Ad Hoc网络上的视频传输性能[5]。XinSheng Xia和Qilian Liang利用OPNET建立了一个MAC层和物理层耦合的跨层机制[6]。Ning Yang等人基于NS-2建立了物理层和介质访问控制(MAC)层、网络层和MAC层之间的信息交互[7]。
目前的跨层协议研究大多是基于网络仿真器软件实现的,跨层协议交互的研究主要针对于有延时限制的多媒体信息传输,而仿真软件的仿真速度及实时性影响着许多研究的顺利开展,例如我们建立的Ad Hoc网络实时视频传输实验平台就必须要依托于高速的网络仿真引擎[8]。同时,仿真工具的易用性也影响着我们的研究进度。基于上述原因,我们选择QualNet作为我们的网络仿真工具,取得了良好的效果。
本文首先介绍了QualNet网络仿真器及与我们跨层协议实现相关的消息处理机制,接着以应用层和网络层跨层交互为例,讲解了如何在QualNet里面实现跨层协议设计,然后给出了不同节点、不同应用之间跨层协议交互的设计实现。最后总结全文并指出下一步的工作方向。
2.QualNet及其消息处理机制
2.1QualNet网络仿真器
QualNet是一种应用于无线、有线以及混合动态网络的快速而且精确的开发、仿真系统。Scalable Network Technologies Inc.公司将美国加州大学洛杉矶分校(UCLA)开发的开放源代码的GloMoSim成功地转化为了商业版本——QualNet。目前已经在世界范围内50多个国家和地区得到了推广应用,它的客户主要是美国的大的军方项目承包商,包括DARPA、微软、NASA、雷神、美国空军等,目前已经成为美国军方网络中心战及未来作战系统(FCS)的主要仿真平台。
2.2QualNet协议栈构架
QualNet协议栈的设计遵循着TCP/IP网络协议栈分层结构,如图1所示。但是,QualNet还提供了一套完整的消息传递机制,使得我们能够进行类似图2所示的跨层协议开发。
图1 QualNet分层协议栈 图2 跨层协议示例
2.3QualNet消息处理流程
以应用层恒定比特率(CBR)协议为例,QualNet标准协议栈的内部消息处理流程如图3所示。
图3 QualNet内部消息处理流程
首先,应用层对CBR分组使用MESSAGE_Alloc( )函数分配内存空间,并利用MESSAGE_PacketAlloc( )函数将用户载荷拷贝到packet结构体指针,通过MESSAGE_Send( )递交给传输层,传输层利用MESSAGE_AddHeader( )函数增加一个TCP或者UDP头,通过MESSAGE_Send( )函数递交给网络层,网络层通过路由寻径,增加了IP头以后递交给MAC子层,MAC子层增加MAC帧头后递交给物理层,经过相应的编码、调制、天线发射出去,经过无线信道的模拟传输,历经了衰落、多径、损耗,到达接收端,如果发生差错就要根据MAC层设置进行相应的处理,如重传。接收端的处理过程与发送端相反,经过MESSAGE_RemoveHeader( )函数层层剥离协议头,将消息递交给上层进行相应的处理,最终到达目的应用协议,利用MESSAGE_Free( )函数释放掉由发送端使用的MESSAGE_Alloc( )函数和MESSAGE_PacketAlloc( )函数分配的内存空间。
可见,如果要想实现跨层信息交互,就要在执行MESSAGE_Send( )函数的时候,将原来的消息参数进行相应的更改,使得仿真器经过事件调度以后能够将此消息递交给期望的处理函数。下面,我们就将CBR协议进行修改,实现如图2所示的绕过UDP传输协议直接将CBR分组递交给IP层的跨层协议交互功能。
3基于QualNet的跨层交互机制
如图2所示,跨层协议交互分为两个部分,一部分是应用层直接将数据递交给IP层处理,另一部分是IP层将数据绕过UDP协议传送到CBR处理函数入口。
3.1应用层到网络层的通信
常规协议栈中,基于UDP的应用层协议将用户数据发送到UDP,添加UDP头后发送到IP。为了使得CBR能直接将用户数据发送到IP,我们就要首先确定UDP使用了哪些接口来和网络层进行通信,然后在CBR和IP之间使用相同的接口。
图4所示为分层的协议栈接口,可以看到,CBR调用接口函数APP_UdpSendNewHeaderVirtualDataWithPriority( )将CBR数据发送给UDP协议,UDP协议调用接口函数NetworkIpReceivePacketFromTransportLayer( )将数据发送给IP,接着IP进行相应的处理并调用函数RoutePacketAndSendToMac( )将数据包发送到MAC层。我们所需要做的,就是要将原来的数据通路打断,让CBR协议直接调用接口函数NetworkIpReceivePacketFromTransportLayer( ),并传递相应的参数。
图4 CBR协议层间接口(左:分层;右:跨层)
3.2网络层到应用层的通信
对于网络层到应用层的跨层通信,首先要确定传输层和应用层之间使用的是什么接口函数,然后使得网络层使用相同的接口将数据传递给应用层。网络层函数DeliverPacket( )从接收到的IP包的头内读取接收端协议编号ipProtocolNumber,将数据包传递给目的协议。对于一个基于UDP的应用程序,DeliverPacket( )使用函数SendToUdp( )发送接收到的数据包给UDP,因而,将数据包传递给应用层就要使用UDP函数TransportUdpSendToApp( )。为了使得IP能够直接向CBR发送数据,编写一个函数SendToCbr( )并修改DeliverPacket( )使之调用SendToCbr( )向CBR发送数据包,该修改过程的伪代码如图5所示。
4跨层仿真实例
我们针对上述的CBR跨层协议交互,进行了无线移动Ad Hoc网络数据传输的仿真实验,实验结果表明,即使是经过简单的跨层交互(只是跨过了传输层),较之严格分层的协议栈,分组投送成功数量提高了33%。
4.1实验设置
我们选取了1000M
评论