クラスはなぜ消えたのか
一言でいうと
A・B・Cクラスは1981年のアドレス割り当て方式で、1993年にCIDRに置き換えられました。今も名前が残っている理由は、プライベート範囲を説明するときに便利だからにすぎず、ルーターはクラスを見ません。
なぜ必要なのか
初期のインターネットは、アドレスの先頭の数ビットでネットワークの大きさを固定していました。
| クラス | 第1オクテット | ネットワーク部 | ホスト数 |
|---|---|---|---|
| A | 1–126 | 8ビット | 約1,678万 |
| B | 128–191 | 16ビット | 約6万5千 |
| C | 192–223 | 24ビット | 254 |
問題は、大きさが3種類しかないことでした。ホストが300台必要な組織には、C(254個)は足りず、B(65,534個)は65,000個を無駄にします。1990年代初頭、この無駄のせいで、IPv4アドレスがまもなく枯渇することが確実になりました。
CIDR(Classless Inter-Domain Routing)は、その固定された境界をなくしました。ネットワーク部の長さをビット単位で決めます。/23はホスト510個、/26は62個です。必要な分だけ渡します。
どう動くのか
192.168.1.0/24は、「先頭24ビットがネットワーク、残りの8ビットがホスト」という意味です。
주소 192.168.1.130 = 11000000.10101000.00000001.10000010
마스크 /24 = 11111111.11111111.11111111.00000000
네트워크 192.168.1.0
브로드캐스트 192.168.1.255
쓸 수 있는 주소 192.168.1.1 ~ 192.168.1.254 (254개)
ホスト数は2^(32-프리픽스) - 2(プレースホルダーはプレフィックスです)です。2を引く理由は、ネットワークアドレス(すべて0)とブロードキャストアドレス(すべて1)をホストに割り当てられないからです。
/31と/32は例外です。/31はルーター同士をつなぐリンク専用で、2つとも使い(RFC 3021)、/32はアドレス1つを指します。
よくある勘違い
「192.168で始まればCクラス」。プライベート範囲とクラスは別の話です。RFC 1918が定めたプライベート範囲は3つです。
| 範囲 | CIDR | 大きさ |
|---|---|---|
| 10.0.0.0–10.255.255.255 | 10.0.0.0/8 |
1,678万 |
| 172.16.0.0–172.31.255.255 | 172.16.0.0/12 |
104万 |
| 192.168.0.0–192.168.255.255 | 192.168.0.0/16 |
65,536 |
172.16.0.0/12を172.16.0.0/16と勘違いして、172.20.x.xをグローバルアドレスだと誤解するミスがよくあります。/12は172.16から172.31までです。
サブネットを手で計算する
プレフィックス長さえわかれば、残りは算数です。
/24 → 호스트 비트 8개 → 2^8 = 256 주소 → 쓸 수 있는 것 254
/25 → 7개 → 128 → 126
/26 → 6개 → 64 → 62
/27 → 5개 → 32 → 30
/28 → 4개 → 16 → 14
/30 → 2개 → 4 → 2 (라우터 사이 링크에 쓴다)
/31 → 1개 → 2 → 2 (RFC 3021 — 점대점 링크)
全体から2を引く理由は、最初のアドレスがネットワークアドレス、最後がブロードキャストアドレスだからです。Kubernetesやクラウドでは、ここからさらにいくつか引きます。AWSはサブネットごとに5個を予約します(ネットワーク、ルーター、DNS、予備、ブロードキャスト)。
境界を見つける方法は次のとおりです。
10.0.5.130/26 이 속한 대역은?
/26 → 블록 크기 64
0, 64, 128, 192 중 130 이 들어가는 것은 128
→ 10.0.5.128 ~ 10.0.5.191, 쓸 수 있는 것은 .129 ~ .190
アドレス範囲を重ならないように設計する
これが、実務で最も高くつくミスです。1回重なると、あとからつなげません。
❌ 흔한 사고
사무실 VPN 192.168.0.0/24
클라우드 VPC 192.168.0.0/24 ← 같은 대역. VPN 으로 못 잇는다
쿠버네티스 파드 10.244.0.0/16
도커 기본 브리지 172.17.0.0/16 ← 사내망이 172.17 이면 컨테이너가 못 나간다
✅ 처음에 표를 만든다
본사 10.10.0.0/16
지사 10.20.0.0/16
클라우드 A 10.100.0.0/16
클라우드 B 10.200.0.0/16
쿠버네티스 파드 10.244.0.0/16, 서비스 10.96.0.0/12
プライベート範囲は3つしかありません(RFC 1918)。10.0.0.0/8、172.16.0.0/12、192.168.0.0/16です。10の範囲が最も広いので、組織が大きければ、ここで分けます。
Dockerの標準ブリッジが172.17.0.0/16を使うことを覚えておくとよいです。社内ネットワークがその範囲を使っていると、コンテナから社内サーバーに行けません。daemon.jsonのdefault-address-poolsで変更します。
CIDRでルーティングが集約される
クラスが消えた実質的な理由が、これです。隣接する範囲を1つにまとめて(supernetting)、ルーティングテーブルを小さくします。
10.1.0.0/24, 10.1.1.0/24, 10.1.2.0/24, 10.1.3.0/24
→ 10.1.0.0/22 하나로 광고할 수 있다
そのため、範囲を分けるときは連続して配置することが、あとで得になります。ランダムに散らすと、まとめられず、経路がその分増えます。
実務で本当に大切なこと
Kubernetesは、この計算の上に成り立っています。Pod CIDR、Service CIDR、ノードCIDRの3つが重なると、クラスターがおかしな動作をしますが、原因を見つけられずに何日も費やしがちです。重なっているか確認することは、結局、このビット計算です。
もう1つ。100.64.0.0/10は、プライベートでもグローバルでもないCGNAT範囲(RFC 6598)です。通信事業者が加入者に割り当てるアドレスなので、この範囲を社内ネットワークに使うと、通信事業者のネットワークと衝突します。ラボ環境のネットワークポリシーが、この範囲を別に遮断しているのも、そのためです。