实验四ns2实验.docx

上传人:b****2 文档编号:1664790 上传时间:2023-05-01 格式:DOCX 页数:15 大小:306.19KB
下载 相关 举报
实验四ns2实验.docx_第1页
第1页 / 共15页
实验四ns2实验.docx_第2页
第2页 / 共15页
实验四ns2实验.docx_第3页
第3页 / 共15页
实验四ns2实验.docx_第4页
第4页 / 共15页
实验四ns2实验.docx_第5页
第5页 / 共15页
实验四ns2实验.docx_第6页
第6页 / 共15页
实验四ns2实验.docx_第7页
第7页 / 共15页
实验四ns2实验.docx_第8页
第8页 / 共15页
实验四ns2实验.docx_第9页
第9页 / 共15页
实验四ns2实验.docx_第10页
第10页 / 共15页
实验四ns2实验.docx_第11页
第11页 / 共15页
实验四ns2实验.docx_第12页
第12页 / 共15页
实验四ns2实验.docx_第13页
第13页 / 共15页
实验四ns2实验.docx_第14页
第14页 / 共15页
实验四ns2实验.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验四ns2实验.docx

《实验四ns2实验.docx》由会员分享,可在线阅读,更多相关《实验四ns2实验.docx(15页珍藏版)》请在冰点文库上搜索。

实验四ns2实验.docx

实验四ns2实验

HUNANUNIVERSITY

计网实验报告

 

题目实验四:

ns2实验

学生姓名蒙寿伟

学生学号************

专业班级智能科学与技术1401班

指导老师肖晟

日期2017年6月2日

 

一、 实验目的 

安装并运行网络仿真器NS2,了解其功能模块及配套工具的使用,掌握利用NS2进行网络仿真的方法,为进一步的网络系统性能分析设计创造良好的条件。

二、 实验环境配置 

实验环境:

硬件:

计算机

软件:

ubuntu、ns2

NS2安装:

(1)配置环境

$sudoapt-getinstallbuild-essential

$sudoapt-getinstalltcl8.5tcl8.5-devtk8.5tk8.5-dev

$sduoapt-getinstalllibxmu-devlibxmu-headers

(2)安装ns2

在ns-allinone-2.35目录的终端下执行./install

三、 实验步骤

NS2仿真流程:

*建立Networkmodel:

描述整个网络的拓扑、带宽等信息

*建立trafficmodel:

描述所有的网络流量或错误情况的时间、类型、或呈何种数学分布。

*追踪分析结果:

仿真完成后,可调用nam观察整个仿真流程,或是将namfile中的信息抽取出来加以分析。

《1》建立Networkmodel

*建立ns对象

setns[newSimulator]

*建立节点

setn0[$nsnode]

*建立连接

Setduplex-link$n0$n1

队列(queue)是保持(held)或丢弃(drop)数据包的地方,目前NS2所支持的队列缓冲管理机制有drop-tail(FIFO)队列、RED缓冲管理、公平队列(FairQueueing,FQ)、随机公平队列(StochasticfairQueueing,SFQ),DRR(DeficitRound-Robin)和基于类的队列(class-basedqueueing,CBQ).

*建立局域网

$nsmakeLLQueue/DroptailMAC/802.3Channel

*产生流量

setsrc[newApplication/Traffic/CBR]

$srcattch-agent$udp

*建立排程

$nsat

$nsrun

《2》

代码:

##########################

#NS2仿真示例--nam方式

##########################

#建立对象

setns[newSimulator]

#设定颜色

$nscolor1Blue

$nscolor2Red

#打开跟踪文件out.nam,其中nf为文件句柄

setnf[openout.namw]

$nsnamtrace-all$nf

#定义结束过程

procfinish{}{

globalnsnf

$nsflush-trace

close$nf

execnamout.nam&

exit0

}

#建立四个节点

setns0[$nsnode]

setns1[$nsnode]

setns2[$nsnode]

setns3[$nsnode]

