我正在編碼一個p2p實現,我想使分散然而,我有一些麻煩,如何在像BT中協議的協議工作DHT。如果沒有追蹤者,客戶如何知道同行在哪裏?同伴是否存儲在實際的torrent文件中?在山洪中DHT是如何工作的?
回答
使用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地址列表的對等方。
一般理論可以在維基百科有關Kademlia的文章中找到。 bittorrent中使用的特定協議規範如下:http://wiki.theory.org/BitTorrentDraftDHTProtocol
Bittorrent和DHT會發生什麼情況,即BitTorrent在開始時使用嵌入在torrent文件中的信息轉到跟蹤器或從一組節點中的一個節點DHT。然後,一旦找到一個節點,它就可以繼續使用DHT來查找其他節點並持續使用,而無需集中跟蹤器來維護它。
原始信息引導DHT的後期使用。
DHT節點具有唯一的標識符,稱爲節點標識。節點ID是從與BitTorrent信息散列相同的160位空間隨機選擇的。通過比較節點ID的路由表來衡量親密度,節點越接近,越詳細,導致最優化使其比使用簡單無符號整數的前輩「Kademlia」更優化:距離(A,B) = | A xor B |較小的值更接近。 XOR。除了不安全之外,其邏輯是有缺陷的。
如果您的客戶端支持DHT,則有8個字節的保留字段,其中包含0x09,後跟2個字節的UDP端口和DHT節點。如果握手成功,上述情況將繼續。
- 1. 如何在Android上運行山洪?
- 2. 如何讓在'高山Linux Docker容器中工作的'man'?
- 3. 洪流如何運作?
- 4. 山魈到Laravel不工作
- 5. 登山不工作 - 笨庫
- 6. 如何更新DHT中的條目
- 7. 如何在山獅
- 8. 從磁鐵鏈接陣列下載多個山洪
- 9. 在jQuery中,this.each()是如何工作的?
- 10. $ angular是如何在angularJs中工作的?
- 11. DHT在P2P系統
- 12. OSX 10.8山獅PEAR/PHPUnit不工作
- 13. 3D。 「手工製作」丘陵山區
- 14. 如何在二郎山19
- 15. 這是'長'如何工作(在Java中)?
- 16. 如何防止洪水
- 17. 如何從洪流跟蹤
- 18. DHT的C++實現
- 19. 。它是如何工作的?
- 20. RegistryPermission是如何工作的?
- 21. SetVaryByCustom是如何工作的?
- 22. readyState是如何工作的?
- 23. weak_ptr是如何工作的?
- 24. Zend_Db_Table_Select是如何工作的?
- 25. Html.fromHtml是如何工作的?
- 26. Pex是如何工作的
- 27. Glide是如何工作的?
- 28. list.append是如何工作的?
- 29. js.erb是如何工作的
- 30. RewriteRule是如何工作的?
它在哪裏得到每個IP的端口號? – 2013-03-03 23:05:30
該端口包含在同行的IP地址中:http://www.bittorrent.org/beps/bep_0005.html#contact-encoding – cce 2013-05-30 04:28:43
密鑰空間的值是否已丟失/過期? – schulwitz 2015-04-16 08:33:19