IP 地址进化史:从分类编址到 CIDR
想象一下:全球几十亿台设备都要在互联网上"报户口",每台设备都必须拥有一个独一无二的地址——这就是 IP 地址。
可 IPv4 只有 32 位,满打满算约 42.9 亿个。如何把这有限的地址分得又快又准、还能让路由器记得住?这个问题硬生生逼出了四代编址方案。今天我们就沿着「分类地址 → 子网划分 → VLSM → CIDR」这条进化线,看看每一代方案是如何被上一代的缺陷"逼"出来的。
第一幕:分类地址 —— 粗暴的"一刀切"
早期的互联网规模很小,设计者把 32 位 IPv4 地址按前缀位分成五类:
| 类别 | 前缀位 | 首字节范围 | 网络号 | 主机号 | 每网络主机数 | 用途 |
|---|---|---|---|---|---|---|
| A 类 | 0 | 0~127 | 8 位 | 24 位 | 16,777,214 | 大型网络 |
| B 类 | 10 | 128~191 | 16 位 | 16 位 | 65,534 | 中型网络 |
| C 类 | 110 | 192~223 | 24 位 | 8 位 | 254 | 小型网络 |
| D 类 | 1110 | 224~239 | — | — | — | 组播 |
| E 类 | 1111 | 240~255 | — | — | — | 保留/实验 |
看第一字节就知道属于哪类,路由器识别飞快——但问题也随之而来:
分类地址的三大缺陷
- 地址浪费严重:一个 C 类只有 254 个地址,B 类却多达 65,534 个。中型企业申请 B 类用不完、C 类又不够用——就像买衣服只有 S/M/L 三个尺码,怎么穿都不合身
- 路由表膨胀:每个 A/B/C 类网络都需要一条路由条目,核心路由器要维护数十万条路由
- 缺乏灵活性:无法按实际需求分配任意大小的地址块
分类编址就像服装店的 S/M/L/XL 四档尺码:简单粗暴,但绝大多数人穿不出"合身"。下一代的思路,是动手"裁剪"。
第二幕:子网划分 —— 把大尺码裁成合身的
既然 B 类太大、C 类太小,那就自己动手裁:从主机号的高位借位作为子网号,把一个网络切成多个更小的子网。
子网掩码:地址的"分界线"
光借位还不够,路由器怎么知道借了多少位?于是引入了 子网掩码:用 1 表示网络号 + 子网号位,用 0 表示主机号位。把 IP 地址和掩码做按位与运算,就能提取出子网地址:
IP 地址: 192.168.1.139 → 11000000.10101000.00000001.10001011
子网掩码: 255.255.255.192 → 11111111.11111111.11111111.11000000
按位与: 192.168.1.128 → 11000000.10101000.00000001.10000000 ← 子网地址示例:192.168.1.0/24 划分 4 个子网
从主机号借 2 位当子网号(2² = 4 个子网),剩下 6 位给主机:
| 子网号(二进制) | 子网地址 | 可用主机范围 | 广播地址 |
|---|---|---|---|
| 00 | 192.168.1.0 | 192.168.1.1 ~ 192.168.1.62 | 192.168.1.63 |
| 01 | 192.168.1.64 | 192.168.1.65 ~ 192.168.1.126 | 192.168.1.127 |
| 10 | 192.168.1.128 | 192.168.1.129 ~ 192.168.1.190 | 192.168.1.191 |
| 11 | 192.168.1.192 | 192.168.1.193 ~ 192.168.1.254 | 192.168.1.255 |
- 子网掩码:255.255.255.192(即 /26)
- 每子网主机数:2⁶ − 2 = 62(全 0 是网络地址、全 1 是广播地址,均不可用)
子网掩码速查表(C 类视角)
| CIDR | 掩码 | 子网数 | 每子网主机数 |
|---|---|---|---|
| /25 | 255.255.255.128 | 2 | 126 |
| /26 | 255.255.255.192 | 4 | 62 |
| /27 | 255.255.255.224 | 8 | 30 |
| /28 | 255.255.255.240 | 16 | 14 |
| /29 | 255.255.255.248 | 32 | 6 |
| /30 | 255.255.255.252 | 64 | 2 |
子网能"切"了,但所有子网仍共用同一把尺子(固定掩码),切出来还是不合身。于是 VLSM 登场。
第三幕:VLSM —— 允许"量身定制"
VLSM(可变长子网掩码,Variable Length Subnet Mask)允许在一个主网络中使用不同长度的子网掩码,按需分配。同样是 192.168.1.0/24,四个部门需求各不相同:
| 部门 | 需要主机数 | 子网掩码 | 可用主机数 | 地址块 |
|---|---|---|---|---|
| 研发部 | 50 | /26 (255.255.255.192) | 62 | 192.168.1.0/26 |
| 市场部 | 25 | /27 (255.255.255.224) | 30 | 192.168.1.64/27 |
| 财务部 | 12 | /28 (255.255.255.240) | 14 | 192.168.1.96/28 |
| 行政部 | 2 | /30 (255.255.255.252) | 2 | 192.168.1.112/30 |
对比一下:不用 VLSM 时,所有子网只能用同样掩码(如 /26),4 × 62 = 248 个地址还大量闲置;VLSM 精准配给,总共只用 62 + 30 + 14 + 2 = 108 个地址,几乎零浪费。
子网划分 + VLSM 解决了"浪费",却没解决"路由表爆炸"。真正的大招,是彻底推翻分类体系的 CIDR。
第四幕:CIDR —— 扔掉尺码表
CIDR(无分类域间路由,Classless Inter-Domain Routing)彻底抛弃了 A/B/C 类的概念,直接用斜线记法表示网络前缀长度:
192.168.1.0/24 → 网络前缀 24 位,主机号 8 位
10.0.0.0/8 → 网络前缀 8 位,主机号 24 位
172.16.0.0/12 → 网络前缀 12 位,主机号 20 位前缀长度任意选择,要多大给多大。和分类地址对比一下:
| 对比项 | 分类地址 | CIDR |
|---|---|---|
| 地址类别 | A/B/C/D/E 固定分类 | 无类别,前缀长度任意 |
| 表示方式 | 地址 + 隐含类别 | IP 地址 + 前缀长度(如 /24) |
| 路由聚合 | 不支持 | 支持,大幅缩减路由表 |
| 灵活性 | 固定主机数,浪费严重 | 可变前缀,按需分配 |
路由聚合:8 条路由变 1 条
CIDR 最大的礼物是路由聚合(Route Aggregation / Supernetting):把多个连续的地址块合并成一个大块对外通告,路由表瞬间瘦身。
示例:一个 ISP 拥有以下 8 个连续的 C 类地址块:
200.1.0.0/24 200.1.1.0/24 200.1.2.0/24 200.1.3.0/24
200.1.4.0/24 200.1.5.0/24 200.1.6.0/24 200.1.7.0/24观察第三个字节:0~7 的二进制高 5 位都是 00000,只有低 3 位在变化——所以这 8 个 /24 可以聚合成一个 /21:
200.1.0.0/21 ← 网络前缀 21 位,掩码 255.255.248.0原需要 8 条路由 → 聚合后 1 条路由,路由表缩减 87.5%。全球互联网的路由条目也因此被压缩到百万级。
CIDR 的三个关键词
- 「前缀越长,网络越小」:/30 只有 2 个主机地址,/16 有 65,534 个
- 对外通告用短前缀(大范围聚合),内部转发用长前缀(精确匹配)
- 最长前缀匹配:路由表同时命中多条时,选前缀最长(最精确)的那条,精确路由永远优先于聚合路由
总结
回看这条进化线,每一步都是被上一步的缺陷"逼"出来的:
| 方案 | 解决什么问题 | 留下的问题 |
|---|---|---|
| 分类地址 | 让编址简单可识别 | 地址浪费、路由表膨胀 |
| 子网划分 | 切分网络、内部管理 | 掩码固定,仍不灵活 |
| VLSM | 按需分配、减少浪费 | 无法解决路由表膨胀 |
| CIDR | 任意前缀 + 路由聚合 | IPv4 总量仍有限(交给 NAT / IPv6) |
一句话总结:分类地址解决了"怎么分",子网划分解决了"怎么切",VLSM 解决了"怎么省",CIDR 解决了"怎么聚"。直到今天,你家里的路由器、公司的机房、互联网的骨干,全都运行在这套进化产物的之上。
