分类为什么消失了
一句话总结
A、B、C 类是 1981 年的地址分配方式,1993 年已经被 CIDR 取代。 如今这些名称仍然存在,只是因为解释私有网段时比较方便,路由器并不会查看地址类别。
为什么需要这些知识
早期互联网根据地址开头的几个 bit 固定网络规模。
| 类别 | 第一个 octet | 网络部分 | 主机数量 |
|---|---|---|---|
| A | 1~126 | 8 bit | 约 1,678 万 |
| B | 128~191 | 16 bit | 约 6.5 万 |
| C | 192~223 | 24 bit | 254 |
问题在于只有三种规模。需要 300 台主机的组织使用 C 类地址时不够,因为只有 254 个;使用 B 类地址时又会浪费约 65,000 个。到 1990 年代初,这种浪费使 IPv4 地址即将耗尽成为必然。
CIDR(Classless Inter-Domain Routing)取消了固定边界,以 bit 为单位确定网络部分的长度。/23 可容纳 510 台主机,/26 可容纳 62 台,按实际需要分配即可。
它是如何运作的
192.168.1.0/24 表示“前 24 bit 是网络部分,其余 8 bit 是主机部分”。
주소 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 专用于路由器之间的链路,两个地址都可使用(RFC 3021);/32 表示单个地址。
常见误解
“以 192.168 开头就是 C 类”——私有网段和地址类别是两回事。RFC 1918 规定了三个私有网段。
| 网段 | 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。
手工计算子网
只要知道 prefix 长度,其余就是算术。
/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
设计互不重叠的网段
这是生产环境中代价最高的错误。一旦重叠,日后就无法互联。
❌ 흔한 사고
사무실 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
私有网段只有三个(RFC 1918):10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。10 网段最大,大型组织通常从这里划分。
最好记住:Docker 的默认 bridge 是 172.17.0.0/16。如果企业内部网络也使用该网段,容器就无法访问内部服务器。可以通过 daemon.json 中的 default-address-pools 修改。
CIDR 可以聚合路由
这才是类别消失的实际原因。相邻网段可以聚合为一个 supernet,从而减少路由表条目。
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 和 Node CIDR 只要发生重叠,集群就会以奇怪的方式运行,人们很容易花费数天仍找不到原因。确认是否重叠,最终依赖的正是这些 bit 计算。
还有一点:100.64.0.0/10 既不是私有网段,也不是公网网段,而是 CGNAT 网段(RFC 6598)。运营商会把这些地址分配给用户,因此如果企业内部网络使用同一网段,就会与运营商网络冲突。实操环境的网络策略之所以单独阻断该网段,也是这个原因。