NS2仿真实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Ns2简单有线网络仿真实验报告
一、实验概述
1、在windows系统下安装Centos虚拟机
2、在Centos系统下安装NS2仿真工具包
3、Nam方式示例
二、实验内容
1)NS2仿真工具包安装说明
1.在Centos系统下设置root账户
2.解压NS2文件
3.安装ns-allinone-2.35
设置环境变量
4.验证NS2工具包安装情况
2)Nam方式
Otcl脚本
# 产生一个仿真的对象
set ns [new Simulator]
#针对不同的资料流定义不同的颜色,这是要给NAM用的
$ns color 1 Green
$ns color 2 Red
#开启一个NAM trace file
set nf [open out.nam w]
$ns namtrace-all $nf
#开启一个trace file,用来记录封包传送的过程
set nd [open out.tr w]
$ns trace-all $nd
#定义一个结束的程序
proc finish {} {
global ns nf nd
$ns flush-trace
close $nf
close $nd
#以背景执行的方式去执行NAM
exec nam out.nam &
exit 0
}
#产生6个网络节点
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
set n5 [$ns node]
#把节点连接起来
$ns duplex-link $n0 $n2 2Mb 10ms DropTail
$ns duplex-link $n1 $n2 2Mb 10ms DropTail
$ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
$ns duplex-link $n3 $n4 1.7Mb 30ms DropTail
$ns duplex-link $n3 $n5 1.5Mb 30ms DropTail
#设定ns2到n3之间的Queue Size为10个封包大小$ns queue-limit $n2 $n3 10
$ns queue-limit $n3 $n4 5
#$ns queue-limit $n3 $n5 10
#设定节点的位置,这是要给NAM用的
$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right
$ns duplex-link-op $n3 $n4 orient right-up
$ns duplex-link-op $n3 $n5 orient right-down
#观测n2到n3之间queue的变化,这是要给NAM用的$ns duplex-link-op $n2 $n3 queuePos 0.5
#建立一条n0-n5TCP的联机
set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n5 $sink
$ns connect $tcp $sink
#在NAM中,TCP的联机会以Green表示
$tcp set fid_ 1
#在TCP联机之上建立FTP应用程序
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ftp set type_ FTP
#建立一条UDP的联机
set udp [new Agent/UDP]
$ns attach-agent $n1 $udp
set null [new Agent/Null]
$ns attach-agent $n3 $null
$ns connect $udp $null
#在NAM中,UDP的联机会以红色表示
$udp set fid_ 2
#在UDP联机之上建立CBR应用程序
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
$cbr set type_ CBR
$cbr set packet_size_ 1000
$cbr set rate_ 1mb
$cbr set random_ false
#设定FTP和CBR资料传送开始和结束时间
$ns at 0.1 "$cbr start"
$ns at 1.0 "$ftp start"
$ns at 4.0 "$ftp stop"
$ns at 4.5 "$cbr stop"
#结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)
$ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"
#在仿真环境中,5秒后去呼叫finish来结束仿真(这样要注意仿真环境中#的5秒并不一定等于实际仿真的时间
$ns at 5.0 "finish"
#执行仿真
$ns run
3)仿真结果
仿真结束后,会产生out.nam和out.tr两个档案用来把仿真的过程用可视化的方式呈现出来
4)数据分析
1.End-to-End Delay
把测量CBR封包端点到端点间延迟时间的awk程序,写在档案measure-delay.awk档案中BEGIN {
#程序初始化,设定一变量以记录目前最高处理封包的ID。

highest_packet_id = 0;
}
{
action = $1;
time = $2;
node_1 = $3;
node_2 = $4;
type = $5;
flow_id = $8;
node_1_address = $9;
node_2_address = $10;
seq_no = $11;
packet_id = $12;
#记录目前最高的packet ID
if ( packet_id > highest_packet_id )
highest_packet_id = packet_id;
#记录封包的传送时间
if ( start_time[packet_id] == 0 )
start_time[packet_id] = time;
#记录CBR (flow_id=2) 的接收时间
if ( flow_id == 2 && action != "d" ) {
if ( action == "r" ) {
end_time[packet_id] = time;
}
} else {
#把不是flow_id=2的封包或者是flow_id=2但此封包被drop的时间设为-1 end_time[packet_id] = -1;
}
}
END {
#当资料列全部读取完后,开始计算有效封包的端点到端点延迟时间for ( packet_id = 0; packet_id <= highest_packet_id; packet_id++ ) {
start = start_time[packet_id];
end = end_time[packet_id];
packet_duration = end - start;
#只把接收时间大于传送时间的记录列出来
if ( start < end ) printf("%f %f\n", start, packet_duration);
}
}
执行方法: ($为shell的提示符号)
$awk -f measure-delay.awk out.tr
若是要把结果存到档案,可使用导向的方式。

(把结果存到cbr_delay档案中) $awk -f measure-delay.awk out.tr > cbr_delay
Xgraph画图
2、Jitter
Jitter就是延迟时间变化量delay variance
档案measure-jitter.awk
BEGIN {
#程序初始化
old_time=0;
old_seq_no=0;
i=0;
}
{
action = $1;
time = $2;
node_1 = $3;
node_2 = $4;
type = $5;
flow_id = $8;
node_1_address = $9;
node_2_address = $10;
seq_no = $11;
packet_id = $12;
#判断是否为n2传送到n3,且封包型态为cbr,动作为接受封包if(node_1==2 && node_2==3 && type=="cbr" && action=="r") { #求出目前封包的序号和上次成功接收的序号差值
dif=seq_no-old_seq_no;
#处理第一个接收封包
if(dif==0)
dif=1;
#求出jitter
jitter[i]=(time-old_time)/dif;
seq[i]=seq_no;
i=i+1;
old_seq_no=seq_no;
old_time=time;
}
}
END {
for (j=1; j <i ;j++)
printf("%d\t%f\n",seq[j],jitter[j]);
}
执行方法: ($为shell的提示符号)
$awk -f measure-jitter.awk out.tr
若是要把结果存到档案,可使用导向的方式。

(把结果存到cbr_jitter档案中) $awk -f measure-jitter.awk out.tr > cbr_jitter
Xgraph 画图
4、L oss
把量测CBR Packet Loss的情况写在档案measure-drop.awk内
BEGIN {
#程序初始化,设定一变量记录packet被drop的数目
fsDrops = 0;
numFs = 0;
}
{
action = $1;
time = $2;
node_1 = $3;
node_2 = $4;
src = $5;
flow_id = $8;
node_1_address = $9;
node_2_address = $10;
seq_no = $11;
packet_id = $12;
#统计从n1送出多少packets
if (node_1==1 && node_2==2 && action == "+")
numFs++;
#统计flow_id为2,且被drop的封包
if (flow_id==2 && action == "d")
fsDrops++;
}
END {
printf("number of packets sent:%d lost:%d\n", numFs, fsDrops); }
执行方法: ($为shell的提示符号)
$awk -f measure-drop.awk out.tr
执行结果:
这代表CBR送出了550个封包,但其中14个封包丢掉了。

相关文档
最新文档