web-dev-qa-db-ja.com

ルーターはパケットの転送先をどのように知っていますか

ローカルアドレス(192.168.0。#)を持つ複数のコンピューターがルーターに接続され、各コンピューターがWebブラウザーを開いてHTTP経由でページを要求する場合、これらのTCP:80パケットが送信されると、ルーターはローカルアドレスをルーターの静的IP(つまり、プロバイダーが指定したIP)。サーバーが適切なアドレスに応答できるようにします。

しかし、TCPヘッダーにはローカルIPアドレスが含まれていない(そうでしょうか))ので、ルーターはどのコンピューターにHTTP応答を転送するのかをどのようにして知るのでしょうか。

これはMACアドレスと関係がありますか?

これはどのように機能しますか?

74
Kornelije Petak

ほとんどのホームルーターは、NAT PATと呼ばれる)の特殊なケースを使用します。

NAPTまたはIPマスカレードと呼ばれるものも表示されます。後者の3つの用語はすべて、一般的に使用されている同じことを意味します。 (略語-ネットワークアドレス変換/ポートアドレス変換/ネットワークアドレスポート変換)

パケットが内部マシンから送信されると、ご存じのように送信元アドレスが書き換えられます。起源  また、通常は大きな数に変更され、ルータはアドレス変換テーブルを保持します。

たとえば、www.google.comにアクセスするクライアントマシンがあるとします。コンピューター(192.168.1.100など)はそのアドレスを調べ、ランダムなソースポートを使用して、内部IPアドレスからポート80の72.14.204.147にTCP接続を確立します。

コンピュータへの接続は次のようになります。

192.168.1.100:37641   <-->  72.14.204.147:80

コンピューターはルーターにパケットを送信し、ルーターは新しいランダムなハイポートを選択してパケットを書き換えます。各アウトバウンド接続は、ルーターで独自のポートを取得します。次に、ルーターはパケットを接続テーブルに追加した後、ISPに転送します。

PrivateIP        PrivatePort   PublicIP      PublicPort    Remote          RemotePort
-------------    ----------    -----------   -----------   ----------      -----------
192.168.1.100    37641         *10.6.23.5    59273         72.14.204.147   80

*例として、10で始まるアドレスを使用しましたが、これらは公的にルーティング可能ではありません。テーブルもやや単純化しています。

グーグルにとって、接続は次のようになります。

10.6.23.5:59273   <-->  72.14.204.147:80

Googleはその応答をポート59273の10.6.23.5に送信します。次にルーターはテーブルでその情報を検索し、パケットを192.168.1.100:37641に転送します。

84
Paul

ローカルネットワークとインターネットの残りの部分の間のルーターは、NATと呼ばれる技術を使用します。

NAPTについてのTCP/IP Illustrated Volume 1からの抜粋で、その単純ないとこであるBasic NATの欠点についての言葉が付いています。

基本NATは、IPアドレスの書き換えのみを実行します。本質的に、プライベートアドレスは、多くの場合ISPによって提供されるプールまたはパブリックアドレスの範囲から、パブリックアドレスに書き換えられます。このタイプのNATは、IPアドレスの必要性を大幅に減らすのに役立つわけではないため、最も一般的ではありません。グローバルにルーティング可能なアドレスの数は、インターネットにアクセスする内部ホストの数と同じかそれ以上でなければなりません。同時に。より一般的なアプローチであるNAPTでは、トランスポート層識別子(つまり、TCPのポートとUDP、ICMPのクエリ識別子)を使用して、NATのプライベート側のホストを区別します_は特定のパケットに関連付けられています(図7-4を参照)。これにより、限られた数のパブリックアドレス(多くの場合は1つだけ)を使用して、多数の内部ホスト(つまり、数千)が同時にインターネットにアクセスできるようになります。特定のコンテキストで区別が重要でない限り、通常、NATという用語を使用して、従来のNATとNAPTの両方を含めます。

1
CodyBugstein