質問は完全にカバーされていますが。このプロセスは、ステップごとに説明するのが最適だと思います。
この例では、ルーターを介してインターネットに接続されたプライベートLANに座っています。ネットワークは単一のパブリックIPアドレスを共有するため、NATを使用します。
したがって、superuser.com
多くのIPパケットを生成するページを要求すると。単一のものを見てみましょう。
IPパケット
ソース:(192.168.1.12
私のIP)
宛先:64.34.119.12
(superuser.com)
現在、私のシステムは問題のシステムと同様にセットアップされている可能性が高いです。自分のIPアドレス(192.168.1.12
)、サブネットマスク(255.255.255.0
)、デフォルトゲートウェイ(192.168.1.1
)があります。これで、IPパケットのDestinationフィールドは自分のネットワークとは異なるネットワークを指しているため、(コンピューターに直接ではなく)デフォルトゲートウェイに送信されます。
しかし、宛先が完全に別の場所を指している場合、パケットはどのようにしてデフォルトゲートウェイに到達できますか?
イーサネット
イーサネットプロトコルのアドレス指定を使用しているため、これは簡単です。宛先IPアドレスをIPパケットに設定し、デフォルトゲートウェイのMACアドレスをイーサネットフレームの宛先として設定します。
これで、デフォルトゲートウェイがのパケットを取得するようになりますsuperuser.com
。わーい!
これでゲートウェイはパケットを取得し、パス上でパケットを送信できます。しかし、確実に答えを得るために、最初にパケットの送信元アドレスを置き換える必要があります(そうしないsuperuser.com
と、ネットワーク上のIPアドレスを使用して(おそらく)存在しないデバイスに答えを送信しようとします。)非常にいいです。)
だから私のルーターはソースフィールドにパブリック IPアドレスを配置します:
IPパケット
ソース:(92.69.127.243
私のパブリックIP)
宛先:64.34.119.12
(superuser.com)
パケットが最終的に到着しsuperuser.com
、回答が生成されるまで、同じゲームが世界中のすべてのルーターで繰り返されます。
答え
回答IPパケット
ソース:64.34.119.12
(superuser.com)
宛先:(92.69.127.243
私のパブリックIP)
さて、答えは私のルーターになりました、今は何ですか?ルーターはどのようにして回答を送信するかを知ることができ192.168.1.12
ますか?
TCP
まあ、実際に機能するのは、通信のIPとイーサネットの部分だけを見たからです。これが機能するのはTCP部分です。
Webサーバーは通常portで実行されることをご存じでしょう80
。IPにはポートの概念がありません。それはTCPから来ています。TCPには(IPのように)送信元ポートと宛先 ポートがあります。
superuser.comへのTCPパケット
ソース:192.168.1.12
(IP)
ソースポート:(11111
コンピューターが構成したポート)
宛先:64.34.119.12
(superuser.com)
宛先ポート:80
ルーターが(superuser.com
portでアドレス指定された80
)最初のパケットを送信すると、新しいソースポートがそこに置かれます(など12345
)。
そして、これは重要な部分です!彼はその交換を覚えているでしょう!
superuser.comへのルーターのTCPパケット
ソース:(92.69.127.243
パブリックIP)
ソースポート:(12345
ルーターが構成したポート)
宛先:64.34.119.12
(superuser.com)
宛先ポート:80
そのため、ルーターが受信した応答パケットは、実際には次のようになります。
応答
:superuser.comからのTCPパケットソース:64.34.119.12
(superuser.com)
ソースポート:80
宛先:(92.69.127.243
パブリックIP)
宛先ポート:(12345
ルーターが作成したポート)
そのため、彼はそのパケットを取得し、以前に記憶していたIPアドレス192.168.1.12
(自分のIPアドレス)のNAT操作に割り当てられたポート用であることを確認します。
ルーターからの応答TCPパケット
ソース:64.34.119.12
(superuser.com)
ソースポート:80
宛先:(192.168.1.12
私のIP)
宛先ポート:(11111
私のコンピューターが構成したポート)