NS2相关学习——在ns中模拟无线场景

之前学习的都是有线场景下的NS2相关应用,现在开始,终于要学习无线啦!无线是我研究的重点,要好好学习呀!


在本节中,我们将学习使用ns中提供的移动无线仿真模型。 该部分由两部分组成。 在第一小节中,我们讨论如何创建和运行一个简单的2节点无线网络仿真。 在第二部分中,我们将扩展我们的示例(在第1小节中),创建一个比较复杂的无线方案。

1、创建简单的无线场景

我们将模拟一个非常简单的2个节点无线场景。 拓扑由两个移动节点(node_(0)和node_(1))组成。 在这个例子中边界定义为500mX500m的区域。 节点最初在边界的两个相对端开始相对移动。在两个移动终端之间建立TCP连接。 节点之间的数据包在彼此的听觉范围内进行交换。 当它们离开时,数据包开始下降。

首先,我们创建一个tcl脚本,命名为simple-wireless.tcl。

移动节点由网络组件组成,网络组件包括链路层(LL),接口队列(IfQ),MAC层,无线信道节点发送和接收信号(有关这些网络组件的详细信息参见请参见ns手册第15章第1节)。 在无线模拟开始时,我们需要为每个这些网络组件定义类型。此外,我们需要定义其他参数,如天线类型,无线电传播模型,移动终端使用的自组织路由协议的类型等。

下面我们开始我们的脚本——simple-wireless.tcl,这个脚本列出了上面说的那些参数,具有一定的参考意义。

# ======================================================================
# Define options
# ======================================================================
set val(chan)         Channel/WirelessChannel  ;# channel type 通道类型
set val(prop)         Propagation/TwoRayGround ;# radio-propagation model 无线传播模型
set val(ant)          Antenna/OmniAntenna      ;# Antenna type 天线类型
set val(ll)           LL                       ;# Link layer type 链路层类型
set val(ifq)          Queue/DropTail/PriQueue  ;# Interface queue type 接口队列类型
set val(ifqlen)       50                       ;# max packet in ifq Ifq的大小
set val(netif)        Phy/WirelessPhy          ;# network interface type 网络接口类型
set val(mac)          Mac/802_11               ;# MAC type MAC类型
set val(rp)           DSDV                     ;# ad-hoc routing protocol ad-hoc路由协议
set val(nn)           2                        ;# number of mobilenodes 移动节点的数目
接下来我们来到程序的主要部分,首先创建模拟器的一个实例

set ns_    [new Simulator]


然后通过打开文件simple.tr设置跟踪支持,并调用过程trace-all {},如下所示:

set tracefd     [open simple.tr w]
$ns_ trace-all $tracefd    

接下来创建一个拓扑对象,跟踪拓扑边界内的移动节点的移动。

set topo	[new Topography]

我们之前提到,移动节点在500mX500m的拓扑内移动。 我们提供边界的x和y坐标(x = 500,y = 500):

$topo load_flatgrid 500 500

整个区域被分解为网格,网格分辨率的默认值为1.可以将不同的值作为第三个参数传递给load_flatgrid {}。
下面我们创造god对象(可以理解为一个很厉害的具有上帝视角的对象)
create-god $val(nn)
god(通用运营总监)是用于存储关于全局环境、网络、节点的所有信息,但是对于模拟参与者来说是透明的。目前,god对象存储了所有移动节点的数量,一个节点到达另外一个节点最小跳数表。因为在模拟运行期间计算下一跳信息相当耗时,所以下一跳信息通常在模拟开始之前从运动模式文件中加载到god对象中。 然而,为了保持这个例子简单,我们避免使用运动模式文件,因此不能向上帝提供下一跳信息。 运动模式文件的使用和向上帝馈送下一跳信息将在下一小节的示例中显示。
程序create-god在〜ns / tcl / mobility / com.tcl中定义,它只允许在仿真期间创建God对象的单个全局实例。 除了评估功能之外,上帝的对象是由移动节点中的MAC对象内部调用的。 所以即使我们不能利用god的评估目的(如本例),我们仍然需要创造god。
接下来,我们创建移动节点。 节点创建API已被修改,在这里我们将使用新的API来创建移动代码。
首先,我们需要在创建节点之前配置节点。 节点配置API可以包括定义寻址类型(平面/层次等),自适应路由协议的类型,链路层,MAC层,IfQ等。配置API可以定义如下:
 (parameter examples)
