はじめに
こんにちは。Tsukasaです!
皆さんはCIDRとかビットはご存じでしょうか?
聞いたことはあるけど、何なのかはよくわからないなんて方も多いのではないのでしょうか。
私自身も聞いたことはありますし、よく目にはしますが、結局のところ何なのかはよくわかっていません。
そのため、今回はCIDRとビットについてまとめてみました!
このブログ記事はあくまでも初心者である私が同じく初心者の方向けに簡単に概念について説明しているものとなります。マニアックな技術的趣向や思想に基づく批判はお控えいただけたらと思います。
CIDRとは
IPアドレスのネットワーク部とホスト部の境界を柔軟に指定し、ネットワークの分割や経路情報の管理を効率化する技術および表記法です。
読み方は「サイダー」です。
因みに私は「あ~あのシュワシュワした炭酸ね!」と言ったら大滑りしたので、ボケとしてご使用される場合は、ご注意いただき自己責任でお願いいたします。
CIDRが何なのか上記もご参考にしていただけたらと思います。
ビットとは
コンピュータが情報を処理する時の最も小さい単位です。1ビットは、スイッチの「ON(1)」と「OFF(0)」のように、2つのうちどちらかの状態を表します。この0と1の集まりで、すべてのデジタルデータは作られています。
これだけではわからないと思うので、実際の例を見ていきましょう。
ビットを学習したことのある方で、ビットを「ON(1)かOFF(0)のスイッチ」と習って、「2ビット=ONが2個ある状態?」と勘違いしてしまうケースがよくあります。
正しくは、ビットとは「使える電球(スイッチ)の『個数』」のことです。
手元に、ON(点灯)とOFF(消灯)ができる電球が2個あるとイメージしてください。この2個の電球で、何パターンの「合図(シグナル)」が作れるでしょうか?
パターン①: 【電球1】消灯・【電球2】消灯(00)
パターン②: 【電球1】消灯・【電球2】点灯(01)
パターン③: 【電球1】点灯・【電球2】消灯(10)
パターン④: 【電球1】点灯・【電球2】点灯(11)
このように、「電球が2個(2ビット)あると、全部で4通りの状態を表現できる」という意味になります。
「ONが2個」というのは、この中のパターン④(両方ONの状態:11)のことだけを指しているんですね。
電球の数が増えるほど、より多くの複雑な数字(IPアドレス)を表現できるようになります。
2ビットの例で見ましたが、今度は違うビット数で見ていきましょう。
1ビットの場合
1ビット(電球1個)= 2パターン
電球が1個しかないので、できる合図は2通りだけです。
パターン①: 【電球1】消灯(0)
パターン②: 【電球1】点灯(1)
3ビットの場合
3ビット(電球3個)= 8パターン
電球が3個になると、桁の組み合わせが増えて全部で8通り作れるようになります。
(※右端の数字から順に1を足していくイメージです)
パターン①: 【電球1】消灯・【電球2】消灯・【電球3】消灯(000)
パターン②: 【電球1】消灯・【電球2】消灯・【電球3】点灯(001)
パターン③: 【電球1】消灯・【電球2】点灯・【電球3】消灯(010)
パターン④: 【電球1】消灯・【電球2】点灯・【電球3】点灯(011)
パターン⑤: 【電球1】点灯・【電球2】消灯・【電球3】消灯(100)
パターン⑥: 【電球1】点灯・【電球2】消灯・【電球3】点灯(101)
パターン⑦: 【電球1】点灯・【電球2】点灯・【電球3】消灯(110)
パターン⑧: 【電球1】点灯・【電球2】点灯・【電球3】点灯(111)
このようにビットは電球がいくつあって、桁の組み合わせがいくつ作ることができるのかということになります。
| ビット数 | パターン | 計算式 |
|---|---|---|
| 1ビット | 電球1個2通り | ($2^1$) |
| 2ビット | 電球2個4通り | ($2^2$) |
| 3ビット | 電球3個8通り | ($2^3$) |
| 8ビット | 電球8個256通り | ($2^8$) |
IPアドレスのルール(ネットワークの世界)
それではIPアドレスは何ビットまであるのでしょうか?
少し前までは32ビットと言われていました。
32ビットとは電球32個分で、約43億個のIPアドレスを作ることができます。
我々がよく見る「192.168.1.1」といった形式ですね。
これをIPv4と言います。
しかし近年では32ビットでは足りなくなってきました。
IPv4が作られた1980年代前半、世界の人口は約45億人でした。「一人1台使っても余るだろ」と思われていたのですが、インターネットの爆発的普及に加え、スマホ、PC、スマート家電、IoT機器(監視カメラやセンサーなど)が登場し、「一人で何台ものIPを使う時代」になりました。その結果、2010年代にはついに世界のIPv4アドレスが底をついてしまいました(IPアドレス枯渇問題)。
現在では128ビットまで増えました。
128ビットとは電球128個分で約340澗(かん)個のIPアドレスを作ることができます。
※数字が大きすぎて、全くイメージができません。
これをIPv6と言います。
サブネットマスクとは
突然ですが、ここでサブネットマスクについて整理します。今回の記事でこれまでの文章の中でサブネットマスクという言葉は一度も出てきませんでしたが、CIDRとビットを理解する上で必要となる内容です。
サブネットマスクとは、IPアドレスのネットワーク部とホスト部の境界線を決める数値です。同じネットワークにいるか判断する、通信範囲を決める、使える機器の数を計算するために使います。
何故サブネットマスクが必要なのか?
IPアドレス(32個の電球)は、必ず以下の2つの部分に分かれています。
※今回はマンションで例えています。
ネットワーク部(マンション名): 所属しているグループの住所
ホスト部(部屋番号): そのグループの中での個人の番号
「じゃあ、32個の電球のどこからどこまでがマンション名で、どこからが部屋番号なの?」という境界線(仕切り板)をコンピュータに示すために使われてきたのが、「サブネットマスク」という道具です。
「え、CIDRを学びたいのにサブネットマスク?」と思うかもしれません。
実は、CIDRとは『このサブネットマスク(仕切り板)の扱い方を進化させた最新のルール』のことなんです。
現代のCIDRを理解するために、まずは昔からある「仕切り板(サブネットマスク)」の仕組みを見ていきたいと思います。その上で必要となるのが「255.255.255.0」というIPアドレスです。
登場人物紹介:一番よく見かける「255.255.255.0」
ネットワークの設定画面などで、IPアドレスのすぐ下に「255.255.255.0」という数字を見たことはありませんか?
これこそが、世の中で最もよく使われているサブネットマスクの代表例です。
「急に255とか0とか謎の数字が出てきた…」「IPアドレス(192.168.5.2)を2進数に直したものがこれなの?」と混乱するかもしれませんが、まったく別の役割を持っています。
IPアドレス(例: 192.168.5.2): あなたの部屋の「住所」そのもの
サブネットマスク(255.255.255.0): どこまでが住所かを指定する「定規(仕切り板の位置を指定する書面)」
では、なぜ 255.255.255.0 という数字が「仕切り板」の役割を果たすのでしょうか?
「255.255.255.0」の中身を解剖してみる
この数字の謎を解くカギは、やっぱり2進数(電球のON/OFF)にあります。
255.255.255.0 を電球(2進数)に翻訳してみると、こうなります。
1ブロック目 2ブロック目 3ブロック目 4ブロック目(最後)
255 . 255 . 255 . 0
(11111111) . (11111111) . (11111111) . (00000000)
数字の意味は、そのままコンピュータへの命令になっています。
255(電球8個全ON) ➔ 「ここは固定!マンション名にする!」
0(電球8個全OFF) ➔ 「ここは自由!部屋番号にする!」
なんで一番最後だけ「0」なの?
もし最後も 255(全ON)にしてしまうと、電球32個すべてが「マンション名(固定)」になってしまい、住人が自由に使える部屋番号(ホスト部)が0個になって誰も住めなくなってしまいます。
一番最後をあえて 0(電球8個分が自由枠) にしておくことで、0〜255(実質1〜254)の部屋番号を作ることができ、「1つのマンション内で250台くらいの機器を繋ぐのにちょうどいい広さ」が生まれるのです。
上から重ねてぶった切る(仕切り板の仕組み)
コンピュータは、IPアドレスの上にこの 255.255.255.0(サブネットマスク)を重ね合わせることで、どこに仕切り板を引けばいいかを判断します。
【IPアドレス】 11000000.10101000.00000101 | 00000010 (192.168.5.2)
|||||||| |||||||| |||||||| | ||||||||
【サブネットマスク】 11111111.11111111.11111111 | 00000000 (255.255.255.0)
└────────── 1のエリア ─────────┘|└── 0のエリア ──┘
▲ここが仕切り板!
(24ビット目の「1」のすぐ右隣)
コンピュータは、サブネットマスクの「1」が途切れたその瞬間(24ビット目の1の直後)に仕切り板を下ろします。
「1」が並んでいるエリア ➔ マンション名(固定)
「0」が並んでいるエリア ➔ 部屋番号(自由枠)
これをいつもの10進数に戻すと:
ネットワーク部(固定): 192.168.5.
ホスト部(自由枠): .2
つまり、255.255.255.0 というサブネットマスク(仕切り板)を使っているときは、最後の数字(2)だけが部屋番号になるというわけです。
補足
255.255.255.0 はあくまで「超定番のサンプル(一例)」です。
ここまで解説してきた 255.255.255.0 は、教科書や設定画面で最もよく使われる「わかりやすいサンプル(一例)」にすぎません。
ここで「192.168.5.2 にはどこにも『0』なんてないのに、なんで0の個数で台数が決まるの?」と思った方もいるかもしれません。
実は、設定画面で入力する2つの数字には明確な役割の違いがあります。
IPアドレス(192.168.5.2)
役割:「あなたの機器の住所(部屋番号)」
数字の意味:ただの個別の識別番号です(10進数)。
サブネットマスク(255.255.255.0)
役割:「どこまでが自由枠(部屋番号)かを示す定規」
数字の意味:2進数になおした時の「0の個数」で、全体で何部屋作れるかを指示しています。
つまり、「何台繋げるか」を決めているのはIPアドレス側ではなく、相棒であるサブネットマスク側の「0の個数」なんです。作れる部屋の数は、「2を0の個数分だけ掛け算する($2^{\text{個数}}$)」という計算で決まります。255.255.255.0(0が8個)
計算: $2^8 = 256$ パターン(※ルールの決まりで2つ引いて 254台)
用途: 家庭や小規模オフィス向け
255.255.0.0(0が16個)
計算: $2^{16} = 65,536$ パターン(※ルールの決まりで2つ引いて 65,534台)
用途: 大きな会社や学校向け
実際のネットワーク構築では、繋ぎたい機器の台数に合わせて「サブネットマスクの0の個数(=仕切り板の位置)」を自由に変えて使います**。この「仕切り板の位置を自由に変える」という考え方こそが、次に解説する CIDR(サイダー) の本質です
その上でCIDRとは
ここまでで、「サブネットマスク(仕切り板)を使えば、ネットワークの広さ(部屋数)を自由に変えられる」ということがわかりました。ですが、従来の表記(255.255.255.0 など)には1つ大きな問題がありました。
それは「ちまちま 255.255.255.0 と書くのが長くてめんどくさい!!」ということでした。
そこで登場したのが CIDR(Classless Inter-Domain Routing / サイダー) です。
CIDRとは、一言でいうと「サブネットマスク(仕切り板)の場所を『スラッシュ(/)+数字』だけでスマートに書く新しいルール」のことです。
CIDR表記(CIDRブロック)の読み方
CIDRでは、IPアドレスの後ろに /24 や /16 といった表記(CIDR表記)をつけます。
例: 192.168.5.2/24この /24 という数字、一体何を表しているか覚えていますか?そう、先ほど解剖したサブネットマスク 255.255.255.0 の「1(仕切り板より左側)が並んでいる個数」そのものです!
【255.255.255.0 を2進数にした姿】
11111111 . 11111111 . 11111111 | 00000000
└────────── 1が「24個」─────────┘
以前の書き方(サブネットマスク)
:IPアドレス: 192.168.5.2 / サブネットマスク: 255.255.255.0
現代の書き方(CIDR表記)
:192.168.5.2/24
「左から24ビット目(24個目の1)のところに仕切り板を引いてね」という意味を、たった /24 の2文字でスマートに表現できるようになったのです。自由自在に仕切り板を動かせるのがCIDRの真骨頂です。CIDRのすごいところは、ただ表記が短くなっただけではありません。「仕切り板の位置」を1ビット単位で自由自在に動かせるようになったことです。「スラッシュの後の数字(ネットワーク部)」と「残った0の個数(ホスト部)」の関係をいくつか見てみましょう。
| CIDR表記 | 1の数(固定) | 0の数(自由枠) | 使える機器の数($2^{\text{個数}} - 2$) | 主な用途 |
|---|---|---|---|---|
| /16 | 16個 | 16個 | $2^{16} - 2 =$ 65,534台 | 大きな会社、AWSのVPC全体 |
| /24 | 24個 | 8個 | $2^8 - 2 =$ 254台 | 家庭、オフィスの1フロア、AWSのサブネット |
| /28 | 28個 | 4個 | $2^4 - 2 =$ 14台 | 小さなシステム区画 |
※「$-2$」をする理由
作れる番号のうち、「最初(先頭)」と「最後(末尾)」の2つの番号は特別な役割で予約されているため、パソコンなどの機器には設定できないからです。
最初の番号(例: .0) ➔ ネットワーク全体の看板(ネットワークアドレス)
最後の番号(例: .255) ➔ 全員へ一斉送信するための連絡網(ブロードキャストアドレス)
※ AWSのサブネットの場合の注意
上の表の「使える機器の数($2^{\text{個数}} - 2$)」は、一般的なネットワーク理論での計算式です。
しかし、AWSのVPC/サブネットでは、この計算に加えてさらに3つのIPアドレスが予約されるため、実際に使える台数はこれより少なくなります。
AWSは各サブネットで、先頭4つ+末尾1つの、合計5つのIPアドレスを予約しています。
そのため実際に使えるIPは251個になります。
スラッシュの後の数字が小さくなるほど、部屋数(使えるIP)は増えます。
/16 ➔ 固定部分が少ないので、自由枠(0)が16個も残る(約6.5万台)
/28 ➔ 固定部分が多いので、自由枠(0)が4個しか残らない(14台)
AWSとの関係性
その上でAWSとの関係性について見ていきたいと思います。
AWSにおけるCIDRはVPC作成時とサブネット作成時に使用します。
VPC作成時にこの画面を見たことのある方も多いと思います。
ここでVPCのCIDRを決めることができます。
VPCのCIDRは10.0.0.0/16を使うことが多いです。
これは16ビットを自由に使えるので、使えるIPの数は約6.5万個になります。

