Bittorrent客户端如何初始发现它的同行?

当您的torrent客户端加入群集以共享和收集文件片段时,它是如何知道它的所有同行是什么? 阅读,我们在框架内部的BitTorrent协议的框架。

今天的问答环节由我们感谢SuperUser - Stack Exchange的一个分支,这是一个社区驱动的Q&A网站分组。

问题

超级用户阅读器Steve V.对BitTorrent协议中的分布式哈希表(DHT)系统有一个非常具体的问题:

我已经读过这个超级用户答案这个维基百科文章 ,但两者都太技术,我真的绕到我的头。

我理解一个跟踪器的想法:客户端连接到一个中央服务器,它保持在一个群中的同行列表。

我也理解对等交换的想法:已经在群中的客户端发送他们的对等体的完整列表到彼此。 如果发现新对等项,它们将添加到列表中。

我的问题是,DHT是如何工作的? 也就是说, 新的客户端怎么能加入一个群没有任何跟踪器或群与交流的同龄人至少有一个成员的知识呢?

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

他的问题反过来促使一个关于BitTorrent系统的不同功能的真正详细的答复; 让我们来看看吧。

答案

超级用户贡献者Allquixotic提供了深入的解释:

如果一个新客户端没有跟踪器或者至少有一个成员的知识来交换对等体,那么新客户端如何加入群?

你不能。 是不可能的。*

*(除非你的局域网络上的节点恰好已经在DHT的节点。在这种情况下,你可以使用一个广播机构,如的avahi,“发现”这个同行,并从他们的引导。但如何做他们引导自己?最后,你需要连接到公共互联网,你会打的局面。和公共互联网是仅单播,组播没有,所以你坚持使用同行预先确定的名单。)

参考文献

BitTorrent的DHT经由称为协议实现的Kademlia ,这是一个理论概念的特例分布式哈希表

博览会

随着的Kademlia协议,当你加入网络,你经过一个引导过程,它需要你一定要知道, 在前进的IP地址和端口至少一个节点已经参与了DHT网络。 例如,您连接到的跟踪器本身可以是DHT节点。 一旦连接到一个DHT节点,然后继续从DHT下载信息,DHT为您提供更多节点的连接信息,然后导航该“图”结构以获取到越来越多节点的连接,这些节点可以提供与其他节点的连接,以及有效载荷数据(下载的块)。

我觉得你的实际问题,大胆-即如何加入的Kademlia DHT网络不知道任何其他成员-是基于一个错误的假设。

答案很简单,加粗你的问题是, 你不知道 如果你根本不知道任何关于甚至可能包含DHT元数据的主机的任何信息,你就被卡住 - 你甚至不能开始。 我的意思是,当然,你可以暴力尝试发现一个IP在公共互联网上有一个开放的端口,发生在广播DHT信息。 但是更有可能的是,你的BT客户端是硬编码到一些特定的静态IP或DNS解析到一个稳定的DHT节点,只提供DHT元数据。

基本上,DHT仅作为分散的作为连接机制,而且由于连接机理是相当脆(有没有办法“广播”在整个互联网!所以你要单播到一个单独的预先分配的主机,以获得DHT数据),DHT的Kademlia是不是真的下放。 不是在最严格的意义上。

想象一下这样的场景:谁愿意P2P停止有人出去,并准备它们用于引导所有常用的稳定DHT节点上的攻击。 一旦他们上演他们的进攻,他们春天的所有节点上的一次。 威猛 ; 每一个引导DHT节点都在一个下降。 怎么办? 你坚持连接到集中跟踪下载不同于同龄人的传统名单。 好吧,如果他们攻击的跟踪过,那么你真的, 真的了一条小溪。 换句话说,Kademlia和整个BT网络受互联网本身的限制约束,因为有一个有限(和相对较小)的计算机数量,你必须成功攻击或脱机,以防止> 90%的用户连接到网络。

一旦“假集中”引导节点都走了,DHT的内部节点,这是不自举,因为在DHT外没有人知道内部节点 ,是无用的; 他们不能带来新的节点到DHT。 因此,随着每个内部节点随着时间的推移从DHT断开连接,由于人们关闭他们的计算机,重新启动更新等,网络将崩溃。

当然,为了解决这个问题,有人可以使用预定的稳定DHT节点或DNS地址的新列表来部署修补的BitTorrent客户端,并且大声地向P2P社区做广告以使用这个新列表。 但是,这将成为一个“一个鼹鼠”的情况,其中攻击者(节点用户)将逐渐下载这些列表自己,并针对勇敢的新引导节点,然后使他们离线。

我们不仅学习了原始问题的答案,而且我们还了解了BitTorrent系统的性质及其漏洞。


有什么东西添加到解释? 声音在评论中。 想要阅读更多的技术精明的Stack Exchange用户的答案? 这里查看完整的话题

赞 (0)
分享到:更多 ()