南邮NS仿真实验Word格式文档下载.docx

上传人:b****5 文档编号:18555699 上传时间:2022-12-27 格式:DOCX 页数:15 大小:205.20KB
下载 相关 举报
南邮NS仿真实验Word格式文档下载.docx_第1页
第1页 / 共15页
南邮NS仿真实验Word格式文档下载.docx_第2页
第2页 / 共15页
南邮NS仿真实验Word格式文档下载.docx_第3页
第3页 / 共15页
南邮NS仿真实验Word格式文档下载.docx_第4页
第4页 / 共15页
南邮NS仿真实验Word格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

南邮NS仿真实验Word格式文档下载.docx

《南邮NS仿真实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《南邮NS仿真实验Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

南邮NS仿真实验Word格式文档下载.docx

(6)测试:

在终端输入ns。

屏幕上出现%,说明安装成功了。

二、构造模型并仿真网络吞吐量与时间的关系

(1)我们确定基本模型是A主机经过节点B向节点C发送TCP包,AB和BC段都是1M的带宽。

带宽加倍就是将AB和BC变成2M的,而链路加倍就是增加一个节点D,从而增加AD和DC段,A通过B和D节点向C发送数据,并且AB和BC,AD和DC的带宽都是1M的。

(2)编写带宽加倍的脚本bandw.tcl如下

setns[newSimulator];

#产生一个模拟的对象

#定义数据流颜色

$nscolor1Red;

#1为红色

#开启Trace跟踪文件,记录分组传送的过程

settracefile[openbandwidth.trw]

$nstrace-all$tracefile

#开启NAM显示文件

setnamfile[openbandwidth.namw]

$nsnamtrace-all$namfile

#定义结束过程,关闭Trace文件和NAM显示文件,模拟结束时会进行调用

procfinish{}{

globalnstracefilenamfile

$nsflush-trace

close$tracefile

close$namfile

#以背景执行的方式去执行NAM

execnambandwidth.nam&

exit0

}

#定义节点n0~n2

setn0[$nsnode]

setn1[$nsnode]

setn2[$nsnode]

#定义节点间的双向链路(包括带宽、延时和队列的类型)

$nsduplex-link$n0$n14Mb10msDropTail

$nsduplex-link$n1$n24Mb10msDropTail

#建立一个TCP连接

settcp[newAgent/TCP];

#建立一个TCP发送代理

$tcpsetclass_2

$nsattach-agent$n0$tcp;

#绑定TCP发送代理到节点n0

setsink[newAgent/TCPSink];

#建立一个TCP接收代理

$nsattach-agent$n2$sink;

#绑定TCP接收代理到节点n2

$nsconnect$tcp$sink;

#连接TCP发送代理和接收代理

$tcpsetfid_1

#在TCP连接上建立FTP流

setftp[newApplication/FTP];

#建立一个FTP应用

$ftpattach-agent$tcp;

#将FTP流应用绑定到TCP发送代理

$ftpsettype_FTP

#设置代理的启动和停止时间

$nsat0.5"

$ftpstart"

;

#设定ftp流在0.5s开始

$nsat4.5"

$ftpstop"

#设定ftp流在4.5s结束

#在模拟结束时调用结束过程

$nsat5.0"

finish"

#执行模拟

$nsrun

编写链路加倍的脚本linkw.tcl如下

#产生一个仿真的对象

settracefile[openlink.trw]

setnamfile[openlink.namw]

#定义结束过程,关闭Trace文件和NAM显示文件,仿真结束时会进行调用

execnamlink.nam&

$nsrtprotoDV;

#告知simulator使用动态路由

NodesetmultiPath_1;

#simulator中所有新的节点均使用多径

#定义节点n0~n3

setn3[$nsnode]

$nsduplex-link$n0$n12Mb10msDropTail

$nsduplex-link$n0$n32Mb10msDropTail

$nsduplex-link$n1$n22Mb10msDropTail

