3

私はTCP ホール パンチングテクニックを研究しており、 TCP_hole_punchingという記事からある程度の知識を得ています。しかし、私は以下の部分を理解していません:

      Network Drawing
      Peer A ←→ Gateway A ← .. Network .. → Gateway B ←→ Peer B  

      Types of NAT
      The availability of the TCP-hole-punching technique depends 
      on the type ofcomputer port allocation used by the NAT. When 
      two peers, A and B, instantiate TCP   connections by binding 
      to local ports Pa and Pb, respectively, **they need to know 
      the remote  endpoint NAT port in order to make the connection**.

ここにいくつかの質問があります。誰かが説明を手伝ってくれますか? どんな助けや提案も大歓迎です!!

Q1. NAT1 の背後で実行されているクライアント アプリと、NAT2 の背後で実行されているサーバー アプリがあるとします。彼らはメッセージングとファイル転送通信を行います。パターンは、サーバーがリッスンし、クライアントからの接続を受け入れます。TCP 接続を維持するために、TCP ホール パンチングを使用する必要がありますか?

Q2. TCP ホール パンチング技術は、ピア ツー ピア通信であり、両方の当事者が互いに接続している場合にのみ必要ですか (たとえば、2x CONNECT()、LISTEN()、ACCEPT() など) はありませんか?

Q3. 上記のテキストで、「接続を確立するためにリモート エンドポイントの NAT ポートを知る必要がある」とはどういう意味ですか? リモート エンドポイントの NAT ポートを知る必要があるのはなぜですか?他のマシンのローカル ポートを知る必要があるだけではないのですか?

たとえば、ペアが (ClientA、publicIPA、LocalPortA)、(ClientB、publicIPB、LocalPortB) であるとします。ClientA が TCP 経由で ClientB と通信したい場合は、次のようにします。

         clientBAddr.port = LocalPortB;
         clientBAddr.ip = inet_addr(publicIPB);
         connect(fdA, clientBAddr,...);

NATPortA や NATPortB などの情報を知る必要があるのはなぜですか? clientA と clientB が NATA と NATB を気にしない場合、問題はありますか?

4

1 に答える 1

1

この投稿は再開され、現時点まで誰も回答を残していないため、次の記事に基づいて自分で回答したいと思います:ネットワーク アドレス変換を介したピアツーピア通信

Q1については、はい。ホール パンチのようなメカニズムがなければ、一方の側が他方の側と同期するために使用するパケットは、ルーターによってドロップされます。

Q2 については、正確には違います。リッスン ソケットは直接動作しません。他のトリックが必要です。

于 2013-02-28T12:52:02.077 に答える