Ns2中單播動態(tài)路由的實現(xiàn)與擴展_第1頁
Ns2中單播動態(tài)路由的實現(xiàn)與擴展_第2頁
Ns2中單播動態(tài)路由的實現(xiàn)與擴展_第3頁
Ns2中單播動態(tài)路由的實現(xiàn)與擴展_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、ns2中單播動態(tài)路由機制的剖析與擴展摘要:ns2是在網(wǎng)絡(luò)研究和設(shè)計廣泛使用的一個網(wǎng)絡(luò)仿真器,但ns2對路由協(xié)議的實現(xiàn)過程非常復(fù)雜,所以嚴(yán)重阻礙了網(wǎng)絡(luò)研究者對原有路由模塊的擴展和仿真。本文詳細(xì)剖析了ns2中單播動態(tài)路由的功能和實現(xiàn)過程,提出了在ns2中擴展路由協(xié)議的方法,最后通一個路由擴展實例說明了擴展方法的可行性。關(guān)鍵詞網(wǎng)絡(luò)仿真器ns2路由rtproto引言ns2是免費并且可以完全開放源代碼的網(wǎng)絡(luò)仿真軟件,使用者可以根據(jù)自己的需求編寫代碼,擴展ns2的功能,因此備受研究人員的關(guān)注。在ns2中一共有四種路由仿真策略,它們分別是:static(靜態(tài)路由),session(會話路由),dynamic

2、(動態(tài)路由)和manual(手動路由)。static和session策略使用的是dijkstras all-pairs spf 路由算法。動態(tài)路由策略使用distributed bellman-ford 路由算法。手動路由不是一個用來計算路由的協(xié)議,只是ns2提供給用戶一個可以手工配置路由表的接口。該文將重點討論動態(tài)路由策略的實現(xiàn)和擴展方法,并通過實例說明擴展方法的應(yīng)用價值。因為ns2的英文文檔都是專業(yè)技術(shù)人員編寫的,理解起來有一定的難度,并且其中存在不少bug,而且目前公開發(fā)表的中文文獻中幾乎沒有關(guān)于擴展路由協(xié)議的報告。因此該文希望對路由的研究起到推動作用,減少研究開發(fā)人員的成本開銷。2.

3、ns2單播動態(tài)路由的結(jié)構(gòu)因為靜態(tài)和手動路由實現(xiàn)簡單,所以該文重點介紹ns2中動態(tài)路由協(xié)議的實現(xiàn)過程和擴展方法。ns2單播動態(tài)路由的組成部分如圖1所示。圖1 ns2單播動態(tài)路由結(jié)構(gòu)圖從圖1中可以看出,實現(xiàn)動態(tài)路由協(xié)議的類一共有六個:()routelogic類是仿真器實例所維護的。其功能是:管理仿真拓樸中所有節(jié)點和鏈路信息;計算靜態(tài)路由策略下的路由;查詢?nèi)致酚尚畔?。?) rtobject類只應(yīng)用于動態(tài)路由仿真中。其功能是:在運行動態(tài)路由策略的仿真拓?fù)渲?,每一個節(jié)點都有一個rtobject型的實例變量,它在節(jié)點中的作用是管理節(jié)點中的不同的動態(tài)路由協(xié)議代理模塊。rtobject實例變量跟蹤正在節(jié)點

4、中運行的每一個動態(tài)路由協(xié)議,并利用節(jié)點中動態(tài)路由協(xié)議代理產(chǎn)生的路由信息來計算并確定到達每一個目的節(jié)點的路由。當(dāng)節(jié)點中的路由表發(fā)生改變或是網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時,rtobject會通知節(jié)點中的動態(tài)路由協(xié)議代理模塊重新計算路由。(3) rtpeer類是一個被動態(tài)路由協(xié)議代理模塊使用的容器類,該類存放所有相鄰節(jié)點地址,對等路由代理模塊的端口號和路由信息。(4)agent/rtpro類是所有路由協(xié)議代理類的基類。每一個路由協(xié)議代理類都要定義 procedureinit-all過程完成初始化操作。如果用戶要想實現(xiàn)自己的路由協(xié)議,最主要的工作是首先應(yīng)當(dāng)繼承并修改agent/rtproto類。(5)routin

