NS2 仿真练习报告实验名称随机数的产生.docx
- 文档编号:14094303
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:19
- 大小:837.59KB
NS2 仿真练习报告实验名称随机数的产生.docx
《NS2 仿真练习报告实验名称随机数的产生.docx》由会员分享,可在线阅读,更多相关《NS2 仿真练习报告实验名称随机数的产生.docx(19页珍藏版)》请在冰点文库上搜索。
NS2仿真练习报告实验名称随机数的产生
NS2仿真练习报告
实验名称:
随机数产生器
学院:
信息与电子工程学院
专业:
通信工程
班级:
姓名:
学号:
指导老师:
目录
背景知识1
1.了解随机数产生器2
1.1种子(Seed)和分布(Distribution)2
1.2设置种子2
1.3设置分布2
2.测试随机数产生器3
2.1代码3
2.2运行结果4
3.一个在网络仿真中应用到随机数产生器的完整实例4
3.1仿真的网络结构图4
3.2效果评比指标:
吞吐量(Throughput)5
3.3TCL程序代码5
3.4分析awk程序代码6
3.5执行方法7
4.参数变化
4.1种子数量变化7
4.2变量分布时9
4.3FTP数据流数目变化11
5.参考资料13
实验目的:
了解如何在网络仿真过程中应用随机数产生器。
背景知识:
随机数的使用在网络仿真实验的过程中非常重要,凡是网络节点在一个仿真中的位置,或者是应用程序在何时开始传送或结束数据传输,都会用到随机数产生器。
因此,在本实验中,我们将学会如何使用NS2的随机数产生器及其应用。
1.了解随机数产生器
1.1种子(Seed)和分布(Distribution)
随机数产生器所产生的数值是由种子和分布所控制的,不同的种子或者是分布就会产生不同的随机数。
当一个种子和分布决定之后,随机数产生器会产生一出一个由一长串不同数字所组成的表格,当需要一个随机数时,随机数产生器就会去选取这个表格中的一个数字,当需要另一个随机数时,随机数产生器就会去选取这个表格中第二个数字,依此类推。
所以当使用种子和分布相同时,得到的随机数就会相同;若不同时,得到的随机数就会不同。
在NS2中,若种子的值是0,表示每次执行程序的时候,随机数产生器都会产生出不同的表格,也就是说每次的得到随机数都不相同。
1.2设置种子
若要在NS2中产生一个随机数产生器,并把种子设置为1,则可以把下的程序代码放入tclcode中。
setrng[newRNG]
$rngseed1
1.3设置分布
在NS2中所提供的分布有Pareto,Constant,Uniform,Exponential或HyperExponentail等。
(1)ParetoDistribution:
要提供expectation(avg_)和shaperparameter(shape_)参数,实例如下:
setr1[newRandomVariable/Pareto]
$r1use-rng$rng
$r1setavg_10.0
$r1setshape_1.2
(2)Constant:
要提供平均值(avg_)参数,实例如下所示.
setr2[newRandomVariable/Constant]
$r2use-rng$rng
$r2setavg_5.0
(3)UniformDistribution:
要提供最小值(min_)和最大值(max_)参数,实例如下所示:
setr3[newRandomVariable/Uniform]
$r3use-rng$rng
$r3setmin_0.0
$r3setmax_10.0
(4)ExponentialDistribution:
要提供平均值(avg_)参数,实例如下所示:
setr4[newRandomVariable/Exponential]
$r4use-rng$rng
$r4setavg_5
(5)HyperexponentialDistribution:
要提供平均值(avg_)和cov_参数,实例如下所示:
setr5[newRandomVariable/HyperExponential]
$r5use-rng$rng
$r5setavg_1.0
$r5setcov_4.0
2.测试随机数产生器
2.1代码11.tcl
setrng[newRNG]
$rngseed1
puts"TestingParetoDistribution"
setr1[newRandomVariable/Pareto]
$r1use-rng$rng
$r1setavg_10.0
$r1setshape_1.2
for{seti1}{$i<=3}{incri}{
puts[$r1value]
}
puts"TestingConstantDistribution"
setr2[newRandomVariable/Constant]
$r2use-rng$rng
$r2setavg_5.0
for{seti1}{$i<=3}{incri}{
puts[$r2value]
}
puts"TestingUniformDistribution"
setr3[newRandomVariable/Uniform]
$r3use-rng$rng
$r3setmin_0.0
$r3setmax_10.0
for{seti1}{$i<=3}{incri}{
puts[$r3value]
}
puts"TestingExponentialDistribution"
setr4[newRandomVariable/Exponential]
$r4use-rng$rng
$r4setavg_5
for{seti1}{$i<=3}{incri}{
puts[$r4value]
}
puts"TestingHyperExponentialDistribution"
setr5[newRandomVariable/HyperExponential]
$r5use-rng$rng
$r5setavg_1.0
$r5setcov_4.0
for{seti1}{$i<=3}{incri}{
puts[$r5value]
}
2.2运行代码得如下结果:
3.一个在网络仿真中应用到随机数产生器的完整实例:
3.1仿真的网络结构图
r1和r2是两个路由器,其中的链路是采用firstinfirstout(FIFO)的队列管理机制,频宽是10Mbps,传递的延迟时间是10ms。
来源节点s1、s2、s3和目的节点d1、d2、d3之间有三条FTP数据流,而这三条FTP数据流的起始时间是由随机数所产生的,但是时间都是1-3s,且每条数据流都会传送5s。
如下图1.1
1.1仿真的网络结构图
3.2效果评比指标:
吞吐量(Throughput)
定义:
单位时间内,所有目的结点的平均接收数据速率
Throughput=(某段时间内所有目的结点的数据接收量)/(统计的这段时间)
另外要补充一点的,在论文的实验中,在计算数据接收量并不是从模拟的起始时间就开始统计,而是让模拟经过一段时间,进入稳态才会开始统计。
3.3TCL程序代码(22.tcl)
setns[newSimulator]
#打开一个tracefile,用来记录封装包传送过程
setnd[openout.trw]
$nstrace-all$nd
#打开一个NAM记录文件
setnf[openout.namw]
$nsnamtrace-all$nf
#设置TCPflow的数目
setnflow3
#设置路由器
setr1[$nsnode]
setr2[$nsnode]
$nsduplex-link$r1$r21Mb10msDropTail
#设置queuelimit为10个packet
$nsqueue-limit$r1$r210
#设置TCP的来源节点和目的节点
#建立来源和目的节点与路由器的链路
for{seti1}{$i<=$nflow}{incri}{
sets($i)[$nsnode]
setd($i)[$nsnode]
$nsduplex-link$s($i)$r110Mb1msDropTail
$nsduplex-link$r2$d($i)10Mb1msDropTail
}
#建立TCP的联机,并在TCP联机上建立FTP应用程序
for{seti1}{$i<=$nflow}{incri}{
settcp($i)[newAgent/TCP]
setsink($i)[newAgent/TCPSink]
$nsattach-agent$s($i)$tcp($i)
$nsattach-agent$d($i)$sink($i)
$nsconnect$tcp($i)$sink($i)
setftp($i)[newApplication/FTP]
$ftp($i)attach-agent$tcp($i)
$ftp($i)settype_FTP
}
setrng[newRNG]
$rngseed1
setRVstart[newRandomVariable/Uniform]
$RVstartsetmin_0
$RVstartsetmax_1
$RVstartuse-rng$rng
#由随机数产生器去决定每一条flow的起始时间(在0~1s之内)
#每条flow传输5s,并在指定的时间,让ftp开始传输和结束
for{seti1}{$i<=$nflow}{incri}{
setstartT($i)[expr[$RVstartvalue]]
puts"startT($i)$startT($i)sec"
setendT($i)[expr($startT($i)+5)]
puts"endT($i)$endT($i)sec"
$nsat$startT($i)"$ftp($i)start"
$nsat$endT($i)"$ftp($i)stop"
}
procfinish{}{
globalnsndnf
close$nd
close$nf
$nsflush-trace
execnamout.nam&
exit0
}
#在第7秒时去调用finish函数来结束模拟
$nsat7.0"finish"
#执行模拟
$nsrun
3.4分析awk程序代码(333.awk)
BEGIN{
init=0;
startT=0;
endT=0;
}
{
action=$1;
time=$2;
from=$3;
to=$4;
type=$5;
pktsize=$6;
flow_id=$8;
node_1_address=$9;
node_2_address=$10;
seq_no=$11;
packet_id=$12;
#记录类型是tcp动作是dequeue发生事件的时间介于1.0-5.0
#由于新增结点时,结点建立的顺序为r1r2s1d1s2d2s3d3所以相对的
#结点id就为01234567
if(action=="r"&&type=="tcp"&&time>=1.0&&time<=5.0&&((from==1&&to==3)||(from==1&&to==5)||(from==1&&to==7))){
if(init==0){
starT=time;
init=1;
}
#记录在这段时间中离开队列的封包大小总和(inbytes)
pkt_byte_sum+=pktsize;
endT=time;
}
}
END{
#计算1.0-5.0s的平均带宽
printf("startT:
%fendT:
%f\n",startT,endT);
printf("pkt_byte_sum:
%d\n",pkt_byte_sum);
time=endT-startT;
throughput=pkt_byte_sum*8/time/1000000;
printf("throughput:
%.3fMbps\n",throughput);
}
3.5执行方法:
$ns22.tcl
$awk-f333.awkout.tr
4.参数变化
4.1种子数量变化
当种子Seed=1时
当种子Seed=2时
当种子Seed=3时
当种子Seed=4时
当种子Seed=5时
不同的种子数的结果
Seed
Throughput
1
0.788
2
0.800
3
0.799
4
0.784
5
0.801
Average
0.794
4.2变量分布时
Uniform分布时:
(max_1,min_0)
Pareto分布时:
Constant分布时:
Exponential分布时:
HyperExponential分布时:
4.3FTP数据流数目变化
当Flow=3时
当Flow=5时
当flow=10时
当flow=15时
当flow=20时
Nflow
Throughput(Mbps)
3
0.788
5
0.402
10
0.214
15
0.067
20
0.096
5.参考文献
NS2仿真是—多媒体和无线网络通信(柯志亨程荣祥著)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NS2 仿真练习报告 实验名称随机数的产生 仿真 练习 报告 实验 名称 随机数 产生