11


5

シナリオは次のとおりです。 AとBの2台のマシンがあります。A:クライアント(NATの後ろ)B:サーバー(NATの後ろ)

Aがその特定のTCPポートを介してBにパケットを送信し、任意の応答を受信できるように、Bが任意の特定のポートでlistenできるようにしたい 両方のマシンがNATの背後にない場合、それはかなりまっすぐ進むプロセスです。 しかし、Bがルーターの背後にいるときでも動くようにするにはどうすればいいですか。

たとえば、トレントクライアントのようなピアツーピアプログラムは、ユーザーが何も設定しなくてもどのように機能しますか。

4 Answer


6


ピアツーピアプログラムの例に答えるために、そして一般に:NATルーターがそれらの背後にあるクライアントに公開させるために使用できる Universal Plug and Playと呼ばれる技術があります。外部へのポート。 他のクライアントがそれらに直接接続できるように、それがbittorrentクライアントが使えることです。


1


次のどちらかが必要です。

  1. サーバーの前面にあるNATゲートウェイからサーバーソフトウェアが実行されているマシンへのポート転送を設定し、クライアントにそのゲートウェイのIPアドレスに接続させます。

  2. サーバーとクライアントの両方がそれに接続できるように、2つのnatゲートウェイ間にプロキシサーバーを作成します。 あなたのサーバーとクライアントの両方がそれらの2つの接続間のデータを仲介するそのプロキシへの接続を設定しなければなりません。


0


プロキシサーバーに代わるものは、マッチメイキングサーバーです。 すべてのトラフィックをプロキシするのではなく、対戦相手が互いに会話できるようになるまで、対戦相手はただ交渉します。 これには、ピア/ピアが通信を希望していることをファイアウォール/ルータが認識できるように、ピアの外部パブリックIPを見つけて相互に通信することが含まれます。

これは ホールパンチと呼ばれていて、相手ではなくマッチメーカーによって行われる必要があります。 穴が開けられれば、マッチメーカーは仲間にお互いについて話すことができ、彼らは直接コミュニケーションすることができます。


0


ホールパンチングは、UDP通信ではある程度よく理解されていますが、ピアツーピアTCPストリームの設定にも確実に使用できます。 TCPとUDPの両方に関する詳細な記事は次のとおりです。