通信网原理实验报告ns2.docx
《通信网原理实验报告ns2.docx》由会员分享,可在线阅读,更多相关《通信网原理实验报告ns2.docx(12页珍藏版)》请在冰豆网上搜索。
通信网原理实验报告ns2
实验四ns2
一、实验目的
1.掌握ns2仿真器的使用方法;
2.增强对计算机通信网原理课程的理解。
二、实验环境
1.PC机一台;
2.cygwin、ns2软件。
三、实验内容
(一)安装与配置
1.安装cygwin
a)在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-scripts
xorg-x11-base
xorg-x11-bin
xorg-x11-devel
xorg-x11-bin-dlls
xorg-x11-bin-lndir
xorg-x11-etc
xorg-x11-fenc
xorg-x11-fnts
xorg-x11-libs-data
xorg-x11-xwin
2.安装NS2
a)在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.34
exportPATH=$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/library
f)进入~/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.tcl
nssimple-rtg.tcl
nssimple-eqp.tcl
nssimple-eqp1.tcl
(二)数据分析
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在传输延迟上有更大的优势。
(三)脚本程序
主要步骤有以下几个:
1.初始化一个模拟器。
2.设定相应的跟踪文件以便相应的分析工具使用,包括tr文件等,Trace对象能够把模拟过程中发生的特定类型的事件记录在tr文件中。
3.定义网络的拓扑结构,包括结点位置,链路信息等等。
4.设定传输层及应用层代理,并将传输层代理绑定在相应的结点上,将应用层的代理绑定在相应的传输层代理上。
5.建立传输层链接。
6.设定模拟的开始和结束时间。
7.运行该tcl文件,观察模拟的结果。
;#新的模拟器对象:
setns[newSimulator]
$nscolor1Red
$nscolor2Blue
settn[openhomework.namw];#用于保存nam跟踪文件
$nsnamtrace-all$tn
setta[openhomework.trw];#保存trace文件
$nstrace-all$ta
sethomeWorkWinFile[openhomeWorkWinFilew];#保存tcp发送窗口大小
;#定义一个finish过程,包括关闭两个trace文件,以及一个nam模拟
procfinish{}{
globalnstnta
$nsflush-trace
close$tn
close$ta
execnamhomework.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$tcp1
settcp2[newAgent/TCP]
$nsattach-agent$s2$tcp2
$tcp1setfid_1
$tcp2setfid_2
setsinktcp1[newAgent/TCPSink]
$nsattach-agent$s3$sinktcp1
setsinktcp2[newAgent/TCPSink]
$nsattach-agent$s4$sinktcp2
;#建立链接
$nsconnect$tcp1$sinktcp1
$nsconnect$tcp2$sinktcp2
;#绑定应用层代理
setftp1[newApplication/FTP]
$ftp1attach-agent$tcp1
setftp2[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}{
globalns
settime0.1
setnow[$nsnow]
setcwnd[$tcpSourcesetcwnd_]
puts$file"$now$cwnd"
$nsat[expr$now+$time]"plotWindow$tcpSource$file"
}
$nsat0.1"plotWindow$tcp2$homeWorkWinFile";#从0.1秒开始记录tcp1的窗口大小
$nsat40"finish";#在40秒位置结束
$nsrun
四、实验总结
这次实验是我第一次使用ns2软件,ns2软件学习起来比较困难,但是真正理解之后,还是很有意思的。
利用ns2软件可以进行网络的模拟仿真,进行新协议的开发和改进,比如TCP等传输协议,以及AODV等路由协议,用NS2来进行模拟是比较方便的,对于一个计算机网络来讲,这些协议是至关重要的。
但是NS2学习起来有一定的困难,大部分是C++代码与OTcl发代码,但是真正掌握了它的原理和用法,用起来还是很方便的。