私は最近、単純なピア ツー ピア ネットワークをモデル化しようとしていました。私の概念では、ピアはポートを開き、サードパーティの「ブートストラップ」ピア ソースを使用してピアを見つけて、できるだけ多くのピアとの接続を確立しようとします。私はすぐに問題に気づきました:
- ピア A がポート 6013 を開き、ピア A の存在をアナウンスします。
- ピア B はポート 31235 を開き、自分の存在を通知します
- ピア A は B のアナウンスを受信し、3111 を送信元ポートとして使用してピア B に接続します。
- ピア B は A のアナウンスを受信し、ソース ポートとして 7777 を使用してピア B に接続します。
現時点では、B のサーバー ソケットに接続している A と、A のサーバー ソケットに接続している B の両方があり、これらが実際に同じホストが互いに通信していることを確認する方法がありません。クライアント接続のソース ポートは示唆していません。彼らが開いているサーバーポート。さらに、ある種の NAT の背後にある可能性があるため、IP アドレスでピアを識別できません。
このような状況を回避するにはどうすればよいですか?私の場合、接続を 2 倍にしても非同期の問題が実際に発生することはありませんが、この冗長性により、望ましくないオーバーヘッドが発生する可能性があります。