5

我想在互联网上创建一个 P2P 应用程序。什么是最好的,或者如果没有足够好的方法来自动发现分散网络中的其他节点?

4

3 回答 3

8

来自GNUnet项目(一个匿名的抗审查文件共享网络)的Grothoff 和 GauthierDickey研究了在没有任何中央主机列表的情况下引导 p2p 网络的问题。

他们发现,对于 Gnutella (Limewire) 网络,随机 ip 搜索平均需要 2500 次连接尝试才能找到对等点。

在论文中,他们提出了一种方法,可以将 Gnutella 所需的连接尝试次数减少到 817 次,而 E2DK 网络则减少到 51 次。

这是通过为每个 DNS 组织创建 p2p 用户的统计配置文件来实现的,这个小型(大约 100kb)发现数据库必须提前创建并与 p2p 客户端一起提供。

于 2013-04-11T21:15:30.943 回答
4

这是 P2P 的圣杯。真的没有什么神奇的解决方案——如果没有一个众所周知的点作为参考,节点是不可能发现其他节点的(嗯,你可以在局域网上使用广播,但不能在互联网上这样做)。P2P 文件共享往往通过让已知网站分发“起点”来进行发现,然后进一步的发现(我希望)可以来自询问节点他们知道哪些其他节点。

开始研究的一个好地方是分布式哈希表

至于安全性,我认为该主题将出现在文献中的某个地方——我再次推荐维基百科。不存在的会被简单地处理:如果您无法联系 IP/端口,请不要将其保留在列表中,并且如果节点定期提供不存在的指针,请考虑取消优先级或将其从您的完整列出。

对于邪恶节点,这取决于您的用例,但假设您正在进行文件共享。如果您请求文件的一部分,请与多个节点检查文件部分的哈希应该是什么,然后通过哈希请求。如果邪恶节点为您提供了具有不同哈希的块,那么您可以再次取消优先级或忘记该节点。

分布式处理系统的工作方式略有不同:它们倾向于要求几个不相关的节点执行相同的工作,然后使用投票系统(可能再次使用散列)来确定邪恶是否在手。如果某个节点始终提供错误的结果,则会联系管理员或将 IP 从已知节点列表中删除。

于 2013-04-11T19:31:37.593 回答
0

好的,为了让两个对等方找到彼此,他们都必须知道一个共同的,比如说,调解员交换一次 IP。您可以在这种第一次握手中使用任何东西,同时能够从该“通道”进行写入和读取。即:DNS(您的知名域)、电子邮件、IRC、Twitter、Facebook、Dropbox 等。

于 2013-04-11T19:41:43.117 回答