我最近试图模拟一个简单的点对点网络。在我的概念中,对等点尝试使用第三方“引导”对等点源来打开端口并与尽可能多的对等点建立连接以找到对等点。我很快注意到一个问题:
- 对等体 A 打开一个 6013 端口并宣布他的存在
- 对等体 B 打开一个端口 31235 并宣布他的存在
- Peer A 收到 B 的通知并连接到 Peer B,使用 3111 作为其源端口
- Peer B收到A的通告,连接到Peer B,使用7777作为源端口
此时我们有 A 连接到 B 的服务器套接字和 B 连接到 A 的服务器套接字,但无法确定这些实际上是相同的主机在相互通信 - 客户端连接的源端口不建议他们打开了哪个服务器端口。此外,我无法通过 IP 地址识别对等方,因为它们可能位于某种 NAT 后面。
我该怎么做才能避免这种情况?在我的情况下,将连接加倍不会真正导致去同步问题,但这种冗余可能会导致我不想要的开销。