Networking P2P应用中的自动发现

Networking P2P应用中的自动发现,networking,language-agnostic,p2p,autodiscovery,Networking,Language Agnostic,P2p,Autodiscovery,我想在互联网上创建一个P2P应用程序。什么是最好的方法?或者如果没有,还有一种足够好的方法可以自动发现分散网络中的其他节点?这是P2P的圣杯。实际上,没有一个神奇的解决方案——如果没有一个好的已知点作为参考点,一个节点不可能发现其他节点(好吧,你可以通过广播在局域网上这样做,但不能在互联网上这样做)。P2P文件共享往往通过让已知的网站分发发现的“起点”来工作,然后进一步的发现(我预计)可以通过询问节点他们知道的其他节点来实现 一个开始研究的好地方是 至于安全性,我想,这个话题会出现在文献中的某个

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

这是P2P的圣杯。实际上,没有一个神奇的解决方案——如果没有一个好的已知点作为参考点,一个节点不可能发现其他节点(好吧,你可以通过广播在局域网上这样做,但不能在互联网上这样做)。P2P文件共享往往通过让已知的网站分发发现的“起点”来工作,然后进一步的发现(我预计)可以通过询问节点他们知道的其他节点来实现

一个开始研究的好地方是

至于安全性,我想,这个话题会出现在文献中的某个地方,我会再次推荐维基百科。如果你不能联系IP/端口,不要把它放在你的列表中,如果一个节点定期提供不存在的指针,那么就考虑对它进行优先级排序或者将它完全从列表中删除。 对于邪恶节点,这取决于您的用例,但假设您正在进行文件共享。如果请求文件的某个部分,请与多个节点一起检查该文件部分的散列应该是什么,然后按散列请求。如果邪恶节点给您一个具有不同散列的块,那么您可以再次取消优先级或忘记该节点


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

好的,两个对等方要找到对方,他们都必须知道一个公共的(比如说)中介来交换IP一次。你们可以使用任何东西来进行这种第一次握手,同时能够从那个“通道”读写。i、 e:DNS(您的知名域名)、电子邮件、IRC、Twitter、Facebook、dropbox等。

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

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

在论文中,他们提出了一种方法,将Gnutella和E2DK网络所需的连接尝试分别减少到817次和51次


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

Btw,有趣的是,你会发现这个问题很可能会以“过于散漫”而结束。浏览相关侧边栏(
-->
)中的问题,并下载一些开源资料,看看他们是如何做到这一点的。Java有JXTA,但我听说它已经被抛弃了一段时间,而且非常复杂——可能仍然值得一看,如果你不介意深入研究一些复杂的东西。JXTA看起来很有趣。安全性如何?如果节点告诉我关于邪恶节点或不存在的节点怎么办?有很多库来实现这种发现吗?老实说,我真的不知道。我引用的WP文章中引用了大量的库,因此它们将是一个很好的起点。这实际上是可行的。然后,一旦一个节点发现另一个节点,它们就会交换他们认识的其他节点。发现的节点存储在永久性存储中,以备将来使用。我想IPv6会成为一个问题。我应该认为,强行使用任何地址空间都会开始损害它所生存的网络,这与它的成功率成正比:一个非常流行的P2P客户端会造成大量的流量浪费。