网络仿真平台NS上的编程实现
NS2网络仿真实验
NS2网络仿真实验实验目的:通过修改NS2的TCP协议代码,来简单的观察窗口阈值的不同算法对网络资源利用率的影响。
实验步骤:1. 实验环境搭建(1)系统环境:虚拟机:virtrulbox;操作系统:linux/ubuntu 10.04工作目录:/home/wangtao/workspace/(2)NS2安装与使用:下载NS2软件包到工作目录,地址/sourceforge/nsnam/ns-allinone-2.33.tar.gz解压(注:以下斜体字为命令行命令)tar -zxf ns-allinone-2.33.tar.gzcd ns-allinone-2.33./install(中间的两个bug已经修改,此处忽略)耐心等待安装完毕后将出现如下画面说明安装正常:接下来是系统环境配置,重新进入终端cd ~vim .bashrc(如果没有安装vim最好安装一下,sudo apt-get install vim)在打开的.bashrc的末尾加上以下内容:PATH="$PATH:/home/wangtao/worksapce/ns-allinone-2.33/bin:/home/wangtao/worksapce/ns-a llinone-2.33/tcl8.4.18/unix"exportLD_LIBRARY_PATH="$LD_LIBRARY_PAHT:/home/wangtao/worksapce/ns-allinone-2.33/otcl-1.13,/ home/wangtao/worksapce/ns-allinone-2.33/lib"exportTCL_LIBRARY="$TCL_LIBRARY:/home/wangtao/worksapce/ns-allinone-2.33/tcl8.4.18/library"保存并退出,重新进入终端安装xgraphsudo apt-get install xgraph运行一个简单的例子,以证明环境安装完成:ns /home/wangtao/workspace/ ns-allinone-2.33/tcl/ex/simple.tcl出现如下图说明成功:2.修改代码vim /home/wangtao/workspace/ns-allinone-2.33/tcp/(将窗口阈值一半变为的窗口阈值1/3——wt_)第一处:……if (cwnd_ < ssthresh_)slowstart = 1;if (precision_reduce_) {//halfwin = windowd() / 2; //wangtaohalfwin = windowd() / 3;第二处:……} else {int temp;//temp = (int)(window() / 2);//wangtaotemp = (int)(window() / 3);halfwin = (double) temp;……第三处:……switch (how) {case 0:/* timeouts *///ssthresh_ = int( window() / 2 );//wangtaossthresh_ = int( window() / 3 );if (ssthresh_ < 2)ssthresh_ = 2;cwnd_ = int(wnd_restart_);break;case 1:……第四处……case 4:/* Tahoe dup acks *///ssthresh_ = int( window() / 2 );//wangtaossthresh_ = int( window() / 3 );if (ssthresh_ < 2)ssthresh_ = 2;cwnd_ = 1;break;default:abort();……3.编写tcl代码,实现一个简单的3节点,2条链路的网络网络如下图,具体代码见附件中的源代码。
一个简单的网络模拟器NS的案例使用
网络模拟器NS-2及其应用分析本例将介绍如何使用一些工具来分析和呈现模拟结果,主要是测量端到端的延迟,而采用的方法一是去分析Trace文件,方法二是去修改NS核心,把所需要测量的数据直接记录下来,限于篇幅我们不在此进一步介绍方法二。
模拟场景如图4所示,包含四个节点(n0,n1,n2,n3),假设n0,n2和n1,n2之间链路带宽2Mbps,延迟为10ms;n2和n3之间链路带宽1.7Mbps,延迟为20ms;每个链路用DropT ail策略;n2和n3之间链路最大队列长度为10;n0,n3之间有一条建立在TCP上的FTP连接,n1,n3之间有一条建立在UDP上CBR连接;CBR是在0.1秒开始发送,在4.5秒结束,FTP是在1.0秒开始发送,在4.0秒结束。
图4 模拟场景3.1 建立Otcl模拟代码文件#创建一个模拟对象set ns [new Simulator]#为数据流定义不同的颜色,供NAM用$ns color 1 Blue$ns color 2 Red#打开一个NAM trace fileset nf [open out.nam w]$ns namtrace-all $nf#打开一个trace file 记录数据包的传送过程set nd [open out.tr w]$ns trace-all $nd#定义一个结束程序proc finish {} {global ns nf nd$ns flush-trace#关闭NAM trace fileclose $nfclose $nd#以后台方式执行NAMexec nam out.nam &exit 0}#创建四个节点set n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]#把节点连接起来$ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail #设定n2和n3之间最大队列长度为10$ns queue-limit $n2 $n3 10#设定节点的位置,供NAM用$ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right#设定n2-n3间的队列位置,供NAM用$ns duplex-link-op $n2 $n3 queuePos 0.5#建立一条TCP连接set tcp [new Agent/TCP]$tcp set class_ 2$ns attach-agent $n0 $tcpset sink [new Agent/TCPSink]$ns attach-agent $n3 $sink$ns connect $tcp $sink#在NAM中,TCP的连接以蓝色表示$tcp set fid_ 1#在TCP连接之上建立FTP应用set ftp [new Application/FTP]$ftp attach-agent $tcp$ftp set type_ FTP#建立一条UDP连接set udp [new Agent/UDP]$ns attach-agent $n1 $udpset null [new Agent/Null]$ns attach-agent $n3 $null$ns connect $udp $null#在NAM中,UDP的连接以红色表示$udp set fid_ 2#在UDP连接之上建立CBR应用set cbr [new Application/Traffic/CBR]$cbr attach-agent $udp$cbr set type_ CBR$cbr set packet_size_ 1000$cbr set rate_ 1mb$cbr set random_ false# 设定FTP和CBR的开始和结束时间$ns at 0.1 "$cbr start"$ns at 1.0 "$ftp start"$ns at 4.0 "$ftp stop"$ns at 4.5 "$cbr stop"#在5.0秒调用finish过程结束模拟$ns at 5.0 "finish"#执行模拟$ns run本例子在FedoraCore4,ns-2.29下测试通过,模拟结束后,产生两个文件,一个是out.na m,这是供NAM用的,用来可视化整个模拟过程;另一个是out.tr,记录了模拟过程中数据包传送中的所有事件,这是我们分析的重点。
基于ns—3构建计算机网络教学仿真平台
基于ns—3构建计算机网络教学仿真平台【摘要】计算机网络原理课程抽象、复杂,基于ns-3构建计算机网络教学仿真平台有助于提高学生的学习兴趣。
【关键词】计算机网络;网络模拟;ns-3;可视化《计算机网络原理》概念抽象、协议繁琐,传统的理论教学以板书或者PPT 进行理论讲解,枯燥乏味。
构建基于新型网络模拟器ns-3[1]构建计算机网络教学仿真平台,能提高计算机网络的教学质量[2]。
1.ns-3简介ns-3广泛汲取了现有优秀开源网络模拟器如ns-2,GTNetS,yans等的成功技术和经验,专门用于教育和研究用途的离散事件模拟器,基于GNU GPLv2许可,可以免费地获取、使用和修改[3-4]。
2.ns-3仿真流程搭建ns-3网络仿真场景和搭建实际网络类似[5-6],首先生成网络节点(Node),然后为节点安装网络设备(NetDevice)及相应的传输媒体(Channel),接下来安装网络协议,包括应用层(Application),传输层,MAC层,ns-3提供了多个应用层和传输层协议,数据包(Packets)通过协议栈(Protocol stack)向下传递给网络设备(类似于网卡,实现了MAC层和物理层协议),于是如图1所示数据包就像在真实网络中一样流动。
3.ns-3仿真实例通过仿真实例展示基于ns-3构建的计算机网络教学仿真平台的优势。
仿真场景如图2所示,网络分成两部分:基于CSAM/CD协议的有线局域网和点到点的通信链路。
其中节点0是服务器;节点1有两块网卡,一块网卡和局域在一个网段,另一块网卡和服务器在一个网段,负责局域网和服务器的通信。
3.1 仿真脚本下面我给出C++脚本的关键代码(p2p网络的部分,csma网络和其代码类似)://生成节点:NodeContainer p2pNodes;p2pNodes.Create (2);//配置网卡信道参数并安装网络设备:PointToPointHelper pointToPoint;pointToPoint.SetDeviceAttribute (“DataRate”,StringValue (“5Mbps”));pointToPoint.SetChannelAttribute (“Delay”,StringValue (“2ms”));NetDeviceContainer p2pDevices;p2pDevices = pointToPoint.Install (p2pNodes);//安装网络协议栈并配置IP地址:InternetStackHelper stack;stack.Install (p2pNodes.Get (0));Ipv4AddressHelper address;address.SetBase (“10.1.1.0”,”255.255.255.0”);Ipv4InterfaceContainer p2pInter faces;p2pInterfaces = address.Assign (p2pDevices);//安装应用程序,Node0为服务器,Node5为客户机:UdpEchoServerHelper echoServer (9);ApplicationContainer serverApps = echoServer.Install (p2pNodes.Get (0));UdpEchoClientHelper echoClient (p2pInterfaces.GetAddress (0),9);//配置路由Ipv4GlobalRoutingHelper::PopulateRoutingTables ();//利用追踪系统捕获网络数据包:pointToPoint.EnablePcapAll (“p2p_csma”);csma.EnablePcap (“p2p_csma”,csmaDevices.Get (0),true);3.2 网络仿真演示图3是ns-3可视化模块PyViz在线显示实例仿真场景的拓扑结构、网络配置及通信时的画面。
基于免费软件ns的无线网络仿真
基于免费软件ns的无线网络仿真
王瑜;焦永革;孟涛;林家薇
【期刊名称】《无线电工程》
【年(卷),期】2004(034)001
【摘要】通信网络的日新月异,各种网络方案和协议日趋复杂,网络规模日趋庞大,对网络研究人员而言,掌握网络仿真的重要性是不言而喻的.着重介绍免费网络仿真软件ns的安装使用和仿真原理,并结合移动节点的实例探讨具体的仿真步骤.【总页数】3页(P18-20)
【作者】王瑜;焦永革;孟涛;林家薇
【作者单位】空军工程大学电讯学院;西北工业大学航海学院;空军工程大学电讯学院;空军工程大学电讯学院;西北工业大学航海学院;空军工程大学电讯学院
【正文语种】中文
【中图分类】TP39
【相关文献】
1.基于NS-2的无线自组织网络仿真实验设计 [J], 蔡虔
2.基于免费软件NS2的网络仿真研究 [J], 石萍;吴暇
3.基于免费软件ns2的网络仿真 [J], 刘强
4.基于NS-2的无线传感器网络仿真模块扩展方法的研究 [J], 叶晓国
5.基于NS2的无线网络仿真和自定义协议添加 [J], 顾翔;储波;张海兰
因版权原因,仅展示原文概要,查看原文内容请购买。
网络混合仿真及其在NS-2下的实现
第2卷 第 期 3 4
文章编号 :0 6—94 ( 0 6 0 10 3 8 2 0 )4—0 1 4 10—0
计 算 机 仿 真
26 月 0 年4 0
网络 混 合 仿 真及 其 在 NS一2下 的 实现
马卓群 , 志刚 金
i f r to no ma i n,a d d p u d s mu a i n f r t e o h r , t e eo e e c n s e d p t e s mu a i n wh l si n a o t f i i l t o h t e s h r f r w a p e u h i lto ie t l l o l k o n e al d i o a in wen e .T e k y o h d li o o i l me tt ei tra eb t e n p c e n wi g d t i n r t e d e f m o h e ft e mo e sh w t mp e n h n e c e w e a k t— f l v lmo e n u d mo e ,we s o tp r c lry i h s p p r T i p p r d sg s a s to x e me t o e e d la d f i d l l h w i a t u a l n t i a e . h s a e e i n e f e p r i i nst e au t h e o a c fo r h b d mo e . T e r s ls s o h tt e h b d mo e o n y c n a c r tl v l a e t e p r r n e o u y r d 1 h e u t h w t a h y r d l n t o l a c u a e y f m i i o t i h r n in e a iro CP f w,b tas a h re h i l t n t b an t e ta s e tb h v o fT o l u o c n s o n t e smu a i i . l t o me KEYW ORDS: 1 i d l F u d mo e ;Hy rd s mu a i n;C mp tr n t o k b i l to i o ue ew r s
ns无线网络仿真节点设置及说明.
ns无线网络仿真节点设置及说明要做一个4个节点的Ad hoc网络仿真,实验环境和要求是:采用的无线网拓扑结构,主机节点数共有4个;节点1到4的初始位置坐标分别为(0,1 000、(0,800、(0,600和(400,600,节点1和2在仿真中保持静止不动,节点3和4则以60m/s速度分别向坐标(0,0和 (400,0位置方向垂直移动。
系统带宽为2Mbps,系统节点缺省无线传输半径约为500m。
仿真使用的业务流量为FTP,每包发送512字节,发送速度10包/s。
采用静态路由方式,节点1在1.5s发包给节点2,节点3在3.5s发包给节点4。
仿真时间一共10s,选取节点2处的估计可用带宽进行分析。
下面是基本环境仿真的adhoc.tcl源码:# This script is created by emile.Y.S Xiang#===================================# 定义模拟变量#===================================set val(chan Channel/WirelessChannel ;# channel typeset val(prop Propagation/TwoRayGround ;# radio-propagation modelset val(netifPhy/WirelessPhy ;# network interface typesetval(mac Mac/802_11;# MAC typeset val(ifq Queue/DropTail/PriQueue ;# interface queue type setval(ll LL;# link layer typesetval(ant Antenna/OmniAntenna ;# antenna modelsetval(x 1000;# X dimension of topologysetval(y 1000;# Y dimension of topologysetval(cp "";# node movement model filesetval(sc "";# traffic model fileset val(ifqlen50 ;# max packet in ifqsetval(nn 4;# number of mobilenodesset val(seed 0.0setval(stop 10.0;# time of simulation endsetval(tr adhoc.tr;# trace file namesetval(rp DSDV;# routing protocolset AgentTrace ONset RouterTrace ONset MacTrace OFF#===================================# 建立相关档案#===================================# Initialize Global Variablesset ns_ [newSimulator] ;#产生ns simulator实例$ns_ color 1 Blue$ns_ color 2 Red# 设定trace file$ns_use-newtrace;#使用新的trace formatset namfd [open adhoc.namw] ;#产生nam trace file $ns_ namtrace-all-wireless $namfd $val(x $val(y ;#模拟时产生需要的结果文件set tracefd [open $val(trw] ;#产生trace file$ns_ trace-all$tracefd ;#模拟时产生需要的结果文件#建立topology对象,以记录mobilenodes在拓扑內移动的情况set topo [new Topography]# 拓扑的范围为 1000m x 1000m$topo load_flatgrid $val(x $val(y# 建立channelset chan [new $val(chan]# 创建godset god_ [create-god $val(nn]#===================================# 无线节点配置#===================================# Create the specified number of mobile nodes [$val(nn] and "attach" them to # the channel. Four nodes are created : node(0, node(1, node(2 and node(3# 设定Mobile 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 \-channel $chan \-topoInstance $topo \-agentTrace ON \-routerTrace OFF \-macTrace OFF \-movementTrace OFF#===================================# 新建Node#===================================for {set i 0} {$i < $val(nn } {incr i} {set node_($i [$ns_ node]$node_($i random-motion 0 ;# 使各节点非随机移动}# Provide initial (X,Y, for now Z=0 co-ordinates for mobilenodes # 建立第0个Node,开始时,位置在(0.0, 1000.0$node_(0 set X_ 0.0$node_(0 set Y_ 1000.0$node_(0 set Z_ 0.0# 建立第1个Node,开始时,位置在(0.0, 800.0 $node_(1 set X_ 0.0$node_(1 set Y_ 800.0$node_(1 set Z_ 0.0# 建立第2个Node,开始时,位置在(0.0, 600.0 $node_(2 set X_ 0.0$node_(2 set Y_ 600.0$node_(2 set Z_ 0.0# 建立第3个Node,开始时,位置在(400.0, 600.0 $node_(3 set X_ 400.0$node_(3 set Y_ 600.0$node_(3 set Z_ 0.0# Load the god object with shortest hop information # 在节点0和节点1之间最短的hop数为1 $god_ set-dist 0 1 1# 在节点1和节点2之间最短的hop数为1 $god_ set-dist 1 2 1# 在节点0和节点2之间最短的hop数为2$god_ set-dist 0 2 2# 在节点2和节点3之间最短的hop数为1$god_ set-dist 2 3 1# 在节点0和节点3之间最短的hop数为1$god_ set-dist 0 3 1# 在节点1和节点3之间最短的hop数为1$god_ set-dist 1 3 1#===================================# 产生Movement#===================================# Now produce some simple node movements# Node_(2 and Node_(3 starts to move downwardset god_ [God instance]#node移动不能到边界,否则会报错# 从0秒开始,节点2开始从位置(0,600移動到(0,0,速度為60.0 m/s $ns_ at 0.0 "$node_(2 setdest 0.1 0.1 60.0"# 从0秒开始,节点3开始从位置(400,600移動到(400,0,速度為60.0 m/s $ns_ at 0.0 "$node_(3 setdest 400.0 0.1 60.0"#===================================# 建立FTP业务,基于TCP来承载#===================================# 在节点0和节点1间设定第0个连线(FTP-TCP,且在时间为1.5秒开始发送set tcp0 [new Agent/TCP/Newreno]$tcp0 set fid_ 1set sink0 [new Agent/TCPSink]$ns_ attach-agent $node_(0 $tcp0$ns_ attach-agent $node_(1 $sink0$ns_ connect $tcp0 $sink0set ftp0 [new Application/FTP]$ftp0 attach-agent $tcp0$ns_ at 1.5 "$ftp0 start"$ns_ at 10.0 "$ftp0 stop"# 在节点2和节点3间设定第1个连线(FTP-TCP,且在时间为3.5秒开始发送set tcp1 [new Agent/TCP/Newreno]$tcp1 set fid_ 2set sink1 [new Agent/TCPSink]$ns_ attach-agent $node_(2 $tcp1$ns_ attach-agent $node_(3 $sink1$ns_ connect $tcp1 $sink1set ftp1 [new Application/FTP]$ftp1 attach-agent $tcp1$ns_ at 3.5 "$ftp1 start"$ns_ at 10.0 "$ftp1 stop"# 在nam中定义节点初始所在位置for {set i 0} {$i < $val(nn} {incr i} {# The function must be called after mobility model is defined.$ns_ initial_node_pos $node_($i 60}# 告诉 MobileNode 模拟已结束 for {set i 0} {$i < $val(nn } {incr i} { $ns_ at $val(stop "$node_($i reset"; } #=================================== # 结束模拟 #=================================== # 结束 nam 与模拟器 $ns_ at $val(stop "$ns_ nam-end-wireless $val(stop" $ns_ at $val(stop "stop" $ns_ at $val(stop "puts \"NS EXITING...\" ; $ns_ halt" # 设定模拟器用的 stop function proc stop {} { global ns_ tracefd namfd $ns_ flush-trace close $tracefd close $namfd exec nam adhoc.nam & exit 0 } puts puts puts puts $ns_ $tracefd "M 0.0 nn $val(nn x $val(x y $val(y rp $val(rp" $tracefd "M 0.0 sc $val(sc cp $val(cp seed $val(seed" $tracefd "M 0.0 prop $val(prop ant $val(ant" "Starting Simulation..." run。
利用ns2的过程
进行网络仿真前,首先分析仿真涉及哪个层次,NS仿真分两个层次:一个是基于OTcl编程的层次。
利用NS已有的网络元素实现仿真,无需修改NS本身,只需编写OTcl脚本。
另一个是基于C++和OTcl编程的层次。
如果NS中没有所需的网络元素,则需要对NS进行扩展,添加所需网络元素,即添加新的C++和OTcl类,编写新的OTcl脚本。
假设用户已经完成了对NS的扩展,或者NS所包含的构件已经满足了要求,那么进行一次仿真的步骤大致如下:(1)开始编写OTcl脚本。
首先配置模拟网络拓扑结构,此时可以确定链路的基本特性,如延迟、带宽和丢失策略等。
(2)建立协议代理,包括端设备的协议邦定和通信业务量模型的建立。
(3)配置业务量模型的参数,从而确定网络上的业务量分布。
(4)设置Trace对象。
NS通过Trace文件来保存整个模拟过程。
仿真完后,用户可以对Trace文件进行分析研究。
(5)编写其他的辅助过程,设定模拟结束时间,至此OTcl脚本编写完成。
(6)用NS解释执行刚才编写的OTcl脚本。
(7)对Trace文件进行分析,得出有用的数据。
(8)调整配置拓扑结构和业务量模型,重新进行上述模拟过程。
NS2采用两级体系结构,为了提高代码的执行效率,NS2 将数据操作与控制部分的实现相分离,事件调度器和大部分基本的网络组件对象后台使用C++实现和编译,称为编译层,主要功能是实现对数据包的处理;NS2的前端是一个OTcl 解释器,称为解释层,主要功能是对模拟环境的配置、建立。
从用户角度看,NS2 是一个具有仿真事件驱动、网络构件对象库和网络配置模块库的OTcl脚本解释器。
NS2中编译类对象通过OTcl连接建立了与之对应的解释类对象,这样用户间能够方便地对C++对象的函数进行修改与配置,充分体现了仿真器的一致性和灵活性。
2、NS2的功能模块NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等等,下面分别来介绍一下各个模块。
ns3中调用流程
ns3中调用流程ns3是一款开源的网络仿真工具,被广泛应用于网络技术研究和开发中。
在ns3中调用流程是指如何使用ns3进行网络仿真和模拟的过程。
下面将简要介绍ns3中的调用流程。
首先,我们需要准备好安装好的ns3环境。
ns3是基于Linux平台开发的,因此需要先安装Linux系统。
然后,我们从ns3官方网站上下载最新版本的ns3程序包,解压并安装到本地系统中。
在安装完成后,我们可以通过命令行或者图形界面来调用ns3。
对于初学者来说,使用图形界面可能更加直观和方便。
我们可以通过打开ns3文件夹中的“waf”文件,启动ns3的图形界面。
在图形界面中,我们可以方便地创建、配置和运行网络仿真实验。
在进行网络仿真前,我们需要先创建一个网络拓扑。
在ns3中,可以通过编写C++或者Python脚本来创建网络拓扑。
在脚本中,我们可以定义网络节点、链路、协议栈等各种网络元素,并进行相应的配置。
通过调用ns3提供的API函数,我们可以灵活地创建具有不同规模和结构的网络拓扑。
创建好网络拓扑后,我们可以进行网络仿真实验了。
ns3提供了丰富的仿真模型和工具,可以模拟各种网络场景和协议行为。
我们可以通过在脚本中添加相应的仿真模型和工具来实现我们的仿真目标。
比如,我们可以添加数据包生成器、路由器、交换机等设备,进行流量模拟和路由协议测试。
在进行网络仿真时,我们可以设置仿真时间、仿真速度、仿真输出等参数。
通过调用相应的API函数,我们可以灵活地控制仿真过程和结果的输出。
ns3还提供了一系列的仿真统计工具,可以帮助我们分析和评估仿真结果。
最后,在完成网络仿真后,我们可以通过图形界面或者命令行来查看和分析仿真结果。
ns3提供了丰富的结果展示和分析工具,可以对仿真结果进行可视化和定量评估。
综上所述,ns3中的调用流程包括环境准备、图形界面或命令行调用、创建网络拓扑、添加仿真模型和工具、设置仿真参数、运行仿真实验以及查看和分析仿真结果等步骤。
d——Ns仿真应用案例
仿真开始: set ns [new Simulator]这也是tcl脚本的第一行。
这一行声明一个新的变量ns,因此在后面程序中可以调用这一变量。
通常声明它为ns,因为这个变量是Simulator类的实例,或者说它是一个对象。
因此,用户就可以使用ns来调用Simulator类的所有方法。
▪输出文件有两类:trace文件和可视化nam文件。
文件使用“open”命令创建。
#Open the Trace fileset tracefile1 [open out.tr w]$ns trace-all $tracefile1#Open the NAM trace fileset namfile [open out.nam w]$ns namtrace-all $namfile▪上面的语句创建了一个数据文件“out.tr”和一个nam可视化trace文件“out.nam”。
在tcl脚本中,这些文件通过对应的指针“tracefile1”和“namfile”进行调用。
语句中的字母“w”表示文件以写入方式打开。
语句"trace-all"是ns 模拟器类的方法,参数为将要写入文件的指针。
该语句的执行将会将所有事件以一种特定格式记录在数据文件中。
语句“namtrace-all”将会以NAM输入格式记录所有事件,记录的数据写在namfile指向的文件out.nam中。
▪注意:命令trace-all和namtrace-all可能产生超大的文件。
如果用户希望节省空间,可以使用其它的trace命令来保存部分的仿真事件。
▪结束程序使用下面的finish过程:#Define a 'finish' procedureproc finish {} {global ns tracefile1 namfile$ns flush-traceclose $tracefile1close $namfileexec nam out.nam &exit 0}▪关键字proc声明一段过程。
实验九 基于NS的网络模拟
1、实验目的
(1)了解NS的下载与安装方法。
2、实验内容
(1)下载NS,并安装NS的最新版本。
(2)运行在NS的官方网站上下载的一个简单脚本文件
3.实验准备
(1)检查NS官方网站的网址。
(2)编写出在实验机的平台上下载并安装NS最新版本的步骤。
(3)在NS官方网站下载一个简单的NS脚本文件,并阅读,给每一行加上注释(在语句行后加以“#”或“;#”打头的字串)
(5)配置环境变量
a.新建一个终端。注意,这个时候应该在root目录下。
b.输入gedit .bashrc并按enter键,打开gedit编辑.bashrc。gedit是linux中的一个文件编辑器,”.bashrc”是存放路径变量的文件,默认隐藏。
c.在.bashrc文件末尾添加下面语句
export
(4)自己设计一个较为简单的NS脚本,用于进行某种网络行为的模拟。例如:
模拟TCP连接中的3次握手。模拟停等源自议。模拟滑动窗口协议。(选做)
4.NS的安装
(1)由root登录系统
(2)把ns-allinone-2.26放在/home/zyj/下面
(3)解压
a.首先打开终端
b.输入cd/home/zyj后按enter键
c.输入ls后按enter键,进入目录/home/zyj/,可以看到文件ns-allinone-2.26.tar.gz.
d.在终端中输入:tar xvfz ns-allinone-2.26.tar.gz后按enter键
(4)安装
a.解压完成后,输入ls并按enter键,可以看到一个叫做ns-allione-2.26的文件夹。
PATH=”$PATH:/home/zyj/ns-allione-2.26/bin:/home/zyj/ns-allinone-2.28/TCL8.4.5/unix:/home/zyj/ns-allione-2.26/tk8.4.5/unix”
NS-2网络仿真平台的探讨与实现
NS-2网络仿真平台的探讨与实现
向明尚;陈素丽;曹茂俊;刘延军;孔凡宏
【期刊名称】《东北石油大学学报》
【年(卷),期】2005(029)002
【摘要】阐述了NS-2仿真平台的体系结构、网络组件以及仿真原理. 在Linux系统下,利用NS-2网络仿真软件,对TCP/IP中的拥塞控制机制做了仿真,结果表明,该网络仿真平台能够逼真而有效地仿真网络的各种性能.
【总页数】4页(P63-66)
【作者】向明尚;陈素丽;曹茂俊;刘延军;孔凡宏
【作者单位】大庆石油学院,计算机与信息技术学院,黑龙江,大庆 163318;大庆石油学院,计算机与信息技术学院,黑龙江,大庆 163318;大庆石油学院,计算机与信息技术学院,黑龙江,大庆 163318;大庆石油学院,计算机与信息技术学院,黑龙江,大庆163318;大庆石化总厂,安全处,黑龙江,大庆 163714
【正文语种】中文
【中图分类】TP393.01
【相关文献】
1.基于NS-2的无线自组织网络仿真实验设计 [J], 蔡虔
2.NS-2网络仿真平台及其在TCP拥塞控制研究中的应用 [J], 武志勇
3.利用NS-2实现Ad Hoc网络仿真平台 [J], 洪家军;吴金龙
4.NS-2网络仿真平台及其在TCP拥塞控制研究中的应用 [J], 潘伟锵;刘瑛
5.NS-2移动代理网络仿真功能扩展设计和实现 [J], 李建枫;糜正琨;成际镇
因版权原因,仅展示原文概要,查看原文内容请购买。
ns2仿真机制及代码分析
计算机工程与设计
Computer Engineering and Design
2008 年 9 月 Sept. 2008
移动 Ad hoc 网络的 NS2 仿真机制及代码分析
石 硕, 顾学迈, 张文彬, 沙学军 (哈尔滨工业大学 通信技术研究所,黑龙江 哈尔滨 150001)
摘 要:分析 了 NS 的工作机制和移动 Ad hoc 网络仿真中使用的主要构件库代码及分裂对象模型中 OTCL 和 C++两种语言的 联 合 使 用 问 题 ,并 在 此 基 础 之 上 详 细 地 分 析 了 构 件 库 各 层 之 间 的 接 口 实 现 问 题 ,着 重 研 究 了 网 络 层 、链 路 层 和 物 理 层 的 关 键 技术,并介绍了 AODV 路由协议和 MAC 层定时器等典型代码的实现,从而有助于掌握 NS 下的网络仿真和协议代码的扩展。 关键 词:NS 仿真 ; 构件库; 分裂 对象模型; 协 议代码扩展 中图 法分类号:TN925 文献 标识码:A 文章编号:1000-7024 (2008) 18-4639-05
Working mechanism and code analysis of NS2 simulation for mobile Ad hoc networks
SHI Shuo, GU Xue-mai, ZHANG Wen-bin, SHA Xue-jun (Communication Research Center, Harbin Institute of Technology, Harbin 150001, China)
static class RenoTcpClass: public TclClass { public: RenoTcpClass():TclClass("Agent/TCP/Reno") {}
网络仿真与NS-2简介1
GloMoSim is a library written by Parsec.
GloMoSim的层次与功能 GloMoSim
Application Layer Transport Layer Network Layer MAC Layer Radio Layer Channel Layer PROPAGATION-MODEL BANDWIDTH MAC-PROTOCOL NETWORK-PROTOCOL ROUTING-PROTOCOL TRANSPORT-PROTOCOL MOBILITY
/nsnam/index.php/Main_Page
NS-2的历史
NEST (Network Simulation Testbed) REAL (Realistic and Large) NS-1 NS-2 1989: REAL network simulator 1995: DARPA VINT project (Virtual InterNetwork Testbed) at LBL, Xerox PARC, UCB, and USC/ISI Present: DARPA SAMAN(Simulation Augmented by Measurement and Analysis for Network) project and NSF CONSER(Collaborative Simulation for Education and Research) project.
OPNET的特性(续)
混合建模机制:把基于包的分析方法和基于统计的 混合建模机制 数学建模方法结合起来,既可得到非常细节的模拟 结果,也大大提高了仿真效率。 丰富的统计量收集和分析功能:它可以直接收集常 丰富的统计量收集和分析功能 用的各个网络层次的性能统计参数,能够方便地编 制和输出仿真报告。 网管系统、流量监测系统的接口:能够方便的利用 网管系统、流量监测系统的接口 现有的拓扑和流量数据建立仿真模型,同时还可对 仿真结果进行验证。
网络仿真器NS2的功能扩展及实现
网络仿真器NS 的功 能扩展及 实现 2
何 建新 ,贾丽媛
( 湖南城 市学 院 信息科学与工程学 院,湖南 摘 益 阳 430 10 0) 要 :NS 是 目前网络研 究领 域应用最广泛 的网络模拟软件之 一 ,作 为辅助教 学工具 ,已被广泛应用 2
于网络教 学.N 2 为开源软件缺 少对最新研 究算 法的模拟能力.首先分析 了 2 S作 NS模块组成及功能、 2 NS仿真
第 2 卷 第3 0 期
2 1年9 0 1 月
湖 南 城 Байду номын сангаас 学 院 学 报
(自然科 学版 )
v 12 . o. O No 3 Se . 2 pt 011
J u n l f Hu a t ie st ( tr l c e c ora o n n Ci Un v riy Nau a S in e) y
NS( e o i u t e i ) 由美国 2N t r Sm lo V ro 2是 w k a r sn 加州大学 L B N L网络研究组开发的一个面向对象 的、离散 事件驱动 、开放源代码 网络仿真软件, 其开放性受 到了广大 网络研究者 的好评 . 目前 NS 2已被广泛应用于网络研究领域 ,是进行 网络 协议实现 、算法优化 、性能评价的一个强有力的 工具 .同时,作为一种辅助教学工具 ,已被广泛 应用于网络教学之中.为适应 网络技术 的快速发 展和新的网络应用需求 ,研究人员需要不断改进 或提出新的网络协议和算法. N 2 在 S 仿真环境 中 进行新协议 、新算法 的验证号陛能测试工作 ,比 构建真实网络环境将节省大量的时间和成本.本 文首先分析了 NS 模块组成及功能 、 S 仿真工 2 N2
o NS n t ne p n inF n l eBL f 2f ci x a so .ial t UE ag r h p rom a c se ru hn t o ksmuaina d u o yh lo i m ef r n ei t tdt o g e t se h w r i lt n o
ns无线网络仿真节点设置及说明.
ns无线网络仿真节点设置及说明要做一个4个节点的Ad hoc网络仿真,实验环境和要求是:采用的无线网拓扑结构,主机节点数共有4个;节点1到4的初始位置坐标分别为(0,1 000、(0,800、(0,600和(400,600,节点1和2在仿真中保持静止不动,节点3和4则以60m/s速度分别向坐标(0,0和 (400,0位置方向垂直移动。
系统带宽为2Mbps,系统节点缺省无线传输半径约为500m。
仿真使用的业务流量为FTP,每包发送512字节,发送速度10包/s。
采用静态路由方式,节点1在1.5s发包给节点2,节点3在3.5s发包给节点4。
仿真时间一共10s,选取节点2处的估计可用带宽进行分析。
下面是基本环境仿真的adhoc.tcl源码:# This script is created by emile.Y.S Xiang#===================================# 定义模拟变量#===================================set val(chan Channel/WirelessChannel ;# channel typeset val(prop Propagation/TwoRayGround ;# radio-propagation modelset val(netifPhy/WirelessPhy ;# network interface typesetval(mac Mac/802_11;# MAC typeset val(ifq Queue/DropTail/PriQueue ;# interface queue type setval(ll LL;# link layer typesetval(ant Antenna/OmniAntenna ;# antenna modelsetval(x 1000;# X dimension of topologysetval(y 1000;# Y dimension of topologysetval(cp "";# node movement model filesetval(sc "";# traffic model fileset val(ifqlen50 ;# max packet in ifqsetval(nn 4;# number of mobilenodesset val(seed 0.0setval(stop 10.0;# time of simulation endsetval(tr adhoc.tr;# trace file namesetval(rp DSDV;# routing protocolset AgentTrace ONset RouterTrace ONset MacTrace OFF#===================================# 建立相关档案#===================================# Initialize Global Variablesset ns_ [newSimulator] ;#产生ns simulator实例$ns_ color 1 Blue$ns_ color 2 Red# 设定trace file$ns_use-newtrace;#使用新的trace formatset namfd [open adhoc.namw] ;#产生nam trace file $ns_ namtrace-all-wireless $namfd $val(x $val(y ;#模拟时产生需要的结果文件set tracefd [open $val(trw] ;#产生trace file$ns_ trace-all$tracefd ;#模拟时产生需要的结果文件#建立topology对象,以记录mobilenodes在拓扑內移动的情况set topo [new Topography]# 拓扑的范围为 1000m x 1000m$topo load_flatgrid $val(x $val(y# 建立channelset chan [new $val(chan]# 创建godset god_ [create-god $val(nn]#===================================# 无线节点配置#===================================# Create the specified number of mobile nodes [$val(nn] and "attach" them to # the channel. Four nodes are created : node(0, node(1, node(2 and node(3# 设定Mobile 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 \-channel $chan \-topoInstance $topo \-agentTrace ON \-routerTrace OFF \-macTrace OFF \-movementTrace OFF#===================================# 新建Node#===================================for {set i 0} {$i < $val(nn } {incr i} {set node_($i [$ns_ node]$node_($i random-motion 0 ;# 使各节点非随机移动}# Provide initial (X,Y, for now Z=0 co-ordinates for mobilenodes # 建立第0个Node,开始时,位置在(0.0, 1000.0$node_(0 set X_ 0.0$node_(0 set Y_ 1000.0$node_(0 set Z_ 0.0# 建立第1个Node,开始时,位置在(0.0, 800.0 $node_(1 set X_ 0.0$node_(1 set Y_ 800.0$node_(1 set Z_ 0.0# 建立第2个Node,开始时,位置在(0.0, 600.0 $node_(2 set X_ 0.0$node_(2 set Y_ 600.0$node_(2 set Z_ 0.0# 建立第3个Node,开始时,位置在(400.0, 600.0 $node_(3 set X_ 400.0$node_(3 set Y_ 600.0$node_(3 set Z_ 0.0# Load the god object with shortest hop information # 在节点0和节点1之间最短的hop数为1 $god_ set-dist 0 1 1# 在节点1和节点2之间最短的hop数为1 $god_ set-dist 1 2 1# 在节点0和节点2之间最短的hop数为2$god_ set-dist 0 2 2# 在节点2和节点3之间最短的hop数为1$god_ set-dist 2 3 1# 在节点0和节点3之间最短的hop数为1$god_ set-dist 0 3 1# 在节点1和节点3之间最短的hop数为1$god_ set-dist 1 3 1#===================================# 产生Movement#===================================# Now produce some simple node movements# Node_(2 and Node_(3 starts to move downwardset god_ [God instance]#node移动不能到边界,否则会报错# 从0秒开始,节点2开始从位置(0,600移動到(0,0,速度為60.0 m/s $ns_ at 0.0 "$node_(2 setdest 0.1 0.1 60.0"# 从0秒开始,节点3开始从位置(400,600移動到(400,0,速度為60.0 m/s $ns_ at 0.0 "$node_(3 setdest 400.0 0.1 60.0"#===================================# 建立FTP业务,基于TCP来承载#===================================# 在节点0和节点1间设定第0个连线(FTP-TCP,且在时间为1.5秒开始发送set tcp0 [new Agent/TCP/Newreno]$tcp0 set fid_ 1set sink0 [new Agent/TCPSink]$ns_ attach-agent $node_(0 $tcp0$ns_ attach-agent $node_(1 $sink0$ns_ connect $tcp0 $sink0set ftp0 [new Application/FTP]$ftp0 attach-agent $tcp0$ns_ at 1.5 "$ftp0 start"$ns_ at 10.0 "$ftp0 stop"# 在节点2和节点3间设定第1个连线(FTP-TCP,且在时间为3.5秒开始发送set tcp1 [new Agent/TCP/Newreno]$tcp1 set fid_ 2set sink1 [new Agent/TCPSink]$ns_ attach-agent $node_(2 $tcp1$ns_ attach-agent $node_(3 $sink1$ns_ connect $tcp1 $sink1set ftp1 [new Application/FTP]$ftp1 attach-agent $tcp1$ns_ at 3.5 "$ftp1 start"$ns_ at 10.0 "$ftp1 stop"# 在nam中定义节点初始所在位置for {set i 0} {$i < $val(nn} {incr i} {# The function must be called after mobility model is defined.$ns_ initial_node_pos $node_($i 60}# 告诉 MobileNode 模拟已结束 for {set i 0} {$i < $val(nn } {incr i} { $ns_ at $val(stop "$node_($i reset"; } #=================================== # 结束模拟 #=================================== # 结束 nam 与模拟器 $ns_ at $val(stop "$ns_ nam-end-wireless $val(stop" $ns_ at $val(stop "stop" $ns_ at $val(stop "puts \"NS EXITING...\" ; $ns_ halt" # 设定模拟器用的 stop function proc stop {} { global ns_ tracefd namfd $ns_ flush-trace close $tracefd close $namfd exec nam adhoc.nam & exit 0 } puts puts puts puts $ns_ $tracefd "M 0.0 nn $val(nn x $val(x y $val(y rp $val(rp" $tracefd "M 0.0 sc $val(sc cp $val(cp seed $val(seed" $tracefd "M 0.0 prop $val(prop ant $val(ant" "Starting Simulation..." run。
(完整word版)NS2网络仿真实验
移动自组织网络实验报告NS2网络仿真实验何云瑞13120073电信研1301班1.实验目的和要求1.学会NS2的安装过程,并熟悉NS2的环境;2.观察并解释NAM动画,分析Trace文档。
3.学会用awk和gnuplot分析吞吐量、封包延迟、抖动率和封包丢失率。
2.实验环境先在PC上安装VMware虚拟机,再在虚拟机上安装Ubuntu系统,最后再Ubuntu系统上安装NS2软件,本次实验采用的是NS-2.34版本。
3.基本概念3.1 NS2简介NS2是一款开放源代码的网络模拟软件,最初由UC Berkeley开发。
它是一种面向对象的网络模拟器,它本质上是一个离散事件模拟器,其本身有一个模拟时钟,所有的模拟都由离散事件驱动。
其采用了分裂对象模型的开发机制,采用C++和OTcl两种语言进行开发。
它们之间采用TclCL进行自动连接和映射。
考虑效率和操作便利等因素,NS2将数据通道和控制通道的实现相分离.为了减少封包和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++编写,这些对象通过TclCL映射对OTcl解释器可见。
目前,NS2可以用于模拟各种不同的通信网络,它功能强大,模块丰富,已经实现的主要模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、CBR、Web和VBR;路由队列管理机制,如Droptail、RED和CBQ;路由算法;以及无线网络WLAN、移动IP和卫星通信网络等模块。
也为进行局域网的模拟实现了多播协议以及一些MAC子层协议。
3。
2 NS2的功能模块NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等,下面对各个模块进行简单的介绍:(1)事件调度器:目前NS2提供了四种具有不同数据结构的调度器,分别是链表、堆、日历表和实时调度器。
(2)节点(node):是由TclObject对象组成的复合组件,在NS2中可以表示端节点和路由器.(3)链路(link):由多个组件复合而成,用来连接网络节点.所有的链路都是以队列的形式来管理封包的到达、离开和丢弃。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络仿真平台NS上的编程实现Ξ肖艳华 魏蛟龙 张弛(华中科技大学电信系 武汉 430074)摘 要:网络仿真软件是网络性能理论分析、评估网络设计方案以及网络故障诊断的有力工具。
随着网络规模的增大,各种网络方案和协议日趋复杂,仿真技术在现代通信网络设计中的作用越来越大。
着重探讨网络仿真免费软件NS,首先分析了NS网络仿真器的体系结构,然后介绍了如何在NS环境下编程实现开发用户自己的仿真对象,对网络进行更加自主的仿真。
关键词:网络;仿真;NS(Network Simulator);接口中图分类号:TP393Application of N et w ork SimulatorXiao Yanhu a Wei Jiaolong Zhang Chi(Dept.of the EI,HUST,Wuhan430074)Abstract:Network Simulation is very important in designing network and evaluating the performance of network,and the network simulator is a much powerful tool.Simulation is playing the more and more important role in designing modern telecommunication network due to increasing of complexity,scale of networks.This paper analyzed the architecture of NS sim2 ulator,and explained how user to develop objects under NS environment.K ey w ords:network;simulation;NS(Network Simulator);interfaceClass number:TP3931 前言在网络迅速膨胀的今天,网络研究人员一方面要不断思考新的网络协议和算法,为网络发展做前瞻性的基础研究;另一方面也要研究如何利用和整合现有的网络资源,使网络达到最高效能。
无论是哪一方面都需要对新的网络方案进行验证和分析,网络仿真[1]无疑提供了一个方便、高效的验证和分析方法。
NS[2],[3]是一个面向对象的仿真工具,既能进行现有网络元素的仿真分析,又是一个开发新协议、新方案的强大工具。
但目前国内介绍和研究NS的文献较少,许多研究人员对NS知之不多,因此,本文所做的工作对利用NS进行网络研究的科研人员来说无疑具有帮助。
2 NS体系结构NS鼓励用户对其进行扩展,它是一个开放、免费使用的软件。
NS软件体系提供的基本抽象是“可编程组合”,仿真程序动态地把对象组合到任意的仿真配置中。
2.1NS构成NS[4]软件是一个软件包,包括Tcl/Tk,O T2 cl,NS,Tclcl。
其中Tcl是一个开放脚本语言;Tk 是Tcl的图形界面开发工具;O Tcl是基于Tcl/Tk 的面向对象扩展,有自己的类层次结构;NS为本软件包的核心,是面向对象的仿真器,用C++编写,以O Tcl解释器作为前端;Tclcl则提供NS和O Tcl的接口,使对象和变量出现在两种语言中。
总第139期2004年第1期 舰船电子工程Ship Electronic EngineeringVol.24No.1 58 Ξ收稿日期:2003年6月21日,修回日期:2003年10月22日 湖北省自然科学基金资助项目(项目编号:No.99J041,No.2001ABB104)NS能向用户提供最大的自由度而不影响到系统的性能,针对不同的仿真功能,提供了C++和O Tcl两种编程语言模型,在不限制仿真性能的前提下表现了充分的灵活性:一个方面来说,对于需要涉及处理字节、分组以及大量数据集的算法操作,而不会频繁修改的任务,使用编译型语言C++来编写;另一方面,对于需要频繁的修改协议对象的配置和数据流的配置,脚本解释性语言O Tcl修改起来很快,而且是交互的,便于多次模拟配置,能够很灵活的满足这方面的需求。
这种方法的好处在于:通过提供易用、重配置、可编程的仿真环境,降低了仿真器设计、维护、扩展、调试的负担;而且,它鼓励将机制和策略分离的编程风格,有利于代码重用。
2.2C++与OT cl的接口在NS中,调度器(scheduler)是仿真器的心脏,它提供了一套接口去配置仿真器和选择驱动仿真的事件调度类型。
用户为了让自己编写的C ++类能在解释其中可见,需要借助类TCLclass 的帮助,TCLclass类可以实现将解释器中的对象与NS编译类的映射,这样通过创建一个从TCLclass继承而来的静态类,用户就可以在O Tcl 脚本中直接使用C++类。
假设用C++语言创建了一个网络对象类,需要通过O Tcl来创建一个此对象的一个实例,这时就需要定义一个从TclClass类派生出的接口元素,它生成一个特定名称的O Tcl对象,使之与C ++类建立一对一的映射,通过creat成员函数调用C++类。
例如:从Agent派生出类MyAgent,为实现与O Tcl类的对应,则需定义一个派生自TclClass的MyAgentClass类,他在O Tcl类中有一个特定的名称Agent/MyAgent,通过creat成员函数与MyAgent建立联系,具体代码如下:class MyAgent:public Agent{public:MyAgent();Protected:Int command(int args,const char3const3 argv);Private:Int my var1;Double my var2;Void MyPrivfunc(void);}static class MyAgentClass:public TclClass{ public:MyAgentClass():TclClass(“Agent/MyA2 gent”){}TclObject3create(int,const char3const3){ Return(new MyAgent()); }}class my agent当NS启动的时候,首先执行静态变量class my agent的构造函数,于是产生实例MyAgent2 Class,在这个过程中,Agent/MyAgent以及其成员函数均在O Tcl空间被创建出来。
用户需要生成这个对象的一个实例时,只需要利用O Tcl命令new Agent/MyAgent,仿真器通过静态变量class my agent调用create函数来真正创建一个MyAgent对象。
实际试验中常常需要在O Tcl脚本中改变C ++中的变量值,即让编译层中定义的类的配置参数在解释层可见。
NS提供了一种变量绑定的方法来实现这一个要求,具体是将需要在O Tcl仿真脚本中控制的C++变量与一个O Tcl变量绑定,从而实现O Tcl与C之间的双向控制,具体代码如下:MyAgent::MyAgent():Agent(PT UDP){ Bind(“my var1otcl”,&my var1);Bind(“my var2otcl”,&my var2);}my var1,my var2是新添加类MyAgent的两个参数变量,my var1otcl,my var2otcl则是在O Tcl语言中为之设置的相应的O Tcl变量,从而可以通过在O Tcl脚本中控制my var1otcl, my var2otcl来达到控制my var1,my var2的目的,使得仿真实验更具灵活性。
需要注意的是,绑定函数在MyAgent构造函数中,当创建这个对象实现对变量的绑定,同时需要在ns-lib. tcl文件中对O Tcl变量赋初值,否则NS平台会给出警告信息。
NS支持四种数据类型的绑定,包括实数或整数,带宽变量,时间变量,布尔值。
3 在NS平台上的编程3.1NS工作机制进行仿真前,首先要分析涉及仿真的哪一个层次。
NS仿真分两个层次:一个是基于O Tcl编952004年第1期 舰船电子工程 程的配置、构造层次,利用NS 已有的网络仿真元素实现仿真,只要编写O Tcl 仿真脚本,如图1中流程1-2-3;另一个层次是基于C ++和O Tcl 编程的编译、配置层次,即NS 中没有所需的仿真元素,需要利用O Tcl 和NS 的接口类编程实现NS 更新,流程如图1中4-5-6,然后再进行2-3流程完成仿真。
图1 NS 仿真层次实践表明,网络仿真常常涉及第二个层次。
进行第二层次的仿真开发时,需要在掌握具体课题的NS 元素的基础上,分析要建立的新元素特征,利用NS 面向对象特性来构造新的NS 仿真平台。
可以通过这些方法自己添加各种网络元件,新的应用,代理,队列算法等,从而达到扩展NS 平台的目的。
3.2建立新的网络对象时要考虑的问题如果仿真只要求对现有的代码进行简单修改即可完成,无需建立新的协议代理等,则找到相应的待修改代码进行预期的修改,然后直接编译生成新的NS 。
如果新方案和现有NS 元素差别较大,就需要编写新的C ++程序。
当建立新的网络对象时一般需要考虑以下问题:(1)首先定义头文件,包括数据结构和决定新代理的继承结构,并建立恰当的类定义。
(2)定义C ++代码和O Tcl 代码之间的接口连接,即定义O Tcl 连接函数。
(3)至少定义接收函数recv ()和Tcl 命令触发函数command ()以及必须的时钟类。
(4)新代码完成后,要对各个相关程序进行必要的改动。
(5)在NS 目录下运行MakeDepend 和Make ,重新编译NS ,至此生成了新的NS 。
3.3NS 平台上的编程实例可以通过编写代码为NS 增加新的协议、代理等,下面以一个实例来具体的分析在NS 平台上的编程实现。
为了实现对网络中各业务流的公平对待,合理利用网络资源,我们提出了一种新的队列管理算法———DCHO KE ,以取代NS 平台提供的缺省的队列管理算法(Droptail 或RED ),为了验证这种新的对列管理算法的有效性,我们需要利用NS 平台来进行仿真试验,但是这种算法NS 本身并不提供,于是我们需要自己编写C ++程序并将其编译到NS 平台中,并在最终的O Tcl 仿真脚本中调用DCHO KE 来进行仿真。
下面是我们所作的工作:首先按照我们的思路编写 程序,其中包括基本的enque 和de 2queue 函数,这里主要介绍C ++代码跟O Tcl 代码之间的接口连接。