$nsduplex-link$n3$n22Mb10msDropTail

$nsconnect$tcp$sink;

$ftpattach-agent$tcp;

#执行模拟

在终端键入两条命令:

nsbandwith.tcl和nslinkwidth.tcl,之后会生成nam文件和trace文件。

其中nam文件的图形如下:

带宽加倍的nam动画

链路加倍的nam动画

(3)编写gawk程序,分析trace文件

trace文件记录了仿真过程中事件的类型,事件发生的时间,分组的大小类型等等。

通过编写gawk程序来分析trace文件,从而分析网络的性能。

执行以上两条命令之后会生成bandwith.tr和linkwidth.tr,这里我们编写了throught.awk来分析它们,程序如下:

BEGIN{

init=0;

i=0;

{

action=$1;

time=$2;

node_1=$3;

node_2=$4;

src=$5;

pktsize=$6;

flow_id=$8;

node_1_address=$9;

node_2_address=$10;

seq_no=$11;

packet_id=$12;

if(action=="

r"

&

&

((node_1==1&

node_2==2)||(node_1==3&

node_2==2))&

flow_id==1){

pkt_byte_sum[i+1]=pkt_byte_sum[i]+pktsize;

if(init==0){

start_time=time;

init=1;

}

end_time[i]=time;

i=i+1;

}

END{

#为了画图好看,把第一笔记录的throughput设为零,以表示传输开始

printf("

%.2f\t%.2f\n"

end_time[0],0);

for(j=1;

j<

i;

j++)

th=pkt_byte_sum[j]/(end_time[j]-start_time)*8/1000;

printf("

end_time[j],th);

#为了画图好看,把第后一笔记录的throughput再设为零,以表示传输结束

end_time[i-1],0);

(3)利用gnuplot绘图

通过命令gawk-fthroughput.awkbandwidth.tr>

band_th将带宽加倍的分析结果存储到文件band_th中。

通过命令gawk-fthroughput.awklink.tr>

flink_th将链路加倍的分析结果存储到文件flink_th中。

我们因此得到了吞吐量与时间的关系的相关数据。

在终端中输入gnuplot,启动gnuplot绘图环境。

为了保证绘制的图片以~.jpg格式的图片文件形式输出,先键入两条命令:

settermjpeg

#设置输出图片的格式

setoutput'

band_th.jpg'

然后用以下命令将两条曲线画在一个坐标图中。

plot“band_th” 

wl 

plot“link_th” 

wl

绘图如下:

网络的吞吐量与时间关系图

由Trace文件的分析结果,我们可以看出,带宽加倍链路的网络吞吐量比链路加倍链路的网络吞吐量大。

三、仿真网络吞吐量与数据包大小的关系

以上是在TCP下仿真的,我们还使用同样的网络模型在UDP下分析了网络的吞吐量与UDP包大小的关系。

(1)编写带宽加倍的Tcl脚本程序bandw.tcl如下

#全局变量opt(rate)和过程getopt

setopt(size)0;

#变量opt(rate)保存数据速率值

procgetopt{argcargv}{;

#过程getopt获取从命令行传递过来的数据值

globalopt

setopt(size)[lindex$argv0]

#建立一个模拟对象

setns[newSimulator]

#定义不同数据流的颜色

$nscolor1Blue

$nscolor2Red

#开启Trace跟踪文件,记录分组传递的过程

settracefd[openbandw.trw]

$nstrace-all$tracefd

setnf[openbandw.namw]

$nsnamtrace-all$nf

#定义结束过程,关闭Trace文件和NAM文件,模拟结束是进行调用

globalnstracefdnf

close$tracefd

close$nf

#定义节点n0-n2

#定义节点间的双向链路(包括带宽,延时和队列的类型)

#调用过程getopt获取数据发送的速率

getopt$argc$argv

puts"

opt(size)=$opt(size)"

#建立一个UDP连接

setudp[newAgent/UDP]

$nsattach-agent$n0$udp

setnull[newAgent/Null]

$nsattach-agent$n2$null

$nsconnect$udp$null

$udpsetfid_2

#在UDP连接代理上建立CBR流

setcbr[newApplication/Traffic/CBR]

$cbrattach-agent$udp

$cbrsettype_CBR

$cbrsetpacket_size_$opt(size)B;

#$opt(size)设定包的大小

$cbrsetrate_1900Kb

#设置代理的启动和停止时间

$cbrstart"

$cbrstop"

#模拟结束是调用结束过程

StartSimulation..."

链路加倍的Tcl脚本程序linkw.tcl如下

settracefd[openlinkw.trw]

setnf[openlinkw.namw]

NodesetmultiPath_1;

$nsduplex-link$n0$n11Mb10msDropTail

$nsduplex-link$n1$n21Mb10msDropTail

$nsduplex-link$n0$n31Mb10msDropTail

$nsduplex-link$n3$n21Mb10msDropTail

#$cbrsettype_CBR

$cbrsetpacket_size_$opt(size);

#设定包的大小

$cbrsetrate_1900Kb;

#将速率设置为1900

#$cbrsetrandom_false

(2)编写gawk程序,分析trace文件

运行以上两个Tcl脚本会生成两个trace文件bandw.tr和linkw.tr

用throught.awk来分析以上脚本生成的trace文件,程序如下:

event=$1;

time=$2;

from_node=$3;

to_node=$4;

pkt_type=$5;

pkt_size=$6;

flag=$7;

uid=$12;

if(event=="

to_node==2&

pkt_type=="

cbr"

){

pkt_byte_sum[i+1]=pkt_byte_sum[i]+(pkt_size-20);

if(init==0){

start_time=time;

init=1;

end_time[i]=time;

i++;

th=8*pkt_byte_sum[i-1]/(end_time[i-1]-start_time)/1000;

%d%.2f\n"

rate,th);

(3)编写shell脚本程序来控制包的大小变化

通过shell脚本程序get_performb和get_performl,我们可以改变UDP包的大小,从而观察出在不同的包大小下的网络的吞吐量,这样就避免了手动重复改变包大小这一参数,程序如下:

shell脚本程序get_performb

#!

/bin/sh

i=500

while["

$i"

-le2500];

do

nsbandw.tcl$i

gawk-fthrought.awksize=$ibandw.tr>

>

throught_b;

#存放数据

i=$(($i+50))

done

shell脚本程序get_performl

nslinkw.tcl$i

gawk-fthrought.awksize=$ilinkw.tr>

throught_l;

从程序可以看出包大小的起始值是500B,步长为50B,终止点是2500B。

在终端执行./get_performb可以分析bandw.tr,分析的数据存放在throught_b中;

同理执行./get_performl可以分析bandw.tr,分析的数据存放在throught_l中。

然后我们就可以利用throught_b和throught_l中的数据进行绘图了。

(4)绘图

绘图程序用gnuplot工具绘图,在终端键入gnuplot,启动gnuplot绘图环境,为了将图片以jpg格式输出,我们有如下程序:

gnuplot>

settermjpeg

#设置图片输出的格式

setoutput"

throught.jpg"

setxlabe'

packetsize'

#设置图片的x和y轴的含义

setylabe'

throughput'

plot"

throught_b"

wl,"

throught_l"

wl

#绘图

绘图如下:

网络的吞吐量与UDP包大小的关系图

从图中可以看出UDP包大小在1000B以下或在1850B以上时,两网络的吞吐两基本相同,但UDP包的大小超过1000B时,链路加倍网络的吞吐量急剧下降。

并且在1000B到1850B之间带宽加倍的吞吐量一直高于链路加倍的吞吐量。

综上分析了网络的吞吐量随时间的变化以及随包大小的变化,我们可以看出带宽加倍的吞吐量优于链路加倍的吞吐量。

.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1