如何用NS2仿真自带的协议

作者&投稿:能便 (若有异议请与网页底部的电邮联系)
NS2 路由协议的仿真~

NS2 路由协议的仿真是:
1、可以输出cwnd看看,两个仿真应该是不一样的。
2、能够发送的数据包总数跟tcp拥塞窗口有关,窗口越大,发的越多。路由协议不同,网络的拥塞状况也应该不同,会导致发送端的拥塞窗口变化不一样。
3、在发送端生成的数据包,不是都能在网络中发送的,如果数据包生成过快,超出了窗口上限,就得排队等待了。

如果我们要往NS2中添加自己的模块,那么我们至少要实现两个类:

一, 首先要有一个类继承自TclObject类或者其子类,例如这个Mac802_16类的继承关系为:TclObject/NsObject/Mac /Mac802_16.这个类里面实现了C++类里面的变量与Otcl类的变量的绑定关系,以及我们的模块要实现的一系列算法等等,这个类负责的就是协议 的实现。

这个类,一般需要有构造函数中执行变量的绑定,使用bind()函数,将Otcl变量与C++的成员变量绑定起来。

声 明为protected的command()函数:为Otcl类提供方法,对Otcl中的类的方法进行翻译并执行;对于没有考虑到的或者不能解析的命令, 调用该C++类的父类的command方法。当在Otcl类中调用某个方法时,首先去tcl类中查找并执行该方法;若查找失败,则在该Otcl类对应的 C++类的command方法中查找,若查找仍然失败,则沿着该类的父类一直往上找,尝试调用它们的command方法;若所有父类的command方法 都不能解析,则报告该命令无法执行。

其他的成员变量和成员函数,这是用于实现自己的算法模块的内容。

二,其次我们要定义一个声明为static的类,继承自TclClass类,这个类实现了C++环境里面的类与Otcl环境里面的类的关联,简单点来说,这个类负责与Otcl环境进行关联。取最开头的那段代码;

static class Mac802_16Class : public TclClass

{

public:

Mac802_16Class() : TclClass("Mac/802_16") {}

TclObject* create(int, const char*const*)

{

return (new Mac802_16());

}

} class_mac802_16;

这 一段代码里面,包含了一个将Otcl的类名作为参数传给其父类的构造函数;一个create方法:创建一个C++类的对象实例并返回;该方法的返回类定义 为TclObject*。C++类的类型包含在create方法中,Otcl类的类型包含在TclClass类的构造函数中,因此可以实现C++类和 Otcl类的连接。



接下来,如果我们要实现的类完成以后,将头文件和源文件放置于~ns目录下自己新建的一个子目录,然 后打开~ns/Makefile文件,将“类名.o”添加到该Makefile的OBJ_CC宏定义中,对ns进行编译的时候就能够能够找到该模块的源文 件并将其编译到ns中;如果类中定义了一些变量,打开~ns/tcl/lib/ns-default.tcl文件,为该类对应的Otcl类设置一些初始 值。最后,对Makefile执行指令:make clean,make,对整个ns重新编译,我们的模块就可以添加到ns2中了。

其实 只需要编写一个.tcl脚本文件
set val(mac) Mac/802_11
然后要配置节点参数时 指定
$ns_ node-config- -macType $val(mac)即可
附上例子一枚:
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 ;# 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) 10 ;# number of mobilenodes
set val(rp) DumbAgent ;# routing protocol
set val(x) 600
set val(y) 600

Mac/802_11 set dataRate_ 11Mb

#Phy/WirelessPhy set CSThresh_ 10.00e-12
#Phy/WirelessPhy set RXThresh_ 10.00e-11
#Phy/WirelessPhy set Pt_ 0.1
#Phy/WirelessPhy set Pt_ 7.214e-3

# Initialize Global Variables
set ns_ [new Simulator]
set tracefd [open infra.tr w]
$ns_ trace-all $tracefd

# set up topography object
set topo [new Topography]

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

# Create God
create-god $val(nn)

# Create channel
set chan_1_ [new $val(chan)]

$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 \
-agentTrace OFF \
-routerTrace OFF \
-macTrace ON \
-movementTrace ON \
-channel $chan_1_

for {set i 0} {$i < [expr $val(nn)]} {incr i} {
set node_($i) [$ns_ node]

$node_($i) random-motion 0 ;# disable random motion
set mac_($i) [$node_($i) getMac 0]

$mac_($i) set RTSThreshold_ 3000

$node_($i) set X_ $i
$node_($i) set Y_ 0 ;# Horizontal arrangement of nodes
$node_($i) set Z_ 0.0

}

