月曜日, 6月 16, 2025
- Advertisment -
ホームニューステックニュース【🔰初心者向け】NAT/NAPTを改めて理解する #Network - Qiita

【🔰初心者向け】NAT/NAPTを改めて理解する #Network – Qiita



【🔰初心者向け】NAT/NAPTを改めて理解する #Network - Qiita

はじめに

こんにちは!ITスクールRareTECHにてCS(Customer Support)を担当している池村です。今回の記事はIPアドレスでの通信についてです。IPアドレスとNAT/NAPTに関して理解していきましょう。

初心者のIPアドレスの理解レベルについて

よく言われているのはネットワーク上の住所ですよね。
正直初心者の頃はこれだけ知っておけば良いのですが、AWSのVPCなどを触っていくと、この辺りの技術がひょこっと顔を出してきますので、深めに理解することも大事になります。

グローバルIPとプライベートIPについて

IPアドレスは大きく分けてグローバルIPアドレスとプライベートIPアドレスがあります。
グローバルは実際のネットワーク空間で使われるものですが、プライベートは社内とか家の中などで使われるIPアドレスになります。

step8.jpg

自宅のIPアドレスがどう切り分けられているか?

家には一つのグローバルIPアドレスがあります。そして、その家のネットワークにつながる機器には、それぞれプライベートIPアドレスがあります。
グローバルIPアドレスは一意です。被りがないということです。プライベートIPアドレスは、家の中では被りがないですが、よその家では同じプライベートIPアドレスがあっても問題ありません。

機器 自分の家 友人の家
グローバルIP(ルーター) 203.0.113.228(一意) 198.51.100.203(一意)
スマホのIP(プライベート) 192.168.0.100(LAN内で一意) 192.168.0.100(LAN内で一意)
PCのIP(プライベート) 192.168.0.101 192.168.0.101
ゲーム機のIP(プライベート) 192.168.0.102 192.168.0.102

上記の表で見てほしいのは、グローバルIPアドレスは違う値で、プライベートIPアドレスは一緒という部分です。

LANとWAN

広域のネットワークと家の中などの狭い範囲のネットワークには名前があります。

LAN

ローカルエリアネットワークの略です。
会社内や家の中で使われるネットワークのことを指します。その中の機器を接続するために使われています。

WAN

ワイドエリアネットワークの略です。
世界規模の外部ネットワークのことを指します。

8508E372-CC27-4C5B-AF1F-4D1A1688BD44.png

通信がどう送られくるか?

外から通信が送られてくると、家のグローバルIPアドレス宛に届きます。送られた通信は家のルーターが受け取ります。ルーターは、その通信が「どのプライベートIPの機器宛か」を判断して、内部ネットワークに転送します。

このときに使われるのが NAT/NAPT という仕組みです。

ちょっとここから難し目です。

NAT/NAPT

最初に言っておきますが、今使われているのは基本的にNAPTです。
でもNATのことも知っておかないとNAPTがピンとこないので解説します。

NAT

まずNATですが、これはネットワーク アドレス トランスレーションの略です。
こいつの役割は、プライベートIPアドレスとグローバルIPアドレスを相互に変換することにあります。この機能があることによって、LAN内にあるプライベートIPアドレスを持った機器が外部のネットワークと通信ができています。

step47_1.jpg

でもこれって1対1しか対応していないんですよね。
なので、複数の機器が同時に外部のネットワークと接続したい場合は、これだけだと不十分になります。

NAPT

NAPTは、ネットワーク アドレス ポート トランスレーションの略です。
この技術を使うと、複数機器が同時に外部との通信が可能になります。

step47_2.jpg

皆さんの家でも複数のスマホやゲームが同時にネットワークに繋げられていますよね?これはNAPTのおかげです。

これはNATの技術にポートを使うことで可能にしています。

ポートは通信の出入り口のようなものです。
全ての通信にはポート番号というものが振られているので、どの通信がどういった通信かわかるようになっています。

IPアドレスがネットワーク上の住所なら、ポート番号は部屋番号に例えられることが多いですね。

step13.jpg

NAPTの場合はどう言ったポートの使い方をしているのか?

プライベートIPアドレスから外部に通信を行う際、以下のようにポートが割り当てられます。

プライベート→グローバル

# 192.168.0.2がプライベートIPアドレス、55001がポート番号です
192.168.0.2:55001(家の中にあるスマホから)
     ⬇︎
# 203.0.113.10がグローバルIPアドレス、50001がポート番号です
203.0.113.10:50001(ルーターがポートごと変換)

このポート番号の数字に意味があるわけではありません。
今回の場合、スマホから送られた際のポート番号がルーターで変更されていることに着目しましょう。

この変更は、外部と通信するため、必ず一意にするためには必須です。
例えば

同時に同じポート番号で、違うプライベートIPから通信がきた場合①

# 家の各機器側
192.168.0.2:55001(家の中にあるスマホから)
192.168.0.3:55001(家の中にあるPCから)
     ⬇︎
# ルーター側
203.0.113.10:50001(こっちはスマホ)
203.0.113.10:50002(こっちはPC)

