ns2仿真工具的使用和仿真过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#产生四个网络节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set 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 $tcp set 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
对于使用网络仿真软件来做网络效能分析的人而言, 步骤通常是先设计出符 合自己需要的网络仿真环境,设定其不同的参数,执行仿真,收集结果数据,最 后把数据使用图片或表格把结果呈现出来以方便分析实验。一般而言,对于 ns2 的初学者而言,总是会遇到一个问题,就是网络仿真程序跑完后,接下来该如何 分析。这是非常重要的一个过程,所以希望 ns2 的初学者能好好的研究此章节的 内容,相信一定会对大家的研究有相当的帮助。 本节打算以一个简单的网络环境为范例,介绍如何使用一些工具来分析和呈 现模拟结果,这包含了如何去量测 End-to-End Delay、Jitter、Packet Loss、和 Throughput。而采用的方法是去分析 traffic trace 档案的方式,这种方法的优点是 简单且不需要去修改到 ns2 核心的部份, 但缺点是若是仿真数据若是太多, traffic trace 的档案会太大,这样会增加分析所需要的时间。另外一种方法,是去更改 ns2 核心,增加或修改一些档案,把所需要量测的参数直接记录下来,这种方法 的优点是模拟结束后,所需要量测的数据已经完全记录下来,但缺点是要动到 ns2 核心的部分,对于初学者而言,这是一个很大的门坎,这个方法笔者留到后 面的章节在做介绍。 笔者先对要模拟的环境做一个简单的介绍。这个网络的环境包含了四个网络 节点(n0,n1,n2,n3),如下图所示。网络节点 n0 到节点 n2 之间,和节点 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”来接受 TCP 的数据、并产生回复封包(ACK)回传送端、最后把接收的 TCP 封包释放。最后 要把这两个 agent 连起来(connect),联机才能建立。若是没有额外的参数设定, TCP 封包的长度为 1Kbytes。在这里顺便补充说明一下,对于 ns2 模拟参数内定 值设定是在 ns-allinone-2.27\ns-2.27\tcl\lib 目录下的 ns-default.tcl,有想要进一步 了解的人,可以去查看此档。另外,在节点 n1 到 n3 之间有一条固定的传输速率 的联机(Constant Bit Rate,CBR),CBR 应用程序是架构在 UDP 之上,因此必需 在 n1 使用 UDP agent 来产生” udp” 用来发送 UDP 封包, 在 n3 上使用 Null agent 来产生” sink” 以接收由 n1 传送过来的 UDP 封包, 然后把接收的封包释放。 CBR 的传送速度为 1Mbps,每一个封包大小为 1Kbytes。CBR 是在 0.1 秒开始传送, 在 4.5 秒结束传输;FTP 是在 1.0 秒开始传送,4.0 秒结束传输。 [Simulation Topology]
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 1
r 0.114 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 + - + - r + 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 2 0.122 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 0.122 2 3 cbr 1000 ------- 2 1.0 3.1 1 1
.................................................................
每一笔记录的开始都是封包事件发生的原因, 若是 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 的队列中。 接下来,笔者先简单介绍 awk,然后如何使用 awk 去分析 trace file,以得到 Throughput、Delay、Jitter、和 Loss Rate。 [awk] A.简介 awk 是一种程序语言。它具有一般程序语言常见的功能。因 awk 语言具有 某些特点, 如: 使用直译器(Interpreter)不需先行编译; 变量无型别之分(Typeless), 可使用文字当数组的注标(Associative Array)等特色。 因此, 使用 awk 撰写程序比 起使用其它语言更简洁便利且节省时间。awk 还具有一些内建功能,使得 awk 擅于处理具数据列(Record),字段(Field)型态的数据;此外, awk 内建有 pipe 的 功能,可将处理中的数据传送给外部的 Shell 命令加以处理, 再将 Shell 命令处 理后的数据传回 awk 程序,这个特点也使得 awk 程序很容易使用系统资源。 B. awk 是如何运作的 为便于解释 awk 程序架构,以及相关的术语,笔者就以上面 trace file 为例, 来加以介绍。 a.名词定义: 1. 资料列:awk 从数据文件上读取的基本单位,以 trace file 为例,awk 读入的 第一笔资料列为 ”+ 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0”
$ftp set type_ FTP #建立一条 UDP 的联机 set udp [new Agent/UDP] $ns attach-agent $n1 $udp set 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 run
源自文库
模拟结束后,会产生两个档案,一个是 out.nam,这是给 NAM 用的,用来 把模拟的过程用可视化的方式呈现出来,这可以让使用者用”看”的方式去了解 封包传送是如何从来源端送到接收端。另一个档案是 out.tr,这个档案记录了仿 真过程中封包传送中所有的事件,例如第一笔记录是一个 CBR 的封包,长度为 1000bytes,在时间 0.1 秒的时候,从 n1 传送到 n2。这个档案对我们做效能分析 很重要,所以要先对这个档案的格式做仔细的介绍。 + 0.1 - 0.1 + - 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 1 2 cbr 1000 ------- 2 1.0 3.1 0 0
[Tcl Script] # 产生一个仿真的对象 set ns [new Simulator] #针对不同的数据流定义不同的颜色,这是要给 NAM 用的 $ns color 1 Blue $ns color 2 Red #开启一个 NAM trace file set 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 }
相关文档
最新文档