LabHub
学习 学习路径 课程

地址、子网与网关

分类为什么消失了

在 LabHub 中继续学习

一句话总结

A、B、C 类是 1981 年的地址分配方式,1993 年已经被 CIDR 取代。 如今这些名称仍然存在,只是因为解释私有网段时比较方便,路由器并不会查看地址类别。

概念图: 被 CIDR 取代。 · bit 为单位 · “以 192.168 开头就是 C 类” · /12 的范围是从 172.16 到 172.31。

为什么需要这些知识

早期互联网根据地址开头的几个 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/8172.16.0.0/12192.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)。运营商会把这些地址分配给用户,因此如果企业内部网络使用同一网段,就会与运营商网络冲突。实操环境的网络策略之所以单独阻断该网段,也是这个原因。