🦭

IPアドレスの概要

に公開

IPアドレスについての学習の備忘録です。
具体的なIPアドレスの計算問題については触れず、IPアドレスの全体像についてざっくり理解するのがこの記事の目的です。

IPアドレスとは

IPアドレスはネットワークに接続するマシンに割り振られる識別番号のことで、一言で言えばインターネットに接続されたPCやスマートフォンなどを識別するための、インターネット上の住所のようなものです。
通信を行う際のアクセス元(発送元の住所)とアクセス先(発送先の住所)を特定する役割を担います。

2進数32ビット(8ビット×4つのブロック)にして表します。

IPv4とIPv6

IPアドレスはネットワーク上のPCやスマートフォンなどを識別するための番号です。そのため、他の機器と同じIPアドレスが割り当てられてしまと、正しい通信ができなくなることがあります。
IPアドレスは2進数の32ビットなので、全部で2の32乗、つまり約43億通りあります。
※ この32ビットの2進数で構成されるIPアドレスはIPv4といいます

しかし、現代ではPCやスマートフォンを1人で複数台所有することも珍しくなく、世界人口も約80億人を超えています。43億個のIPアドレスでは足りません。

そこで、IPアドレスの数不足を解消するために、128ビットに拡張子したIPv6という新バージョンが開発されました。しかし、実際はまだ多くのネットワークがIPv4(32ビットのIPアドレス)でやりくりができているので、IPv6はあまり使われていません。
詳しくはグローバルIPアドレスとプライベートIPアドレスの章で説明します。

IPアドレスの構造と区切り方

ネットワーク部とホスト部

IPアドレスは「どのネットワーク(LAN)に接続しているか」「どのコンピュータや通信機器が接続されているか」をはっきりさせる必要があります。そのため、2進数32ビットはただの数字の並びではなく、上位桁のビットにネットワークアドレス(ネットワークを区別するための番号)、下位桁のビットにホストアドレス(特定の個体を識別するための番号)が割り当てられています。

引用:https://news.mynavi.jp/techplus/article/networksyosinsya-8/

では、そのIPアドレスの中でどこまでがネットワーク部で、どこからがホスト部なのか
この区切り方を決めることで、IPアドレスを整理整頓し、効率よく使うことができるようになります。

このIPアドレスのネットワーク部とホスト部を見分ける仕組み」として大きく2つの方法があり、それぞれ「アドレスクラス」と「サブネットマスク」です。

アドレスクラス

ネットワーク部とホスト部の分け方を決めるために、当初は「クラス制」というルールが使われていました。
このルールでは、IPアドレスを「クラスA」「クラスB」「クラスC」の3つのクラスに分類します。

ネットワークの規模や接続するホスト数に応じて、どのクラス帯のIPアドレスを使うかを決めることができます。

例えば、ホスト数が多いネットワークではホスト部のビット数を多くしてネットワーク部を少なくしたり、ホスト数が少ないネットワークではホスト部のビットを減らしてネットワーク部を多くする、といった具合です。


クラスDとEもありますが、それぞれが特殊な用途で使われます。(Dがマルチキャスト、Eが研究用)

しかし、インターネットの発展とともに、次のような問題が発生しました。

  • クラスAは接続できるホストが約1,600万あり、企業には持て余す。
  • 逆にクラスCは254しかなく、企業には足りない。

結果として、中間のクラスBのIPアドレスが集中して使われ、IPアドレスの枯渇が起きました。

また、クラスBは約6万5千のホストを接続できますが、実際は6万5千を接続することはあまりないため、クラスBのネットワーク部が足りず、ホスト部で無駄が生じるという非効率さも問題視されました。

そこで、必要に応じて柔軟にネットワーク部の長さを決められるようにするために登場したのが「サブネットマスク」です。

サブネットマスク

こちらの文章[1]がわかりやすかったので、引用させていただきます。

「ネットワーク部のビット数を自由に決めて、組織の規模に合ったアドレス範囲を割り当てたい」という考えで生まれたのが「クラスレス」です。

「クラスレス」の考えを実現するには、先頭のビット列によってクラス、つまりネットワーク部とホスト部の境界が決まる、という考えを捨てる必要があります。そのためには、IPアドレスとは別に、ネットワーク部とホスト部の境界を判断する方法が必要になります。

アドレスのネットワーク部とホスト部のそれぞれを何ビットとするかを表記し、それらの境界を示す方法が「サブネットマスク」です。

引用元:https://news.mynavi.jp/techplus/article/networksyosinsya-9/

サブネットマスクでは、ネットワーク部に1、ホスト部に0を用いて、Pアドレスのどこまでがネットワーク部で、どこからがホスト部かを判別します。

例えば、サブネットマスクが 255.255.255.0 の場合、
これは2進数で 11111111.11111111.11111111.00000000 となり、
上位24ビット(1の部分)がネットワーク部、下位8ビット(0の部分)がホスト部を示します。

また、サブネットマスクはネットワークを分割する役割を持っています。

ネットワークの分割

例えば、ホスト部が12ビットのIPアドレスがあるとします。ネットワーク部は20ビット、実際に接続できるホスト数は2¹²-2で4094です。

