-
基于网络仿真器
NS2
的
Ad
hoc
网络路由
协议仿真
p>
作者:马崇霄、吴长奇
引言
NS2(Network
Simulation Version 2)
是一种功能强大的网络模拟仿真
器,
它是用
C++
和<
/p>
OTCL
两种语言完成的。
C++
语言编写协议执行模块,
OTCL
语言
编写模拟任务。
NS2
主要针对有线局域网、无线局域网、
Ad
Hoc
网络、卫星通信网、路由选择协议、
组播路由协议等
进行网络模拟仿真。
尽管一些文献
[1,2]
基于
NS
已经做过
Ad Hoc
网络中的几种单径路由协
议的性能仿真分析,但很少文献给出仿真各个步骤中的详细
分析程序,本文以
AODV
(
Ad
Hoc
On-demand
Distance
Vector
)路
由协议为例,详细介绍了整个仿
真过程的步骤和所使用的程序,并绘出图表。
1
、
AODV
路由协议简介
AODV
综合使用了
DSDV
(
Destination-Sequenced
Distance-Vector
)中
目标序列号和
DSR
(
Dynamic
Source Routing
)中按需路由发现技术,提供了一
种按需单径距离矢量无环路由。该协议主要分为路由发现和路由维护两部分。
路由发现:当源节
点需要与其它节点通信但没有到该目的节点的路由
时,它就广播路由请求
RREQ
,当其它节点收到这个
RREQ
时,首先判断是否收到
过具有相
< br>同源节点和目的节点的
RREQ
,如果是重复收到就丢弃
,如果没有就利
用
RREQ
中的信息建
立反向路由。如果中间节点含有到目的节点的路由,就发送
路由应答
RREP
给源节点,否则广播该
RREQ
。当
RREQ
的目的节点收到
RREQ
时,
同样建立反向路由,然后向
RREQ
的源节点发送
RREP
。<
/p>
< br>路由维护:
节点通过
MAC
层周
期性广播
hello
消息来判断链路状态,
如
果该节点连续
3
次未收到
Hello
响应消息,
就认为链路已经断开,
并删除包含该
链
路的路由信息,发起路由错误
RERR
,通知相邻结点和相
应的上游结点删除因
链路断开而导致目的结点不可达的路由信息。
2
、
A
ODV
路由协议的仿真过程
2.1 NS2
仿真一般步骤
NS2
仿真可以分
为构件的扩展阶段,仿真阶段,对仿真结果分析阶段。
一般分为以下几个步骤:
(1)
编写所需构件:
即新构件的添加或移植。
(2)
测试:
测试自
己编写的构件是否通过。
当
NS
库中的
构件满足仿真需
要(例如我们对
NS
库
已有的
AODV
、
DSDV
、
DSR
等协议进行仿真),则第
1
步和
第
2
< br>步可以省略,仿真过程直接从第
3
步开始。
(3)
编写
Otcl
脚本文件:
配置仿真网
络的拓扑结构,
确定链路基本特性,
移动节点所使用的路由协议
,
节点的数量等,
并进行端设备的协议绑定,
< br>设置仿
真使
用的场景和传输负
载(
TCP
流或
CBR
流),设置仿真的开始和结束时间等。
并在脚本文件里设置
trace
对象,
trace
文
件是记录仿真过程中发生所有事件
的文件。也可以同时设置
na
m
对象,
nam
是用于演示网络运行动
画的工具。
(4
)
用
NS
命令执行脚本文件:
执行后会在与脚本文件同一目录下生成
*.t
r
的文件,记录仿真结果。如果在脚本文件中设置了
nam
p>
对象,则会在同一
目录下生成
*.nam<
/p>
的文件。
(5)
分析
trace
文件:由于
p>
trace
文件比较大,我们需要编写
ga
wk
程序
进行仿真后期的数据处理
(<
/p>
计算分组投递率、
路由负载、
吞吐量等<
/p>
)
,
再用
gn
uplot
或者
matlab
等绘图工
具将处理后获得的数据绘制成图形,以便更直观的分析比
较协议的性能。
2.2
仿真出
trace
文件的过程
由于
AODV
是
NS2
组件库里
的自带协议,故仿真过程直接从编写脚本文
件开始。笔者使用
R
ed
Hat
LINUX9.0
操作
系统下的
NS2.26
版本进行仿真。仿真
过程如下:
(1)
利用
NS
工具
生成业务场景文件,在
ns-2.26/indep-
utils/
目录下输入命令:
ns
–
type
cbr
–
nn
50
–
seed
1
–
mc
10
–
rate
2.0
>cbr1
p>
该命令创建了一个具有
50
个移动节点、<
/p>
10
对通信连接、每秒钟发送两
个分组的
以
CBR
为业务源的通信场景文件
cb
r1
。
(2)
利用
NS
工具
setdest
生成移动场景文件,在
ns-2.26
/indep-utild/cum-scen-
gen/setdest
目录下输入命令:
./setdest
–
n 50
–
p 0
–
s 20
–
t 300 -x 1000
–
y 300 >scence1
该命令创建一个具有
5
0
个节点、
节点在每个地点停留
0
p>
秒
(即不停留)
、
最大移动速度
20m/s,
仿真时间
3
00
秒,长
1000
米,宽
300
米的移动场景文件
scence1
。
(3)
编写脚本文件,下面给出仿真过程中使用的
:
#=====================================
#
Define options
#=====================================
set val(chan) Channel/wireless
set val(prop) Propagation/TwoRayGrond;
set val(netif) Phy/WirelessPhy
set val(mac) Mac/802_11
set val(ifq) Queue/DropTail/PriQueue
set val(ll) LL
set
val(ant) Antenna/OmniAntenna
set
val(ifqlen) 50
set val(nn) 50
set opt(cp) “cbr1”
set opt(sc) “scence1”
#===============================
# Main Program
#===============================
set ns_ [new Simulator]
set
tracefd [open w]
$$ns_ trace-all
$$tracefd
$$ns_ use-newtrace
set namtracefd [open w]
$$ns_ namtrace-all-wireless $$namtracefd
1000 300
set topo [new Topography]
$$topo load_flatgrid 1000 300
set god_ [new God]
create-
god $$val(nn)
$$ns_ node-
config
–
adhocRouting
$$val(rp)
-llType $$val(ll)
-macType $$val(mac)
-ifqType
$$val(ifq)
-ifqLen $$val(ifqlen)
-antType $$val(ant)
-propType $$val(prop)
-phyType $$val(netif)
-channelType $$val(chan)
-topoInstance $$topo
-agentTrace ON
-routerTrace
ON
-macTrace OFF
-movementTrace OFF
<
br>路由开销、 的空间中随机配置
for {set i 0} {$$ i
set node_($$i) [$$ns_ node]
$$node_ ($$i) random-motion 0
}
source $$opt(cp)
source $$opt(sc)
for {set i
0}{$$i<$$val(nn)}{incr i}{
$$ns_ at 300.1
“$$node_($$i) reset”;
}
$$ns_ at 300.2 “stop”
$$ns_ at 300.3
“puts
”NS
exiting?
”; $$ns_
halt”
proc stop {} {
global ns_ tracefd namtracefd
$$ns_ flush-trace
close
$$tracefd
close $$namtracefd
exec nam &
exit 0
}
$$ns_ run
(4)
将步骤
(1)
与(
2
)中的业务文件和场景文件放在
与
TCL
脚本文件同
一目录下。否则需
要在
中指出业务文件和场景文件所在的绝对路径。
(5)
在
NS
目录下执行命令
:ns , <
/p>
执行完后在脚本文件同一目录
下会出现
<
/p>
和
两个文件。仿真数据结果保存在
中,使
用文本编辑器可以打开
文件。
2.3
分析
trace
文件
<
/p>
运行
NS
后生成的
结果输出文件一般都比较大,
我们需要编写程
序(使用
gawk
语言、
ja
va
语言、
perl
语言等)对其进行
数据统计和提
取,获
取我们所需的一
些性能数据
(如分组投递率、
路由发起频率、
丢包率
等)。本文使用
NS
自带工具
gawk
语言编写了一
些性能分析程序后用
matlab
绘
制出图表,进行协议性能分析。
采用的仿真场景是在
1000m×300m
50
个移动节点,
最大移动速度是
20m/s
,
仿真时
间为
300
秒。
该场景为节点高速移动
的场景。
节
点的运动符合
Random
Waypoint
模型,
每个节点将会在移动
范围内随机选择一个
目的地,
以给定的速度移动至该目的地,<
/p>
然后停留于原地一段时间,
然后再随机
选
取下一个目的地
进行下一次的移动。详细的模拟参数记录列表如下:
表
1
仿真参数表:
参数类型
参数值
Simulation
Time 300 sec
Simulation Terrain
1000m*300m
Number of nodes 50
Mobility Model Random waypoint
Mobility 0~20m/s
Radio
frequency 2.4GHZ
Channel Bandwidth
2Mbps
Mac protocol 802.11
Transmission range 250m
仿真中选择
CBR<
/p>
源来产生
UDP
业务,每个
CBR
源每秒钟发送
2
个<
/p>
CBR
数据包,
每个数据包
512
字节。
本文对于
10
个和
20
个
C
BR
业务源轻载和中载两
种情况分别进行仿真实验。
几个
gawk
性能分析程序(针对新的
trace
格式)如
下:
?分组投递率=
×100%
#
BEGIN{
sends=0;
recvs=0;
}
$$0~/^s.*AGT/{
sends++;
}
$$0~/^r.*AGT/{
recvs++;
}
END{
printf(”r/s ratio:%.4f
n”,(recvs/sends));
}
p>
备注:丢包率=
1
-分组投递率,即丢失的
数据包分组数目与发送的数据包分组
数目之比。
?路由发起频率=
#
BEGIN{
requests=0;
frequency=0;
}
{
id=$$5;
source_ip=$$57;
-
-
-
-
-
-
-
-
-
上一篇:从“时效性”到“实效性”
下一篇:2019年北京市普通高中会考数学试卷