5、g module路由模塊:此模塊是連接節(jié)點接分類器和路由功能模塊之間橋梁,在一般的路由仿真中主要利用的是基本路由模塊rtmodule/base。3. 單播動態(tài)路由的實現(xiàn)為便于討論,首先說明下面幾個數(shù)組變量的意義。rtpref_數(shù)組變量中存放著每一個路由協(xié)議代理的preference_(優(yōu)先級)值,表明該路由協(xié)議代理計算出的路由優(yōu)先級。metric_數(shù)組變量中存放著到所有目的節(jié)點的cost_度量值,在ns2的動態(tài)路由策略中這個度量的默認(rèn)值是1(跳數(shù))。rtvia_數(shù)組變量存放著到達目的節(jié)點所用路由協(xié)議代理的名稱。nexthop_數(shù)組變量存放著到下一跳信息。上述四個數(shù)組變量都以目的節(jié)點作為數(shù)組索引

6、。在仿真器命令$ns rtproto dv開始執(zhí)行的時候,ns2會新建立一個routelogic型的變量并調(diào)用routelogic類中的register過程,該過程將會接收兩個參數(shù):proto和args,proto參數(shù)是仿真中要實現(xiàn)的路由協(xié)議,該文傳來的參數(shù)是dv,因此仿真將會執(zhí)行動態(tài)路由協(xié)議策略。第二個參數(shù)args,它是要實現(xiàn)路由協(xié)議的節(jié)點列表,如果args為空,ns2將會對仿真拓?fù)渲兴泄?jié)點使用dv路由協(xié)議。register過程主要執(zhí)行下面代碼:agent/rtproto/$proto pre-init-all $args即調(diào)用dv路由協(xié)議中的初始化過程pre-init-all。在實際的n

7、s2 tcl仿真源碼中,dv代理pre-init-all過程是空的。至此,仿真器實例過程$ns rtproto dv的執(zhí)行結(jié)束。但是動態(tài)路由策略的初始化過程并沒有結(jié)束,因為路由代理模塊和rtobject對象還沒有安裝到節(jié)點當(dāng)中去。在仿真器類執(zhí)行run過程的時候,會有下面的代碼:$self get-routelogic configure即調(diào)用routelogic類中的configure方法。在該方法中,主要執(zhí)行存放在該類中所有路由策略的初始化過程,在該文執(zhí)行的是agent/rtproto/dv 的init-all過程,該過程的操作步驟如下: (1)首先在仿真拓?fù)渲械拿恳粋€節(jié)點上創(chuàng)建一個rtob

8、ject實例對象,并對其進行初始化。初始化的結(jié)果是:節(jié)點node和rtobject對象實例可相互訪問;對其成員變量rtpref_、metric_、rtvia_賦初值;調(diào)用其add-proto方法在rtobject實例中添加direct路由協(xié)議代理;調(diào)用direct協(xié)議代理的compute-routes方法來建立節(jié)點與其相鄰節(jié)點的路由。rtobject初始化之后,ns會為所有節(jié)點添加dv路由協(xié)議代理模塊。(2),調(diào)用dv路由協(xié)議add-peer方法。其功能是在每一個節(jié)點的dv代理中添加其相鄰節(jié)點對等dv代理的rtpeer引用,并把這個引用存放在peers_數(shù)組中。(3)路由協(xié)議中的每個節(jié)點定期地

9、向其相鄰節(jié)點發(fā)送該節(jié)點路由信息的操作在dv路由代理初始化的時候被設(shè)置。dv路由代理的初始化過程會調(diào)用send-updates告知ns事件調(diào)度器定期地向相鄰節(jié)點rtpeer對等實例發(fā)送該節(jié)點所保存的路由信息。(4)當(dāng)相鄰節(jié)點的對等dv代理接收到路由更新信息時,首先取出dv和ip頭部;接下來調(diào)用otcl解釋器對象的evalf方法,該方法的作用是在tcl層面上執(zhí)行dv代理解釋對象的recv-update方法:在peers_數(shù)組中找到發(fā)送路由更新消息代理的rtpeer引用,接著用傳來的跳數(shù)信息更新原有的跳數(shù)信息。接著執(zhí)行下面兩句重要代碼:$self compute-routes$rtobject_ c

10、ompute-routes第一條代碼是dv路由代理調(diào)用自己的compute-routes方法計算到達各個節(jié)點的路由,即確定下一跳nexthop_數(shù)組中的值,該方法僅是確定dv代理模塊的路由。第二條代碼是調(diào)用rtobject_類中compute-routes方法在其路由代理數(shù)組rtprotos_($proto)所確定的路由中挑選出最優(yōu)的路由,并最終通過rtmodule模塊把節(jié)點計算出的路由安裝到節(jié)點的地址分類器中。至此,agent/rtproto/dv 的inin-all過程才全部執(zhí)行完成。初始化完成后,通過ns的事件調(diào)度機制周期性地調(diào)用路由消息發(fā)送和路由接收方法,在仿真拓?fù)渲械拿恳粋€節(jié)點中建立

