无线自组织网络NS仿真软件_第1页
无线自组织网络NS仿真软件_第2页
无线自组织网络NS仿真软件_第3页
无线自组织网络NS仿真软件_第4页
无线自组织网络NS仿真软件_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

无线自组织网络NS仿真软件第一页,共36页。为什么选择NS网络仿真软件???主要的:OPNETModelerQualNet(GloMoSim)NS-2——80%其他NetRuleShunra……价钱昂贵;学习的进入障碍;仿真网络规模和流量很大时,仿真的效率会降低;软件所提供的模型库是有限;OPNET对路由协议的仿真比较适合,但是对链路的仿真不太好操作;NS设计的出发点是基于网络仿真,仿真主要针对路由层,传输层,数据链路层展开,但它最适用于TCP层以上的模拟。NS的特点是源代码公开,是自由软件,免费,因此普及度较高;可扩展性强;速度和效率优势明显;

WindowsLinux2第二页,共36页。NS学习的参考资料推荐一个非常不错的NS2学习的个人网站:NS官方网站(很多入门教程)NSManual(建议大家直接看英文版)3第三页,共36页。NS软件的目录结构解释型语言OTCL编译型语言C++Tclcl4第四页,共36页。NS仿真使用的一般步骤编写仿真配置脚本——OTCL语言编写以脚本为参数运行NS执行仿真wireless.tcl运行命令:nswireless.tcl仿真结束,得到包含仿真结果的trace文件(文本文件)

…………s10.000000000_0_AGT---0tcp40[0000]-------[0:01:0320][00]00s16.000000000_0_AGT---1tcp40[0000]-------[0:01:0320][00]00 …………使用脚本工具(gawk,Python等)提取trace文中你想要获得的信息,如吞吐量,延迟等利用绘图软件(matlab,gnuplot等)将提取的数据绘制成图形曲线5第五页,共36页。NS没有人性化的图形,怎么办??NS是开放软件,总有乐于奉献的科研工作者提供相应的易用工具……仿真网络场景配置即代码生成Trace结果文件分析NS2ScenariosGeneratorTracegraph6第六页,共36页。来个例子……书上第二章的第二个例子……7第七页,共36页。来个例子……NS使用就这么简单……Tracegraph并不实用,原因在于: 1,分析时间长;2,分析结果并不一定是你想要的坏消息……8第八页,共36页。NS仿真脚本包含的元素……节点配置(路由协议,MAC,队列特性,物理层等)节点创建(节点的位置,节点移动特性等)业务流发生器的参数设置(业务流的分布特性,速率等)业务流加载到节点上(将业务流发生器绑定到某个节点)仿真开始($nsrun)仿真结束的处理(将缓冲中的记录写入文件,关闭结果记录文件)就是这些,没有更多更神秘的东西在这里……9第九页,共36页。NS自身包含有哪些模块?

我怎么知道?途径:查看nsmanual(soobsolete)通过书90页介绍的方法(脚本)查看源代码(recommended)如果NS软件包中没有我需要的模块怎么办?自己编写10第十页,共36页。Tcl/Tk语言怎么学?

Otcl语言怎么学?边看书边动手,试着编写一些小程序……(推荐的那本书足够了)Tcl/TkOtcl资料非常有限,好在面向对象的思想和C++非常的类似,掌握一些注意事项就OK(存在疑问的时候自己去编程检验一下就明白了)……(网上有个简短的教程:OTclTutorial)11第十一页,共36页。怎样看懂trace文件???有专门的traceformat表,可以查表解决……看源代码,看看究竟Trace模块的相关函数用sprintf()打印输出了些什么内容……

…………s10.000000000_0_AGT---0tcp40[0000]-------[0:01:0320][00]00s16.000000000_0_AGT---1tcp40[0000]-------[0:01:0320][00]00 …………12第十二页,共36页。理解NS的内部结构

—事件驱动的核心什么是事件????——在某个特定的条件下指示做某件特定的事情13第十三页,共36页。理解NS的内部结构

—有线网络仿真节点结构14第十四页,共36页。理解NS的内部结构

—有线网络仿真NodeLink15第十五页,共36页。理解NS的内部结构

—无线网络仿真节点结构agent16第十六页,共36页。理解NS的内部结构

—什么是代理(agent)?千万不要用上网用的那个“代理”意思来理解这里的代码!!!!agent“主体”,“主动者”分组产生,IP以上协议功能实体classAgent:publicConnector{

…………

ns_addr_there_; //addressofthisagent ns_addr_tdst_; //destinationaddressforpktflow

intsize_; //fixedpacketsize packet_ttype_; //typetoplaceinpacketheader intfid_; //forIPv6flowidfield intprio_; //forIPv6priofield intflags_; //forexperiments(seeip.h) intdefttl_; //defaultttlforoutgoingpkts Packet*allocpkt()const; //alloc+setupnewpkt Packet*allocpkt(int)const; //same,butw/databuffer voidinitpkt(Packet*)const; //setupfieldsinapkt

…………}17第十七页,共36页。理解NS的内部结构

