摘要:基于NS2的Ad hoc网络路由协议的仿真和改进文献很多,但少有给出仿真实现的具体过程,让一些入门阶段的研究人员知其然而不知其如何然。该文以Ad hoc 网络典型路由协议AODV为例,介绍了AODV协议的基本原理,利用 NS2平台对其仿真,并对产生的跟踪文件进行性能分析,编写脚本批处理分析文件生成结果数据,用gunplot对数据绘图直观展现。结果说明AODV路由协议对不同传输机制的数据流的支持差异是很明显的,CBR流比TCP流的传输效率更高、网络开销更少。完整的OTcl场景脚本和参数设计给入门级网络协议研究者提供了很好的参考。
关键词:Ad Hoc网络; NS2;AODV;仿真;性能分析
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)30-7021-04
NS2 Simulates Typical Routing Protocol of Ad Hoc Network and Analyze its Performance
CHEN Ai-xia, DU You-fu, CHEN Zhong-ju
(Computer Science College, Yangtze University, Jingzhou 434023, China)
Abstract: Though there were lots of papers referring to simulation and improving routing protocols for Ad hoc network based on NS2, few of them introduced the specific procedure of simulation. So it is difficult for researchers at the introductory level to know well. Here sets a case study of AODV, a typical protocol of Ad Hoc network. Firstly, brief the principles of ADOV protocol. Secondly, present its concrete simulation on NS2, analyze the result trace file, write a script to batch process analysis files for last, and show plot data directly using gunplot. Results indicate that the difference is very obvious while AODV Routing Protocol supporting for data stream of different transport mechanisms. CBR stream transmission is more efficient than that of TCP and less network overhead. A set of OTcl scene scripts with parameters designed offers good references to elementary learner.
Key words: Ad Hoc network; NS2; AODV; Simulation; performance analysis
Ad hoc网络是无线通信网络的一种,但有别于传统的无线网络,不需要依赖有线网络作为基础设施的基站或热点,并且无线节点之间可以自由的通信[1]。Ad hoc网络的显著特点就是无中心、自组织、支持动态的网络拓扑结构、移动终端的可携便捷性、支持多跳路由等,它的出现真正实现任何环境任何时间的自由通信,并且为军事领域、救灾环境提供有效的解决方案,成为当今无线网络研究的主流[2]。路由协议作为移动自组网的核心技术之一,具有很高的研究价值。
NS2是面向对象、离散事件驱动的一款开源的协议仿真软件。NS2 使用两种语言,C++和OTcl,底层具体协议模拟,高效处理字节、报头等信息用C++编写,NS2编译执行。
1 AODV介绍
AODV(Ad Hoc On-demand Distance Vector)是基于距离矢量算法按需路由的一种典型Ad Hoc网络路由协议,结合了DSR和DSDV的特点,使用DSR中基于广播的路由发现机制和采用DSDV的逐跳路由、序列号机制 [4]。其主要任务就是路由发现和路由维护。
路由发现:信源节点需发送一个数据包到信宿节点时,路由不知道或路由已经过期,就会进行路由发现。信源节点首先向所有邻居节点广播路由请求RREQ(Route Request),请求报文中携带以下信息字段:<信源地址、信源序列号、广播ID、信宿地址,信宿序列号,跳数计数器〉,<信源地址、广播ID>唯一标识一个路由请求。中间节点收到RREQ时进行判断,如果信宿节点是自己或者是知道信宿节点的路由就会沿着反向路由进行路由答复RREP(Route Reply);否则根据<信源地址、广播ID>序列对判断是否有重复收到,有就丢弃,没有就记录反向路由信息,并向邻居节点转发该路由请求报文。在反向将RREP分组转发给信源节点的过程中,中间节点又会建立到信宿节点的正向路由。反向路由可以有多条,正向路由只有一条[2][4]。并且路由表中的每条路由信息都和一个计时器有关,计时器结束时路由过期[5]。
路由维护[6]:动态变化的网络拓扑,让已建立好的路由随时可能失效,当活动路由上某一个节点不可到达,其“上游节点”就会主动发送RERR(Router Error)包,并把信宿序列号设为最大,代表最新的路由,并把跳计数设为∞,立即广播至所有邻居节点,直到信源节点被通告到。如果需要,信源节点可以重新路由发现。
2 仿真AODV协议
对协议的仿真有两种,一种是对NS2协议库中自带的协议进行仿真,这时不需要重新编译,直接编写OTcl构造场景模拟;另外就是对现有协议改进、移植协议或编写新的协议等都需要重新编译NS,进行程序调试,协议运行成功了才能进行场景模拟。AODV协议在NS2协议库中已经存在,就从编写场景和设置参数开始即可仿真。
2.1 实验平台和工具
OS:ubuntu12.04 (linux)
NS2:ns2.34版本
数据流生成工具:cbrgen
拓扑场景生成工具:setdest
跟踪文件.tr的分析:gawk
绘图工具:gunplot
2.2 场景建立
OTcl编写脚本文件()[3]
1) 获取从终端输入的节点数
set opt(nn) 0 ;#设定节点变量
proc getopt {argc argv} { ;#定义一个对象过程,获取命令行参数
global opt
set opt(nn) [lindex $argv 0] }
2) 设置无线节点的相关参数
路由协议采用AODV
3) 场景文件和业务文件
set opt(sc) "sc1" ;# 设置运动场景文件变量
set opt(cp) "cb1" ;# 设置业务场景变量
4) 建立模拟器对象和跟踪文件(trace文件和nam文件)
set ns_ ;# 建立一个模拟器对象
#在同目录下建立Trace文件
set tracefd
$ns_ trace-all $tracefd
#采用新的Trace文件格式
$ns_ use-newtrace
#在同目录下建立NAM文件
set namtracefd
$ns_ namtrace-all-wireless $namtracefd 500 500
5) 建立topology对象和god对象
set topo
$topo load_flatgrid 500 500
set god_ ;#god对象
getopt $argc $argv ;# 调用过程获得命令行数据
create-god $opt(nn)
6) 进行无线节点配置
7) 建立无线节点
for {set i 0} {$i < $opt(nn) } { incr i } {
set node_($i) [$ns_ node]
$node_($i) random-motion 0 }
8) 引入节点的运动场景文件和对应的业务文件
source $opt(sc) ;# 读取场景文件
source $opt(cp) ;# 读取业务文件
9) 定义仿真结束时间和结束过程
$ns_ at 200.002 "finish"
$ns_ at 200.003 "puts\" NS exiting...\";$ns_ halt"
proc finish {} { ;#定义一个结束过程
;# 关闭Trace文件和nam文件
}
10) 执行模拟:$ns_ run
表1
[$1\&$3\&$5\&$7\&$19\&$41\&s\&3.367491543\&1\&2\&AGT\&74\&事件\&发生时间\&源节点ID\&下一节点ID\&代理层\&分组id号\&]
2.3 Trace文件性能分析
运行NS 后生成和两追踪文件,.nam文件是动画文件,可以用nam播放,.tr需要编写程序(gawk语言)对其进行分析和统计,才能获取所需的一些网络性能数据(如传输时延、时延抖动、分组投递率、网络吞吐量、路由发现频率等)[7]-[ 9]。该文使用gawk语言编写性能分析程序,对AODV协议的分组投递率、传输时延和路由发起频率三种性能进行分析。截取了.tr文件中的一条记录如下:
s -t 3.367491543 -Hs 1 -Hd -2 -Ni 1 -Nx 356.86 -Ny 29.08 -Nz 0.00 -Ne -1.000000 -Nl AGT -Nw — -Ma 0 -Md 0 -Ms 0 -Mt 0 -Is 1.0 -Id 2.0 -It tcp -Il 552 -If 0 -Ii 74 -Iv 32 -Pn tcp -Ps 45 -Pa 0 -Pf 0 -Po 2
每条记录的字段数根据运动状态会变化,一般表现在记录后部以-P开头的应用层分组字段中,其前不变。
1) 分组投递率[1][3]:
分组投递率是反映网络性能一个很重要的参数,分组投递率越高说明网路的丢包率越低,分组的成功到达率越高。
(分组投递率)G=NRP/NSP
丢包率=1-G
NRP:接受到的总分组个数。
NSP:发送出的总分组个数。
2) 端到端平均时延[1][3]()
网络传输时延D定义为源节点发送出一个分组到目的节点接受到该分组之间的时间差.
D(i)=Rt(i)-St(i)
D(i)为第i个分组的时延,Rt(i)为第i个分组接受的时间,St(i)为第i个分组发送的时间。单个分组的时延不具有代表性,在分析网络时延时一般以平均时延来研究。
平均时延([D])=[1n(i=1nD(i))]
就是统计.tr文件中n个分组的平均传输时延。
3) 路由发起频率[1][3]:
AODV是被动路由协议,当发送分组时路由不存在或动态变化的拓扑导致先路由失效等都会发起路由发现请求。路由发起频率就是在单位仿真时间内,源节点路由发起的次数。
F=[源节点路由发起的次数仿真时间]
2.4 编写shell脚本,自动生成结果数据
本文取用5种不同的节点数20个、30个、40个、50个和60个,并对数据流分别是TCP流和CBR流两种情况来进行仿真实验,由于场景文件是随意生成的,应在同样的数据流下进行多次场景的测试,取平均值进行性能评价。每一轮节点数不同,都要再生成一次业务流文件和场景文件,修改OTcl脚本再模拟,再执行gawk程序分析Trace文件,工作繁琐又效率低。在此编写一个shell脚本自动完成这个工作[3],其nn是节点数目,作为命令行传递的参数。以下是shell文件get_perform:
#! /bin/sh
for i in 20 30 40 50 60; do
ns / -type cbr -nn $i -seed 1 -mc 10 —rate 2 >cb1
(用cbrgen工具[3]创建以CBR为数据源,i个移动节点、10对通信连接、发送速率为0.5的业务场景文件cb1)
/yourfile/ns-allinone-2.34/ns-2.34/indep-utils/cmu-scen-gen/setdest/./setdest -n $i -p 0 -M 20.0 -t 200 -x 500 -y 500 >sc1
(用setdest工具[3]创建i个节点、在长500米,宽500米的范围,节点到每个地点不停留并以最大移动速度20m/s运动,仿真时间200秒的移动场景文件sc1。)
ns $i
gawk -f nn=$i >>delay1
gawk -f nn=$i >> frequence1
gawk -f nn=$i >>getratio1
done
在终端给予get_perform可执行权限chmod +x get_perform,执行get_perform
./get_perform
以上是对CBR流的仿真,生成了delay1、frequence1、getratio1三个数据文件,多次执行脚本get_perfrom,三个数据文件内容不断增加,得到多组数据,对结果取平均值。TCP流的仿真,把类型改为tcp,如下
-type tcp -nn $i -seed 1 -mc 10,修改三个数据输出文件名,其它如上。
2.5 gunplot绘图
对上述shell执行的结果,用gunplot进行绘图[3]。
set multiplot
set size 0.5,0.5
set xlabel "节点个数"
set origin 0.0,0.0
set ylabel "端到端平均时延(s)"
plot "delay1" w lp pt 10 title "cbr" , "delay2" w lp pt 6 title "tcp"
set origin 0.0,0.5
set ylabel "分组投递率(%)"
plot "getratio1" w lp pt 10 title "cbr" , "getratio2" w lp pt 6 title "tcp"
set origin 0.5,0.5
set ylabel "路由发起频率(次/s)"
plot "frequence1" w lp pt 10 title "cbr" , "frequence2" w lp pt 6 title "tcp"
绘图的数据来源文件都是最后求平均得到的数据文件,如delay1,delay2等。得到图表如下:
图1 分组投递率仿真图
图2 端到端平均时延仿真图
图3 路由发起频率仿真图 (下转第7031页)
(上接第7024页)
通过三组数据对比,AODV对于CBR数据流的支持性相对TCP流的支持性更好,同样的节点数前者的分组投递成功率更高(图1) ,端到端平均时延更小(图2) ,路由的发起频率也要低很多(图3) 。TCP流对应的是在TCP连接上建立的FTP流,TCP是面向连接的传输控制协议,提供超时重发、丢弃重复数据、检验数据、流量控制等功能;CBR流是在UDP连接上建立的CBR流,UDP 提供了无连接的数据报服务,不对数据分组进行检查与修改,无须等待对方的应答; UDP的结构及传输机制比TCP的简单,因此网络开销也小。
3 结束语
不同的数据流在变化的网络环境下,AODV协议对哪种数据流支持性会更好些,在本章只做了个简单对比。对其他参数如节点停留时间、发送分组速率、节点最大运动速率、以及场景大小等参数的研究提供了很好的借鉴。
参考文献:
[1] 马崇霄.吴长奇.基于网络仿真器NS2的Ad hoc网络路由协议仿真[J].电子测量技术,2008(5).
[2] 廖登.基于NS2的移动Ad hoc网络典型网络协议比较[J].邵阳学院学报,2005(9).
[3] 黄花吉,冯穗力,等.NS网络模拟和协议仿真[M].北京:人民邮电出版社,2010(5) .
[4] 王晓宇,肖宇.Ad Hoc网络路由协议仿真及性能分析[J].网络地带,2013.
[8] 张菡.基于Ad Hoc网络的AODV路由协议的研究与改进[J].无线互联科技,2014(4).
[9] 蔺绍良,龙海南.基于稳定性的AODV路由协议研究与仿真[J].微型机与应用,2013(20)
[7] 张旭.无线自组织网络路由算法及相关技术研究[D].吉林:吉林大学,2013.
[8] 曹洁,张华隆.城市车载Ad Hoc网络下改进的AODV协议[J].兰州理工大学学报,2013(12).
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。 返回通信学论文列表