#建立节点间的链路lInk,设置带宽1Mbit/s,时延10ms,队列Drop,(FIFO)

$nsduplex-link$ns0$ns21Mb10msDropTail

$nsduplex-link$ns1$ns21Mb10msDropTail

$nsduplex-link$ns3$ns21Mb10msDropTail

#设定节点在拓扑图中的位置,使得整个图看起来布局更为合理

$nsduplex-link-op$ns0$ns2orientright-down

$nsduplex-link-op$ns1$ns2orientright-up

$nsduplex-link-op$ns2$ns3orientright

#设定nam中queue的位置,便于检测节点n2和n3之间的链路的队列

$nsduplex-link-op$ns2$ns3queuePos0.5

#为节点n0建立一个UDP代理udp0,用于产生流量,并设定flowid(流量标识符1

setudp0[newAgent/UDP]

$udp0setclass_1

$nsattach-agent$ns0$udp0

#设置udp0产生CBR流量,每隔0.005秒发生大小为500B的数据包

setcbr0[newApplication/Traffic/CBR]

$cbr0setpacketSize_500

$cbr0setinterval_0.005

$cbr0attach-agent$udp0

#为节点n1建立一个UDP代理udp0,用于产生流量,并设定flowid(流量标识符2

setudp1[newAgent/UDP]

$udp1setclass_2

$nsattach-agent$ns1$udp1

#设置udp1产生CBR流量,每隔0.005秒发生大小为500B的数据包

setcbr1[newApplication/Traffic/CBR]

$cbr1setpacketSize_500

$cbr1setinterval_0.005

$cbr1attach-agent$udp1

#为节点n3建立一个NULL代理null0,用来接受流量

setnull0[newAgent/Null]

$nsattach-agent$ns3$null0

#分别链接流量产生代理udp0,udp1和流量接受代理null0

$nsconnect$udp0$null0

$nsconnect$udp1$null0

#设置cbr0在仿真0.5秒后开始传送数据,4.5秒后停止传送数据,设置cbr1在仿真1.0秒后开始传送数据,4.0秒后停止传送数据

$nsat0.5"$cbr0start"

$nsat1.0"$cbr1start"

$nsat4.0"$cbr1stop"

$nsat4.5"$cbr0stop"

#仿真5秒后,调试结束

$nsat5.0"finish"

#执行仿真

$nsrun

执行:

实验过程:

(1)仿真0.5s后,节点n0开始向节点n2传送数据:

(2)1.0s后节点n1开始向节点n2传送数据:

(3)再一段时间后,由节点n0向节点n3发送的数据被丢弃:

(4)仿真结束:

实验分析:

(1)只有蓝色数据发送丢包的原因是:

队列缓冲管理机制是drop-tail(FIFO)队列,并且时间的设定是会让红色数据先进,蓝色数据位于队列。

蓝色的数据会被丢弃。

修改后可以预测是蓝色的先进:

红色的后进,所以应该是红色的被丢弃

(2)修改使公平:

FQ是公平队列(FairQueueing,FQ)

#建立节点间的链路lInk,设置带宽1Mbit/s,时延10ms,队列Drop,(FIFO)

$nsduplex-link$ns0$ns21Mb10msDropTail

$nsduplex-link$ns1$ns21Mb10msDropTail

$nsduplex-link$ns3$ns21Mb10msDropTail

改为:

#建立节点间的链路lInk,设置带宽1Mbit/s,时延10ms,队列Drop,(FQ)

$nsduplex-link$ns0$ns21Mb10msFQ

$nsduplex-link$ns1$ns21Mb10msFQ

$nsduplex-link$ns3$ns21Mb10msFQ

执行:

实验结果:

可以看到,红蓝的数据包的丢失率是大致相等的。

《3》

##########################

#NS2仿真示例--Xgragh方式

##########################

#建立一个对象

setns[newSimulator]

#打开输出文件

setf0[openout0.trw]

setf1[openout1.trw]

setf2[openout2.trw]

