モッピー!ポイ活応援ポイントサイト
未分類

そもそも通信の仕組み IP ポート

このブログが神

IPアドレスとポート番号を使った通信

いきなり外部とのネット通信について考えると頭が混乱するので、まずはLAN内での通信について考えます。

例としてサーバー(アドレス 192.168.1.2)でWebサーバーを起動して、同じLAN内のスマホ(アドレス 192.168.1.3)から接続するとします。
(ルーターはデータの受け渡しをするだけなので、省略します)

まずサーバー機でサーバーソフトウェアを80番で起動します(これを「80番ポートをリッスンする」と言います)
スマホでは、接続先を「192.168.1.2(:80)」としてサーバーに接続します。

(本来は、接続先は「IPアドレス:ポート番号」で指定しますが、HTTPでは通常80番で通信するので、その場合はポート番号の省略が可能です)

ポート番号の省略

Webサイトを閲覧するときには、URL(接続先)に「http://example.com/」などを入力します(GoogleやYahooの検索を使っている場合でも、裏でURLが指定されています)
「http:」はHTTPというルールで通信すること、「example.com」はドメイン(IPアドレスと同等のものと考えて構いません)を意味します
ここでもポート番号が省略されていて、「http://example.com:80/」で接続しても同じサイトに繋がります。

この時、意識しないですがスマホ(クライアント)が自動的にサーバーとの通信に使う一時的なポートを開きます(ここでは50000番とします)

このようにして通信を開始すると、スマホ→サーバー(要求)では「送信元 192.168.1.3:50000」「送信先 192.168.1.2:80」、サーバー→スマホ(応答)では「送信元 192.168.1.2:80」「送信先 192.168.1.3:50000」でデータをやり取りします。

スマホが通信を切るとスマホの50000番ポートは閉じられますが(不要になるため)、サーバーの80番ポートは閉じられません(新しい接続を待機するためにリッスンし続けます)

遠く離れた人との通信

データを適切な端末に転送するNAPT

ルーターの下(LAN)では、スマホやPCなど、様々な機器が存在しています。
外部(WAN)と通信するとき、ルーターを経由することをチラっと説明しました。
また、WANからはLAN内の機器を認識しない(ローカルIPアドレスを使って通信できない)ことも説明しました。
(忘れちゃった場合は、もう一度「データの送信先を決める方法」を読んでください)

つまりルーターは外部との通信の際に、ローカルIPアドレスを使用せず、グローバルIPアドレスとポート番号だけで通信するわけです。
では、外部からデータを受け取ったとき、どうやってどのLAN内機器に送信するかを決めているのでしょうか?

ルーターに来たデータを適切な端末へ転送する仕組みをNAPTと言います。
ちなみにポート開放というのは、静的NAPTというもの(のちに説明)の設定をすることです

LAN内から通信を開始したとき

LAN内からWANに要求を送信し、応答を受け取るとき、動的NAPTという仕組みを利用します。

ルーターにグローバルIPアドレス200.200.200.200(ローカルIPアドレス 192.168.1.1)を割り当てられている人が、LAN内のクライアントPC(ローカルIPアドレス 192.168.1.2)から世界のどこかのサーバーPC(アドレス 100.100.100.100 ポート番号80)と通信するとします(サーバー側LANの通信については静的NAPTで説明をするので今回は簡略化して、WANに直接サーバー機がつながっているとします)

まずクライアントPCが50000番ポートを通信用に確保します。
データの送信元は「192.168.1.2 ポート番号50000」送信先は「100.100.100.100 ポート番号80」となります。

そのデータをLAN内(自宅)のルーターが受け取ると、送信元を200.200.200.200 ポート番号12345(未使用のポート番号)、送信先を「100.100.100.100 ポート番号80」に書き換えます。
この機能を動的NAPTと言います。

この機能のおかげで、グローバルIPアドレスを持っていないLAN内機器でも、外部のインターネットと通信することができます。

サーバーがそのデータを受け取って、処理をした後、自宅にあるルーターへと応答します(送信元「100.100.100.100 ポート番号80」・ 送信先「200.200.200.200 ポート番号12345」)

