您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 如何对NS2仿真结果进行分析
-1-使用一些工具来分析和呈现模拟结果对于使用网络仿真软件来做网络效能分析的人而言,步骤通常是先设计出符合自己需要的网络仿真环境,设定其不同的参数,执行仿真,收集结果数据,最后把数据使用图片或表格把结果呈现出来以方便分析实验。一般而言,对于ns2的初学者而言,总是会遇到一个问题,就是网络仿真程序跑完后,接下来该如何分析。这是非常重要的一个过程,所以希望ns2的初学者能好好的研究此章节的内容,相信一定会对大家的研究有相当的帮助。本节打算以一个简单的网络环境为范例,介绍如何使用一些工具来分析和呈现模拟结果,这包含了如何去量测End-to-EndDelay、Jitter、PacketLoss、和Throughput。而采用的方法是去分析traffictrace档案的方式,这种方法的优点是简单且不需要去修改到ns2核心的部份,但缺点是若是仿真数据若是太多,traffictrace的档案会太大,这样会增加分析所需要的时间。另外一种方法,是去更改ns2核心,增加或修改一些档案,把所需要量测的参数直接记录下来,这种方法的优点是模拟结束后,所需要量测的数据已经完全记录下来,但缺点是要动到ns2核心的部分,对于初学者而言,这是一个很大的门坎,这个方法笔者留到后面的章节在做介绍。笔者先对要模拟的环境做一个简单的介绍。这个网络的环境包含了四个网络节点(n0,n1,n2,n3),如下图所示。网络节点n0到节点n2之间,和节点n1到节点n2之间的网络频宽(bandwidth)是2Mbps,延迟时间(propagationdelay)是10ms。网络拓朴中的频宽瓶颈是在节点n2到节点n3之间,频宽为,延迟的时间为20ms。每个网络节都是采用DropTailqueue的方式,且在节点n2到节点n3之间的最大队列长度是10个封包的长度。在节点n0到n3之间会有一条FTP的联机,FTP应用程序是架构在TCP之上,所以在写仿真环境的描述语言的时候,必需先建立一条TCP的联机,在来源端n0上使用TCPagent产生”tcp”来发送TCP的封包;在目的地端n3使用TCPsinkagent产生”sink”来接受TCP的数据、并产生回复封包(ACK)回传送端、最后把接收的TCP封包释放。最后要把这两个agent连起来(connect),联机才能建立。若是没有额外的参数设定,TCP封包的长度为1Kbytes。在这里顺便补充说明一下,对于ns2模拟参数内定值设定是在\\tcl\lib目录下的,有想要进一步了解的人,可以去查看此档。另外,在节点n1到n3之间有一条固定的传输速率的联机(ConstantBitRate,CBR),CBR应用程序是架构在UDP之上,因此必需在n1使用UDPagent来产生”udp”用来发送UDP封包,在n3上使用Nullagent来产生”sink”以接收由n1传送过来的UDP封包,然后把接收的封包释放。CBR的传送速度为1Mbps,每一个封包大小为1Kbytes。CBR是在秒开始传送,在秒结束传输;FTP是在秒开始传送,秒结束传输。[SimulationTopology][TclScript]#产生一个仿真的对象setns[newSimulator]#针对不同的数据流定义不同的颜色,这是要给NAM用的$nscolor1Blue$nscolor2Red#开启一个NAMtracefilesetnf[openw]$nsnamtrace-all$nf-2-#开启一个tracefile,用来记录封包传送的过程setnd[openw]$nstrace-all$nd#定义一个结束的程序procfinish{}{globalnsnfnd$nsflush-traceclose$nfclose$nd#以背景执行的方式去执行NAMexecnam&exit0}#产生四个网络节点setn0[$nsnode]setn1[$nsnode]setn2[$nsnode]setn3[$nsnode]#把节点连接起来$nsduplex-link$n0$n22Mb10msDropTail$nsduplex-link$n1$n22Mb10msDropTail$nsduplex-link$n2$n320msDropTail#设定ns2到n3之间的QueueSize为10个封包大小$nsqueue-limit$n2$n310#设定节点的位置,这是要给NAM用的$nsduplex-link-op$n0$n2orientright-down$nsduplex-link-op$n1$n2orientright-up$nsduplex-link-op$n2$n3orientright#观测n2到n3之间queue的变化,这是要给NAM用的$nsduplex-link-op$n2$n3queuePos#建立一条TCP的联机settcp[newAgent/TCP]$tcpsetclass_2$nsattach-agent$n0$tcpsetsink[newAgent/TCPSink]$nsattach-agent$n3$sink$nsconnect$tcp$sink#在NAM中,TCP的联机会以蓝色表示$tcpsetfid_1-3-#在TCP联机之上建立FTP应用程序setftp[newApplication/FTP]$ftpattach-agent$tcp$ftpsettype_FTP#建立一条UDP的联机setudp[newAgent/UDP]$nsattach-agent$n1$udpsetnull[newAgent/Null]$nsattach-agent$n3$null$nsconnect$udp$null#在NAM中,UDP的联机会以红色表示$udpsetfid_2#在UDP联机之上建立CBR应用程序setcbr[newApplication/Traffic/CBR]$cbrattach-agent$udp$cbrsettype_CBR$cbrsetpacket_size_1000$cbrsetrate_1mb$cbrsetrandom_false#设定FTP和CBR数据传送开始和结束时间$nsat$cbrstart$nsat$ftpstart$nsat$ftpstop$nsat$cbrstop#结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)$nsat$nsdetach-agent$n0$tcp;$nsdetach-agent$n3$sink#在模拟环境中,5秒后去呼叫finish来结束模拟(这样要注意模拟环境中#的5秒并不一定等于实际模拟的时间$nsatfinish#执行模拟$nsrun-4-模拟结束后,会产生两个档案,一个是,这是给NAM用的,用来把模拟的过程用可视化的方式呈现出来,这可以让使用者用”看”的方式去了解封包传送是如何从来源端送到接收端。另一个档案是,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间秒的时候,从n1传送到n2。这个档案对我们做效能分析很重要,所以要先对这个档案的格式做仔细的介绍。+12cbr1000-------200-12cbr1000-------200+12cbr1000-------211-12cbr1000-------211r12cbr1000-------200+23cbr1000-------200-23cbr1000-------200+12cbr1000-------222-12cbr1000-------222r12cbr1000-------211+23cbr1000-------211.................................................................每一笔记录的开始都是封包事件发生的原因,若是r则表示封包被某个节点所接收,若是+则表示进入了队列,若是-则表示离开队列,若是d则表示封包被队列所丢弃。接着的第二个字段表示的是事件发生的时间;字段三和字段四表示事件发生的地点(从fromnode到tonode);字段五表示封包的型态;字段六是封包的大小,字段七是封包的旗标标注;字段八表示封包是属于那一个资料流;字段九和字段十是表示封包的来源端和目的端,这两个字段的格式是,a代表节点编号,b表示埠号(portnumber);字段十一表示封包的序号;最后字段十二表示封包的id。以前面tracefile的第一笔为例,意思就是说有一个封包pakcetid为0,资料流id为2,序号为0,长度为1000bytes,型态为CBR,它是从来源端要到目的地,在时间秒的时候,从节点1进入了节点2的队列中。接下来,笔者先简单介绍awk,然后如何使用awk去分析tracefile,以得到Throughput、Delay、Jitter、和LossRate。[awk]A.简介-5-awk是一种程序语言。它具有一般程序语言常见的功能。因awk语言具有某些特点,如:使用直译器(Interpreter)不需先行编译;变量无型别之分(Typeless),可使用文字当数组的注标(AssociativeArray)等特色。因此,使用awk撰写程序比起使用其它语言更简洁便利且节省时间。awk还具有一些内建功能,使得awk擅于处理具数据列(Record),字段(Field)型态的数据;此外,awk内建有pipe的功能,可将处理中的数据传送给外部的Shell命令加以处理,再将Shell命令处理后的数据传回awk程序,这个特点也使得awk程序很容易使用系统资源。B.awk是如何运作的为便于解释awk程序架构,以及相关的术语,笔者就以上面tracefile为例,来加以介绍。a.名词定义:1.资料列:awk从数据文件上读取的基本单位,以tracefile为例,awk读入的第一笔资料列为”+12cbr1000-------200”第二笔资料列为“-12cbr1000-------200”一般而言,一笔数据列相当于数据文件上的一行资料。2.字段(Field):为数据列上被分隔开的子字符串。以资料列”+12cbr1000-------200”为例,一二三四五六七八九十十一十二+12cbr1000-------200一般而言是以空格符来分隔相邻的字段。当awk读入数据列后,会把每个字段的值存入字段变量。字段变量意义$0为一字符串,其内容为目前awk所读入的资料列.$1代表$0上第一个字段的数据.$2代表$0上第二栏个位的资料.…………b.程序主要节构:Pattern1{Actions1}Pattern2{Actions2}……………………………Pattern3{Actions3}一般常用”关系判断式”来当成Pattern。例如:x>3用来判断变量x是否大于3x==5用来判断变量x是否等于5awk提供c语言常见的关系操作数,如:>、<、>=、<=、==、!=等等Actions是由许多awk指令所构成,而awk的指令与c语言中的指令非常类似。IO指令:print、printf()、getline......流程控制指令?:if(...){...}else{…}、while(…){…}……在awk程序的流程为先判断Pattern的结果,若为真True则执行相对应的Actions,若为假False则不执行相对的Actions。若是处理的过程中没有Pattern,awk会无条件的去执行Actions。c.工作流程:执行awk时,它会反复进行下列四步骤。1.自动从指定的数据文件中读取一笔数据列。2.自动更新(Update)相关的内建变量之值。3.逐次执行程序中所有的Pattern{Actions}指令。4.当执行完程序中所有Pattern{Actions}时,若数据文件中还有未读取的料,则反复执行步骤1到步骤4。-6-awk会自动重复进行上述的四个步骤,所以使用者不须在程序中写这个循环。[End-to-EndDelay]笔者把量测CBR封包端点到端点间延迟时
本文标题:如何对NS2仿真结果进行分析
链接地址:https://www.777doc.com/doc-6929830 .html