NS2中蚁群算法路由协议的实现_田克纯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、引言
目前,最广泛使用的验证网络协议的正确性和测试相关性能的方法是通过虚拟环境进行模拟仿真。NS2是最流行的进行网络模拟的软件之一,是由美国加州大学的LNBL网络研究组于1989年开发的一个开放源代码的网络仿真软件[1],已广泛被科研院所和各大高校用于网络分析、研究和教学。
蚁群算法是M.Dorigo提出的一种基于生物习性的启发式算法,用于解决复杂组合优化问题。它能在一个合理的时间内对复杂问题有一个较优的结果,在网络路由方面,该算法也体现出了很好的路由性能。虽然NS2集成了大量典型的有线和无线网络下各个层的协议,但还没有提供蚁群算法协议功能,因此以下主要论述把蚁群算法集成到NS2中,并能在Otcl脚本中使用的实现方法。
二、NS2原理[2]
NS2是一个离散事件模拟器,其核心部分是一个离散事件模拟引擎。NS2中有一个“调度器”类,负责记录当前时间,调度网络时间队列中的事件,并提供函数产生新事件,指定事件发生的时间。在一个网络模拟器中,典型的时间包括分组到达,时钟超时等,模拟时钟的推进由事件发生的时间量决定。模拟处理过程的速率不直接对应着实际时间。一个事件的处理可能又会产生后继的时间。模拟器所做的就是不停地处理一个个事件,直到所有的事件都被处理完或者某一特定事件发生为止。
NS2还有一个丰富的构件库,有了这个构件库,用户可以完成自己所要研究的系统的建模工作。NS2的构件库所支持的网络类型包括广域网、局域网、移动通信网、卫星通信网等,所支持的路由方式包括层次路由、动态路由、多播路由等。NS2还提供了跟踪和检测的对象,可以把网络系统中的状态和事件记录下来以便分析。NS2构件库的部分类层次结构如图1所示。
NS2中的网络构件一般由相互关联的两个类来实现,一个在C++中,一个在Otcl中,这种方式称为分裂对象模型。构件的主要功能是在C++中实现的,Otcl中的类则主要提供C++对象面向用户的接口。C++对象和Otcl对象之间的这种连接机制就是TclCL。这种分裂对象模型增强了可扩展性和可组合性。
NS2中蚁群算法路由协议的实现
田克纯,农秀凤,王方
(桂林电子科技大学信息与通信学院,广西桂林541004)
摘要:网络模拟是当前网络通信研究中的重要手段之一,在网络通信的建设开发过程中起着不可替代的作用。
NS2由于其扩展性强、执行效率高,已被广泛应用于各种网络的仿真。首先介绍NS2的原理,然后结合
蚁群算法介绍如何添加新协议到NS环境下并实现,最后给出新协议AntSense的仿真结果。
关键词:网络模拟;NS2;蚁群算法;新协议
中图分类号:T P319文献标识码:A文章编号:1008-3545(2010)04-0043-04
43
三、蚁群算法新协议扩展实现
要实现研究者提出的网络协议,就要对你NS2进行扩展。下面对蚁群算法在NS2中的实现进行说明。
首先,将下载好的A nt S ense包放在NS安装文件根目录下,A nt S ense包括了7个文件:
antsense.h:定义所有必要的的定时器和路由代理,用来实现协议功能的头文件。
antsense.cc:实现所有定时器、路由代理和Tcl 链接的文件。
antsense_pkt.h:声明了在网络中节点间相互交换路由协议分组格式的头文件。
neighbour_table.h:这个头文件中声明路由表
neighbour_table.cc:路由表的实现。
antsense_queue.h:队列声明
antsense_queue.cc:队列实现
其次,把已经实现A nt S ense协议路由代理的代码集成在NS2里:
(1)分组类型声明,把PT_ANTSENSE添加到common/packet.h枚举类型值列表中,并在p_info 类中为新的分组类型定义一个名称name_[PT_ANTSENSE]=“antsense”。
(2)跟踪支持,要记录分组信息,需要在CMUTrace类中实现format_antsense()函数,为了能够调用该函数,还需要修改trace/cmu-trace.cc文件中的format()函数添加case PT_ANTSENSE:format_antsense(p,offset);
break;
(3)通过编辑queue/priqueue.cc里的recv()函数声明蚁群包的队列优先级。
(4)修改OTcl库文件,包括添加分组类型,在tcl/lib/ns-packet.tcl文件列表中添加相应的协议名AntSense;绑定属性的默认值,在tcl/lib/ns-default.tcl中添加Agent/AntSenseset accessible_var_true;为创建节点添加过程,修改tcl/lib/ns-lib.tcl创建一个使用AntSense路由协议的无线节点过程。
最后,需要对新增加的文件进行编译并连接到NS2中,修改Makefile文件,增加新类antsense/antsense.o antsense/antsense_queue.o antsense/neigh-bour_table.o\的编译。在UNIX提示符下执行下面
图1NS2构件库的部分类层次结构44
命令:
[ns-2.29]$touch common/packet.cc
[ns-2.29]$make
至此,蚁群算法协议就可以实现了,在网络模拟中要设定AntSense协议作为无线网络路由协议时,只需在配置无线节点时把-adhocRouting属性设置为AntSense即可。
四、仿真实验
完成了新协议的编译之后,下面编写脚本进行网络仿真测试。首先建立网络拓扑结构,场景设置为500m×500m的矩形区域,其中有2个节点,仿真时间150秒,两节点初始位置分别为(5,2,0)、(390,385,0),在10秒时,节点0移动到(20,18,0),在50秒时节点1移动到(25,20,0),100秒时又移动到(490,480,0)。在节点0和1之间尝试建立ftp连接。以下是部分代码。
设定模拟使用的一些参数:
set val(chan)Channel/WirelessChannel;#channel type
set val(prop)Propagation/TwoRayGround;#radio-propagation model
set val(netif)Phy/WirelessPhy;#network in-terface type
set val(mac)Mac/802_11;#MAC type
set val(ifq)Queue/DropTail/PriQueue;#in-terface queue type
set val(ll)LL;#link layer type
set val(ant)Antenna/OmniAntenna;#antenna model
set val(ifqlen)50;#max packet in ifq
set val(nn)2;#number of mobilenodes
set val(rp)AntSense;#routing protocol
节点0和1之间的TCP连接:
set tcp[new Agent/TCP]
$tcp set class_2
set sink[new Agent/TCPSink]
$ns_attach-agent$node_(0)$tcp
$ns_attach-agent$node_(1)$sink
$ns_connect$tcp$sink
set ftp[new Application/FTP]
$ftp attach-agent$tcp
$ns_at10.0"$ftp start"
仿真结果产生一个out.tr文件,该文件存放着整个模拟过程的数据,以下为其中的一部分:s50.740674799_0_RTR---0antsense33[00 00]------[0:255-1:255320][antsense0x20]s52.000000000_0_AGT---3tcp40[0000]------[0:01:0320][00]00
r52.000000000_0_RTR---3tcp40[000 0]------[0:01:0320][00]00
f52.099167187_1_RTR---0antsense33[00 00]------[0:255-1:255320][antsense0x20]s55.440269095_0_RTR---0antsense33[00 00]------[0:255-1:255320][antsense0x20]f56.887764816_1_RTR---0antsense33[00 00]------[0:255-1:255320][antsense0x20]f57.220190076_1_RTR---0antsense33[00 00]------[0:255-1:255320][antsense0x20]s60.165389458_0_RTR---0antsense33[00 00]------[0:255-1:255320][antsense0x20]在理解了跟踪文件之后,可以利用gawk等编程语言对Trace文件进行分析,研究、提取或者计算出感兴趣的数据,最后用Xgraph或Gnuplot等图形绘制工具以图形化的方式显示出统计结果。
五、结束语
NS2采用分裂模型机制使得模拟效率得到了提高,配置的灵活性也得到了增强。蚁群算法在寻优路由方面有着天然的优越性,并且具有很强的可靠性和可扩展性,因此把它集成扩展到NS2当中,实现了蚁群算法路由协议。在模拟过程中,只需在设置路由协议的代码中进行设置即可。另外还可以对其修改改进,进一步研究蚁群算法路由协议。(下转第52页)
45