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 台主机。

问题在于:

  1. 地址浪费:B 类地址对于大多数组织来说主机位太多,容易造成大量 IP 地址闲置。而 C 类地址主机位又太少,不够用。
  2. 路由表膨胀:随着互联网的发展,大量的 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
2
3
graph LR
A[IP地址 (Binary)] -- 按位与 (AND) --> C[网络地址 (Binary)]
B[子网掩码 (Binary)] -- 按位与 (AND) --> C

示例:192.168.1.100255.255.255.0

1
2
3
4
IP 地址:   11000000.10101000.00000001.01100100  (192.168.1.100)
子网掩码: 11111111.11111111.11111111.00000000 (255.255.255.0)
------------------------------------------------------------
网络地址: 11000000.10101000.00000001.00000000 (192.168.1.0)

获取到网络地址后,主机地址就是 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 的优势

  1. IP 地址高效利用 (子网划分 - Subnetting)
    通过调整前缀长度,可以将一个大的网络划分为多个小的子网,或将多个小的子网聚合成一个大的网络 (路由聚合/超网)。

    • 例子:传统 C 类地址只能是 /24,只能有 254 个可用 IP。但通过 CIDR,可以将一个 /24 的网络划分为两个 /25 的子网,每个子网有 126 个可用 IP,提高了地址利用率。
  2. 减少路由表项 (路由聚合 - Route Aggregation/Supernetting)
    多个连续的 IP 地址块可以聚合成一个更大的 CIDR 块,路由器只需维护一个聚合路由条目,大大减少了路由器的负担和路由表的规模。

    • 例子:如果一个组织拥有 192.168.0.0/24192.168.1.0/24192.168.2.0/24192.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 通信的关键。