好文档 - 专业文书写作范文服务资料分享网站

基于ns2无线传感网--adhoc网络仿真--设计本科学位论文

天下 分享 时间: 加入收藏 我要投稿 点赞

的ns-default.tcl,有想要进一步了解的人,可以去查看此档。另外,在节点n1到n3之间有一条固定的传输速率的联机(Constant Bit Rate,CBR),CBR应用程序是架构在UDP之上,因此必需在n1使用UDP agent来产生”udp”用来发送UDP封包,在n3上使用Null agent来产生”sink”以接收由n1传送过来的UDP封包,然后把接收的封包释放。CBR的传送速度为1Mbps,每一个封包大小为1Kbytes。CBR是在0.1秒开始传送,在4.5秒结束传输;FTP是在1.0秒开始传送,4.0秒结束传输。 [Simulation Topology]

Ns2.35里面的simple.tcl例子仿真结果:如下

仿真结束后,会产生两个档案,一个是out.nam,这是给NAM用的,用来把仿真的过程用可视化的方式呈现出来,这可以让使用者用”看”的方式去了解封包

11

传送是如何从来源端送到接收端。另一个档案是out.tr,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间0.1秒的时候,从n1传送到n2。这个档案对我们做效能分析很重要,所以要先对这个档案的格式做仔细的介绍。

每一笔记录的开始都是封包事件发生的原因,若是r则表示封包被某个节点所接收,若是+则表示进入了队列,若是-则表示离开队列,若是d则表示封包被队列所丢弃。接着的第二个字段表示的是事件发生的时间;字段三和字段四表示事件发生的地点(从from node到to node);字段五表示封包的型态;字段六是封包的大小,字段七是封包的旗标标注;字段八表示封包是属于那一个资料流;字段九和字段十是表示封包的来源端和目的端,这两个字段的格式是a.b,a代表节点编号,b表示埠号(port number);字段十一表示封包的序号;最后字段十二表示封包的id。以前面trace file的第一笔为例,意思就是说有一个封包pakcet id为0,资料流id为2,序号为0,长度为1000 bytes,型态为CBR,它是从来源端1.0要到目的地3.1,在时间0.1秒的时候,从节点1进入了节点2的队列中。

接下来,笔者先简单介绍awk,然后如何使用awk去分析trace file,以得到Throughput、Delay、Jitter、和Loss Rate。 [awk] A.简介 awk是一种程序语言。它具有一般程序语言常见的功能。因awk语言具有某些特点,如:使用直译器(Interpreter)不需先行编译;变量无型别之分(Typeless),可使用文字当数组的注标(Associative Array)等特色。因此,使用awk撰写程序比起使用其它语言更简洁便利且节省时间。awk还具有一些内建功能,使得awk擅于处理具资料列(Record),字段(Field)型态的资料;此外, awk内建有pipe的功能,可将处理中的资料传送给外部的 Shell命令加以处理, 再将Shell命令处理后的资料传回awk程序,这个特点也使得awk程序很容易使用系统资源。 B. awk是如何运作的

12

为便于解释awk程序架构,以及相关的术语,笔者就以上面trace file为例,来加以介绍。 A.名词定义:

1. 1. 资料列:awk从资料文件上读取的基本单位,以trace file为例,awk读入的 第一笔资料列为 ”+ 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0” 第二笔资料列为 “- 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0” 一般而言,一笔资料列相当于资料文件上的一行资料。 2. 2. 字段(Field):为数据列上被分隔开的子字符串。

以资料列”+ 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0”为例, 一 二 三 四 五 六 七 八 九 十 十一 十二 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 + 一般而言是以空格符来分隔相邻的字段。

当awk读入资料列后,会把每个字段的值存入字段变量。 字段变量 意义 $0 为一字符串, 其内容为目前awk所读入的资料列. $1 代表 $0 上第一个字段的资料. $2 代表 $0 上第二栏个位的资料. …… …… B.程序主要节构:

Pattern1 { Actions1 } Pattern2 { Actions2 } …………………………… Pattern3 { Actions3 }

一般常用”关系判断式”来当成Pattern。例如: x > 3 用来判断变量x是否大于3 x == 5 用来判断变量x是否等于5

awk提供c语言常见的关系操作数,如:>、<、>=、<=、==、!=等等

Actions是由许多awk指令所构成,而awk的指令与c语言中的指令非常类似。 IO指令:print 、 printf( ) 、getline ...... 流程控制指令 : if ( ...) {...} else {…}、 while(…){…} ……

在awk程序的流程为先判断Pattern的结果,若为真True则执行相对应的Actions,若为假False则不执行相对的Actions。若是处理的过程中没有Pattern,awk会无条件的去执行Actions。

C.工作流程: 执行awk时, 它会反复进行下列四步骤。 1. 自动从指定的资料文件中读取一笔资料列。 2. 自动更新(Update)相关的内建变量之值。

