Ad hoc路由協(xié)議實(shí)現研究
在類(lèi)Unix操作系統中,路由功能一般包括2部分。一部分駐留在操作系統內核中,用以基于表驅動(dòng)的進(jìn)程,根據路由表信息,設定正確的地址,將數據分組發(fā)往對應的網(wǎng)絡(luò )接口,這部分稱(chēng)為“分組轉發(fā)功能模塊”;另一部分實(shí)現路由協(xié)議的邏輯計算,通過(guò)與其他主機交換信息計算出到其他節點(diǎn)的正確路由,實(shí)現真正的尋找路由和維護路由功能,這部分稱(chēng)為“分組尋址功能模塊”。分組轉發(fā)路由模塊在內核中基于一個(gè)內核路由表來(lái)工作,每次發(fā)送數據分組都要查詢(xún)內核路由表,取得對應的下一跳鄰居節點(diǎn)的地址和對應的網(wǎng)絡(luò )接口。內核路由表一般由分組尋路功能模塊操作維護。在查找內核路由表時(shí)根據路由表項轉發(fā)。如果找不到匹配的路由表項,則按缺省路由發(fā)送,一般將網(wǎng)關(guān)作為缺省路由的下一跳節點(diǎn)。如果缺省路由不存在則操作系統將直接丟棄數據分組。分組尋路模塊功能負責尋路,它和其他節點(diǎn)交換信息,采用一定的路由算法計算和維護內核路南表。分組尋路功能模塊既可在內核實(shí)現,也可在用戶(hù)空間實(shí)現,Linux系統自帶的分組尋路模塊在內核中。分組轉發(fā)功能和分組尋路功能分開(kāi)后,可在分組轉發(fā)功能模塊不變的情況下,通過(guò)修改分組尋路功能模塊用其他路由協(xié)議代替現有的路由協(xié)議。
4.3 Netfilter/iptables網(wǎng)絡(luò )分組的處理
Netfilter是嵌入在內核IP協(xié)議棧的一系列調用入口,設置在數據報處理的路徑上。Netfilter為每種網(wǎng)絡(luò )協(xié)議定義一套鉤子函數(IPv4定義5個(gè)子函數),這些鉤子函數在數據分組流過(guò)協(xié)議棧的幾個(gè)關(guān)鍵點(diǎn)時(shí)被調用。在這幾個(gè)關(guān)鍵點(diǎn)上,協(xié)議把網(wǎng)絡(luò )數據分組、鉤子函數及鉤子函數標號作為參數調用 Netfilter框架。內核的任何模塊可對每種協(xié)議的一個(gè)或多個(gè)鉤子進(jìn)行注冊。當某個(gè)數據報被傳送至Netfilter框架時(shí),內核能夠檢測是否有模塊對該協(xié)議和鉤子進(jìn)行注冊。若已注冊則調用該模塊注冊時(shí)使用的回調函數,這些模塊就有機會(huì )檢查、修改或丟棄該分組及指示Netfilter將該數據分組傳入用戶(hù)空間的隊列。排隊的數據分組被傳遞至用戶(hù)空間,在用戶(hù)空間異步進(jìn)行處理。
一個(gè)用戶(hù)空間進(jìn)程能夠檢查數據分組、修改數據分組,甚至還可重新將該數據分組通過(guò)離開(kāi)內核的同一個(gè)鉤子函數重新注入內核中。
綜上所述,由于Linux的Netfilter/iptables功能強大,并且與內核結合完美,因此受到廣泛關(guān)注并應用于Ad hoc路由協(xié)議的實(shí)現。
4.4 基本問(wèn)題的解決
Linux體系結構下,在處理無(wú)路由分組和更新路由緩存時(shí)具有較好的解決途徑。
通過(guò)使用一個(gè)本地隧道設備Universal TUN/TAP作為這些地址‘接口’過(guò)濾無(wú)路由分組。再將這些分組緩存在一張由目的地IP地址為索引的Hash隊列。
當路由發(fā)現完成成功后,使用新發(fā)現的路由,內核中的這些分組被恰當地路由出去,從而較好處理了沒(méi)有路由分組。為每個(gè)路南表條目在內核外面維護一個(gè)時(shí)間戳來(lái)更新路由緩存。
設計一個(gè)route_check的簡(jiǎn)單核心模塊維護該表,每個(gè)路由出去的分組都將經(jīng)該模塊,還可查看分組頭并更新對應的時(shí)間戳。本文引用地址:http://dyxdggzs.com/article/202642.htm
5 結束語(yǔ)
由于Linux操作系統,通過(guò)分析當前操作系統的網(wǎng)絡(luò )模塊,列出實(shí)現Ad hoc路由協(xié)議所面臨的問(wèn)題并提出了一種可行的解決方案。
評論