NATはどの接続がインバウンドで、どの接続がアウトバウンドであるかをどのように決定しますか?
NATの背後にあるノードにアクセスできる必要があるP2Pアプリケーションを構築しています。このNATはインバウンド接続を許可しないため、ネットワーク外部のノードは、NATの背後にあるノードに到達できません。 この問題に対する私の解決策は、NATの背後にあるノードが外部のノードに到達し、外部のノードが時間の準備ができたら、事前に確立されたTCP接続を使用して、NATの内部にあるノードに接続することです。この接続はNAT内のノードによって確立されるため、NATによってブロックされることはありません。 これが私の質問です。下線が引かれた解釈のうちどれが正しいのか、または両方が間違っているのかはわかりません。 解釈#1 そこで効果的にTCP接続、チューブの概念は、およびNATの内側のノードが外の世界に何かを要求する際に、そのチューブが開き、応答がそれに入れられ、そしてチューブは永遠に閉じます。 結果:そのチューブが閉じた後、NATは外部ノードからクライアントへのそれ以上のTCP接続を許可しません。 解釈#2 TCP接続などはありませんが、TCP送信です。TCP接続はlocal ip:port、およびとして定義されているため、remote ip:portNATの背後のノードが外部のノードを呼び出した後、外部のノードは、クライアントが要求を行ったのと同じポートを使用してコールバックでき、同じTCPとして「カウント」されます。接続によるもので、NATによる一方的な呼び出しではありません。 結果: NATは、この接続が、NAT内のノードが履歴レコードを調べることによって要求したものに対する応答であったかどうかを効果的に推測します。NATの背後にあるノードが最初のコールアウトを行ったので、外部のノードは同じクライアントポートを使用してコールバックでき、機能します。 私のメンタルモデルは#1に近かったのですが、Wiresharkで接続を調べたところ、それらは個別のTCP接続として、または少なくとも個別のエンティティとして表示されました。 #1、または#2に近いですか、それとも混乱してしまいますか?