#Set Node 0 and Node $val(nn) as the APs. Thus the APs are the ends of the horizontal line. Each STA receives different power levels.

set AP_ADDR1 [$mac_(0) id]
$mac_(0) ap $AP_ADDR1
set AP_ADDR2 [$mac_([expr $val(nn) - 1]) id]
$mac_([expr $val(nn) - 1]) ap $AP_ADDR2

#$mac_([expr $val(nn) - 1]) set BeaconInterval_ 0.2

$mac_(1) ScanType ACTIVE

for {set i 3} {$i < [expr $val(nn) - 1]} {incr i} {
$mac_($i) ScanType PASSIVE ;#Passive
}

$ns_ at 1.0 "$mac_(2) ScanType ACTIVE"

Application/Traffic/CBR set packetSize_ 1023
Application/Traffic/CBR set rate_ 256Kb

for {set i 1} {$i < [expr $val(nn) - 1]} {incr i} {
set udp1($i) [new Agent/UDP]

$ns_ attach-agent $node_($i) $udp1($i)
set cbr1($i) [new Application/Traffic/CBR]
$cbr1($i) attach-agent $udp1($i)
}

set base0 [new Agent/Null]

$ns_ attach-agent $node_(1) $base0

set base1 [new Agent/Null]

$ns_ attach-agent $node_(8) $base1

$ns_ connect $udp1(4) $base0
$ns_ connect $udp1(5) $base1

$ns_ at 2.0 "$cbr1(4) start"

$ns_ at 4.0 "$cbr1(5) start"

$ns_ at 10.0 "$node_(4) setdest 300.0 1.0 30.0"

$ns_ at 20.0 "stop"
$ns_ at 20.0 "puts \"NS EXITING...\" ; $ns_ halt"

proc stop {} {
global ns_ tracefd
$ns_ flush-trace
close $tracefd
exit 0
}

puts "Starting Simulation..."
$ns_ run

去买一本NS2无线与多媒体仿真实验
柯志亨写的
这本书比较适合你这种只用入门就可以完成任务的。。


无线传感器的NS2仿真源代码
NS2目录下有自带的基于IEEE802.15.4的例子 \\cygwin\\home\\Administrator\\ns-allinone-2.31\\ns-2.31\\tcl\\ex\\wpan

NS2的基本简介
它本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。目前NS2可以用于仿真各种不同的IP网,已经实现的一些仿真有网络传输协议,比如TCP和UDP,业务源流量产生器,比如FTP,Telnet,Web CBR和VBR;路由队列管理机制,比如Droptail,RED和CBQ;路由算法,比如AODV、DSDV、DSR等无线路由协议。NS2也为进行局域网...

ns2与opnet仿真软件哪个更适合做协议仿真
ns2。原因1:ns2开源免费,opnet非常贵。原因2:ns2因为开源所以允许你灵活修改底层代码(物理层,链路层),opnet因为是商用所以很多模块都是封装的你没法改。原因3:绝大多数的文献中,协议设计和协议优化基本上都是用ns2,很少用opnet。如果用了,那是多半因为底层改动不多。

NS3NS2与NS3的关系
对于NS2用户来说,转向NS3的最大变化体现在脚本语言的选择上。NS2采用OTcl,而NS3则完全依赖C++,不再支持OTcl。NS2的模块混合了C++和OTcl,而在NS3中,所有模块都以C++为基础,只提供了Python语言的绑定。这意味着NS3的仿真脚本可以使用C++或Python编写,虽然nam在NS3中仍可用来演示仿真结果,但新的动画...

OPNET、NS2、OMNET++、OMNET++有什么区别,哪个更容易上手?
这些软件我都用过opnet,ns,omnet。从使用的方便性来说,opnet和omnet比较好,ns系列用起来比较麻烦。opnet的优势在于它是商业软件,所以有一个团队来维护软件。所以opnet的协议包非常完善。基本上市面上常用的协议,如3G、4G等相关协议,在opnet中都有相应的仿真包。所以如果你有很多钱,能买到你需要的...

ns2做图和matlab做图的区别
NS2主要用于网络仿真,其作图需专门的插件 MATLAB既可以仿真也可以画图,画图更好,至于网络仿真,较NS2差一些

ns可以取下使用
ns不可以取下使用。NS2(NetworkSimulator,version2)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器。由UCBerkeley开发而成。它本身有一个虚拟时钟,所有的仿真都由离散事件驱动的,取下来以后无法使用。

关于ns2 网络模拟器
我也是进实验室时,老师让我学ns代码,做无线网络的仿真 学习ns2的话,可以尝试做外包(现在学ns2的人还不是很多)至于对以后找工作有多大帮助就不知道了 我们实验室也才刚开始做有关ns2方面的研究

