kademlia(簡稱kad)屬於一種典型的結構化p2p覆蓋網路(structured p2p overlaynetwork),以分布式的應用層全網方式來進行資訊的儲存和檢索是其嘗試解決的主要問題。在kademlia網路中,所有資訊均以的雜湊表條目形式加以儲存,這些條目被分散地儲存在各個節點上,從而以全網方式構成一張巨大的分布式雜湊表。我們可以形象地把這張雜湊大表看成是一本字典:只要知道了資訊索引的key,我們便可以通過kademlia協議來查詢其所對應的value資訊,而不管這個value資訊究竟是儲存在哪乙個節點之上。在emule、bittorrent等p2p檔案交換系統中,kademlia主要充當了檔案資訊檢索協議這一關鍵角色,但kad網路的應用並不僅限於檔案交換。下文的描述將主要圍繞emule中kad網路的設計與實現展開。基於我們對emule的kad網路中兩本字典的理解,利用kad
系統的可靠性,同時具備相當的反拒絕服務攻擊能力;更有意思的是,它能幫助我們有效地抵制fbi的追捕,因為俗話說得好:法不治眾…看到這裡,相信大家都能理解「分布式資訊檢索」所帶來的好處了吧。但是,這些條目究竟是怎樣儲存的呢?我們又該如何通過kad網路來找到它們?不著急,慢慢來。kad網路中的每乙個節點均擁有乙個專屬id,該id的具體形式與sha1雜湊值類似,為乙個長達160bit的整數,它是由節點自己隨機生成的,兩個節點擁有同一id的可能性非常之小,因此可以認為這幾乎是不可能的。在kad網路中,兩個節點之間距離並不是依靠物理距離、路由器跳數來衡量的,事實上,kad網路將任意兩個節點之間的距離d定義為其二者id值的逐位元二進位制和數,即,假定兩個節點的id分別為a與b,則有:d=a xorb。在kad中,每乙個節點都可以根據這一距離概念來判斷其他節點距離自己的「遠近」,當d值大時,節點間距離較遠,而當d值小時,則兩個節點相距很近。這裡的「遠近」和「距離」都只是一種邏輯上的度量描述而已;在kad中,距離這一度量是無方向性的,也就是說a到b的距離恆等於b到a的距離,因為axor b==b xor a在kad網路中,每乙個節點均維護了160個list,其中的每個list均被稱之為乙個k-桶(k-bucket),如下圖所示。在第i個list中,記錄了當前節點已知的與自身距離為2^i~2^(i+1)的一些其他對端節點的網路資訊(nodeid,ip位址,udp埠),每乙個list(k-桶)中最多存放k個對端節點資訊,注意,此處的k與上文所提到的複製係數k含義是一致的;每乙個list中的對端節點資訊均按訪問時間排序,最早訪問的在list頭部,而最近新訪問的則放在list的尾部。
由上可見,設計採用這種多k-bucket
資料結構的初衷主要有二:a. 維護最近-最新見到的節點資訊更新;b.實現快速的節點資訊篩選操作,也就是說,只要知道某個需要查詢的特定目標節點n的id,我們便可以從當前節點的k-buckets結構中迅速地查出距離n最近的若干已知節點。從本質上而言,儲存、搜尋某特定條目的問題實際上就是節點查詢的問題。當需要在kad網路中儲存乙個條目時,可以首先通過節點查詢演算法找到距離key最近的k個節點,然後再通知它們儲存條目即可。而搜尋條目的過程則與節點查詢過程也是基本類似,由搜尋發起方以迭代方式不斷查詢距離key較近的節點,一旦查詢路徑中的任一節點返回了所需查詢的value,整個搜尋的過程就結束。為提高效率,當搜尋成功之後,發起方可以選擇將搜尋到的條目儲存到查詢路徑的多個節點中,作為方便後繼查詢的cache;條目cache的超時時間與節點-key之間的距離呈指數反比關係。當乙個新節點首次試圖加入kad網路時,它必須做三件事,其一,不管通過何種途徑,獲知乙個已經加入kad網路的節點資訊(我們可以稱之為節點i),並將其加入自己的k-buckets;其二,向該節點發起一次針對自己id的節點查詢請求,從而通過節點i獲取一系列與自己距離鄰近的其他節點的資訊;最後,重新整理所有的k-bucket,保證自己所獲得的節點資訊全部都是新鮮的。
eMule中的分布式雜湊表技術 Kademlia
前兩天在網上看到世界知名的電騾伺服器razorback 2被查封 4人被拘禁的訊息,深感當前做emule bittorrent等p2p檔案交換軟體的不易。以分布式雜湊表方式 dht,distributed hash table 來代替集中索引伺服器可以說是目前可以預見到的為數不多的p2p軟體發展趨勢...
eMule中的分布式雜湊表技術 Kademlia
前兩天在網上看到世界知名的電騾伺服器razorback 2被查封 4人被拘禁的訊息,深感當前做emule bittorrent等p2p檔案交換軟體的不易。以分布式雜湊表方式 dht,distributed hash table 來代替集中索引伺服器可以說是目前可以預見到的為數不多的p2p軟體發展趨勢...
分布式雜湊表
我們從淺入深一步一步介紹什麼是分布式雜湊表。1 雜湊函式 雜湊函式是一種計算方法,它可以把乙個值a對映到乙個特定的範圍 begin,end 之內。對於乙個值的集合,雜湊函式把他們均勻的對映到某個範圍之中。這樣,通過這些值就可以很快的找到與之對應的對映位址。對於同乙個值,雜湊函式要能保證對這個值的運算...