IP 地址、子网与 CIDR 记法详解
IP 地址、子网和 CIDR 是服务器配置、云网络规划、防火墙规则编写和路由设计的基础。三者如果拆开看都不复杂,但一旦放到同一个场景里,很多错误都来自边界没分清:哪些位表示网络,哪些位表示主机,哪些地址能分配给机器,哪些只是网络本身或广播用途。
先给出结论:
- IPv4 地址是一个 32 位数字,通常写成四段十进制,例如
192.168.0.5 - 子网掩码决定 IP 地址中哪些位属于网络部分,哪些位属于主机部分
- CIDR 用斜杠加前缀长度表示网络,例如
192.168.1.0/24 - 对于大多数 IPv4 子网,首地址是网络地址,末地址是广播地址,二者不能分配给主机
- RFC 1918 规定了三段私有地址空间:
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 - VLSM 允许在同一地址空间内使用不同前缀长度,提高地址利用率
- IPv6 沿用相同的斜杠前缀记法,单个子网通常使用
/64
相关标准中,CIDR 的权威规范见 RFC 4632,私有地址范围见 RFC 1918。/31 点对点链路例外见 RFC 3021。
什么是 IP 地址,为什么要先理解二进制
IP 地址本质上是网络里设备的数值标识。它有两个作用:
- 标识主机是谁
- 标识主机在网络拓扑里的位置
IPv4 地址到底长什么样
IPv4 地址是 32 位数字,写成四个 8 位段,每段用十进制表示,取值范围是 0 到 255。这四段通常叫 octet,因为每段都是 8 bit。
典型 IPv4 地址:
192.168.0.5
同一个地址写成二进制:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0101
理解这两个表示法对应的是同一个值,是后面理解子网掩码和 CIDR 的前提。因为子网划分不是在十进制层面做的,而是在 bit 层面做的。
只要两台机器位于同一网络,或者中间有路由设备能转发流量,通信时就会以 IP 地址作为目标标识。
NAT 在这里扮演什么角色
当数据包跨越网络边界时,NAT(Network Address Translation)可以改写地址。这样,同一个私有地址可以在多个互相隔离的网络里重复使用,只要出口处有正确的 NAT 配置,这些内部网络仍然能访问外部网络。
这也是私有地址能大规模存在的前提。
传统 IPv4 分类还有没有必要了解
有必要,但只作为历史背景,不应该拿它指导今天的网络设计。
早期 IPv4 曾按 A、B、C、D、E 五类地址划分,依据是地址开头的若干位。
| 类别 | 起始位 | 地址范围 | 默认掩码 | 用途 |
|---|---|---|---|---|
| A | 0 |
0.0.0.0 到 127.255.255.255 |
255.0.0.0 |
大型网络 |
| B | 10 |
128.0.0.0 到 191.255.255.255 |
255.255.0.0 |
中型网络 |
| C | 110 |
192.0.0.0 到 223.255.255.255 |
255.255.255.0 |
小型网络 |
| D | 1110 |
224.0.0.0 到 239.255.255.255 |
N/A | 组播 |
| E | 1111 |
240.0.0.0 到 255.255.255.255 |
N/A | 实验/保留 |
有两个 A 类范围需要单独记住:
0.0.0.0/8:表示“本网络”,常见于主机尚未获得地址时作为源地址使用127.0.0.0/8:回环地址,用于本机测试网络栈,最常用的是127.0.0.1
D 类地址保留给组播协议,E 类地址主要保留作实验用途。
今天的实际路由已经不再使用这种 classful addressing。RFC 1519 于 1993 年引入 CIDR,后由 RFC 4632 更新整合。现代网络中,前缀长度不必再对齐到 A/B/C 的边界。A/B/C 类别现在主要只剩历史解释价值,以及默认掩码习惯的背景作用。
公网 IP 和私网 IP 的边界在哪里
公网地址可在互联网全局路由。私有地址只在私有网络内部使用。
RFC 1918 定义了三段私有地址空间:
10.0.0.0/8172.16.0.0/12192.168.0.0/16
它们不会出现在互联网的全局路由表中。也就是说,带着私有目标地址的数据包一旦离开本地网络,公网路由器没有地方可转发,最终会被丢弃。
这直接带来两个结果:
- 私网主机默认不能从公网直接访问
- 私网主机要访问公网,通常必须经过 NAT
回环地址 127.0.0.0/8 也不是公网可路由地址。一般只使用 127.0.0.1,但整个 127.0.0.0/8 都是保留给本机回环测试的。
什么是子网,为什么必须划分子网
子网是一个更大 IP 网络的逻辑分段。子网划分的目的不是“把地址分小”,而是解决广播范围、隔离边界和资源分配三个问题。
为什么不应该把所有主机塞进一个大网段
在一个扁平网络里,ARP 请求、DHCP Discover 这类广播会被同一广播域里的所有主机处理。
如果把一个 /16 网络扔给约 6 万台主机使用,整个网段里的每台机器都得处理所有广播。一台异常主机如果持续发广播,影响的是整个网段。把它拆成多个 /24 后,每段大致只有 254 台可用主机,广播风暴会被限制在单个子网内,不会拖垮整个网络。
子网也是安全和策略边界
防火墙规则、路由策略、ACL 都是基于地址范围工作的。
例如:
- Web 层在
10.10.1.0/24 - 数据库层在
10.10.2.0/24
那就可以明确写规则,只允许 10.10.1.0/24 访问 10.10.2.0/24 的数据库端口,其他来源一律拒绝。如果没有子网边界,就没有可操作的地址范围。
子网还能按实际规模分配地址
点对点链路通常只需要 2 个地址,可以用 /30
用户接入网段可能需要 200 多个地址,可以用 /24
这比所有地方都机械使用统一大小的网段更合理。后面讲 VLSM 时,这一点会更明显。
一个 IP 地址里,网络部分和主机部分怎么分
每个 IP 地址都可拆成两个逻辑部分:
- 网络部分:标识它属于哪个子网
- 主机部分:标识它在这个子网中是哪一台设备
以 192.168.0.15/24 为例:
- 网络部分是
192.168.0 - 主机部分是
15
二进制形式:
1100 0000 - 1010 1000 - 0000 0000 - 0000 1111
因为 /24 表示前 24 位是网络位,所以前三个 octet 属于网络,最后 8 位属于主机。
把 IP 地址和子网掩码做按位与运算,就能得到网络地址:
1100 0000 - 1010 1000 - 0000 0000 - 0000 1111 (192.168.0.15)
AND
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000 (255.255.255.0)
=
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000 (192.168.0.0)
所以:
- 网络地址是
192.168.0.0 - 主机标识是
0000 1111,也就是15
广播地址到底是什么,哪些地址不能分配
在 IPv4 里,大多数子网都有两个特殊地址:
- 第一个地址:网络地址,主机位全为 0
- 最后一个地址:广播地址,主机位全为 1
这两个地址都不能分配给单独主机。
需要特别注意的是,这个限制针对的是“该子网里的首尾地址”,不是说最后一个 octet 恰好是 0 或 255 的地址一定不能用。
例如:
-
在
10.0.1.0/24中- 网络地址:
10.0.1.0 - 广播地址:
10.0.1.255
- 网络地址:
-
在
10.0.2.128/25中- 网络地址:
10.0.2.128 - 广播地址:
10.0.2.255
- 网络地址:
所以判断能不能分配地址,必须先看它处在哪个子网里,不能只看最后一段。
子网掩码到底表达了什么
子网掩码是一个 32 位值,用来标记哪些位属于网络,哪些位属于主机:
- 掩码中为
1的位表示网络位 - 掩码中为
0的位表示主机位
用二进制理解子网掩码最直接
/24 的子网掩码是 255.255.255.0,二进制写法如下:
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000
也就是前 24 位为 1,后 8 位为 0。
常见前缀与掩码对应关系如下:
/8 → 11111111.00000000.00000000.00000000 → 255.0.0.0
/16 → 11111111.11111111.00000000.00000000 → 255.255.0.0
/24 → 11111111.11111111.11111111.00000000 → 255.255.255.0
/25 → 11111111.11111111.11111111.10000000 → 255.255.255.128
/26 → 11111111.11111111.11111111.11000000 → 255.255.255.192
/27 → 11111111.11111111.11111111.11100000 → 255.255.255.224
/28 → 11111111.11111111.11111111.11110000 → 255.255.255.240
/29 → 11111111.11111111.11111111.11111000 → 255.255.255.248
/30 → 11111111.11111111.11111111.11111100 → 255.255.255.252
如何把一个 /24 划成两个子网
如果把 192.168.0.0/24 拆成两个等大的子网,需要从主机位里“借” 1 位给网络位。于是前缀从 /24 变成 /25,掩码变成:
1111 1111 - 1111 1111 - 1111 1111 - 1000 0000
也就是:
255.255.255.128
这里要分清楚:
255.255.255.128是子网掩码- 它不是网络地址
将 192.168.0.0/24 按 /25 划分后,得到两个子网:
- 子网 1:网络地址
192.168.0.0,广播192.168.0.127,可用范围192.168.0.1到192.168.0.126,126 个主机 - 子网 2:网络地址
192.168.0.128,广播192.168.0.255,可用范围192.168.0.129到192.168.0.254,126 个主机
每多借 1 位:
- 子网数量翻倍
- 每个子网可用主机数减半
这就是子网划分最核心的取舍。
传统默认掩码还有参考价值吗
有,但只是参考,不是约束。
传统分类下默认掩码如下:
| 类别 | 默认子网掩码 | CIDR 前缀 |
|---|---|---|
| A | 255.0.0.0 |
/8 |
| B | 255.255.0.0 |
/16 |
| C | 255.255.255.0 |
/24 |
在 CIDR 体系下,这些默认值只剩说明性质。任意地址都可以配任意合法前缀,不受原始类别限制。IPv4 前缀长度从 /0 到 /32 都有效。
怎么从前缀长度计算可用主机数
IPv4 子网总地址数公式:
2^(32 - prefix)
大多数情况下,可用主机数为:
2^(32 - prefix) - 2
减去的两个地址分别是:
- 网络地址
- 广播地址
例如:
/24:2^(32 - 24) = 2^8 = 256,可用254/26:2^(32 - 26) = 2^6 = 64,可用62
两个例外必须记住
/31:RFC 3021 规定可用于点对点链路,两端地址都可用,因为不需要传统广播语义/32:表示单个主机路由
从主机数量反推应该用多大前缀
| 需要主机数 | 前缀 | 可用主机数 |
|---|---|---|
| 1 到 2 | /30 |
2 |
| 3 到 6 | /29 |
6 |
| 7 到 14 | /28 |
14 |
| 15 到 30 | /27 |
30 |
| 31 到 62 | /26 |
62 |
| 63 到 126 | /25 |
126 |
| 127 到 254 | /24 |
254 |
例如某段网络需要 30 台主机:
/28只能给 14 台,不够/27刚好给 30 台
那就应该选 /27
CIDR 记法为什么取代了分类地址
CIDR 是 Classless Inter-Domain Routing,核心是“无类别路由”。它用 IP/前缀长度 的形式表达一个网络。
例如:
192.168.0.15/24
表示前 24 位是网络位。
CIDR 解决了两个旧问题
-
固定类别造成地址浪费
以前 Class B 一给就是 65534 个主机地址,Class C 又只有 254 个,中间缺少合适粒度。 -
路由表膨胀
提供商为了满足需求,不得不分配大量 Class C 网络,互联网路由表项快速增长。
CIDR 引入后:
- 地址块可以按任意前缀长度分配
- 可按需求精细分配地址
- 可做路由聚合,压缩路由表规模
怎么读一个 CIDR 块
以 192.168.0.0/24 为例:
- 网络前缀:前 24 位,也就是
192.168.0 - 主机位:后 8 位,范围
0到255 - 总地址数:256
以 10.0.0.0/8 为例:
- 网络前缀:前 8 位,也就是
10 - 主机位:后 24 位
- 总地址数:16,777,216
CIDR 不只是划分,也能聚合
CIDR 还可以表示 supernet,也就是把多个连续网段汇总成一个更大的前缀。
例如:
192.168.0.0192.168.1.0
这两个连续的 C 类网络,在传统分类里要两条路由;在 CIDR 下可以聚合成:
192.168.0.0/23
二进制看得更清楚:
第一个网络:
1100 0000 - 1010 1000 - 0000 0000 - 0000 0000
第二个网络:
1100 0000 - 1010 1000 - 0000 0001 - 0000 0000
/23 掩码:
1111 1111 - 1111 1111 - 1111 1110 - 0000 0000
固定 23 位后,第 24 位可以是 0 或 1,因此这两个网段都被同一个 /23 覆盖。对应掩码是 255.255.254.0。
这就是路由聚合的基础。
常见 CIDR 示例
| CIDR 块 | 可用主机数 | 典型用途 |
|---|---|---|
10.0.0.0/8 |
16,777,214 | 大型企业或云网络 |
172.16.0.0/16 |
65,534 | 中型私有网络 |
192.168.1.0/24 |
254 | 小型办公室或单网段 |
192.168.1.0/26 |
62 | /24 内部的细分段 |
10.0.0.112/30 |
2 | 点对点 WAN 链路 |
IPv4 全量 CIDR 对照表应该怎么查
下面这张表列出 /0 到 /32 的前缀、掩码、总地址数和可用主机数。
其中 /0 到 /30 的可用主机数按 2^(32 - prefix) - 2 计算;/31 和 /32 需要按例外处理。
| Prefix | Subnet Mask | Total IPs | Usable Hosts |
|---|---|---|---|
/0 |
0.0.0.0 |
4,294,967,296 | 4,294,967,294 |
/1 |
128.0.0.0 |
2,147,483,648 | 2,147,483,646 |
/2 |
192.0.0.0 |
1,073,741,824 | 1,073,741,822 |
/3 |
224.0.0.0 |
536,870,912 | 536,870,910 |
/4 |
240.0.0.0 |
268,435,456 | 268,435,454 |
/5 |
248.0.0.0 |
134,217,728 | 134,217,726 |
/6 |
252.0.0.0 |
67,108,864 | 67,108,862 |
/7 |
254.0.0.0 |
33,554,432 | 33,554,430 |
/8 |
255.0.0.0 |
16,777,216 | 16,777,214 |
/9 |
255.128.0.0 |
8,388,608 | 8,388,606 |
/10 |
255.192.0.0 |
4,194,304 | 4,194,302 |
/11 |
255.224.0.0 |
2,097,152 | 2,097,150 |
/12 |
255.240.0.0 |
1,048,576 | 1,048,574 |
/13 |
255.248.0.0 |
524,288 | 524,286 |
/14 |
255.252.0.0 |
262,144 | 262,142 |
/15 |
255.254.0.0 |
131,072 | 131,070 |
/16 |
255.255.0.0 |
65,536 | 65,534 |
/17 |
255.255.128.0 |
32,768 | 32,766 |
/18 |
255.255.192.0 |
16,384 | 16,382 |
/19 |
255.255.224.0 |
8,192 | 8,190 |
/20 |
255.255.240.0 |
4,096 | 4,094 |
/21 |
255.255.248.0 |
2,048 | 2,046 |
/22 |
255.255.252.0 |
1,024 | 1,022 |
/23 |
255.255.254.0 |
512 | 510 |
/24 |
255.255.255.0 |
256 | 254 |
/25 |
255.255.255.128 |
128 | 126 |
/26 |
255.255.255.192 |
64 | 62 |
/27 |
255.255.255.224 |
32 | 30 |
/28 |
255.255.255.240 |
16 | 14 |
/29 |
255.255.255.248 |
8 | 6 |
/30 |
255.255.255.252 |
4 | 2 |
/31 |
255.255.255.254 |
2 | 2(仅点对点,RFC 3021) |
/32 |
255.255.255.255 |
1 | 1(主机路由) |
子网和主机范围该怎么手算
子网计算并不玄学,步骤固定:
- 确定前缀长度
- 写出子网掩码
- 用地址与掩码做按位与,得到网络地址
- 将所有主机位设为 1,得到广播地址
- 两者之间就是可用主机范围
示例一:计算 192.168.1.0/24
已知网络:
192.168.1.0/24
可直接得到:
- 前缀长度:24
- 子网掩码:
255.255.255.0 - 总地址数:
2^8 = 256 - 可用主机数:254
如果取网段内一个地址 192.168.1.75 做验证:
1100 0000 - 1010 1000 - 0000 0001 - 0100 1011 (192.168.1.75)
AND
1111 1111 - 1111 1111 - 1111 1111 - 0000 0000 (255.255.255.0)
=
1100 0000 - 1010 1000 - 0000 0001 - 0000 0000 (192.168.1.0)
因此:
- 网络地址:
192.168.1.0 - 广播地址:
192.168.1.255 - 可用范围:
192.168.1.1到192.168.1.254
示例二:把 /24 划成四个 /26
/26 表示:
- 26 位网络位
- 6 位主机位
每个 /26 子网有:
- 总地址数:
2^6 = 64 - 可用主机数:62
将 192.168.1.0/24 划分后得到四个子网:
| 子网 | 网络地址 | 广播地址 | 可用范围 | 可用主机数 |
|---|---|---|---|---|
192.168.1.0/26 |
192.168.1.0 |
192.168.1.63 |
192.168.1.1 到 192.168.1.62 |
62 |
192.168.1.64/26 |
192.168.1.64 |
192.168.1.127 |
192.168.1.65 到 192.168.1.126 |
62 |
192.168.1.128/26 |
192.168.1.128 |
192.168.1.191 |
192.168.1.129 到 192.168.1.190 |
62 |
192.168.1.192/26 |
192.168.1.192 |
192.168.1.255 |
192.168.1.193 到 192.168.1.254 |
62 |
边界每隔 64 个地址出现一次,所以网络地址分别是 .0、.64、.128、.192。
示例三:如何判断某个地址属于哪个 /26
对于 255.255.255.192,最后一个 octet 的二进制是:
1100 0000
表示最后一个 octet 的前 2 位属于网络位,后 6 位属于主机位。
判断 192.168.1.130 属于哪个子网:
1100 0000 - 1010 1000 - 0000 0001 - 1000 0010 (192.168.1.130)
AND
1111 1111 - 1111 1111 - 1111 1111 - 1100 0000 (255.255.255.192)
=
1100 0000 - 1010 1000 - 0000 0001 - 1000 0000 (192.168.1.128)
结果是 192.168.1.128,所以它属于 192.168.1.128/26 这个子网。
实际环境里怎么验证计算结果
手算必须会,但生产环境最好用工具交叉验证。ipcalc 就很适合做这件事。
安装 ipcalc
在 Ubuntu 和 Debian 上:
sudo apt install ipcalc
验证 /24 网段
ipcalc 192.168.1.0/24
输出:
Address: 192.168.1.0 11000000.10101000.00000001. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.1.0/24 11000000.10101000.00000001. 00000000
HostMin: 192.168.1.1 11000000.10101000.00000001. 00000001
HostMax: 192.168.1.254 11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255 11000000.10101000.00000001. 11111111
Hosts/Net: 254 Class C, Private Internet
二进制中留出的空格位置,就是网络位和主机位的边界。
验证 /26 网段
ipcalc 192.168.1.0/26
输出:
Address: 192.168.1.0 11000000.10101000.00000001.00 000000
Netmask: 255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard: 0.0.0.63 00000000.00000000.00000000.00 111111
=>
Network: 192.168.1.0/26 11000000.10101000.00000001.00 000000
HostMin: 192.168.1.1 11000000.10101000.00000001.00 000001
HostMax: 192.168.1.62 11000000.10101000.00000001.00 111110
Broadcast: 192.168.1.63 11000000.10101000.00000001.00 111111
Hosts/Net: 62 Class C, Private Internet
让 ipcalc 帮忙拆分子网
下面这个命令会把父网段 192.168.1.0/24 按每段至少 62 台主机的需求拆分:
ipcalc 192.168.1.0/24 --split 62 62 62 62
得到的四个 /26 子网就是:
| 子网 | HostMin | HostMax |
|---|---|---|
192.168.1.0/26 |
192.168.1.1 |
192.168.1.62 |
192.168.1.64/26 |
192.168.1.65 |
192.168.1.126 |
192.168.1.128/26 |
192.168.1.129 |
192.168.1.190 |
192.168.1.192/26 |
192.168.1.193 |
192.168.1.254 |
这对做 VLSM 规划很实用。
Linux 上怎么看接口实际拿到了什么 CIDR
理论计算最终都会落到主机接口配置上。Linux 直接就以 CIDR 形式展示地址。
查看接口地址
ip addr show eth0
输出示例:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 9a:1c:3e:7b:0a:11 brd ff:ff:ff:ff:ff:ff
inet 10.10.1.5/24 brd 10.10.1.255 scope global eth0
valid_lft forever preferred_lft forever
这里:
inet 10.10.1.5/24是主机地址和前缀brd 10.10.1.255是广播地址
查看内核路由
ip route
输出示例:
default via 10.10.1.1 dev eth0 proto static
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.5
含义很直接:
10.10.1.0/24是内核依据接口地址自动安装的直连路由default via 10.10.1.1是默认网关,其他目的地都走这里
RFC 1918 私有地址范围应该怎么选
RFC 1918 定义的三段私有地址如下:
| 范围 | CIDR | 地址数量 | 常见用途 |
|---|---|---|---|
10.0.0.0 到 10.255.255.255 |
10.0.0.0/8 |
16,777,216 | 企业网络、云 VPC |
172.16.0.0 到 172.31.255.255 |
172.16.0.0/12 |
1,048,576 | 中型私网 |
192.168.0.0 到 192.168.255.255 |
192.168.0.0/16 |
65,536 | 家庭、小型办公室 |
什么时候用私网地址,什么时候用公网地址
判断标准很简单:
- 内部服务器、数据库、内部 API、不需要被公网直接访问的实例:用私网地址
- 负载均衡器、边缘代理、面向互联网的终端:用公网地址
私网主机访问公网时,需要 NAT 网关把私网源地址替换成公网地址,再在返回流量时反向转换。
VLSM 什么时候值得用
只要不同网段规模差异明显,就应该用 VLSM。
VLSM 是 Variable Length Subnet Masking,即在同一地址空间内使用不同前缀长度的子网。
它不是新协议,而是一种设计方法。前提是 CIDR 已经取消了类别边界限制。
VLSM 解决的是什么问题
如果所有子网都用同一个前缀,浪费会非常明显。
例如:
- 工程部门需要 50 台主机
- 市场部门需要 20 台
- 管理网段需要 10 台
- 一条点对点链路只需要 2 台
如果都按统一 /26 分,点对点链路会浪费大量地址;如果都按 /30 分,工程部门又不够用。
VLSM 的原则就是:谁需要多大,就给多大。
一个实际的 VLSM 划分例子
把 10.0.0.0/24 按四类需求划分:
| 段 | 需求主机数 | 分配子网 | 可用范围 | 可用主机数 |
|---|---|---|---|---|
| Engineering | 50 | 10.0.0.0/26 |
10.0.0.1 到 10.0.0.62 |
62 |
| Marketing | 20 | 10.0.0.64/27 |
10.0.0.65 到 10.0.0.94 |
30 |
| Management | 10 | 10.0.0.96/28 |
10.0.0.97 到 10.0.0.110 |
14 |
| WAN link | 2 | 10.0.0.112/30 |
10.0.0.113 到 10.0.0.114 |
2 |
验证工程网段:
ipcalc 10.0.0.0/26
输出:
Address: 10.0.0.0 00001010.00000000.00000000.00 000000
Netmask: 255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard: 0.0.0.63 00000000.00000000.00000000.00 111111
=>
Network: 10.0.0.0/26 00001010.00000000.00000000.00 000000
HostMin: 10.0.0.1 00001010.00000000.00000000.00 000001
HostMax: 10.0.0.62 00001010.00000000.00000000.00 111110
Broadcast: 10.0.0.63 00001010.00000000.00000000.00 111111
Hosts/Net: 62 Class A, Private Internet
这四段分完后,10.0.0.116 到 10.0.0.255 仍然空闲,可留作后续扩容。
VLSM 和 supernet 是相反方向的操作
- supernet:把连续小网段向上聚合成大前缀,用于路由汇总
- VLSM:把一个大网段向下拆成不同大小的小前缀,用于精细分配
两者都依赖 CIDR。
IPv6 里 CIDR 还是同一套思路吗
是。IPv6 沿用相同的斜杠前缀表示法,只是地址空间从 32 位扩展到了 128 位。
IPv6 地址结构和写法
IPv6 地址长度为 128 bit,写成 8 组 4 位十六进制数,用冒号分隔,例如:
1203:8fe0:fe80:b897:8990:8a7c:99bf:323d
十六进制使用 0-9 和 a-f 表示数值 0-15。
IPv6 的地址空间大约是 3.4 × 10^38,约为 IPv4 的 7.9 × 10^28 倍以上。IPv4 地址耗尽后,IPv6 才成为长期方案。
IPv6 如何压缩表示
两条规则:
-
每组前导零可以省略
例如:...:00bc:...可以写成:
...:bc:... -
一段连续全为 0 的组可以用
::替代一次
例如:...:18bc:0000:0000:0000:00ff:...可以写成:
...:18bc::ff:...
:: 在一个地址中只能使用一次,否则无法唯一还原完整地址。
IPv6 中 CIDR 怎么看
IPv6 仍然用前缀长度标识网络部分,例如:
2001:db8::/32:文档示例前缀,RFC 3849 定义,不在公网路由2001:db8:1::/48:典型站点级分配2001:db8:1:1::/64:标准单子网前缀
IPv6 中单个子网的标准前缀通常是 /64。这样保留后 64 位给主机地址,单子网可容纳 2^64 个地址。
SLAAC 和很多 DHCPv6 部署都要求 /64,所以在局域网里通常不会像 IPv4 那样为了节省地址继续往下细分。
/48 如何划出多个 /64
如果站点获得:
2001:db8:1::/48
前 48 位固定,接下来第 49 到 64 位可用于子网编号,一共 16 位,所以可划出:
2^16 = 65,536
个 /64 子网。
例如:
2001:db8:1:0000::/64 first subnet
2001:db8:1:0001::/64 second subnet
2001:db8:1:0002::/64 third subnet
...
2001:db8:1:ffff::/64 last subnet (65,536th)
第四组 hextet,也就是 0000 到 ffff,就是子网 ID。
IPv4 和 IPv6 子网划分的关键差异
| 维度 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 bit | 128 bit |
| 表示法 | 点分十进制 | 冒号分隔十六进制 |
| 常见单子网前缀 | /24 常见 |
/64 为标准 |
| 地址空间 | 约 43 亿 | 约 3.4 × 10^38 |
| 私有范围 | RFC 1918 三段 | ULA fc00::/7,RFC 4193 |
| 广播 | 有 | 无,用组播替代 |
| CIDR | 支持 | 同样支持 |
IPv6 的 ULA(Unique Local Address)范围是 fc00::/7,作用上相当于 IPv4 的私有地址,用于站点或组织内部通信,不做全球路由。
这些概念在实际网络里怎么落地
理论到这里已经完整,下面看三个最常见的落地场景:云 VPC、办公室网络、路由汇总。
云 VPC 规划时,CIDR 应该怎么选
云上的 VPC 本质上就是一个由 CIDR 块定义的私有网络。
例如创建一个 VPC:
doctl vpcs create --name prod-vpc --region nyc1 --ip-range 10.10.0.0/16
VPC 内的主机都会从 10.10.0.0/16 中获得私有地址。
逻辑分层和实际云对象不一定一一对应
一种常见做法是把范围作为逻辑约定:
| 层 | 约定范围 | 执行方式 |
|---|---|---|
| Web | 10.10.1.0/24 |
给实例打 web 标签 |
| Data | 10.10.2.0/24 |
给实例打 data 标签 |
| Monitoring | 10.10.3.0/24 |
给实例打 monitor 标签 |
随后用防火墙按 CIDR 范围限制流量。
例如,只允许 Web 层访问 Data 层 PostgreSQL 端口:
doctl compute firewall create \
--name data-tier \
--inbound-rules "protocol:tcp,ports:5432,address:10.10.1.0/24" \
--tag-names data
这条规则允许来自 10.10.1.0/24 的 5432/tcp 访问,其他来源默认被拒绝。实际参数格式应以本地 doctl compute firewall create --help 为准,不同版本可能有差异。
VPC 规划里最容易出事故的是地址重叠
如果两个将来需要互通的网络用了重叠 CIDR,就很难做对等连接或 VPN 互联。
例如:
- VPC A:
10.10.0.0/16 - VPC B:
10.10.0.0/16
这时一台主机无法无歧义判断某个 10.10.x.x 目标到底在哪个网络里,路由自然也无法正确建立。
因此,凡是将来可能互联的网络,都应该预先分配互不重叠的私有地址空间,例如:
- 一个用
10.10.0.0/16 - 另一个用
10.20.0.0/16
这是比“当前够不够用”更重要的规划原则。
家庭和办公室网络需要怎么切分
大多数家用路由器默认使用:
192.168.1.0/24- 或
192.168.0.0/24
这通常提供 254 个可用地址,对家庭场景足够了。
小型办公室如果想把员工终端、访客 Wi-Fi 和 IoT 设备分开,可以从一个 /24 中切三个 /26:
- Staff:
192.168.1.0/26,62 个可用主机 - Guest Wi-Fi:
192.168.1.64/26,62 个可用主机 - IoT:
192.168.1.128/26,62 个可用主机
剩下的:
192.168.1.192/26
可以留给未来扩展或管理网络。
这类规划的重点不是“家里是否真的有 62 台设备”,而是通过子网边界把安全策略写清楚。
路由器为什么依赖 CIDR 做路由聚合
如果一个运营商拥有 256 个连续的 /24,逐条公告会带来 256 条路由。若这些网段连续,可以聚合成一个更大的前缀,显著减少路由表规模。
例如前面提到的:
192.168.0.0/23
可以覆盖:
192.168.0.0/24192.168.1.0/24
这种做法叫 route summarization。互联网级路由协议 BGP 正是依赖 CIDR 和最长前缀匹配来决定目的流量走向。没有 CIDR,全球路由表规模会更难控制。
几个最常见的问题,直接给答案
子网掩码和 CIDR 前缀有什么区别
没有本质区别,表达的是同一件事,只是写法不同。
255.255.255.0/24
都表示前 24 位是网络位。
/24 有多少可用主机
总共 256 个地址,可用 254 个。
首地址是网络地址,末地址是广播地址,不能分配。
公网 IP 和私网 IP 最根本的区别是什么
公网可在互联网全局路由。私网仅用于内部网络,不会被公网路由器转发。私网主机要访问公网,通常必须经过 NAT。
CIDR 为什么会出现
为了解决两件事:
- 分类地址空间分配粗糙,导致严重浪费
- 路由表增长过快
CIDR 允许任意前缀长度分配,并支持路由聚合。
VLSM 和 CIDR 是什么关系
VLSM 是设计实践,CIDR 是能力基础。
没有 CIDR 去掉类别边界,VLSM 就无从实现。
IPv6 也有 CIDR 吗
有,而且写法完全一致。
例如 2001:db8::/32、2001:db8:1:1::/64。
网络地址和广播地址有什么区别
- 网络地址:主机位全 0,表示子网本身
- 广播地址:主机位全 1,表示该子网内所有主机
两者都不能分配给普通主机。注意,这只针对具体子网的首尾地址,不是简单看最后一段是否等于 0 或 255。
怎么判断一个 IP 属于哪个子网
把 IP 地址和子网掩码做按位与,结果就是所属子网的网络地址。
例如:
- IP:
192.168.10.75 - 掩码:
255.255.255.0
结果是:
- 网络地址:
192.168.10.0
所以该地址属于 192.168.10.0/24
最后该记住什么
这套知识真正重要的部分只有四条:
- IP 地址本质是 bit 序列,子网划分是在 bit 层面完成的
- 子网掩码和 CIDR 只是同一件事的两种表示法
- IPv4 里大多数网段都有网络地址和广播地址两个保留地址
- 网络规划时,地址不重叠和前缀选型,往往比“是否刚好够用”更重要
只要能熟练回答下面几个问题,网络配置就很难再出低级错误:
- 这个地址块的网络边界在哪里
- 可用地址范围是什么
- 需要多少主机时应该选哪个前缀
- 两个网络未来是否会互通,是否存在 CIDR 重叠
- 当前规则是在对单主机授权,还是在对子网授权
把这些问题想清楚,CIDR 就不是记号,而是日常运维和网络设计里最基本的工作语言。
关于
关注我获取更多资讯