13

3. 逐次执行程序中 所有 的 Pattern { Actions } 指令。 4. 当执行完程序中所有 Pattern { Actions }时,若资料文件中还有未读取的料,则反复执行步骤1到步骤4 。

awk会自动重复进行上述的四个步骤,所以使用者不须在程序中写这个循环。 [End-to-End Delay]

笔者把量测CBR封包端点到端点间延迟时间的awk程序,写在档案measure-delay.awk档案中,读者可以参考此范例,修改成符合读者需求的程序。

4、Ad Hoc网络仿真通信场景的设计与实现

4.1. 设计要求

1) 仿真场景不少于100m X 100m

2) 随机定义一个不少于30个节点的网络18对通信连接 3) 设置一个Sink节点,用于收集所有其他节点发送的数据

4.2. 详细设计

随机建立通信场景文件

步骤一:在终端~/ns-allinone-2.35/ns-2.35/indep-utils/cmu-scen-gen/路径下输入命令: ns cbrgen.tcl -type cbr -nn 30 -seed 1 -mc 10 -rate 2.0 > cbr-30n-18c-2p 注:也可以将cbrgen.tcl复制到所需文件夹下直接命令行运行。 该命令创建了一个具有30个节点、18对通信连接、

每秒钟发送100个分组的以CBR为业务源的通信场景文件cbr-30n-18c-2

4.3、源代码(dd.tcl文件如下)

# 产生一个仿真的对象 set ns [new Simulator]

#针对不同的资料流定义不同的颜色,这是要给NAM用的 $ns color 0 blue $ns color 1 red $ns color 2 white

#开启一个NAM trace file

$ns node-config -Routing AODVRR set nf [open out.nam w]

#开启一个trace file,用来记录封包传送的过程 $ns namtrace-all $nf set nd [open out.tr w] $ns trace-all $nd

#定义一个结束的程序 proc finish {} {

global ns nf nd $ns flush-trace

14

close $nf close $nd

#以背景执行的方式去执行NAM exec nam out.nam & exit 0 }

# Create and configure topography (used for mobile scenarios) set topo [new Topography] # 100mx100m 建立100x100 $topo load_flatgrid 100 100 #产生30个网络节点

for {set i 0} {$i < 30} {incr i} {set node_($i) [$ns node] } for {set i 0} {$i < 30} {incr i} { #把节点连接起来,并且随机分布

$ns duplex-link $node_($i) $node_([expr ($i+1)0]) 1Mb 10ms DropTail }

#建立18条UDP的联机 #

# nodes: 30, max conn: 18, send rate: 0.01, seed: 1

#该命令随机创建了一个具有30个节点、18对通信连接、

#每秒钟发送100个分组的以CBR为业务源的通信场景文件 cbr-30n-18c-100.0p。

# 1 connecting to 2 at time 0.5568388786897245 set udp_(0) [new Agent/UDP] $ns attach-agent $node_(0) $udp_(0)

#在UDP联机之上建立CBR应用程序(下相同) set cbr_(0) [new Application/Traffic/CBR] $cbr_(0) set packetSize_ 500 $cbr_(0) set interval_ 0.01 $cbr_(0) attach-agent $udp_(0) set null_(0) [new Agent/Null]

$ns attach-agent $node_(3) $null_(0) $ns connect $udp_(0) $null_(0)

#设定cbr开始执行时间(下面相同) $ns at 0.5568388786897245 \#

# 4 connecting to 5 at time 5.333118917575632 #

set udp_(1) [new Agent/UDP]

$ns attach-agent $node_(4) $udp_(1) set null_(1) [new Agent/Null]

$ns attach-agent $node_(5) $null_(1)

set cbr_(1) [new Application/Traffic/CBR] $cbr_(1) set packetSize_ 512 $cbr_(1) set interval_ 0.01 $cbr_(1) set random_ 1

$cbr_(1) set maxpkts_ 10000 $cbr_(1) attach-agent $udp_(1) $ns connect $udp_(1) $null_(1)

$ns at 5.333118917575632 \#

# 4 connecting to 6 at time 6.96568928983328

15

基于ns2无线传感网--adhoc网络仿真--设计本科学位论文

的ns-default.tcl,有想要进一步了解的人,可以去查看此档。另外,在节点n1到n3之间有一条固定的传输速率的联机(ConstantBitRate,CBR),CBR应用程序是架构在UDP之上,因此必需在n1使用UDPagent来产生”udp”用来发送UDP封包,在n3上使用Nullagent来产生”sink”以接收由n1传送过来的UDP封包,然后把接收的封包释
推荐度:
点击下载文档文档为doc格式
1nnlu6cxc73qhtz4wh2h1h1yk7phhy00sm9
领取福利

微信扫码领取福利

微信扫码分享