1、SeaSon计算机学院-数据库中心目录nNS2 简介n安装n模拟流程n添加新协议n调试以及结果分析SeaSon计算机学院-数据库中心NS2 简介n背景nNS2目标nNS2功能nNS2 组件nNS2体系结构SeaSon计算机学院-数据库中心NS2 背景n1989 REAL network simulator n1995:DARPA VINT project at LBL,Xerox PARC,UCB,and USC/ISInPresent:DARPA SAMAN project and NSF CONSER project Collaboration with other researchers
2、including CIRISeaSon计算机学院-数据库中心NS2研究范围n支持网络协议的研究和教育 通信协议的设计,数据流的研究等 不同协议的比较n优点 与平台无关,有大量的协议、代码以及模型可供使用,开源的,不同的协议很容易进行比较。SeaSon计算机学院-数据库中心NS2目标nNS2不适合做的?大多数任务都是单节点完成的,比如交换机的性能分析等。SeaSon计算机学院-数据库中心NS2功能n有线网络 路由层 DV,LS,PIM-SM 传输层:TCP and UDP 流量产生:web,ftp,telnet,cbr,stochastic 队列模型:drop-tail,RED,FQ,SFQ
3、QoS:IntServ and DiffservSeaSon计算机学院-数据库中心NS2功能n无线网络网络类型:MANET,Sensor Networks路由:AODV,DSR,DSDV,Mobile IP以及HMIPv6等MAC:802.11,802.15.4,Smac等传输层、多种数据流模拟 SeaSon计算机学院-数据库中心NS2 组件nns:网络模拟器p 执行tcl脚本,进行模拟,并将所有的模拟结果以trace文件的个是输出。nnam:网络 AniMator 将ns的结果可视化。n模拟的流程tcl 脚本ns-2Trace文件Nam文件namGawkgnuplotSeaSon计算机学院-
4、数据库中心NS2体系结构n面向对象的设计p 支持重用p 容易维护p 方便扩展,如添加新协议n分裂对象模型p C+是高效的编译执行语言,功能模拟,性能较好pOtcl 解释执行的,进行场景配置。不必重新编译更灵活SeaSon计算机学院-数据库中心NS2体系结构nNS2结合两者的优点C+otclSeaSon计算机学院-数据库中心Tcl与C+对象绑定过程n以tcp为例,当你在tcl脚本中使用以下命令创建一个Tcp对象时pset tcp0 new Agent/TCPn首先创建tcl对象,即解释对象proc new className args set o SplitObject getid#创建分裂对象
5、if catch$className create$o$args msg return$oSeaSon计算机学院-数据库中心Tcl与C+对象绑定过程n然后通过Tcl对象的init()函数中创建对应的shadow对象SplitObject instproc init args$self nextif catch$self create-shadow$args error _FAILED_SHADOW_OBJECT_ SeaSon计算机学院-数据库中心Tcl与C+对象绑定过程nCreate-shadow怎样找到tcl对象对应的C+对象?n答案就是TclClass类!static class Tcp
6、Class:public TclClass public:TcpClass():TclClass(Agent/TCP)TclObject*create(int,const char*const*)return(new TcpAgent();class_tcp;SeaSon计算机学院-数据库中心NS2系统结构 -离散事件模拟n把世界上的一切都看成事件维护一个基于发生时间排序的 事件(events)队列维护一个系统的时间virtual time重复的执行以下的过程:n从对首取出一个事件,set virtual time=events timen处理这个事件n如果在处理时间过程中产生新的event,
7、插入queuen每一个事件都有一个预定的执行(虚拟的)时间,独立于真实执行时间。CPU 执行的快慢不影响结果。SeaSon计算机学院-数据库中心离散事件模拟示例离散事件模拟示例时间时间事件事件A.1sS decides to send pkt to DS starts sending pktdelayvaluetransmission0.005spropagation0.01sDSSDB.1.005sS finishes transmitting pkt to DC.1.01sD begins to recv pktD.1.015sD recvs entire pkt and delivers
8、 to applicationB.D.C.A.事件队列事件队列SeaSon计算机学院-数据库中心一个数据包怎样从源节点到目的节点n同一个节点内各层协议之间传数据?n节点之间怎么传?SeaSon计算机学院-数据库中心SeaSon计算机学院-数据库中心n安装安装环境及方法安装问题SeaSon计算机学院-数据库中心安装(1)n推荐直接安装all-inone版本(最新all-inone-2.29)Linux(直接install就行了)Windows+Cygwin+Ns2nwindows安装方法柯老师网站(不要看中文安装说明,选英文的)http:/140.116.72.80/smallko/ns2/ns
9、2.htmSeaSon计算机学院-数据库中心安装(2)nwindows安装方法柯老师网站上Cygwin可以成功安装的ns2版本有NS-2.26,NS-2.27,NS-2.28,ns-2.29注:NS-2.26需要PATCH过.才能安装柯老师的安装经验:不過安裝的過程還是可能會有一些問題.最確保可以安裝成功的方法是:重新安裝WINDOWS.裝完馬上安裝CYGWIN+NS2,安裝後.在裝SERVICE PACK.或其他的軟件.這是我的經驗SeaSon计算机学院-数据库中心安装(3)nNS仿真软件-问题求助的地方 http:/ 主要问题gcc版本p 重装SeaSon计算机学院-数据库中心开始进行摸拟
10、n一个简单的无线网络的例子(1)n无线场景的产生n利用NS模拟前搞清楚的问题n添加新协议n编译NS2SeaSon计算机学院-数据库中心一个简单的无线网络的例子(1)n场景配置3 个mobile nodes平面拓扑 670mX670mad hoc 路由协议 DSDVRandom Waypoint mobility modelTCP and CBR trafficSeaSon计算机学院-数据库中心一个简单的无线网络的例子(2)set ns_ new Simulator;create a ns simulator instance#Define Global Variablesset topo ne
11、w Topography;create a topology and$topo load_flatgrid 670 670 ;define it in 670 x670 area SeaSon计算机学院-数据库中心一个简单的无线网络的例子(3)#Define standard ns/nam traceset tracefd open 694demo.tr w$ns_ trace-all$tracefdset namtrace open 694demo.nam w$ns_ namtrace-all-wireless$namtrace 670 670 SeaSon计算机学院-数据库中心一个简单的无
12、线网络的例子(4)#Create “God”set god_ create-god 3 God 用来保存一个结点到另外一个结点直接的跳部数.例如例如:$ns_ at 899.00“$god_ setdist 2 3 1”SeaSon计算机学院-数据库中心一个简单的无线网络的例子(5)#Define how a mobile node should be created$ns_ node-config-adhocRouting DSDV -llType LL -macType Mac/802_11 -ifqLen 50 -ifqType Queue/DropTail/PriQueue -antT
13、ype Antenna/OmniAntenna -propType Propagation/TwoRayGround -phyType Phy/WirelessPhy -channelType Channel/WirelessChannel -topoInstance$topo -agentTrace ON -routerTrace OFF -macTrace OFFSeaSon计算机学院-数据库中心一个简单的无线网络的例子(6)#Create a mobile node and attach it to the channel set node$ns_ node$node random-mo
14、tion 0;#disable random motion Use“for loop”to create 3 nodes:for set i 0$i3 incr i set node_($i)$ns_ nodeSeaSon计算机学院-数据库中心一个简单的无线网络的例子(7)#Define traffic modelsource traffic-scenario-files#Define node movement model source movement-scenario-files SeaSon计算机学院-数据库中心一个简单的无线网络的例子(8)#Define node initial p
15、osition in namfor set i 0$i 3 incr i$ns_ initial_node_position$node_($i)20#Tell ns/nam the simulation stop time$ns_ at 200.00“$ns_ halt”#Start your simulation$ns_ runSeaSon计算机学院-数据库中心无线场景的产生(1)n生成节点运动模型setdest-n -p pausetime-s -t -x -y Source:See ns-2/indep-utils/cmu-scen-gen/setdest/网上还可以下载更多的模型,如组
16、移动模型等SeaSon计算机学院-数据库中心无线场景的产生(2)n生成无线网络数据流CBR trafficns cbrgen.tcl-type cbf|tcp-nn nodes-seed seed-mc connections-rate rateSource:ns-allinone-2.29ns-2.29indep-utilscmu-scen-genSeaSon计算机学院-数据库中心利用NS模拟前搞清楚的问题SeaSon计算机学院-数据库中心NS2 源代码目录simtk8.0otclTcltcl8.0ns-2nam-1tclextestlib.tcl codeexamplevalidation
17、 testC+codetcl code coreSeaSon计算机学院-数据库中心添加协议(1)n添加别人实现的协议为什么我安装总是出错?环境问题,OS,gcc版本,ns版本p解决办法1.修改环境,装相应的os,gcc,ns2 2.移植到新的环境,怎么移?gdb调试,没有别的办法!SeaSon计算机学院-数据库中心添加新协议(2)n自己写协议路由协议?应用层协议?MAC协议?最好的方法就是模仿已有的协议,代表协议AODV,MAC802.11,Pingp添加路由协议,从Agent继承p添加应用层协议,从Agent(更灵活)或者Application(有些不能实现)SeaSon计算机学院-数据库中
18、心添加新协议(3)n示例:一个泛洪协议(Mflood)n协议类型:路由层协议n1.定义包头struct hdr_mflood nu_int32_tseq_;/根据需要定义变量,这个灵活决定 ./包头访问的方法,你只需要复制下来就OK了 static int offset_;/required by PacketHeaderManager inline static int&offset()return offset_;inline static hdr_sptree*access(const Packet*p)return(hdr_sptree*)p-access(offset_);SeaSo
19、n计算机学院-数据库中心添加新协议(4)n2.实现协议class MFlood:public Agent public:MFlood();void recv(Packet*p,Handler*);int command(int,const char*const*);protected:inline int initialized()return 1&target_;/发送函数,其实就是调用目的节点的接受函数 inline void send(Packet*p)target_-recv(p);SeaSon计算机学院-数据库中心添加新协议(5)n3 关联tcl对象与C+对象(模板)static c
20、lass MFloodclass:public TclClass public:MFloodclass():TclClass(Agent/MFlood)TclObject*create(int argc,const char*const*argv)assert(argc=5);return(new MFlood(nsaddr_t)atoi(argv4);/PBO agrv4 is index_ class_rtProtoMFlood;SeaSon计算机学院-数据库中心添加新协议(6)n4 关联关联tcl对象与对象与C+对象的包头(模板)对象的包头(模板)int hdr_mflood:offse
21、t_;static class MFloodHeaderClass:public PacketHeaderClass public:MFloodHeaderClass():PacketHeaderClass(PacketHeader/MFlood,sizeof(hdr_mflood)bind_offset(&hdr_mflood:offset_);class_mfloodhdr;SeaSon计算机学院-数据库中心添加新协议(7)n目前为止,所有的代码工作都已经完成了生下的工作就是将这个协议编译到NS2中。n需要修改一下文件n1.ns-packet.tcl(ns-allinone-2.29ns-
22、2.29tcllib)n2.packet.h(ns-allinone-2.29ns-2.29common)n3 ns-lib.tcl(ns-allinone-2.29ns-2.29tcllib)对于我们这个应用层协议不需要修改SeaSon计算机学院-数据库中心添加新协议(8)n1.修改ns-packet.tcl(ns-2.29/tcl/lib)foreach prot#add by season MFloodn目的:在目的:在NS启动的时候加载我们的包头。启动的时候加载我们的包头。SeaSon计算机学院-数据库中心添加新协议(9)n2.修改 packet.h(一共修改两处ns-2.29/com
23、mon)p enum packet_t/insert new packet types here/add by seasonPT_MFLOOD,/Trace用到PT_NTYPE/This MUST be the LAST oneclass p_info public:p_info()/add by seasonname_PT_MFLOOD=“MFlood”;/与前面对应name_PT_NTYPE=undefined;目的:目的:Trace中使用,协议构造函数中使用,协议构造函数SpTreeAgent()初始初始化时使用化时使用SeaSon计算机学院-数据库中心添加新协议(10)n如果是路由协议
24、如(AODV)n还需要修改ns-lib.tclnSimulator instproc create-wireless-node args MFlood set ragent$self create-mflood-agent$node Simulator instproc create-mflood-agent node set ragent new Agent/MFlood$node id$node set ragent_$ragentreturn$ragentSeaSon计算机学院-数据库中心添加新协议(11)n还有这段代码(Mflood未使用)ns-mobilenode.tcl#Speci
25、al processing for AODVset aodvonly string first AODV$agent info class if$aodvonly!=-1$agent if-queue$self set ifq_(0);#ifq between LL and MAC SeaSon计算机学院-数据库中心添加新协议总结n5c+2t+1m(521规则)5c-必须实现的五个C+模块 MFlood与MFloodclass hdr_mflood与MFloodHeaderClass packt.h添加包头类型2t-修改两个tcl文件 ns-lib.tcl与ns-packet.tcl 有时候还
26、会修改ns-defaut.tclp1m-修改Makefile,将新协议添加SeaSon计算机学院-数据库中心添加新协议总结n关于添加应用协议如ping,跟路由协议类似,甚至跟简单,如果从Agent继承,除了不需要修改ns-lib.tcl之外其它类似。n但是别忘了设置包头的大小,不然你发出的所有数据包头的大小都是0!PingAgent:PingAgent():Agent(PT_PING)bind(packetSize_,&size_);n修改Ns-defautl.tclAgent/Ping set packetSize_ 64SeaSon计算机学院-数据库中心编译NS2(1)n前面的过程是将代码
27、添加到NS2里面,但尚未编译,只有经过编译才能使用。n一般我们将我们所有的C+代码放在一个文件夹内,如mflood,然后放在ns-2.29/之下n修改Makefile(无任何后缀的)添加如下红色所示代码,将mflood编译进NS2OBJ_CC=#add by season mflood/mflood.o mflood/mflood-seqtable.oSeaSon计算机学院-数据库中心编译NS2(2)n从cygwin进入ns-2.29目录下n执行 make clean#删除所有的*.o文件 make depend make#重新编译ns如果没有错误,则可以编写场景测试n什么时候要make cl
28、ean?SeaSon计算机学院-数据库中心编译NS2(3)n如果添加新协议,或者修改了多个协议公用的NS中头文件,如packet.h我们都需要重新make clean 然后make depend,make。SeaSon计算机学院-数据库中心编译NS2(4)n修改了C+文件p 对于NS中已有的代码修改 不需要修改makefile,只需要 make 添加新的模块或协议修改Makefile并重新Make clean Make dependMakeSeaSon计算机学院-数据库中心编译NS2(5)n修改了Otcl文件修改NS中已有的代码nrecompilensource 添加新的代码nsourcen修
29、改 Makefile(NS_TCL_LIB),tcl/ns-lib.tcl(source)and recompile都只需要make即可SeaSon计算机学院-数据库中心调试NSnTCL的调试nGdb的安装调试SeaSon计算机学院-数据库中心调试(1)nTcl调试个人觉得没什么用途,如果你感兴趣我的space有安装方法SwowseasonnC+代码的调试(segment fault)调试工具gdb,另外自带的insight可视化界面,本质也是调用gdb下面介绍gdb的安装调试SeaSon计算机学院-数据库中心调试(2)ngdb安装安装gdb,以cygwin为例n重新运行cygwin的setu
30、p文件,选择界面中的keep(必须!否则会死的很惨的),然后找到gdb选择安装即可。n重新编译NS2,添加调试信息 修改Makefile在下面位置添加-g CCOPT=-g进入ns-2.29目录下面执行Make cleanMake depend#执行这个命令过程中如出错,不用管!Maken如果没有错误,就安装成功,V!SeaSon计算机学院-数据库中心调试(2)nGdb调试NS2以命令行为例进入ns-2.29(%为命令提示符)%gdb nsgdb即进入调试SeaSon计算机学院-数据库中心调试(3)n调试常用命令bt列出运行栈中信息b sptree.cc:linenum 在sptree.cc文
31、件linenum行设置断点,注意中间”:”不能丢c 相当于vc中continue,n 相当于vc中nextdisplay var,显示变量var的值其他的参看gdb文档nNS中调试技巧以及演示SeaSon计算机学院-数据库中心结果分析n场景测试n工具使用及结果分析n其他SeaSon计算机学院-数据库中心场景测试n为了使模拟更接近真实网络,参数选择,非常重参数选择,非常重要要!可以参看相关论文n简单测试 用两三个节点测试一下首发数据,根据trace文件分析。n功能测试 测试每一个功能,对于无线网络的,要测试多跳,各种拓扑。利用trace分析结果SeaSon计算机学院-数据库中心参数选择(802.
32、11b)nThe Antenna height of transmitter and receiver is 1.5m.nThe propagation model is TwoRayGround model.nAntenna/OmniAntenna set Gt_ 1/Transmit antenna gain nAntenna/OmniAntenna set Gr_ 1/Receive antenna gain nPhy/WirelessPhy set L_ 1.0/System Loss Factor nPhy/WirelessPhy set freq_ 2.472e9/channel-
33、13.2.472GHz nPhy/WirelessPhy set bandwidth_ 11Mb/Data Rate nPhy/WirelessPhy set Pt_ 0.031622777/Transmit Power nPhy/WirelessPhy set CPThresh_ 10.0/Collision Threshold nPhy/WirelessPhy set CSThresh_ 5.011872e-12/Carrier Sense Power nPhy/WirelessPhy set RXThresh_ 5.82587e-09/Receive Power Threshold;ca
34、lculated under nTwoRayGround model by tools from NS2.n*Mac/802_11 set dataRate_ 11Mb/Rate for Data Frames n*Mac/802_11 set basicRate_ 1Mb/Rate for Control Frames SeaSon计算机学院-数据库中心常用工具以及结果分析n看代码推荐sourceinsightn画图,gnuplot,xgraph命令格式如下,示例演示%gnuplot delay.plotWindows下还有origin(收费的)n分析trace文件使用gawk命令格式gaw
35、k f delay.awk output.trSeaSon计算机学院-数据库中心常用工具以及结果分析n柯老师强烈推荐模拟wireless网络,可以用http:/edith.cse.nsysu.edu.tw/wordpress/?p=66生成无线网络场景,免去写tcl脚本的痛苦nWIRED NETWORK,可以建議使用NSBENCH SeaSon计算机学院-数据库中心SeaSon计算机学院-数据库中心常用工具以及结果分析n网络性能度量details on http:/ utilizationThe aggregate of all traffic currently being consumed
36、 on a hop or path.2.Packets per second3.Round Trip TimeThe elapsed time for transit of a signal over a closed circuit.4.RTT variance http:/www.cs.utk.edu/dunigan/tcptour/javis/tcp_rttvar.html5.packet loss6.Reachability7.Circuit Performance8.Bandwidth Utilization and Packets Per secondhttp:/ FAQ Ques
37、tion 14nhttp:/web.syr.edu/dchen02/FAQ.txtn示例SeaSon计算机学院-数据库中心使用Gawk分析结果nGawk简介n与NS相关的基本知识n具体例子SeaSon计算机学院-数据库中心使用Gawk分析结果n无线通信的trace格式s 10.107722800 _1_ AGT -22 tcp 43 0 2 1 800-1:0 2:0 30 2 13 0 0 0r 10.110474850 _2_ AGT -22 tcp 36 0 2 1 800-1:0 2:0 30 2 13 0 1 0SeaSon计算机学院-数据库中心Gawk简介n解释性的脚本语言n变量以
38、及数组不用声明n按行处理n有pipe功能,可以将处理数据传给shellSeaSon计算机学院-数据库中心Gawk相关语法ns 10.1 _1_ AGT -22 tcp 43 0 2 1 800-1:0 2:0 30 2 13 0 0 0(1).Gawk读入trace中的一行$0$1$2$3$4$5$6$7整行 s10.1 _1_AGT-22(uid)tcp 注:列之间一般用空格区分SeaSon计算机学院-数据库中心Gawk相关语法$0$1$2$3$4$5$6$7整行 s10.1 _1_AGT-22tcp (2)执行动作Pattern1 Actions1 Pattern2 Actions2 Pa
39、ttern3 Actions3 其中pattern为条件语句(或正则表达式)如:if($1=“s”&$4=“AGT”)Actions为动作,如:AgtNum+;SeaSon计算机学院-数据库中心Gawk相关语法 (3)IO操作 print、printf()、getline.(4)控制语句 if(.).else、while()SeaSon计算机学院-数据库中心Gawk工作流程nGawk反复执行以下四个步骤:1.自动从trace文件中读取一行。2.自动更新内建参数的值($n)。3.逐行执行程序中所有 的 Pattern Actions 代码。4.如果trace文件还有未读取的行,则循环执行上面步骤
40、13。SeaSon计算机学院-数据库中心Gawk程序的框架nBEGIN nAgtNum=0;nnn if($1=s&$4=AGT)n AgtNum+;nnEND n printf(Num of AGT pkts:%d n,AgtNum);nn最后保存文agtnum.awk文件SeaSon计算机学院-数据库中心执行的命令(演示)n可以在cygwin或者xwin窗口下执行n命令格式n$gawk f agtnum.awk out.trn对于mflood例子,输出结果nSeaSonColorfulSeaSon/ns-allinone-2.29/ns-2.29/test/pptn$gawk-f agtn
41、um.awk mflood.trn Num of AGT pkts:50 SeaSon计算机学院-数据库中心一个分析协议的完整例子(推荐推荐)nPerformance Evaluation of Ad Hoc Routing Protocols using ns2 simulations文章对ad hoc routing protocol进行了比較,包括DSDV,AODV,DSR其中TORA因为測不出來.就没进行比较作者把如何比較的程式碼都附在上面.n下载网址:ww.cs.utk.edu/gupta/Adhoc.doc SeaSon计算机学院-数据库中心其他n获得节点的位置,速度信息stati
42、c Node*get_node_by_address(nsaddr_t);n获得节点能量,使节点进入休眠模式n跨层设计n将真实数据导入NS2http:/ivs.cs.uni-magdeburg.de/EuK/forschung/projekte/nse/howtos/ns2uml_userguide.pdfnTcl与C+之间相互调用(演示)Tcl中调用C+函数nCommand()C+中调用tcl命令char out100;sprintf(out,%s setColor%d,name(),level);Tcl&tcl=Tcl:instance();tcl.eval(out);SeaSon计算机学
43、院-数据库中心其他nthreshold 计算通信半径使用前先complier threshold.cc$cd ns-2.29/indep-utils/propagation/$g+-lm threshold.cc-o threshold 示例$threshold-m TwoRayGround 250distance=250propagation model:TwoRayGroundSeaSon计算机学院-数据库中心联系我nEmail:nMSN:nQQ:67483698nNS仿真软件-season http:/ http:/140.116.72.80/smallko/ns2/ns2.htmnNS与网络模拟nns-2 Tutorialhttp:/www-scf.usc.edu/bhuangnIntroduction to Computer Networks Network simulator 2(ns-2)SeaSon计算机学院-数据库中心 OVER 谢谢