—分组的格式DataDataTCP/UDPIPMACDataTCP/UDPIPDataTCP/UDPIPMACTCPSCTPAODVDSRMPLSARP……封装到一个packet对象中进行管理common18第十八页,共36页。理解NS的内部结构

—IPHeaderstructhdr_ip{ /*commontoIPv{4,6}*/ ns_addr_t src_;//这个东东是个struct,包括了address和port ns_addr_t dst_; int ttl_;

…………}structns_addr_t{ int32_taddr_; int32_tport_;}真实协议的header和NS中协议的header是不能完全对应起来的!!!19第十九页,共36页。理解NS的内部结构

—最重要的packetheaderstructhdr_cmn{ enumdir_t{DOWN=-1,NONE=0,UP=1};

packet_tptype_; //packettype(seeabove)

int size_; //simulatedpacketsize

int uid_; //uniqueid int error_; //errorflag interrbitcnt_;//#ofcorruptedbitsjahn intfecsize_; double ts_; //timestamp:forq-delaymeasurement int iface_; //receivinginterface(label)

dir_t direction_; //direction:0=none,1=up,-1=down//这个地方定义了方向变量 //sourceroutingcharsrc_rt_valid; doublets_arr_;//RequiredbyMarkerofJOBS //Monarchextnbegins nsaddr_tprev_hop_;//IPaddrofforwardinghop nsaddr_tnext_hop_; //nexthopforthispacket intaddr_type_;//typeofnext_hop_addr nsaddr_tlast_hop_;//fortracingonmulti-userchannels//calledifpktcan'tobtainmediaorisn'tack'd.notcalledif//dropedbyaqueueFailureCallbackxmit_failure_;void*xmit_failure_data_;

…………层间信息传递20第二十页,共36页。理解NS的内部结构—C++类的继承关系连接器分类器21第二十一页,共36页。理解NS的内部结构

—Connector类classConnector:publicNsObject{

………… NsObject*target_; NsObject*drop_; //droptargetforthisconnector …………

voidrecv(Packet*,Handler*callback=0); inlinevoidsend(Packet*p,Handler*h){target_->recv(p,h);}

…………}voidConnector::recv(Packet*p,Handler*h){ send(p,h);}22第二十二页,共36页。理解NS的内部结构

—模块与模块之间的接口classNsObject:publicTclObject,publicHandler{

…………virtualvoidrecv(Packet*,Handler*callback=0)=0;voidhandle(Event*);

…………}voidNsObject::handle(Event*e){ recv((Packet*)e);}任何NsObject派生的对象都可以作为事件调度执行的Handler23第二十三页,共36页。理解NS的内部结构

—模块与模块之间packet传递的接口Connector1target_drop_recv()Connector2target_drop_recv()Connector2target_drop_recv()BiConnectorConnector1uptarget_downtarget_drop_recv()Connector1uptarget_downtarget_drop_recv()Connector1uptarget_downtarget_drop_recv()24第二十四页,共36页。理解NS的内部结构

—无线网络节点的模块构成connectorclassifier25第二十五页,共36页。理解NS的内部结构

—分组的流动路径26第二十六页,共36页。理解NS的内部结构

—运行处理流程12start345Time第一个事件:$nsat10.0"$cbr0start"第二个事件:MAC层的发送处理,多个事件协调完成………………27第二十七页,共36页。到此,NS的主体结构应该有一定了解了……28第二十八页,共36页。NS深入理解

—OTcl和C++对象之间的关系并不是每个C++对象都必须有一个对应oTcl对象,如classARPEntry也并不是每个oTcl对象都对应着一个C++对象,如ClassSimpleLink29第二十九页,共36页。NS深入理解——为什么要采用分裂对象模型C++代码只提供了单个的模块,而怎么把这些模块连接起来就是oTcl编程需要做的事情了,并每个模块的参数也通过oTcl编程的方法提供……30第三十页,共36页。NS深入理解

—OTcl与C++之间的绑定oTcl类和C++类建立对应关系目的:这样可以创建一个oTcl对象的时候同步创建一个C++对象途径:通过生成一个TclClass的派生类对象实现变量的绑定目的:这样使得oTcl对象的变量和对应的C++变量有相同的值途径:在C++的构造函数中通过bind()函数进行绑定;函数方法的绑定目的:这样使得oTcl中可以调用C++的方法途径:C++中按照oTcl要求编写command()成员函数包括如下3个层面上的绑定:31第三十一页,共36页。NS深入理解——trace发生在什么地方???5种可控的trace:AgenttraceRoutertraceMACtraceMovementtraceEotTrace3种不可控trace:RouterArpMacqueue(有丢包发生的地方)32第三十二页,共36页。NS深入理解——怎样在NS中添加一个路由协议?(DSDV)DSDV路由协议包括这些文件:Dsdv.hDsdv.ccRtable.hRtable.ccDsdv.tclns-lib.tcl包括如下几大要素:在ns-*.*根目录下建立一个文件夹,并建立相应的C++文件/home/ns-allinone-2.29/ns-2.29/dsdv2.classDSDV_Agent:publicAgent{

…………}C++,90%oTcl,10%Ns-default.tcl33第三十三页,共36页。NS深入理解——怎样在N

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论