APP下载

NS2中网络协议开发与仿真研究*

2015-09-09周德荣田关伟

关键词:网络协议路由分组

周德荣,夏 龄,田关伟,舒 涛

(四川民族学院)

0 引言

网络协议开发和研究的常用方法是采用软件仿真.NS2是主流的网络仿真工具之一,它由伯克利分校开发的面向对象网络仿真工具,尤其在网络协议研究方面具有重大意义[1].NS2前身是REAL网络仿真器,NS2中主要使用C++语言完成网络协议开发,使用OTCL实现协议仿真测试,通过观察实验结果验证方案的可行性和优劣.Ad hoc网络是一种自组织无线移动网络,具有无中心、自织组、多跳路由、独立组网、节点移动等特点[2].Ad hoc网络的关键技术是路由技术,Ad hoc网络的路由协义分表驱动路由协议、按需路由协议和混合型路由协议[3].表驱动路由协议包括探测邻居节点和路由广播两个过程,探测邻居节点通过周期性地广播“HELLO”分组来实现,路由广播采用洪泛方式向全网扩散.按需路由协议包括“路由发现”和“路由维护”两个过程.混合型路由协议是表驱动路由协议和按需路由协议结合,将这两种协议进行优势互补,使得带宽消耗和路由发现的延迟降低.典型协议有DSDV、WRP、DSR、AODV、TORA 等.AODV 路由协议[4]是具有一定优势主流协议,它是DSR和DSDV的综合,依赖中间节点建立和维护动态路由表,使用序列号避免路由环路,支持组播功能和QoS等特性,能很好适应高度动态移动的网络环境.

NS2的网络仿真通常包括两方面:一方面是通过编写脚本程序对已经实现的协议和算法的仿真,为网络规划设计和评价网络性能提供参考.另一方面是通过编写新的C++和OTCL代码,并将它们编译进NS2内核实现网络协议和算法的开发.该文以AODV路由协议为研究对象阐述了NS2中新协议和算法的实现方法.

1 网络协议开发简介

1.1 NS2的工作原理

NS2是一种离散事件驱动的面向对象的网络模拟器[5-6],它包含仿真事件调度器、网络组件对象库以及网络构建模型库等,NS2的基本结构如图1所示.事件调度器计算仿真时间,激活事件队列中的当前事件,执行一些相关的事件.网络组件通过传递分组来相互通信,所有需要花费仿真时间来处理分组的网络组件都必须要使用事件调度器.NS2中的网络构件由相互关联的两个类来实现,一个是C++类,一个是OTCL类.C++类是算法和协议的具体实现,OTCL对象是建立仿真对象、设置属性、通过事件调度器调度网络模拟事的发生.事件调度器和部分网络构件采用C++实现,通过Tc1cL实现到OTCL映射机制,建立映射后NS2用户在OTcl空间能够对C++对象中成员函数和成员变量进行修改与配置.TCL(Tool Command Language)是解释执行的脚本语言.OTCL是一种面向对象的脚本语言,支持继承、封装、多态性和动态绑定等面向对象的特性.通过编写TCL模拟脚本,使用NS2进行仿真产生Trace文件,通过NAM模块对仿真过程进行动画演示,通过绘图软件进行仿真结果的图形绘制.

图1 NS2基本结构

1.2 NS2协议开发流程

NS2中协议开发涉及两部分代码,一部分是完成与NS2整合所必需的,另一部分则是完成协议内容编写的,也是协议开发的核心所在.核心协议的开发必须熟悉开发协议相关标准及NS2代码结构,然后从C++代码、TCL代码两部分入手开始实现协议,流程如图2所示.

图2 NS2协议开发流程

当NS2用户要进行协议开发,主要是用C++建立新的协议和用TCL建立仿真脚本,具体步骤如下:

Step 1:建立头文件,定义新协议的数据结构、新代理的继承结构及类定义.

