(以下では、NATストーリーに関連する部分ではないため、DNSルックアップまたはレイヤー2アクションは無視します。)
TCP接続は4つの部分からなるタプルです。
<source IP> <source port> <destination IP> <destination port>
つまり、宛先IPは、パケットを正しいマシンに送信するために使用され、宛先ポートは、そのマシン上のパケットを正しいプログラム/セッションに送信するために使用されます。送信元IPは、応答の送信先を知るために使用されます。送信元ポートについても同様です。応答が送信されると、送信元と宛先が単純に交換されます。
NATのない2台のコンピューターから始めましょう。
- コンピュータにIPがあります
1.1.1.1
- ウェブサーバーにはIPがあります
3.3.3.3
- HTTPの標準ポートは
80
コンピュータがWebページを要求すると、ランダムな範囲(1024〜65535)からランダムな未使用のポート番号を最初に選択します。選びましょう2345
。次に、次のシーケンスが発生します。コンピュータがパケットを送信します:送信元IP 1.1.1.1
、送信元ポート2345
、宛先IP 3.3.3.3
、宛先ポート80
。パケットはWebサーバーに到着し、自身のIPとポートを80
認識しているため、これがWebページの要求であることを認識しています。Webサーバーは、送信元IP 3.3.3.3
、送信元ポート80、宛先IP 1.1.1.1
、宛先ポートを含むパケットでWebページを送り返します2345
。コンピュータはこれらのパケットを受信し、ポート番号のため、リクエストされたWebページを認識します2345
。
これらのポートの組み合わせは、次のように記述されることがよく1.1.1.1:2345
あり3.3.3.3:80
ます。
現在、インターネット上のコンピューターの数は、利用可能なIPv4アドレスの数をはるかに上回っています。アドレス空間を維持するために、アドレス共有に自由に使用できる一連のプライベートアドレス範囲が導入されました。これらの範囲はRFC1918と呼ばれ、次のとおりです。
- 192.168.0.0-192.168.255.255
- 172.16.0.0-172.31.255.255
- 10.0.0.0-10.255.255.255
これらのアドレスはインターネットルーティングテーブルのどこにもないため、インターネットのバックボーンでこれらの範囲内の宛先にパケットを送信する場合、それらは単にドロップされます。これは、何百万もの人々が同じアドレスを使用しているためです。これらのアドレスは、インターネットに役立つものに変換する必要があります。これがネットワークアドレス変換の出番です。
2台のコンピューターがあります。
- A:
192.168.0.1
とB:192.168.0.2
- ゲートウェイのパブリックIPは
1.1.1.1
です。
- 同じウェブサーバーを維持します。
- 両方のコンピューターは、同じサーバーから同じWebページを要求します。
最初に、両方のコンピューターがランダムなポートを選択します。たとえば、次のように192.168.0.1:2345
し192.168.0.2:5432
ます。
コンピューターAは、送信元192.168.0.1:2345
と宛先を含むパケットを送信します3.3.3.3:80
。ゲートウェイはこのパケットを送信元の1.1.1.1:2345
宛先に変換3.3.3.3:80
し、この組み合わせへの応答はに送信されることを覚えています192.168.0.1
。それはソースとの回答recievesときだから、3.3.3.3:80
および目的地を1.1.1.1:2345
、それが元にそれを翻訳し3.3.3.3:80
、宛先192.168.0.1:2345
と上のパケットを送信します。
コンピューターBは、送信元192.168.0.2:5432
と宛先を含むパケットを送信します3.3.3.3:80
。ゲートウェイはこのパケットを送信元の1.1.1.1:5432
宛先に変換3.3.3.3:80
し、この組み合わせへの応答はに送信されることを覚えています192.168.0.2
。それはソースとの回答recievesときだから、3.3.3.3:80
および目的地を1.1.1.1:5432
、それが元にそれを翻訳し3.3.3.3:80
、宛先192.168.0.2:5432
と上のパケットを送信します。
両方のコンピュータが偶然同じソースポート番号を選択した場合、ゲートウェイは単純に別の空きランダムソースポート番号を選択し、ポート番号も変換することを忘れないでください。これは、PAT(ポートアドレス変換)と呼ばれることもあります。これは基本的にNATのサブセットです。
これにはいくつかの実装があります。ゲートウェイは単に「コンピュータXが送信元ポートYを使用した」ことだけを記憶し、ポートYを含むすべてをコンピュータXに転送します。コンピュータXが送信元ポートYと宛先Zを使用したことを記憶し、ポートZからポートYに何かを転送するだけです。コンピューターX。または、タプル全体を記憶し、送信元/宛先のIPとポート全体に一致するトラフィックのみをコンピューターXに送信するというオプションがあります。