CIDR和子网掩码详解
CIDR (Classless Inter-Domain Routing,无类别域间路由) 和子网掩码 (Subnet Mask) 是 IP 地址管理和路由技术中的两个核心概念。它们共同解决了传统 IP 地址分类的局限性,实现了更高效的 IP 地址分配和更灵活的网络划分。理解这两个概念对于构建和管理现代 IP 网络至关重要。
核心思想:CIDR 使用“IP 地址/前缀长度”的格式,通过前缀长度直接表示网络部分和主机部分,从而废除了传统的 A/B/C 类地址概念。子网掩码则是这种前缀长度的二进制表示,用于在 IP 地址中区分网络地址和主机地址。
一、IP 地址基础回顾
在深入 CIDR 和子网掩码之前,我们先快速回顾一下 IP 地址的基础知识:
- IP 地址 (IPv4):一个 32 位的二进制数字,通常表示为四个十进制数(0-255)由点分隔的形式,例如
192.168.1.1。 - 网络地址 (Network Address):用于标识一个 IP 子网,所有在该子网内的主机都共享相同的网络地址。
- 主机地址 (Host Address):用于标识子网内的一台特定设备。
- 广播地址 (Broadcast Address):用于向子网内所有设备发送数据包的特殊地址。
1.1 传统 IP 地址分类的局限性
在 CIDR 出现之前,IPv4 地址被分为 A、B、C、D、E 五类。其中:
- A 类地址:第一位为 0,网络部分占 8 位 (
0-127.x.x.x),最多有 126 个网络,每个网络可容纳 1600 多万台主机。 - B 类地址:前两位为 10,网络部分占 16 位 (
128-191.x.x.x),最多有 16000 多个网络,每个网络可容纳 65000 多台主机。 - C 类地址:前三位为 110,网络部分占 24 位 (
192-223.x.x.x),最多有 200 多万个网络,每个网络可容纳 254 台主机。
问题在于:
- 地址浪费:B 类地址对于大多数组织来说主机位太多,容易造成大量 IP 地址闲置。而 C 类地址主机位又太少,不够用。
- 路由表膨胀:随着互联网的发展,大量的 A/B/C 类网络都需要在路由表中维护,导致路由器负载增加。
CIDR 和子网掩码正是为了解决这些问题而诞生的。
二、子网掩码 (Subnet Mask)
2.1 定义
子网掩码是一个 32 位的二进制数字,与 IP 地址结合使用,用于区分 IP 地址中的网络部分和主机部分。
- 子网掩码中网络部分对应的二进制位全部为
1。 - 子网掩码中主机部分对应的二进制位全部为
0。
2.2 格式与表示
子网掩码通常以与 IP 地址相同的点分十进制形式表示,例如 255.255.255.0。
示例:
一个 IP 地址 192.168.1.100 搭配子网掩码 255.255.255.0。
| 部分 | IP地址 (点分十进制) | IP地址 (二进制) |
|---|---|---|
| 第一段 | 192 | 11000000 |
| 第二段 | 168 | 10101000 |
| 第三段 | 1 | 00000001 |
| 第四段 | 100 | 01100100 |
| 合计 | 192.168.1.100 | 11000000.10101000.00000001.01100100 |
| 子网掩码 | 255.255.255.0 | 11111111.11111111.11111111.00000000 |
2.3 如何利用子网掩码获取网络地址和主机地址?
通过将 IP 地址和子网掩码进行按位与 (AND) 运算,可以得到网络地址。
1 | graph LR |
示例:192.168.1.100 和 255.255.255.0
1 | IP 地址: 11000000.10101000.00000001.01100100 (192.168.1.100) |
获取到网络地址后,主机地址就是 IP 地址中,子网掩码为 0 的那部分。
三、CIDR (Classless Inter-Domain Routing)
3.1 定义
CIDR (无类别域间路由) 是一种 IP 地址表示方法,它废弃了传统的 A、B、C 类地址概念,允许 IP 地址的网络部分长度是可变的,从而实现更灵活的 IP 地址分配。
3.2 格式
CIDR 地址表示为 IP地址/前缀长度。
- IP地址:可以是网络地址或主机地址。
- 前缀长度 (Prefix Length):一个十进制数字 (1-32),表示 IP 地址中网络部分的位数。它等同于子网掩码中
1的个数。
示例:
192.168.1.0/24:表示 IP 地址192.168.1.0,网络部分占 24 位。10.0.0.0/8:表示 IP 地址10.0.0.0,网络部分占 8 位。
3.3 CIDR 与子网掩码的对应关系
CIDR 的前缀长度可以直接转换为子网掩码:
| CIDR 前缀长度 | 子网掩码 | 十进制表示 |
|---|---|---|
| /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 |
| /28 | 11111111.11111111.11111111.11110000 | 255.255.255.240 |
| /30 | 11111111.11111111.11111111.11111100 | 255.255.255.252 |
3.4 CIDR 的优势
IP 地址高效利用 (子网划分 - Subnetting):
通过调整前缀长度,可以将一个大的网络划分为多个小的子网,或将多个小的子网聚合成一个大的网络 (路由聚合/超网)。- 例子:传统 C 类地址只能是
/24,只能有 254 个可用 IP。但通过 CIDR,可以将一个/24的网络划分为两个/25的子网,每个子网有 126 个可用 IP,提高了地址利用率。
- 例子:传统 C 类地址只能是
减少路由表项 (路由聚合 - Route Aggregation/Supernetting):
多个连续的 IP 地址块可以聚合成一个更大的 CIDR 块,路由器只需维护一个聚合路由条目,大大减少了路由器的负担和路由表的规模。- 例子:如果一个组织拥有
192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24这四个网络,通过路由聚合,可以将它们表示为192.168.0.0/22一个路由条目。
- 例子:如果一个组织拥有
四、子网划分 (Subnetting) 实践
假设我们有一个网络 192.168.1.0/24,包含了 254 个可用 IP。现在我们想把它划分为 4 个子网。
4.1 确定主机位借位数
/24表示网络部分 24 位,主机部分 8 位 (32-24=8)。- 我们需要 4 个子网。
2^n >= 4,所以n=2。我们需要从主机位借 2 位来做子网位。 - 新的网络部分长度为
24 + 2 = 26位。 - 新的主机部分为
32 - 26 = 6位。
4.2 计算新子网掩码
- 新的 CIDR 前缀为
/26。 - 子网掩码:前 26 位为
1,后 6 位为0。11111111.11111111.11111111.11000000
转换成十进制:255.255.255.192。
4.3 计算每个子网的网络地址、广播地址和可用 IP 范围
- 每个子网可用主机数:
2^6 - 2 = 64 - 2 = 62台。
| 子网号 | 网络地址 | 主机位 (最后一段) | 广播地址 | 可用 IP 范围 |
|---|---|---|---|---|
| 0 | 192.168.1.0/26 |
00xxxxxx |
192.168.1.63 |
192.168.1.1 - 192.168.1.62 |
| 1 | 192.168.1.64/26 |
01xxxxxx |
192.168.1.127 |
192.168.1.65 - 192.168.1.126 |
| 2 | 192.168.1.128/26 |
10xxxxxx |
192.168.1.191 |
192.168.1.129 - 192.168.1.190 |
| 3 | 192.168.1.192/26 |
11xxxxxx |
192.168.1.255 |
192.168.1.193 - 192.168.1.254 |
表格说明:
- 子网号:通过借用的主机位 (两位) 的组合 (00, 01, 10, 11) 来区分。
- 网络地址:主机位全部为
0的地址。 - 广播地址:主机位全部为
1的地址。 - 可用 IP 范围:除了网络地址和广播地址之外的所有地址。
五、VLSM (变长子网掩码)
CIDR 的核心思想就是允许不同的子网使用不同长度的子网掩码,这被称为 VLSM (Variable Length Subnet Masking)。
场景:
假设一个公司有一个部门需要 50 台主机,另一个部门需要 10 台主机。如果都使用 /26 (62 台可用主机),那么 10 台主机的部门将浪费 50 多个 IP。
使用 VLSM,我们可以:
- 为 50 台主机的部门分配一个
/26的子网 (62 台可用)。 - 为 10 台主机的部门分配一个
/28的子网 (14 台可用)。
这样可以更有效地利用 IP 地址资源。
六、总结
- 子网掩码:一个 32 位数字,用于划分 IP 地址的网络部分和主机部分。网络部分为
1,主机部分为0。 - CIDR (无类别域间路由):一种 IP 地址表示方法 (
IP地址/前缀长度),废弃了传统地址分类,实现了 IP 地址的灵活分配和路由聚合。前缀长度即为子网掩码中1的数量。 - 子网划分:通过增加子网掩码的长度(借用主机位),将一个大网络划分为多个小网络,提高 IP 地址利用率。
- 路由聚合:通过缩短子网掩码的长度(归还网络位),将多个小网络聚合成一个大网络,减少路由表条目。
- VLSM (变长子网掩码):允许同一网络内部存在不同长度子网掩码的子网,进一步提高了 IP 地址利用效率。
CIDR 和子网掩码是现代 IP 网络设计的基石,它们优化了 IP 地址的分配和路由效率,是理解网络拓扑和 IP 通信的关键。
