2009-08-26 30 views
53

我正在編碼一個p2p實現,我想使分散然而,我有一些麻煩,如何在像BT中協議的協議工作DHT。如果沒有追蹤者,客戶如何知道同行在哪裏?同伴是否存儲在實際的torrent文件中?在山洪中DHT是如何工作的?

回答

48

使用BitTorrent infohash作爲密鑰,使用無需跟蹤器/ DHT種子的對象的IP地址存儲在DHT中。由於所有跟蹤器基本上都會響應put/get請求,因此該功能與DHT(分佈式散列表)提供的接口完全對應:它允許您通過infohash在DHT中查找和存儲IP地址。

因此,「get」請求會查找BT infohash並返回一組IP地址。 「put」存儲給定infohash的IP地址。這對應於您要跟蹤器接收對等IP地址字典的「通告」請求。

在DHT中,同伴隨機分配用於存儲屬於關鍵空間一小部分的值;哈希確保密鑰隨機分佈在參與的同伴之間。 DHT協議(BitTorrent的Kademlia)可確保put/get請求被有效路由到負責維護給定密鑰的IP地址列表的對等方。

+1

它在哪裏得到每個IP的端口號? – 2013-03-03 23:05:30

+0

該端口包含在同行的IP地址中:http://www.bittorrent.org/beps/bep_0005.html#contact-encoding – cce 2013-05-30 04:28:43

+1

密鑰空間的值是否已丟失/過期? – schulwitz 2015-04-16 08:33:19

10

Bittorrent和DHT會發生什麼情況,即BitTorrent在開始時使用嵌入在torrent文件中的信息轉到跟蹤器或從一組節點中的一個節點DHT。然後,一旦找到一個節點,它就可以繼續使用DHT來查找其他節點並持續使用,而無需集中跟蹤器來維護它。

原始信息引導DHT的後期使用。

0

DHT節點具有唯一的標識符,稱爲節點標識。節點ID是從與BitTorrent信息散列相同的160位空間隨機選擇的。通過比較節點ID的路由表來衡量親密度,節點越接近,越詳細,導致最優化使其比使用簡單無符號整數的前輩「Kademlia」更優化:距離(A,B) = | A xor B |較小的值更接近。 XOR。除了不安全之外,其邏輯是有缺陷的。

如果您的客戶端支持DHT,則有8個字節的保留字段,其中包含0x09,後跟2個字節的UDP端口和DHT節點。如果握手成功,上述情況將繼續。