自宅にあるルーターがそのデータを受け取ると、先ほど192.168.1.2の50000番から来たデータを200.200.200.200の12345番に書き換えていたので、逆に200.200.200.200の12345番を192.168.1.2の50000番に書き換えます。
するとルーターが受け取ったデータが、送信元「100.100.100.100 ポート番号80」、送信先「192.168.1.2 ポート番号50000」に書き換えられ、クライアントPCへ無事送信されます。

LAN外から通信を開始したとき

ポート開放とは

WANから接続してもらうとき、通信するポートは決まっているので(httpなら80番、マイクラなら25565番など)、あらかじめ何番のポートをどのローカルIPアドレスの何番に転送するかを設定しておく必要があります(ランダムなポート番号だと、クライアントがどのポート番号と通信すればいいのかわからない)

その設定のことを静的NAPT設定、IPマスカレード設定、もしくはポート開放と言います。
ということは、本来ポート開放とは、「ルーターの〇番に来たデータを、ローカルIPアドレス○○.○○.○○.○○の〇番に転送するようにする設定すること」になりますね。
サーバーを外部に公開するときは、通信するポート番号を決める必要があるから、人が手動で設定する必要があるのですね。
(また、設定していない場合[ポート開放していない場合]、勝手にデータを送られても自動遮断してくれるので、そういう意味でもこの機能は役に立ちますね

このように人が手動で固定し、勝手に設定が変わらないため、静的と言われます。
(それに対し、動的NAPTは通信を開始するたびに設定が変わるため、動的と言われます、多分)

静的NAPTを使った通信

さて、WAN(他人)から通信を開始してもらうときの通信の仕方を見ていきましょう。
(前章で言えば、あいまいにしていた「サーバー側LAN」での通信ですね)

条件は前と同じで、サーバー側ではあらかじめポート開放(静的NAPT設定)をしているとします(ルーターの「80番」に来たデータを、サーバーPCの「192.168.10.2」の「80番」に転送する設定)

サーバー側のルーターが、送信元「200.200.200.200 ポート番号12345」・送信先「100.100.100.100 ポート番号80」のデータを受け取ると、NAPTを参照します
もし、80番の設定がある場合、その設定をもとに転送します。
もし、80番の設定が無い場合、データは破棄されます。
今回は80番の設定があるので、送信先が「192.168.10.2 80番」に書き換えられて送信されます

(クライアント側LANを省略しています)

サーバー用PCがそのデータ(要求)を受け取ると、要求を処理して応答します。
応答するデータは送信元「192.168.10.2 80番」送信先「200.200.200.200 12345番」で送信します。

サーバー側ルーターが返信を受け取ると、先ほど「200.200.200.200 80番」を「192.168.10.2 80番」に変換していたので、送信元の「192.168.10.2 80番」を「200.200.200.200 80番」に変換して、クライアントへ返信します。

NAPTのまとめ

動的NAPTと静的NAPTの通信をまとめると、次のようになります

クライアント→サーバー(要求)
サーバー→クライアント(応答)

まとめ

今回は、ネットワーク機器同士がどうやって通信をしているのか?ということを、ルーターに注目して解説しました。

今記事の内容をまとめると以下の通りです

  • ルーターを介して通信している
  • IPアドレスによって、どこに送信するかを決めている
  • ポート番号によって、どのプログラムの通信なのかを判断している
  • LAN内の機器とWANの機器同士の通信は、NAPTという機能を使って、IPアドレスとポート番号を適切に変換して行っている

わからないことなどや、間違っている点があれば、コメント欄でどんどん意見をください!

ABOUT ME
たけ
はじめまして! たけといいます。 20代男性サラリーマンが資産運用で5年で3000万をめざします。 これを読んで自分でも出来るのではないかと思ってくれる人が増えると嬉しいです。 お金を得ることは手段に過ぎません。若いうちに稼いで、自分の時間をより大切なことに使いたいです。 【2019投資戦歴】 投資資金合計 300万 2019年度単年損益(年利) FX 15万(15%) 投信 9万(7%) 株式 4万(8%) ※投信、株式は含み益