NS2在通信仿真中的应用.docx
《NS2在通信仿真中的应用.docx》由会员分享,可在线阅读,更多相关《NS2在通信仿真中的应用.docx(43页珍藏版)》请在冰豆网上搜索。
![NS2在通信仿真中的应用.docx](https://file1.bdocx.com/fileroot1/2023-2/2/b3eba9e9-e1a7-4794-b433-d768fca9a90d/b3eba9e9-e1a7-4794-b433-d768fca9a90d1.gif)
NS2在通信仿真中的应用
西安邮电学院
通信与信息工程学院科研训练
题目:
NS2在通信仿真中的应用
院(系):
通信与信息工程学院
专业:
通信工程
班级:
通工0714班
学生姓名:
陈彭辉
指导教师:
陈彭辉
起止时刻:
2010年6月21日至2010年7月2日
摘要
NS是一种针对网络技术的源代码公布的、免费的软件模拟平台,研究人员利用它能够很容易的进行网络技术的开发,而且进展到今天,它所包括的模块已经超级丰硕,几乎涉及到了网络技术的所有方面。
因此,NS成了目前学术界普遍利用的一种网络模拟软件。
NS2(Network Simulator, version 2)是一种面向对象的网络仿真器,由UC Berkeley开发而成。
最初在UNIX下应用的网络协议模拟软件,是个免费软件。
此刻可在Lunix、windows环境下都可模拟。
采纳开放的体系结构,有大量的协议库支持,普遍应用于LAN、WAN、蜂窝网和卫星网络模拟。
NS2本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。
NS2 利用C++和Otcl作为开发语言。
NS能够说是Otcl的脚本说明器,它包括仿真事件调度器、网络组件对象库和网络构建模型库等。
本次的科研训练确实是通过对NS平台的熟悉和简单的大体学习,利用基于NS平台开发的软件工具NS二、NSbench、NSG2实例训练,加深关于NS平台的了解,把握大体的利用基于NS软件工具利用技术,了解NS2网络模拟中有线与无线数据包传输记录的格式,熟悉Tcl语言。
关键字:
NS2; Otcl;网络模拟软件; 实例训练
ABSTRACT
NSisonekindofnetworktechnologyforopensource,freesoftwaresimulationplatform,researcherscaneasilyuseitfornetworktechnologydevelopment,thatdevelopmenttoday,itcontainsthemodulehasbeenveryrich,almostrelatetotheallaspectsofnetworktechnology.Therefore,NShasbecomeawidelyusedinthecurrentacademicnetworksimulationsoftware.
NS2(NetworkSimulator,version2)isakindofobject-orientednetworksimulator,developedbytheUCBerkeleymade.UnderthefirstapplicationintheUNIXnetworkprotocolsimulationsoftwareisafreesoftware.CannowLunix,windowsenvironmentcanbesimulated.Anopenarchitecture,alargenumberofprotocollibrarysupport,iswidelyusedinLAN,WAN,cellularnetworksandsatellitenetworksimulation.NS2itselfhasavirtualclock,allthesimulationbythediscreteevent-driven.NS2usingC++andOtclasadevelopmentlanguage.NScanbesaidOtclscriptinterpreter,whichcontainsthesimulationeventscheduler,networkcomponentobjectlibraries,andnetworkbuildingmodeldatabase.
TheresearchtrainingisthroughtheunderstandingoftheNSplatformandsimplebasiclearning,NS-basedplatformsoftwaretoolsNS2,NSbench,NSG2examplesoftrainingtoenhanceNSplatformforknowledgeaboutthebasicuseofsoftwaretoolsbasedonNSskills,understandtheNS2networksimulationofwiredandwirelessdatapackettransmissionrecordformat,familiarwiththeTcllanguage.
Keywords:
NS2;Otcl;networksimulationsoftware;instancetraining
引言
NS是一种针对网络技术的源代码公布的、免费的软件模拟平台,研究人员利用它能够很容易的进行网络技术的开发,而且进展到今天,它所包括的模块已经超级丰硕,几乎涉及到了网络技术的所有方面。
因此,NS成了目前学术界普遍利用的一种网络模拟软件。
在每一年国内外发表的有关网络技术的学术论文中,利用NS给出模拟结果的文章最多,通过这种方式得出的研究结果也是被学术界所普遍认可的,另外,NS也可作为一种辅助教学的工具,已被普遍应用在了网络技术的教学方面。
因此,目前在学术界和教育界,有大量的人正在利用或试图利用NS。
NS2(Network Simulator, version 2)是一种面向对象的网络仿真器,由UC Berkeley开发而成。
最初在UNIX下应用的网络协议模拟软件,是个免费软件。
此刻可在Lunix、windows环境下都可模拟。
采纳开放的体系结构,有大量的协议库支持,普遍应用于LAN、WAN、蜂窝网和卫星网络模拟。
NS2 利用C++和Otcl作为开发语言。
NS能够说是Otcl的脚本说明器,它包括仿真事件调度器、网络组件对象库和网络构建模型库等。
本次科研训练——通过基于NS平台开发的软件工具NS二、NSbench、NSG2实例训练,了解NS2的组成,把握对其的利用技术,了解Otcl脚本语言。
同时要把握文献检索工具和文献检索方式,科研申请及项目开题报告的写作内容及撰写要求,科技论文的撰写要求及方式,最终提交一个综述性报告。
在本科研训练报告中第一章是科研训练和基于NS平台的软件工具NS二、NSbench、NSG2简介,第二章是介绍利用NS进行网络仿真的方式和一样进程,第三章是科研训练实例的运行结果截图及关键代码,第四章是介绍科研训练之外的需要把握的额外技术,包括文献检索工具和文献检索方式,科研申请及项目开题报告的写作内容及撰写要求,科技论文的撰写要求及方式
1 科研训练和软件工具简介
科研训练进程简介
在本次科研训练进程中,要紧通过基于NS平台开发的软件工具NS二、NSbench、NSG2进行实例训练,来了解NS二、NSbench、NSG2的组成并能够对这些要利用的软件能够在安装说明的指导下正确安装,把握对其的大体利用技术,了解Otcl脚本语言。
通过本次的科研训练能够大体了解研究方式和研究工具的利用,为以后的应用打下基础。
软件工具简介
本次的训练所利用到的软件包括NS二、NSbench、NSG2,它们均是以NS为平台开发的,能够进行网络功能的模拟,一下为对其的简介。
1.2.1 NS2简介
NS2(Network Simulator, version 2)是一种面向对象的网络仿真器,由UC Berkeley开发而成。
最初在UNIX下应用的网络协议模拟软件,是个免费软件。
此刻可在Lunix、windows环境下都可模拟。
采纳开放的体系结构,有大量的协议库支持,普遍应用于LAN、WAN、蜂窝网和卫星网络模拟。
NS2本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。
NS2 利用C++和Otcl作为开发语言。
NS能够说是Otcl的脚本说明器,它包括仿真事件调度器、网络组件对象库和网络构建模型库等。
事件调度器计算仿真时刻,而且激活事件队列中的当前事件,执行一些相关的事件,网络组件通过传递分组来彼此通信,但这并非花费仿真时刻。
所有需要花费的仿真时刻来处置分组的网络组件都必需要利用事件调度器。
它先为那个分组发出一个事件,然后等待那个事件被调度回来以后,才能做下一步的处置工作。
事件调度器的另一个用途确实是计时。
NS是用Otcl和C++编写的。
由于效率的缘故,NS将数据通道和操纵通道的实现相分离。
为了减少分组和事件的处置时刻,事件调度器和数据通道上的大体网络组件对象都利用 C++写出并编译的,这些对象通过映射对Otcl说明器可见。
当仿真完成以后,NS将会产生一个或多个基于文本的跟踪文件。
只要在Tcl脚本中加入一些简单的语句,这些文件中就会包括详细的跟踪信息。
这些数据能够用于下一步的分析处置,也能够利用NAM将整个仿真进程展现出来。
目前的版本比较多,要紧有有,,,等。
NS2的软件包组成:
NS2软件要紧包括Tcl/Tk,OTcl,NS,Tclcl,nam,xgarph部份。
以为例。
里面有,,tcl8.4.5,,,,等文件夹。
其中:
Tcl:
是一个开放脚本语言,用来对NS2进行编程;
Tk:
是Tcl的图形界面开发工具,可帮忙用户在图形环境下开发图形界面;OTcl是基于Tcl/Tk的面向对象扩展,有自己的类层次结构;
NS2:
为本软件包的核心,是面向对象的网络模拟器,用C++编写,以OTcl说明器作为前端;安装完成可产生文件。
Tclcl:
那么提供NS和OTcl的接口,使对象和变量出此刻两种语言中。
trace文件:
执行tcl脚本,进行模拟,并将所有的模拟结果以trace文件的结果输出。
Nam:
网络AniMator,将ns的结果可视化。
安装完成可产生文件。
Awk/Gawk:
将模拟结果进行数据化分析,包括丢包率和延时等。
Gnuplot/Xgraph:
将模拟结果进行图形化分析,是在数据化的结果基础上,再以图形形式展现。
后面几个可选件是NS2 为了直观的观看和分析仿真结果而提供的。
NS2特点:
1、面向对象、离散事件驱动的模拟方式。
这种方式易于实现网络建模,模拟效率高,系统易于扩展。
NS2是一种面向对象的网络仿真器,它本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。
跟实际的系统时刻不同,是自身的虚拟时刻。
2、采纳两种语言,兼顾了模拟效率和系统建模的灵活性。
采纳C++和Otcl作为开发语言。
网络组件对象都利用 C++写出并编译的,而Otcl作为说明器,如此使的说明命令与组件分开,若是网络拓扑改变,只需对命令脚本Otcl进行改动罢了。
就可再次进行仿真,提高效率。
3、具有丰硕的协议库支持;
目前NS2能够用于仿真各类不同的IP网,能够实现的一些有线网络和无线网络仿真。
有线网络包括:
路由层:
DV,LS,PIM-SM
传输层:
TCPandUDP
流量产生:
web,ftp,telnet,cbr,stochastic
队列模型:
drop-tail,RED,FQ,SFQ
QoS:
IntServandDiffserv
无线网络包括:
网络类型:
MANET,SensorNetworks
路由:
AODV,DSR,DSDV,MobileIP和HMIPv6等
MAC:
等传输层、多种数据流模拟
4、割裂对象模型;
NS是一个离散事件调度器,模拟的时刻是由调度器的事件来推动的。
调度器治理列表,使模拟得以进行。
而事件是C++编译的对象体系中的一个对象。
NS2 利用C++和Otcl作为开发语言。
Otcl是一个说明器,来执行用户的命令脚本,成立模型。
C++编写与实现,模拟执行速度快。
通过割裂对象模型tclcl来成立联系。
NS能够说是一种基于两种语言(Otcl和C++)的面向对象的模拟器,由于效率的缘故,NS将数据通道和操纵通道的实现相分离。
为了减少分组和事件的处置时刻,事件调度器和数据通道上的大体网络组件对象都利用 C++写出并编译的,这些对象通过映射Otcl说明器。
五、开放的源代码;
所有的NS代码在网上都能够找到,而且都是免费的。
可是很庞杂,系统的资料比较少,关于初学者比较困难,但它很容易在网上交流与学习,这也是许多学习NS的乐趣所在。
六、持对模拟结果的处置和直观显示。
可用nam,xgarph,awk,Gnuplot等工具进行下一步的分析,而这些图形工具以前也和其他的一些工具结合利用,关于咱们来讲,学习、利用都很方便。
7、可安装在不同的操作系统下。
以前最先的版本在UNIX下开发,那么在Lunix下利用也是一样,而此刻愈来愈多的利用者用的环境是windows,为了适应当前的情形,因此就显现了NS在windows下安装利用方式。
1.2.2NSbeach简介
该nsBench[目标1]项目是开发支持工具,使创建,分析和可视化NS-2的仿真脚本和自动跟踪。
nsBench是一拖和拖放图形用户界面和易于利用的网络课程的本科生和研究生。
nsBench更快,更易使学生和研究人员,而可不能失去表现的灵活性或通过编写一个脚本取得NS-2的开发和仿真分析。
特点:
1.节点,单/双面联系和局域网
2.代理商:
TCP,UDP,TCPSink,TCP/Fack,TCP/FullTcp,TCP/Newreno,TCP/Reno,TCP/Sack1,TCPSink,TCPSink/Sack1,TCPSink/DelAck,TCPSink/Sack1/DelAck,TCP/Vegas,NullAgent
3.应用/传输:
FTP,Telent,Http/Server,Http/Client,Http/Cache,webtraf,Traffic/CBR,Traffic/Pareto,Traffic/Exponential
4.效劳:
多播,分组调度,RED,区分效劳
5.创建“组”的概念,以弥补“循环”
6.情景发生器
7.链接监视器
8.损失的模式
9.路由协议
1.2.3 NSG2简介
NSG是一个专为ns2所设计的剧本产生器,目前最新的版本为第二版(NSG2),和前一版(NSG1)比较起来最大的不同在于NSG2除本来支援的无线网路之外还支援有线网路的剧本,以以下出NSG2要紧的功能及支援ns2的物件种类:
1.产生有线网路及无线网路的剧本(目前尚不支援无线及有线混合的剧本)
2.支援的Node种类:
WirelessNode及WiredNode
3.支援WirelessNode的移动设定
4.支援的Link种类:
Duplex-link及Simplex-link
5.Agent支援(TCP、TCP/Tahoe、TCP/Reno、TCP/Newreno、TCP/Vegas、TCPSink、UDP及NULL)
6.支援的Application种类:
CBR及FTP
7.支援的Routingprotocol种类:
DSDV、DSR、AODV及TORA
8.支援的Queue种类:
DropTail、RED、FQ、DRR、SFQ及CBQ
9.无线网路相关设定
10.参数设定(NSG提供一组的预设参数)
由于NSG2是以Java撰写,因此可在任何支援Java的平台上执行(如Windows、Linux、MacOS...),另外NSG2是以JavaJar档案的形式来发布,所以NSG2本身并不需要安装,只要下载NSG2并储存到电脑中便可透过Java来启动。
2NS进行网络仿真的方式和一样进程
进行网络仿真前,第一分析仿真涉及哪个层次,NS仿真分两个层次:
一个是基于OTcl编程的层次。
利用NS已有的网络元素实现仿真,无需修改NS本身,只需编写OTcl脚本。
另一个是基于C++和OTcl编程的层次。
若是NS中没有所需的网络元素,那么需要对NS进行扩展,添加所需网络元素,即添加新的C++和OTcl类,编写新的OTcl脚本。
假设用户已经完成了对NS的扩展,或NS所包括的构件已经知足了要求,那么进行一次仿真的步骤大致如下:
1、开始编写Otcl脚本。
(包括配置网络的拓扑结构、确信链路的大体特性、如延迟、带宽、丢失策略)
2、成立协议代理(协议的绑定及通信业务量的模型成立)
3 、 配置业务量模型的参数,从而确信网络上的业务量散布。
4、 设置Trace对象。
NS通过Trace文件来保留整个模拟进程。
仿真完后,用户能够对Trace文件进行分析研究。
5、编写其他的辅助进程(模拟开始、终止时刻),设定模拟终止时刻,至此OTcl脚本编写完成。
6、用NS说明执行适才编写的OTcl脚本。
7、对trace文件进行分析,用NAM来观看仿真结果
8、调整配置的拓扑结构和业务量模型,从头进行上述进程。
NS2采纳两级体系结构,为了提高代码的执行效率,NS2 将数据操作与操纵部份的实现相分离,事件调度器和大部份大体的网络组件对象后台利用C++实现和编译,称为编译层,要紧功能是实现对数据包的处置;NS2的前端是一个OTcl 说明器,称为说明层,要紧功能是对模拟环境的配置、成立。
从用户角度看,NS2 是一个具有仿真事件驱动、网络构件对象库和网络配置模块库的OTcl脚本说明器。
NS2中编译类对象通过OTcl连接成立了与之对应的说明类对象,如此用户间能够方便地对C++对象的函数进行修改与配置,充分表现了仿真器的一致性和灵活性。
3实例运行结果截图及关键代码
NSbeach有线传输网络:
1.结果截图:
2.关键代码:
setns[newSimulator]
setf[openw]
setnf[openw]
$nsnamtrace-all$nf
$nstrace-all$f
procfinish{}{
globalnsnff
$nsflush-trace
puts"Simulationcompleted."
close$nf
close$f
#Executenamonthetracefile
execnam&
exit0
}
setn0[$nsnode]
puts"n0:
[$n0id]"
setn1[$nsnode]
puts"n1:
[$n1id]"
setn2[$nsnode]
puts"n2:
[$n2id]"
setn3[$nsnode]
puts"n3:
[$n3id]"
$nsduplex-link$n0$n22Mb10msDropTail
$nsqueue-limit$n0$n210
$nsduplex-link$n1$n22Mb10msDropTail
$nsqueue-limit$n1$n210
$nsduplex-link$n2$n320msDropTail
$nsqueue-limit$n2$n310
settcp0[newAgent/TCP]
$nsattach-agent$n0$tcp0
setsink1[newAgent/TCPSink]
$nsattach-agent$n3$sink1
setnull0[newAgent/Null]
$nsattach-agent$n3$null0
setudp0[newAgent/UDP]
$nsattach-agent$n1$udp0
setftp0[newApplication/FTP]
$ftp0attach-agent$tcp0
setcbr0[newApplication/Traffic/CBR]
$cbr0setrate_510Kb
$cbr0setpacketSize_510
$cbr0attach-agent$udp0
$nsconnect$tcp0$sink1
$tcp0setfid_0
$nsconnect$udp0$null0
$udp0setfid_2
$nsat"$cbr0start"
$nsat"$ftp0start"
$nsat"$ftp0stop"
$nsat"$cbr0stop"
$nsat"finish"
$nsrun
CBR封包端点到端点间延迟时刻:
关键代码:
BEGIN{
#程序初始化
highest_packet_id=0;#可省略
}
{
action=$1;
time=$2;
flow_id=$8;
packet_id=$12;
#记录目前处置过的最高封包id
if(packet_id>highest_packet_id)
highest_packet_id=packet_id;
#记录封包传送时刻与对应flow
if(start_time[packet_id]==0)
start_time[packet_id]=time;
flow_num[packet_id]=flow_id;
#记录所有封包的接收时刻
if(action=="r"){
end_time[packet_id]=time;
}else{
#将未接收封包的接收时刻设为-1
end_time[packet_id]=-1;
}
}
END{
#计算有概念的end-to-enddelay
for(packet_id=0;packet_id<=highest_packet_id;packet_id++){
packet_duration=end_time[packet_id]-start_time[packet_id];
#将所需结果存档
if(packet_duration>0){
if(flow_num[packet_id]==1){
printf("%f%f\n",start_time[packet_id],packet_duration)>"ftp_delay";
}else{
printf("%f%f\n",start_time[packet_id],packet_duration)>"cbr_delay";
}
}
}
}
丢包统计:
关键代码:
BEGIN{
#程序初始化,设定一变量记录packet被drop的数量
fsDropsa=0;
fsDropsb=0;
numFsa=0;
numFsb=0;
}
{
action=