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

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

我已经读过了这个超级用户的回答这篇维基百科文章但两者都太过技术性,我很难理解。

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

我也理解对等交换的理念:群中的客户端会相互发送其对等的完整列表。如果发现新的对等,则会将其添加到列表中。

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

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

答案1

概括

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

你不能。这是不可能的。*

*(除非你的局域网恰好已经是 DHT 中的一个节点。在这种情况下,您可以使用广播机制(例如 Avahi)来“发现”此对等节点,并从中引导。但是如何他们自己引导?最终,您会遇到需要连接到公共互联网的情况。而公共互联网是单播的,不是多播的,所以您只能使用预先确定的对等点列表。)


参考

Bittorrent DHT通过称为卡德姆利亚,这是理论概念的一个特例分布式哈希表


展览

使用 Kademlia 协议,当你加入网络时,你将经历引导程序,这绝对要求你知道,提前,即已参与 DHT 网络的至少一个节点的 IP 地址和端口。例如,您连接的跟踪器本身可能就是一个 DHT 节点。连接到一个 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 网络受到互联网本身的限制,即您必须成功攻击或使之下线的计算机数量有限(且数量相对较少),才能阻止 90% 以上的用户连接到网络。

一旦“伪集中式”引导节点全部消失,DHT 的内部节点(由于DHT 外部的任何人都不知道内部节点,是无用的;它们无法将新节点带入 DHT。因此,随着每个内部节点随着时间的推移与 DHT 断开连接(无论是由于人们关闭计算机、重新启动进行更新等),网络将崩溃。

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

答案2

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

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

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

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

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

答案3

不行!你必须知道其中一个群组的至少一个 IP,这是 p2p 网络的弱点。你可以盲目广播来查找第一个 IP,但在大型网络中,如果每个人都这样做,就会出现拥塞问题。你可以使用缓存,但只有大型群组才有可能(更大的对等地址缓存)。你总是必须连接跟踪器才能询问第一个 IP。

分散式DHT 意味着客户端不必保存包含共享文件名称的 md5 和的所有列表,以及相应的对等点。哈希列表被分成相等的部分,并在整个群集中以冗余方式分布。如果对等点断开连接,则在某处有另一个具有相同哈希列表部分的对等点。对等点将彼此的地址共享给哈希列表部分的良好持有者。

torrent-freak 就此主题撰写了一篇帖子

答案4

大多数 p2p 网络客户端都是从它们最初连接的种子对等点列表引导的...一旦它们连接到一个引导对等点,它就会以分布式方式下载其余的对等点。它连接到引导对等点并下载其 DHT 对等点列表,然后转到每个对等点并执行相同操作,等等。

例如:

以下是引导节点的列表:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dh​​tspider.js#L10

这里是客户端连接它们来补充对等列表的地方:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dh​​tspider.js#L60

这与跟踪器的工作方式类似,不同之处在于几乎任何人都可以成为引导节点,因此几乎不可能关闭它们。

比特币核心钱包的工作原理相同。如果由于某种原因默认的启动种子对等体被关闭,它允许您更改启动种子对等体。

相关内容