NS2仿真:两个移动节点网络连接及协议性能分析
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 <$val(nn) } {incr i} {
set node_($i)[$ns node]
$node_($i)random-motion 0 ;# disable randommotion无法随机游动
}
5) 创建拓扑结构
# 初始化节点位置
$node_(0) set X_ 50.0
$node_(0) set Y_ 50.0
$node_(0) set Z_ 0.0
$node_(1) set X_ 350.0
$node_(1) set Y_ 350.0
$node_(1) set Z_ 0.0
$node_(2) set X_ 110.0
$node_(2) set Y_ 210.0
$node_(2) set Z_ 0.0
$node_(3) set X_ 210.0
$node_(3) set Y_ 310.0
$node_(3) set Z_ 0.0
$node_(4) set X_ 310.0
$node_(4) set Y_ 210.0
$node_(4) set Z_ 0.0
$node_(5) set X_ 210.0
$node_(5) set Y_ 110.0
$node_(5) set Z_ 0.0
$node_(6) set X_ 310.0
$node_(6) set Y_ 110.0
$node_(6) set Z_ 0.0
$node_(7) set X_ 110.0
$node_(7) set Y_ 110.0
$node_(7) set Z_ 0.0
$node_(8) set X_ 110.0
$node_(8) set Y_ 310.0
$node_(8) set Z_ 0.0
$node_(9) set X_ 310.0
$node_(9) set Y_ 310.0
$node_(9) set Z_ 0.0
# 定义节点大小用于在nam中查看
for {set i 0} {$i < $val(nn)} {incr i} {
$ns initial_node_pos$node_($i) 20
}
#节点的运动路径
$ns at 10.0 "$node_(0) setdest 50.0 350.0 30.0"
$ns at 20.0 "$node_(0) setdest 350.0 350.0 30.0"
$ns at 30.0 "$node_(0) setdest 350.0 50.0 30.0"
$ns at 40.0 "$node_(0) setdest 50.0 50.0 30.0"
$ns at 10.0 "$node_(1) setdest 350.0 50.0 60.0"
$ns at 15.0 "$node_(1) setdest 50.0 50.0 60.0"
$ns at 20.0 "$node_(1) setdest 50.0 350.0 60.0"
$ns at 25.0 "$node_(1) setdest 350.0 350.0 60.0"
$ns at 30.0 "$node_(1) setdest 350.0 50.0 60.0"
$ns at 35.0 "$node_(1) setdest 50.0 50.0 60.0"
$ns at 40.0 "$node_(1) setdest 50.0 350.0 60.0"
$ns at 45.0 "$node_(1) setdest 350.0 350.0 60.0"
6) 设置代理和应用层协议并进行绑定
set agent1 [new Agent/UDP] ;# 创建UDP代理
$agent1 set prio_ 0
# 创建Loss Monitor Sink检验丢失分组
set sink [new Agent/LossMonitor]
$ns attach-agent $node_(0)$agent1 ; #发射代理与节点连接(以下几个意义相同)
$ns attach-agent $node_(1)$sink ; # 接收代理与节点连接(以下几个意义相同)
$ns connect $agent1$sink
#两节点相连(以下几个意义相同)
set app1 [new Application/Traffic/CBR]; # 创建流量发射器(以下几个意义相同)
$app1 set packetSize_ 512 ;# 定义包大小(以下几个意义相同)
$app1 set rate_ 600Kb ;# 定义发射频率(以下几个意义相同)
$app1 attach-agent $agent1; # 连接流量发射器和代理(以下几个意义相同)
$ns at 10.0 "$app1 start"
set agent2 [new Agent/UDP]
$agent2 set prio_ 1
set sink2 [new Agent/LossMonitor]
$ns attach-agent $node_(7)$agent2
$ns attach-agent $node_(2)$sink2
$ns connect $agent2$sink2
set agent3 [new Agent/UDP]
$agent3 set fid_ 3
$agent3 set prio_ 2
set sink3 [new Agent/LossMonitor]
$ns attach-agent $node_(8)$agent3
$ns attach-agent $node_(3)$sink3
$ns connect $agent3$sink3
set agent4 [new Agent/UDP]
$agent4 set prio_ 3
set sink4 [new Agent/LossMonitor]
$ns attach-agent $node_(9) $agent4
$ns attach-agent $node_(4)$sink4
$ns connect $agent4$sink4
set agent5 [new Agent/UDP]
$agent5 set prio_ 4
set sink5 [new Agent/LossMonitor]
$ns attach-agent $node_(6)$agent5
$ns attach-agent $node_(5)$sink5
$ns connect $agent5 $sink5
7) 使用模拟器对象的at过程设置节点事件和时间的对应关系。
$ns at 0.0"record"
$ns at 0.0 "$app1 start"
$ns at 60.0"stop"
# 在60.0秒的时候重置节点
for {set i 0}{$i < $val(nn) } {incr i} {
$ns at 60.0 "$node_($i) reset";
}
# 在60.0秒的时候停止
$ns at 60.0 "puts \"NSEXITING...\" ; $ns halt"
8) 记录实验数据
# 创建record函数来记录数据
proc record {}{
global sink sink2 sink3 sink4 sink5 f0 f1 f2f3 f4 f5 f6 f7 f8 f9 holdtime holdseq holdtime1 holdseq1 holdtime2 holdseq2holdtime3 holdtime4 holdseq3 holdseq4 f10 f11 f12 f13 f14 holdrate1 holdrate2holdrate3 holdrate4 holdrate5
set ns [Simulator instance]
set time 0.9 ;# 设置采样时间
set bw0 [$sink set bytes_]
set bw1 [$sink2 set bytes_]
set bw2 [$sink3 set bytes_]
set bw3 [$sink4 set bytes_]
set bw4 [$sink5 set bytes_]
set bw5 [$sink set nlost_]
set bw6 [$sink2 set nlost_]
set bw7 [$sink3 set nlost_]
set bw8 [$sink4 set nlost_]
set bw9 [$sink5 set nlost_]
set bw10 [$sink set lastPktTime_]
set bw11 [$sink set npkts_]
set bw12 [$sink2 set lastPktTime_]
set bw13 [$sink2 set npkts_]
set bw14 [$sink3 set lastPktTime_]
set bw15 [$sink3 set npkts_]
set bw16 [$sink4 set lastPktTime_]
set bw17 [$sink4 set npkts_]
set bw18 [$sink5 set lastPktTime_]
set bw19 [$sink5 set npkts_]
set now [$ns now]
# 计算吞吐量并写入out02.tr、out12.tr、out22.tr、out32.tr文件
puts $f0"$now [expr (($bw0+$holdrate1)*8)/(2*$time*1000000)]"
puts $f1"$now [expr (($bw1+$holdrate2)*8)/(2*$time*1000000)]"
puts $f2"$now [expr (($bw2+$holdrate3)*8)/(2*$time*1000000)]"
puts $f3"$now [expr (($bw3+$holdrate4)*8)/(2*$time*1000000)]"
puts $f4"$now [expr (($bw3+$holdrate5)*8)/(2*$time*1000000)]"
# 计算丢包率并写入lost02.tr、lost12.tr、lost22.tr、lost32.tr
puts $f5"$now [expr $bw5/$time]"
puts $f6"$now [expr $bw6/$time]"
puts $f7"$now [expr $bw7/$time]"
puts $f8"$now [expr $bw8/$time]"
puts $f9"$now [expr $bw9/$time]"
# 计算延时并写入delay02.tr、delay12.tr、delay22.tr、delay32.tr
if { $bw11 >$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路由协议不同于表驱动路由协议,是一种特殊的按需距离矢量的反应式路由协议,每个节点中记录自己可达的节点,一旦出现某个节点不可达,则自动删除该记录,修复链路的连通性。大多数时间保持在一种可通信的状态。这种协议适用于节点密度比较大的情况,节和节点之间几乎是可实时通信的情况。
NS2仿真:两个移动节点网络连接及协议性能分析的更多相关文章
- Ubuntu中的两套网络连接管理方式
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/haifeng_gu/article/details/78286895 Linux里面有两套管理网络 ...
- 【转】一文掌握 Linux 性能分析之网络篇(续)
[转]一文掌握 Linux 性能分析之网络篇(续) 在上篇网络篇中,我们已经介绍了几个 Linux 网络方向的性能分析工具,本文再补充几个.总结下来,余下的工具包括但不限于以下几个: sar:统计信息 ...
- 【转】一文掌握 Linux 性能分析之网络篇
[转]一文掌握 Linux 性能分析之网络篇 比较宽泛地讲,网络方向的性能分析既包括主机测的网络配置查看.监控,又包括网络链路上的包转发时延.吞吐量.带宽等指标分析.包括但不限于以下分析工具: pin ...
- 一文掌握 Linux 性能分析之网络篇(续)
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...
- 一文掌握 Linux 性能分析之网络篇
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...
- 网络连接详细信息出现两个自动配置ipv4地址
问题:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法:先将本地连接ip设置成自动获取,然后点击开始——>运行——>输入cmd,回车,进入命令行界面 ...
- ubuntu的两种网络连接模式
ubuntu的网络连接分成两种类型,一种是modern 模式, 这种模式的配置通过ifconfig命令来进行配置,重启之后失效,这种模式就是在destop 下右上角的网络连接.如图所示 modern模 ...
- 网络连接详细信息出现两个自动配置ipv4地址的解决办法
问题描述:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法: 先将本地连接ip设置成自动获取 点击开始——>运行——>输入cmd,回车,进入命令行界 ...
- 网络拥塞控制与NS2仿真
准备工作: 1. 安装virtual box 虚拟机,并安装虚拟机增强功能,并配制共享文件夹. 共享文件夹自动挂载后的路径为/media/sf_xxx文件夹,xxx为所起的文件名. 解决virtual ...
随机推荐
- rest简单实例
http://www.cnblogs.com/fredric/archive/2012/03/03/2378680.html http://www.thinksaas.cn/topics/0/153/ ...
- python zip文件密码爆破
#!/usr/bin/env # coding=UTF-8 import zipfile import threading import os import sys class CrackZip: d ...
- QT5-控件-QLabel和QLCDNumber-标签显示图片或者视频,LCD用于上位机不错
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> #incl ...
- 你好,C++(21)只要天还没黑,就一直在工地干活-4.3.1 while循环:只要…就一直…
4.3 循环控制语句 在现实世界中,有这样一类现象: 只要油箱中的当前油量小于油箱容量100升,就一直往油箱中加油: 一直不断地为祖国辛勤工作,只要我还活着: 公司100000位员工,每个人的工资都 ...
- linux 添加 $path
# vim /etc/profile在文档最后,添加:export PATH="/usr/local/src/bin:$PATH"保存,退出,然后运行:#source /etc/p ...
- 将EmEditor加入到鼠标右键菜单
在清理系统的时候,无意中将EmEditor的鼠标右键功能给清理掉了,在EmEditor的配置中又没有找到如何加入到鼠标右键菜单的方法,只好使用导入注册表功能了,以下的代码,拷贝到记事本中,保存为EmE ...
- cocos2d(粒子效果编辑器)
ParticleDesigner for Mac下载地址:http://www.cocoachina.com/bbs/read.php?tid=108339 最近在做一款粒子编辑器 其实就是在co ...
- spark 监控--WebUi、Metrics System
Spark 监控相关的部分有WebUi 及 Metrics System; WebUi用于展示Spark 资源状态.Metrics System 整合的指标信息. Ui相关流程 Spark集群启动之后 ...
- hdu 3681 Prison Break
http://acm.hdu.edu.cn/showproblem.php?pid=3681 题意:一个n*m的矩阵,'F'是起点.机器人从F出发,走到G可以充电,走到Y关掉开关,D不能走进,要求把所 ...
- 一句话输出NGINX日志访问IP前十位排行
AWK的数组字段自增加,然后取值的方法,要记得哟. 还有,SORT指定列排行,也常用的.