こうやって外部に通信を繋げます。
ルーターにはポート番号を一意に変更する機能が備わっています。
例えば以下のような形にはならないということです。

同時に同じポート番号で、違うプライベートIPから通信がきた場合②

# 家の各機器側
192.168.0.2:55001(家の中にあるスマホから)
192.168.0.3:55001(家の中にあるPCから)
     ⬇︎
# ルーター側
203.0.113.10:55001
203.0.113.10:55001

これでは外からレスポンスが返ってきた時、どっちの機器に返せば良いのかわからなくなります。なので、ルーターにはポートを変更する機能と、絶対に被らないポートを割り振る機能が備わっています。

さて、この機能に付随して、こういった振り分けがどう記録されているかも解説します。
これらの情報はルーターにあるNATテーブルという場所に記録がされています。

NATテーブル

NATテーブルはプライベートIPアドレスからの通信を記録する機能です。

同時に同じポート番号で、違うプライベートIPから通信がきた場合③

# 家の各機器側
192.168.0.2:55001(家の中にあるスマホから)
192.168.0.3:55001(家の中にあるPCから)
     ⬇︎
# ルーター側
203.0.113.10:50001(変換して外に出すけど、これは192.168.0.2:55001からの通信だな)
203.0.113.10:50002(変換して外に出すけど、これは192.168.0.3:55001からの通信だな)

NATテーブルに記録されるのは以下の情報です。(今回の場合)

  • 送信元プライベートIPアドレス
    →今回の場合:192.168.0.2と192.168.0.3

  • 送信元ポート番号
    →今回の場合:55001と55001

  • 宛先IPアドレス(どこに通信を届けたいか)

  • 宛先ポート番号(宛先のポート番号、HTTPS通信なら443)

  • 変換後グローバルIPアドレス
    →今回の場合:203.0.113.10

  • 変換後ポート番号
    →今回の場合:50001と50002

  • プロトコル(大体TCP/UDPのどちらかで判断)

  • 状態/タイマー(Connection State/Timeout)

これらの情報がルーターのメモリにそれぞれの対応通りに保存されています。

ここで使われるポート番号について

ポート番号にはいくつか分類があります。

ウェルノウンポート

これはすでに使う先が決まっているポート番号です。主にサーバーが使うポート番号です。
番号でいうと以下の範囲です。

ウェルノウンポートの範囲

よく出てくるのはHTTPの80番、HTTPSの443、SSHの22番などですね。
これらは基本的に変えることは非推奨です。

レジスタードポート(ユーザーポートとも呼ばれる)

こちらは様々なシステムで使われているポート番号ですね。主にエンジニアなどの開発者が使うポート番号です。
基本的に番号を変えて使うこともありえるポートの範囲です。

レジスタードポートの範囲

MySQLなら3306、PostgreSQLなら5432のような感じです。

FlaskというPythonのフレームワークのポート番号は標準で5000なのですが、最近のMacではAirPlayで5000を使っているので、こう言ったところで競合がおきたりします。別に予約されたポート番号というわけではないので当然の現象ですね。

エフェメラルポート

上記二つとは違って、このポート番号はクライアント側が使うポート番号です。
ですが、基本的に一般ユーザーが意識することはないです。

エフェメラルポートの範囲

クライアント意外だとルーターのNATテーブルが使っているポート番号です。
通信をする際に一瞬使って、すぐ破棄されます。

A6EF19C1-E1E7-4B4E-8E83-2650B34D9F71.png

IPアドレスと関係しているその他の技術

MACアドレス

MACアドレスは個人番号のようなもので、物理的なデータを受け取るために必要な機器の識別子です。IPアドレスは論理的なアドレスと呼ばれます。それぞれの機器に物理的に刻まれている番号なので、動的に変わってしまうIPアドレスとはまた違う要素ですね。IPアドレスは外との通信でしっかり使われますが、MACアドレスはLAN内限定で使われています。

step9.jpg

一番わかりやすい説明だと、家のWifiで繋いている時のIPアドレスと、外でWifiに繋いだ時のIPアドレスは違いますよね?IPアドレスは動的に変わるので、最終的にどこにデータを渡すかはMACアドレスによって識別されます。

歴史的な話になると、そもそも世界中にネットワークが広がる前は、研究所などにあるコンピューター同士を識別する必要があったわけで、誕生自体が先なんですよね。

ARPについて

ARPは、プライベートIPアドレスからMACアドレスを探し当てるためのプロトコルです。

  1. ルーターが、LAN内の 192.168.10.5 に通信を送りたい
  2. そのIPに対応するMACアドレスが分からなければ、ARPで全端末に確認
  3. 192.168.10.5の機器だけが、それに反応してMACアドレスを返す
  4. ルーターはそのMAC宛に通信を送る

です。

最終的に物理的なデータを届けるためにMACアドレスが必要になってくるので、ARPを使って宛先の個人番号を知る必要があります。

step139_1_720.jpg

おわりに

久しぶりに記事を書きました。
5~6月はお休みする予定でしたが、ちょっと書かないといけないくらいネットワークのこと忘れてきている、、と感じたので書きました。
IPアドレス周りは表記あたりやドメイン周りの話もあるので、続きも書いていきます。





Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -