ImageVerifierCode 换一换
格式:DOCX , 页数:37 ,大小:402.59KB ,
资源ID:9099968      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9099968.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(NS2使用1.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

NS2使用1.docx

1、NS2使用1对于使用网络仿真软件来做网络效能分析的人而言,步骤通常是先设计出符合自己需要的网络仿真环境,设定其不同的参数,执行仿真,收集结果数据,最后把数据使用图片或表格把结果呈现出来以方便分析实验。一般而言,对于ns2的初学者而言,总是会遇到一个问题,就是网络仿真程序跑完后,接下来该如何分析。这是非常重要的一个过程,所以希望ns2的初学者能好好的研究此章节的内容,相信一定会对大家的研究有相当的帮助。 本节打算以一个简单的网络环境为范例,介绍如何使用一些工具来分析和呈现模拟结果,这包含了如何去量测End-to-End Delay、Jitter、Packet Loss、和Throughput。而

2、采用的方法是去分析traffic trace档案的方式,这种方法的优点是简单且不需要去修改到ns2核心的部份,但缺点是若是仿真数据若是太多,traffic trace的档案会太大,这样会增加分析所需要的时间。另外一种方法,是去更改ns2核心,增加或修改一些档案,把所需要量测的参数直接记录下来,这种方法的优点是模拟结束后,所需要量测的数据已经完全记录下来,但缺点是要动到ns2核心的部分,对于初学者而言,这是一个很大的门坎,这个方法笔者留到后面的章节在做介绍。 笔者先对要模拟的环境做一个简单的介绍。这个网络的环境包含了四个网络节点(n0,n1,n2,n3),如下图所示。网络节点n0到节点n2之间,

3、和节点n1到节点n2之间的网络频宽(bandwidth)是2Mbps,延迟时间(propagation delay)是10ms。网络拓朴中的频宽瓶颈是在节点n2到节点n3之间,频宽为1.7Mbps,延迟的时间为20ms。每个网络节都是采用DropTail queue的方式,且在节点n2到节点n3之间的最大队列长度是10个封包的长度。在节点n0到n3之间会有一条FTP的联机,FTP应用程序是架构在TCP之上,所以在写仿真环境的描述语言的时候,必需先建立一条TCP的联机,在来源端n0上使用TCP agent产生”tcp”来发送TCP的封包;在目的地端n3使用TCPsink agent产生”sink

4、”来接受TCP的数据、并产生回复封包(ACK)回传送端、最后把接收的TCP封包释放。最后要把这两个agent连起来(connect),联机才能建立。若是没有额外的参数设定,TCP封包的长度为1Kbytes。在这里顺便补充说明一下,对于ns2模拟参数内定值设定是在ns-allinone-2.27ns-2.27tcllib目录下的ns-default.tcl,有想要进一步了解的人,可以去查看此档。另外,在节点n1到n3之间有一条固定的传输速率的联机(Constant Bit Rate,CBR),CBR应用程序是架构在UDP之上,因此必需在n1使用UDP agent来产生”udp”用来发送UDP封包

5、,在n3上使用Null agent来产生”sink”以接收由n1传送过来的UDP封包,然后把接收的封包释放。CBR的传送速度为1Mbps,每一个封包大小为1Kbytes。CBR是在0.1秒开始传送,在4.5秒结束传输;FTP是在1.0秒开始传送,4.0秒结束传输。Simulation TopologyTcl Script# 产生一个仿真的对象set ns new Simulator#针对不同的数据流定义不同的颜色,这是要给NAM用的$ns color 1 Blue$ns color 2 Red#开启一个NAM trace fileset nf open out.nam w$ns namtrac

6、e-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 Dr

7、opTail$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之间q

8、ueue的变化,这是要给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

9、 $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_

10、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

11、at 5.0 finish#执行模拟$ns run模拟结束后,会产生两个档案,一个是out.nam,这是给NAM用的,用来把模拟的过程用可视化的方式呈现出来,这可以让使用者用”看”的方式去了解封包传送是如何从来源端送到接收端。另一个档案是out.tr,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间0.1秒的时候,从n1传送到n2。这个档案对我们做效能分析很重要,所以要先对这个档案的格式做仔细的介绍。 0.1 1 2 cbr 1000 - 2 1.0 3.1 0 0 0.1 1 2 cbr 1000 - 2 1.0 3.1 0 0

12、 0.108 1 2 cbr 1000 - 2 1.0 3.1 1 1 0.108 1 2 cbr 1000 - 2 1.0 3.1 1 1r 0.114 1 2 cbr 1000 - 2 1.0 3.1 0 0 0.114 2 3 cbr 1000 - 2 1.0 3.1 0 0 0.114 2 3 cbr 1000 - 2 1.0 3.1 0 0 0.116 1 2 cbr 1000 - 2 1.0 3.1 2 2 0.116 1 2 cbr 1000 - 2 1.0 3.1 2 2r 0.122 1 2 cbr 1000 - 2 1.0 3.1 1 1 0.122 2 3 cbr 100

13、0 - 2 1.0 3.1 1 1.每一笔记录的开始都是封包事件发生的原因,若是r则表示封包被某个节点所接收,若是+则表示进入了队列,若是-则表示离开队列,若是d则表示封包被队列所丢弃。接着的第二个字段表示的是事件发生的时间;字段三和字段四表示事件发生的地点(从from node到to node);字段五表示封包的型态;字段六是封包的大小,字段七是封包的旗标标注;字段八表示封包是属于那一个资料流;字段九和字段十是表示封包的来源端和目的端,这两个字段的格式是a.b,a代表节点编号,b表示埠号(port number);字段十一表示封包的序号;最后字段十二表示封包的id。以前面trace file

14、的第一笔为例,意思就是说有一个封包pakcet id为0,资料流id为2,序号为0,长度为1000 bytes,型态为CBR,它是从来源端1.0要到目的地3.1,在时间0.1秒的时候,从节点1进入了节点2的队列中。接下来,笔者先简单介绍awk,然后如何使用awk去分析trace file,以得到Throughput、Delay、Jitter、和Loss Rate。awk A.简介 awk是一种程序语言。它具有一般程序语言常见的功能。因awk语言具有某些特点,如:使用直译器(Interpreter)不需先行编译;变量无型别之分(Typeless),可使用文字当数组的注标(Associative

15、Array)等特色。因此,使用awk撰写程序比起使用其它语言更简洁便利且节省时间。awk还具有一些内建功能,使得awk擅于处理具数据列(Record),字段(Field)型态的数据;此外, awk内建有pipe的功能,可将处理中的数据传送给外部的 Shell命令加以处理, 再将Shell命令处理后的数据传回awk程序,这个特点也使得awk程序很容易使用系统资源。B. awk是如何运作的 为便于解释awk程序架构,以及相关的术语,笔者就以上面trace file为例,来加以介绍。a.名词定义:1. 资料列:awk从数据文件上读取的基本单位,以trace file为例,awk读入的第一笔资料列为

16、” 0.1 1 2 cbr 1000 - 2 1.0 3.1 0 0”第二笔资料列为 “ 0.1 1 2 cbr 1000 - 2 1.0 3.1 0 0”一般而言,一笔数据列相当于数据文件上的一行资料。2. 字段(Field):为数据列上被分隔开的子字符串。以资料列” 0.1 1 2 cbr 1000 - 2 1.0 3.1 0 0”为例,一二三四五六七八九十十一十二0.112cbr1000-21.03.100一般而言是以空格符来分隔相邻的字段。当awk读入数据列后,会把每个字段的值存入字段变量。字段变量意义$0为一字符串, 其内容为目前awk所读入的资料列.$1代表 $0 上第一个字段的数

17、据.$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的结果,若为真T

18、rue则执行相对应的Actions,若为假False则不执行相对的Actions。若是处理的过程中没有Pattern,awk会无条件的去执行Actions。c.工作流程: 执行awk时, 它会反复进行下列四步骤。1. 自动从指定的数据文件中读取一笔数据列。2. 自动更新(Update)相关的内建变量之值。3. 逐次执行程序中 所有 的 Pattern Actions 指令。4. 当执行完程序中所有 Pattern Actions 时,若数据文件中还有未读取的料,则反复执行步骤1到步骤4。awk会自动重复进行上述的四个步骤,所以使用者不须在程序中写这个循环。End-to-End Delay笔者把

19、量测CBR封包端点到端点间延迟时间的awk程序,写在档案measure-delay.awk档案中,读者可以参考此范例,修改成符合读者需求的程序。BEGIN #程序初始化,设定一变量以记录目前最高处理封包的ID。 highest_packet_id = 0; action = $1; time = $2; node_1 = $3; node_2 = $4; type = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12;#记录目前最高的packet ID if (

20、packet_id highest_packet_id ) highest_packet_id = packet_id;#记录封包的传送时间 if ( start_timepacket_id = 0 ) start_timepacket_id = time;#记录CBR (flow_id=2) 的接收时间 if ( flow_id = 2 & action != d ) if ( action = r ) end_timepacket_id = time; else #把不是flow_id=2的封包或者是flow_id=2但此封包被drop的时间设为-1 end_timepacket_id =

