1移动自组织网络实验报告NS2网络仿真实验何云瑞13120073电信研1301班21.实验目的和要求1.学会NS2的安装过程,并熟悉NS2的环境;2.观察并解释NAM动画,分析Trace文档。3.学会用awk和gnuplot分析吞吐量、封包延迟、抖动率和封包丢失率。2.实验环境先在PC上安装VMware虚拟机,再在虚拟机上安装Ubuntu系统,最后再Ubuntu系统上安装NS2软件,本次实验采用的是NS-2.34版本。3.基本概念3.1NS2简介NS2是一款开放源代码的网络模拟软件,最初由UCBerkeley开发。它是一种面向对象的网络模拟器,它本质上是一个离散事件模拟器,其本身有一个模拟时钟,所有的模拟都由离散事件驱动。其采用了分裂对象模型的开发机制,采用C++和OTcl两种语言进行开发。它们之间采用TclCL进行自动连接和映射。考虑效率和操作便利等因素,NS2将数据通道和控制通道的实现相分离。为了减少封包和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++编写,这些对象通过TclCL映射对OTcl解释器可见。目前,NS2可以用于模拟各种不同的通信网络,它功能强大,模块丰富,已经实现的主要模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、CBR、Web和VBR;路由队列管理机制,如Droptail、RED和CBQ;路由算法;以及无线网络WLAN、移动IP和卫星通信网络等模块。也为进行局域网的模拟实现了多播协议以及一些MAC子层协议。3.2NS2的功能模块NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等,下面对各个模块进行简单的介绍:(1)事件调度器:目前NS2提供了四种具有不同数据结构的调度器,分别是链表、堆、日历表和实时调度器。3(2)节点(node):是由TclObject对象组成的复合组件,在NS2中可以表示端节点和路由器。(3)链路(link):由多个组件复合而成,用来连接网络节点。所有的链路都是以队列的形式来管理封包的到达、离开和丢弃。(4)代理(agent):负责网络层封包的产生和接收,也可以用在各个层次的协议实现中。每个agent连接到一个网络节点上,由该节点给它分配一个端口号。(5)封包(packet):由头部和数据两部封包成。一般情况下,packet只有头部、没有数据部分。(6)应用层(Application):流量产生器(Trafficgenerators)创建了各种不同的概率模型来模拟产生实际网络中的业务流,它建立在UDP代理之上;应用模拟器(Simulatedapplication)产生建立在TCP代理之上的业务流。(7)数据记录:Trace,功能是能够详细记录模拟过程,同时,用户也可以根据自己的需要记录模拟过程中的任何一个细节,模拟结束后会产生out.tr文件;Monitor,NS2中有两种监测,队列监测(QueueMonitoring)和流量监测(Per-FlowMonitoring)。(8)动画演示Nam,是基于Tcl/Tk的动画演示工具,用来把模拟的过程用可视化的方式呈现出来,模拟结束后会产生out.man文件。(9)数据分析:gawk。awk是一种程序语言。它具有一般程序语言常见的功能。由于awk语言具有使用直译器(Interpreter)不需先行编译;变量无型别之分(Typeless),可使用文字当数组的注标(AssociativeArray)等特色,所以使用awk撰写程序比起使用其它语言更简洁便利且节省时间。awk还具有一些内建功能,使得awk擅于处理具资料列(Record),字段(Field)型态的资料。此外,awk内建有pipe的功能,可将处理中的资料传送给外部的Shell命令加以处理,再将Shell命令处理后的资料传回awk程序,这个特点也使得awk程序很容易使用系统资源。而gawk是GNU所开发的awk,最初在1986年完成,之后不断改进和更新,gawk包含awk的所有功能。3.3Trace文件的格式(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)4EventTimeFromnodeTonodePkttypePktsizeFlagsFidSrcaddrDstaddrSeqnumPktid(1)Event发生的事件类型。+表示封包进入链路队列(Enqueue)-表示封包离开链路队列(Dequeue)r表示目的队列接受(receive)事件d表示队列丢弃(drop)封包事件(2)time表示事件发生的时间(3)Fromnode表示封包发送节点的id(4)Fromnode表示封包传送目的节点的id(5)Pkttype表示封包类型(6)Pktsize表示封包的大小(7)Flags表示标志项(8)Fid为Flowid的简写,流标识符(9)Srcaddr表示源地址,格式为:node.port。node为封包发送节点的id,port代表发送封包节点的端口号。(10)Dstaddr表示目的地址,格式为:node.port。node为封包接收节点的id,port代表接收封包节点的端口号。(11)Seqnum封包的序列号(12)Pktid封包的唯一标识符,表示封包的id。3.4CBR和FTP简介CBR:ConstantBitRate,固定传输速率。这是一个用来形容通信服务质量(QualityofService,QoS)的术语。和该词相对应的词是可变码率或可变比特率(VariableBitRate,缩写VBR)。当形容编解码器的时候,CBR编码指的是编码器的输出码率(或者解码器的输入码率)应该是固定制(常数)。当在一个带宽受限的信道中进行多媒体通信的时候CBR是非常有用的,因为这时候受限的是最高码率,CBR可以更好的易用这样的信道。但是CBR不适合进行存储,因为CBR将导致没有足够的码率对复杂的内容部分进行编码(从而导致质量下降),同时在简单的内容部分会浪费一些码率。5FTP:FileTransferProtocol,文件传输协议,中文简称为“文传协议”,用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC与世界各地所有运行FTP的服务器相连,访问服务器上的大量程序和信息。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上复制到本地计算机,或把本地计算机的文件送到远程计算机去。3.5其他概念(1)丢包率:是一个比率,表示在单位时间内未收到的数据封包数与发送的数据封包数的比率,由于信号衰减、网络质量等诸多因素的影响,可能产生数据封包的丢失。(2)端到端时延:是由各种因素引起的,包括打包和解包时延,以及网络传送时延,本文中主要讨论的是网络传输时延。(3)吞吐量:单位时间内某个节点发送和接受的数据量,单位一般为b/s。(4)抖动率:网络延迟的变化量,它是由同一应用的任意两个相邻数据包在传输路由中经过网络延迟而产生的,由相邻数据包延迟时间差除以数据包序号差得到。4.实验步骤4.1NS2的安装本文NS2的安装参照博文:最终运行NS2自带simple.tcl得到图1,以示成功:6图1NS2安装成功4.2Tcl脚本运行本实验中编写的脚本simulator.tcl见附录一。实际模拟的网络结构图如图2所示。包含4个node,各节点之间都是以全双工的链路相连。n0和n2之间链路的带宽为2Mbps,延迟为10ms,为DropTail队列方式;n1和n2之间链路带宽为2Mbps,延迟为10ms,也为DropTail队列方式;n2和n3之间链路的带宽为1.7Mbps,延迟为20ms,也为DropTail方式。n0处有一个FTP的TCP流量产生器,n1处为CBR的UDP流量产生器,n3有一个接收TCP的sink和接收UDP的NULL。图2网络结构图7仿真结束后,会产生两个档案,一个是out.nam,这是给NAM用的,用来把仿真的过程用可视化的方式呈现出来,这可以让我们很直观的方式去了解封包传送是如何从来源端送到接收端。另一个档案是out.tr,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间0.1秒的时候,从n1传送到n2。4.3吞吐量、封包延迟、抖动率和封包丢失率4.3.1封包延迟测量CBR封包端点到端点间延迟时间的程序写在measure-delay.awk中。measure-delay.awk的具体代码查看附录。在终端输入如下命令:gawk-fmeasure-delay.awkout.trcbr_delay此指令将运行结果存储到cbr_delay文件中,以便进行绘图。接着输入gnuplot,得到下图接着按下图输入,为接下来要画的时延图做标识:8运行上图最后一条指令后得到图3:图3封包延迟随时间的变化4.3.2抖动率抖动率就是延迟时间变化量delayvariance,由于网络的状态随时都在变化,有时候流量大,有时候流量小,当流量大的时候,许多封包就必需在节点的队列中等待被传送,因此每个封包从传送端到目的地端的时间不一定会相同,而这个不同的差异就是所谓的Jitter。Jitter越大,则表示网络越不稳定。量测CBRflow抖动率的代码写在measure-jitter.awk内,具体见附录。运行方法仿照4.3.1,可得下图4:9图4抖动率随封包序列的变化4.3.3封包丢失率测量CBR封包丢失率的代码写在measure-drop.awk内,具体见附录。运行awk-fmeasure-drop.awkout.trcbr_drop后,可在cbr_drop中找到如下信息:其中第一行表示CBR总共送出了550个封包,丢失了8个。第二行表示总的丢包率为0.014545。接下来的几行中,第一列表示时间,第二列表示丢包率。仿照上两例,只不不过为了利用gnuplot,要把先把前两行删除。最终可得10丢包率随时间的变化如图5所示:图5封包丢失率随时间的变化4.3.4吞吐量量测CBR吞吐量的代码写在measure-throughput.awk内,具体见附录。图6吞吐量随时间的变化115.实验结果分析从丢包率、时延、吞吐量和抖动率的变化图中,可以看出当丢包率增加时,端到端之间的时延也在增加,而吞吐量则下降,丢包率、时延和吞吐量在表示网络性能的好坏时有一定的关系。在时延的变化图中,在一刚开始的时候,由于只有CBR的封包,所以端到端时延都是固定的,但在1.0秒后,网络多了FTP的封包,这使得CBR封包和FTP封包必须互相的抢夺网络的资源,因此端到端时延变得不在固定,但等到FTP传输结束后,CBR封包的端到端时延又变成是固定值了。在抖动率的变化图中,抖动率产生变化的原因同时延变化的原因相同,都是由于FTP封包的加入才使得端到端时延产生变化。6.附录6.1网络拓扑仿真脚本simulator.tcl:#有线场景,四个节点,FTT+TCP用蓝色表示,CBR+UDP用红色表示setns[newSimulator]#设置颜色$nscolor1Blue$nscolor2Redsettracefd[openout.trw]$nstrace-all$tracefdsetnamtracefd[openout.namw]$nsnamtrace-all$namtracefdprocfinish{}{globalnstracefdnamtracefd$nsflush-traceclose$tracefd12close$namtracefdexecnamout.nam&exit0}setn0[$nsnode]setn1[$nsnode]setn2[$nsnode]setn3[$nsnode]$nsduplex-link$n0$n22Mb10msD