はじめに
AWSでVPCやサブネットを設計するとき、避けて通れないのが「CIDR(サイダー)」の理解です。
しかし、いきなりCIDRを学ぼうとしても「ネットワーク部?ホスト部?なにそれ?」となる方も多いのではないでしょうか。
この記事では、IPアドレスの基本中の基本から始めて、最終的にはVPCとサブネットのCIDR設計ができるようになることを目指します。
IPアドレスとは?
インターネット上の「住所」です。あなたの家に住所があるように、ネットワークに繋がる機器(パソコン、サーバーなど)にもそれぞれ住所が振られています。
例:10.0.0.0
4つの数字を「.(ドット)」で区切った形で、それぞれの数字は 0〜255 の範囲です。
なぜ0〜255なのか?
コンピュータは内部ですべてを 2進数(0と1) で扱っています。IPアドレスも実は全体で 32個の0と1の並び です。
10.0.0.0 を2進数にすると↓
00001010 . 00000000 . 00000000 . 00000000
8ビットずつ4つのブロックに分かれていて、この1ブロック(8ビット)を「オクテット」と呼びます。8ビットで表せる最大値が 11111111 = 255 なので、各ブロックは0〜255になるわけです。
グローバルIPアドレスとプライベートIPアドレス
IPアドレスには2種類あります。
| 種類 | 用途 | 特徴 |
|---|---|---|
| グローバルIP | インターネット上で使う | 世界で唯一。重複不可 |
| プライベートIP | 家やオフィスなど閉じた空間で使う | 別のネットワークで使い回せる |
グローバルIPアドレスの数には限界がある
IPv4のIPアドレスは32ビットなので、理論上の総数は以下の通りです。
2³² = 4,294,967,296個(約43億個)
しかし、世界人口は約82億人。さらにスマホ、PC、サーバー、IoT機器などすべてにIPアドレスが必要です。
グローバルIPv4アドレス:約43億個
世界人口だけで: 約82億人
さらにスマホやPCなど: 数百億台
→ 全然足りない!
だからプライベートIPアドレスが重要
RFC 1918 というインターネットの技術仕様書で、以下の3つの範囲が「プライベート専用」として予約されています。
10.0.0.0/8 → 約1,677万個
172.16.0.0/12 → 約104万個
192.168.0.0/16 → 約65,000個
これらはインターネット上では使わないことが世界的に約束されているため、閉じたネットワーク内で自由に使えます。
会社A:社内で 10.0.0.1 〜 10.0.0.100 を使う
会社B:社内で 10.0.0.1 〜 10.0.0.100 を使う
↑ 同じ番号でもOK!別のネットワークだから衝突しない
NAT:1つのグローバルIPを共有する技術
社内の複数の機器が、1つのグローバルIPを共有してインターネットに出ていく仕組みがNAT(Network Address Translation)です。
社内(プライベートIP) インターネット(グローバルIP)
10.0.0.1(Aさんのパソコン)─┐
10.0.0.2(Bさんのパソコン)──┼─→ 203.0.113.1(1個で代表)─→ インターネット
10.0.0.3(Cさんのパソコン)─┘
自宅のWi-Fiルーターもまさにこれと同じことをしています。
それでも限界なのでIPv6が登場
IPv4では根本的に足りないので、IPv6(128ビット)という新しい仕組みが作られました。
IPv4:2³² = 約43億個
IPv6:2¹²⁸ = 約340澗個(340兆の1兆倍のさらに1兆倍)
IPv6なら地球上のすべての砂粒にIPアドレスを振っても余るレベルです。現在はIPv4とIPv6が共存している移行期にあります。
ネットワーク部とホスト部
IPアドレスは2つの役割に分かれています。現実の住所にたとえるとわかりやすいです。
東京都渋谷区 / 1丁目2番3号
↓ ↓
ネットワーク部 ホスト部
(どの町か) (その町のどの家か)
- ネットワーク部:「どのネットワーク(グループ)に属しているか」を示す部分
- ホスト部:「そのネットワークの中のどの機器か」を示す部分
CIDRとは?
CIDR(Classless Inter-Domain Routing)とは、IPアドレスとプレフィックス長を 「IPアドレス/数字」 という形式で表す方法です。
例:10.0.0.0/16
「/16」の意味
IPアドレスの32ビットのうち、先頭から何ビットがネットワーク部かを示す数字です。
10.0.0.0/16 の場合
00001010.00000000 | 00000000.00000000
←── 16ビット ──→ ←── 16ビット ──→
ネットワーク部 ホスト部
- /16 なら先頭16ビットがネットワーク部、残り16ビットがホスト部
- /20 なら先頭20ビットがネットワーク部、残り12ビットがホスト部
- /24 なら先頭24ビットがネットワーク部、残り8ビットがホスト部
ホスト部のビット数が多いほど、そのネットワーク内に置ける機器の数が増えます。
ホスト部が16ビット → 2¹⁶ = 65,536個のアドレス
ホスト部が12ビット → 2¹² = 4,096個のアドレス
ホスト部が 8ビット → 2⁸ = 256個のアドレス
なぜAWSのVPCは 10.0.0.0/16 で切ることが多いのか?
結論から言うと、以下の理由です。
- RFC 1918の3択から選ぶ必要がある(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
- その中で最もリッチにIPを使えるのが 10.0.0.0/8
- とはいえ /8 をまるごと1つのVPCに使うのは大きすぎてAWS的にNG
- 10.0.0.0/16 は「広すぎず狭すぎず」ちょうどいい
VPC・サブネット・ホストの3層構造
VPCの中にサブネットを作ると、32ビットが3つの役割に分かれます。
10.0.0.0/16 のVPCの中に /18 のサブネットを作った場合:
|← VPC部(16ビット) →|←サブネット部(2ビット)→|←── ホスト部(14ビット) ──→|
00001010.00000000 00 000000.00000000
ここはVPC全体で ここでどのサブネット ここで個々の機器を
絶対に変わらない かを区別する 区別する
住所でいうと「都道府県 → 市区町村 → 番地」と同じ考え方です。
サブネットの計算方法
VPC 10.0.0.0/16 の中にサブネットを作る場合の計算手順を、3パターンで見ていきます。
/18 の場合
ビットの構造
|← VPC部(16ビット) →|←サブネット部(2ビット)→|←── ホスト部(14ビット) ──→|
00001010.00000000 . 00 000000.00000000
計算
サブネット数: 18 - 16 = 2ビット → 2² = 4個
ホスト数: 32 - 18 = 14ビット → 2¹⁴ = 16,384個
増分: 16,384 ÷ 256 = 64
サブネット一覧
VPC部 サブネット部 IPアドレスの範囲
10.0. 00 10.0.0.0 〜 10.0.63.255
10.0. 01 10.0.64.0 〜 10.0.127.255
10.0. 10 10.0.128.0 〜 10.0.191.255
10.0. 11 10.0.192.0 〜 10.0.255.255
/20 の場合
ビットの構造
|← VPC部(16ビット) →|←サブネット部(4ビット)→|←── ホスト部(12ビット) ──→|
00001010.00000000 . 0000 0000.00000000
計算
サブネット数: 20 - 16 = 4ビット → 2⁴ = 16個
ホスト数: 32 - 20 = 12ビット → 2¹² = 4,096個
増分: 4,096 ÷ 256 = 16
サブネット一覧
VPC部 サブネット部 IPアドレスの範囲
10.0. 0000 10.0.0.0 〜 10.0.15.255
10.0. 0001 10.0.16.0 〜 10.0.31.255
10.0. 0010 10.0.32.0 〜 10.0.47.255
10.0. 0011 10.0.48.0 〜 10.0.63.255
... ... ...
10.0. 1111 10.0.240.0 〜 10.0.255.255
/24 の場合
ビットの構造
|← VPC部(16ビット) →|←サブネット部(8ビット)→|← ホスト部(8ビット) →|
00001010.00000000 . 00000000 .00000000
計算
サブネット数: 24 - 16 = 8ビット → 2⁸ = 256個
ホスト数: 32 - 24 = 8ビット → 2⁸ = 256個
増分: 256 ÷ 256 = 1
サブネット一覧
VPC部 サブネット部 IPアドレスの範囲
10.0. 00000000 10.0.0.0 〜 10.0.0.255
10.0. 00000001 10.0.1.0 〜 10.0.1.255
10.0. 00000010 10.0.2.0 〜 10.0.2.255
... ... ...
10.0. 11111111 10.0.255.0 〜 10.0.255.255
3パターンの比較
| /18 | /20 | /24 | |
|---|---|---|---|
| サブネット数 | 4個 | 16個 | 256個 |
| 1サブネットあたりのホスト数 | 16,384個 | 4,096個 | 256個 |
| 増分 | 64 | 16 | 1 |
/の後の数字が大きくなるほど、サブネット部が広がってホスト部が縮みます。ケーキの切り方と同じで、たくさん切れば1ピースは小さく、少なく切れば1ピースは大きくなります。
「増分」の計算で256で割る理由
この記事で何度も出てきた「256で割る」について、根本から説明します。
4番目のオクテットは256個で一周する
IPアドレスの4番目のブロック(右端のオクテット)は8ビット = 256個で一周します。
10.0.0.0
10.0.0.1
10.0.0.2
...
10.0.0.255 ← 256個目。ここで4番目が一周!
10.0.1.0 ← 3番目が1増える
つまりアドレスが256個進むたびに、3番目のブロックが1増えるということです。
だから256で割る
/18のサブネットは16,384個のアドレスを持っています。3番目のブロックは256個ごとに1増えるので:
16,384 ÷ 256 = 64 → 3番目のブロックが64増える
/24以上(ホスト部が8ビット以下)の場合は割らない
ホスト部が8ビット以下の場合、サブネットが4番目のブロックの中に収まります。
/18 → 16,384個 → 256で割る → 3番目が64ずつ増える
/20 → 4,096個 → 256で割る → 3番目が16ずつ増える
/24 → 256個 → ちょうど一周 → 3番目が1ずつ増える
/26 → 64個 → 割らない → 4番目が64ずつ増える
/28 → 16個 → 割らない → 4番目が16ずつ増える
/24を境目に、増分が起きるブロックが変わるのがポイントです。
サブネット配下のプライベートIPアドレスはどう並ぶ?
10.0.0.0/18 の1番目のサブネットを例に見てみます。
ホスト部14ビットが順番に変わる
ネットワーク部は固定で、ホスト部だけが変化してIPアドレスが作られます。
VPC部(固定) サブネット部(固定) ホスト部(ここだけ変わる) IPアドレス
00001010.00000000 . 00 000000.00000000 → 10.0.0.0
00001010.00000000 . 00 000000.00000001 → 10.0.0.1
00001010.00000000 . 00 000000.00000010 → 10.0.0.2
... ... ...
00001010.00000000 . 00 000000.11111111 → 10.0.0.255
00001010.00000000 . 00 000001.00000000 → 10.0.1.0 ←繰り上がり
... ... ...
00001010.00000000 . 00 111111.11111111 → 10.0.63.255 ←最後
4オクテット目が0〜255まで進み、次に3オクテット目が1増える。これが0〜63まで繰り返されて合計16,384個です。
AWSでは5個が予約済み
AWS上では、各サブネットの中で先頭4つと最後の1つが予約されていて使えません。
10.0.0.0 → ネットワークアドレス(サブネット自体を表す)
10.0.0.1 → AWSがVPCルーター用に予約
10.0.0.2 → AWSがDNS用に予約
10.0.0.3 → AWSが将来のために予約
10.0.63.255 → ブロードキャストアドレス
実際に使えるのは:10.0.0.4 〜 10.0.63.254 → 16,379個
全体像
VPC 10.0.0.0/16 (大きな土地 = 65,536区画)
│
├── サブネット1:10.0.0.0/18
│ ├── 10.0.0.4 ← EC2インスタンスA
│ ├── 10.0.0.5 ← EC2インスタンスB
│ ├── 10.0.1.100 ← RDSデータベース
│ └── ... (16,379個まで使える)
│
├── サブネット2:10.0.64.0/18
│ ├── 10.0.64.4 ← EC2インスタンスC
│ └── ...
│
├── サブネット3:10.0.128.0/18
│ └── ...
│
└── サブネット4:10.0.192.0/18
└── ...
まとめ
| 概念 | ひとことで |
|---|---|
| IPアドレス | ネットワーク上の住所。32ビットの数字 |
| グローバルIP | インターネット用。世界で唯一。約43億個しかない |
| プライベートIP | 閉じたネットワーク用。RFC 1918で3つの範囲が予約されている |
| CIDR(/数字) | 先頭何ビットがネットワーク部かを表す |
| VPC部 | どのVPCかを示す(都道府県) |
| サブネット部 | どのサブネットかを示す(市区町村) |
| ホスト部 | どの機器かを示す(番地) |
ネットワーク設計に苦手意識がある方も、「32ビットを左から順番に役割を分けているだけ」と理解すれば、怖くなくなるはずです。