Step 2:根据协议标准及规范用C++实现新协议.

Step 2:定义OTCL连接函数,实现C++代码和OTCL代码之间的接口连接.

Step 3:对NS2中各个相关程序进行必要的改动,实现对新协议的支持.

Step 4:对NS2进行重新编译生成支持新协议的NS2.

Step 5:编写OTCL仿真脚本.完成模拟网络拓扑结构的配置、协议代理的建立、业务量模型参数、Trace对象等的设置.

Step 6:运行仿真脚本对新协议进行仿真测试.

Step 7:对仿真结果进行分析,得出测试结果.

Step 8:调整配置拓扑结构和业务量模型,重复step 5至step 7进行仿真.

2 NS2中ADOV路由协议的实现

2.1 AODV路由协议概况

AODV协议是无线自组织网络中按需路由的典型协议.AODV路由协议主要包括路由发现和路由维护两种机制[7].AODV协议操作包括路由请求 RREQ、路由应答 RREP、路由错误RRER、路由应答认可RREP-ACK四种消息的格式.当源节点与目的节点进行通信时,若源节点路由表中没有到达目的节点的路由,则通过向邻居广播RREP分组来进行路由发现.当RREP分组从源节点发出后,沿途所经过的节点自动建立到源节点的反向路由.中间节点收到RREQ路由请求分组后对比序列号,如果之前收到过该分组就丢弃.目的节点收到RREQ后利用反向路由向源节点发送路由应答消息RREP,建立源节点到目的节点的有效路径.AODV协议主要通过本地修复和源节点重建路由两种方式实现路由维护.AODV路由协议通过周期性广播HELLO报文来检测链路状态,如果规定时间内,节点未收到邻居节点的“HELLO”响应报文,就判断该链路已经断开,此时启动本地修复机制,若本地修复失败,删除缓存中源节点发送过来的数据包,发送RRER错误分组给源节点,源节点重新发起路由发现过程.

AODV是一个路由协议,需建立和维护路由表信息.AODV协议的每个路由表条目如图3所示.

AODV的路由发现和路由维护实质就是对节点的路由表进行操作.主要包括路由添加,路由删除,路由查询.

2.2 AODV路由协议实现

NS2是一款开放源代码网络仿真软件,最重要的目录是 ns2–allinone-2.34/ns-2.34,用于存放网络协议、算法的实现源代码,OTCL源码主要放在ns-2.34/tcl/lib目录下.对于路由协议一般都是新建协议名对应的目录,实现路由协议就是要在对应目录下编写新的C++和OTCL代码,最后将新协议重新编译连接NS2核心模块即可.对于 AODV协议,新建 Aodv目录,通过Aodv.h、Aodv.cc、aodv_packet.h、Aodv_rtable.h、Aodv_rtable.cc、aodv_rqueue.h、aodv_rqueue.cc等文件实现AODV协议.实现过程如下:

图3 AODV路由表表项

(1)定义新的路由协议.NS2中所有路由协议继承自Agent类,通过在aodv.h中定义协议类class AODV:public Agent{}.其中,recv()函数和command()函数继承自Agent类.recv()是路由层收到数据包的处理函数,源节点发送一个分组时调用目标节点的Agent类的recv()函数处理数据包.command()是命令处理函数,NS2中OTCL对象通过command()函数实现调用对应的C++对象.NS2为每个TclObject的解释对象建立cmd{}实例过程,cmd{}调用影像对象的方法command(),同时将cmd{}的参数以数组方式传递给command()方法.此外,具体协议所用到的其它函数也在AODV类中定义.

(2)定义一个TclClass类的子类.aodv.cc文件中通过static class AODVclass:public TclClass{}进行定义,构造编译类结构互为镜像的解释类结构,提供初始化新的TclObject方法,实现C++中的AODV类和Tcl代码中的Agent/AODV的绑定.

