IPv4アドレスの構造(32bit、オクテット表記)を理解する
サブネットマスクの役割と、ネットワークアドレス/ホストアドレスの考え方を理解する
CIDR表記を理解する
サブネッティング(ネットワークの分割)の考え方と計算方法を身につける
前回、TCP/IPモデルに従ってカプセル化が行われ、通信が成立していく全体の流れを俯瞰しました。今回からはその全体像のうちインターネット層にフォーカスし、1つずつ詳しく学んでいきます。
まずは、経路選択(ルーティング)の土台となる IPアドレス です。IPアドレスの構造を正しく理解していないと、この先のARP、スイッチング、ルーティングの理解もすべて曖昧になってしまうため、本シリーズの中でも特に重要な回になります。
IPアドレスの計算には2進数の理解が不可欠です。「2進数なんて聞いたこともない」という方でも大丈夫です。まずは、普段私たちが使っている10進数の仕組みから振り返ってみましょう。
私たちが普段使っている数字(10進数)は0〜9の10種類の数字を使い、桁が1つ上がるごとに10倍になるという仕組みで成り立っています。たとえば、 192 という数字は以下のような意味を持っています。

「1の位」「10の位」「100の位」のように、桁ごとに「10倍していった重み(値)」が割り当てられており、各桁の数字とその重みを掛けて足し合わせたものが数字全体の値になっています。
これは普段当たり前に使っている仕組みなのであらためて意識することは少ないかもしれませんが、この「桁ごとに重みがあり、それを足し合わせる」という考え方こそが、この後学ぶ2進数を理解するカギになります。
2進数(Binary) は10進数と考え方は同じですが、使う数字が 0と1の2種類だけで、桁が1つ上がるごとに 2倍 になるという仕組みです。
コンピュータの世界では、電気信号の「ON(1)」「OFF(0)」の2つの状態だけで情報を表現するため、この2進数が使われています。
10進数が「1の位・10の位・100の位・…(10倍ずつ増える)」だったのに対し、2進数は「1の位・2の位・4の位・8の位・…(2倍ずつ増える)」という桁の重みになります。

たとえば 1100 という2進数があったとします。先ほどの「桁ごとの重み」に当てはめて考えると、以下のようになります。

つまり、2進数 1100 は10進数の 12 と同じ値です。
ログインすると、進捗を保存できます。
← 0.4 IPとサブネッティング に戻る「1が立っている桁の重みを足し算する」
これが2進数から10進数への変換の基本ルールです。0が立っている桁は足し算に加える必要がありません。
逆に10進数を2進数に変換する場合は、「その数字が、どの桁の重みの組み合わせでできているか」を大きい桁から順に当てはめていきます。
たとえば 13 を2進数に変換してみましょう。
13は 8 の桁を含むか? → 13 - 8 = 5 が残る(含む:1)
5は 4 の桁を含むか? → 5 - 4 = 1 が残る(含む:1)
1は 2 の桁を含むか? → 1 - 2 = マイナスになるため含まない(0)
1は 1 の桁を含むか? → 1 - 1 = 0(含む:1)
含む桁を1、含まない桁を0として並べると、1101 となり、これが13を2進数で表したものです(先ほどの変換ルールで検算すると、8+4+0+1=13となり、一致します)。
IPアドレスの計算でこの先扱うのは、8bit(8桁)分の2進数⇔10進数の変換 です。8桁分の重みを一覧にすると、以下のようになります。

この表は、桁が1つ増えるごとに値が2倍になっていく(1→2→4→8→16→32→64→128)という、先ほど説明した「2進数の桁の重み」を、8桁分そのまま並べたものです。
たとえば 11000000 という2進数は、先ほどのルール通り「1が立っている桁の重みを足し算」すればよいので、以下のように計算できます。

11000000 は10進数で 192 です。この「該当するbitの値を足し算する」感覚に慣れておくと、この後のサブネッティング計算がスムーズになります。慣れないうちは、本記事のこの表を都度見返しながら、焦らず1桁ずつ計算してみてください。
IPアドレスは TCP/IPモデルのインターネット層で扱われる情報です。インターネット層は「このデータをどのネットワーク宛てに送ればよいか」を判断する役割を持っており、その判断材料となるのがIPアドレスです。

IPv4アドレスは 32bit の情報であり、人間が読みやすいように 8bitずつ4つに区切り、それぞれを10進数に変換してドットで繋いだ形式(ドット付き10進表記) で表現されます。

