在网络工程和系统运维的学习中,IP地址、子网掩码和CIDR是绕不开的基础。很多时候,我们习惯了 192.168.1.* 和 255.255.255.0 的固定搭配,却在遇到 255.255.255.192 这样的掩码时感到无从下手。
今天,我们就抛开死记硬背,从二进制的底层逻辑出发,重新认识这些子网划分的基础。
1 IP地址分类与特殊地址的含义
在CIDR出现之前,早期的互联网(IPv4)采用的是分类网络(Classful Network) 架构。IP地址用32位二进制表示,不过通常表示为点分十进制。这些IP被静态地划分为五类,其中最常用的是 A、B、C 三类:
- A类地址:
- 结构: 8位网络号 + 24位主机号。最高位固定为
0。 - 范围:
1.0.0.0到126.255.255.255(127.x.x.x保留为环回地址,用于本地测试)。 - 默认掩码:
255.0.0.0。适合超大型网络。
- 结构: 8位网络号 + 24位主机号。最高位固定为
- B类地址:
- 结构: 16位网络号 + 16位主机号。最高两位固定为
10。 - 范围:
128.0.0.0到191.255.255.255。 - 默认掩码:
255.255.0.0。适合中型网络。
- 结构: 16位网络号 + 16位主机号。最高两位固定为
- C类地址:
- 结构: 24位网络号 + 8位主机号。最高三位固定为
110。 - 范围:
192.0.0.0到223.255.255.255。 - 默认掩码:
255.255.255.0。适合小型网络。
- 结构: 24位网络号 + 8位主机号。最高三位固定为
此外,在一个完整的网段中,有两个IP地址具有特殊物理含义,永远不能分配给具体的主机:
- 网络地址(Network Address): 主机号部分全为
0的地址。它代表这个网段本身,是路由器进行路由表查找时的目标标识。例如:192.168.1.0。 - 广播地址(Broadcast Address): 主机号部分全为
1的地址。当向这个地址发送数据包时,该网段内的所有设备都会收到。例如:192.168.1.255。
2 子网掩码的本质与子网划分
2.1 掩码的本质
子网掩码的作用只有一个:切割网络号和主机号。 它的硬性规则是:转换成二进制后,左边必须全是连续的 1(代表网络位),右边必须全是连续的 0(代表主机位)。
当掩码的 1 刚好占满 8 位(一个字节)时,二进制 11111111 转换成十进制就是 255。这就是我们常见到 255.255.255.0 的原因。
而计算机是通过将 IP 地址与子网掩码进行 按位与(AND) 运算,来得出该 IP 所属的网络地址的。规则是:1 AND 1 = 1,其他皆为 0
这里举个例子:
IP 192.168.1.65/26
-
IP 二进制:
11000000 . 10101000 . 00000001 . 01000001(65) -
掩码 二进制:
11111111 . 11111111 . 11111111 . 11000000(255.255.255.192) -
按位 AND:
11000000 . 10101000 . 00000001 . 01000000-> 网络地址:192.168.1.64 -
计算广播地址: 将网络地址中的主机位(最后 6 位,即掩码为 0 的部分)全部替换为
1。11000000 . 10101000 . 00000001 . 01111111-> 广播地址:192.168.1.127 -
可用主机数: 个(减去网络地址和广播地址),即
192.168.1.65到192.168.1.126。
2.2 子网划分与“核心密码表”
在实际应用中,默认的 A/B/C 类网络往往粒度太大(例如一个 C 类网络有 254 个可用IP,但某个部门只需 30 个),为了不浪费IP,我们需要进行子网划分(Subnetting)。
子网划分的本质是:向主机位“借位”来充当网络位。
一旦借位,掩码中连续 1 和 0 的分界线就会落在一个字节的内部,这就产生了非 255 的十进制数字。以下是8位二进制中,连续的 1 可能产生的所有十进制结果(强烈建议熟记此表):
| 二进制形态 | 掩码十进制值 | 对应借用的比特数 | 剩余主机位数 |
|---|---|---|---|
10000000 | 128 | 1 | 7 |
11000000 | 192 | 2 | 6 |
11100000 | 224 | 3 | 5 |
11110000 | 240 | 4 | 4 |
11111000 | 248 | 5 | 3 |
11111100 | 252 | 6 | 2 |
11111110 | 254 | 7 | 1 |
11111111 | 255 | 8 | 0 |
举例说明: 假设拥有一个C类网络 192.168.1.0,默认掩码 255.255.255.0。 现在想将其划分为 4 个小规模子网。
- 需要借位:,因此向主机位借 2 位。
- 新掩码二进制:
11111111.11111111.11111111.11000000 - 查阅上方密码表,第四个字节
11000000对应十进制192。 - 因此,新的子网掩码为
255.255.255.192。
3 CIDR(无类别域间路由)
由于早期的 A/B/C 类网络划分过于僵化,导致大量 IP 地址被闲置浪费,互联网工程任务组(IETF)引入了 CIDR(Classless Inter-Domain Routing,无类别域间路由)。
CIDR 彻底打破了 A/B/C 类的严格边界,它采用一种极其直观的后缀表示法:IP地址/前缀长度。
例如:192.168.1.0/26。 这里的 /26 (前缀长度)直接代表了子网掩码中连续 1 的个数。这意味着前 26 位是网络位,后 6 位(32 - 26)是主机位。
CIDR 不仅可以用于子网划分(向下拆分网段),更重要的是它支持路由聚合(Supernetting,超网)。通过将多个小网段合并成一个拥有更短前缀(如 /22)的大网段,可以极大程度地减少骨干路由器中路由表的条目数量,提升网络转发效率。
4 将子网掩码转换为 CIDR 前缀长度
掌握了底层的二进制规律,这二者的转换非常简单:
方法:计算点分十进制掩码转换成二进制后,里面有多少个 1。
以掩码 255.255.255.224 为例:
- 前三个
255都是 8 个1,合计 个1。 - 看第四个字节
224。根据前面的“核心密码表”,224的二进制是11100000,包含 3 个1。 - 总
1的个数 = 。 - 因此,该掩码对应的 CIDR 前缀长度为
/27。
5 根据子网掩码和前缀长度计算子网大小
网络工程中最常见的问题是:这个网段到底能容纳多少台设备? 计算公式十分简单:
- 确定主机位数():
- 计算 IP 总数:
- 计算可用主机数: (必须减去全0的网络地址和全1的广播地址)
举个例子:CIDR 为 /28 的网段能容纳多少设备?
- 主机位数:
- IP 总数: 个
- 可用主机数: 个(即该网段最多能分配给 14 台设备)。
6 常见掩码、CIDR与IP总数对应关系速查表
在日常工作中,有些常用的网段划分不需要每次都去算二进制,直接查表可以极大提高效率。以下列出了中小型网络中最常用的 CIDR 与掩码对应关系:
| CIDR 前缀 | 子网掩码 (点分十进制) | IP 总数 (2n) | 可用主机数 (2n−2) | 常见应用场景 |
|---|---|---|---|---|
| /22 | 255.255.252.0 | 1024 | 1022 | 中型企业办公网聚合 |
| /23 | 255.255.254.0 | 512 | 510 | 较大型局域网 |
| /24 | 255.255.255.0 | 256 | 254 | 标准C类,最常见的家庭/办公网 |
| /25 | 255.255.255.128 | 128 | 126 | 将C类对半划分 |
| /26 | 255.255.255.192 | 64 | 62 | 小型部门隔离 |
| /27 | 255.255.255.224 | 32 | 30 | 微型子网 |
| /28 | 255.255.255.240 | 16 | 14 | 较小规模IP分配 |
| /29 | 255.255.255.248 | 8 | 6 | 小型服务器集群 |
| /30 | 255.255.255.252 | 4 | 2 | 点对点链路(如路由器互联) |
| /31 | 255.255.255.254 | 2 | 0 (见注) | RFC 3021 标准下的点对点链路 |
| /32 | 255.255.255.255 | 1 | 1 | 单机主机路由(Host Route) |
(注:在传统的IPv4标准中,/31 是没有可用主机的,因为仅有的2个IP分别被网络地址和广播地址占据。但根据 RFC 3021,在严格的点对点链路中,/31 可以直接将这2个IP分配给两端路由器使用,不设广播地址。)
写在最后
网络底层的运算看似枯燥,但只要掌握了“借位”和“掩码二进制”的核心密码,一切网段划分和计算都会变得豁然开朗。希望这篇笔记能帮助大家彻底搞懂掩码与CIDR的奥秘!