NS2仿真:两个移动节点网络连接及协议性能分析

您所在的位置:网站首页 ns数据移动 NS2仿真:两个移动节点网络连接及协议性能分析

NS2仿真:两个移动节点网络连接及协议性能分析

2024-07-13 16:13| 来源: 网络整理| 查看: 265

NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日

 

一、实验环境(网络平台,操作系统,网络拓扑图)

运行平台:虚拟机VMwareWorkstation11.0

操作系统:Linux/CentOS6.5仿真分析工具:NS2.35中的仿真软件ns,图形界面nam,编译工具awk,图表编辑器xgraph

网络拓扑图:

二、  实验目的

使用NS仿真软件模拟简单移动节点的网络传输模型,掌握无线网络传输协议的特性,并分析在模型图中,使用不同的网络传输协议的性能。使用NS2仿真工具xgraph画出吞吐量、丢包率以及延时等三种反映网络性能的指标,并作进一步的分析。

 

三、  实验内容及步骤(包括主要配置流程,重要部分截图)

在实验1的基础上,通过学习静态网络传输的简单模型,进一步学习无线自组织网络,其中包括一些常见的无线网络传输协议DSDV(Destination Sequenced Distance Vector)目标序列距离路由矢量算法、AODV(Adhocon DemandDistance Vector Routing)Adhoc网络的距离矢量路由算法、DSR(Dynamic Source Routing)等。比较在该模型下,使用不同路由协议时,各网络传输连通的状况。根据图表总结归纳各网络协议的优缺点以及性能分析。

3.1编写一个tcl脚本一般分为以下几个步骤 1) 创建模拟器对象

用来定义和控制模拟过程。在这个过程中,首先创建一个simulator 对象。

# 创建新模拟器

set ns  [new Simulator]

2) 设置跟踪文件

# 跟踪文件和NAM文件创建

set tracefd  [open trace2.trw]

$ns   trace-all $tracefd

set namtrace [open sim12.nam w]

$ns   namtrace-all-wireless$namtrace $val(x)  $val(y)

# 吞吐量跟踪文件建立(用于最后分析) 

set f0 [open out02.tr w]

set f1 [open out12.tr w]

set f2 [open out22.tr w]

set f3 [open out32.tr w] 

set f4 [open out42.tr w]

# 丢包率跟踪文件建立(用于最后分析) 

set f5 [open lost02.tr w]

set f6 [open lost12.tr w]

set f7 [open lost22.tr w]

set f8 [open lost32.tr w] 

set f9 [open lost42.tr w]

# 传输延时跟踪文件建立(用于最后分析) 

set f10 [open delay02.tr w]

set f11 [open delay12.tr w]

set f12 [open delay22.tr w]

set f13 [open delay32.tr w]

set f14 [open delay42.tr w]

3) 创建网络拓扑结构。

set topo [new Topography]

# 场景范围设置

$topo load_flatgrid $val(x) $val(y)

#定义属性值(无线网络环境的固定模式) 

set val(chan) Channel/WirelessChannel    ;#信道类型

set val(prop) Propagation/TwoRayGround  ;#无线传输类型

set val(netif) Phy/WirelessPhy                   ;#网络接口类型

set val(mac) Mac/802_11                          ;# MAC类型

set val(ifq) Queue/DropTail/PriQueue      ;#接口队列类型

set val(ll) LL                                                        ;#链路层类型

set val(ant) Antenna/OmniAntenna          ;#天线模式

set val(ifqlen) 50                                         ;#包的最大缓存数

set val(nn) 10                                               ;#移动节点个数

set val(rp) AODV                                        ;# 路由协议(实验2的关键因素,与AODV替换)

set val(x) 400                                             ;# 定义场景中X轴最大值

set val(y) 400                                             ;# 定义场景中Y轴最大值

Mac/802_11 set RTSThreshold_ 3000

Mac/802_11 set basicRate_ 1Mb 

Mac/802_11 set dataRate_ 2Mb

4) 配置节点属性

# 对本次实验中将出现的无线节点的属性进行详细设置 

        $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 ON                   

                      

       for {set i 0} {$i $holdseq } {

      puts $f10 "$now [expr ($bw10 -$holdtime)/($bw11 - $holdseq)]"        

} else {

         puts $f10 "$now [expr ($bw11 -$holdseq)]"        

  }

if { $bw13 >$holdseq1 } {

            puts $f11 "$now [expr ($bw12 -$holdtime1)/($bw13 - $holdseq1)]"        

} else {

                puts $f11 "$now [expr($bw13 - $holdseq1)]"        

  }

if { $bw15 >$holdseq2 } {

                puts $f12 "$now [expr($bw14 - $holdtime2)/($bw15 - $holdseq2)]"

} else {

      puts $f12 "$now [expr ($bw15 -$holdseq2)]"        

  }

if { $bw17 >$holdseq3 } {

                puts $f13 "$now [expr($bw16 - $holdtime3)/($bw17 - $holdseq3)]"

} else {

                puts $f13 "$now [expr($bw17 - $holdseq3)]"        

  } 

if { $bw19 >$holdseq4 } {

                puts $f14 "$now [expr($bw18 - $holdtime4)/($bw19 - $holdseq4)]"

} else {

                puts $f14 "$now [expr($bw19 - $holdseq4)]"        

  }

9) 使用模拟器对象的run过程开始模拟

