專利名稱:分布式哈希表路由表更新方法及節(jié)點的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式哈希表(DHT,Distributed Hash Table)技術(shù),尤其涉及一種基于DHT技術(shù)的分布式哈希表路由表更新方法及節(jié)點。
背景技術(shù):
分布式哈希表(DHT,Distributed Hash Table)技術(shù)是一種廣泛應(yīng)用于對等(P2P,Peer to Peer)網(wǎng)絡(luò)中的分布式資源查找技術(shù)。DHT疊加網(wǎng)是各節(jié)點按照一定的拓撲結(jié)構(gòu)組成的位于IP網(wǎng)絡(luò)之上的疊加網(wǎng),其負責(zé)一部分資源的存儲和消息的路由等。DHT在文件交換、分布式計算、服務(wù)共享等方面已經(jīng)充分顯示出了其強大的技術(shù)優(yōu)勢。在DHT疊加網(wǎng)中,各節(jié)點以及資源的關(guān)鍵字均具有唯一的標(biāo)識,其中節(jié)點標(biāo)識是對節(jié)點地址的映射,資源關(guān)鍵字標(biāo)識是對該資源關(guān)鍵字的映射。當(dāng)標(biāo)識長度為m比特時,標(biāo)識的取值范圍為
。由這些標(biāo)識組成的空間可視為一個首尾相連的DHT環(huán)。常見的DHT算法有Chord、Pastry、Kademlia等,這些算法規(guī)定了 DHT環(huán)中各節(jié)點負責(zé)區(qū)間的劃分方法,以及P2P消息的路由方法等。以Chord算法為例,各疊加網(wǎng)節(jié)點負責(zé)存儲關(guān)鍵字標(biāo)識位于本節(jié)點標(biāo)識與前趨節(jié)點標(biāo)識之間的資源,發(fā)送P2P消息的路由跳數(shù)一般為0(logN),其中N為疊加網(wǎng)中節(jié)點的數(shù)目。隨著P2P技術(shù)的示范效應(yīng),DHT技術(shù)也被引入到其它技術(shù)體制中,以用于構(gòu)建高性能、可擴展的分布式數(shù)據(jù)庫系統(tǒng)等,如亞馬遜的Dynamo系統(tǒng)等。在這些分布式數(shù)據(jù)庫系統(tǒng)中,節(jié)點(對等體)在計算、存儲等方面的性能均較好,且各節(jié)點的加入和退出嚴格受控,疊加網(wǎng)調(diào)整不頻繁。但這些系統(tǒng)對發(fā)送P2P消息的路由效率要求較高,要求P2P消息在固定的跳數(shù)到達目的節(jié)點。故該類系統(tǒng)適宜采用單跳DHT算法,即各節(jié)點均保存完整路由表,掌握疊加網(wǎng)所有節(jié)點負責(zé)區(qū)間的情況,發(fā)送的P2P消息只需一跳即可到達目的節(jié)點。然而,若采用單跳DHT,在疊加網(wǎng)節(jié)點多時,則路由表較大。在異構(gòu)網(wǎng)絡(luò)環(huán)境下,單跳DHT還可以進一步結(jié)合分割標(biāo)識、虛擬節(jié)點等負載均衡方法,即各節(jié)點負責(zé)與自身能力相符的分割或虛擬節(jié)點數(shù)目,以承擔(dān)合適的負載。這樣,各節(jié)點路由表中除存儲物理節(jié)點信息外,還需存儲分割標(biāo)識或虛擬節(jié)點與物理節(jié)點間的映射關(guān)系,路由表更為龐大。采用單跳DHT,要求疊加網(wǎng)中各節(jié)點存儲的路由表與疊加網(wǎng)實際情況保持同步或基本同步。圖1為DHT環(huán)的示意圖,如圖1所示,疊加網(wǎng)101是由各類擔(dān)負不同角色的對等體(也稱為疊加網(wǎng)節(jié)點)組成的一張邏輯網(wǎng)絡(luò);疊加網(wǎng)中的對等疊加網(wǎng)節(jié)點102為疊加網(wǎng)中的基本組成部分,是能夠為同一疊加網(wǎng)中其它疊加網(wǎng)節(jié)點提供存儲和傳送服務(wù)的疊加網(wǎng)節(jié)點。對DHT環(huán)中的任一疊加網(wǎng)節(jié)點,均存在一個前趨節(jié)點和一個后繼節(jié)點。圖2為節(jié)點加入疊加網(wǎng)的流程圖,如圖2所示,節(jié)點加入疊加網(wǎng)具體包括如下步驟:步驟201,加入節(jié)點獲取得到自身節(jié)點標(biāo)識;加入節(jié)點可以通過查找自身配置信息的方式或向服務(wù)器請求等方式獲取自身節(jié)點標(biāo)識;步驟202,加入節(jié)點向其已知的疊加網(wǎng)任一節(jié)點發(fā)送附著請求消息;步驟203,接收到附著請求消息的節(jié)點將消息轉(zhuǎn)發(fā)給加入節(jié)點的負責(zé)節(jié)點;步驟204至步驟205,負責(zé)節(jié)點發(fā)送附著響應(yīng)消息,該附著響應(yīng)消息被轉(zhuǎn)發(fā)給加入節(jié)點;步驟206,負責(zé)節(jié)點向加入節(jié)點發(fā)送路由更新請求消息,該路由更新請求消息中含有自身存儲的當(dāng)前疊加網(wǎng)完整路由表;步驟207,加入節(jié)點按路由更新請求消息初始化自身路由表,并向負責(zé)節(jié)點回復(fù)路由更新響應(yīng);步驟208,加入節(jié)點向負責(zé)節(jié)點發(fā)送加入疊加網(wǎng)請求消息;步驟209,負責(zé)節(jié)點向加入節(jié)點回復(fù)加入疊加網(wǎng)響應(yīng)消息,至此,加入節(jié)點和負責(zé)節(jié)點完成協(xié)商,確定負責(zé)節(jié)點向加入節(jié)點遷移數(shù)據(jù)的區(qū)間;步驟210,負責(zé)節(jié)點不斷向加入節(jié)點發(fā)送存儲數(shù)據(jù)請求消息,加入節(jié)點在完成數(shù)據(jù)存儲后回復(fù)響應(yīng)消息;該過程持續(xù)到數(shù)據(jù)遷移過程完成;步驟211,此時加入節(jié)點已完成接管遷移區(qū)間部分數(shù)據(jù)的準(zhǔn)備,其負責(zé)節(jié)點向疊加網(wǎng)所有其它節(jié)點發(fā)送路由更新請求消息;該路由更新請求消息可采用廣播或分級廣播等形式發(fā)送;步驟212,疊加網(wǎng)各節(jié)點按路由更新請求消息更新本地存儲的路由表,并向負責(zé)節(jié)點回復(fù)路由更新響應(yīng)消息。若采用分割標(biāo)識或虛擬節(jié)點等負載均衡算法,新加入節(jié)點可能需要從多個在網(wǎng)節(jié)點接管負責(zé)DHT區(qū)間,故加入節(jié)點需與多個在網(wǎng)節(jié)點交互,分別執(zhí)行上述步驟208至步驟212。若兩個或多個節(jié)點在相近的時刻請求加入疊加網(wǎng),由于數(shù)據(jù)遷移時間較長,加入過程可存在重疊。圖3為兩個節(jié)點在相近時間加入疊加網(wǎng)的流程圖,如圖3所示,本示例假設(shè)疊加網(wǎng)在網(wǎng)已有節(jié)點僅包括節(jié)點A和節(jié)點B,且分別為新加入節(jié)點C和節(jié)點D為負責(zé)節(jié)點。圖3所示流程具體包括以下步驟:步驟301,加入節(jié)點C已完成向負責(zé)節(jié)點A的附著過程;步驟302,負責(zé)節(jié)點A向節(jié)點C發(fā)送路由更新請求消息,該路由更新請求消息內(nèi)包含完整路由表,路由表中包括節(jié)點A、B的相關(guān)信息;步驟303,節(jié)點C根據(jù)請求初始化本地路由表,并向節(jié)點A發(fā)送路由更新響應(yīng)消息;步驟304,節(jié)點C向節(jié)點A發(fā)送加入疊加網(wǎng)請求消息;步驟305,節(jié)點A向節(jié)點C發(fā)送加入疊加網(wǎng)響應(yīng)消息,至此,加入節(jié)點和負責(zé)節(jié)點完成協(xié)商,確定負責(zé)節(jié)點向加入節(jié)點遷移的數(shù)據(jù)區(qū)間;步驟306,節(jié)點A向節(jié)點C發(fā)送數(shù)據(jù),進行數(shù)據(jù)遷移;步驟307,此時加入節(jié)點C已完成成為疊加網(wǎng)成員的準(zhǔn)備,負責(zé)節(jié)點A向疊加網(wǎng)其它所有節(jié)點(目前僅有節(jié)點B)發(fā)送路由更新請求消息,以通知節(jié)點C已加入疊加網(wǎng);步驟308,節(jié)點B更新本地路由表,并向節(jié)點A發(fā)送路由更新響應(yīng)消息;步驟309,稍晚于節(jié)點C,在相近的時刻,加入節(jié)點D已完成向負責(zé)節(jié)點B的附著過程;步驟310,負責(zé)節(jié)點B向節(jié)點D發(fā)送路由更新請求消息,該路由更新請求消息內(nèi)包含完整路由表,路由表中包括節(jié)點A、B的相關(guān)信息;步驟311,節(jié)點D根據(jù)路由更新請求消息初始化本地路由表,并向節(jié)點B發(fā)送路由更新響應(yīng)消息;步驟312,節(jié)點D向節(jié)點B發(fā)送加入疊加網(wǎng)請求消息;步驟313,節(jié)點B向節(jié)點D發(fā)送加入疊加網(wǎng)響應(yīng)消息,至此,加入節(jié)點和負責(zé)節(jié)點完成協(xié)商,確定負責(zé)節(jié)點向加入節(jié)點遷移的數(shù)據(jù)區(qū)間;步驟314,節(jié)點B向節(jié)點D發(fā)送數(shù)據(jù),進行數(shù)據(jù)遷移;步驟315,此時加入節(jié)點D已完成成為疊加網(wǎng)成員的準(zhǔn)備,負責(zé)節(jié)點B向節(jié)點A發(fā)送路由更新請求消息,通知節(jié)點D已加入疊加網(wǎng);步驟316,節(jié)點A更新本地路由表,并向節(jié)點B發(fā)送路由更新響應(yīng)消息;步驟317,此前節(jié)點B已獲知節(jié)點C加入疊加網(wǎng)的信息,故負責(zé)節(jié)點B向節(jié)點C發(fā)送路由更新請求消息,通知節(jié)點D已加入疊加網(wǎng);步驟318,節(jié)點C更新本地路由表,并向節(jié)點B發(fā)送路由更新響應(yīng)消息。以上步驟完成后,新加入節(jié)點D因為在其未成為疊加網(wǎng)成員時不會收到關(guān)于加入節(jié)點C的路由更新請求消息,其路由表與疊加網(wǎng)實際情況不同步。路由表不同步的節(jié)點會將P2P消息發(fā)往錯誤的目的節(jié)點,接收到P2P消息的節(jié)點查詢本地存儲的路由表獲取該目的地址的下一跳,并對該P2P消息進行轉(zhuǎn)發(fā)。這樣,P2P消息最終仍可到達正確的目的節(jié)點,但增加了路由跳數(shù)。后續(xù),若路由表不同步的節(jié)點負責(zé)新節(jié)點的加入,其保存的路由表會被傳遞給新加入節(jié)點。不正確路由表會因此擴散,導(dǎo)致疊加網(wǎng)性能不斷下降。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種分布式哈希表路由表更新方法及節(jié)點,能消除節(jié)點間路由表不同步的現(xiàn)象,從而避免錯誤的路由表擴散,避免疊加網(wǎng)路由性能下降。為達到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:一種分布式哈希表路由表更新方法,包括:疊加網(wǎng)中節(jié)點檢測到所述疊加網(wǎng)發(fā)生調(diào)整時,進行路由表更新,并將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點。優(yōu)選地,將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點之后,所述方法還包括:所述其他節(jié)點根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新,并計算本地更新后路由表的哈希值,確定所計算哈希值與所接收到的路由表哈希值不一致時,與發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間進行路由表交換;所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點根據(jù)所交換的路由表確定是否需要修正本地路由表,需要時進行路由表修正。優(yōu)選地,所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點根據(jù)所交換的路由表確定是否需要修正本地路由表,需要時進行路由表修正,為:所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點分別根據(jù)從對方獲取的路由表對比出與自身路由表之間的差異,對導(dǎo)致路由表差異的節(jié)點進行探測,根據(jù)探測結(jié)果在確定需要自身修正路由表時,進行本地路由表修正。優(yōu)選地,所述疊加網(wǎng)發(fā)生調(diào)整,為:新節(jié)點加入所述疊加網(wǎng)和/或有節(jié)點退出所述疊加網(wǎng)。優(yōu)選地,所述觸發(fā)路由表更新原因信息包括以下信息的至少一種:新節(jié)點加入所述疊加網(wǎng)、節(jié)點退出所述疊加網(wǎng)、節(jié)點負責(zé)區(qū)間變化;所述路由表哈希值為節(jié)點中完整的路由表哈希值或節(jié)點中各路由表分段的哈希值。優(yōu)選地,所述方法還包括:為路由表或路由表分段設(shè)置計數(shù)器;所述其他節(jié)點確定所計算哈希值與所接收到的路由表或路由表分段哈希值不一致時,將所述計數(shù)器加一;確定所述計數(shù)器的計數(shù)值達到設(shè)定閾值時,與所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間進行路由表交換。優(yōu)選地,所述路由表哈希值為節(jié)點中各路由表分段的哈希值時,所述方法還包括:所述其他節(jié)點根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新,確定更新后某路由表分段的哈希值與所接收的某路由表分段的哈希值不一致時,與所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間僅進行不一致的路由表分段交換。一種疊加網(wǎng)節(jié)點,包括檢測單元、更新單元和通知單元;其中:檢測單元,用于檢測所述疊加網(wǎng)是否發(fā)生調(diào)整,發(fā)生時觸發(fā)更新單元;更新單元,用于進行路由表更新;通知單元,用于將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點。上述節(jié)點還包括交換單元和修正單元,其中:交換單元,用于與所述其他節(jié)點進行路由表交換;修正單元,用于根據(jù)從所述其他節(jié)點獲取的路由表對比出與所述節(jié)點自身路由表之間的差異,對導(dǎo)致路由表差異的節(jié)點進行探測,在確定需要所述節(jié)點自身修正路由表時,進行本地路由表修正。其中,所述疊加網(wǎng)發(fā)生調(diào)整,為:新節(jié)點加入所述疊加網(wǎng)和/或有節(jié)點退出所述疊加網(wǎng);所述觸發(fā)路由表更新原因信息包括以下信息的至少一種:新節(jié)點加入所述疊加網(wǎng)、節(jié)點退出所述疊加網(wǎng)、節(jié)點負責(zé)區(qū)間變化;所述路由表哈希值為節(jié)點中完整的路由表哈希值或節(jié)點中各路由表分段的哈希值?!N疊加網(wǎng)節(jié)點,包括接收單元、更新單元、計算單元和確定單元;其中:接收單元,用于接收其他節(jié)點發(fā)送的觸發(fā)路由表更新原因信息及更新后路由表哈希值;
更新單元,用于根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新;計算單元,用于計算所述節(jié)點本地更新后路由表的哈希值;確定單元,用于確定所計算哈希值是否與所接收到的路由表哈希值一致。上述節(jié)點還包括交換單元和修正單元,其中:所述確定單元確定所計算哈希值與所接收到的路由表哈希值不一致時,觸發(fā)交換單元;交換單元,用于與所述其他節(jié)點進行路由表交換;修正單元,用于根據(jù)從所述其他節(jié)點獲取的路由表對比出與所述節(jié)點自身路由表之間的差異,對導(dǎo)致路由表差異的節(jié)點進行探測,在確定需要所述節(jié)點自身修正路由表時,進行本地路由表修正。其中,所述觸發(fā)路由表更新原因信息包括以下信息的至少一種:新節(jié)點加入所述疊加網(wǎng)、節(jié)點退出所述疊加網(wǎng)、節(jié)點負責(zé)區(qū)間變化;所述路由表哈希值為節(jié)點中完整的路由表哈希值或節(jié)點中各路由表分段的哈希值。本發(fā)明中,當(dāng)節(jié)點確定有新節(jié)點加入或有節(jié)點退出疊加網(wǎng)時,所述節(jié)點進行本地路由更新后,會將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點;所述其他節(jié)點根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新,并計算本地更新后路由表的哈希值,確定與自身所接收到的路由表哈希值不一致時,所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間進行路由表交換;所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點分別根據(jù)所獲取的路由表信息與本地存儲路由表間的差異對疊加網(wǎng)進行探測,確定需要自身修正路由表時,進行本地路由表修正。這樣,本發(fā)明的技術(shù)方案可以在有節(jié)點進行路由表更新時自動消除節(jié)點間路由表不同步的現(xiàn)象,從而避免了錯誤的路由表擴散,不會導(dǎo)致疊加網(wǎng)路由性能下降;本發(fā)明中僅采用哈希值進行路由表的校驗,當(dāng)發(fā)現(xiàn)校驗值不一致時節(jié)點之間才進行路由表交換,消除路由表不同步現(xiàn)象的開銷較小。
圖1為DHT環(huán)的示意圖;圖2為節(jié)點加入疊加網(wǎng)的流程圖;圖3為兩個節(jié)點在相近時間加入疊加網(wǎng)的流程圖;圖4為本發(fā)明實施例中節(jié)點進行路由更新并進行路由表校驗及修正的第一流程圖;圖5為本發(fā)明實施例中節(jié)點進行路由更新并進行路由表校驗及修正的第二流程圖;圖6為本發(fā)明實施例中節(jié)點進行路由更新并進行路由表校驗及修正的第三流程圖;圖7為本發(fā)明實施例中節(jié)點進行路由更新并進行路由表校驗及修正的第四流程圖;圖8為本發(fā)明實施例疊加網(wǎng)節(jié)點的一種組成結(jié)構(gòu)示意圖9為本發(fā)明實施例疊加網(wǎng)節(jié)點的另一種組成結(jié)構(gòu)示意圖。
具體實施例方式本發(fā)明的基本思想為:當(dāng)節(jié)點確定有新節(jié)點加入或有節(jié)點退出疊加網(wǎng)時,所述節(jié)點進行本地路由更新后,會將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點;所述其他節(jié)點根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新,并計算本地更新后路由表的哈希值,確定與自身所接收到的路由表哈希值不一致時,所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間進行路由表交換;所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點分別根據(jù)所獲取的路由表信息與本地存儲路由表間的差異對疊加網(wǎng)進行探測,確定需要自身修正路由表時,進行本地路由表修正。為使本發(fā)明的目的,技術(shù)方案和優(yōu)點更加清楚明白,以下舉實施例并參照附圖,對本發(fā)明進一步詳細說明。圖4為本發(fā)明實施例中節(jié)點進行路由更新并進行路由表校驗及修正的第一流程圖。疊加網(wǎng)采用類似Chord算法的資源負責(zé)分布形式,即各節(jié)點負責(zé)本節(jié)點標(biāo)識與前趨節(jié)點標(biāo)識之間的哈??臻g。本示例中,假設(shè)節(jié)點D保存的路由表信息不完整,其不知曉節(jié)點C的存在;節(jié)點D的負責(zé)節(jié)點為節(jié)點B。如圖4所示,本示例的節(jié)點進行路由更新并進行路由表校驗及修正的流程具體包括以下步驟:步驟401,節(jié)點B收到節(jié)點X退出疊加網(wǎng)請求消息,或通過連通性檢測發(fā)現(xiàn)節(jié)點X已失效,其需要將節(jié)點X已失效的信息廣播到整個疊加網(wǎng);步驟402,節(jié)點B向節(jié)點D發(fā)送路由更新請求消息,其中含有節(jié)點X離開的信息及更新后完整路由表的哈希值;步驟403,節(jié)點D根據(jù)請求更新路由表,計算更新后完整路由表的哈希值,向節(jié)點B發(fā)送路由表更新響應(yīng)消息,并包含上述計算所得哈希值;步驟404,節(jié)點B比較接收到的響應(yīng)消息中的哈希值與本地存儲計算值,發(fā)現(xiàn)二者不符;步驟405,節(jié)點B向節(jié)點D發(fā)送完整路由表,并請求節(jié)點D返回完整路由表;步驟406,節(jié)點D向節(jié)點B發(fā)送完整路由表;步驟407,節(jié)點B對比接收到的和本地存儲的路由表,發(fā)現(xiàn)接收到的路由表中缺少節(jié)點C ;步驟408,節(jié)點B向節(jié)點C發(fā)送連通性探測請求;步驟409,節(jié)點C向節(jié)點B發(fā)送連通性探測響應(yīng)消息,節(jié)點B確認節(jié)點C在網(wǎng),無需修正本地路由表;步驟410,節(jié)點D對比接收到的路由表和本地存儲的路由表,發(fā)現(xiàn)接收到的路由表中多出節(jié)點C ;步驟411,節(jié)點D向節(jié)點C發(fā)送連通性探測請求消息;步驟412,節(jié)點C向節(jié)點D發(fā)送連通性探測響應(yīng)消息;步驟413,節(jié)點D確認節(jié)點C在網(wǎng),對本地路由表進行修正。圖5為本發(fā)明實施例中節(jié)點進行路由更新并進行路由表校驗及修正的第二流程圖。本示例中,疊加網(wǎng)采用基于分割的負載均衡算法、哈??臻g等分為若干分割,各節(jié)點負責(zé)與自身能力相符的分割數(shù)目。本示例中,假設(shè)節(jié)點D保存關(guān)于節(jié)點C的負責(zé)區(qū)間情況與當(dāng)前網(wǎng)絡(luò)情況不同步。節(jié)點D為節(jié)點Y的負責(zé)節(jié)點,疊加網(wǎng)中還包括節(jié)點B。如圖5所示,本示例的節(jié)點進行路由更新并進行路由表校驗及修正的流程具體包括以下步驟:步驟501,節(jié)點D為節(jié)點Y加入疊加網(wǎng)的負責(zé)節(jié)點,且向節(jié)點Y的數(shù)據(jù)遷移過程已完成,其需要將該負責(zé)區(qū)間變化消息廣播到整個疊加網(wǎng);步驟502,節(jié)點D向節(jié)點B發(fā)送路由更新請求消息,該路由更新請求消息中包含有節(jié)點Y負責(zé)區(qū)間變化的信息及更新后完整路由表的哈希值;步驟503,節(jié)點B根據(jù)路由更新請求消息更新路由表,計算更新后完整路由表的哈希值,向節(jié)點D發(fā)送路由表更新響應(yīng)消息,并包含上述計算所得哈希值;步驟504,節(jié)點D比較接收到響應(yīng)中的哈希值與本地存儲計算值,發(fā)現(xiàn)二者不符;步驟505,節(jié)點D向節(jié)點B發(fā)送完整路由表,并請求節(jié)點B返回完整路由表;步驟506,節(jié)點B向節(jié)點D發(fā)送完整路由表;步驟507,節(jié)點B對比接收到的和本地存儲的路由表,發(fā)現(xiàn)接收到的路由表中C負責(zé)區(qū)間與本地記錄不符;步驟508,節(jié)點B向節(jié)點C發(fā)送負責(zé)區(qū)間探測請求消息;步驟509,節(jié)點C向節(jié)點B發(fā)送負責(zé)區(qū)間探測響應(yīng)消息,該負責(zé)區(qū)間探測響應(yīng)消息中包含本節(jié)點負責(zé)區(qū)間的情況,節(jié)點B確認本地存儲路由表關(guān)于節(jié)點C負責(zé)區(qū)間的記錄正確,無需修正路由表;步驟510,節(jié)點D對比接收到的和本地存儲的路由表,發(fā)現(xiàn)收到的路由表中C負責(zé)區(qū)間與本地記錄不符;步驟511,節(jié)點D向節(jié)點C發(fā)送負責(zé)區(qū)間探測請求消息;步驟512,節(jié)點C向節(jié)點D發(fā)送負責(zé)區(qū)間探測響應(yīng)消息,該負責(zé)區(qū)間探測響應(yīng)消息中包含本節(jié)點負責(zé)區(qū)間情況;步驟513,節(jié)點D確認本地關(guān)于節(jié)點C負責(zé)區(qū)間記錄有誤,對路由表進行修正。為加快路由表差異的發(fā)現(xiàn),減小節(jié)點間交換路由表的開銷,可對路由表進行分段,在路由更新請求及響應(yīng)消息中附帶各分段的哈希值。路由表的分段應(yīng)按約定進行,以保證對相同的路由表計算將得到相同的分段哈希值用于校驗。圖6為本發(fā)明實施例中節(jié)點進行路由更新并進行路由表校驗及修正的第三流程圖。疊加網(wǎng)采用類似Chord算法的資源負責(zé)區(qū)間分布形式,即各節(jié)點負責(zé)本節(jié)點標(biāo)識與前趨節(jié)點標(biāo)識之間的哈希空間。本示例中,節(jié)點M所保存的路由表信息不完整,其不知曉節(jié)點P已離開疊加網(wǎng),疊加網(wǎng)中還包括節(jié)點N。如圖6所示,本示例的節(jié)點進行路由更新并進行路由表校驗及修正的流程具體包括以下步驟:步驟601,節(jié)點M遇有需廣播路由表更新的情形;步驟602,節(jié)點M向節(jié)點N發(fā)送路由表更新請求消息,該路由表更新請求消息中含有關(guān)于疊加網(wǎng)調(diào)整情況的信息及各路由表分段的哈希值;步驟603,節(jié)點N根據(jù)以上請求更新路由表,并計算更新后各路由表分段的哈希值,向節(jié)點M發(fā)送路由表更新響應(yīng)消息,該路由表更新響應(yīng)消息中包含上述所計算的哈希值;步驟604,節(jié)點M比較接收到響應(yīng)消息中的哈希值與本地存儲計算值,發(fā)現(xiàn)某段哈希值不符;
步驟605,節(jié)點M向節(jié)點N發(fā)送哈希值不符部分的路由表,并請求節(jié)點N返回該段路由表;步驟606,節(jié)點N向節(jié)點M發(fā)送哈希值不符部分的路由表;步驟607,節(jié)點N對比接收到的和本地存儲的路由表,發(fā)現(xiàn)接收到的路由表中缺少節(jié)點P ;步驟608,節(jié)點N向節(jié)點P發(fā)送連通性探測請求消息;步驟609,節(jié)點M對比接收到的路由表和本地存儲的路由表,發(fā)現(xiàn)接收到的路由表中多出節(jié)點P ;步驟610,節(jié)點M向節(jié)點P發(fā)送連通性探測請求消息;步驟611,節(jié)點N請求定時器到時未接收到節(jié)點P的探測響應(yīng)消息,探測請求超時,確認節(jié)點P已失效,無需修正路由表;步驟612,節(jié)點M請求定時器到時未接收到節(jié)點P的探測響應(yīng)消息,探測請求超時,確認節(jié)點P已失效,對路由表進行修正。為避免單點過載等情況,節(jié)點發(fā)現(xiàn)路由更新請求及響應(yīng)消息中所含哈希值不符后,可并不立即交換路由表,而是將相應(yīng)的計數(shù)器加1,待計數(shù)器達到設(shè)定閾值后,再與其它節(jié)點進行路由表交換并進一步處理。本示例中,疊加網(wǎng)中包括節(jié)點Q、節(jié)點M和節(jié)點N。圖7為本發(fā)明實施例中節(jié)點進行路由更新并進行路由表校驗及修正的第四流程圖,如圖7所示,本示例的節(jié)點進行路由更新并進行路由表校驗及修正的流程具體包括以下步驟:步驟701,節(jié)點Q遇有需更新路由表的情形;步驟702,節(jié)點Q向節(jié)點M發(fā)送路由更新請求消息,并附帶路由表分段哈希值;步驟703,節(jié)點M按路由更新請求消息對路由表進行更新,計算更新后路由表的哈希值,向節(jié)點Q發(fā)送路由更新響應(yīng)消息,并附帶上述計算所得哈希值;步驟704,節(jié)點M發(fā)現(xiàn)路由表某段哈希值與本地記錄不符,將該段計數(shù)器值加1,并將計數(shù)器結(jié)果與設(shè)定閾值比較,未達到設(shè)定閾值;疊加網(wǎng)繼續(xù)運行一段時間;步驟705,節(jié)點M遇有需要更新路由表的情形;步驟706,節(jié)點M向節(jié)點N發(fā)送路由更新請求消息,并附帶路由表分段哈希值;步驟707,節(jié)點N按路由更新請求消息對路由表進行更新,計算更新后路由表的哈希值,向節(jié)點M發(fā)送路由更新響應(yīng)消息,并附帶上述哈希值;步驟708,節(jié)點M發(fā)現(xiàn)路由表某段哈希值與本地記錄不符,將該段計數(shù)器值加1,并將計數(shù)器結(jié)果與設(shè)定閾值比較,未達到設(shè)定閾值;步驟709,節(jié)點M向節(jié)點P發(fā)送路由更新請求消息,并附帶路由表分段哈希值;步驟710,節(jié)點P按路由更新請求消息對路由表進行更新,計算更新后路由表的哈希值,向節(jié)點M發(fā)送路由更新響應(yīng)消息,并附帶上述哈希值;步驟711,節(jié)點M發(fā)現(xiàn)路由表某段哈希值與本地記錄不符,將該段計數(shù)器值加1,并將計數(shù)器結(jié)果與設(shè)定閾值比較,未達到設(shè)定閾值;疊加網(wǎng)繼續(xù)運行一段時間;步驟712,節(jié)點M在與某節(jié)點進行路由更新請求/響應(yīng)消息交互后,某段計數(shù)器值加I后達到設(shè)定閾值。節(jié)點M與該節(jié)點交換該段路由表,對差異所在進行探測,并進行相應(yīng)處理,重置該段計數(shù)器為O。圖8為本發(fā)明實施例疊加網(wǎng)節(jié)點的一種組成結(jié)構(gòu)示意圖,如圖8所示,本示例的疊加網(wǎng)節(jié)點包括檢測單元80、更新單元81和通知單元82 ;其中:檢測單元80,用于檢測所述疊加網(wǎng)是否發(fā)生調(diào)整,發(fā)生時觸發(fā)更新單元81 ;更新單元81,用于進行路由表更新;通知單元82,用于將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點。在圖8所示疊加網(wǎng)節(jié)點的基礎(chǔ)上,本示例的疊加網(wǎng)節(jié)點還包括交換單元(圖8中未圖示)和修正單元(圖8中未圖示),其中:交換單元,用于與所述其他節(jié)點進行路由表交換;修正單元,用于根據(jù)從所述其他節(jié)點獲取的路由表對比出與所述節(jié)點自身路由表之間的差異,對導(dǎo)致路由表差異的節(jié)點進行探測,在確定需要所述節(jié)點自身修正路由表時,進行本地路由表修正。所述疊加網(wǎng)發(fā)生調(diào)整,為:新節(jié)點加入所述疊加網(wǎng)和/或有節(jié)點退出所述疊加網(wǎng);上述觸發(fā)路由表更新原因信息包括以下信息的至少一種:新節(jié)點加入所述疊加網(wǎng)、節(jié)點退出所述疊加網(wǎng)、節(jié)點負責(zé)區(qū)間變化。上述路由表哈希值為節(jié)點中完整的路由表哈希值或節(jié)點中各路由表分段的哈希值。圖9為本發(fā)明實施例疊加網(wǎng)節(jié)點的另一種組成結(jié)構(gòu)示意圖,如圖9所示,本示例的疊加網(wǎng)節(jié)點包括接收單元90、更新單元91、計算單元92和確定單元93 ;其中:接收單元90,用于接收其他節(jié)點發(fā)送的觸發(fā)路由表更新原因信息及更新后路由表哈希值;更新單元91,用于根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新;計算單元92,用于計算所述節(jié)點本地更新后路由表的哈希值;確定單元93,用于確定所計算哈希值是否與所接收到的路由表哈希值一致。在圖9所示疊加網(wǎng)節(jié)點的基礎(chǔ)上,本示例的疊加網(wǎng)節(jié)點還包括交換單元(圖9中未圖示)和修正單元(圖9中未圖示),其中:交換單元,用于與所述其他節(jié)點進行路由表交換;修正單元,用于根據(jù)從所述其他節(jié)點獲取的路由表對比出與所述節(jié)點自身路由表之間的差異,對導(dǎo)致路由表差異的節(jié)點進行探測,在確定需要所述節(jié)點自身修正路由表時,進行本地路由表修正。所述疊加網(wǎng)發(fā)生調(diào)整,為:新節(jié)點加入所述疊加網(wǎng)和/或有節(jié)點退出所述疊加網(wǎng)。上述觸發(fā)路由表更新原因信息包括以下信息的至少一種:新節(jié)點加入所述疊加網(wǎng)、節(jié)點退出所述疊加網(wǎng)、節(jié)點負責(zé)區(qū)間變化。上述路由表哈希值為節(jié)點中完整的路由表哈希值或節(jié)點中各路由表分段的哈希值。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,圖8及圖9中所示的疊加網(wǎng)節(jié)點中的各處理單元的實現(xiàn)功能可參照前述圖4至圖7的分布式哈希表路由表更新方法的相關(guān)描述而理解。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,圖8及圖9所示的疊加網(wǎng)節(jié)點中各處理單元的功能可通過運行于處理器上的程序而實現(xiàn),也可通過具體的邏輯電路而實現(xiàn)。以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。
權(quán)利要求
1.一種分布式哈希表路由表更新方法,其特征在于,所述方法包括: 疊加網(wǎng)中節(jié)點檢測到所述疊加網(wǎng)發(fā)生調(diào)整時,進行路由表更新,并將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點之后,所述方法還包括: 所述其他節(jié)點根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新,并計算本地更新后路由表的哈希值,確定所計算哈希值與所接收到的路由表哈希值不一致時,與發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間進行路由表交換; 所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點根據(jù)所交換的路由表確定是否需要修正本地路由表,需要時進行路由表修正。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點根據(jù)所交換的路由表確定是否需要修正本地路由表,需要時進行路由表修正,為: 所述其他節(jié)點以及所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點分別根據(jù)從對方獲取的路由表對比出與自身路由表之間的差異,對導(dǎo)致路由表差異的節(jié)點進行探測,根據(jù)探測結(jié)果在確定需要自身修正路由表時,進行本地路由表修正。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述疊加網(wǎng)發(fā)生調(diào)整,為:新節(jié)點加入所述疊加網(wǎng)和/或有節(jié)點退出所述疊加網(wǎng)。
5.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述觸發(fā)路由表更新原因信息包括以下信息的至少一種: 新節(jié)點加入所述疊加網(wǎng) 、節(jié)點退出所述疊加網(wǎng)、節(jié)點負責(zé)區(qū)間變化; 所述路由表哈希值為節(jié)點中完整的路由表哈希值或節(jié)點中各路由表分段的哈希值。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述方法還包括: 為路由表或路由表分段設(shè)置計數(shù)器; 所述其他節(jié)點確定所計算哈希值與所接收到的路由表或路由表分段哈希值不一致時,將所述計數(shù)器加一;確定所述計數(shù)器的計數(shù)值達到設(shè)定閾值時,與所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間進行路由表交換。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述路由表哈希值為節(jié)點中各路由表分段的哈希值時,所述方法還包括: 所述其他節(jié)點根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新,確定更新后某路由表分段的哈希值與所接收的某路由表分段的哈希值不一致時,與所述發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間僅進行不一致的路由表分段交換。
8.一種疊加網(wǎng)節(jié)點,其特征在于,所述節(jié)點包括檢測單元、更新單元和通知單元;其中: 檢測單元,用于檢測所述疊加網(wǎng)是否發(fā)生調(diào)整,發(fā)生時觸發(fā)更新單元; 更新單元,用于進行路由表更新; 通知單元,用于將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知所述疊加網(wǎng)的其他節(jié)點。
9.根據(jù)權(quán)利要求8所述的節(jié)點,其特征在于,所述節(jié)點還包括交換單元和修正單元,其中: 交換單元,用于與所述其他節(jié)點進行路由表交換; 修正單元,用于根據(jù)從所述其他節(jié)點獲取的路由表對比出與所述節(jié)點自身路由表之間的差異,對導(dǎo)致路由表差異的節(jié)點進行探測,在確定需要所述節(jié)點自身修正路由表時,進行本地路由表修正。
10.根據(jù)權(quán)利要求8或9所述的節(jié)點,其特征在于,所述疊加網(wǎng)發(fā)生調(diào)整,為:新節(jié)點加入所述疊加網(wǎng)和/或有節(jié)點退出所述疊加網(wǎng); 所述觸發(fā)路由表更新原因信息包括以下信息的至少一種: 新節(jié)點加入所述疊加網(wǎng)、節(jié)點退出所述疊加網(wǎng)、節(jié)點負責(zé)區(qū)間變化; 所述路由表哈希值為節(jié)點中完整的路由表哈希值或節(jié)點中各路由表分段的哈希值。
11.一種疊加網(wǎng)節(jié)點,其特征在于,所述節(jié)點包括接收單元、更新單元、計算單元和確定單元;其中: 接收單元,用于接收其他節(jié)點發(fā)送的觸發(fā)路由表更新原因信息及更新后路由表哈希值; 更新單元,用于根據(jù)所述觸發(fā)路由表更新原因信息進行本地路由表更新; 計算單元,用于計算所述節(jié)點本地更新后路由表的哈希值; 確定單元,用于確定 所計算哈希值是否與所接收到的路由表哈希值一致。
12.根據(jù)權(quán)利要求11所述的節(jié)點,其特征在于,所述節(jié)點還包括交換單元和修正單元,其中: 所述確定單元確定所計算哈希值與所接收到的路由表哈希值不一致時,觸發(fā)交換單元; 交換單元,用于與所述其他節(jié)點進行路由表交換; 修正單元,用于根據(jù)從所述其他節(jié)點獲取的路由表對比出與所述節(jié)點自身路由表之間的差異,對導(dǎo)致路由表差異的節(jié)點進行探測,在確定需要所述節(jié)點自身修正路由表時,進行本地路由表修正。
13.根據(jù)權(quán)利要求11或12所述的節(jié)點,其特征在于,所述觸發(fā)路由表更新原因信息包括以下信息的至少一種: 新節(jié)點加入所述疊加網(wǎng)、節(jié)點退出所述疊加網(wǎng)、節(jié)點負責(zé)區(qū)間變化; 所述路由表哈希值為節(jié)點中完整的路由表哈希值或節(jié)點中各路由表分段的哈希值。
全文摘要
本發(fā)明公開了一種分布式哈希表路由表更新方法及節(jié)點,其中,所述方法包括疊加網(wǎng)中節(jié)點檢測到疊加網(wǎng)發(fā)生調(diào)整時,進行路由表更新,并將觸發(fā)路由表更新原因信息及更新后路由表哈希值通知疊加網(wǎng)的其他節(jié)點;其他節(jié)點根據(jù)觸發(fā)路由表更新原因信息進行本地路由表更新,并計算本地更新后路由表的哈希值,確定所計算哈希值與所接收到的路由表哈希值不一致時,與發(fā)送觸發(fā)路由表更新原因信息的節(jié)點之間進行路由表交換;其他節(jié)點以及發(fā)送觸發(fā)路由表更新原因信息的節(jié)點對比所交換的路由表間的差異,對疊加網(wǎng)差異處進行探測,在確定需要修正本地路由表時,進行路由表修正。本發(fā)明能自動消除節(jié)點間路由表不同步的現(xiàn)象,從而避免了錯誤的路由表擴散,不會導(dǎo)致疊加網(wǎng)路由性能下降。
文檔編號H04L12/743GK103139081SQ20111038491
公開日2013年6月5日 申請日期2011年11月28日 優(yōu)先權(quán)日2011年11月28日
發(fā)明者許欣, 陳志峰, 汪軍 申請人:中興通訊股份有限公司