21、 -1; END #当数据列全部读取完后,开始计算有效封包的端点到端点延迟时间 for ( packet_id = 0; packet_id = highest_packet_id; packet_id+ ) start = start_timepacket_id; end = end_timepacket_id; packet_duration = end - start;#只把接收时间大于传送时间的记录列出来 if ( start cbr_delay执行结果:0.100000 0.0387060.108000 0.0387060.116000 0.0387060.124000 0.0387

22、060.132000 0.038706JitterJitter就是延迟时间变化量delay variance,由于网络的状态随时都在变化,有时候流量大,有时候流量小,当流量大的时候,许多封包就必需在节点的队列中等待被传送,因此每个封包从传送端到目的地端的时间不一定会相同,而这个不同的差异就是所谓的Jitter。Jitter越大,则表示网络越不稳定。笔者把量测CBR flow的Jitter的awk写在档案measure-jitter.awk内。BEGIN #程序初始化 old_time=0; old_seq_no=0; i=0; action = $1; time = $2; node_1 =

23、$3; node_2 = $4; type = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12; #判断是否为n2传送到n3,且封包型态为cbr,动作为接受封包 if(node_1=2 & node_2=3 & type=cbr & action=r) #求出目前封包的序号和上次成功接收的序号差值 dif=seq_no-old_seq_no;#处理第一个接收封包 if(dif=0) dif=1;#求出jitter jitteri=(time-old_time)/

