【问题标题】:How to make sure peer connections aren't doubled (server->client, client->server)?如何确保对等连接不加倍(服务器->客户端,客户端->服务器)?
【发布时间】:2013-04-26 16:28:17
【问题描述】:

我最近试图模拟一个简单的点对点网络。在我的概念中,对等点尝试使用第三方“引导”对等点源来打开端口并与尽可能多的对等点建立连接以找到对等点。我很快注意到了一个问题:

  1. 对等体 A 打开一个 6013 端口并宣布他的存在
  2. 对等体 B 打开一个端口 31235 并宣布他的存在
  3. Peer A 收到 B 的通知并连接到 Peer B,使用 3111 作为其源端口
  4. Peer B 收到 A 的通知并连接到 Peer B,使用 7777 作为其源端口

此时,我们有 A 连接到 B 的服务器套接字和 B 连接到 A 的服务器套接字,但无法确保它们实际上是相同的主机相互通信 - 客户端连接的源端口不要建议他们打开了哪个服务器端口。此外,我无法通过 IP 地址识别对等方,因为它们可能位于某种 NAT 后面。

我能做些什么来避免这种情况?在我的情况下,将连接加倍不会真正导致去同步问题,但这种冗余可能会导致我不想要的开销。

【问题讨论】:

    标签: p2p


    【解决方案1】:

    每个节点都应该使用它生成的唯一 GUID 来介绍自己。然后当 A 和 B 相互建立连接时,他们可以通过简单地比较他们的 GUID 来决定谁将成为主节点 - 具有较大 GUID 的节点成为主节点并保持其连接(即它发起的连接)。具有较小 GUID 的节点关闭发起的连接并保留接收到的连接。

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      相关资源
      最近更新 更多