TT Lab
はじめる
学ぶ 学習パス コース

アドレス・サブネット・ゲートウェイ

クラスはなぜ消えたのか

TT Labで続きを見る

一言でいうと

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)です。通信事業者が加入者に割り当てるアドレスなので、この範囲を社内ネットワークに使うと、通信事業者のネットワークと衝突します。ラボ環境のネットワークポリシーが、この範囲を別に遮断しているのも、そのためです。