#for循环,建立n0~n4,5个节点

for{seti0}{$i<5}{incri}{

setn$i[$nsnode]

}

#建立链路

$nsduplex-link$n0$n31Mb100msDropTail

$nsduplex-link$n1$n31Mb100msDropTail

$nsduplex-link$n2$n31Mb100msDropTail

$nsduplex-link$n3$n41Mb100msDropTail

#定义过程

procfinish{}{

globalf0f1f2

close$f0

close$f1

close$f2

#调用Xgraph显示仿真结果

execxgraphout0.trout1.trout2.tr-geometry800x400&

exit0

}

#定义过程,为节点node和流量接收代理sink建立UDP连接,产生Expoo流量,并设置流量的

#size(数据包大小)/burst(突发时间)/idle(空闲时间)/rate(风律)

procattach-expoo-traffic{nodesinksizeburstidlerate}{

setns[Simulatorinstance]

#为节点建立一个udp代理soure,用于产生流量

setsource[newAgent/UDP]

$nsattach-agent$node$source

#产生Expoo流量

settraffic[newApplication/Traffic/Exponential]

$trafficsetpacketSize_$size

$trafficsetburst_time_$burst

$trafficsetidle_time_$idle

$trafficsetrate_$rate

$trafficattach-agent$source

#链接流量产生soure和流量接收代理link

$nsconnect$source$sink

return$traffic

}

#定义记录过程,周期性地记录3个流程接收代理sink0,sink1,sink2所接收的数据带宽,并分别写入3个文件f0,f1,f2中

procrecord{}{

globalsink0sink1sink2f0f1f2

setns[Simulatorinstance]

#定义过程再次被调用的时间,即调用周期

settime0.5

#获取代理已接收的字节数,即变量bytes的值

setbw0[$sink0setbytes_]

setbw1[$sink1setbytes_]

setbw2[$sink2setbytes_]

#获取当前时间

setnow[$nsnow]

#计算带宽,将结果写入文件

puts$f0"$now[expr$bw0/$time*8/1000000]"

puts$f1"$now[expr$bw1/$time*8/1000000]"

puts$f2"$now[expr$bw2/$time*8/1000000]"

$sink0setbytes_0

$sink1setbytes_0

$sink2setbytes_0

#重新排程

$nsat[expr$now+$time]"record"

}

setsink0[newAgent/LossMonitor]

setsink1[newAgent/LossMonitor]

setsink2[newAgent/LossMonitor]

$nsattach-agent$n4$sink0

$nsattach-agent$n4$sink1

$nsattach-agent$n4$sink2

setsource0[attach-expoo-traffic$n0$sink02002s1s100k]

setsource1[attach-expoo-traffic$n1$sink12002s1s200k]

setsource2[attach-expoo-traffic$n2$sink22002s1s300k]

$nsat0.0"record"

$nsat10.0"$source0start"

$nsat10.0"$source1start"

$nsat10.0"$source2start"

$nsat50.0"$source0stop"

$nsat50.0"$source1stop"

$nsat50.0"$source2stop"

$nsat60.0"finish"

$nsrun

执行:

实验结果:

Xgragh显示仿真过程中的内部状态,从图中可以看出,三条数据的峰值依次为0.1Mbit/s,0.2Mbit/s,0.3Mbit/s.

 

实验分析:

三个发送代理,可以看到发送速率是100k/bits、200k/bits、300k/bits

setsource0[attach-expoo-traffic$n0$sink02002s1s100k]

setsource1[attach-expoo-traffic$n1$sink12002s1s200k]

setsource2[attach-expoo-traffic$n2$sink22002s1s300k]

4号是接收代理

以nam方式显示出来:

可以清楚看到节点0,节点1,节点2的发送速率依次增大。

四、实验心得

这次实验的软件安装非常困难,是我对linux的使用过少造成的。

所以通过这次实验,我意识到了对linux的理解非常重要。

还有这次实验加深了我对链路层数据传输的机制的理解。

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2