桂林理工大学本科毕业设计·论文
set Stime1 0.02 set Stime2 0.25
#仿真开始时间1 #仿真开始时间2
set End 3 #仿真结束时间 第二,产生一个NS实例,设置记录文件:
set ns_ [new Simulator] #产生以模拟实例 set tracefd [open AODV.tr w] #产生一个trace文件 $ns_ trace-all $tracefd
set namtrace [open AODV.nam w] #产生一个nam文件 $ns_ namtrace-all-wireless $namtrace $val(x) $val(y) $ns_ puts-nam-traceall {# nam4wpan #} Mac/802_15_4 wpanNam namStatus on 第三,产生一个拓扑实例: set topo [new Topography] $topo load_flatgrid $val(x) $val(y) set god_ [create-god $val(nn)] set chan_1_ [new $val(chan)] 第四,配置移动节点参数:
$ns_ node-config -adhocRouting $val(rp) \\ #路由协议
-llType $val(ll) \\ #逻辑链路层 -macType $val(mac) \\ #MAC类型 -ifqType $val(ifq) \\ #队列类型 -ifqLen $val(ifqlen) \\ #队列长度 -antType $val(ant) \\ #天线类型 -propType $val(prop) \\ #无线信道传输模式 -phyType $val(netif) \\ #物理层类型 -topoInstance $topo \\ #拓扑对象
-agentTrace OFF \\ #关闭应用层对象的trace -routerTrace OFF \\ #关闭路由的trace -macTrace ON \\ #启用MAC的trace -movementTrace OFF \\ #关闭移动trace -channel $chan_1_
第五,产生一个节点实例:
16
桂林理工大学本科毕业设计·论文
for {set i 0} {$i < $val(nn) } {incr i} { }
source ./AODV_topo.scn #调用仿真场景文件 第六,定义ftppro过程: proc ftppro { src dst starttime } { global ns_ node_
set tcp($src) [new Agent/TCP] eval \\$tcp($src) set packetSize_ 60 set sink($dst) [new Agent/TCPSink]
eval $ns_ attach-agent \\$node_($src) \\$tcp($src) #分组的源节点地址 eval $ns_ attach-agent \\$node_($dst) \\$sink($dst) #分组目的节点地址 eval $ns_ connect \\$tcp($src) \\$sink($dst) #建立源节点到目的节点的TCP连接 set ftp($src) [new Application/FTP] #建立一个FTP数据流 eval \\$ftp($src) attach-agent \\$tcp($src) $ns_ at $starttime \}
第七,调用ftppro: set lowSpeed 0.20ms set highSpeed 1.4ms
Mac/802_15_4 wpanNam PlaybackRate $lowSpeed ftppro 8 2 $Stime1 ftppro 4 1 $Stime2
第八,定义通信协议仿真时,各几点间产生的分组流动的颜色: Mac/802_15_4 wpanNam FlowClr -p AODV -c tomato Mac/802_15_4 wpanNam FlowClr -p tcp -s 8 -d 2 -c blue Mac/802_15_4 wpanNam FlowClr -p ack -s 2 -d 8 -c blue Mac/802_15_4 wpanNam FlowClr -p tcp -s 4 -d 1 -c green Mac/802_15_4 wpanNam FlowClr -p ack -s 1 -d 4 -c green 第九,定义节点尺寸:
for {set i 0} {$i < $val(nn)} {incr i} {
17
set node_($i) [$ns_ node]
;# disable random motion
$node_($i) random-motion 0
桂林理工大学本科毕业设计·论文
$ns_ initial_node_pos $node_($i) 2 }
第十,定义仿真结束:
for {set i 0} {$i < $val(nn) } {incr i} { $ns_ at $End \for {set i 0} {$i < $val(nn) } {incr i} { $ns_ at $End \}
$ns_ at $End \$ns_ at $End \
4.3 AODV协议仿真
如4.1所述设置并产生了仿真场景文件后,在场景代码中直接调用已经生成的场景文件并设置两条通信链路,节点2和8、4和1分别在0.02s、0.25s开始建立通信,数据流格式为FTP格式。运行代码,可得4-1、4-2仿真效果图:
图4-1 仿真区域不变情况下12节点的一个随机仿真效果图
18
桂林理工大学本科毕业设计·论文
图4-2 仿真节点不变情况下仿真区域为40*40M的一个随机仿真效果图 下面介绍一下仿真区域为50*50不变,节点数为12个的仿真模型,通过这个模型了解AODV协议工作过程。
AODV工作过程:
仿真时间到了0.02s,节点8开始向周围节点即邻居广播RREQ信息,然后广播信息继续扩散,仿真时间到了0.25s,节点4开始向周围节点即邻居广播RREQ信息,然后广播信息继续扩散。经过多点路由请求广播后,节点8已经找到目标节点2的位置,节点2依靠邻居节点的广播,接收节点8的RREQ之后,返回RREP信息给节点8并建立通信(节点4和1也是通过相同的工作过程建立通信)。当节点8获得节点2传回来的路由信息以后,则按照该路径开始传送FTP信息。而收到源自于节点8的信息后,节点2会向路径返回ACK信息,此时双方建立连接。在AODV中这条路由会被一直维护,直到通信结束或者出现网络拥塞,链路失效。
运行仿真代码之后,系统会产生一个. nam格式的动画演示文件和一个. tr文件。其中. nam文件如上图4-1、图4-2所示。在NAM中进行仿真演示能直观地观察到通信节点之间的通信情况,包括通信节点路由寻径、通信链路建立、节点之间通信的过程。生成的.tr文件中包含的是格式化的内容,每一行包括17列,各个字段之间是以空格或Tab键区分开的。如图4-3所示:
19
桂林理工大学本科毕业设计·论文
图4-3 .tr文件截图
其中,第1列表示事件的类型:包括了r、s、f、四种情况,依次表示为接收、发送、转发、丢弃。
第2、3列表示事件发生的时间和节点ID
第4列表示发生事件所在的层,有四种不同的类型:MAC表示MAC层,AGT表示代理层,RTR表示路由层,IFQ表示MAC层与链路层之间。
第5、6列表示标志项和分组的ID。
第7列表示分组的类型:CBR表示等速的数据流,ACK表示探测的数据流。 第8列表示分组的大小,单位为bit。
第9-12列表示MAC层信息,包含了4项内容:第9列内容表示发送节点在无线信道上发送该分组所期望的时间值,用16进制表示,单位时间值用秒表示;第10列内容表示接收节点的MAC地址;第11列内容表示发送节点的MAC地址;第12列内容表示MAC层封装的分组类型。
第13列表示分隔符。
第14-17列表示IP层的信息,包含了4项内容:第14列内容表示发送分组的源节点地址,格式为“节点号:端口号”;第15列内容表示接收分组的目的节点地址,
20