# $ns_ node-config -addressingType flat or hierarchical or expanded
#                  -adhocRouting   DSDV or DSR or TORA                ###设置移动节点所需要的路由协议
#                  -llType	   LL                                 ###设置移动节点的逻辑链路层
#                  -macType	   Mac/802_11                         ###设置移动节点的MAC层
#                  -propType	   "Propagation/TwoRayGround"         ###设置移动节点的无线信号传输模型
#                  -ifqType	   "Queue/DropTail/PriQueue"          ###设置移动节点的队列类型
#                  -ifqLen	   50                                 ####设置移动节点的队列长度
#                  -phyType	   "Phy/WirelessPhy"                  ####设置移动节点的物理层模型
#                  -antType	   "Antenna/OmniAntenna"              ####设置移动节点的天线类型
#                  -channelType    "Channel/WirelessChannel"          ####设置移动节点的无线信道类型
#                  -topoInstance   $topo                              ####设置移动节点的拓扑对象
#                  -energyModel    "EnergyModel"                      ###设置节点的能量模型
#                  -initialEnergy  (in Joules)                        ###设置节点初始能量,单位是J(焦耳)
#                  -rxPower        (in W)                             ###设置节点的接收功率,单位是瓦(w)
#                  -txPower        (in W)                             ###设置节点的发送功率,单位是瓦(w)
#                  -agentTrace     ON or OFF                          ###是否打开应用层的trace
#                  -routerTrace    ON or OFF                          ###是否打开路由层的trace
#                  -macTrace       ON or OFF                          ###是否打开mac层的trace
#                  -movementTrace  ON or OFF                          ###是否打开节点位置和移动信息的trace

用于创建移动节点的配置API如下所示:
# Configure nodes$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) \-topoInstance $topo \-channelType $val(chan) \-agentTrace ON \-routerTrace ON \-macTrace OFF \-movementTrace OFF

