ホールパンチングで P2P を実装しようとしています。フローは次のとおりです。
- 両方のピア (P1、P2) がサーバー (S) に 1 つのパケットを送信します。
- サーバー (S) は両方に返信し、他の IP:PORT を伝えます。
- P1 と P2 は、他の外部/パブリック IP:ポートを認識して、この UDP パケットを受信します。
- P1、P2 は、他のピアのパブリック IP:PORT にパケットの送信を開始します。
- ピアが他のピアのパケットを受信したら、穴が開いていると想定し、このソケットをアプリケーションに渡します。
これをさまざまなルーターでテストしました。結果は次のとおりです。
- P1 と P2 の両方が非対称 NAT (フル/制限付きコーン) にある場合、問題は発生しません。
- P1=非対称、P2=対称の場合:
- -----router-1 (対称 NAT) + router-2 (非対称) = 成功
- ----ルーター 3 (対称 NAT) + ルーター 2 (非対称) = *失敗*
4段目までは大丈夫。しかし、5 番目のステップでは、他のピアのパケットを受信するピアはありません。少なくとも* 「非対称 NAT の背後にあるピア」が他のパケットを受信することを期待していました。*
誰が何が起こっているのか知っていますか?