24、dif; seqi=seq_no; i=i+1; old_seq_no=seq_no; old_time=time; END for (j=1; j cbr_jitter执行结果:1 0.0080002 0.0080003 0.0080004 0.008000另一种计算Jitter的方法-更精确的方式# =# NormalJitter.awk# Version now: 0.1# Last Modified Date: 2004-10-23,19:39:54# = Usage =# awk -f NormalJitter.awk out.tr# = Programed By =# 查辉(ZHA

25、 HUI), Wuhan, China, Email: zhahui AT # = Description =# 本awk程序给出了另外一种jitter的计算方法,这种方法中jitter的计算是基于以下公式: # jitter (recvtime(j)-sendtime(j)-(recvtime(i)-sendtime(i)/(j-i), 其中 ji 。# = Attention =# NormalJitter.awk中关于jitter的计算完全基于柯志亨博士的measure-delay.awk程序中delay的# 计算。而measure-delay.awk在柯博士网页中的ns2模拟例子中是正

26、确的,但是对于不同的例子需要根# 据情况进行一定的修改,并可能需要加入某些鲁棒性处理代码(例如对于第一个包的处理,对于丢包的处# 理等)。# = Reference =# http:/140.116.72.80/smallko/ns2/ns2.htm# = Feedback =# 如有任何关于本程序jitter计算的问题,请致信 # 柯志亨(ChihHeng, Ke)博士 smallko2001 AT .tw 或者与本人联系。# = Acknowledgements =# Dr. ChihHeng, Ke provided valuable documents and awk files up

27、on my requests.# =BEGIN #程序初始化,设定一变量以记录目前最高处理封包的ID。 highest_packet_id = 0; action = $1; time = $2; node_1 = $3; node_2 = $4; type = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12;#记录目前最高的packet ID if ( packet_id highest_packet_id ) highest_packet_id = packet_id; #记录封包的传送时间 if ( start_timepacket_id = 0 ) # 记录下包的seq_no - ZHA pkt_seqnopacket_id = seq_no; start_timepacket_id = time; #记录CBR (flow_id=2) 的接收时间 if ( flow_id = 2 & action != d ) if ( action = r ) end_timepacket_id =

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1