NS-2无师自通七天速成系列.doc_第1页
NS-2无师自通七天速成系列.doc_第2页
NS-2无师自通七天速成系列.doc_第3页
NS-2无师自通七天速成系列.doc_第4页
NS-2无师自通七天速成系列.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络仿真利器NS-2无师自通七天速成系列: NS-2简介与实验环境的安装 近年来,网络通信技术日新月异,网络技术的研究炙手可热,促进人们不断的提高研究水平,更新研究技术,增加研究手段。目前网络通信的研究一般分为以下三种方式:(1)理论研究,(2)网络模拟,(3)试验测试。而网络模拟是目前网络通信研究中一种重要的方法。而NS-2是进行网络仿真最流行的软件之一,已广泛被科研院所和各大高校用于进行网络分析、研究和教学。1.简介 NS-2(Network Simulator Version 2)最早来源于1989年哥伦比亚大学开发的Real Network Simulator项目,是一款开源免费的网络模拟软件。目前NS-2 可用于仿真各种不同的通信网络。已经实现的仿真模块有:网络传输协议,如TCP 和UDP;业务源流量产生器,如FTP、Telnet、Web CBR 和VBR;路由队列管理机制,如Droptai、RED 和CBQ;路由算法,如Dijkstra,以及无线网络的WLAN,Ad hoc 路由,移动IP 和卫星通信网络等。NS-2 也为进行局域网的仿真而实现了多播以及一些MAC 子层协议。2. NS-2试验环境的安装与配置NS-2需要在linux操作系统下运行,然而大多数人对linux操作系统不太熟悉,更习惯于windows操作系统,所以就需要把NS-2安装在windows平台下。本实验环境的配置工具如下:Winxp+ VMware Workstation6+RedHat linux+ ns-allinone- Winxp下安装VMware Workstation62.2启动VMware Workstation6,新建虚拟机,在新建的虚拟机中选择Red linux 5,安装linux系统.插入系统盘,进行启动,系统自动的会找到未分区的预留空间进行安装,按照提示进行安装.在分区的过程中,建议划出一个2倍于内存的交换类型空间(swap类型),一个100M的ex3类型的/home空间,剩下的全部分给ex3类型的/根空间。分区采用自动分区,分区如下:在安装的过程中,要选择开发的组件,默认是不安装的,刚开始不太熟悉,可以选择全部安装。然后按照提示一步步的安装即可。注意:在安装linux过程中要注意以下两点:第一,在虚拟机下安装,一定要选择自定义模式,然后选择硬盘类型为IDE类型,否则无法安装成功,第二,一定要在linux系统的安装过程中,要选择自定义方式,安装需要的软件,包括编辑软件。第三,配置linux环境有三种选择,直接安装linux系统,windows+模拟环境cygwin和windows+虚拟机+linux下安装。如果出于学习考虑,建议采用第三种方法,如果真正的去做实验建议采用第一种方法。当然,我们也可以选择不安装,而使用模拟环境cygwin来模拟linux系统,如果你要真正的学习网络模拟的话,不建议采用这中方法。2.3在linux环境下安装NS-2假设你已经安装好linux系统,下面开始NS-2模拟环境的安装与配置。NS-2软件建议选择allinone (即all in one).此处和以后的试验环境我们使用的是ns-allinone-2.30。将ns-allinone-2.30.tar.gz 文件放在当前用户的home目录下,如果你是从网络上下载,一般默认是在这个目录下,你可以检查下;如果你通过其他方式,本实验是通过U盘的方式,把文件复制到该目录中。2.3.1安装ns-2如果是root用户的显示为“主机名#”,非root用户显示为“主机名$.果是root用户,你的home目录为/root,非root用户的home目录为/home/用户名。 命令说明:$cd (转到home目录下),$tar zxf ns-allione-2.30.tar.gz(解压软件包)$cd ns-allinone-2.30 (进入ns-allinone-2.30目录下) $./install (运行安装命令)2.3.2设置全局路径变量上一步的安装成功后,最后输出部分会提示你必须设置三个全局变量path,ld_library_path和tcl_library.在自己的根目录下编辑终端配置文件 .bashrc,注意要带.开头, .bashrc是bash终端的配置文件,在Linux中它是隐藏文件,一般用ls命令看不出来,但可以采用vi命令编辑该文件:$cd$vi .bashrc (用linux系统提供的vi编辑器来编辑 .bashrc文件)将光标移动到最后一行,按下insert键进行插入export NS_HOME=/ns-allinone-2.30export PATH=$NS_HOME/tcl8.4.13/unix:$NS_HOME/tk8.4.13/unix:$NS_HOME/bin:$PATHexport LD_LIBRARY_PATH=$NS_HOME/tcl8.4.13/unix:$NS_HOME/tk8.4.13/unix:$NS_HOME/otcl-1.12:$NS_HOME/vlib:$LD_LIBRARY_PATHexport TCL_LIBRARY=$NS_HOME/tcl8.4.13/library在设置的过程中一定要细心。export后有一个空格,其他地方是以”:”来分割的。”/“home目录,你也可以不用设置这个变量都是可以的,对于具体的版本中包含软件版本不同,可参看上面的图和下边的脚本进行相应放入更改。编辑结束,按键盘上的退出键esc:退出插入模式,再输入“:wq”存盘退出.2.3.3 简单测试打开一个新终端 输入ns回车,在%号后输入空格+puts+空格+hello world,如果显示 hello world 则配置成功。否者查找原因重新配置。如有问题请发邮件询问与技术支持:网络仿真利器NS-2无师自通七天速成系列: NS-2实例编写 安装NS-2后,就可以运行该软件了。NS-2有两种运行方式,第一种是“脚本方式”,假设这里有个已编好的文件example.tcl文件,通过在linux控制端输入 ns example.tcl就可以运行该脚本了。第二种方法就是“命令行方式”,通过在linux系统下输入ns进入NS-2模拟环境。然后输入各种指令交互的运行。1.编写一个tcl脚本一般分为以下几个步骤:1) 创建模拟器对象,用来定义和控制模拟过程。在这个过程中,首先创建一个simulator 对象。2) 设置跟踪文件3) 创建网络拓扑结构。4) 配置节点属性。5) 创建拓扑结构6) 设置代理和应用层协议,并进行绑定。7) 使用模拟器对象的at过程设置节点事件和时间的对应关系。8) 使用模拟器对象的run过程开始模拟。9) 结果分析。模拟结束后,将得到保存模拟过程的trace文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用gnuplot等画图工具直观的显示数据分析结果。2,下边是一个实例。新建一个文件,保存为example.tclTcl Script# 产生一个仿真的对象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 close $nf close $nd #以背景执行的方式去执行NAM exec nam out.nam & exit 0#产生四个网络节点set n0 $ns nodeset n1 $ns nodeset n2 $ns nodeset 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#设定ns2到n3之间的Queue Size为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之间queue的变化,这是要给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#结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)$ns at 4.5 $ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink#在仿真环境中,5秒后去呼叫finish来结束仿真(这样要注意仿真环境中#的5秒并不一定等于实际仿真的时间$ns at 5.0 finish#执行仿真$ns run3,实验结果与数据分析如下:仿真结束后,会产生两个档案,一个是out.nam,这是给NAM用的,用来把仿真的过程用可视化的方式呈现出来,这可以让使用者用”看”的方式去了解封包传送是如何从来源端送到接收端。另一个档案是out.tr,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间0.1秒的时候,从n1传送到n2。这个档案对我们做效能分析很重要,所以要先对这个档案的格式做仔细的介绍。0.1 12cbr1000-21.03.1000.1 12cbr1000-21.03.1000.10812cbr1000-21.03.1110.10812cbr1000-21.03.111r0.11412cbr1000-21.03.1000.11423cbr1000-21.03.1000.11423cbr1000-21.03.1000.11612cbr1000-21.03.1220.11612cbr1000-21.03.122r 0.12212cbr1000-21.03.1110.12223cbr1000-21.03.111.每一笔记录的开始都是封包事件发生的原因,若是r则表示封包被某个节点所接收,若是+则表示进入了队列,若是-则表示离开队列,若是d则表示封包被队列所丢弃。接着的第二个字段表示的是事件发生的时间;字段三和字段四表示事件发生的地点(从from node到to node);字段五表示封包的型态;字段六是封包的大小,字段七是封包的旗标标注;字段八表示封包是属于那一个资料流;字段九和字段十是表示封包的来源端和目的端,这两个字段的格式是a.b,a代表节点编号,b表示埠号(port number);字段十一表示封包的序号;最后字段十二表示封包的id。以前面trace file的第一笔为例,意思就是说有一个封包pakcet id为0,资料流id为2,序号为0,长度为1000 bytes,型态为CBR,它是从来源端1.0要到目的地3.1,在时间0.1秒的时候,从节点1进入了节点2的队列中。网络仿真利器NS-2无师自通七天速成系列:Tcl和Otcl语言 Ns-2的实现是由表示层和实现层。实现层:采用C+对象,方便协议和算法的实现,提高执行效率;表示层:采用OTcl对象,方便拓扑和节点属性的修改,提高仿真便利性。语法说明:Tcl只支持”字符串”一种数据结构,一种分割符就是空格1、基本命令格式:Command arg arg1 arg2 arg3一个Tcl命令是由空格符分割的关键字所组成。其中,command是命令名称或者是一个Tcl过程名,其余都是该命令的参数。一个Hello world!的例子:% puts stdout Hello World!在这个例子,命令puts后面跟着两个参数,stdout 用来定义标准输入流。大括号把多个单词组成一个简单的参数。2、变量:用set命令进行定义。注意参数之间是一个空格进行分割。Set 参数一, 参数二 参数一为变量名,参数二为变量的赋值。用$命令来获取变量的值,具体格式为:$变量名,中间没有空格用unset命令来删除变量,使用方式为unset 变量名1,变量名二,。用info命令来查看变量是否存在,3. 变量的组合和替代变量的替代分为命令替代,又称欠套替代和反斜杠替代,与转移字符类似。命令替代用中括号来实现。反斜杠替代与转义字符的含义类似。双引号组合把组合内容作为字符串来看待,中间不允许有替代出现,而大括号替代则可是有替代出现,两者都实现把一串命令组合为一组命令的作用4 数学运算 支持数学运算和位运算和逻辑运算。用expr命令把表达式传递给解释器,如:expr 4*55.Tcl中用proc来定义过程,命令格式为:Proc 过程名 参数 过程体过程名可以为任何字符,过程名和变量名没有任何冲突,为了习惯,过程名第一个字母大写。参数多余一个用大括号组合,过程体多余一行也用大括号组合过程体中的return可以省略。6流程控制命令6.1,if 表达式 then 命令体1 else 命令体26.2,switch flags 表达式 条件一 命令体1 条件二 命令体2。default 命令体n一般情况下的格式为组合格式:switch flags 表达式 条件一 命令体1 条件二 命令体2。default 命令体n其中flags为表达式的匹配方式,有三种,-exact为默认的,为精确匹配-glob为通配模式,*为任意字符,?为单个字符。-regexp为正则表达式匹配,表达式为正则表达式。6.3,for循环命令For 初始化 测试 表达式 循环体ForeachWhile6.4,catch命令用来扑获错误6.5 用break,continue,return6,注释 # 来注释。最前注释一行,后边注释加分号和#如 ;#7,数组8,面向对象的tcl在tcl中增加了对象的支持,如类的定义,继承与封装,构造和析构函数网络仿真利器NS-2无师自通七天速成系列:NS-2网络控件及其使用方法 1,Simulator类在NS-2中,每个模拟过程需要一个类对整个过程进行控制和管理。这个类就是simulator类。这个类封装了节点(note),链路(link),代理(agent),数据分组格式等。整个模拟过程通过创建一个模拟类对象开始,通过调用这个对象的各个过程实现创建节点,构建拓扑结构图,对模拟的各个方面进行配置,定义事件,根据定义的事件模拟整个网络的运行等。创建一个模拟器类对象的格式为:Set ns new simulator2,NS-2是一个事件驱动的模拟器,通常包括两部分:事件的触发时间和用来处理时间的功能函数的句柄。NS-2中模拟内部at过程的主要功能是在特定的时间调度事件处理函数处理事件。Set ns new simulator$ns at 5.0 “handle_fun”$ns runProc handle_dunputs”this is the event handle function”目前事件调度程序有四种事件调度器,分别为:链式,堆式,时间队列式,和实时,其中时间队列式为默认的。本节相关概念为:Set ns new simulatorSet now$ns now$ns halt$ns run$ns at 3,节点note在网络中将分布在不同地理位置的主机,交换机,路由器等网络设备在NS-2中统统抽象为一个节点,本节将介绍NS-2中节点的创建和配置方法。根据网络节点之间通信方式的不同,分组的传输方式有两类,单播和多播。单播节点的配置:Set ns new simulatorSet n0 $ns node一个单播节点是由地址分类器和端口分类器两个tcl对象组成的。地址分类器主要判断分组的地址和转发分组到下一个接收器。节点的地址模拟网络中的ip地址,有两种类型,默认为flat类型的,分类器中有一张shot表模拟网络中的路由表,一个shot码和一个节点地址相对应。端口分类器的主要功能是按照分组的目的端口进行匹配,将分组传递给相应的agent对象。多播节点的配置:多播节点的配置,首先要把 Multicast属性值设置为: on,然后调用node过程创建多播节点。创建一个多播节点的方法:Set ns new Simulator -Multicast onSet n1 $ns node注意多播结构是一对多的通信,一个多播分组在转发时,分组需要被转发给多个目标对象,这就要求多播节点能够生成该分组的多个拷贝,多播节点包含复制器(Replicator)对象,并使用其生成分组的拷贝。多播节点主要是由多播分类器和复制器组成。多播分类器根据源地址,和目的地址,将分组分类,富欧泊分类器内部保存了一张链式hash表,表的每一项包含源地址,多播目的地址,和slot码。3.1节点的配置。无线网了中的节点是移动节点,拥有不同于有限节点的各种特性。所谓节点的配置就是在节点创建之前设定节点的各项属性,可是使用模拟器对象ns的内部过程node-config来配置节点的属性。包括,所有节点的属性,无线节点的属性和卫星节点的配置。与节点有关的命令$ns node 配置节点的类型 ,默认为没有分层的flat类型。$node id 此命令是返回节点的id号。$node node -addr 此命令是返回节点的地址。$node reset 此命令重新设置绑定于节点的代理。$node detach 将代理从这个节点上删除,然后在这个端口上绑定一个空代理。$node attach 节点自动为其分配一个端口号,并将该代理绑定到节点上。3.2链路 (link)链路层负责对物理层上传输的数据进行检错和纠错。NS-2中的数据链路层同时实现了物理层,数据链路层和部分网络层的功能。本节主要讲述如何将不同的节点连接起来。完成整个网络拓扑的结构的构建。因此,一个完整的网络拓扑包括节点的创建和节点的连接(用链路)两个部分,即节点和链路是组成网络哟拓扑的两个要素。网络设备见的通信方式可以分为单工,半双工和拳双工三种方式。单工是数据只能沿一个方向传输。任何时候都不能改变数据传输的方向,在NS-2中我们采用创建简单的单向链路simplex-link来进行模拟这种通信方式。半双工通信方式中,数据可以单向传输,但必须交替进行。不常用。全双工通信放式中,数据可以同时双向传输。在NS-2中我们通过创建双向链路duplex-link来进行模拟。创建单向链路Set ns new simulstor$ns simples-link 上述代码创建了一条node1到node2的单向链路,并且定义了链路的一下各项特性。 创建链路的带宽。 延时队列类型创建双向链路Set ns new simulstor$ns duplex-link 等价于Set ns new simulstor$ns simples-link $ns simples-link 本节相关命令:$ns simples-link $ns duplex-link $ns simples-link $ns duplex-link 以上两个命令主要设置链路的属性,主要包括:方向,颜色,标签和队列的位置。设置这些主要用于nam的动画显示。4.代理 agentNS-2中通过创建节点和链路来构建网络拓扑结构,然后就可以在各个节点间和链路上产生业务流。而NS-2中采用定义路由,代理和网络应用层来模拟实际的业务流。代理可以构建和销毁网络层的分组,是网络层的起点和终点,同时,代理还可以实现各种不同层的网络协议。NS-2中采用“/”作为类名的分割符的。Agent类是有c+和otcl共同实现的。Udp和tcp是tcl/tp协议族在传输层主要的两个协议。Udp协议 无连接,但传输速度快。Tcp基于三次握手协议但传输速度没有udp速度快。 Udp代理 agent/udp类agent类的一个子类,模拟了udp协议的主要功能。NS-2中创建和设置udp代理可以分为以下几个步骤。步骤一:创建一个agent/udp对象并将其绑定到相应的节点上作为分组的发送器。步骤二:设置agent/udp的部分内部变量。步骤三:创建一个agent/null对象并将其绑定到相应的节点上作为分组的接受器。步骤四:在两个发送和接受代理之间创建connection连接。以下tcl代码具体显示了如何创建。Udp代理,激射节点n0和n1,以及模拟器对象已建立。Set udp0new Agent/UDP$ns attach-agent $n0 $udp0$udp0 set packetsize_536Set null0new Agent/NULL$attch agent $n1 $ null0$ns connect $udp0 $null0TCP代理 TCP代理分为单向代理和双向代理,这里主要是单向代理。 agent/TCPSink类为例。NS-2中创建和设置TCP代理可以分为以下几个步骤。步骤一:创建一个agent/TCP对象,作为分组的发送器。步骤二:设置Agent/TCP对象的部分内部变量。步骤三:创建一个agent/TCPSink对象,作为分组的接受器。步骤四:在两个发送和接受代理之间创建connection连接。以下tcl代码具体显示了如何创建TCP代理,激射节点n0和n1,以及模拟器对象已建立。Set tcpnew Agent/TCP$ns attach-agent $n0 $tcp$tcp set fid_1$tcp set window_20Set sinknew Agent/TCPSink$attch agent $n1 $ sink$ns connect $tcp $sink与Agent相关的一些命令Set agent new Agent/agent type$ns attach-agent$agent port$agent dst port$agent attach app $ns connection$ns create-connect$agent attach-trace5应用层在NS-2中,应用层建立在传输层之上。分为两大类。流量产生器(traffic generator)和应用模拟器(simolated application)流量产生器一般用在udp代理之上。应用模拟器代理一般在tcp代理之上。流量产生器:一般有四种udp代理:指数分布流量代理器,pareto分布流量产生器。固定比率流量产生器。Trace文件流量产生器。下面是一个例子说明流量产生器的使用,本节配置的是固定比率cbr流量发生器步骤一:创建代理层对象并将传输层代理绑定到相应的节点上。创建 绑定 连接Set srcnew Agent/UDPSet sinlnew Agent/NULL$ns attach-agent $n0 $src$ns attach-agent $n0 $link$ns connect $src $sink步骤二:创建流量产生器对象,设置对象属性,并将其与传输层的源代理绑定可以通过调用application类的方法,也可以使用agent类中的方法Set enew Application/traffic/cbr$e set packetsize_300$e set rate_32kb$e set random_On$e attach-agent $src或:Set enew Application/traffic/cbr$e set packetsize_300$e set rate_32kb$e set random_true$e attach-app $e步骤三:启动和停止流量产生器$ns at “$e start”$ns at 5.0 “$e stop”应用模拟器:主要介绍ftp应用模拟器和telnet应用模拟器。ftp模拟器:对应的Otcl类为:Application/FTP,主要用来模拟大量数据的传送。telnet应用模拟器:telnet对象有两种分组的方法,如果interval_为零,那么分组发送的时间间隔均值为interval_ 的指数分布,如果为零,那么分组的发送时间间隔的选择按住奥tcplib经验分布,下面以tcp为例set srcnew Agent/TCP ;#创建一个TCP源代理,作为tcp分组的发送者。set sinknew Agent/TCPSink ;#创建一个tcpsink对象,作为tcp分组的接受者$ns attach-agent $no $src ;#绑定节点$ns attach-agent $n1 $sink ;#绑定节点$ns connection $src $sink ;#连接Set ftp1new Application/FTP ;#;创建$ftp attach-agent $src ;#绑定代理$ns at 0.5 “ftp start” ;#启动网络仿真利器NS-2无师自通七天速成系列:数据的记录,演示,数据分析 1. 数据的记录NS-2中主要有两种数据记录格式,一种是Trace格式,该对象详细记录了模拟的整个过程,第二种是Monitor,用来记录有用的数值。 Trace文件的建立:$ns trace-all ;#记录整个模拟过程。$ns trace-queue ;#记录n1和n2之间的链路事件,为可选项。例如: set tracefile open out.tr w $ns trace-all $tracefile或 set tracefile open out.tr w $ns trace-queue $n1 $n2 $tracefile注:在有线网络中,调用trace-queue方法之前,链路必须已经建立。 Trace文件的格式:123456789101112EventTimeFrom nodeTo nodePkt typePkt sizeFlagsFidSrc addrDst addrSeq numPkt id1.Event 发生的事件类型。+ 表示分组进入链路队列(Enqueue) - 表示分组离开链路队列(Dequeue)r 表示目的队列接受(receive)事件d 表示队列丢弃(drop)分组事件2. time 表示事件发生的事件3. From node表示分组发送节点的id 4. From node 表示分组传送目的节点的id5. Pkt type 表示分组类型6. Pkt size 表示分组的大小7. Flags 表示标志项8. Fid Flow id的标识符9. Src addr 表示源地址,格式为:node.port。node为分组发送节点的id,port代表发送分组节点的端口号。10. Dst addr表示目的地址,格式为:node.port。node为分组接收节点的id,port代表接收分组节点的端口号。11. Seq num分组的序列号12.Pkt id 分组的唯一标识符。部分trace文件内容如下:- 4.004353 2 3 tcp 1040 - 1 0.0 3.0 216 946r 4.005153 2 3 tcp 1040 - 1 0.0 3.0 213 939+ 4.005153 3 2 ack 40 - 1 3.0 0.0 213 963- 4.005153 3 2 ack 40 - 1 3.0 0.0 213 963r 4.006141 3 2 ack 40 - 1 3.0 0.0 211 957+ 4.006141 2 0 ack 40 - 1 3.0 0.0 211 957- 4.006141 2 0 ack 40 - 1 3.0 0.0 211 957 Monitor文件2.模拟结果的演示Nam是用于动态演示NS-2模拟的过程,Gnuplot和Xgraph是用于绘制模拟曲线,Gawk则用于从trace文件中提取数据信息。Nam是一个基于Tcl/Tk的动画程序,用来观察网络模拟的轨迹或者真是环境中生成的包。Nam可以从namtrace文件中读取动画事件的命令,事件命令保存在文件中。Nam可以显示各种各样的网络对象,包括节点,链路(有线网络),数据流,无线网络中的电波信号,丢包等等。Nam文件的产生。$set nf open out.nam w$ns nam trace-all $nf网络拓扑布局的生成。设置节点的固定布局$ns duplex-link-op $n0 $n2 orient right-down$ns duplex-link-op $n0 $n1 orient right-up$ns duplex-link-op $n0 $n1 orient right自动布局方法,适用于网络节点教多的情况。x,y坐标方式布局,适用于无线环境的拓扑构造。节点的显示属性$node $node coler red$node shape hexagon$node label “mytext”$node label-color blue$node label-at up链路的显示属性$ns duplex-link-op 设置数据流属性$ns color $n blue$agent set fie_ $n例如:$ns color 1 blue$tcp set fid_ 1$ns color 2 red$udp set fid_ 2nam的运行在脚本中加入 exec nam $namfile在nam文件产生后,可在命令行下输入:nam out.nam运行。关于nam的详细使用,可以参考NS手册中的说明,熟练掌握nam的使用,可以帮助读者更直观的分析模拟的过程,扑捉模拟时间发生的大致时间,从而加快对模拟结果的分析和处理。3.Gnuplot 它是一个命令行驱动的,互动式函数和数据绘制程序,支持大多数的数学表达式和数学函数。在命令行下输入:gnuplotgnuplotplot sin(exp(x)plot用来绘制二维图形,Splot用来绘制三维图形。4.xgraph是集成在ns-allinone软件包中的一个绘图工具。5.Gawk是GNU开发的AWK程序语言。用来分析模拟产生的trace文件。gawk是一种程序语言,对于资料的处理具有很强的功能,可以使用很短的代码轻易地完成对文本档案做修改、分析、提取和比较等处理。在NS的模拟结果分析中,经常用到gawk来进行数据分析和统计等。命令如下: gawk program input-file1 input-file2 . 程序代码较短gawk -f program-file input-file1 input-file2. 程序较长gawk程序是由很多的pattern和action所组成的:pattern action。功能是针对文件的每一行搜寻指定的模式(pattern),当一行里有符合指定的模式时,gawk就会在此一行执行指定的动作(action)。Gawk文件的读取,gawk在处理数据时是一个一个记录地处理,每个记录默认为一行。记录被分为多个区域(fields)在gawk程序中,“$1”表示第一个栏位,”$2”表示第二个栏位。依次类推,”$nf”表示最后一个栏位。gawk文件的输出:用 Print来输出用printf来精心控制输出。6.用nam gawk gnuplot xgraph来对trace文件进行分析源程序:example_1.tcl该程序执行完后生成 out.nam和out.tr文件1.nam动画演示2.gawk脚本分析分析CBR业务丢包率,时延,FTP业务中的TCP序列号的变化过程。丢包率(loss rate)是一个比率,gawk参看脚本loss.awkloss.awkBEGIN num_pkts_sent =0;num_pkts_rcvd =0;action =$1;time =$2;from =$3;to =$4;type =$5;pktsize=$6;flow_id=$8;src=$9;dst = $10;seq_no =$11;packet_id =$12;if(from=1&action=+&flow_id=2)num_pkts_sent+;if(to=3&flow_id=2&action=r)num_pkts_rcvd+;END printf(number of packets sent:%d lost: %dn,num_pkts_sent,num_pkts_sent-num_pkts_rcvd);printf(the loss rate of packets is %fn,num_pkts_rcvd/num_pkts_sent);执行 gawk f loss.awk out.tr显示如下:3.业务时延,脚本参看 delay.awkloss.awkBEGIN largest_index =0;action =$1;time =$2;from =$3;to =$4;type =$5;pktsize=$6;flow_id=$8;src=$9;dst = $10;seq_no =$11;packet_id =$12;if(largest_index seq_no)largest_index = seq_no;if(action=+&from=1)start_timeseq_no=time;if(action=r&to=3)end_timeseq_no=time;END printf(the largest_index is %dn,largest_index);for(i =0;itcp_seq_sent.txtgawk($5=”tcp”&$1=”r”&$4=”3”) print $2,$11out.trtcp_seq_rcvd.txt然后执行 gnuplotgnuplotplot “tcp_seq_sent.txt”using 2:1,”tcp_seq_rcvd.txt”using2:1也可执行:xgraph tcp_seq_rcvd.txt tcp_seq_sent.txt网络仿真利器NS-2无师自通七天速成系列:无线网络模拟与实例 目前无线网络可以分为两类,有固定接入点的无线网络和无固定接入点的无线网络。无固定接入点的网络,通常称为Ad Hoc网络,或自组织网络。1.Ad hoc一词来源于拉丁语,是“特别地,专门地为某一即将发生的特定目标、事件或局势而不为其他的”的意思。这里提出的“Ad hoc技术”所标称的就是一种无线特定的网络结构,强调的是多跳、自组识、无中心的概念,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论