この8bit区切りの1つ1つを オクテット(octet) と呼びます。IPv4アドレスは第1オクテット〜第4オクテットの4つで構成されている、と覚えておいてください。
サブネットマスクの説明に入る前に、そもそも「なぜIPアドレスを分割する必要があるのか」を、身近な例で考えてみましょう。
私たちの住所は、たとえば「東京都渋谷区〇〇1-2-3」のように、大まかな地域を示す部分(都道府県・市区町村) と、その地域の中での具体的な場所を示す部分(番地) の組み合わせでできています。
郵便局員が手紙を配達する場面を想像してみてください。全国から集まった手紙を仕分けるとき、郵便局員は最初から「日本全国のすべての家の場所」を1軒ずつ覚えているわけではありません。
まずは「東京都渋谷区」宛ての手紙をまとめて渋谷区の配達拠点に送り、その拠点まで届いて初めて、「では渋谷区の中の、1-2-3という番地はどこか」を判断すればよいのです。
もし住所に「地域」と「番地」の区別がなく、ただの数字の羅列だったとしたら、郵便局員は全国のすべての住所を1つ残らず記憶していなければ、手紙を仕分けることすらできなくなってしまいます。
「大まかな地域で絞り込み、その中で具体的な場所を特定する」という2段階の仕組みがあるからこそ、膨大な数の宛先を、効率よく処理できる わけです。
IPアドレスの世界でもまったく同じ考え方が使われています。
IPアドレスは
「どのネットワーク(=地域)に属しているか」を示すネットワーク部と
「そのネットワークの中の、どの機器(=番地)か」を示すホスト部
に分かれています。
ルータは郵便局員が地域単位で手紙を仕分けるのと同じように、まずネットワーク部を見て大まかな転送先(ネットワーク)を判断し、そのネットワークに到達して初めて、ホスト部を見て具体的な機器を特定します。この考え方は、第5回「ルーティング」で改めて詳しく扱います。

では、1つのIPアドレスの中で「どこまでが地域(ネットワーク部)でどこからが番地(ホスト部)なのか」はどうやって決まっているのでしょうか。この境界を示すのが、サブネットマスク(Subnet Mask) です。
IPv4アドレス32bitはそのすべてが同じ意味を持っているわけではありません。
「どのネットワークに属しているか」を示す部分(ネットワーク部)と
「そのネットワーク内のどの機器か」を示す部分(ホスト部)
に分かれています。
サブネットマスクはIPアドレスと同じ32bitの情報で
「1が並んでいる部分=ネットワーク部」
「0が並んでいる部分=ホスト部」を表します。

この例では
先頭24bitがネットワーク部(192.168.1.0というネットワークに属する)
残り8bitがホスト部(そのネットワーク内で最大256個の機器を識別できる)
ということになります。
先ほどの「先頭24bitがネットワーク部」という情報を 255.255.255.0 のようにサブネットマスクとして毎回書くのは冗長です。
そこで、ネットワーク部のbit数だけを /24 のようにスラッシュ表記する方法があり、これを CIDR表記(Classless Inter-Domain Routing表記) と呼びます。
例えば
192.168.1.10 255.255.255.0
と
192.168.1.10/24
は同じです。
また、資料などに記載する際はCIDR表記が一般的なため、サブネットマスクとの対応表を一部記載します。

※CIDRは本来 /0 〜 /32 まで存在しますが、下表はそのすべてを網羅したものではなく、CCNAのハンズオンで頻繁に登場する範囲(/24〜/30)を代表的な例として抜粋したものです。
上の表を見ると、たとえば /24(ホスト部8bit)は 2^8 = 256 通りの組み合わせがあるはずなのに、割り当て可能ホスト数は256ではなく254になっています。
これは256通りのうち、先頭のアドレスと末尾のアドレスの2つが機器には割り当てられない特別な意味を持っているためです。
192.168.1.0/24 を例に具体的に見てみましょう。
このネットワークでは、ホスト部(第4オクテット)が 00000000(10進数で0)から 11111111(10進数で255)までの256通りを取ることができます。

ネットワークアドレス(ホスト部がすべて0)は特定の機器を指すアドレスではなく、「192.168.1.0/24というネットワークそのもの」を指し示すために予約されたアドレスです。
次回学習しますが、ルーティングテーブルの中で「宛先ネットワーク」として登場するのはまさにこのアドレスです。
ブロードキャストアドレス(ホスト部がすべて1)は「このネットワークに属する全機器宛て」を意味する特殊な宛先アドレスです。
特定の1台ではなく、ネットワーク内のすべての機器に同時にデータを送りたいときに使われます(このブロードキャストの仕組みは、後の回で学ぶARPの動作の中で実際に登場します)。
このように、256通りのうち先頭と末尾の2つは「特定の機器」を指すものではなく、それぞれ別の役割のために予約されているため、実際に機器へ割り当てられるアドレスは 256 - 2 = 254台 分になるというわけです。
この考え方は/24に限らず、/25や/30など他のCIDRでも同様です(各ネットワークの範囲の中で、先頭がネットワークアドレス、末尾がブロードキャストアドレスになります)。

