Kademlia
是由 Petar Maymounkov 與 David Mazières 所設計的P2P 重疊網路傳輸協定,以構建分散式的P2P電腦網路。是一種基於異或運算的P2P信息系統。它制定了網路的結構及規範了節點間通訊和交換資訊的方式。
Kademlia 節點間使用傳輸通訊協定 UDP 溝通。Kademlia 節點利用分散式散列表 (DHT) 儲存資料索引。透過現有的區域網路/廣域網( LAN/WAN),建立起一個新的虛擬網路或重疊網路。
一個想要加入網路的節點需要先經過啟動過程。在這個階段,該節點需要知道另一個已經在 Kademlia 網路中註冊的節點的 IP 地址 (通過另一個使用者或儲存的清單取得)。如果啟動中的節點還不是網路的一部分,它便會計算一個尚未指定給其他節點的隨機ID(160比特)編號。這個ID是由節點的對外IP位址跟連線埠號經過SHA-1算法散列之後得到的。這個 ID 會一直使用到離開網路為止。
Kademlia 內的資訊都儲存在稱為“值(value)”的東西內,每個值都連線著一個“鍵(key)”。每一條<鍵,值>對作為Kad網路的基本信息結構被存儲在本地資料庫當中。
連結協定
簡單的說,擁有要分享的檔案網路節點,會先處理檔案的內容,並從內容計算出一組數字(散列),這組數字將會在檔案分享網路中辨識這個檔案。散列與節點 ID 的長度相同。接著會查找幾個 ID 與散列值相近、且節點內有儲存著自己 IP 地址的節點。搜尋的用戶會使用 Kademlia 來搜尋網路上節點ID離自己最近距離的節點來取得檔案的散列值,然後會取得在該節點上的路由清單。 當節點聯入和聯出時,這份存儲在網路上的路由清單也將保持不變。因為內嵌的冗餘存儲算法,路由清單將複製在多個節點上。
在Kad網路中,每個節點只負責處理一小部分搜尋和查找源的工作。分配這些工作的時候,通過我們每個用戶端的唯一的ID和搜尋檔案的Hash值之間的匹配來決定。