版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
NS2语法及结果分析NS2语法namAwkXgraphGnuplotNS2语法模拟器和节点每进行一次模拟都需要建立一个Simulator类的实例来控制模拟的过程,Simulator类提供了一些实例过程来创建和管理节点,setns[newSimulator]这条语句功能:1、包格式初始化;2、产生一个事件调度计划;3、选择一个默认的地址格式节点(node)是网络拓扑的重要组成部分。建立一个节点的基本方法是调用Simulator类的node过程: $nsnode例如:设置2个节点,可以表示为setns[newSimulator]
setn0[$nsnode]setn1[$nsnode]一个单播节点的基本结构如下图所示,它主要包括两个Tcl对象:地址分类器(addressclassifier)和端口分类器(portclassifier),它们分别用来判断分组的目标地址以及分组的目标Agent。
代理(Agent)Agent代表了网络层分组的起点和终点,并被用于实现如TCP和UDP等网络协议。Agent类是由C++和Otcl共同实现的。Agent可以实现网络层、运输层等多个层次的协议,对于一些运输层的协议(比如UDP),分组的大小和发送时间通常是由代表应用层的独立的对象来控制的,这些控制是通过Agent为应用程序开放的应用程序接口(API)来进行的。对于低层使用的Agent(比如路由Agent),分组的大小和发送时间通常由Agent自己控制。对于一个TCP
Agent,常用的协议代理有:
Agent/TCP--------------“Tahoe”TCP发送端(任何损耗下cwnd=1)Agent/TCP/Reno-------“Reno”TCP发送端(快速修复)Agent/TCP/Sack1------SackTCP发送端
Application类在NS中,应用层程序构建在运输层代理(transportagent)之上,它分为两大类:流量发生器(trafficgenerator)和应用模拟器(simulatedapplication)。下图说明了这两类应用层程序与运输层代理之间的关系:流量发生器一般用在UDP代理之上,应用模拟器一般用在TCP代理之上。Application/Traffic/ExponentialApplication/FTPAgent/UDPAgent/TCP/FullTcpAPIAPI应用程序与运输层代理之间的关系在NS2中常用的application有:
Application/FTP-----------------------------提供TCP将发送的数据数量
Application/Traffic/CBR-------------------以持续的比特率产生包裹
Application/Traffic/Exponential-----------处于中断周期时,不发送信息;工作周期时,以持续的比特率产生包裹。两个周期的长度均按指数分布。Application/Traffic/Trace------------------通信量从一个trace文件中产生,并且包裹间的间隔和大小都事先被定义。除了这些application外,还可以利用类提供的方法来产生信息。例如,如果通过UDP发送数据,可以用语句
send(intnbytes)--------nbytes是应用程序给出的分组的长度创建一个利用UDP作为传送协议的CBR信息源,并将其同节点n0绑定。
setudp0[newAgent/UDP]
$nsattach-agent$n0$udp0
setcbr0[newApplication/Traffic/CBR]
$cbr0attach-agent$udp0
$cbr0setpacket_size_1000
$udp0setpacket_size_1000
$cbr0setrate_1000000利用TCP作为传送协议的FTP
application,并同节点n1绑定的方法相似:settcp1[newAgent/TCP]$nsattach-agent$n1$tcp1setftp1[newApplication/FTP]$ftp1attach-agent$tcp1$tcp1setpacket_size_1000举例如果信息流中止处理,udp和tcp就必须和信息量sink相连接。分别用下面两个类来表示:Agent/TCPSink-------------TCPsinkAgent/Null------------------UDPsink用下面语句表示同udp0连接并同n2绑定的UDPsink:
setnull[newAgent/Null]
$nsattach-agent$n2$null
$nsconnect$udp0$null
标准的TCPsink每接收一个包裹能够获得确认信息,并同n3绑定,tcp1连接:setsink[newAgent/Sink]$nsattach-agent$n3$sink$nsconnect$tcp1$sink
也可以用另外的方法创建一个标准的TCP,同n1、n3连接,ID为1:$nscreate-connectionTCP$n1TCPSink$n31链路链路(Link)是网络拓扑的第二部分,是NS2复合网络组件的另一个大类。创建简单链路:
setns[newSimulator]
$nssimplex-link[node0][node1][bandwidth][delay][queue_type]
这个命令建立了一条从node0到node1的链路,改link的带宽为bandwidth,延迟为delay,队列类型为queue_type。双向链路的创建也相似。例如:创建一条从n0到n2的链路,队列类型为DropTail$nsduplex-link$n0$n215Mb10msDropTailTraceTrace的功能是详细记录模拟的过程,trace可以根据用户的需要记录模拟过程中的任何一个细节。例如下面语句:settrace_all[openall.datw]$nstrace-all$trace_all$nsflush-traceclose$trace_all首先,打开输出文件,然后处理事件记录在文件中。模拟的最后,trace缓存被充满,文件关闭。下面是一个trace文件的例子:+1.8437502cbr210-------00.03.1225610-1.8437502cbr210-------00.03.1225610r1.8447121cbr210-------13.01.0195600d1.8456620ack40-------23.20.182602+1.8456602tcp1000-------20.13.2102611-1.8456602tcp1000-------20.13.2102611
r:接收(receive)+:入队(enqueue)
d:丢失(drop)-:出队(dequeue)模拟当模拟拓扑创建之后,所有的代理都要配置,例如模拟的开始和结束。模拟的开始和结束语句为:$nsat$simtime“finish”----------------------模拟结束
$nsrun------------------------------------------模拟开始结束过程:procfinish{}{globalnstrace_all$nsflush-traceclose$trace_allexit0}开始或者结束的时间:$nsat0.0“cbr0start”$nsat50.0“ftp1start”$nsat$simtime“cbr0stop”$nsat$simtime“ftp1stop”简单的NS2例题创建一个如下图拓扑结构,加入一个利用UDP作为传送协议的CBR信息源,并将所有信息记录到一个trace文件中。n0n2
n13Mbps1ms5Mbps15ms代码如下:setns[newSimulator]#Enablingtracingofalleventsofthesimulationsetf[openex.namw]$nsnamtrace-all$fseta[openex.trw]$nstrace-all$a#Definingafinishprocedureprocfinish{}{globalnsfa$nsflush-traceclose$fclose$aexecnamex.nam&exit0}#Creationofthenodessetn0[$nsnode]setn1[$nsnode]setn2[$nsnode]$nscolor1Blue#Creationofthelinks$nsduplex-link$n0$n13Mb1msDropTail$nsduplex-link$n1$n21Mb15msDropTail#Creationofacbr-connectionusingUDPsetudp0[newAgent/UDP]$nsattach-agent$n0$udp0setcbr0[newApplication/Traffic/CBR]$cbr0attach-agent$udp0$cbr0setpacket_size_1000$udp0setpacket_size_1000$cbr0setrate_1000000$udp0setclass_0setnull0[newAgent/Null]$nsattach-agent$n2$null0$nsconnect$udp0$null0$udp0setfid_1#Schedulingtheevents$nsat0.1"$cbr0start"$nsat0.5"$cbr0stop"$nsat1.0"finish"$nsrun用NS执行模拟后,显示如下:(1)网络原始图(2)网络运行仿真图(节点1至节点2)(3)网络运行仿真图(节点0至节点1至节点2)结果分析End-to-EndDelay、Jitter、PacketLoss、和ThroughputNam、awk、xgragh、gnuplot等模拟拓扑Tcl脚本Example.tclNam结果Out.tr跟踪文件格式+0.112cbr1000-------21.03.100-0.112cbr1000-------21.03.100+0.10812cbr1000-------21.03.111-0.10812cbr1000-------21.03.111r0.11412cbr1000-------21.03.100+0.11423cbr1000-------21.03.100-0.11423cbr1000-------21.03.100+0.11612cbr1000-------21.03.122-0.11612cbr1000-------21.03.122r0.12212cbr1000-------21.03.111+0.12223cbr1000-------21.03.111.................................................................awkawk是一种程序语言。它具有一般程序语言常见的功能。因awk语言具有某些特点,如:使用直译器(Interpreter)不需先行编译;变量无型别之分(Typeless),可使用文字当数组的注标(AssociativeArray)等特色。使用awk撰写程序比起使用其它语言更简洁便利且节省时间。awk还具有一些内建功能,使得awk擅于处理具数据列(Record),字段(Field)型态的数据;此外,awk内建有pipe的功能,可将处理中的数据传送给外部的Shell命令加以处理,再将Shell命令处理后的数据传回awk程序,这个特点也使得awk程序很容易使用系统资源。Awk如何使用资料列:awk从数据文件上读取的基本单位,以tracefile为例,awk读入的第一笔资料列为”+0.112cbr1000-------21.03.100”第二笔资料列为“-0.112cbr1000-------21.03.100”一般而言,一笔数据列相当于数据文件上的一行资料。字段(Field):为数据列上被分隔开的子字符串。以资料列”+0.112cbr1000-------21.03.100”为例,一二三四五六七八九十十一十二+0.112cbr1000-------21.03.100一般而言是以空格符来分隔相邻的字段。当awk读入数据列后,会把每个字段的值存入字段变量。字段变量意义$0为一字符串,其内容为目前awk所读入的资料列.$1代表$0上第一个字段的数据.$2代表$0上第二栏个位的资料.…………程序主要节构: 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。
工作流程
执行awk时,它会反复进行下列四步骤。1.自动从指定的数据文件中读取一笔数据列。2.自动更新(Update)相关的内建变量之值。3.逐次执行程序中所有的Pattern{Actions}指令。4.当执行完程序中所有Pattern{Actions}时,若数据文件中还有未读取的料,则反复执行步骤1到步骤4。awk会自动重复进行上述的四个步骤,所以使用者不须在程序中写这个循环。
End-to-EndDelay
把量测CBR封包端点到端点间延迟时间的awk程序,写在文件measure-delay.awk
中执行方法:($为shell的提示符号)$awk-fmeasure-delay.awkout.tr若是要把结果存到档案,可使用导向的方式。(把结果存到cbr_delay档案中)$awk-fmeasure-delay.awkout.tr>cbr_delay执行结果:0.1000000.0387060.1080000.0387060.1160000.0387060.1240000.0387060.1320000.038706………xgraph
在Shell的提示符号后输入startxwin.bat
xgraphcbr_delaygnuplot
gnuplot是一个命令导向的交谈式绘图程序(command-driveninteractivefunctionplottingprogram)。使用者输入的每一项命令,可以逐步设定或修改绘图环境。它以图形表达数据或涵数,使我们可以藉由图形做更进一步的分析。$gnuplot以cbr_delay为例,先简单示范如何把图给画出来。画图的指令是plot,要画的档案cbr_delay
。gnuplot>plot“cbr_delay”修改环境变量坐标轴(Axis):绘图参数在设定坐标轴方面的参数可分为变量名称、标点、网格、显示范围、坐标轴显示方式与显示与否等六方面的设定。
功能绘图参数名称标点设定xtics,ydtics网格设定grid坐标显示方式logscale显示范围设定autoscale,xrange,yrange坐标轴显示与否xzeroaxis,yzeroaxisxtics是对X坐标轴上的标点做设定。如起始点、结束点、间隔或在轴上特定点放特定的名称。其语法为:setxtics{{<start>,<incr>{,<end>}}| {({"<label>"}<pos>{,{"<label>"}<pos>}...)}}unsetxtics#不标示任何X轴上的标点。showxtics#显示X轴标点的状况。ytics与xtics相似,不同点是作用在y轴上gnuplot>plotsin(x)在x轴上的标点设定是以5为单位。若是觉得想要把标点距离设小一点,例如设为1,可以使用gnuplot>setxtics-10,1,10gnuplot>plotsin(x)网格设定在XY坐标平面上依刻度画上方格子。gnuplot>setgridgnuplot>plotsin(x)若是想要把网格拿掉,只要在下unsetgrid即可
坐标显示方式分为线性与对数两种。一般为前者,若要改为对数方式,其语法为:setlogscale<axes><base>其中axes为X轴、Y轴、Z轴的任意组合。base预设为10。显示范围设定改变各轴的显示范围。autoscale参数设定后gnuplot自动调整显示范围。而xrange、yrange则是可以由使用者设定该轴的范围。以xrange为例,其语法为:
setxrange[{<xmin>:<xmax>}]其中参数<xmin>与<xmax>代表X轴的起点与终点,可以是数字或数学式子。例:gnuplot>setxrange[0:10]gnuplot>plotsin(x)坐标轴显示与否设定设定是否要画出坐标轴,以X轴为例:setxzeroaxis#设定显示X坐标轴unsetxzeroaxis#设定不显示X坐标轴showxzeroaxis#检查X坐标轴显示与否gnuplot>setxzeroaxisgnuplot>plotsin(x)标示(Label)GNUPLOT除了绘出图形外,尚可加入批注做为辅助说明。这批注包括文字与线条两方面,其提供的设定有
功能绘图参数名称线条arrow文字批注key,label,title,xlabel,ylabel线条在图上画一线段可以选择有无箭头。其语法为setarrow{<tag>}{from<sx>,<sy>{,<sz>}}{to<ex>,<ey>{,<ez>}}{{no}head}unsetarrow{<tag>}#删除一线条showarrow#显示线条使用情况其中参数<tag>是给该条线条一个整数名称,若不设定则为最小可用整数。此线条由坐标(sx,sy,sz)到(ex,ey,ez)(在2D中为(sx,sy)到(ex,ey))。参数nohead为画没有箭头的线段,参数head或没有nohead为画有箭头的线段。#画一带有箭头的线条由原点到(1,2)。gnuplot>setarrowto1,2#画一名为3的带箭头线条由(0.4,0.3)到(0.2,0.1)。gnuplot>setarrow3from0.4,0.3to0.2,0.1#删除名为3的线条。gnuplot>unsetarrow3#删除所有线条。guplot>unsetarrow文字批注分为设定标头(title)和标示(label)。标头(title):设定为在图的正上方加上说明本图的文字。其语法为:settitle{"<title-text>"}{<xoff>}{,<yoff>}showtitle其中设定参数<xoff>或<yoff>为微调标头放置的地址。xlabel,ylabel的语法与title相同,其各自描述一坐标轴。标示(label)为在图上任一位置加上文字说明,一般与线条一并使用。
setlabel{<tag>}{"<label_text>"}
{at<x>,<y>{,<z>}}{<justification>} unsetlabel{<tag>}#删除一标示showlabel#显示标示使用情况其中参数<tag>与"线条"(arrow)中<tag>意义相同,用以区别不同的
label。参数
<justification>是调整文字放置的位置,可以是
left,right或
center。
#将y=x放在坐标(1,2)之处。gnuplot>setlabel“y=x”at1,2 #将y=x^2放在坐标(2,3)之处,并命名为3。
gnuplot>setlabel3"y=x^2"at2,3right #将名为3的标示居中放置。
gnuplot>setlabel3center#删除名为3的标示。gnuplot>unsetlabel3#删除所有标示。gnuplot>unsellabel一般绘一图形后,gnuplot会将函数名称或图形文件名称置于右上角。key参数设定可改变名称放置位置。其语法为: setkey setkey<x>,<y>{,<z>} #其中参数<x>,<y>,<z>设定名称放置位置。
unsetkey #不显示名称
showkey #再度显示名称例gnuplot>settitle“cbr_delay”gnuplot>set
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 技术服务合同协议成功秘诀
- 轴流风机购销合同模板
- 玩具联盟采购合同样本
- 个人教育贷款居间服务合同
- 酒店用品采购协议
- 借款合同格式与注意事项
- 企业培训管理服务合同
- 装修合同解除协议书编写
- 个人安全我保证
- 老年人居家养护合同
- 幼儿园班级幼儿图书目录清单(大中小班)
- 烈士陵园的数字化转型与智能服务
- 医院与陪护公司的协议范文
- 古琴介绍(英文)(部编)课件
- DL-T5704-2014火力发电厂热力设备及管道保温防腐施工质量验收规程
- 2024年山东省烟台市中考道德与法治试题卷
- 女性生殖健康与疾病智慧树知到期末考试答案章节答案2024年山东中医药大学
- (高清版)JGT 225-2020 预应力混凝土用金属波纹管
- 2023-2024学年四川省绵阳市九年级上册期末化学试题(附答案)
- 心电图进修汇报
- 中医科进修总结汇报
评论
0/150
提交评论