




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1 簡(jiǎn) 第2 ed 第一 解釋器的接 第3 command方法:定義與調(diào)用 第二 第4 調(diào)度器和 第5 第6 第7 隊(duì)列阻塞(Queue JoBS算 第8 第9 概 實(shí) DiffServ模型中的RED隊(duì) 邊際和路由器(Edgeandcore 配 第10 10.1 10.2函 協(xié)議OTcl創(chuàng)建并操作 OTcl函 創(chuàng)建 啟動(dòng) 創(chuàng)建一個(gè)新的 “”與OTcl的通過OTcl使用應(yīng)用程序接口 各種對(duì) 第11 定時(shí)器 C++抽象基類 OTcltimer 第12 Packet Packet 第13 錯(cuò)誤模型(Error 實(shí) 配 第14 Tcl配 C++中的Channel MAC Mac的狀 Mac的方 C++中的Mac 基于CSMA的 C++中的LL 局域網(wǎng)和ns路 第15 擴(kuò)展port-id 設(shè)址格式的錯(cuò) 命令一 第16 移動(dòng)網(wǎng)絡(luò)的各種MAC層協(xié) 移動(dòng)網(wǎng)絡(luò)的各種路由 無線traces的修訂格 無線場(chǎng)景點(diǎn)移動(dòng)和流量連接的生 移動(dòng) 第17 NS中的網(wǎng) 17.1模型概 同步軌道使用擴(kuò) 鏈 切 路 Trace支 差錯(cuò)模 nam支 示例場(chǎng) 實(shí) 節(jié)點(diǎn)結(jié) 鏈路詳 第18 space(自由空間)模 背 第19 OTcl接 第20 ns中的diffusion模 ns中diffusion的一些mac方面的問 diffusion中運(yùn)用過濾器的 一個(gè)diffusion應(yīng)用實(shí)現(xiàn)的例子 20.5.1應(yīng)用程序的c++實(shí) 20.5.2應(yīng)用程序的tcl 給ns添加yrdiffusion應(yīng)用程序的需 第21 什么是 在ns中實(shí)現(xiàn) XCP終 XCP路由 XCP隊(duì) XCP示例XCP測(cè)試 第22 延遲器(DelayBox):每條數(shù)據(jù)流的時(shí)延與丟 示 第23 在NS-2.31中實(shí)現(xiàn)IEEE802.15.4的變 第三 支 第24 ns調(diào) 混合調(diào)試Tcl和 使用 第25 隨機(jī)數(shù)RNG C++支持成員函數(shù) 隨 第26 對(duì)的支 Otcl的幫助函 Per-flow監(jiān) 流監(jiān)測(cè)的格 第27 對(duì)TestSuite的支 TestSuite組 編寫一個(gè)test 第28 第四 路 第29 第30 組播 組播行為的配 內(nèi)部變 第31 絡(luò)(Network 用戶層接口 類 類 目前網(wǎng)絡(luò)動(dòng)態(tài)API中的缺 第32 帶SessionSim的分層路 第五 傳送 第33 UDP UDP 第34 TCP One-WayTCP TheBaseTCPSender(Tahoe 配 OtherOne-WayTCP TheBaseTCP Delayed-ACKTCP SackTCP Simple 第35 SCTP基類SCTP 命 擴(kuò) HbAfterRto 動(dòng)態(tài) SCTP應(yīng) 例 單穴例 多穴例 第36 配 Session對(duì) 擴(kuò)展Agent基 SRM對(duì) 第37 配 分組對(duì)(PacketPair)數(shù)據(jù)源發(fā)生 PLM的實(shí)例 丟包檢 第六 應(yīng)用 第38 應(yīng)用程序和傳輸 傳輸 示 示 net和 第39 在UDP上傳輸用戶數(shù) 在TCP上傳輸用戶數(shù) 管理HTTP連 調(diào) Http的格 第40 概 配 第41 使用DelayBox和PackMime- 示 第七 規(guī)模 第42 配 基本配 內(nèi) 分組轉(zhuǎn) 第43 ytical 第八 仿真 第44 仿 概 Tap IP網(wǎng)絡(luò)對(duì) IP/UDP網(wǎng)絡(luò)對(duì) 示 第九 用Nam來可視化--網(wǎng)絡(luò)動(dòng) 第45 簡(jiǎn) 由Nam生成演示動(dòng) 第46 Nam NodeMarking(節(jié)點(diǎn)標(biāo)記 ExecutingTclProceduresandExternalCodefromwithinNam(在Nam中執(zhí)行TCL UsingStreamsforRealtimeApplications(實(shí)時(shí)應(yīng)用的流 Nscommandsforcreatingandcontrollingnamanimations(創(chuàng)建和控制Nam的外部命令 AgentandFeatures(和特征 第十 第47 NS和NAM的教學(xué)用 以教學(xué)為目的的NS使 教學(xué)庫(kù)的頁(yè) 以教學(xué)為目的的NAM使 參考書 1當(dāng)你歌唱時(shí),你從A,B,C起,…ns指導(dǎo),如MarcGreis的指導(dǎo)網(wǎng)頁(yè)(最初在他的個(gè)人,現(xiàn)在已經(jīng)移到)或幻找agent。模擬時(shí)間為3秒。輸出為兩個(gè)(trace)文件,out.tr和out.nam。當(dāng)模擬在3秒結(jié)束時(shí),它將試圖執(zhí)行nam#setnsnew ;##預(yù)先定義文件setf[openout.tr$nstrace-allsetnf[openout.nam 5Mb 2ms / 5Mb/ 2ms 2在此對(duì)Rodgers和Hammerstein聲抱#setn0[$nsnode]setn1[$nsnode]setn2[$nsnode]setn3[$ns$nsduplex-link$n0$n25Mb2ms$nsduplex-link$n1$n25Mb2ms$nsduplex-link$n2$n31.5Mb10mssetudp0[new $nsattach-agent$n0 ;#在節(jié)點(diǎn)n0setcbr0new $cbr0attach-agent ;#附加在UDPagent ;#setnull0[new ;#這是$nsattach-agent$n3 ;#在節(jié)點(diǎn)n3$nsconnect$udp0$nsat1.0"$cbr0start"puts[$cbr0setpacketSize_]puts[$cbr0setinterval_]#TCP/Tahoe之上的FTP,從節(jié)點(diǎn)n1到節(jié)點(diǎn)n3,flowid為settcp[new$tcpsetclass_$nsattach-agent$n1$tcpsetsink[newAgent/TCPSink]$nsattach-agent$n3setftpnew $ftpattach-agent$nsat1.2"$ftp$nsconnect$tcp$nsat1.35"$nsdetach-agent$n0$tcp;$nsdetach-agent$n33 $nsat3.0"finish"procfinish{}{globalnsfclose$fcloseputs"runningnam..."execnamout.nam&exit0}#$ns2未文檔化的工具(Uned(如果你想添加它的話,本文檔位于ns源代碼的doc子 解釋器的接口(InterfacetotheInterpreter) 將n 后aesr檔 ●鏈路狀態(tài)的使用與設(shè)計(jì)以及MPLS路由模塊毫無記錄可言。(注:自2000年9月14日后,鏈路狀態(tài)需要增加一個(gè)章節(jié)以支持ad-hoc排隊(duì)(Queueing)●CBQ需要建立文檔(或以建立 傳輸(Transport)●需要添加MFTP文 應(yīng)增加對(duì)http討 ●是non-Haobohttp資料記載的么?不是。 3譯者注:tcp-int(integratedTCPcongestioncontrol)整合性TCP擁塞控制 應(yīng)增加一個(gè)審定章節(jié)并照搬ns-test.html內(nèi)3ns一C++語言編寫OTcl向?qū)ο蟮腃++中類的層次結(jié)構(gòu)(本文檔中釋層次中的類和編譯層次中的類是一一對(duì)應(yīng)的。這種層次中的基類是TclObject。用戶通過解釋器創(chuàng)建新的模擬對(duì)象;這些對(duì)象先是在解釋器中被實(shí)例化,然后由編譯層次中相應(yīng)的對(duì)象來產(chǎn)生映射。解釋類層次通過TclClass中定義的方法自動(dòng)層次并不會(huì)以TclObject的方式被映射。語言,這種語言能夠有效地控制字節(jié),分組頭(packetheader),實(shí)現(xiàn)使用大規(guī)模數(shù)據(jù)的算法。對(duì)于這些任務(wù),執(zhí)行時(shí)的速度欲了解關(guān)于語言(scriptinglanguage)和分裂語言(split-language)編程思想的信息,請(qǐng)參考IEEEComputer[26]上Ousterhout的文章。關(guān)于網(wǎng)絡(luò)模擬層次編程的信息,請(qǐng)參考nspaper[2]。例如,(links)是OTcl對(duì)象,它集合了延遲(delay),排隊(duì)(queueing),和可能的丟失模型(lossmodules)。如果你的實(shí)驗(yàn)只有這些就可以完成,那當(dāng)然最好。但是如果你想做得更實(shí)際點(diǎn)(一種queueingloss型),你就需要一個(gè)新的C++對(duì)象了。確實(shí)有一些灰色地帶:大多數(shù)路由在OTcl中實(shí)現(xiàn)(雖然其算法Dijkstra算法是在C++中實(shí)現(xiàn)的)。我們模擬HTTP據(jù)流達(dá)到100條??傊?,如果我們需要在每秒鐘很多次地調(diào)用Tcl,那最好還是將這些代碼移植到C++代碼中。本文檔中,我們用術(shù)語解釋器(interpreter)來表示OTcl中的解釋器。解釋器的接口代碼在單獨(dú)的tclcl下。其它的模擬器代碼在ns-2下。用符號(hào)~tclcl/<file>來表示在Tcl下的一個(gè)特定的<file>。同樣的,用符號(hào)~ns/<filens-2下一個(gè)特定的<file在~tclcl里面定義了很多類。我們只關(guān)注在ns中使用的6個(gè)類:Tcl類(第3.3節(jié))包含C++代碼將要用來解釋器的以及允許用戶實(shí)例化TclObject的方法; 量作為OTcl瞬時(shí)變量的方法。文件~tclcl/tcl2c++.c用來建立ns,而且在本章有簡(jiǎn)略的介紹。部分描述的其它方法。對(duì)該實(shí)例的需要令表述為:Tcl&tcl=T_回OTLEROkrrr(vra這T介紹eval(char*sTcl&tcl=charstrcpy(wrk,"SimulatorsetNumberInterfaces_1");sprintf(tcl.buffer(),"Agent/SRMsetrequestFunction_%s","Fixed"); otcl.evalf("%srequest%d%d",name_,sender,tcl.resultf(constchar*fmt,...if(strcmp(argv[1],"now")==0)tcl.resultf("%.17g",clock());returnTCL_OK;}tcl.result("Invalidoperationspecified");returnTCL_ERROR;tcl.evalc("SimulatorsetNumberInterfaces_");char*ni=tcl.result();if(atoi(ni)!=tcl.resultf("cmd=%s",cmd);tcl.error("invalidcommandspecified");/*不可達(dá)捕捉這個(gè)錯(cuò)誤;同時(shí),ns也將不會(huì)打印出任何stacktrace。建。編譯層次中同時(shí)有一個(gè)與之對(duì)應(yīng)的對(duì)象(shadowobject)被創(chuàng)建。這兩個(gè)對(duì)象相互緊密聯(lián)系。下一小節(jié)描述的4在和cl版里,個(gè)對(duì)象被新命名為ptbt,更精確地反映了這對(duì)象存在的質(zhì)。然而,在繼使用cbt(membervariables)。這種綁定比ns版本1要強(qiáng),因?yàn)镺Tcl變量的任何變化都是被(trapped)的,而且每次當(dāng)前的TclObject類的對(duì)象不再在一個(gè)全局鏈表(linklist)中。而是在Tcl類(3.3.5)的一個(gè)hash表中。TclObject配置的例子:下面的例子是一個(gè)SRMagent的配置(Agent/SRM/Adaptive類)。setsrm[newAgent/SRM/Adaptive]$srmsetpacketSize_$srmtraffic-source根據(jù)ns里的協(xié)定(convention),Agent/SRM/Adaptive類是Agent/SRM的子類(subclass),而Agent/SRM又是約束變量(boundvariable)(3.4.2);最后一行解釋對(duì)象要調(diào)用一個(gè)C++方法充當(dāng)一個(gè)實(shí)例過程(3.4.4)。創(chuàng)建TclObjects戶可以調(diào)用new{}來創(chuàng)建一個(gè)解釋類的TclObject。這時(shí)解釋器將執(zhí)行這個(gè)對(duì)象的構(gòu)造函Agent/SRM/Adaptiveinstprocinit{eval$selfnext$selfarraysetclosest_"requestor0repairor$selfseteps_[$classset}從TclObject的名字空間(namespace)獲取一個(gè)惟一的新的對(duì)象的handle。這個(gè)handle將返回給用戶。ns中大多數(shù)5作為例子,SimulatorNode類、Link類以及rtObject類不是由TclObject類派生而來。這些類中的對(duì)象因?yàn)椴皇荰clObjects。但是一個(gè)SimulatorNode、Linkroute象也是調(diào)用nsnew實(shí)例化6sTOeawsa需要注意的是,所有上述的映射機(jī)制(shadowingmechanisms)只有當(dāng)用戶通過解釋器創(chuàng)建新的TclObject的時(shí)候才TclObject的撤銷delete操作將同時(shí)撤銷解釋對(duì)象和相當(dāng)?shù)膕hadow對(duì)象,例如,use-scheduler{<scheduler>}用delete過程來移除默認(rèn)的鏈表計(jì)劃(listscheduler),同時(shí)在原處實(shí)例化一個(gè)替代的計(jì)劃。Simulatorinstprocuse-schedulertype$selfinstvardelete ;#首先刪除已有的listsetscheduler_[new}$objectsetrealvar$objectsetintvar$objectsetbwvar$objectsetbwvar$objectsetbwvar$objectsetbwvar$objectsetbwvar$objectsetbwvar$objectsetbwvar$objectsettimevar$objectsettimevar$objectsettimevar$objectsettimevar布爾型既可以像整型一樣表示,也可以用‘Tort’來表示真。第一個(gè)字母外的后續(xù)符號(hào)將被忽略。如果這個(gè)值既不$objectsetboolvar 置為$objectsetboolvar$objectsetboolvar ;#或其它非零值(真$objectsetboolvar $objectsetboolvar$objectsetboolvar", /*實(shí)變量", /*整型變量 /*時(shí)間型變量", /*帶寬型變量", /*布爾型變量}7注意這個(gè)函數(shù)被修改過,以用來突出變量的綁定機(jī)制s{}中被執(zhí)行的,而這又是被r類中的方法調(diào)用的(中介紹)。s(ek)解釋對(duì)象saAgent/SRM/Adaptivesetpdistance_15.0Agent/SRMsetpdistance_10.0Agent/SRMsetlas t_8.345mAgentsetctrlLimit_1.44MAgent/SRM/Adaptivesetrunning_fsVrsaOt一個(gè)sVr對(duì)象及相應(yīng)的成員變量的鏈表。這個(gè)鏈表頭被在esa里。常要求用戶調(diào)用一些附加原語(primitives)。在中提供這種原語的式就是通過下一節(jié)介紹的mand()方法。除變量綁以外e時(shí)也支對(duì)++實(shí)例量的一個(gè)變量既以在又可在中和在層變變須T的味一的TOe中Tlra方的一參數(shù)變量的名字,第二個(gè)選的參數(shù)指定負(fù)責(zé)那個(gè)量的ae對(duì)象。如果ae對(duì)象沒有被指定那么擁有這個(gè)量的對(duì)象負(fù)它。classTrace:publicConnectorvirtualvoid8這里的警告指的是未對(duì)上文中的變量pdistance_進(jìn)行初始化\$tcptrace$tcp中的變量ssthresh_的\$tracersettracer[newTrace/Var]\$tcptracessthresh_classTracedVarvirtualchar*value(char*buf)=0;constchar* //變量的名 于將變量的值以字符串輸出。輸出串的寬度和精度可以事先指定。command $srmObjectdistance?$srmObjectcmddistance?Agent/SRM/Adaptiveinstprocdistance?addr$selfinstvarif![infoexistsdistanceCache_($addr)]setdistanceCache_($addr)[$selfcmddistance?}set} mand(intargc,constchar*const*argv){Tcl&tcl=Tcl::instance();if(argc==3){if(strcmp(argv[1],"distance?")=={intsender=atoi(argv[2]);SRMinfo*sp=get_state(sender);tcl.tesultf("%f",sp->distance_);returnTCL_OK;}}return mand(argc,}argv[1]說明所需的操作specifiesthedesired如果用戶要指定其它的參數(shù),它們就被放在argv[2...(argc1)]。參數(shù)是以字符串的形式被傳遞的,它們必須被成合適的這個(gè)編譯類(classTclClass)是一個(gè)純虛類。從這個(gè)基類派生的類提供兩種功能:構(gòu)建與編譯類層次鏡像的解釋類層次;staticclassRenoTcpClass:publicTclClassRenoTcpClass():TclClass("Agent/TCP/Reno"){}TclObject*create(intargc,constchar*const*argv){return(new}}子類以classTraceClass:publicTclClass{TclObject*create(intargs,constchar*const*{if(args>=return(newTrace(*argv[4]));return}}newTrace classPacketstaticintclassPacketHeaderClass:public{PacketHeaderClass(constchar*classname,inthdrsize);TclObject*create(intargc,constchar*const*argv);/*這是兩個(gè)OTcl類的方法的實(shí)現(xiàn)*/virtualvoidbind();virtualintmethod(intargc,constchar*const*void{/*調(diào)用基類的bind()必須在add_method()之前*/}{Tcl&tcl=/*注意這個(gè)參數(shù)的轉(zhuǎn)移;然后我們就可以像 and()里那樣控制它們*/intargc=ac-2;constchar*const*argv=av+2;if(argc==2){if(strcmp(argv[1],"hdrlen")=={tcl.resultf("%d",Packet::hdrlen_);return(TCL_OK);}}elseif(argc==3)if(strcmp(argv[1],"hdrlen")=={Packet::hdrlen_=atoi(argv[2]);return(TCL_OK);}}}PacketHeaderhdrlenseti[PacketHeader ns- ;# mand類定義了ns-random命令,也不包括任何參數(shù),同時(shí)返回一個(gè)整數(shù),且這個(gè)整數(shù)在區(qū)間?0,2???1?ns- ;#ns-random %ns-random %hithisisns[ns-version]oworld,thisisns2.0a12 classsay_o:public mand{intcommand(intargc,constchar*const* say_o(): mand("hi"){} -#include<streams.h> mand(intargc,constchar*const*argv){cout<<"oworld:";for(inti=1;i<argc;i++)cout<<’’<<argv[i];cout<<’\return} newsay_o;setnsnew %$nsnow $nsat ;# sourcetcl/mcast/srm.tcl../Tcl/tcl2c++et_ns_lib>~ns/bin/tcl- 9少數(shù)不行的情況是當(dāng)一定的變量可能被或不被定義,或者相反 包含代碼而不是過程和變量定義并且直接執(zhí)行且不可以逆轉(zhuǎn)的行為創(chuàng)建一個(gè)變量的實(shí)例,然后設(shè)置一個(gè)常規(guī)陷阱(traproutine)來捕捉通過解釋器來變量的所有通道。4模擬器全都是在Tcl的Simulator類中定義的。它提供了一套用擬配置和選擇用于驅(qū)動(dòng)模擬的調(diào)度器類型的接Simulator類中有一個(gè)OldSim子類,它是用來支持NSv1版本的,以此實(shí)現(xiàn)向后兼容。文件中找 packet式初始化在一次模擬中用于設(shè)置packet的偏移域。它將在后續(xù)的章節(jié)(12packet部以及格式)中setnullAgent_[newma由(esa(earee)realm。每數(shù)結(jié)都在面行解調(diào)器這運(yùn)的選下個(gè)早的執(zhí),行畢再回行一事件調(diào)器使的間位秒當(dāng)?shù)臄M是線,此給的意刻只一能到行如在同有度,們先分(stseedstee)得行度器不再對(duì)同一時(shí)刻的進(jìn)行重排序(和較早的版本一樣),并且所有的調(diào)度器都能根據(jù)輸入得到同樣的分配順序。classEvent{Event* Handler*handler_; doubletime_; intuid_; /*唯一的ID*/Event():time_(0),uid_(0){}{virtualvoidhandle(Event*…setns_[new$ns_use-scheduler$ns_at300.5“$self…函數(shù)$selfcomplete_sim,使之在300.5秒時(shí)執(zhí)行(注意:這段特殊的代碼應(yīng)該是被封裝在一個(gè)對(duì)象實(shí)例過程中,其中已經(jīng)類堆調(diào)度器(Scheduler/Heap類)是用一個(gè)堆結(jié)構(gòu)實(shí)現(xiàn)的。這種結(jié)構(gòu)在處理大量時(shí)優(yōu)于鏈表結(jié)構(gòu),因?yàn)閚個(gè)的時(shí)間隊(duì)列調(diào)度器(Scheduler/Calendar類)是用這樣的一種數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的:類似于桌子上的年歷,同月同日但不同年發(fā)生的可以被記錄在同一天。它的正式描述在[6]中,非正式描述則可以在Jain(第400頁(yè))[15]中找到。NSv2中時(shí)間隊(duì)列的實(shí)現(xiàn)要?dú)w功于DavidWetherall(現(xiàn)就職于麻省理工的計(jì)算機(jī)科學(xué),MIT/LCS)。實(shí)時(shí)調(diào)度器(Scheduler/RealTime類)試圖將的執(zhí)行和實(shí)時(shí)同步。它現(xiàn)在是作為鏈表調(diào)度器的一個(gè)子類實(shí)現(xiàn)的。packet達(dá)速率,但這種同步在當(dāng)前來說并不是必須的。(左Simulator類提供了許多用于建立模擬的方法。它們大致可以分為三類:創(chuàng)建和管理網(wǎng)絡(luò)拓?fù)涞姆椒ǎㄆ渲幸来伟ü?jié)Simulatorinstprocnow Simulatorinstprocatargs Simulatorinstproccancelargs Simulatorinstprocrunargs Simulatorinstprochalt Simulatorinstprocflush-trace Simulatorinstproccreate-tracetypefilessrcdst;#創(chuàng)建對(duì) :模擬器(NS)是由NS解釋器激活的,NS解釋器是vanillaotclsh命令行 下找到幾個(gè)OTcl的例子setns_[newsetnow[$ns_$ns_$ns_$ns_at<time>$ns_at$opt(stopputs¨NSEXITING..¨$ns_halt"或$ns_at10.0$ftpstart$ns_cancel$ns_create-trace<type><file><src><dst><optionalarg:$ns_gen-$ns_at-$ns_after<delay>$ns_$ns_is-$ns_$ns_5~ns/tcl/lib/ns-lib.tcl,~ns/tcl/lib/ns-node.tcl,~ns/tcl/lib/ns-rtmodule.tcl,~ns/rtmodule.{cc,h},~ns/classifier.{cc,~ns/classifier-addr.cc,~ns/classifier-mcast.cc,setns[new$ns圖5.1單播節(jié)點(diǎn)的結(jié)例如:setns[newSimulator-multicaston]$nodeentry返回節(jié)點(diǎn)的指針。這是第一個(gè)處理packet到達(dá)節(jié)點(diǎn)的組件。entry_是一個(gè)Node實(shí)例變量,它用來存地址和端管點(diǎn)的。Simulator類同時(shí)也了一個(gè)實(shí)例變量數(shù)組10—Node_,這個(gè)數(shù)組以節(jié)點(diǎn)ID為下標(biāo),其中包含了一個(gè)指向與ID相應(yīng)$nodeagent<port>這個(gè)過程返回的是在給定端口的的句柄。如果在給定的端上沒有可用的,這個(gè)過程easn>TOsma_設(shè)置為。(章節(jié)對(duì)多路類器實(shí)現(xiàn)行講,但把路路的述第)單路的節(jié)后。a}程給的e添到as鏈中之配個(gè)并好的址將指向的指設(shè)置為它的例如,這節(jié)點(diǎn))},同在節(jié)點(diǎn)上附加個(gè)端口復(fù)用的指針),它指向相10例如,一個(gè)類的實(shí)例變量同樣也是一個(gè)數(shù)化。然而,我們?nèi)詫⒘砭S持其接口與當(dāng)前章節(jié)所講述的接口的一致。另外,這個(gè)API前并沒有涵蓋所有的已在舊格式中年9月15日,在2001年6月更新] 和路由層開啟。同時(shí)我們假定已經(jīng)用命令:settopo[newTopography]實(shí)例化了一個(gè)拓?fù)浣Y(jié)構(gòu)。節(jié)點(diǎn)配置命令如下所$ns_node-config-addressTypehierarchical-adhocRoutingAODV-llTypeLL-macTypeMac/802_11-ifqLen50-agentTraceON-routerTraceON-macTraceOFF-movementTrace$ns_node-config-macTrace$ns_node-config就是將值標(biāo)示給一個(gè)出口接口對(duì)象,也就是該packet的下游接收者。徑分類器(章節(jié)5.4.3),哈希分類器(章節(jié)5.4.4)最后講解的是器(章節(jié)5.4.5)。packet發(fā)給由給定slot指向的對(duì)象。CClassifier(在~ns/classifier.h定義)提供了一個(gè)衍生出其他分classClassifier:public{voidrecv(Packet*,Handler*h=0);voidinstall(intslot,NsObject*);voidclear(intslot);virtualintcommand(intargc,constchar*const*argv);virtualintclassify(Packet*const)=0;voidNsObject**slot_*將slotnumber標(biāo)記到一個(gè)NsObject的表*/intnslot_;intclassify()是一個(gè)單純的虛函數(shù),用Classifieralloc()動(dòng)態(tài)的在表中分配足夠大的空下所示方法在~ns/classifier.cc文件中實(shí)現(xiàn)的:voidClassifier::recv(Packet*p,{NsObject*node;intcl=classify(p);if(cl<0||cl>=nslot_||(node=slot_[cl])=={Tcl::instance().evalf("%sno-slot%d",name(),cl);}} mand(intargc,constchar*const*{Tcl&tcl=Tcl::instance();if(argc==3){*$classifierclearif(strcmp(argv[1],"clear")=={intslot=atoi(argv[2]);return}*$classifierinstallNextif(strcmp(argv[1],"installNext")=={intslot=maxslot_+NsObject*node=(NsObject*)TclObject::lookup(argv[2]);install(slot,node);returnTCL_OK;}if(strcmp(argv[1],"slot")=={intslot=if((slot>=0)||(slot<{tcl.resultf("%s",slot_[slot]->name());returnTCL_OK;}tcl.resultf("Classifier:noobjectatslot%d",slot);return(TCL_ERROR);}}elseif(argc==4)*$classifierinstall$slotif(strcmp(argv[1],"install")=={intslot=NsObject*node=(NsObject*)TclObject::lookup(argv[3]);install(slot,node);return}}return mand(argc,}eaeasssO提交給使用evssrs個(gè)slot號(hào)是由classify()方法返回的。AddressClassifier類(在~ns/classifier-addr.cc文件中定義)的定義如下所示:classAddressClassifier:publicClassifier{bind("mask_",(int*)&mask_);bind("shift_",&shift_);}intclassify(Packet*constp)IPHeader*h=IPHeader::access(p->bits());return((h->dst()>>shift_)&mask_);}nsaddr_tmask_;intshift_;(組地址將acke(鏈?zhǔn)焦號(hào)。當(dāng)一個(gè)aeTl過程eerT程可能用eas法來分類器表添加新(源組s的三元組。個(gè)組分srmastaticclassMCastClassifierClass:publicTclClassMCastClassifierClass():TclClass("Classifier/Multicast"){}TclObject*create(intargc,constchar*const*argv){return(new}}classMCastClassifier:public{intcommand(intargc,constchar*const*argv);intclassify(Packet*constp);intvoidset_hash(nsaddr_tsrc,nsaddr_tdst,intslot);inthash(nsaddr_tsrc,nsaddr_tdst)const{u_int32_ts=src^dst;s^=s>>16;s^=s>>return(s&}struct{intslot;nsaddr_tsrc;nsaddr_tdst;hashnode*next;hashnode*consthashnode*lookup(nsaddr_tsrc,nsaddr_tdst){IPHeader*h=IPHeader::access(pkt->bits());nsaddr_tsrc=h->src()>>8;/*XXX*/nsaddr_tdst=h->dst();consthashnode*p=lookup(src,dst);if(p==0){Tcl::instance().evalf("%snew-group%u%u",name(),src,dst);p=lookup(src,dst);if(p==return(-}return(p-}classMultiPathForwarder:publicClassifierMultiPathForwarder():ns_(0),Classifier(){}virtualintclassify(Packet*const){intintfail=ns_;do{cl=ns_%=(maxslot_+}while(slot_[cl]==0&&ns_!=fail);returncl;}/這個(gè)對(duì)象被用作將packet以特殊“流”的成員進(jìn)行分類的。就像其名字所指的一樣,哈希分類器在其了一個(gè)哈$hashclset-hashbucksrcdstfid$hashcllookupbucksrcdst$hashcldel-hashsrcdst$hashclresize$objunknown-flowsrcdstflowid器表;它重載了recv()方法來產(chǎn)生n份packet的拷貝,這樣就可以把它們分發(fā)給所有的與這個(gè)表關(guān)聯(lián)的n個(gè)對(duì)象。子集節(jié)點(diǎn)的鏈路packet去一份。生產(chǎn)額外packet貝是Replicator成的replicator.cc是*器并非一個(gè)真正的packet分類器classReplicator:public{voidrecv(Packet*,Handler*h=0);virtualintclassify(Packet*const){};int{IPHeader*iph=IPHeader::access(p->bits());if(maxslot_<0){ifTcl::instance().evalf("%sdrop%u%u",name(),iph->src(),iph->dst());}for(inti=0;i<maxslot_;{NsObject*o=if(o!=}/*我們知道m(xù)axslot是非空的*/}我們從代碼中可以看到,這個(gè)類并不是真正的對(duì)packet進(jìn)行分類。它只是一個(gè)packet,為表中的每一個(gè)一份,并將拷貝分發(fā)給表中列出的每一個(gè)節(jié)點(diǎn)。表中的最后一個(gè)將得到“最初”的packet。因?yàn)閏lassify()方法在基類中是一個(gè)單純的虛函數(shù),所以器定義了一個(gè)空的classify()方法。我們可以看到,一個(gè)NS節(jié)點(diǎn)本質(zhì)上就是一個(gè)分類器的集合。最簡(jiǎn)單的節(jié)點(diǎn)(單播)只包含一個(gè)地址分類器和一個(gè)端口來要求Node/來支持后者。當(dāng)我們想要一個(gè)adhoc路由節(jié)點(diǎn)支持層次路由的時(shí)候,就有些問題了。在這個(gè)簡(jiǎn)單的例的簡(jiǎn)單的實(shí)現(xiàn)以鏈路狀態(tài)方式交換信息的路由和一個(gè)使用Dijkstra算法計(jì)算拓?fù)鋽?shù)據(jù)庫(kù)的路由邏輯。它可以和其他單播路5.3節(jié)點(diǎn)、路由模塊和路由之間的關(guān)系線表示路由模塊的細(xì)一個(gè)對(duì)象,我們稱之為路由模塊。它管理所有這些功能模塊并與節(jié)點(diǎn)接口聯(lián)系以管理分類器。圖5.3給出了這些對(duì)象間的功由計(jì)算是為某個(gè)特定的路由模塊指定的,例如,在MPLS模塊中的安裝。 功 表 Noesalrmesrk}Neer模分類器鏈連接到新分類器的鉤子上,就像上面講的那樣,如果鉤子和目標(biāo)一直,sr將被當(dāng)作一個(gè)從r派生出m{r}將給定的分類器作為缺省的多路復(fù)用器。如果r是給定的,它將已經(jīng)存在的t為標(biāo)志的$ns_有在層次地址被通過set-address-formathierarchical{}或者node-config-addressTypehierarchical{}啟用的時(shí)候才能使$node$node$nodeagent$node$nodeattach<agent>$nodedetach<agent>$node$nodealloc-port6以講解創(chuàng)建鏈路令作為本章的開始。和由分類器組成節(jié)點(diǎn)一樣,一個(gè)簡(jiǎn)單的鏈路也是由一系列的連接器建成setns[new$nssimplex–link<node0><node1><bandwidth><delay> 圖 程 簡(jiǎn)單鏈路過程OTcl類SimpleLink實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)鏈路,其中關(guān)聯(lián)了一個(gè)隊(duì)列和時(shí)延11。它是從OTcl基類Link中派ClassSimpleLink-superclassSimpleLinkinstprocinit{srcdstbwdelayq{lltype"DelayLink"}}$selfnext$src$selfinstvarlink_queue_head_toNode_setqueue_setlink_[new$link_setbandwidth_$link_setdelay_$queue_target$link_target[$toNode_##將ttl檢查放在時(shí)延之#所以我們不必?fù)?dān)心在/監(jiān)視中的ttl-drop計(jì)數(shù)setttl_[new$ttl_target[$link_$link_target}還有兩個(gè)附加的方法實(shí)現(xiàn)(用OTcl實(shí)現(xiàn))是SimpleLink類的組成部分:trace和init-monitor。這些功能將在的章節(jié)(第26章)進(jìn)行深入的講解。連接器與分類器不同,只為一個(gè)接收者產(chǎn)生數(shù)據(jù),無論packet被傳輸?shù)絫arget_鄰居還是被傳輸?shù)絛rop-target_。 用輸入接口識(shí)別器來標(biāo)記packet,這經(jīng)常在組播路由協(xié)議中使用。類變量SimulatorNumberInterfaces_1知NS11當(dāng)前版本也包括了一個(gè)檢查網(wǎng)絡(luò)層ttl域的對(duì)象,在這個(gè)域的值變?yōu)?的時(shí)候?qū)acket丟棄行討論(30DynaLink根據(jù)鏈路狀態(tài)updown傳輸?shù)膶?duì)象。在鏈路的頭部,在模擬開始之前插入鏈路。它的status_變量控制鏈路狀態(tài)是up還是down。DynaLink對(duì)象使用的詳細(xì)講解單獨(dú)在一個(gè)章節(jié)(第31章)中進(jìn)行。DelayLink模擬鏈路時(shí)延和帶寬特征值的對(duì)象。如果鏈路不是動(dòng)態(tài)的,那這個(gè)對(duì)象就簡(jiǎn)單的在相應(yīng)的時(shí)間為下游對(duì)象的,以實(shí)現(xiàn)下一個(gè)必須被傳輸?shù)膒acket。另外,如果鏈路在某一時(shí)刻斷開,這個(gè)對(duì)象的reset()將被激活,這個(gè)對(duì)象將會(huì)因?yàn)殒溌肥《鴣G棄所有在此刻傳輸?shù)膒acket。在另一章中討論這個(gè)類的使用(第八章。 簡(jiǎn)單鏈路對(duì)象一個(gè)簡(jiǎn)單鏈路對(duì)象被用來代表一個(gè)簡(jiǎn)單的單工鏈$simplelinktrace<ns><file>$simplelinktrace-dynamics<ns><file>$simplelinkinit-monitor<ns><gtrace>$simplelinkinsert-linkloss 鏈路時(shí)延對(duì)象鏈路時(shí)延對(duì)象決定了packet在鏈路中傳輸所需要的時(shí)間量。這個(gè)是以大小/帶寬+時(shí)延的方式定義的。 $ns_simplex-link<node1><node2><bw><delay><qtype>$ns_duplex-link<node1><node2><bw><delay><qtype>$ns_duplex-intserv-link<n1><n2><bw><dly><sched><signal><adc>$ns_simplex-link-op<n1><n2><op>$ns_duplex-link-op<n1><n2><op>$ns_link-lossmodel<lossobj><from>$ns_lossmodel<lossobj><from>$link$linkadd-to-head$link$link$linkcost$linkcost$link$link$link$linkall-connectors這個(gè)命令將給定的操作<op>應(yīng)用到鏈所有的連接器。例如:$linkall-connectorsreset或者$linkall-connect
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合作開發(fā)土地資源利用合同
- 2025年交通事故賠償合同規(guī)范樣本
- 醫(yī)院后勤采購(gòu)合同范本
- 2025挖機(jī)承包合同范本
- 統(tǒng)一二手車交易合同范本
- 公司用酒水采購(gòu)合同
- 公路養(yǎng)護(hù)合同糾紛索賠技巧試題及答案
- 2025年工會(huì)上半年工作總結(jié)范文
- 2025年合作公司股東保密合同模板
- 同濟(jì)大學(xué)土木工程結(jié)構(gòu)靜載試驗(yàn)(課堂)可修改全文
- 2025年母嬰市場(chǎng)消費(fèi)洞察
- DNA測(cè)序技術(shù)及發(fā)展2講課文檔
- 2025年醫(yī)師定期考核試題庫(kù)及答案
- 2024年和田地區(qū)高校畢業(yè)生“三支一扶”計(jì)劃真題
- 2025年小學(xué)科學(xué)教師招聘考試測(cè)試卷及答案
- 消防設(shè)施維保投標(biāo)方案(技術(shù)方案)
- 動(dòng)作經(jīng)濟(jì)原則手邊化POU改善
- 鋼鐵中日材料對(duì)照表
- 漣水縣高溝中學(xué)學(xué)生成長(zhǎng)導(dǎo)師制《導(dǎo)師工作手冊(cè)》(共58頁(yè))
- 脊柱外科??撇轶wppt課件
- QHSE管理體系文件
評(píng)論
0/150
提交評(píng)論