4

ホールパンチングで P2P を実装しようとしています。フローは次のとおりです。

  1. 両方のピア (P1、P2) がサーバー (S) に 1 つのパケットを送信します。
  2. サーバー (S) は両方に返信し、他の IP:PORT を伝えます。
  3. P1 と P2 は、他の外部/パブリック IP:ポートを認識して、この UDP パケットを受信します。
  4. P1、P2 は、他のピアのパブリック IP:PORT にパケットの送信を開始します。
  5. ピアが他のピアのパケットを受信したら、穴が開いていると想定し、このソケットをアプリケーションに渡します。

これをさまざまなルーターでテストしました。結果は次のとおりです。

  • P1 と P2 の両方が非対称 NAT (フル/制限付きコーン) にある場合、問題は発生しません。
  • P1=非対称、P2=対称の場合:
  • -----router-1 (対称 NAT) + router-2 (非対称) = 成功
  • ----ルーター 3 (対称 NAT) + ルーター 2 (非対称) = *失敗*

4段目までは大丈夫。しかし、5 番目のステップでは、他のピアのパケットを受信するピアはありません。少なくとも* 「非対称 NAT の背後にあるピア」が他のパケットを受信することを期待していました。*

誰が何が起こっているのか知っていますか?

4

1 に答える 1

1

ここに紙があります

基本的に、S1 と S2 の 2 つのサーバーを使用します。

アウトバウンド ポートを見ることで、多くの場合、P1 が P2 にパケットを送信するとき、またはその逆のときにどのアウトバウンド ポートが使用されるかを予測できます。

どうやら多くのルーターは、増分/減分またはスキップサイズを使用しているようです

正しいポートを予測する保証はありません。それらは、1 つのポートが通過することを期待して、一連のパケットをさまざまなポートに送信することになります。

私はそれにアプローチする方法が異なります。それをテストするには、対称NATを見つける必要があります:)

于 2013-11-08T05:58:06.443 に答える