サブネットを作成する時もCIDRを決める必要があります。
サブネットのCIDRはVPCよりも小さくする必要があります。
理由としてはもしVPCで指定した/16をサブネットで指定してまうと、1つのサブネットだけで/16(約6.5万個のIP)全てを使うことになってしまいます。
サブネットは基本的に複数作ることが多いので、他のサブネットにもIPを振り分ける必要があります。
そのため、サブネットでCIDRを作成する時は/16ではなく/20や/24を指定することが必要になります。
そもそも何でVPCやサブネットにIPを振り分けるのか?
CIDRやビットが何なのかはわかりましたが、個人的に何のためにVPCやサブネットにIPを振り分けるのかが疑問に思ったので、まとめてみました。
正直今までハンズオンとかで構築する時にそこまで考えたことがなかったので、いい機会かと思います。
1. サーバーたちが「迷子」にならず通信できるようにするため
現実の世界で「東京都」や「新宿区」などの住所がないと、郵便屋さんが荷物を届けられないのと同じです。
AWSの上にEC2(サーバー)やRDS(データベース)をぽんぽん配置したとき、それぞれの機器に「あなたは 10.0.1.5 ね」「あなたは 10.0.2.10 ね」と整然としたIPアドレス(住所)を割り振っておくことで、ルーター(通信の案内人)が迷うことなくデータを目的地へ届けることができるようになります。
2. 「見せたい部屋」と「隠したい部屋」を分けるため(セキュリティ)
サブネットでIPアドレスの範囲(区画)を分ける一番の目的は、セキュリティの壁を作ることです。
パブリックサブネット(インターネットに公開する区画:例 10.0.1.0/24)
→Webサイトなど、世界中からのアクセスを許可する部屋。
プライベートサブネット(社外から絶対隠す区画:例 10.0.2.0/24)
→顧客データなどが入ったデータベースを置く部屋。
「10.0.1.X のグループは外と通信して大丈夫。でも 10.0.2.X のグループは外からの通信を全部弾く」というルール(ルーターやセキュリティグループの設定)を適用するために、あらかじめIPアドレスのグループ(サブネット)を分けておく必要があるのです。
3. 他のネットワーク(社内LANなど)と安全に繋ぐため
会社のオフィスや自宅のパソコンから、AWS上のVPCへ安全にアクセス(VPN接続など)したいケースがよくあります。
このとき、AWS側のVPC(例:10.0.0.0/16)と、会社のオフィス(例:192.168.1.0/24)であらかじめ綺麗にIPアドレスの範囲を分けて定義(振り分け)しておかないと、通信が衝突して繋がらなくなってしまいます。
また、VPCのCIDRを/16にしてIPを約6.5万個作成した場合、そのVPC内で使用できるIPは最大6.5万個になります。
その6.5万個を各サブネットに振り分けて(サブネット作成時にCIDRを指定する)IPを作成します。
================================================================================
【 VPC(全体の敷地): 10.0.0.0/16 】 ─── [ 合計:65,536個のIP空間 ]
================================================================================
┌────────────────────────────────────────────────────────────────────────┐
│ サブネット1 (Web用) : 10.0.1.0/24 │
│ ─── [ 切り出した枠:256個 ] │
│ │
│ [EC2] 10.0.1.10 [EC2] 10.0.1.11 [ALB] 10.0.1.20 │
└────────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────────┐
│ サブネット2 (DB用) : 10.0.2.0/24 │
│ ─── [ 切り出した枠:256個 ] │
│ │
│ [RDS (DB)] 10.0.2.15 │
└────────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────────┐
│ 未割り当てのエリア(まだ使っていないVPCの空き土地) │
│ ─── [ 残りの枠:65,024個 ] │
│ │
│ ※ 今後「10.0.3.0/24」などを自由に追加作成できるスペース │
└────────────────────────────────────────────────────────────────────────┘
================================================================================
※ここではIPの振り分けについての説明であるため、サブネットで使えるIPの数は256個と表記しています。
実際は251個になります。
まとめ
ビット(電球):
ON/OFFができる「電球の個数」。個数が増えるほど表現できるIPアドレス(パターン)が増える
CIDR(/数字):
「ここから先が自由枠」を示す仕切り板の位置を、/24 や /16 などの短字で表すスマートなルール
VPCとサブネットの関係:
VPCという「巨大なパイ(/16=約6.5万個)」から、必要な分だけサブネットという「ピース(/24=256個など)」を切り出して分配する仕組み
IPを振り分ける理由:
住所を明確にし、外に見せる区画と隠す区画(セキュリティ)を分けて安全に通信するため
最後まで読んでいただきありがとうございました!
