简单来说,BitTorrent 客户端最初是如何使用 DHT 发现对等点的?

Ste*_* V. 55 bittorrent

我已经阅读了这个超级用户的答案这篇维基百科文章,但两者都太技术性了,我无法真正理解。

我理解跟踪器的想法:客户端连接到一个中央服务器,该服务器维护一个群中的对等点列表。

我也理解对等交换的想法:已经在一个群中的客户互相发送他们对等的完整列表。如果发现新的对等点,则将它们添加到列表中。

我的问题是,DHT 是如何工作的?也就是说,在没有跟踪器或群中至少一个成员的知识的情况下,新客户端如何加入群?

(注意:最好是简单的解释。)

all*_*tic 53

概括

新客户端如何在没有跟踪器或至少一个集群成员的知识的情况下加入集群以与之交换对等点?

你不能。是不可能的。*

* (除非你局域网上的一个节点碰巧已经是 DHT 中的一个节点。在这种情况下,你可以使用广播机制,比如 Avahi,来“发现”这个对等点,并从中引导。但是怎么做他们自己引导?最终,您会遇到需要连接到公共 Internet 的情况。而且公共 Internet 仅支持单播,而不是多播,因此您只能使用预先确定的对等点列表。)


参考

Bittorrent DHT是通过称为Kademlia的协议实现的,这是分布式哈希表理论概念的一个特例。


博览会

使用 Kademlia 协议,当你加入网络时,你会经历一个引导程序,这绝对要求你提前知道至少一个已经参与 DHT 网络的节点的 IP 地址和端口。例如,您连接的跟踪器本身可能是一个 DHT 节点。一旦您连接到一个 DHT 节点,您就可以继续从 DHT 下载信息,该信息为您提供更多节点的连接信息,然后您导航该“图形”结构以获得与越来越多节点的连接,这些节点可以同时提供两者与其他节点的连接以及有效载荷数据(下载的块)。

我认为您粗体显示的实际问题——如何在不知道任何其他成员的情况下加入 Kademlia DHT 网络——是基于错误的假设。

对您问题的粗体的简单回答是,您没有。如果您根本不知道关于可能包含 DHT 元数据的一台主机的任何信息,那么您就会陷入困境——您甚至无法开始。我的意思是,当然,您可以蛮力尝试在公共互联网上发现一个 IP,该 IP 具有恰好广播 DHT 信息的开放端口。但更有可能的是,您的 BT 客户端被硬编码为某些特定的静态 IP 或 DNS,这些 IP 或 DNS 解析为稳定的 DHT 节点,该节点仅提供 DHT 元数据。

基本上,DHT 只是和加入机制一样去中心化,而且因为加入机制相当脆弱(没有办法在整个互联网上“广播”!所以你必须单播到单个预先分配的主机才能获得 DHT数据),Kademlia DHT 并不是真正去中心化的。不是严格意义上的。

想象一下这样的场景:想要停止 P2P 的人出去准备对所有常用的用于引导的稳定 DHT 节点进行攻击。一旦他们发起了攻击,他们就会立即在所有节点上进行攻击。重击; 每一个自举 DHT 节点都一举关闭。怎么办?您不得不连接到集中式跟踪器以从中下载传统的对等点列表。好吧,如果他们也攻击追踪者,那么你真的,真的上一条小溪。换句话说,Kademlia 和整个 BT 网络都受到 Internet 本身局限性的限制,因为只有有限(且相对较少)数量的计算机可以成功攻击或脱机以防止超过 90%的用户连接到网络。

一旦“伪中心化”的自举节点都消失了,DHT 的内部节点(因为 DHT外部没有人知道内部节点而无法自举)就没有用了;他们不能将新节点带入 DHT。因此,随着每个内部节点与 DHT 断开连接,无论是由于人们关闭计算机、重新启动以进行更新等,网络都会崩溃。

当然,为了解决这个问题,有人可以使用预先确定的稳定 DHT 节点或 DNS 地址的新列表部署一个修补过的 BitTorrent 客户端,并向 P2P 社区大声宣传以使用这个新列表。但这将成为一种“打地鼠”的情况,攻击者(节点吞噬者)将自己逐步下载这些列表,并瞄准勇敢的新引导节点,然后也将它们脱机。


Spi*_*iff 22

简短回答:它从 .torrent 文件中获取。

当 BitTorrent 客户端生成一个无跟踪器的 .torrent 文件时(即,当有人准备通过 BitTorrent 共享新内容时),它会添加一个“节点”键(如“键/值对”中的键;就像节标题一样,不是加密密钥)到 .torrent 文件,该文件包含该客户端已知的 K 个最近的 DHT 节点。

http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions

无跟踪器洪流字典没有“宣布”键。相反,无跟踪器的种子有一个“节点”键。此密钥应设置为 torrent 生成客户端的路由表中的 K 个最近节点。或者,可以将密钥设置为已知好的节点,例如由生成种子的人操作的节点。请不要自动将“router.bittorrent.com”添加到种子文件或自动将此节点添加到客户端路由表。

因此,当您向 BitTorrent 客户端提供要下载的无跟踪器 Torrent 的 .torrent 文件时,它会使用 .torrent 文件中“nodes”键的值来查找其前几个 DHT 节点。

  • 这就是为什么许多客户端中的“将新的 torrent 文件与下载 torrent 合并”使死 torrent 变得活跃的原因吗? (4认同)
  • 这是很好的解释性信息。我认为您的回答解释了**当前的 BitTorrent 客户端做什么**来处理我的回答中确定的*理论*限制和问题。希望我们的两个答案都得到支持,因为它们解释了答案的不同方面。 (3认同)
  • @aitchnyu 是的,但是 torrent 文件也可能有其他/不同的跟踪器。 (3认同)
  • 似乎没有 BitTorrent 客户端实际包含节点信息。已经测试了传输、Vuze、Deluge、Mainline 等。 (2认同)