种子中的DHT是什么意思?

112
我正在编写一个P2P实现,希望使其去中心化。但是,我在理解像BitTorrent这样的协议中DHT如何工作方面遇到了一些困难。
如果没有tracker,客户端如何知道对等方在哪里? 对等方是否存储在实际的种子文件中?
4个回答

99

在无追踪/DHT种子中,点对点的IP地址使用BitTorrent infohash作为密钥存储在DHT中。 因为追踪器唯一做的基本上就是响应put/get请求,所以这个功能完全对应了DHT(分布式哈希表)提供的接口:它允许您通过infohash在DHT中查找和存储IP地址。

因此,“get”请求将查找BT infohash并返回一组IP地址。“put”存储给定infohash的IP地址。这对应于您否则会向追踪器发出的“announce”请求,以接收对等方IP地址字典。

在DHT中,对等方被随机分配存储属于密钥空间小部分的值;哈希确保密钥在参与对等方之间随机分布。 DHT协议(用于BitTorrent的Kademlia)确保将put/get请求有效地路由到负责维护给定密钥的IP地址列表的对等方。


3
它从哪里获取每个IP的端口号? - Janus Troelsen
3
端口号和对等方的IP地址一起被包含在其中:http://www.bittorrent.org/beps/bep_0005.html#contact-encoding - cce
3
密钥空间中的键值是否会丢失或过期? - schulwitz
5
是的,由于过期时间(TTLs)或者变动性(当节点加入和离开时,如果没有足够的副本,它们可能会带走部分keyspace中的值),数据可能会丢失。因此,若要将数据持续存储较长时间,就需要持续发出PUT请求。由于在BitTorrent种子网络中,节点不断地加入和离开,这个问题就不那么严重了,而且长寿命节点可以定期向DHT重新注册自己。 - cce
3
如果你将你的评论融入回答中,那么你的答案会更好。 - ctrl-alt-delor

27

20
什么是BitTorrent和DHT?
BitTorrent与DHT共同作用的方式是,BitTorrent使用嵌入在种子文件中的信息来访问跟踪器或者DHT节点之一。一旦找到一个节点,就可以继续找到其他节点,并持续使用DHT而无需中心化的跟踪器来进行维护。
这个初始信息启动了后续对DHT的使用。

5
DHT节点有唯一的标识符,称为节点ID。节点ID是从与BitTorrent信息哈希相同的160位空间中随机选择的。通过比较Node ID的路由表来衡量亲密度,越接近的节点,细节越多,结果更优化。
那么,是什么使它们比其前任“Kademlia”更优?"Kademlia"使用简单的无符号整数:distance(A,B) = |A xor B| 较小的值更接近。XOR。除了不安全外,它的逻辑也存在缺陷。
如果您的客户端支持DHT,则保留8字节,其中包含0x09,后跟带有UDP端口和DHT节点的2字节有效负载。如果握手成功,则以上内容将继续。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接