子网掩码用来说明一个 IPv4 地址里,哪一部分表示网络,哪一部分表示设备。比如 192.168.1.20 配上掩码 255.255.255.0,前三段(192.168.1)是网络,最后一段(20)是这台设备。CIDR 写法则是在斜杠后写出网络位的个数:255.255.255.0 换成二进制是 24 个 1,所以写作 /24。
一个 /24 有 256 个地址。第一个(.0)是网络地址,最后一个(.255)是广播地址,所以能分给设备的有 254 个。
关键在二进制位
IPv4 地址是 32 位,写成四个 0 到 255 的数。掩码也是 32 位:前面一串 1,后面全是 0。1 标出网络部分,0 标出主机部分。
地址 192.168.10.77 11000000.10101000.00001010.01001101
掩码 /26 11111111.11111111.11111111.11000000
网络地址 192.168.10.64 11000000.10101000.00001010.01000000
求网络地址,就是掩码为 1 的位保留地址原值、其余位清零(按位与)。这里最后一段 77 是 01001101,只保留前两位得到 01000000,也就是 64。
手算网络地址、广播地址和可用主机
以 192.168.10.77/26 为例:
- 块大小。 32 − 26 = 6 个主机位,2⁶ = 每个子网 64 个地址。
- 网络地址。 子网在最后一段按 64 的倍数开始:0、64、128、192。77 落在从 64 开始的那块,所以网络地址是
192.168.10.64。 - 广播地址。 这块里的最后一个地址:64 + 64 − 1 = 127,即
192.168.10.127。 - 可用主机。 两者之间的全部地址:
192.168.10.65到192.168.10.126,共 62 个。 - 掩码。 26 个 1 就是
255.255.255.192(最后一段是 256 − 64)。
边界落在前面某一段时方法一样。10.20.30.0/23 有 9 个主机位、512 个地址,第三段跨两个值:从 10.20.30.0 到 10.20.31.255,最后一个可用地址是 10.20.31.254。
CIDR 速查表
| CIDR | 子网掩码 | 反掩码 | 地址数 | 可用主机 |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 0.255.255.255 | 16,777,216 | 16,777,214 |
| /16 | 255.255.0.0 | 0.0.255.255 | 65,536 | 65,534 |
| /20 | 255.255.240.0 | 0.0.15.255 | 4,096 | 4,094 |
| /22 | 255.255.252.0 | 0.0.3.255 | 1,024 | 1,022 |
| /23 | 255.255.254.0 | 0.0.1.255 | 512 | 510 |
| /24 | 255.255.255.0 | 0.0.0.255 | 256 | 254 |
| /25 | 255.255.255.128 | 0.0.0.127 | 128 | 126 |
| /26 | 255.255.255.192 | 0.0.0.63 | 64 | 62 |
| /27 | 255.255.255.224 | 0.0.0.31 | 32 | 30 |
| /28 | 255.255.255.240 | 0.0.0.15 | 16 | 14 |
| /29 | 255.255.255.248 | 0.0.0.7 | 8 | 6 |
| /30 | 255.255.255.252 | 0.0.0.3 | 4 | 2 |
| /31 | 255.255.255.254 | 0.0.0.1 | 2 | 2(点对点链路,RFC 3021) |
| /32 | 255.255.255.255 | 0.0.0.0 | 1 | 1(单个主机) |
可用主机 = 地址数 − 2,因为网络地址和广播地址不能分给设备。表底的两个是例外:/31 用在两台路由器之间的链路上时没有广播地址,两个地址都能用;/32 就是单独一个地址。
反掩码(wildcard)是把掩码每一位取反(每段用 255 去减)。思科的 ACL 和 OSPF 用的是反掩码。
把一个网段划分成子网
前缀每多一位,块就减半。把一个 /24 分成四个 /26:
| 子网 | 网络地址 | 广播地址 | 可用范围 |
|---|---|---|---|
| 192.168.10.0/26 | .0 | .63 | .1–.62 |
| 192.168.10.64/26 | .64 | .127 | .65–.126 |
| 192.168.10.128/26 | .128 | .191 | .129–.190 |
| 192.168.10.192/26 | .192 | .255 | .193–.254 |
确定子网大小时,找能装下"主机数 + 2"的最小块:50 台设备需要 52 个地址,所以用 /26(64 个)。各子网大小不同时,先分配最大的,块才能对齐,这叫 VLSM(可变长子网掩码)。
私有地址段
下面这些地址段(RFC 1918)保留给内网使用,不会在公网上路由:
| 范围 | CIDR | 地址数 |
|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | 16,777,216 |
| 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 |
大多数家用路由器用的是 192.168.0.0/16 里的一个 /24,比如 192.168.1.0/24。
怎么验算
- 浏览器里:免费的子网计算器可以算出任意 IPv4 或 IPv6 前缀的网络地址、广播地址、掩码和可用范围,还能划分子网、规划 VLSM,不会上传任何内容。
- iPhone 上:网段尺(Subnetic) 在前缀滑块下面画出网络位和主机位,从 /0 拖到 /32 实时变化。IPv4 计算和二进制视图免费;一次性 Pro 解锁增加子网划分、VLSM 分配和 IPv6。
- Mac 终端里通常装有 Python:
python3 -c "import ipaddress; n=ipaddress.ip_network('192.168.10.77/26', strict=False); print(n, n.broadcast_address, n.num_addresses)"会输出192.168.10.64/26 192.168.10.127 64。
常见问题
/24 和 255.255.255.0 是一回事吗? 是。/24 表示前 24 位是网络部分,24 个 1 写成十进制就是 255.255.255.0。
/24 有多少个可用主机? 254 个:256 个地址减去网络地址(.0)和广播地址(.255)。
子网掩码和 CIDR 写法有什么区别? 表达的信息完全一样。掩码把网络位写成四个数(255.255.255.192),CIDR 在斜杠后面数出位数(/26)。
为什么 /30 只有 2 个可用地址? 它一共 4 个地址,其中两个是网络地址和广播地址。/30 曾是两台路由器之间链路的常用大小;/31 用 2 个地址完成同样的事,没有浪费。
反掩码是什么? 把子网掩码每一位取反:255.255.255.0 变成 0.0.0.255。思科 ACL 和 OSPF 用它表示哪些位必须匹配。