2 つの異なる NAT の背後にある 2 つのホストが P2P 接続を確立できるようにするには、両方のホストが互いのパブリック エンドポイント (アドレス/ポート) を持っている必要があります。各ホストが自身のパブリック エンドポイントを認識できるようにするために、サーバーから見たパブリック エンドポイントをホストに返す既知のパブリック サーバーと通信できます。STUN (RFC5389) を参照してください。
このメカニズムが機能するためには、宛先エンドポイントに関係なく、NAT が一貫して同じプライベート エンドポイントを同じパブリック エンドポイントに変換する必要があります。
この特定の NAT 動作に依存する P2P アプリケーションを実装することは良い考えでしょうか (つまり、十分に一般的ですか)? Skype やその他の一般的な P2P アプリケーションには、他のフォールバック メカニズムがありますか?
編集:宛先ごとに異なるポートが選択されるNATは、「対称NAT」と呼ばれるようです。さらに、一部の対称 NAT はポート番号をインクリメントして、適切なポートを推測できるようにします。
さて、問題は次のとおりだと思います。大まかに言えば、NAT の何パーセントが対称 NAT であり、それらの何パーセントがランダムなポート割り当てとインクリメントのようなものを使用しているのでしょうか。