实验记录
时间: 2007-3-15
地点:主教2607
实验内容:awk和gnuplot对ns模拟之后.tr文件的处理实验
1、实验用网络拓扑图为
这个网络的环境包含了四个网络节点(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秒結束传输。
2、程序源代码
编辑一个四个结点的网络源文件,保存名为tool.tcl
# 产生一个模拟的物件
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
3、运行