IPアドレスにはグローバルIPアドレス と プライベートIPアドレス の2種類があります。なぜこの2種類が必要なのか、まずは理由から見ていきましょう。
IPv4アドレスは32bitの情報でできているため、その組み合わせの総数は約43億個(2^32個)に限られています。一見多いようですが、世界中のPC・スマートフォン・IoT機器などの数を考えると、すべての機器に1つずつ、世界で重複しない番号を割り当てるには到底足りません。
そこで実際には、以下の2種類のIPアドレスを使い分けています。
グローバルIPアドレス:インターネット上で通信するために使う、世界で一意(重複しない)のIPアドレス
プライベートIPアドレス:家庭や会社など、閉じたネットワークの中だけで使う、自由に使い回せるIPアドレス
家庭や会社のLAN内の機器同士はインターネットに直接顔を出して通信しているわけではなく、多くの場合ルータなどの機器を経由して必要なときだけインターネット(グローバルIPアドレスの世界)とやり取りしています。
そのため、LAN内の機器1つ1つにまで貴重なグローバルIPアドレスを割り当てる必要はないというのがプライベートIPアドレスが存在する理由です。
LAN内のプライベートIPアドレスを使って実際にインターネット(グローバルIPアドレスの世界)と通信できるようにする仕組みとして、NAT(Network Address Translation) という技術があります。
プライベートIPアドレスとグローバルIPアドレスを相互に変換するこの仕組みについては、別の回で詳しく扱います。

身近な例で考えてみましょう。日本国内の郵便物には同じ住所を持つ家が2軒あってはいけません。 もし東京都渋谷区〇〇1-2-3という住所の家が2軒存在してしまったら、郵便局員はその住所宛ての手紙をどちらの家に届ければよいか判断できなくなってしまいます。
インターネットも同じです。世界中のルータは「このグローバルIPアドレス宛てのデータはこの方向に転送すればよい」という情報をもとにデータを届け先まで運んでいます。
もし同じグローバルIPアドレスを持つ機器が世界に2台存在してしまうと、ルータはどちらに届ければよいか判断できず、データが正しく届かなくなったり、まったく関係ない方の機器に届いてしまったりする可能性があります。
だからこそ、グローバルIPアドレスは世界で重複しないように厳格に管理されている のです。

一方でプライベートIPアドレスは「あくまで、その閉じたネットワークの中だけで通用する番号」 であるため、他のネットワークと重複しても問題ありません。
これは会社の「内線番号」に似ています。A社にもB社にも「内線101」という番号の社員がいたとしても、それぞれの会社の中でしか使われない番号なので混乱は起きません。
外部(インターネット)から連絡する際はそれぞれの会社の「代表電話番号(=グローバルIPアドレスに相当)」にかけて、その先で内線101(=プライベートIPアドレスに相当)に取り次いでもらうというイメージです。
実際、世界中の非常に多くの家庭やオフィスで 192.168.1.1 のようなプライベートIPアドレスがルータに使われていますが、それぞれのネットワークが独立して閉じているため、何の問題もなく共存できています。

プライベートIPアドレスは、以下の範囲から誰でも自由に使うことができます。

かつてIPv4アドレスは先頭bitのパターンによって A〜E の「クラス」に分類され、クラスごとにデフォルトのサブネットマスク(クラスA=/8、クラスB=/16、クラスC=/24)が決められていました(クラスフルアドレッシング)。
現在はCIDR表記によって自由な単位でネットワークを分割する「クラスレスアドレッシング」が主流であり、実務上クラスを意識する場面はほとんどありません。ただし「なぜプライベートIPアドレスの範囲がこの区切りになっているか」の背景として、クラスの概念を知っておくと理解の助けになります。
サブネッティング(Subnetting) とは、1つの大きなネットワークをより小さな複数のネットワークに分割することです。
たとえば、192.168.1.0/24(254台収容可能)というネットワークを、部署ごとに以下のように分割したいとします。
総務部:30台程度
開発部:60台程度
営業部:14台程度
このとき、254台分の大きなネットワークを1つのまま使うのではなく、必要な台数に応じて小さなネットワークに分割し、無駄なく・かつネットワーク同士を明確に分離して管理する、という考え方がサブネッティングです。

サブネッティングの計算は以下の3ステップで行います。192.168.1.0/24 を「30台程度収容できるネットワーク」に分割する例で確認してみましょう。
30台を収容するには、2^n - 2 ≧ 30 を満たす最小の n を探します。
2^5 - 2 = 30 (30台ちょうど)
2^4 - 2 = 14 (足りない)
→ ホスト部は 5bit 以上必要です。
IPv4アドレスは全体で32bitなので、ホスト部5bitを引いた残りがネットワーク部になります。
32 - 5 = 27
→ CIDRは /27(サブネットマスクは 255.255.255.224)になります。
/27 は、第4オクテットのホスト部が5bitなので、256 ÷ 2^5 = 8 ずつの間隔でネットワークが区切られます。192.168.1.0/24 を /27 で分割すると、以下のようになります。

この中から、総務部には 192.168.1.0/27、開発部には次の区切り(60台必要なので/26以上が必要になる点に注意)、営業部には 192.168.1.32/27 のように、必要な台数に応じてサブネットを割り当てていきます。
サブネッティングの計算は最初は時間がかかっても構いません。本記事の3ステップを繰り返し練習し、手を止めずに計算できるようになるまで反復することをおすすめします。
次回は今回学んだIPアドレス・サブネッティングの知識をもとに、ルータが異なるネットワーク宛てのデータをどう転送するのかを学ぶ 「ルーティング」 を扱います。ここも今回同様、まずは概要と知識の整理を中心に進めます。