(3)修改NS系统TCL代码实现识别AODV协议.在ns/tcl/lib/ns-lib.tcl文件中的Simulator类的create-wireless-node成员函数中增加如下代码:

在ns/tcl/lib/ns-lib.tcl文件中定义成员函数create-aodv-agent.

(4)定义路由协议包头.在AODV-packet.h文件中定义一个结构体struct hdr_aodv{},包含各种序列号、分组标识等信息.在ns/tcl/lib/nspacket.tcl文件中添加包头的名字 AODV.在aodv.cc文件中定义一个PacketHeadeaClass类的子类class AODVHeaderClass,它是各种分组头的基类,通过此类实现 Tcl中的 PacketHeader/AODV类与C++中的hdr_aodv的绑定.

(5)创建路由协议的包头类型.ns/common/packet.h文件的enum packet_t中增加一项定义为PT_AODV,表示新增加的包类型,在class p_info类的p_info()构造函数中增加一行 name_[PT_AODV]=“aodv”,实现新增 aodv包类型.

(6)aodv.cc中定义构造函数AODV::AODV():Agent(PT_AODV),将新创建的包的类型传递给Agent类的构造函数.

(7)路由协议的定义和实现后,修改ns/Makefile文件,对NS2进行重新编译,实现对新协议的支持.

(8)先编写 tcl文件,生成随机场景,运行NS2对路由协议进行测试.

3 仿真实验

3.1 性能评价与仿真参数

Ad Hoc路由协议性能评估是协议研究与开发的一项重要工作.评估时主要采用分组投递率、端到端延迟、路由开销等指标来衡量路由协议性能[8].分组投递率是源节点发送分组的总数与目的节点接收分组的总数之比,反映了数据传输路径的质量.端到端延迟是数据分组在端点之间的平均传输延时,路由开销是指所有路由开销的控制分组总数,包括所有路由发现、路由维护的控制消息,反映了路由协议本身带来的传输开销.

利用仿真软件对Ad Hoc网络路由协议进行评价时,通过选择不同的仿真参数来实现.仿真参数主要有:(1)移动性,通过设计移动模型来反映网络拓扑结构动态变化、链路的连接与断开;(2)网络负载,主要包括分组的类型、大小,分组的发送速度等;(3)网络环境,包括节点数目,移动区域大小等.

3.2 仿真结果分析

设定仿真网络环境,通过分别改变节点个数、移动速度和停留时间等仿真参数,从分组投递率、端到端时延和路由开销三方面评估AODV路由协议.仿真基本参数为:各节点随机分布在800~600 m场景,无线传播模型采用Propagation/TwoRayGround,天线类型采用Antenna/OmniAntenna,节点的无线传输范围为250m,数据流类型为CBR,每个CBR包的大小为512B,链路带宽为2M,接口队列类型为 Queue/DropTail/PriQueue,Mac 层协议采用 IEEE802.11,模拟时间为200s.

3.2.1 节点个数变化仿真

在基本仿真参数上,设定节点数目为5,10,20,30,40,50,对应的最大连接数为 4,7,17,27,37,47,源结点个数分别为 3,4,10,18,25,30.分组发送速率为2packets/s,停留时间为0s,最大移动速度为5 m/s,仿真结果如图4所示.

图4 节点个数变化对AODV协议影响的仿真

从图4(a)可知,节点数为15~35时,路由协议端到端平均时延达到比较理想,当节点超过30时,加上网络拓扑结构的变化,无线信道中充斥着大量的拓扑更新报文,有效数据正常传输受到影响,导致端到端时延呈上升趋势.从图4(b)可知,当节点数为20~30时,分组投递率最高,接近100%;节点个数小于20时,由于节点个数较少,在相互的无线电范围以外的情况增多,节点间无法找到可达路由的情况随之增加,由此造成较多分组无法找到路由而丢弃,降低了分组投递率.节点个数大于30时,由于节点个数的增加带来网络拓扑结构变化较快,网络中的路由更新报文增多,造成较多分组因路由超时而丢弃,分组投递率随之下降.从图4(c)可知,当节点数增加时,路由协议的路由开销随之增加.

