对等分散网络-给所有对等方的消息

sto*_*ker 5 .net c# networking p2p http

我需要创建一个文件共享的对等网络(没有中央服务器)。

我阅读了很多有关该主题的信息。要求是确保网络中的每个对等方都保留其他对等方的完整列表以及网络上所有文件的完整列表。

我知道这不是最好的方法,但是这是一个要求。...(在我看来很奇怪)另一个要求是,对等体之间的通信应使用HTTP协议和JSON序列化实现。

这意味着每个对等方都将充当网络服务器,并且还将有一种方法可以连接到每个其他对等方。

因此,我想知道一种从一个对等方向所有其他对等方传递消息的好方法,而无需让一个对等方直接连接到其他对等方(连接太多)。

我一直在寻找一种以某种方式将消息路由到几个级别的方法,以便使通信量有所分散。据我所知并且可以连接到网络上的任何对等方,我可以在发送消息之前有效地构造一条路由,然后告诉某些对等方重新路由。但是,如何找出最佳路线?如果有一个错误的对等无法重新路由邮件,会发生什么?

编辑:对不起,如果我不清楚。该消息应该由网络上的所有对等方接收,而不仅仅是一个目标。

编辑2:您可以想到我要作为Web服务器网络做的事情。他们应该能够容纳分布式数据(不是问题的一部分),但是每个人都需要知道网络上有哪些可用资源(哈希表)。客户端可以将内容上传到其中一台服务器上(与哪台服务器无关)。发生这种情况时,其他所有人都需要知道此更改以更新其哈希表。如果新服务器加入网络,则同样适用。我的问题是如何在没有单个服务器连接所有其他服务器的情况下传播此消息,这显然会在单个服务器上产生大量流量。

Can*_*ide 2

我看到你的问题分为两个部分:

无中央服务器

如今流行的 p2p 实体是僵尸网络,它们具有 C&C 服务器,并且也使用 HTTP。他们倾向于通过使用某种算法来生成域名来利用 DNS。您需要一些东西来种子/引导该过程,否则 p2p 平台将无法启动。进化可以通过传播来完成,也就是说,对等点可以从中心位置获取初始列表,然后在通过查询其他对等点了解更多信息时建立 DHT(即获得更多响应)。

对于没有中央服务器的 p2p 网络,您可以进行本地网络扫描或使用 Zeroconf 协议的实现,例如SSPD。这里的限制是您不能扩展到本地网络之外。例如,假设您想在 LAN 之外进行多播,您将尝试到达哪些 IP/范围?

向所有同行发送消息

无法保证此操作会成功,因为您不知道在给定时间点哪些对等点处于活动状态,并且没有一个对等点拥有 DHT 的完整副本。泛洪通常是实现此目的的方式。您可以采用查询泛洪策略,但不要期望得到答复。您可以在实际想要返回答案的搜索中使用相同的策略。如果您只想达到过去 5 个级别,您只需包含一个带有哈希/id 的计数器,对等点在传播消息之前递减,并在计数器达到 0 时停止。

这个项目的一大障碍是 NAT。因此,不仅对等方需要了解彼此的外部 IP 和端口。如果您在 LAN 内,这不是什么大问题。