
NAT テーブルについては知っています。プライベート ローカル エリア ネットワーク内の 2 つのクライアントが同じポートでまったく同じリソースをダウンロードしようとするとどうなるのか知りたいだけです。つまり、パケットがサーバーから来たときに、ルータはどのクライアントがこのパケットを取得するのかをどのように判断できるのでしょうか。
私の記憶が間違っていなければ、サーバーから着信するパケットには、ルーターの宛先 IP アドレス (パブリックで両方で同じ) があり、宛先のポート番号もこの場合は同じになります。
ルーターやサーバーにこれを検出するメカニズムはありますか? あるいは、そもそもこのような動作は可能でしょうか?
私は次のような質問を検索しましたこれポートがビジー状態であるためエラーが発生するのは当然ですが、私は 2 つの別々のシステムについて質問しています。
アップデート :コメントから、私の説明が十分明確ではなかったことに気づいたので、例を挙げてもう一度述べたいと思います。
192.168.2.10
デバイスの「ソース」ポートだけを気にしています。2 台のラップトップ (と)があり192.168.2.11
、どちらもインターネットのどこかにある同じサーバーから同じファイルをダウンロードしているとします。それぞれのラップトップにはランダムなポートを生成するオペレーティング システムがあるため、ソース IP とソース ポートは次のようになります:192.168.2.10:6321
と192.168.2.11:7132
。NAT では、ルーターがラップトップからのポートとともに (パブリック) IP アドレスを設定するため、ホーム ルーターのパブリック IP アドレスが の場合65.82.23.32
、これら 2 つのパッケージはそれぞれ次のソース IP とソース ポートを取得します:65.82.23.32:6321
と65.82.23.32:7132
。
応答が返ってくると、ルータはポート番号からどのパケットがどのラップトップ向けであるかを判断できます。ここまでは順調です。しかし、誤ってまたは意図的に 2 台のラップトップがまったく同じソース ポートを生成するとどうなるでしょうか。たとえば、192.168.2.10:6000
と です。ルータは以前と同じようにパブリック IP アドレスをソース IP アドレスとして設定しますが、これらのポート番号を使用しようとすると、これらのパッケージはと192.168.2.11:6000
のようにまったく同じソース IP とソース ポート番号を持つことになります。65.82.23.32:6000
65.82.23.32:6000
ここで私が混乱したのは、応答が返ってきたときに、ルータがどのパケットがどのラップトップ用であるかをどのように判断できるのかということです。
@mfinni の回答の後、PAT はこのようには機能しないことに気づきました。NAT デバイス (ここではルーター) は、各ラップトップに固有のポート (プライベート IP アドレス) を割り当て、パケットはこれらの固有のポート (たとえば、および) を使用して送信されます7777
。7778
したがって、応答が返されると、どのパケットがポートからのどのラップトップ向けであるかが明確になり、ルーターはこれらをそれぞれ65.82.23.32:7777
、65.82.23.32:7778
--> に 192.168.2.10:6000
変換します192.168.2.11:6000
。
答え1
TCP 接続 (HTTP や他の多くのプロトコルの基礎となる) は、(特定の時点で) 次の 4 つのパラメータによって一意に定義されます。
- ローカルIP
- 地元の港
- リモートIP
- リモートポート
同じコンピューターから同時に同じ要求を 2 回行った場合でも、2 つの IP アドレスが同一で宛先ポートが同一であっても、送信元ポートは異なります。
同様に、同じ NAT デバイスを通過する 2 つのデバイスからの 2 つのリクエストがある場合、NAT デバイスは異なる送信元ポートを使用します。デバイスによっては、元の送信元ポートを保持する (競合がある場合にのみ 1 つを変更する) か、元の送信元ポートとは独立して常に新しい送信元ポートを割り当てるかのいずれかになります。
NAT デバイスは、各接続のマッピングを変換テーブルに保持します。このマッピングには、外部接続 (外部 IP、外部送信元ポート、宛先 IP、宛先ポート) が内部接続 (内部ホスト IP、内部ホスト送信元ポート、宛先 IP、宛先ポート) にマッピングされていることが示されています。
答え2
NAT テーブルは、各クライアントの送信元ポートが異なることを認識しているため、誤って間違ったパケットを間違った内部クライアントに送信することはありません。NAT デバイスは異なる送信ポートも割り当てますが、それらは異なる内部クライアント間で同じではありません。
答え3
NAT
おそらくあなたが言及しているのはNAPT
. これにより、NAT デバイスの送信元ポートが変更されます (少なくとも必要な場合)。これにより、送信元ポートが変更されます。
例えばiptables
MASQUERADE
この場合、NAT を実行すると、「接続追跡」も必要になります。これは、どの「外部ポート」がどの「内部クライアントとポート」に関係しているかを追跡するだけです。iptables では、RELATED,ESTABLISHED
を使用するルールがよく見られます。また、NAPT を実行するルータが再起動されると、すべての接続が切断されることもわかります。一方、NAT のないルータは通常、すべての接続を再開します。(クライアントがタイムアウトする前に再起動が完了することを前提としています)
答え4
ルータは、ラップトップが WAN への送信要求で生成するのと同じ送信元ポート番号を使用せず、独自の一意の送信元ポートを生成します。ルータの NAT テーブルは、laptop1:6000 を publicip:N に、laptop2:6000 を publicip:M に変換します。次に、インターネットからのトラフィックがどのポートに到着するかによって、着信パケットをどこにルーティングするかがわかります。