3.2.2 移动速度变化仿真

基本仿真场景上,设定节点数目为20,对应的最大连接数为17,停留时间为0s,分组发送速率为2packets/s,源结点个数为10,最大移动速度分别设置为 1、5、10、20、30、40、50 m/s.仿真结果如图5所示.

图5 移动速度变化对AODV协议的影响

从图5(a)可知,随着移动速度的增加,路由协议端到端平均延时随之增加,由于AODV是按需路由协议,需要发送数据时寻找可用的路由,当移动速度增加带来拓扑结构的变化频繁,因此延迟出现较大趋势.从图5(b)可知,随着移动速度的增加,路由协议分组投递率呈现下降趋势,这是由于随着移动速度的增加,网络拓扑结构变化加剧,网络中路由更新报文不断增多引起的.从图5(c)可知,路由协议的路由开销呈上升趋势.

3.2.3 停留时间变化仿真

基本仿真场景上,设定节点数目为20,对应的最大连接数为 17,停留时间为 0、10、20、30、40、50、60、70、80、90、100 s,分组发送速率为2packets/s,源结点个数为10,最大移动速度分别设置为5 m/s.仿真结果如图6所示.

图6 停留时间变化对AODV协议的影响

从图6(a)可知,随着停留时间的增加,网络拓扑结构越来越稳定,路由协议端到端平均时延呈现下降趋势.从图6(b)可知,路由协议分组投递率较高,基本可可达98%以上,随停留时间的增大,路由协议的分组投递率有上稳定趋势.从图6(c)可知,停留时间的增加,路由协议路由开销变化不大.

4 结语

网络仿真是检验网络协议和算法的正确性和有效性常用手段,是测试网络性能的有效方法[9].该文基于NS2平台,以AODV路由协议为研究对象,分析了AODV协议在NS2中的实现过程,通过设置仿真场景,对新协议进行测试和验证,仿真结果验证了新协议的有效性.采用NS2仿真软件进行协议、算法开发及评估具有效果直观,开发效率高,成本低,灵活性好等优点,对研究人员有一定的参考价值.

[1]王辉.NS2网络模拟器的原理和应用[M].西安:西北工业大学出版社,2008.

[2]沈明玉,杨帆.Ad Hoc网络中改进的能量意识的多径AODV算法研究[J].计算机工程与应用,2011(14):80-82.

[3]王琦进,齐晓霞,侯整风.移动Ad Hoc网络路由协议性能仿真研究[J].微计算机信息,2011(4):166-168.

[4]周中伟,李阳,周中意,等.基于Ad Hoc网络路由协议的研究[J].中南林业科技大学学报,2010(11):157-163.

[5]于斌,孙斌,温暖.NS2与网络模拟[M].北京:人民邮电出版社,2007.

[6]Ekram H,Issariyakul T.Introduction to Network Simulator NS2[M].Springer,2009.

[7]马军.一种基于AODV的多路径路由协议[J].计算机应用与软件,2010(03):219–221.

[8]任兴田,王勇.基于蚁群算法的自适应ad hoc路由协议[J].北京工业大学学报,2012(5):744-748.

[9]周德荣,夏龄,舒涛,等.NS2网络协议虚拟仿真实验平台研究[J].实验技术与管理,2014,31(3):87-90.

猜你喜欢

网络协议路由分组
铁路数据网路由汇聚引发的路由迭代问题研究
一种基于虚拟分扇的簇间多跳路由算法
分组搭配
探究路由与环路的问题
一种蓝牙多跳网络协议的设计与研究
怎么分组
分组
基于DPI技术的语音视频流量监控系统设计与实现
基于预期延迟值的扩散转发路由算法
基于lwIP的电梯实时通话系统实现