0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IPアドレス・CIDR・サブネットを理解する

0
Posted at

はじめに

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 で切ることが多いのか?

結論から言うと、以下の理由です。

  1. RFC 1918の3択から選ぶ必要がある(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
  2. その中で最もリッチにIPを使えるのが 10.0.0.0/8
  3. とはいえ /8 をまるごと1つのVPCに使うのは大きすぎてAWS的にNG
  4. 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ビットを左から順番に役割を分けているだけ」と理解すれば、怖くなくなるはずです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?