11、到達所有節(jié)點的路由表,整個路由的建立過程結(jié)束。4. 功能擴展及實現(xiàn)綜上所述,擴展動態(tài)路由模塊的步驟如下:(1)僅擴展靜態(tài)路由協(xié)議算法只需要對routelogic模塊中的計算路由過程進行修改,不需要修改tcl接口。(2)對動態(tài)路協(xié)議算法的擴展,可分為下述兩種情況:l 路由選擇部分的擴展:該擴展的實現(xiàn)需要繼承rtobject類并進行修改。因為rtobject對象是ns系統(tǒng)在每一個實現(xiàn)動態(tài)路由協(xié)議節(jié)點中創(chuàng)建并管理的,所以用戶不必再編寫tcl接口。l 添加具體的協(xié)議實現(xiàn):首先從agent/rtproto類派生出要實現(xiàn)協(xié)議的子類;根據(jù)具體實現(xiàn),重載初始化和路由計算這兩個重要的方法;最后在仿真器類中的rt

12、proto過程中添加新協(xié)議的用戶接口。如果要擴展的協(xié)議需要增加新的對等協(xié)議代理,用戶應(yīng)當(dāng)在tcl層面編寫新的對等協(xié)議模塊。(3)復(fù)雜的路由協(xié)議需要對路由選擇部分進行擴展并添加具體的協(xié)議實現(xiàn)方法。在這種情況下,按照先更改rtobject類,然后添加協(xié)議代理的原則進行擴展。如必要,還可在仿真器類中為用戶提供合適的tcl接口。根據(jù)上文所提供的方法,現(xiàn)對ns原有的動態(tài)路由協(xié)議做一個簡單的擴展。在ns原有的動態(tài)路由策略下,按照節(jié)點中保存的跳數(shù)信息進行路由計算。一般情況下,一條路由的時延和跳數(shù)并沒有直接關(guān)系,這也就意味著擁最有短跳數(shù)的路由并不一定有最短時延。這里擴展目的就是要實現(xiàn)擁有最短時延的路由。在理論

13、上時延和跳數(shù)同屬于加性度量,所以整個路由的時延是由組成該路由的各個鏈路上的時延之和。如果在一對源和目的節(jié)點中有多條路由存在的話,那么系統(tǒng)所選出的路由將具有最短時延。因為只涉及到對路由度量的更改,根據(jù)上文提出的擴展方法知:只需修改路由代理就可以完成擴展功能。動態(tài)路由策略在計算之前由每個節(jié)點的direct代理來計算并保存其到達相鄰節(jié)點的路徑和度量信息,并將默認(rèn)跳數(shù)信息修改成鏈路時延信息。實現(xiàn)的主要方法如下:agent/rtproto/direct instproc settimedelay(dest,time)set metric_($dest) $time其主要功能是在仿真開始前配置每個節(jié)點di

14、rect代理中的度量值。dest就是目的節(jié)點,因為時延time是鏈路的時延值,所以該方法應(yīng)在用戶配置鏈路之后進行使用,這樣每個節(jié)點在交換度量信息前,節(jié)點中的direct代理存放已是時延度量信息。這樣經(jīng)過dv路由代理和rtobject模塊所計算出來的路由就是具有最短時延的路由。仿真結(jié)果如下圖所示,在仿真開始之前利用上述的用戶接口把各條鏈路上的開銷值設(shè)置成為時延,本文設(shè)置路由0-1-3-4-6的總時延為最小,雖然其跳數(shù)為4跳,但由節(jié)點發(fā)往節(jié)點6的數(shù)據(jù)包選擇這條時延最小的路由, 5、結(jié)論本文對ns2網(wǎng)絡(luò)仿真器中的路由模塊的組成部分進行了簡要介紹,并以動態(tài)路由算法為例,就ns2如何實現(xiàn)distributed bellman-ford算法功能進了深入的剖析并做了仿真。在剖析路由模塊工作原理的基礎(chǔ)之上,本文提出了在ns中擴展路由模塊的具體的方法。由于ns對路由的實現(xiàn)的原理很復(fù)雜,所以本文的分析和提出的方法對于想

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論