周錦陽 宋 廣
(92785部隊(duì) 葫蘆島 125200)
隨著信息技術(shù)的不斷發(fā)展,人們對(duì)移動(dòng)通信的需求越來越強(qiáng)。傳統(tǒng)移動(dòng)通信網(wǎng)絡(luò)一般基于預(yù)設(shè)基礎(chǔ)設(shè)施,對(duì)于某些特殊場(chǎng)合,預(yù)設(shè)基礎(chǔ)設(shè)施不可能存在。比如,戰(zhàn)場(chǎng)上部隊(duì)快速展開和推進(jìn)、地震或水災(zāi)后的營(yíng)救、野外科學(xué)考察等[1]。這就需要一種能夠快速部署、無需基礎(chǔ)設(shè)施、組網(wǎng)便捷的移動(dòng)通信網(wǎng)絡(luò),即移動(dòng)自組織網(wǎng)絡(luò)。
移動(dòng)自組織網(wǎng)絡(luò)作為一種無中心、分布式和自組織的無線移動(dòng)通信網(wǎng)絡(luò),源自美國(guó)夏威夷大學(xué)于1968年構(gòu)建的無線自組織網(wǎng)絡(luò)—ALOHA系統(tǒng)[2],其應(yīng)用領(lǐng)域包括傳感器網(wǎng)絡(luò)[3]、災(zāi)后緊急救援[4]、車輛通信和無線局域網(wǎng)等[5~6]。移動(dòng)自組織網(wǎng)絡(luò)的一種重要研究領(lǐng)域就是路由技術(shù),為了適應(yīng)不同應(yīng)用場(chǎng)合,研究人員設(shè)計(jì)了許多路由協(xié)議[7]。其中AODV路由協(xié)議是IETF推薦的無線自組織路由協(xié)議之一,它簡(jiǎn)單實(shí)用且性能優(yōu)越[8]。
本文依托嵌入式平臺(tái),提出了一種基于Linux系統(tǒng)的AODV路由協(xié)議實(shí)現(xiàn)方法,并將AODV路由協(xié)議應(yīng)用于移動(dòng)自組織網(wǎng)絡(luò)視頻通信中。通過路由協(xié)議測(cè)試,驗(yàn)證了所設(shè)計(jì)AODV路由協(xié)議通信的穩(wěn)定性和及時(shí)性,為進(jìn)一步探索和研究相關(guān)內(nèi)容提供有益參考,具有重要的工程應(yīng)用價(jià)值。
AODV路由協(xié)議作為按需路由協(xié)議[9],該協(xié)議依據(jù)通信需求按需啟動(dòng)路由發(fā)現(xiàn)過程,其節(jié)點(diǎn)路由表和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)按需建立,所以節(jié)點(diǎn)路由表內(nèi)容可能僅為整個(gè)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的一部分。相對(duì)于先應(yīng)式路由協(xié)議,按需路由協(xié)議具有路由開銷小、節(jié)省網(wǎng)絡(luò)帶寬資源等優(yōu)點(diǎn),缺點(diǎn)為傳播時(shí)延較大[10]。
AODV路由協(xié)議可分為路由建立和路由維護(hù)兩個(gè)過程[11]。當(dāng)源節(jié)點(diǎn)需要與目的節(jié)點(diǎn)通信,但路由表無到目的節(jié)點(diǎn)路由時(shí),源節(jié)點(diǎn)啟動(dòng)路由建立過程。路由建立過程采用洪范方式,向全網(wǎng)廣播路由請(qǐng)求分組。當(dāng)發(fā)現(xiàn)通信鏈路中斷時(shí),節(jié)點(diǎn)啟動(dòng)路由維護(hù)過程。
本文設(shè)計(jì)的AODV路由協(xié)議包括四種控制報(bào)文:路由請(qǐng)求(RREQ)報(bào)文、路由應(yīng)答(RREP)報(bào)文、HELLO報(bào)文和路由出錯(cuò)(RERR)報(bào)文。RREQ報(bào)文和RREP報(bào)文用于自組織網(wǎng)絡(luò)的路由建立,HELLO報(bào)文和RRER報(bào)文用于自組織網(wǎng)絡(luò)的路由維護(hù)。
1)RREQ報(bào)文
RREQ報(bào)文格式如圖1所示,包括Type字段、跳數(shù)、目的節(jié)點(diǎn)IP地址、源節(jié)點(diǎn)IP地址、源節(jié)點(diǎn)序列號(hào)及保留字段,總共16個(gè)字節(jié)。
圖1 RREQ報(bào)文格式
2)RREP報(bào)文
RREP報(bào)文報(bào)文格式如圖2所示,包括Type字段、跳數(shù)、目的節(jié)點(diǎn)IP地址、源節(jié)點(diǎn)IP地址、目的節(jié)點(diǎn)序列號(hào)及保留字段,總共16個(gè)字節(jié)。
3)HELLO報(bào)文
HELLO報(bào)文格式如圖3所示,包括Type字段和保留字段,總共4個(gè)字節(jié)。
4)RERR報(bào)文
RERR報(bào)文格式如圖4所示,包括Type字段、失效IP個(gè)數(shù)及失效IP地址。
圖2 RREP報(bào)文格式
圖3 HELLO報(bào)文格式
圖4 RERR報(bào)文格式
3.2.1 RREQ報(bào)文處理策略
RREQ報(bào)文用于建立從目的節(jié)點(diǎn)到源節(jié)點(diǎn)的反向路由,其處理策略包括報(bào)文發(fā)送策略和報(bào)文接收處理策略。
圖5 RREQ報(bào)文發(fā)送策略
1)RREQ報(bào)文發(fā)送策略
當(dāng)源節(jié)點(diǎn)需與目的節(jié)點(diǎn)進(jìn)行通信,但其路由表中沒有到達(dá)目的節(jié)點(diǎn)的路由時(shí),源節(jié)點(diǎn)會(huì)啟動(dòng)RREQ報(bào)文的發(fā)送策略。RREQ報(bào)文發(fā)送策略如圖5所示。如果在規(guī)定時(shí)間內(nèi)收到目的節(jié)點(diǎn)回復(fù)的RREP報(bào)文,則建立從目的節(jié)點(diǎn)到源節(jié)點(diǎn)的反向路由。
2)RREQ報(bào)文接收處理策略
當(dāng)節(jié)點(diǎn)收到RREQ報(bào)文時(shí),啟動(dòng)RREQ報(bào)文接收處理策略,建立到源節(jié)點(diǎn)的反向路由。RREQ報(bào)文接收處理策略如圖6所示。節(jié)點(diǎn)收到RREQ報(bào)文,則添加或更新到源節(jié)點(diǎn)的反向路由。如果本節(jié)點(diǎn)是RREQ報(bào)文的目的節(jié)點(diǎn),則本節(jié)點(diǎn)向RREQ報(bào)文源節(jié)點(diǎn)單播回復(fù)RREP報(bào)文;如果本節(jié)點(diǎn)不是RREQ報(bào)文的目的節(jié)點(diǎn),則廣播轉(zhuǎn)發(fā)該RREQ報(bào)文。
圖6 RREQ報(bào)文接收處理策略
3.2.2 RREP報(bào)文處理策略
RREP報(bào)文用于建立從源節(jié)點(diǎn)到目的節(jié)點(diǎn)的正向路由。當(dāng)目的節(jié)點(diǎn)收到有效RREQ報(bào)文時(shí),則沿著新建立的反向路由單播回復(fù)RREP報(bào)文。收到RREP報(bào)文的節(jié)點(diǎn),啟動(dòng)RREP報(bào)文處理策略,建立到目的節(jié)點(diǎn)的正向路由。RREP報(bào)文處理策略如圖7所示。節(jié)點(diǎn)收到RREP報(bào)文時(shí),添加或更新到目的節(jié)點(diǎn)的正向路由,如果本節(jié)點(diǎn)不是RREP報(bào)文的目的節(jié)點(diǎn),則單播轉(zhuǎn)發(fā)RREP報(bào)文。
3.2.3 HELLO報(bào)文處理策略
HELLO報(bào)文用于向鄰居節(jié)點(diǎn)通報(bào)自身節(jié)點(diǎn)的存在,每一個(gè)收到HELLO報(bào)文的鄰居節(jié)點(diǎn),如果存在到此節(jié)點(diǎn)的路由,都會(huì)更新此路由條目的本地時(shí)間。如果路由條目的本地時(shí)間長(zhǎng)期不更新,路由表就認(rèn)為此路由條目為失效路由條目。當(dāng)節(jié)點(diǎn)路由表中有需要維護(hù)的路由條目時(shí),節(jié)點(diǎn)周期性廣播HELLO報(bào)文,收到HELLO報(bào)文的鄰居節(jié)點(diǎn)啟動(dòng)HELLO報(bào)文處理策略,進(jìn)行路由維護(hù)。HELLO報(bào)文處理策略如圖8所示。
圖7 RREP報(bào)文處理策略
圖8 HELLO報(bào)文處理流程
3.2.4 RERR報(bào)文處理策略
RERR報(bào)文用于向網(wǎng)絡(luò)通報(bào)已失效的路由條目,每一個(gè)收到RERR報(bào)文的下一跳節(jié)點(diǎn),都會(huì)檢查本地路由表是否存在相關(guān)失效路由條目,如存在失效路由條目,則轉(zhuǎn)發(fā)此RERR報(bào)文。當(dāng)節(jié)點(diǎn)本地路由表發(fā)現(xiàn)超時(shí)路由條目(即認(rèn)為失效)時(shí),節(jié)點(diǎn)會(huì)廣播發(fā)送RERR報(bào)文。接收到RERR報(bào)文的節(jié)點(diǎn)啟動(dòng)RERR報(bào)文處理策略,進(jìn)行路由維護(hù)。RERR報(bào)文處理策略如圖9所示。
AODV路由協(xié)議的實(shí)現(xiàn)基于嵌入式Linux操作系統(tǒng),利用Linux內(nèi)核netfilter框架的包過濾功能,在PRE_ROUTING及LOCAL_OUT兩個(gè)HOOK點(diǎn)設(shè)置鉤子函數(shù),對(duì)流出(發(fā)送數(shù)據(jù))和流入(接收數(shù)據(jù))節(jié)點(diǎn)的數(shù)據(jù)包進(jìn)行抓包,針對(duì)數(shù)據(jù)包的不同類型,加載不同報(bào)文處理策略,實(shí)現(xiàn)AODV路由協(xié)議的路由建立、路由維護(hù)和數(shù)據(jù)傳輸功能。
圖9 RERR報(bào)文處理流程
netfilter框架是Rusty Russell提出的新一代Linux防火墻,該框架基于Linux內(nèi)核2.4版本,可實(shí)現(xiàn)數(shù)據(jù)包的過濾及處理、地址偽裝和網(wǎng)絡(luò)地址轉(zhuǎn)換等功能[12]。為實(shí)現(xiàn)對(duì)流經(jīng)TCP/IP協(xié)議棧的數(shù)據(jù)包進(jìn)行檢測(cè)和控制處理,在數(shù)據(jù)包流經(jīng)協(xié)議棧的線路上,netfilter框架定義了五個(gè)鉤子點(diǎn)(即HOOK點(diǎn)),如圖10所示。在此五個(gè)HOOK點(diǎn)上,netfilter框架分別定義了五個(gè)鉤子函數(shù),用戶可設(shè)置封裝好的鉤子函數(shù)實(shí)現(xiàn)數(shù)據(jù)包的抓取和處理。
圖10 netfilter框架的HOOK點(diǎn)(IPv4)
針對(duì)流出平臺(tái)的發(fā)送數(shù)據(jù),在LOCAL_OUT鉤子點(diǎn)設(shè)置鉤子函數(shù),進(jìn)行發(fā)送數(shù)據(jù)的抓包和處理;針對(duì)流入平臺(tái)的接收數(shù)據(jù),在PRE_ROUTING鉤子點(diǎn)設(shè)置鉤子函數(shù),進(jìn)行接收數(shù)據(jù)的抓包和處理。
發(fā)送數(shù)據(jù)作為平臺(tái)自身產(chǎn)生的數(shù)據(jù)包,其處理流程如圖11所示。依據(jù)平臺(tái)節(jié)點(diǎn)是否存在目的路由,決定是否生成RREQ報(bào)文,并啟用RREQ發(fā)送策略。
圖11 發(fā)送數(shù)據(jù)處理流程
接收數(shù)據(jù)作為外部節(jié)點(diǎn)流入平臺(tái)節(jié)點(diǎn)的數(shù)據(jù),其處理流程如圖12所示。本文設(shè)計(jì)數(shù)據(jù)包類型包括數(shù)據(jù)報(bào)文和控制報(bào)文兩種,其中控制報(bào)文包括RREQ報(bào)文、RREP報(bào)文、HELLO報(bào)文和RERR報(bào)文四種。依據(jù)數(shù)據(jù)包的不同類型,調(diào)用不同報(bào)文處理策略,從而實(shí)現(xiàn)AODV路由協(xié)議的路由建立、路由維護(hù)和數(shù)據(jù)傳輸功能。
在靜態(tài)多跳實(shí)驗(yàn)場(chǎng)景下,針對(duì)網(wǎng)絡(luò)時(shí)延和丟包率兩方面進(jìn)行性能測(cè)試,驗(yàn)證AODV路由協(xié)議通信穩(wěn)定性。靜態(tài)測(cè)試如圖13所示,平臺(tái)S、M1和D均靜止。通過平臺(tái)S發(fā)送到平臺(tái)D的ping擴(kuò)展指令,記錄網(wǎng)絡(luò)時(shí)延和丟包率。
經(jīng)測(cè)試及結(jié)果統(tǒng)計(jì),靜態(tài)測(cè)試時(shí)延如圖14所示,靜態(tài)測(cè)試丟包率如圖15所示。依據(jù)統(tǒng)計(jì)結(jié)果可知,對(duì)于2跳S-M1-D鏈路,當(dāng)發(fā)送1KB大小的數(shù)據(jù)包時(shí),鏈路平均時(shí)延穩(wěn)定在61ms左右,上下波動(dòng)不超過3ms。隨著測(cè)試時(shí)間的增加,丟包率從1.6%逐步趨近于0。由此可見,針對(duì)節(jié)點(diǎn)靜止的多跳自組織網(wǎng)絡(luò),鏈路時(shí)延穩(wěn)定性良好,數(shù)據(jù)包丟失僅出現(xiàn)在路由建立的初始階段,隨著測(cè)試時(shí)間的增長(zhǎng),丟包率趨近于0,鏈路通信狀態(tài)良好。
圖12 接收數(shù)據(jù)處理流程
圖13 AODV路由協(xié)議靜態(tài)測(cè)試圖
圖14 靜態(tài)測(cè)試時(shí)延
圖15 靜態(tài)測(cè)試丟包率
在動(dòng)態(tài)多跳路由切換實(shí)驗(yàn)場(chǎng)景下,針對(duì)網(wǎng)絡(luò)時(shí)延、丟包率和路由切換時(shí)間進(jìn)行性能測(cè)試,驗(yàn)證AODV路由協(xié)議通信穩(wěn)定性和及時(shí)性。動(dòng)態(tài)測(cè)試如圖16所示,平臺(tái)S、M1和M2均靜止,平臺(tái)D勻速往返運(yùn)動(dòng)。通過源節(jié)點(diǎn)S發(fā)送到目的節(jié)點(diǎn)D的ping擴(kuò)展指令,記錄網(wǎng)絡(luò)時(shí)延、丟包率和路由切換時(shí)間。
圖16 AODV路由協(xié)議態(tài)測(cè)試圖
圖17 路由切換時(shí)延
經(jīng)測(cè)試及結(jié)果統(tǒng)計(jì),路由切換時(shí)延如圖17所示,路由切換丟包率如圖18所示。依據(jù)統(tǒng)計(jì)結(jié)果可知,對(duì)于多節(jié)點(diǎn)路由切換鏈路,當(dāng)發(fā)送1KB大小的數(shù)據(jù)包時(shí),鏈路平均時(shí)延在61.5ms左右,上下波動(dòng)不超過2ms;丟包率穩(wěn)定在4.7%左右,最大不超過5%。由此可見,針對(duì)多節(jié)點(diǎn)自組織網(wǎng)絡(luò)的路由切換,鏈路時(shí)延穩(wěn)定性良好,數(shù)據(jù)丟包率較小。
圖18 路由切換丟包率
路由切換時(shí)間統(tǒng)計(jì)結(jié)果如圖19所示,其中“S-D→S-M1-D”表示路由切換由鏈路S-D切換到鏈路S-M1-D,其它路由切換采用相同的表示方式。依據(jù)統(tǒng)計(jì)結(jié)果可知,路由切換平均時(shí)長(zhǎng)約2.9s,最大不超過3.1s。由此可見,針對(duì)多節(jié)點(diǎn)自組織網(wǎng)絡(luò)的路由切換,路由切換及時(shí),上下波動(dòng)較小,鏈路通信狀態(tài)良好。
圖19 路由切換時(shí)間統(tǒng)計(jì)結(jié)果
綜上所述,分析可知:鏈路平均時(shí)延與所經(jīng)跳數(shù)相關(guān),跳數(shù)越多,時(shí)延越大;丟包率與路由切換頻率相關(guān),路由切換越頻繁,丟包率越大;路由切換時(shí)間與自組織路由協(xié)議路由維護(hù)周期相關(guān),維護(hù)周期越短,越容易發(fā)現(xiàn)失效路由,從而越早重新建立路由,縮短路由切換時(shí)間,但路由節(jié)點(diǎn)維護(hù)成本相應(yīng)增大。
本文基于嵌入式Linux操作系統(tǒng),利用Linux內(nèi)核netfilter框架,通過對(duì)路由協(xié)議報(bào)文處理策略的加載,實(shí)現(xiàn)了AODV路由協(xié)議的自組織路由和數(shù)據(jù)傳輸功能。測(cè)試結(jié)果表明,所設(shè)計(jì)的AODV路由協(xié)議具有良好的通信的穩(wěn)定性和及時(shí)性。隨著嵌入式技術(shù)的發(fā)展和移動(dòng)自組織網(wǎng)絡(luò)的應(yīng)用,未來還需要對(duì)自組織路由協(xié)議和工程應(yīng)用進(jìn)一步研究,使之更廣泛應(yīng)用于車聯(lián)網(wǎng)、物聯(lián)網(wǎng)及無線傳感器網(wǎng)絡(luò)等方向。