然后我们创建两个移动节点
for {set i 0} {$i < $val(nn) } {incr i} {set node_($i) [$ns_ node ]$node_($i) random-motion 0       ;# disable random motion 这个节点不能乱动}    

下面给移动节点他们开始的位置
#
# Provide initial (X,Y, for now Z=0) co-ordinates for node_(0) and node_(1)
#
$node_(0) set X_ 5.0
$node_(0) set Y_ 2.0
$node_(0) set Z_ 0.0$node_(1) set X_ 390.0
$node_(1) set Y_ 385.0
$node_(1) set Z_ 0.0
Node0的起始位置为(5,2),而Node1在位置(390,385)处开始。

接下来产生节点移动
#
# Node_(1) starts to move towards node_(0)
#
$ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0"
$ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0"# Node_(1) then starts to move away from node_(0)
$ns_ at 100.0 "$node_(1) setdest 490.0 480.0 15.0"
$ ns_ at 50.0“$ node_(1)setdest 25.0 20.0 15.0”表示在时刻50.0s时,node1以15m / s的速度开始向目标移动(x = 25,y = 20)。 该API用于改变移动节点的移动方向和速度。
接下来,在两个节点之间建立数据流。
# TCP connections between node_(0) and node_(1)set tcp [new Agent/TCP]
$tcp set class_ 2
set sink [new Agent/TCPSink]
$ns_ attach-agent $node_(0) $tcp    ###node0是源节点
$ns_ attach-agent $node_(1) $sink   ###node1是目标节点
$ns_ connect $tcp $sink             ###吧源和目标连接起来
set ftp [new Application/FTP]       ###使用的应用层协议是ftp
$ftp attach-agent $tcp              ###把应用层协议和传输层协议连接起来 
$ns_ at 10.0 "$ftp start" 
这将在两个两个节点之间建立起来一个TCP连接。

然后,我们需要在模拟结束时定义停止时间,并告诉移动节点复位,实际上重置其内部网络组件,
#
# Tell nodes when the simulation ends
#
for {set i 0} {$i < $val(nn) } {incr i} {$ns_ at 150.0 "$node_($i) reset";
}
$ns_ at 150.0001 "stop"
$ns_ at 150.0002 "puts \"NS EXITING...\" ; $ns_ halt"
proc stop {} {global ns_ tracefdclose $tracefd
}
在时刻150.0s时模拟停止,节点在此时被重置。在150.0002s时调用“$ ns_ halt”。 调用stop {}来清除跟踪并关闭跟踪文件。

最后执行“开始模拟”的命令。
puts "Starting Simulation..."
$ns_ run

保存文件simple-wireless.tcl。

完整的脚本如下所示:
# Copyright (c) 1997 Regents of the University of California.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#      This product includes software developed by the Computer Systems
#      Engineering Group at Lawrence Berkeley Laboratory.
# 4. Neither the name of the University nor of the Laboratory may be used
#    to endorse or promote products derived from this software without
#    specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# simple-wireless.tcl
# A simple example for wireless simulation# ======================================================================
# Define options
# ======================================================================
set val(chan)           Channel/WirelessChannel    ;# channel type
set val(prop)           Propagation/TwoRayGround   ;# radio-propagation model
set val(netif)          Phy/WirelessPhy            ;# network interface type
set val(mac)            Mac/802_11                 ;# MAC type
set val(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
set val(ll)             LL                         ;# link layer type
set val(ant)            Antenna/OmniAntenna        ;# antenna model
set val(ifqlen)         50                         ;# max packet in ifq
set val(nn)             2                          ;# number of mobilenodes
set val(rp)             DSDV                       ;# routing protocol# ======================================================================
# Main Program
# ======================================================================#
# Initialize Global Variables
#
set ns_		[new Simulator]
set tracefd     [open simple.tr w]
$ns_ trace-all $tracefd# set up topography object
set topo       [new Topography]$topo load_flatgrid 500 500#
# Create God
#
create-god $val(nn)#
#  Create the specified number of mobilenodes [$val(nn)] and "attach" them
#  to the channel. 
#  Here two nodes are created : node(0) and node(1)# configure node$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			for {set i 0} {$i < $val(nn) } {incr i} {set node_($i) [$ns_ node]	$node_($i) random-motion 0		;# disable random motion}#
# Provide initial (X,Y, for now Z=0) co-ordinates for mobilenodes
#
$node_(0) set X_ 5.0
$node_(0) set Y_ 2.0
$node_(0) set Z_ 0.0$node_(1) set X_ 390.0
$node_(1) set Y_ 385.0
$node_(1) set Z_ 0.0#
# Now produce some simple node movements
# Node_(1) starts to move towards node_(0)
#
$ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0"
$ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0"# Node_(1) then starts to move away from node_(0)
$ns_ at 100.0 "$node_(1) setdest 490.0 480.0 15.0" # Setup traffic flow between nodes
# TCP connections between node_(0) and node_(1)set tcp [new Agent/TCP]
$tcp set class_ 2
set sink [new Agent/TCPSink]
$ns_ attach-agent $node_(0) $tcp
$ns_ attach-agent $node_(1) $sink
$ns_ connect $tcp $sink
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ns_ at 10.0 "$ftp start" #
# Tell nodes when the simulation ends
#
for {set i 0} {$i < $val(nn) } {incr i} {$ns_ at 150.0 "$node_($i) reset";
}
$ns_ at 150.0 "stop"
$ns_ at 150.01 "puts \"NS EXITING...\" ; $ns_ halt"
proc stop {} {global ns_ tracefd$ns_ flush-traceclose $tracefd
}puts "Starting Simulation..."
$ns_ run

在与tcl脚本同一个目录文件下,产生了一个trace文件。

trace文件中,AgentTraces在其第5个字段中标有AGT,RouterTrace和MACTrack标有RTR。


链接:http://www.isi.edu/nsnam/ns/tutorial/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中一种基于蚁群算法的能量有效路由)

牙说&#xff1a;这篇论文是研究蚁群算法在能量有效路由协议的过程中必读的一篇文章&#xff0c;原是全英文&#xff0c;在这里按照自己的理解大致翻译成中文&#xff0c;好好学习&#xff0c;与君共勉。 论文题目&#xff1a;An Energy-Efficient Ant-Based Routing Algorith…

活在幻梦中的你我

其实仔细想想,人类和地球上的其它物种有什么不同呢?可能仅有的不同是,人类会去相信那本来并不存在的事情. 并且会为了那种虚幻的东西为止拼搏、努力。比如科技的发展&#xff0c;不就是人类在实现自己想象中的事物么&#xff0c;飞机、轮船、家电、计算机等等&#xff0c;无一…

An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中基于蚁群算法的能量有效路由)2

牙说&#xff1a;接着上一篇继续写。论文标题&#xff1a;An Energy-Efficient Ant-Based Routing Algorithm forWireless Sensor Networks作者&#xff1a;Tiago Camilo, Carlos Carreto, Jorge S Silva, Fernando Boavida正文&#xff1a; 2、相关工作可以考虑无线传感器网络…

NS2仿真分析无线网络的攻击防御(1)

这个学期有个选题是NS2仿真分析无线网络的攻击防御&#xff0c;比较有意思的样子&#xff0c;现在来慢慢学一下这个是什么东西。 首先&#xff0c;还是一篇文章&#xff08;老长老长了&#xff09;&#xff0c;还是全英文的&#xff0c;还是先来分析一下它到底在说什么&#x…

NS2仿真分析无线网络的攻击防御(2)

牙说&#xff1a;继续上一篇博文进行翻译。 4. NS和我们的工作 我们试图评估黑洞攻击在无线Ad-hoc网络中的影响。 为了实现这一点&#xff0c;我们已经使用NS 网络模拟 [14]程序模拟了一个含有黑洞节点的无线自组网络场景。为了模拟无线自组织网络中的黑洞节点&#xff0c;我…

Java集合之HashMap源码分析

以下源码均为jdk1.7 HashMap概述 HashMap是基于哈希表的Map接口的非同步实现. 提供所有可选的映射操作, 并允许使用null值和null健. 此类不保证映射的顺序. 需要注意的是: HashMap不是同步的. 哈希表 哈希表定义: 哈希表是一种根据关键码去寻找值的数据映射结构, 该结构通…

NS2相关学习——可靠的MANET应用程序的Gossip协议分析

好久不写&#xff0c;应该努力啦&#xff01;老师把这篇论文给了我&#xff0c;现在还不知道它在讲什么&#xff0c;来边翻译边学习吧&#xff01; 文章链接&#xff1a;https://www.researchgate.net/publication/316844643_Analyzing_Gossip_Protocols_for_Reliable_MANET_Ap…

Java集合之LinkedList源码分析

概述 LinkedLIst和ArrayLIst一样, 都实现了List接口, 但其内部的数据结构不同, LinkedList是基于链表实现的(从名字也能看出来), 随机访问效率要比ArrayList差. 它的插入和删除操作比ArrayList更加高效, 但还是要遍历部分链表的指针才能移动到下标所指的位置, 只有在链表两头的…

lex和yacc环境配置

lex和yacc的使用很简单&#xff0c;但环境配置却是各种问题&#xff0c;本章说明lex和yacc在windows下的环境配置。 软件需求&#xff1a; 系统 win7-64位(win7-32, win8, win10全部通过) c编译器&#xff1a; vs2010(2008,2013,2015也全部通过) lex和yacc编译器&#xff1a…

Java集合之Vector源码分析

概述 Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面就不具体分析源码了, 具体可以查看ArrayList中的源码分析. Vector源码分析 1.主要字段 2.构造函数 3.增删改查 其他方法…

Gossip协议的P2P会员管理

阅读此论文主要目的在于理解gossip协议及其背后的原理&#xff0c;此部分详细翻译&#xff0c;其余部分看时间 文章标题&#xff1a;Gossip协议的P2P会员管理 作者&#xff1a;Ayalvadi J. Ganesh, Anne-Marie Kermarrec, and Laurent Massoulie Abstract&#xff1a;基于…

Java集合之LinkedHashSet源码分析

概述 LinkedHashSet与HashSet类似, 不同的是LinkedHashSet底层使用LinkedHashMap维护元素插入的顺序. LinkedHashSet继承自HashSet, 只是重写了HashSet的构造方法, 初始化一个LinkedHashMap, 其他均与HashSet相同. LinkedHashSet构造方法 HashSet的构造方法: 以上几乎就是Li…

2016-2017NBU期末考试记录

又是一年期末考 这个学期考的少&#xff0c;就两门 还是来记录一下都考了什么东西吧 首先编译&#xff1a;编译的题目是开始十道判断题&#xff0c;后面全都是大题。大题内容有&#xff1a;画出第二次递归过程中&#xff0c;活动记录中静态链和动态链的情况&#xff1b;给出一…

Java集合之ArrayList源码分析

概述 ArrayList可以理解为动态数组, 根据MSDN的说法, 就是Array的复杂版本. 与数组相比, 它的容量能动态增长. ArrayList是List接口的可变数组的实现. 实现了所有可选列表操作, 允许包括null在内的所有元素. 数组的特点, 查询快增删慢. 每个ArrayList实例都有一个容量, 该容…

视频业务原理

最近要学习如何进行视频的用户体验测量&#xff0c;首先学习最基础的知识&#xff0c;视频业务的原理是什么。 研究的视频的应用层协议是HTTP&#xff0c;使用的传输层协议是TCP。 工作过程如下&#xff1a;客户端向服务器请求相应的视频信息&#xff1b;服务器响应请求发回视…

Java集合之Hashtable源码分析

概述 Hashtable也是基于哈希表实现的, 与map相似, 不过Hashtable是线程安全的, Hashtable不允许 key或value为null. 成员变量 Hashtable的数据结构和HashMap一样, 采用 数组加链表的方式实现. 几个成员变量与HashMap一样: 方法 Hashtable的方法与HashMap基本一样, 只是 Ha…

视频质量检测中的TP、FP、Reacll、Precision

在看论文《Measuring Vedio QoE from Encrypted Traffic》的时候看到TP&#xff08;True Positives&#xff09;、FP&#xff08;False Positives&#xff09;、Precison、Recall的概念&#xff0c;这属于数据挖掘方面的内容&#xff0c;学习之后特来记录。 首先&#xff0c;下…

Java集合之LinkedHashMap源码分析

概述 HashMap是无序的, 即put的顺序与遍历顺序不保证一样. LinkedHashMap是HashMap的一个子类, 它通过重写父类的相关方法, 实现自己的功能. 它保留插入的顺序. 如果需要输出和输入顺序相同时, 就选用此类. LinkedHashMap原理 LinkedHashMap是如何保证输入输出顺序的呢? L…

视频流传输协议RTP/RTCP/RTSP/HTTP的区别

在转载之前&#xff1a;我研究主要是基于HTTP的视频流&#xff0c;正在研读的论文名&#xff1a;“Modeling and Analyzing the Influence of Chunk Size Variation on Bitrate Adaptation in DASH”&#xff0c;里面有一句话&#xff0c;“Compared with early connection-ori…

Java集合之HashSet源码分析

概述 HashSet是基于HashMap来实现的, 底层采用HashMap的key来保存数据, 借此实现元素不重复, 因此HashSet的实现比较简单, 基本上的都是直接调用底层HashMap的相关方法来完成. HashSet的构造方法就是创建HashMap: 基本操作 1.添加操作 2.删除操作 3.迭代器 其他方法基本也是调…