NS2实验报告一、实验平台和环境本实验是在Windows XP操作系统平台下安装了Cygwin软件以模仿Linux 下的编程环境,然后在Cygwin模仿的环境中安装了ns-allinone-2.34软件包,该软件包包含nam、otcl、tcl、tclcl、tk以及xgraph等软件包和辅助分析工具。
二、实验步骤2.1 安装与配置1.安装cygwina)在cygwin官方网站下载setup.exe。
b)运行setup.exe,使用默认配置选择unix安装。
c)在选择安装组件时确认安装以下内容:XFree86-base, XFree86-bin,XFree86-prog,XFree86-lib, XFree86-etc,make,patch,perl,gcc,gcc-g++,gawk,gnuplot,tar 和gzip。
Diffstat,diffutils,libXmu,libXmu-devel,libXmu6,libXmuu1,X-startup-scriptsxorg-x11-basexorg-x11-binxorg-x11-develxorg-x11-bin-dllsxorg-x11-bin-lndirxorg-x11-etcxorg-x11-fencxorg-x11-fntsxorg-x11-libs-dataxorg-x11-xwin2.安装NS2a)在NS2官方网站下载ns2-allinone-2.34.tar.gz安装包。
b)将ns2-allinone-2.34.tar.gz拷贝放入cygwin用户目录下。
c)运行cygwin,命令行下输入tar xvfz ns2-allinone-2.34.tar.gz。
d)进入ns2-allinone-2.34目录,执行./install开始安装。
e)安装结束后,会提示设定PATH,LD_LIBRARY_PATH,TCL_LIBRARY等内容,可在用户目录下修改.bashrc文件,添加以下内容:export NS_HOME=/home/Administrator/ns-allinone-2.34export PATH=$NS_HOME/nam-1.13:$NS_HOME/tcl8.4.18/unix:$NS_HOME/tk8.4.18/unix:$NS_HOME/bin:$PATHexport LD_LIBRARY_PATH=$NS_HOME/tcl8.4.18/unix:$NS_HOME/tk8.4.18/unix:$NS_HOME/otcl-1.13:$NS_HOME/lib:$LD_LIBRARY_PATHexport TCL_LIBRARY=$NS_HOME/tcl8.4.18/libraryf)进入~/ns-allinone-2.34/ns-2.34目录,可运行./validate进行验证。
3.测试a)关闭cygwin窗口,再重新打开。
b)初始化图形界面,运行startxwin.bat。
c)运行example tcl脚本。
进入~/ns-allinone-2.34/ns-2.34/tcl/ex目录,可选择运行以下example:ns simple-dyn.tclns simple-rtg.tclns simple-eqp.tclns simple-eqp1.tcl2.2 数据分析a)RED 队列分析图一当前队列大小分析图一可以得出,队列大小变化非常剧烈,而且在三秒之前,队列没有充分地利用起来,三秒之后tcp1和tcp2竞争使用队列比较剧烈。
图二平均队列大小分析图二可以看出,开始时tcp1急剧占用链路r1-r2,造成队列急剧增大。
当增大到一定值时便达到了峰值。
从第三秒开始,由于tcp2的加入,队列又有了一部分的增大,增大到最大值后便开始小幅度地波动。
b)Tcp2的延迟分布图三 Tcp2传输延迟从图一中可以看出Tcp2的最小延迟为28ms,这是由于从s2到r1需要延迟3ms,从r1到r2需要延迟20ms,从r2到s4需要延迟5ms,一共刚好延迟28ms。
另外它的延迟时间大小呈现出一定的规律。
即每次增大到一定程度时,延迟降为最小值28ms,这是因为多余的延迟是由r1结点的队列造成的,每个包到来时都要在队列中等待一段时间。
也就是说队列越长,延迟就越大,当队列长度增加到一定值时,根据RED队列丢弃算法会丢弃一些包,这导致Tcp的发送窗口降为0,队列长度也就变为0了,延迟也就降为最小值。
c)Tcp2的丢包率图四 Tcp2丢包率检测到Tcp2传输了446个包,其中丢弃的包为16个,故丢包率为3.59%。
d)Tcp2的抖动图五 Tcp2抖动性从图三中可以看出tcp2的Jitter的变化比较大,有正也有负的。
由于tcp1的存在并且s1到r1的链路延迟更小,它能够更好地占用r1到r2的链路资源。
图六 Tcp1抖动性从图四中可以看出在0到3秒内由于没有其他流抢用资源,它没有什么抖动,当tcp2介入时,它便有了一定的抖动,但不像tcp2抖动得那样厉害。
e)Tcp2的吞吐量图七 Tcp2吞吐量变化从图五中可以看出从3秒开始Tcp2的吞吐量按指数增加,当增大到一定值时便开始波动,基本上维持在0.4Mb/s左右。
这是因为链路r1到r2的带宽只有1.5Mb/s,并且tcp1在传输延迟上有更大的优势。
2.3 脚本程序主要步骤有以下几个:1.初始化一个模拟器。
2.设定相应的跟踪文件以便相应的分析工具使用,包括tr文件等,Trace对象能够把模拟过程中发生的特定类型的事件记录在tr文件中。
3.定义网络的拓扑结构,包括结点位置,链路信息等等。
4.设定传输层及应用层代理,并将传输层代理绑定在相应的结点上,将应用层的代理绑定在相应的传输层代理上。
5.建立传输层链接。
6.设定模拟的开始和结束时间。
7.运行该tcl文件,观察模拟的结果。
;#新的模拟器对象set ns [new Simulator]$ns color 1 Red$ns color 2 Blueset tn [open homework.nam w] ;#用于保存nam跟踪文件$ns namtrace-all $tnset ta [open homework.tr w] ;#保存trace文件$ns trace-all $taset homeWorkWinFile [open homeWorkWinFile w] ;#保存tcp发送窗口大小;#定义一个finish过程,包括关闭两个trace文件,以及一个nam模拟proc finish {} {global ns tn ta$ns flush-traceclose $tnclose $taexec nam homework.nam &exit 0};#定义结点set s1 [$ns node]set s2 [$ns node]set r1 [$ns node]set r2 [$ns node]set s3 [$ns node]set s4 [$ns node];#定义链路,包括起点,终点,带宽,延迟,队列处理方式$ns duplex-link $s1 $r1 10Mb 2ms DropTail$ns duplex-link $s2 $r1 10Mb 3ms DropTail$ns simplex-link $r1 $r2 1.5Mb 20ms RED$ns simplex-link $r2 $r1 1.5Mb 20ms DropTail$ns duplex-link $r2 $s3 10Mb 4ms DropTail$ns duplex-link $r2 $s4 10Mb 5ms DropTail;#定义链路的位置$ns duplex-link-op $s1 $r1 orient right-down$ns duplex-link-op $s2 $r1 orient right-up$ns simplex-link-op $r1 $r2 orient right$ns simplex-link-op $r2 $r1 orient left$ns duplex-link-op $r2 $s3 orient right-up$ns duplex-link-op $r2 $s4 orient right-down$ns queue-limit $r1 $r2 25 ;#定义队列的大小,这是要给NAM用的$ns simplex-link-op $r1 $r2 queuePos 0.5 ;#观测n2到n3之间queue的变化,这是要给NAM用的;#采用RED的队列处理方式set redq [[$ns link $r1 $r2] queue]set traceq [open homeWorkRedTrace.tr w] $redq trace curq_$redq trace ave_$redq attach $traceq;#绑定代理set tcp1 [new Agent/TCP]$ns attach-agent $s1 $tcp1set tcp2 [new Agent/TCP]$ns attach-agent $s2 $tcp2$tcp1 set fid_ 1$tcp2 set fid_ 2set sinktcp1 [new Agent/TCPSink]$ns attach-agent $s3 $sinktcp1set sinktcp2 [new Agent/TCPSink]$ns attach-agent $s4 $sinktcp2;#建立链接$ns connect $tcp1 $sinktcp1$ns connect $tcp2 $sinktcp2;#绑定应用层代理set ftp1 [new Application/FTP]$ftp1 attach-agent $tcp1set ftp2 [new Application/FTP]$ftp2 attach-agent $tcp2$ftp1 set type_ FTP$ftp2 set type_ FTP;#启动或停止应用层代理$ns at 0 "$ftp1 start" ;#ftp1在0秒位置启动$ns at 3 "$ftp2 start" ;#ftp2在3秒位置启动$ns at 10 "$ftp2 stop"$ns at 10 "$ftp1 stop";#每隔0.1秒记录窗口大小proc plotWindow {tcpSource file} {global nsset time 0.1set now [$ns now]set cwnd [$tcpSource set cwnd_]puts $file "$now $cwnd"$ns at [expr $now+$time] "plotWindow $tcpSource $file"}$ns at 0.1 "plotWindow $tcp2 $homeWorkWinFile" ;#从0.1秒开始记录tcp1的窗口大小$ns at 40 "finish" ;#在40秒位置结束$ns run三、实验结果在nam辅助分析工具中发现ftp1在零秒开始启动,ftp2在第三秒时刻开始启动,都在第十秒停止,这符合设计目标。