[转] 网路模拟软体NS2来做网路效能分析需看的文章(一) 转载 貌似图片看不到了。。。

对于使用网路模拟软体来做网路效能分析的人而言,步骤通常是先设计出符合自己需要的网路模拟环境,设定其不同的参数,执行模拟,收集结果资料,最后把资料使用图片或表格把结果呈现出来以方便分析实验。一般而言,对于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]

 

[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

 

}

 

 

 

#产生四个网路节点

 

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

 

$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   1 2 cbr 1000 ------- 2 1.0 3.1 0 0

 

- 0.1   1 2 cbr 1000 ------- 2 1.0 3.1 0 0

 

+ 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

 

+ 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

 

r   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的伫列中。

 

posted on 2012-06-29 09:48  haivey  阅读(384)  评论(0)    收藏  举报

导航