种子中的DHT如何工作?


79

我正在编码一个我想使其分散的p2p实现,但是在掌握像bittorrent这样的协议中DHT的工作方式时遇到了一些麻烦。如果没有跟踪器,客户端如何知道对等方在哪里?同行是否存储在实际的torrent文件中?

Answers:


73

对于无跟踪器/ DHT种子,对等IP地址使用BitTorrent infohash作为密钥存储在DHT中。由于基本上所有的跟踪器都响应放置/获取请求,因此此功能与DHT(分布式哈希表)提供的接口完全对应:它允许您通过infohash查找并在DHT中存储IP地址。

因此,“获取”请求将查找BT infohash并返回一组IP地址。“ put”存储给定信息哈希的IP地址。这对应于您向跟踪器发出的“通告”请求,以接收对等IP地址的字典。

在DHT中,对等点被随机分配以存储属于键空间的一小部分的值;散列确保密钥在参与对等方之间随机分布。DHT协议(BitTorrent的Kademlia)可确保将放置/获取请求有效地路由到负责维护给定密钥IP地址列表的对等方。


2
它从哪里获得每个IP的端口号?
Janus Troelsen

2
该端口以及对等方的IP地址都包括在内:bittorrent.org/beps/bep_0005.html#contact-encoding
cce

2
密钥空间的值是否丢失/过期?
schulwitz 2015年

3
是的,值可能会因过期(TTL)或搅动而丢失(随着同位体的来来去去,如果没有足够的副本空间来存储这些值,它们可能会占用部分键空间)。因此,要长期保留一个值,就需要不断发出PUT请求。由于在BitTorrent群中,同伴不断加入和离开,因此这不再是问题,长寿的同伴可以定期向DHT通告自己。
cce 2015年

3
如果将您的评论纳入其中,您的答案会更好。
ctrl-alt-delor

18

可以在维基百科关于Kademlia的文章中找到一般理论。bittorrent中使用的特定协议规范在此处:http ://wiki.theory.org/BitTorrentDraftDHTProtocol


12

bittorrent和DHT发生的事情是,bittorrent在开始时使用嵌入在torrent文件中的信息进入DHT的跟踪器或一组节点之一。然后,一旦找到一个节点,它就可以继续寻找其他节点并继续使用DHT,而无需集中跟踪器进行维护。

原始信息引导了DHT的后续使用。


1

DHT节点具有唯一的标识符,称为节点ID。节点ID是从与BitTorrent信息哈希相同的160位空间中随机选择的。紧密度是通过比较Node ID的路由表来衡量的,Node越近,越详细,从而获得最佳

然后,使它们比使用简单的无符号整数的前身“ Kademlia”更好的是:distance(A,B)= | A xor B | 较小的值更接近。XOR。除了不安全之外,其逻辑也有缺陷。

如果您的客户端支持DHT,则保留8个字节,其中包含0x09,后跟2个字节的UDP端口和DHT节点负载。如果握手成功,上述操作将继续。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.