我正在编写一个p2p实现,我想将其分散,但是我在掌握像bittorrent这样的协议中的DHT方面遇到了一些麻烦。如果没有跟踪器,客户如何知道同行在哪里?对等体是否存储在实际的torrent文件中?
答案 0 :(得分:56)
对于无跟踪/ DHT种子,使用BitTorrent infohash作为密钥将对等IP地址存储在DHT中。由于所有跟踪器基本上都响应put / get请求,因此该功能完全对应于DHT(分布式哈希表)提供的接口:它允许您通过infohash在DHT中查找和存储IP地址。 / p>
所以“get”请求会查找BT infohash并返回一组IP地址。 “put”存储给定infohash的IP地址。这对应于您向跟踪器接收对等IP地址字典的“通知”请求。
在DHT中,对等体被随机分配以存储属于密钥空间的一小部分的值;散列确保密钥在参与的对等方之间随机分布。 DHT协议(BitTorrent的Kademlia)确保将put / get请求有效地路由到负责维护给定密钥的IP地址列表的对等体。
答案 1 :(得分:17)
一般理论可以在维基百科关于Kademlia的文章中找到。 bittorrent中使用的特定协议规范如下:http://wiki.theory.org/BitTorrentDraftDHTProtocol
答案 2 :(得分:12)
bittorrent和DHT会发生什么,起初bittorrent使用torrent文件中嵌入的信息转到跟踪器或DHT的一组节点之一。然后,一旦找到一个节点,它就可以继续查找其他节点并使用DHT持久保存,而无需集中跟踪器来维护它。
原始信息引导DHT的后期使用。
答案 3 :(得分:1)
DHT节点具有唯一标识符,称为节点ID。节点ID是从与BitTorrent信息哈希相同的160位空间中随机选择的。通过比较节点ID的路由表来衡量接近度,节点越近,越详细,导致最优
然后什么使它们比它的前任" Kademlia"更优化。它使用简单的无符号整数:距离(A,B)= | A xor B |较小的值更接近。 XOR。除了不安全之外,它的逻辑是有缺陷的。
如果您的客户端支持DHT,则保留8个字节,其中包含0x09,后跟带有UDP端口和DHT节点的2字节有效负载。如果握手成功,上述内容将继续。