BitTorrent 使用 DHT 如何幫助同儕找到目標檔案?

BitTorrent 使用 DHT 如何幫助同儕找到目標檔案?

我讀過 Kademlia 並了解其基本概念。 BitTorrent的基本概念也簡單了解。但如果兩者放在一起就毫無意義了。

根據我在網上找到的信息,目標文件的文件哈希用於生成目標 id 以在 DHT 中查找,然後該查找應該找到接近目標 id 的對等點。好吧,有道理。除了根本不知道之外,具有接近目標 id 的 id 的對等點如何碰巧知道有關播種者或網絡上其他對等點的任何信息?

任何研究相關性的嘗試都會得到相同的解釋,即 DHT 演算法使用其 Kademlianess 來獲得對等點 id 接近目標 id 的對等點,但這並不能回答問題。

答案1

據我了解,「具有目標 ID 的對等點」知道播種者或其他對等點,因為這些對等點也使用完全相同的過程來店鋪有關他們自己在該位置的資訊。具有該 ID 的對等點只是所有其他對等點都同意的位置,用於儲存/檢索與某物或其他相關的資料。


DHT 是一個“分散式雜湊表”,其中“哈希表" 表示儲存 {key⇒value} 所映射的資料結構(也稱為字典、關聯數組、查找表等)。使用雜湊表的程式可以put(鍵,值)哈希表在地址X處儲存{key⇒value}資訊;那麼程式的不同部分可以取得(鍵)哈希表從位址 X 檢索值。

當在程式內部使用典型的哈希表時,它將使用類似的過程在儲存時為給定的查找鍵(哈希)生成記憶體位置,並在需要檢索時執行相同的操作。資料庫、檔案系統、Git 等也在各個層面上做同樣的事情;例如 Git 的 .git/objects/。

DHT 是相同的,只是在網路層級(「分散式」部分)。雖然 BitTorrent 的 DHT 知道一些 BT 特有的東西,但從根本上來說,它仍然只是將 BitTorrent 用戶端需要儲存在約定位置的資料儲存起來。如 Kad 規範所述:

為了儲存 <key, value> 對,參與者找到...

這意味著一般來說,它可以整合到文件共享協定中,如下所示:

  1. 來源節點 S(擁有檔案)計算 ID 並透過 DHT 網路發出「儲存」操作,儲存資訊 {key: fileID ⇒ value:「在節點 S 可用」},該資訊會傳送到最接近的節點 X金鑰(文件ID)。

  2. 然後訊息 {key: fileID ⇒ value: "available at Node S"} 被儲存在節點 X 處。

  3. 另一個對等/客戶端節點 C 了解檔案的 ID,並透過 DHT 網路發出「檢索」操作,該操作從節點 X 檢索「在節點 S 可用」的值。

BitTorrent DHT其實作方式與此範例類似,僅呼叫「儲存」操作announce_peer,且它不會完全覆寫該值,而僅將播音員的資料新增至已儲存的對等點清單。

相關內容