0

私は最近、単純なピア ツー ピア ネットワークをモデル化しようとしていました。私の概念では、ピアはポートを開き、サードパーティの「ブートストラップ」ピア ソースを使用してピアを見つけて、できるだけ多くのピアとの接続を確立しようとします。私はすぐに問題に気づきました:

  1. ピア A がポート 6013 を開き、ピア A の存在をアナウンスします。
  2. ピア B はポート 31235 を開き、自分の存在を通知します
  3. ピア A は B のアナウンスを受信し、3111 を送信元ポートとして使用してピア B に接続します。
  4. ピア B は A のアナウンスを受信し、ソース ポートとして 7777 を使用してピア B に接続します。

現時点では、B のサーバー ソケットに接続している A と、A のサーバー ソケットに接続している B の両方があり、これらが実際に同じホストが互いに通信していることを確認する方法がありません。クライアント接続のソース ポートは示唆していません。彼らが開いているサーバーポート。さらに、ある種の NAT の背後にある可能性があるため、IP アドレスでピアを識別できません。

このような状況を回避するにはどうすればよいですか?私の場合、接続を 2 倍にしても非同期の問題が実際に発生することはありませんが、この冗長性により、望ましくないオーバーヘッドが発生する可能性があります。

4

1 に答える 1

1

各ノードは、それが生成する一意の GUID で自身を紹介する必要があります。次に、A と B が相互に接続を確立すると、GUID を比較するだけで誰がマスターになるかを決定できます。より大きな GUID を持つノードがマスターになり、その接続 (開始した接続) を維持します。より小さい GUID を持つノードが開始された接続を閉じ、受信した接続を保持します。

于 2013-04-26T16:44:37.287 に答える