しかし、企業などでは4094台をすべて1つの巨大なネットワークにすることはほとんどなく、部署ごと・建物ごと・用途ごとなどに分割してネットワークを分けるのが一般的です。そこで、サブネットマスクを使ってネットワークを複数の小さなネットワーク(=サブネット)に分割すればセキュリティを柔軟に設定できたり管理がしやすくなったりします(部署ごとにIP範囲を分ける等)。

例として、ホスト部12ビットのネットワークのうち、4ビット分をホスト部からネットワークアドレスとして流用することを考えます。
このとき、ネットワーク部は元のネットワーク部20ビット + サブネット部4ビットで24ビットとなります。ホスト部は残りの8ビットで、接続できるホスト数は2⁸-2=254台です。

ホスト部から4ビットをサブネット部として流用することにより、1つの大きなネットワークから254台を接続できるネットワークが2⁴=16グループできたということになります。

グローバルIPアドレスとプライベートIPアドレス

前章のように、サブネットマスクを使えば、ネットワークの規模や用途に応じてIPアドレスを柔軟に分割し、効率よく管理することができます。
しかし、インターネットの急速な普及とともに、そもそも使えるIPアドレスそのものが足りなくなるという問題が発生しました。
これに対応するために、IPアドレスをグローバルIPアドレスプライベートIPアドレスに分けることでIPアドレスの数を節約するという考えが登場しました。

グローバルIPアドレス

インターネット全体で使われるIPアドレスです。データの送受信を世界規模で行うため、同じグローバルIPアドレスは世界に1つしかありません。これによって、世界中のどこからでも正しく通信ができるようになっています。

プライベートIPアドレス

オフィス内や自宅のネットワーク内で利用できるIPアドレスです。自宅やオフィス内に設置されたルータに接続している、他のPCやスマートフォン間の通信に使われます。
同じネットワーク内でIPアドレスが重複していなければOKで、ネットワークが違えば同じIPアドレスが使われていても問題ありません。

例)A社の山田太郎さんのPCのIPアドレスが192.168.1.2で、B社の斉藤二郎さんのPCも192.168.1.2でもOK

では、プライベートIPアドレスはどのようにして割り振られるのか。手動でIPアドレスを設定することもできますが、DHCPを使うのが一般的です。

DHCP

(Dynamic Host Configuration Protocol:動的にホストを設定するプロトコル)

DHCPでは、インターネットに接続するためのIPアドレスなどを自動で割り当ててくれます。自宅やカフェなどのWi-Fiルーターの中にDHCPの機能が搭載されており、スマートフォンをWi-Fiに繋いだとき「このスマホは192.168.1.5ね!」とWi-Fiルーター(=DHCPサーバー)が勝手にIPアドレスを決めてくれます

しかし、プライベートIPアドレスから直接インターネット上のグローバルIPアドレスにアクセスすることはできません。
普段、私たちが自宅からWebサイトを閲覧したりYoutubeを視聴したりできるのは、裏側でプライベートIPアドレスからグローバルIPアドレスに変換する仕組みが動いているからです。
この変換には2つの代表的な方式があり、それぞれ「NAT」と「NAPT」と呼ばれます。

NAT

NATはプライベートIPアドレスとグローバルIPアドレスを一対一で紐づける役割を持ちます。

NAPTとポート番号

NAPTは複数のプライベートIPアドレスを1つのグローバルIPアドレスに変換して、インターネット通信を可能にする技術です。
このとき、「グローバルIPアドレス」と「ポート番号」のセットを使って、家庭内のどの端末がどの通信をしているかを区別します。

例えば、家庭内のPCとスマートフォンからそれぞれYoutubeにアクセスすることを考えます。しかし、家庭にはグローバルIPアドレスは1つしかありません。

このときのグローバルIPアドレスを203.0.113.10と仮定し、NAPTの動きを整理します。

端末 プライベートIPアドレス アプリのポート番号 グローバルIPアドレス(変換後)
PC 192.168.1.2 50000 203.0.113.10:30001
スマートフォン 192.168.1.3 50000 203.0.113.10:30002

上記のように、NAPTでは同じグローバルIPアドレス203.0.113.10を使いながら、異なるポート番号(3000130002)を使って複数の端末(PCやスマートフォン)を区別し、通信を同時に処理できるようにしています。

最後に

サブネットマスクの理解に時間がかかりました。
こういうのはゆっくりでいいので、焦らず一個ずつ積み上げるのが大事ですね。

参考

ChatGPTにたくさんお世話になりました。
https://ascii.jp/elem/000/000/580/580437/
https://nishinatoshiharu.com/fundamental-ipaddress/
https://news.mynavi.jp/techplus/article/networksyosinsya-8/
https://news.mynavi.jp/techplus/article/networksyosinsya-9/
https://optage.co.jp/business/ict/list/detail/detail2411_02.html
https://www.nic.ad.jp/ja/basics/terms/port-number.html
https://www.youtube.com/watch?v=LNcqBWTJqBw

脚注
  1. https://news.mynavi.jp/techplus/article/networksyosinsya-9/ ↩︎

Discussion