我正在編碼一個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. 使用山洪備份VHD的
- 3. 什麼用於山洪與Java下載?
- 4. 如何讓在'高山Linux Docker容器中工作的'man'?
- 5. 洪流如何運作?
- 6. 山楂功能cvFindContours工作?
- 7. 登山不工作 - 笨庫
- 8. 山魈到Laravel不工作
- 9. 如何更新DHT中的條目
- 10. 洪水填充GLUT代碼不工作
- 11. 如何在山獅
- 12. 如何從DHT中下載torrent文件?
- 13. 從磁鐵鏈接陣列下載多個山洪
- 14. $ angular是如何在angularJs中工作的?
- 15. 在jQuery中,this.each()是如何工作的?
- 16. 在makefile中,VPATH是如何工作的?
- 17. PHP中的防洪洪水DDoS
- 18. DHT在P2P系統
- 19. 阿帕奇山獅不工作
- 20. FB評論HREF不工作蒙山angularjs
- 21. 山獅沒有工作gdb調試器
- 22. 3D。 「手工製作」丘陵山區
- 23. OSX 10.8山獅PEAR/PHPUnit不工作
- 24. 如何在二郎山19
- 25. 工作目錄是如何工作的?
- 26. 這是'長'如何工作(在Java中)?
- 27. 是否允許在Mainline DHT中的同一個ip:port對後面運行多個不同的DHT節點?
- 28. 如何從洪流跟蹤
- 29. 如何獲得洪水區?
- 30. 如何防止洪水
它在哪裏得到每個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