NS的简介
NS2使用C++和Otcl作为开发语言。NS可以说是Otcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。事件调度器计算仿真时间,并且激活事件队列中的当前事件,执行一些相关的事件,网络组件通过传递分组来相互通信,但这并不耗费仿真时间。所有需要花费仿真时间来处理分组的网络组件都必须要...

关于omnet++仿真
如果说现有成熟的代码比较多的话,那明显就是开源的NS2网络仿真软件了,由于是开源的,所以就没有OPNET商业版的版权问题,高校研究人员大部分使用NS2软件。 OMNET++也是免费开源的,哈哈,不过我没用过,可以...

长沙县17737333463: 如何在ns2中用gpsr路由仿真 -
程蓝沙棘: 这个是在ns2里嵌入了gpsr路由协议后,利用gpsr协议仿真的无线网络的例子.下载的gpsr有一些错误,是在更正了之后才引入的这个协议,并且运行了一下,没有问题.

长沙县17737333463: 西门子PLC编程仿真软件怎么和组态软件(例如MCGS)相结合进行仿真????? -
程蓝沙棘: PLC仿真用PLCSIM ,将程序下载到仿真器中并运行,在组态中的按照真实的PLC选择通讯协议,但是在PG_PC设置中要设为PLCSIM_MPI,即仿真口的MPI通讯

长沙县17737333463: NS2的diffusion协议的仿真中,怎么更改节点的数目. -
程蓝沙棘: 节点数目应该是在TCL脚本里面,通过$opt(nn)或$var(nn)修改的吧.diffusion是路由协议吧,这个和802.15.4扯不上吧

长沙县17737333463: 如何自学无线传感器网络,目前正在用NS2学习无线传感器路由协议的研究,想自学无线传感器网络,不知道需要 -
程蓝沙棘: 展开全部1.编程语言C++ 2.计算机网络 谢希仁的比较好3.无线传感器网络技术与应用4NS-2网络模拟基础与应用 先学好1,2 这两个是基础,然后学3.4能更快一些

长沙县17737333463: ns2与opnet仿真软件哪个更适合做协议仿真 -
程蓝沙棘: ns2.原因1:ns2开源免费,opnet非常贵.原因2:ns2因为开源所以允许你灵活修改底层代码(物理层,链路层),opnet因为是商用所以很多模块都是封装的你没法改.原因3:绝大多数的文献中,协议设计和协议优化基本上都是用ns2,很少用opnet.如果用了,那是多半因为底层改动不多.

长沙县17737333463: ns2 我做的是sctp方向的模拟,我把自己修改后的关于sctp的程序放入ns2中 make clean,make之后还是不运行
程蓝沙棘: 可以尝试先在Makefile中把NS2中自带的生成sctp协议二进制代码的程序屏蔽掉,然后再运行你的程序. 很有可能是因为你sctp协议的代码中定义的Agent或者其它类名称与NS2中自带的相同了. 以上仅供参考~~

长沙县17737333463: 无线传感器的NS2仿真源代码 -
程蓝沙棘: NS2目录下有自带的基于IEEE802.15.4的例子 \cygwin\home\Administrator\ns-allinone-2.31\ns-2.31\tcl\ex\wpan

长沙县17737333463: 仿真mac协议用ns2好,还是opnet,说出理由 -
程蓝沙棘: 各有利弊,入门方面,NS2比较难,OPNET会稍微好些,不过也只是好一点点 NS2开源,OPNET现在有破解的学生版本,所以使用权没什么问题.NS2编程要求高点 ,OPNET编程要求还好,而且MAC协议可以通过编程和图像结合,比较容易实现.但是物理层那边没有NS2完善,OPNET只能通过管道编写一些基本模型.

长沙县17737333463: 802.11协议如何用MATLAB进行仿真测试
程蓝沙棘: 802.11协议一般多数研究者会采用NS2或者OPNET仿真工具进行仿真,MATLAB是数值计算器,无法模拟网络环境.如果你提出了一种802.11新的算法,那么可以用MATLAB,计算出优势,或者自己将802.11的某些功能建立一个数学模型,再用MATLAB计算.

长沙县17737333463: 求NS2大神指点:需要在Tcl进行节点通信模拟,并记录通信时互相发数据的具体时间,以这些时间数据作为输入 -
程蓝沙棘: 很简单,编写TCL脚本进行仿真产生trace文件,用awk脚本语言对trace文件进行处理,得到关键数据,再用gnuplt进行绘图,给分吧!不懂追问!还有你的QQ加不了!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网