一实验概述:
1学会安装和使用NS2;熟悉NS2的文档结构;掌握NS2的仿真环境、使用界面和操作方法。
2学会安装NS2仿真环境和配置。
3了解NS2的工作原理和程序组成。
4熟悉NS2中的脚本语言Tcl和Otcl
5学习分裂对象模型和TclCL
6NS的时间调度机制学习。
7学习节点,链路,定时器,代理和应用层等在NS2中的使用。
8学习nam的使用。
9案例分析,学习应用之前的知识搭建网络演示拓扑和完成发包实验。
二实验内容
2学习OTcl脚本语言的基本语法与控制流程
proc test() { #一般过程的构造
set a 43 #定义a变量 ,并赋值43
set b 27 #定义b变量 ,并赋值27
set c [expr $a +$b] #定义c变量 ,并赋值a+b
set d [expr [expr $a-$b] * $c] #定义d变量 ,并赋值(a-b)*c
for {set k 0} {$k < 10} {incr k} { #一个for循环过程
if ($k < 5} {
puts “k < 5 ,pow =[expr pow ($d,$k)] #输出”k<5,pow=d^k”
else {
puts “k>5 ,mod=[expr $d % $ k]” #输出”k>5,pow=d%k”
}
}
}
输出结果
3学习OTcl脚本语言的面向对象的语言特性
输出结果
4 Trace 分析
cat out.tr |grep "2.3 cbr"|grep ^r| column 1 10 |
#处理数据,将数据记录到jitter.txt文件中
awk '{diff =$2-old2; if (diff==0 )diff =1 ;if(diff>0){
printf("%d\t%f\n,$2,($1-old1)/diff);old1=$1;
old2=$2}}]>jitter.txt
cat out.tr |grep "2.3 cbr"|grep ^r|
awk '{diff =$11-old11; if (diff==0 )diff =1 ;if(diff>0){
printf("%d\t%f\n,$11,($11-old11)/diff);old2=$2;
old11=$11}}]>jitter.txt
#作图命令
gunplot
输出
5完整体验
set ns [new Simulator] #新建一个ns模拟器
set node_(s1) [$ns node] #定义多个节点
set node_(s2) [$ns node]
set node_(s3) [$ns node]
set node_(s4) [$ns node]
set node_(r1) [$ns node]
set node_(r2) [$ns node]
$ns duplex-link node_(s1) $node_(r1) 10Mb 2ms DropTail
#定义s1与r1之间带宽10Mb时延2ms,丢包方式DropTail
$ns duplex-linktail node_(s2) $node_(r1) 10Mb 3ms DropTail
$ns duplex-link node_(r1) $node_(r2) 1.5Mb 2ms RED
$ns queue-limit node_(r1) $node_(r2) 25 #队列最大长度25
$ns queue-limit node_(r2) $node_(r1) 25
$ns duplex-link node_(s3) $node_(r2) 10Mb 4ms DropTail
$ns duplex-link node_(s4) $node_(r2) 10mb 5ms DropTail
#对于TCP变量使用痕迹跟踪
Set tcp1 [$ns create-connection TCP/Reno $node_(s1) TCPSink $node_(s3) 0]
# s1 与s3结点建立tcp连接
$tcp1 window_ 15
Set tcp2 [$ns create-connection TCP/Reno $node_(s1) TCPSink $node_(s3) 1]
$tcp2 window_15
set ftp1 {$tcp1 attach-source FTP}
set ftp2 {$tcp2 attach-source FTP}
#跟踪队列
set redq [[$ns link $node_(r1) $node_(r2) ] queue]
set tchan_ [open all.q w] #打开 可写文件all.q
$redq trace curq
$redq trace ave_
$redq attach $tchan_ #将 踪迹写入all.q文件
$ns at 0.0 “$ftp1 start” #定义ns模拟器的开始与结束时间
$ns at 0.0 “$ftp2 start”
$ns at 10 “finish”
proc finish {} { #构建finish方法
tchan_
awkCode{
{
if ($1==”0” &&NF>2) {
print $2,$3 >> ”temp.q”;
}
else if ($1 ==”a” && NF>2) {
print $2,$3 >> “temp.a”;
}
set f [open temp.queue w] #打开可写文件temp.queue
puts $f “TitleText: red”
puts $f “Device ostscript”
if { info [exists tchan_ ] } {
close $tchan_
}
exec rm -f temp.q temp.a #执行Linux下shell脚本作图
Exec touch temp.a temp.q
exec awk $awkCode all.q
puts $f \”queue
exec cat temp.q >@ $f
puts $f \n\”ave_queue
puts cat temp.a >@ $f
close $f
exec xgraph -bb -tk -x time -y queue temp.queue
exit 0
}
$ns run
三实验总结
在如今这个信息化时代,网络几乎无处不在。他已经延伸到社会、经济、安全的每一个角落,影响着生活的方方面面。所以对网络环境的模拟是很有必要的。
1 首先,我学会了NS2网络仿真平台的基本使用。NS2是使用OTcl和C++两种编程语言、面向对象的、离散时间驱动的网络环境模拟器,提供了在无线或有线网络上的TCP、路由、多播等多种协议的模拟。
2了解了OTcl脚本语言,能够写较为简单的TCL语句。并能够使用nam演示仿真过程使之能更清晰,形象了解数据传输。
3对trace分析,并用Linux基本命令处理数据,并画图
4其次拓宽了视野,我对网络概念有了更深的理解,对于TCP/IP,UDP,
FTP 等报文传输方式有了感性的认识
5对于科学研究的方法与步骤有了初步的了解,学会了科学思维方式对于科研的重要性
6对科学研究产生了浓厚的兴趣,促进了我的学习积极性