ns-2与TCP拥塞模拟 之一 一个简单的示例说明基本要素



ns-2TCP拥塞模拟 之一  一个简单的示例说明基本要素

nsNetworkSimulator的英文缩写,又称网络仿真器。它是一款开放源代码的网络模拟软件,最初由加州大学伯克利分校(UC Berkeley)开发。ns-2是指ns version 2

ns-2支持WindowsLinuxUnixMac及其他支持POSIX标准的操作系统。它主要支持的操作系统是Linux系统,目前几乎支持所有主流的Linux发行版本。

ns-2本质上是一个离散事件模拟器。它本身有一个虚拟时钟,所有的仿真都由离散事件驱动。

目前NS2可以用于仿真各种不同的IP网,已经实现的仿真有网络传输协议,如TCPUDP;业务源流量产生器,如FTPTELNETWeb CBRVBR;路由队列管理机制,如DroptailREDCBQ;路由算法,如AODVDSDVDSR等无线路由协议。ns-2也实现了多播以及一些MAC子层协议。


 

1.示例1:一个简单的ns-2仿真

这个示例使用如图8.2所示的网络拓扑结构,包含了4个网络节点(n0n1n2n3)。

ns-2与TCP拥塞模拟 之一 一个简单的示例说明基本要素_第1张图片


各节点之间的带宽和延迟分别标注在图上,总体上来看,网络拓朴中的带宽瓶颈是在节点n2到节点n3之间,为1.7Mbps,延迟的时间为20ms。每个节点都采用DropTail的队列管理方式,且在节点n2到节点n3之间的最大队列长度为10个包。

在节点n0n3之间定义一个FTP传输业务,该业务建立在TCP连接之上,因此在源端n0上使用TCP agent发送TCP包;目的端n3上定义一个TCPsinkagent来接收TCP包,产生ACK包并把接收的TCP包释放掉。

另外,在节点n1n3之间定义一个固定传输速率的连接(Constant Bit RateCBR)。CBR应用建立在UDP传输之上,因此在n1上定义一个UDP agent来发送UDP包,由于收到的包只需要简单丢弃,因此在n3上使用Null agent接收并释放接收的包。CBR的传送速度为1Mbps,每一个包的大小为1KB

CBR0.1s开始传送,在4.5s结束传输;FTP1.0s开始传送,在4.0s结束传输。

对应的Tcl脚本源码如下。代码中#为注释符。

#示例1:一个简单的ns-2仿真

#产生一个仿真的对象

set ns [new Simulator]

 

#针对不同的数据流定义不同的颜色,这是要给nam-1用的

$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 [$nsnode]

set n1 [$nsnode]

set n2 [$nsnode]

set n3 [$nsnode]

 

#定义节点的连接方式

$nsduplex-link $n0 $n2 2Mb 10ms DropTail

$nsduplex-link $n1 $n2 2Mb 10ms DropTail

$nsduplex-link $n2 $n3 1.7Mb 20ms DropTail

 

#设定ns2n3之间的队列长度10个包

$nsqueue-limit $n2 $n3 10

 

#设定节点的位置这个是要供给nam-1显示用的

$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

 

#观测n2n3之间队列的变化,这是要给nam-1用的

$nsduplex-link-op $n2 $n3 queuePos 0.5

 

#建立一条TCP的连接

set tcp [newAgent/TCP]

#class_是一个在agent类中定义的整型变量。放在包头中的,用处是分类、着色

$tcp setclass_ 2

$nsattach-agent $n0 $tcp

set sink [newAgent/TCPSink]

$ns attach-agent $n3 $sink

$ns connect $tcp $sink

#nam-1中,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-1中,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

 

#设定FTPCBR数据传输的开始、结束时间

$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"

 

#在仿真环境中,5s后调用结束函数finish函数

#(说明:这是模拟环境中的5s,并不是真正的时间)

$ns at 5.0 "finish"

 

#执行仿真

$ns run


上述脚本可以通过输入命令“ns <tclscript>”来进行仿真,其中<tclscript>Tcl脚本文件名。仿真结束后,除了控制台的输出外,模拟器还会产生一些记录文件。例如,上述示例脚本会生成两个文件:一个是供nam-1使用的out.nam文件,一个是记录了封包传送仿真过程中所有的事件的out.tr文件。



仿真结束后,如果正常调用nam-1的话,会动画显示仿真效果,如图所示。

  

ns-2与TCP拥塞模拟 之一 一个简单的示例说明基本要素_第2张图片



你可能感兴趣的:(tcp,Congestion,拥塞控制,ns-2)