2

我知道一个快速的谷歌拥有大量的结果,关于这个主题的文献非常丰富,这正是问题所在。在众多可能的解决方案中,我不确定哪个具体是满足我特定需求的最佳、最新选择。

我正在尝试在互联网上实现一个 p2p 网络,它具有向在线节点广播消息的唯一和一个功能。为了连接到网络,您必须能够指向现有 IP。当你这样做时,你会发现一些对等点并与他们保持积极的联系。然后,您可以将消息发送到每个其他节点。没有直接的沟通,发送的每条消息都会被其他人接收。我希望这个网络尽可能高效,并在 UDP 之上工作。

在此处指定的形状上解决此问题的一些最先进算法的名称是什么?

4

2 回答 2

7

如果您想了解建立分散式 P2P 架构的概念,您可以查看Dat Foundation,它提供了一个用于通过 Internet 共享 P2P 数据的模块生态系统,例如Hypercore(原始 P2P 流)和Hyperdrive(在超核之上进行文件传输)。他们有一些关于技术概念、挑战以及如何解决这些问题的良好文档。

P2P设计中的一些挑战:

  • NAT 路由器和防火墙:通过实现 NAT Traversal 和 UDP 打孔来克​​服(参见:ZeroTier的 NAT Traversal状态)
  • 发现对等点:Dat Project 使用 Gossiping 作为一组对等点在网络上找到彼此的有效方式,以及用于通信的简单(protobuf)有线协议(请参阅: HyperdiscoveryHypercore 协议)。
  • P2P 数据通信/同步:Hypercore 在每个对等点上实现仅附加日志,以及用于以正确顺序从其他对等点聚合和重复数据块的 Merkle 树

Dat Project 支持 TCP、UDP、WebRTC 和 BittorrentDHT。

请阅读他们的一些规范文档以获取有关这些概念和协议设计的深入信息:

于 2017-07-29T06:13:11.500 回答
4

通过互联网在覆盖网络中广播单个消息是一件相当简单的事情。你加入网络,建立一个随机或结构化的邻居路由表,用消息淹没邻居,他们对他们的邻居做同样的事情,减去一些修剪以避免转发循环。

复杂性源于额外的限制和要求,这些限制和要求因网络而异。例如匿名设置中的信任问题、延迟优化、优化许多消息的高带宽流(p2p 辅助视频直播)等。

于 2017-01-29T08:21:12.750 回答