NS2实验报告一、实验平台和环境本实验是在WindowsXP操作系统平台下安装了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,命令行下输入tarxvfzns2-allinone-2.34.tar.gz。d)进入ns2-allinone-2.34目录,执行./install开始安装。e)安装结束后,会提示设定PATH,LD_LIBRARY_PATH,TCL_LIBRARY等内容,可在用户目录下修改.bashrc文件,添加以下内容:exportNS_HOME=/home/Administrator/ns-allinone-2.34exportPATH=$NS_HOME/nam-1.13:$NS_HOME/tcl8.4.18/unix:$NS_HOME/tk8.4.18/unix:$NS_HOME/bin:$PATHexportLD_LIBRARY_PATH=$NS_HOME/tcl8.4.18/unix:$NS_HOME/tk8.4.18/unix:$NS_HOME/otcl-1.13:$NS_HOME/lib:$LD_LIBRARY_PATHexportTCL_LIBRARY=$NS_HOME/tcl8.4.18/libraryf)进入~/ns-allinone-2.34/ns-2.34目录,可运行./validate进行验证。3.测试a)关闭cygwin窗口,再重新打开。b)初始化图形界面,运行startxwin.bat。c)运行exampletcl脚本。进入~/ns-allinone-2.34/ns-2.34/tcl/ex目录,可选择运行以下example:nssimple-dyn.tclnssimple-rtg.tclnssimple-eqp.tclnssimple-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文件,观察模拟的结果。;#新的模拟器对象setns[newSimulator]$nscolor1Red$nscolor2Bluesettn[openhomework.namw];#用于保存nam跟踪文件$nsnamtrace-all$tnsetta[openhomework.trw];#保存trace文件$nstrace-all$tasethomeWorkWinFile[openhomeWorkWinFilew];#保存tcp发送窗口大小;#定义一个finish过程,包括关闭两个trace文件,以及一个nam模拟procfinish{}{globalnstnta$nsflush-traceclose$tnclose$taexecnamhomework.nam&exit0};#定义结点sets1[$nsnode]sets2[$nsnode]setr1[$nsnode]setr2[$nsnode]sets3[$nsnode]sets4[$nsnode];#定义链路,包括起点,终点,带宽,延迟,队列处理方式$nsduplex-link$s1$r110Mb2msDropTail$nsduplex-link$s2$r110Mb3msDropTail$nssimplex-link$r1$r21.5Mb20msRED$nssimplex-link$r2$r11.5Mb20msDropTail$nsduplex-link$r2$s310Mb4msDropTail$nsduplex-link$r2$s410Mb5msDropTail;#定义链路的位置$nsduplex-link-op$s1$r1orientright-down$nsduplex-link-op$s2$r1orientright-up$nssimplex-link-op$r1$r2orientright$nssimplex-link-op$r2$r1orientleft$nsduplex-link-op$r2$s3orientright-up$nsduplex-link-op$r2$s4orientright-down$nsqueue-limit$r1$r225;#定义队列的大小,这是要给NAM用的$nssimplex-link-op$r1$r2queuePos0.5;#观测n2到n3之间queue的变化,这是要给NAM用的;#采用RED的队列处理方式setredq[[$nslink$r1$r2]queue]settraceq[openhomeWorkRedTrace.trw]$redqtracecurq_$redqtraceave_$redqattach$traceq;#绑定代理settcp1[newAgent/TCP]$nsattach-agent$s1$tcp1settcp2[newAgent/TCP]$nsattach-agent$s2$tcp2$tcp1setfid_1$tcp2setfid_2setsinktcp1[newAgent/TCPSink]$nsattach-agent$s3$sinktcp1setsinktcp2[newAgent/TCPSink]$nsattach-agent$s4$sinktcp2;#建立链接$nsconnect$tcp1$sinktcp1$nsconnect$tcp2$sinktcp2;#绑定应用层代理setftp1[newApplication/FTP]$ftp1attach-agent$tcp1setftp2[newApplication/FTP]$ftp2attach-agent$tcp2$ftp1settype_FTP$ftp2settype_FTP;#启动或停止应用层代理$nsat0$ftp1start;#ftp1在0秒位置启动$nsat3$ftp2start;#ftp2在3秒位置启动$nsat10$ftp2stop$nsat10$ftp1stop;#每隔0.1秒记录窗口大小procplotWindow{tcpSourcefile}{globalnssettime0.1setnow[$nsnow]setcwnd[$tcpSourcesetcwnd_]puts$file$now$cwnd$nsat[expr$now+$time]plotWindow$tcpSource$file}$nsat0.1plotWindow$tcp2$homeWorkWinFile;#从0.1秒开始记录tcp1的窗口大小$nsat40finish;#在40秒位置结束$nsrun三、实验结果在nam辅助分析工具中发现ftp1在零秒开始启动,ftp2在第三秒时刻开始启动,都在第十秒停止,这符合设计目标。在发送端收到新一轮的确认包时发送包的数量也增一,传输的过程中队列的长度超过一定值时开始丢包。这由设定的队列最小的门限值和队列最大门限值决定。当队列长度小于最小门限值时一定不会丢包,只有超过最小门限值时才会发生丢包,且超过的越多丢弃的概率越大。当队列长度超过最大门限值时队列一定丢包。丢包后的确认包不再让发送窗口增大,反而从零开始增加。传送过程中,丢包不再决定于队列的长度了,而是根据平均队列长度随机丢弃,因为采用的是RED丢包机制。(注:本实验完全由本人自己完成,无另外组员)