proc stop {} {

           global ns  tracefd f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11f12 f13 f14

         #关闭trace文件,停止记录  

              close $f0          

              close $f1         

              close $f2

              close $f4          

              close $f5         

              close $f6         

              close $f7

              close $f8         

              close $f9         

              close $f10         

              close $f11 

              close $f12

              close $f13

              close $f14

         # 用 xgraph 把吞吐量,丢包率,和延时显示在图像上 

         exec xgraph out02.tr out12.trout22.tr  -geometry 800x400 &

         exec xgraph lost02.tr lost12.trlost22.tr lost32.tr -geometry 800x400 &

         exec xgraph delay02.tr delay12.trdelay22.tr delay32.tr -geometry 800x400 &

         exec nam sim12.nam 

         # 重置Trace文件 

         $ns flush-trace         

              close $tracefd

              exit 0

              }

puts"Starting Simulation..."

$ns run

10) 结果分析

模拟结束后,将得到保存模拟过程的traced文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用xgraph等画图工具直观的显示数据分析结果。

四、  实验结果(包括最终实验结果,重要部分截图) 4.1移动模型节点切换分析

仿真开始时间为0.0s,此时执行代码$ns at0.0  "$app1 start",节点0和1之间通过中间的8个基站,寻找最佳的传输路径。其中节点0和1配置为sink节点,中间的基站为代理节点。节点0作为发射器,节点1作为接收器。

 

 

 

       在第10s时,此时节点0和1通过节点2传输数据。节点0和1开始向着同一个方向前行,节点1的速度是节点0的两倍,也就意味着在节点1跑一圈的时候节点0与节点1相遇。(0->2->9->1)

 

 

第14.2s时,由于网络负载或者一些其他的原因导致节点0和1之间数据传输中断,节点0开始丢失数据,此时的数据记录文件开始记录丢失的数据,在切换到其他基站转发节点时,记录延时文件开始记录数据。

 

 

 

第15.8s时,由于节点的运动,出现远离最初连接的基站节点,距离远到数据无法继续传输时,此时节点0发送的信息几乎全部丢失,于是所有节点重新开始匹配新的路由信息。

 

 

第16.2s时,节点经过再次的匹配,连接到新的基站节点3和节点4上,数据传输开通。(0->3->4>1)

 

 

 

19s时节点1远离节点4,出现严重的数据丢失后,切换到节点7节点通路为:0->7->1,可以看出,在节点比较少的情况下,AODV协议是的节点之间始终保持在最佳连通状况。

 

 

第24.6s时,节点0和1在出现中断后,由于两个节点之间的距离在可以通信的范围之内,节点0和1直接通信,无需其他中转节点。这样的连通将持续保持到节点1超越节点0,并逐渐远离节点0的过程中,直到通信距离过远,不得已断开为止。

 

第30.4s节点1开始超越节点0,此时节点0和1继续保持通信。

 

 

第39.2s时,节点1远离节点0,由于距离过远,发生中断,并重新通过匹配,借助于其他节点保持连接。

 

 

 

正如这样的通信方法将一直保持到50.0s,即在第50s时,节点0和1各自回到原始的位置,通信路线为:0->5->3->1

 

 

 

4.2吞吐量、丢包率以及延时的分析

如下图所示,节点0和节点1之间数据传输,节点1的吞吐量保持相对稳定的增长。

如下图所示,节点0和节点1之间数据传输,节点1的丢包在15s左右出现严重的缺失,这是因为15s时,节点0和1由于通信距离不在两者在范围之内,重新进行切换到新的基站节点中去。

 

节点0和1在仿真开始时处于未接通状态,所以首先要经过各节点进行协商,设置出转接通信的节点,此时由上述的实验步骤可以看出,首先设置节点2和9为基站节点,负责转发节点0发出的信息。

五、试验中的问题及心得 5.1一些出现最多的问题 问题1

Problems foundwith input data.

Problems foundwith input data.

Problems foundwith input data.

记录实验数据的文件没有设置开始记录的相关命令,应考虑加上如下的代码:

# 定时发包开始及结束 

$ns at 0.0"record"

问题2

ns: puts"NS EXITING..."  _o3 halt:wrong # args: should be "puts ?-nonewline? ?channelId? string"

    while executing

"puts"NS EXITING..."  _o3 halt"

考虑结束控制命令$ns  at 60.0 "puts \"NSEXITING...\"  $ns halt",中是否缺少分号”;”,即$ns  at 60.0 "puts \"NSEXITING...\" ; $ns halt"。

还要考虑数据传输开始和结束的控制命令,也有可能引起这样的错误。

六、实验思考

本次实验主要是通过学习移动节点在实际中是如何,通过不同的协议,比如在本实验中采用的是AODV路由协议,这时,通信节点之间自动的按照协议所规定的方法在仿真场景中进行连接。在上述实验中不宜使用DSDV协议,因为DSDV路由协议所有的节点都必须被告知路由信息,节点将长时间处于寻找路由的过程中,而不是进行通信。因此DSDV协议适用于节点稀疏时,易于实现的模型当中。

而AODV路由协议不同于表驱动路由协议,是一种特殊的按需距离矢量的反应式路由协议,每个节点中记录自己可达的节点,一旦出现某个节点不可达,则自动删除该记录,修复链路的连通性。大多数时间保持在一种可通信的状态。这种协议适用于节点密度比较大的情况,节和节点之间几乎是可实时通信的情况。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3