無(wú)線(xiàn)Ad-Hoc網(wǎng)絡(luò )中P2P文件搜索機制的研究
1 引言
無(wú)線(xiàn)Ad-Hoc網(wǎng)絡(luò )因其構建容易、支持用戶(hù)移動(dòng)性的特點(diǎn),在無(wú)線(xiàn)通信領(lǐng)域中占有極其重要的地位并具有廣闊的應用前景。無(wú)線(xiàn)通信技術(shù)、移動(dòng)技術(shù)的發(fā)展為無(wú)線(xiàn)Ad-Hoc網(wǎng)絡(luò )(WANET)提供了更廣泛的應用空間。經(jīng)常使用文件共享的P2P網(wǎng)非常適合 WANET。然而,在現有的無(wú)線(xiàn)Ad-Hoc網(wǎng)絡(luò )中直接應用P2P技術(shù),會(huì )造成系統開(kāi)銷(xiāo)大量增加,傳輸效率及查詢(xún)成功率不高,從而影響整個(gè)網(wǎng)絡(luò )的性能。在無(wú)線(xiàn)Ad-Hoc網(wǎng)絡(luò )(WANET)中方便快捷地實(shí)現P2P數據共享與交換,改善文件搜索和下載機制成為廣泛關(guān)注的課題。
這里提出一種將查詢(xún)功能和路由功能統一的跨層設計方案,利用分布式哈希表建立樹(shù)狀網(wǎng)絡(luò )拓撲結構,使用P2P位置查找技術(shù)將文件位置信息分配在其間,每一網(wǎng)絡(luò )成員都存儲和保留系統資源的位置及路由信息,實(shí)現共享文件的定位查詢(xún)。在WANET中實(shí)現查詢(xún)和路由功能的統一,提高文件搜索和下載效率,定向查詢(xún)網(wǎng)絡(luò )資源,降低冗余開(kāi)銷(xiāo)。
2 系統概述
這里WANET通過(guò)節點(diǎn)間的樹(shù)形邏輯結構解決共享文件的定位查詢(xún)問(wèn)題,隨著(zhù)網(wǎng)絡(luò )新節點(diǎn)的加入樹(shù)形拓撲結構增大。新節點(diǎn)只能通過(guò)某一個(gè)鄰居節點(diǎn)加入 WANET,每個(gè)WANET向外提供唯一的網(wǎng)絡(luò )ID,在同一ID的網(wǎng)絡(luò )中,每個(gè)節點(diǎn)只能擁有一個(gè)雙親節點(diǎn)。網(wǎng)絡(luò )有一個(gè)層次分明的樹(shù)狀拓撲結構,這種結構有助于查找文件路徑(即從存放路徑的節點(diǎn)獲得到達文件存儲節點(diǎn)的路由),以便從文件存儲節點(diǎn)下載文件。
為了存儲和保留位置信息以及路由信息,系統使用全分布哈希表,關(guān)鍵詞是所要共享文件的文件名,值是共享文件的全球統一的位置信息(節點(diǎn)MAC地址和節點(diǎn)文件的全路徑)。用一維空間來(lái)存儲關(guān)鍵詞和哈希值對,通過(guò)統一的哈希函數將每個(gè)關(guān)鍵詞映射到哈希鏈上的對應位置。統一的函數有助于節點(diǎn)之間信息分配的平衡, WANET中的每個(gè)節點(diǎn)負責存儲一段哈希鏈(與哈希表上的索引項對應)。如果某一節點(diǎn)負責哈希鏈段上包含某一文件哈希值,稱(chēng)該節點(diǎn)為文件的路徑節點(diǎn) (Pnode),存儲文件F的節點(diǎn)就稱(chēng)為文件節點(diǎn)(Fnode)。因此Pnode存儲攜帶位置信息的索引,Fnode存儲實(shí)際文件。因此,訪(fǎng)問(wèn)一個(gè)文件的步驟如下:查詢(xún)節點(diǎn)(Qnode)哈希被搜索的文件名以確定哈希鏈上的值;訪(fǎng)問(wèn)Pnode(哈希值包含在Pnode負責的哈希鏈內);從Pnode獲取被搜索文件的位置(即Fnode)并確定從Pnode小節點(diǎn)到Fnode的路由;從Qnode獲取到Qnode-Fnode的路由,訪(fǎng)問(wèn)Fnode,文件從 Fnode被下載。
3 樹(shù)形拓撲的建立和節點(diǎn)文件定位
圖1d表示一個(gè)含有7個(gè)節點(diǎn)的WANET網(wǎng)絡(luò ),在該網(wǎng)絡(luò )中,假定節點(diǎn)A、B、C、D、E、F、G提供的共享文件分別為(α1α2)、(β1β2)、(γ1)、(δ1 δ2)、(σ1)、(ε1)、(η1η2)。
3.1 WANET網(wǎng)絡(luò )系統樹(shù)形拓撲的建立
假設網(wǎng)絡(luò )組建初期只有一個(gè)初始節點(diǎn)A,要建立一個(gè)如圖1d所示的7個(gè)節點(diǎn)的WANET文件共享網(wǎng)絡(luò ),樹(shù)形拓撲的建立過(guò)程如下:
(1)節點(diǎn)A對自己的兩個(gè)共享文件α1、α2哈希后將值映射到整段共享文件哈希鏈上,如圖2a所示。
(2)節點(diǎn)B(共享文件β1、β2)發(fā)現節點(diǎn)A并向節點(diǎn)A發(fā)起接入請求,即B要加入A組成的網(wǎng)絡(luò )。節點(diǎn)A收到B的接入請求后,將自己所負責的哈希鏈分成兩段并分配一半給B,文件α2因此落入節點(diǎn)B負責的一段哈希鏈,A將文件α2的位置索引送至B(文件雖然還存放在節點(diǎn)A,但A上α2的位置信息置空)。因此,A成為B的雙親節點(diǎn)。B存放著(zhù)文件α2的位置信息[α2,A]。
(3)B向網(wǎng)絡(luò )插入其共享文件β1和β2,β1映射到B節點(diǎn)所負責的哈希鏈段,β2映射到A節點(diǎn)所負責哈希鏈段。則B節點(diǎn)存儲位置信息[β1,B],A節點(diǎn)存儲位置信息[β2,B],即B為文件β1的PnodeA為文件β2的Pnode,如圖2b所示。
(4)另一個(gè)新節點(diǎn)C(存儲文件γ1、γ2)發(fā)現節點(diǎn)B并對其發(fā)出接入請求,節點(diǎn)C從B接入網(wǎng)絡(luò ),B將自己的哈希鏈段分出一半給C。節點(diǎn)C上的文件γ1、 γ2哈希后映射到哈希鏈上,如圖2c。α2落入C所負責的哈希鏈段,B將α2的信息送至C,節點(diǎn)C不僅保留α2的位置信息,也保留從C到文件α2的路徑信息。C將B加到路徑上,同時(shí)保存[α2,BA]的索引項。表明文件α2存儲在節點(diǎn)A,并且從C到節點(diǎn)A的路徑是“C-B-A”。節點(diǎn)B成為C的雙親節點(diǎn)。
(5)C向網(wǎng)絡(luò )插入共享文件γ1、γ2,γ1映射到C負責的哈希鏈段,γ2映射到A負責的哈希鏈段。
(6)同理,節點(diǎn)E發(fā)現網(wǎng)絡(luò )并向節點(diǎn)B發(fā)出接入請求后,分擔了B負責的一半哈希鏈并插入文件σ1,B成為E的雙親節點(diǎn);節點(diǎn)D(存儲文件δ1和δ2)發(fā)現網(wǎng)絡(luò )并從節點(diǎn)E接入后分擔了E一半的哈希鏈,節點(diǎn)F(存儲了文件η1和η2)發(fā)現網(wǎng)絡(luò )并從E接入,叉分擔E剩下部分一半的哈希鏈:最后節點(diǎn)G(存儲共享文件ε1)也從E加入網(wǎng)絡(luò )又分擔了 E剩下哈希鏈的一半。這樣,E成為節點(diǎn)D、G、F的雙親節點(diǎn)。各個(gè)節點(diǎn)在加入的過(guò)程中向網(wǎng)絡(luò )插入自己提供的共享文件,如圖2d~圖2g中所示,相應的共享文件被插入到網(wǎng)絡(luò )中各節點(diǎn)所負責的哈希鏈上,在此過(guò)程中,相應的節點(diǎn)也存儲了文件名及到達文件存儲節點(diǎn)的路由信息。
該網(wǎng)絡(luò )結構建立后,網(wǎng)絡(luò )中各共享文件的當前位置和路由信息也被定位,搜索各共享文件的路由可從訪(fǎng)問(wèn)Pnode的請求消息中獲得,如圖2所示。網(wǎng)絡(luò )的樹(shù)形拓撲結構也同時(shí)建立,如圖1所示。
(7)恢復當雙親節點(diǎn)的一個(gè)子節點(diǎn)斷網(wǎng)時(shí),雙親節點(diǎn)重新獲得子節點(diǎn)所負責的哈希鏈段?;蜃庸濣c(diǎn)與其雙親斷開(kāi)時(shí),從子節點(diǎn)往下每個(gè)雙親與子節點(diǎn)哈希鏈重新分配。
(8)離開(kāi)當一個(gè)節點(diǎn)要離開(kāi)WANET文件共享網(wǎng)絡(luò )時(shí),要先刪除所有共享文件,再將其索引信息刪除,如E將自己的哈希鏈交付雙親B,同時(shí)將離網(wǎng)消息通知其雙親B和子節點(diǎn)D、G、F,則節點(diǎn)B將D、G、F加為子節點(diǎn),節點(diǎn)D、G、F將B作為雙親節點(diǎn)。
綜上所述,在圖1d中,假設節點(diǎn)D要查找文件η1,則D為查詢(xún)節點(diǎn)Qnode,文件η1存儲在F節點(diǎn),則F節點(diǎn)就是文件節點(diǎn)Fnode,文件η1映射到哈希鏈上的H(η1)點(diǎn),而H(η1)點(diǎn)正好落在節點(diǎn)C負責的哈希鏈上,所以,節點(diǎn)C就是路徑節點(diǎn)Pnode,它存儲著(zhù)由Pnode(節點(diǎn)C)到Fnode (節點(diǎn)F)的路由信息。
4 WANET網(wǎng)絡(luò )中共享文件搜索和下載過(guò)程
在圖1d中,假設D作為查詢(xún)節點(diǎn)搜索文件η2,D不知道η2的位置,甚至不知道這個(gè)文件是否存在,但由H(η2)的可以知道文件存儲在某個(gè)節點(diǎn)中。共享文件η2文件的搜索和下載過(guò)程如圖4所示。
(1)節點(diǎn)D對文件η2哈希,得到H(η2),D發(fā)現H(η2)不在自己負責的哈希鏈內,而D本身又沒(méi)有子節點(diǎn),D就將查詢(xún)傳遞給其唯一的鄰居節點(diǎn)E(E這里也是D的雙親節點(diǎn))。
(2)節點(diǎn)E收到節點(diǎn)D查詢(xún)η2的請求[η2,D],但節點(diǎn)E的3個(gè)鄰居節點(diǎn)B、G和F都不包含文件η2的路由信息H(η2),E就將查詢(xún)送至其雙親節點(diǎn)B。
(3)由于節點(diǎn)B所負責的哈希鏈也不包含H(η2),但是因為節點(diǎn)B知道它的一個(gè)子節點(diǎn)(這里指節點(diǎn)C)負責的哈希鏈上包含所請求的文件名的哈希值,按照H(η2)值和文件哈希鏈狀態(tài),B將查詢(xún)向前傳送到節點(diǎn)C(否則節點(diǎn)B將查詢(xún)送給其雙親節點(diǎn)A)。
節點(diǎn)B將查詢(xún)送到節點(diǎn)C后并不能保證能收到C的應答。節點(diǎn)C除和節點(diǎn)B相連外可能還與其他節點(diǎn)相連,因此,確定節點(diǎn)所在的哈希鏈后,C可能將查詢(xún)送給它的一個(gè)子節點(diǎn)。但是無(wú)論節點(diǎn)C還是其子節點(diǎn)響應查詢(xún)請求都對節點(diǎn)B無(wú)影響。節點(diǎn)B只知道將查詢(xún)送至節點(diǎn)C。在拓撲結構圖中,節點(diǎn)C沒(méi)有子節點(diǎn)并且擁有文件 η2的位置信息。從源節點(diǎn)發(fā)起查詢(xún)的路徑都被標識為查詢(xún)。
(1)C節點(diǎn)收到查詢(xún)消息[η2,BED],表示節點(diǎn)D經(jīng)節點(diǎn)E、B查詢(xún)文件η2,于是C對D產(chǎn)生查詢(xún)響應消息ACK[η2,EBC](包含位置信息),沿著(zhù)路徑[η2,EBC]返回給節點(diǎn)D。
(2)從節點(diǎn)C獲得文件節點(diǎn)Fnode的路由信息FED沿查詢(xún)節點(diǎn)的路由回送節點(diǎn)D,節點(diǎn)C將響應傳送給路徑上的下一個(gè)節點(diǎn)B。
(3)節點(diǎn)B查看響應中的路由后,將消息送至路徑的下一個(gè)節點(diǎn)E。
(4)E查看路由后再將消息送至路徑中文件節點(diǎn)F(文件η2的存儲節點(diǎn))。
(5)節點(diǎn)D收到查詢(xún)響應,響應消息中包含文件η2的位置信息[η2,DEF]?,F在,節點(diǎn)D不僅知道了文件η2存在節點(diǎn)F中,也知道了兩個(gè)路徑從D到C (含η2文件位置信息)和從C到F(η2文件存儲節點(diǎn))。節點(diǎn)D將路徑鏈接成D-E-B-C-B-E-F,然后刪除不需要的路徑E-B-C-B,最后形成從D到η2的路徑D-E-F,即從查詢(xún)發(fā)起節點(diǎn)D到文件η2的存儲節點(diǎn)F的路徑,通過(guò)它能直接從節點(diǎn)F找到并下載文件η2。
5 與洪泛的比較系統的通信開(kāi)銷(xiāo)
WANET通常用于P2P文件共享,且一般采用洪泛查詢(xún)。假定洪泛模型無(wú)選擇轉發(fā)功能,因此,假定洪泛查詢(xún)一旦在網(wǎng)絡(luò )中啟動(dòng),網(wǎng)絡(luò )中所有節點(diǎn)都能收到查詢(xún)。該查詢(xún)產(chǎn)生的系統開(kāi)銷(xiāo)O=(n-1)m,其中m表示查詢(xún)次數,n表示節點(diǎn)數量。該WANET共享系統中P2P文件搜索和下載模型(圖4)組建網(wǎng)絡(luò )拓撲時(shí)形成的樹(shù)形結構使得即便所查文件不存在,也不會(huì )像洪泛一樣造成過(guò)多無(wú)用的查詢(xún)消息,該結構幾乎能發(fā)現和訪(fǎng)問(wèn)網(wǎng)絡(luò )中的所有共享文件。
所以。一旦網(wǎng)絡(luò )建立。系統開(kāi)銷(xiāo)與洪泛相比,單個(gè)查詢(xún)的成本效益明顯合算。
另一方面,由于恢復操作和網(wǎng)絡(luò )接入操作產(chǎn)生的系統開(kāi)銷(xiāo)較大,當每次斷網(wǎng)和網(wǎng)絡(luò )接入發(fā)生時(shí),會(huì )帶來(lái)額外開(kāi)銷(xiāo)(在執行恢復操作中斷開(kāi)的子節點(diǎn)變?yōu)楦濣c(diǎn),哈希鏈在整個(gè)子網(wǎng)絡(luò )中重新分配;網(wǎng)絡(luò )接入時(shí),每個(gè)接入的節點(diǎn)要對全網(wǎng)絡(luò )中的共享文件執行插入請求,產(chǎn)生很大通信流量),而洪泛不會(huì )帶來(lái)這樣的開(kāi)銷(xiāo)。
6 結論
同樣大小的網(wǎng)絡(luò )中,在低移動(dòng)性、需要頻繁搜索文件的WANET上,提出方案的帶寬效率比洪泛高,文件搜索更有效。如果WANET網(wǎng)絡(luò )成員移動(dòng)頻繁且搜索文件不頻繁,則采用洪泛會(huì )更好。為避免洪泛和通過(guò)單播方式訪(fǎng)問(wèn)文件,我們盡量保持分布式位置信息的一致性。保持位置信息一致性的開(kāi)銷(xiāo)通過(guò)大量減少后續文件搜索的開(kāi)銷(xiāo)來(lái)補償。
當一個(gè)消息不存在時(shí),網(wǎng)絡(luò )中每個(gè)節點(diǎn)的每個(gè)文件都被洪泛就會(huì )導致?lián)砣?。WANET文件共享系統允許成員的低移動(dòng)性,重新哈希運算后更完善的網(wǎng)絡(luò )結構可抵消移動(dòng)性造成的查詢(xún)開(kāi)銷(xiāo)的增加。
評論