运行平台:虚拟机VMwareWorkstation11.0
操作系统:Linux/CentOS6.5仿真分析工具:NS2.35中的仿真软件ns,图形界面nam,编译工具awk,图表编辑器xgraph
网络拓扑图:
掌握NS2仿真工具的使用方法,能够模拟真实场景中的网络传输模型,熟悉几种常用的网络协议,了解NS仿真软件的内部结构。通过仿真实验,模拟网络数据包收发、传输和丢失,并将实验数据记录到文件中,使用仿真软件对实验数据生成实验图表,分析实验结果。
CentOS中yum的使用方法:找到安装包yumsearch*lib*,例如:yumsearchlib,就可已找到以下的一些安装包;然后输入以下命令:
yuminstalllibX11-devel
yuminstalllibXt-devel
yuminstallgcc-c++
下载ns2.35安装包,下载后的文件格式是ns2.35.tar.gz,可以在装有vmware-tools的系统中,直接打开压缩文件,并且能够将其拖入到指定安装的目录下/home/byf。找到INSTALL文件所在的位置,输入
./install
在目录/etc下,找到profile文件,对该文件进行编译
sudogeditprogile
输入相应的路径:
exportPATH=$PATH:/home/byf/ns-allinone-2.35/bin:/home/byf/ns-allinone/2.35/tcl8.5.10/unix:/home/byf/ns-allinone/2.35/tk8.5.10/unix:/usr/sbin:/usr/bin:/usr/local/bin:usr/local/sbin:/bin:/sbin
exportLD_LIBRARY_PATH=/home/byf/ns-allinone-2.35/otcl-1.14:/home/byf/ns-allinone-2.35/lib
exportTCL_LIBRARY=/home/byf/ns-allinone-2.35/tcl8.5.10/library
加粗的字体用作程序运行后,可能出现的一些常规错误。
接下来是环境变量的配置:在目录/home/username下(也就是/home/byf)操作:
#sudogedit.bashrc
根据用户的习惯,来设置一些工作环境。
1)创建模拟器对象,用来定义和控制模拟过程。在这个过程中,首先创建一个simulator对象。
#产生一个仿真的对象
setns[newSimulator]
2)配置节点属性。
#针对不同的资料流定义不同的颜色,这是要给NAM用的
$nscolor0blue
$nscolor1red
$nscolor2white
#产生四个网络节点
setn0[$nsnode]
setn1[$nsnode]
setn2[$nsnode]
setn3[$nsnode]
2)设置跟踪文件
#开启一个tracefile,用来记录封包传送的过程
setf[openout.trw]
$nstrace-all$f
#开启一个NAMtracefile
setnf[openout.namw]
$nsnamtrace-all$nf
3)创建节点拓扑结构。
#把节点连接起来
$nsduplex-link$n0$n25Mb2msDropTail
$nsduplex-link$n1$n25Mb2msDropTail
$nsduplex-link$n2$n31.5Mb10msDropTail
#设定节点的位置,这是要给NAM用的
$nsduplex-link-op$n0$n2orientright-up
$nsduplex-link-op$n1$n2orientright-down
$nsduplex-link-op$n2$n3orientright
4)设置代理和应用层协议,并进行绑定。
#建立一条UDP的联机
setudp0[newAgent/UDP]
$nsattach-agent$n0$udp0
setcbr0[newApplication/Traffic/CBR]
$cbr0attach-agent$udp0
setudp1[newAgent/UDP]
$nsattach-agent$n3$udp1
#在NAM中,UDP的联机以红色表示
$udp1setclass_1
#在UDP联机之上建立CBR应用程序
setcbr1[newApplication/Traffic/CBR]
$cbr1attach-agent$udp1
setnull0[newAgent/Null]
$nsattach-agent$n3$null0
setnull1[newAgent/Null]
$nsattach-agent$n1$null1
$nsconnect$udp0$null0
$nsconnect$udp1$null1
$nsat1.0"$cbr0start"
$nsat1.1"$cbr1start"
#建立一条TCP的联机
settcp[newAgent/TCP]
$tcpsetclass_2
setsink[newAgent/TCPSink]
$nsattach-agent$n0$tcp
$nsattach-agent$n3$sink
$nsconnect$tcp$sink
#在TCP联机之上建立FTP应用程序
setftp[newApplication/FTP]
$nsat1.2"$ftpstart"
#结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)
$nsat1.35"$nsdetach-agent$n0$tcp;$nsdetach-agent$n3$sink"
puts$f"$now[expr(($bw0+$holdrate1)*8)/(2*$time*1000000)]"
puts[$cbr0setpacketSize_]
puts[$cbr0setinterval_]
6)使用#定义一个结束的程序
procfinish{}{
globalnsfnf
$nsflush-trace
close$f
close$nf
execxgraphout.tr-geometry800x400&
puts"runningnam..."
execnamout.nam&
exit0
}
#执行仿真
$nsrun模拟器对象的run过程开始模拟。
7)结果分析。模拟结束后,将得到保存模拟过程的trace文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用gnuplot等画图工具直观的显示数据分析结果。
在1.0s时节点0开始通过节点2,向节点3传输用户数据包,代码为:
$nsat1.0"$cbr0start",执行结果如下图所示:
节点3在1.1s时通过节点2向节点1传输用户数据包,代码为:
$nsat1.1"$cbr1start",执行结果如下图所示:
在1.2s时,开始出现数据传输中断,数据包在节点2发生丢失现象,代码为:$nsat1.2"$ftpstart",代码的执行结果如下图所示:
在1.35s左右数据回复传输,代码为:$nsat1.35"$nsdetach-agent$n0$tcp;$nsdetach-agent$n3$sink"执行的结果如下图所示:
nam:Can'tfindausabletk.tclinthefollowingdirectories:
/home/byf/ns-allinone-2.35/tcl8.5.10/library/tk8.5/home/byf/ns-allinone-2.35/tcl8.5.10/tk8.5./lib/tk8.5/home/byf/ns-allinone-2.35/lib/tk8.5./library
……
Thisprobablymeansthattkwasn'tinstalledproperly.
是由于环境变量的问题,例如环境变量的目录在/home/username/ns2.35,而用户执行的目录在/home/username下,这样就会出现上述的问题。
通过本次实验,初步的了解到NS仿真工具的基本功能,并能够给一些简单的模型进行仿真实验分析,以及进一步对网络协议的了解,编写简单的网络协议算法,通过比较仿真的数据,反映网络协议的优劣。对已经存在的协议进一步提出改进的算法,来提升网络的传输性能。学习NS仿真软件的主要途径,是需要不断的阅读优质的源代码,对未知的代码行进行注释,反复的使用和修改成型的源代码,充分了解代码内部,各部分的函数、命令以及协议定义的方法,对以后学习代码库中的协议代码有非常重要的帮助。
实验途中可能会遇到各种问题,但是一定要坚持不断的阅读查找,并记录下来错误的地方,找到解决问题的方法。一旦学会使用,就会觉得学习起来非常的简单,对以后独立编写代码起着支撑的作用。