子网划分与CIDR表示法详解(附示例)
IPAddress-Lookup.com ·
如果你曾经盯着这样的地址 192.168.1.0/24 ,并好奇那个斜杠和数字究竟代表什么,那么你来对地方了。子网划分和CIDR表示法是现代网络设计、安全和路由的核心,但这个话题却素来以令人望而生畏著称。其实,它并不一定非得如此。 一旦你明白 IP 地址其实只是一串二进制位,而子网掩码只是告诉你“网络”部分在哪里结束、“主机”部分在哪里开始,其他一切就会豁然开朗。 在本指南中,我们将从第一性原理出发逐步构建概念框架,完整解析多个真实案例,并为你提供一份可放在键盘旁的速查表。学习过程中,你可以使用我们的子网计算器工具亲自验证每项计算结果。
什么是子网,我们为什么要进行子网划分?
子网(subnet,即子网络的缩写)是更大IP网络的逻辑划分。工程师们不会将所有设备都置于一个巨大的扁平网络中,而是将该地址空间划分为更小、自成体系的块。 每个块都是一个子网,拥有自己的地址范围、网络地址和广播地址。路由器负责在子网之间传输流量,而单个子网内的设备则无需路由器介入即可直接相互通信。
子网划分绝非无谓的繁琐工作。网络之所以采用这种划分方式,有以下几个具体原因:
- 提高效率和节约地址。向一个组织分配一个巨大的地址块会造成地址浪费。子网划分允许您根据部门、楼层或分支机构的实际需求精确分配地址,而不是向上取整到最接近的巨大地址类。
- 更小的广播域。某些流量(如 ARP 请求)会广播到子网中的每台主机。在拥有数千台设备的扁平网络中,这种通信会严重拖慢网络速度。将网络划分为子网可保持每个广播域规模较小,从而确保网络运行高效。
- 安全分区。通过将服务器、访客 Wi-Fi 和内部工作站放置在不同的子网中,您可以在它们之间应用防火墙规则和访问控制列表。如果数据库服务器和受感染的访客设备位于相互隔离的子网中,那么受感染的设备将无法访问数据库服务器。
- 更简单、更快捷的路由。路由器根据网络前缀做出决策。设计合理的子网可以汇总为一条路由,从而缩小路由表规模,并加快互联网上的转发决策速度。
二进制知识速览:位、字节和子网掩码
一个 IPv4 地址长度为 32 位。我们通常将其写为四个用点分隔的十进制数,例如 192.168.1.10,但这些数字实际上都是由 8 位二进制数组成的单元,称为字节。每个字节 8 位,共 4 个字节,总计 32 位。每个字节的取值范围为 0 到 255,因为 8 位可以表示 2^8 = 256 个不同的值。
八位组中各位的权重分别为 128、64、32、16、8、4、2 和 1。转换时,将所有为 1 的位数相加即可。例如,八位组 11000000 为 128 + 64 = 192,而 10101000 为 128 + 32 + 8 = 168。因此 192.168.1.10 二进制表示为:
- 192 =
11000000 - 168 =
10101000 - 1 =
00000001 - 10 =
00001010
子网掩码也是一个32位值,但它很特殊:它总是由一串1紧接着一串0组成。1表示地址中的网络部分,0表示主机部分。掩码 255.255.255.0 在 11111111.11111111.11111111.00000000 ,即24个1后跟8个0。 要确定一个地址所属的网络,需对该地址与子网掩码进行位与运算:子网掩码中为1的位置,地址中的该位保持不变;子网掩码中为0的位置,该位变为0。这一位与运算正是子网划分中最重要的计算步骤。
分级寻址:简史回顾
在互联网早期,IP地址是根据第一个八位的值,按固定的“类”进行分配的。这被称为“分类寻址”,虽然这种方式现已过时,但理解它有助于说明CIDR为何是一项巨大的改进。
- A类涵盖第一个八位组的1至126,使用8位网络部分(子网掩码
255.0.0.0,/8),每个网络约可容纳1670万个主机。 - A类涵盖第1至126个八位组,使用16位网络部分(子网掩码
255.255.0.0, a/16),每个网络约有 65,000 个主机。 - C类网络涵盖192至223,使用24位网络部分(子网掩码
255.255.255.0,a/24),每个网络仅提供254个可用主机。
问题在于其僵化。一个需要 2,000 个地址的组织,规模已超出 C 类网络(254 个主机)的容量,却不得不被分配一个 B 类网络(65,000 个主机),从而浪费了超过 60,000 个地址。 随着互联网呈指数级增长,这种浪费导致IPv4地址空间面临完全耗尽的威胁。因此,需要一种更灵活的方案。
CIDR的出现:逐位解析其表示法
CIDR(无类域间路由)于1993年推出,旨在取代僵化的类系统。CIDR不再将网络规模与第一个八位字节绑定,而是允许网络与主机的分界点位于32位中的任意位置。 我们使用如今已广为人知的斜杠表示法来表达这一点,即 CIDR 前缀。
斜杠后面的数字即子网掩码中“1”位的数量,换言之,即属于网络的位数。因此:
/8表示8个网络位,子网掩码255.0.0.0(即旧的A类网络大小)。/16表示 16 个网络位,子网掩码(旧的 B 类大小)。255.255.0.0(旧的 A 类大小)。/24表示 24 个网络位,子网掩码255.255.255.0(旧的C类网段大小)。/26表示 26 个网络位,子网掩码255.255.255.192,仅剩 6 个主机位。
计算前缀包含多少个地址的“魔法公式”是 2^(32 − n),其中 n 是前缀长度。由于整个 IPv4 地址空间为 32 位,减去网络位后剩下的就是主机位,而 2 的该次幂即为该地址块中的总地址数。对于 /24 该前缀的总地址数为 2^(32−24) = 2^8 = 256 个。对于 /26 则为 2^(32−26) = 2^6 = 64 个地址。前缀号越大,子网就越小。
计算子网的关键值
每个子网都有几个需要识别的特殊地址。以下是每个地址的含义及其查找方法。
- 网络地址。地址块中的第一个地址。所有主机位均为 0。该地址用于标识子网本身,不能分配给任何设备。
- 广播地址。该地址块中的最后一个地址。所有主机位均为1。发送到此处的流量将到达子网上的每个主机,因此它也不能用作主机地址。
- 第一个可用主机地址。位于网络地址上方一个地址处(网络地址 + 1)。
- 最后一个可用主机地址。位于广播地址下方一个地址处(广播地址 - 1)。
- 总地址数。2^(32 − n)。
- 可用主机数。总数减去 2,因为网络地址和广播地址已被保留。计算公式为 2^(32 − n) − 2。
还有一个值得了解的值:通配符子网掩码。它是子网掩码的补码,通过翻转每个比特获得(将每个八位组从255中减去)。例如,当子网掩码为 255.255.255.0 用于选择网络,其通配符 0.0.0.255 则用于指定主机范围。通配符子网掩码在思科访问控制列表和OSPF配置中频繁出现,因此掌握其用法大有裨益。
例题 1:192.168.1.0/24
让我们从最简单的情况开始。一个 /24 地址恰好以八位组边界整数结束,因此无需进行二进制运算。由于网络位数为24位,主机部分即为最后一个八位组的全部。
| 属性 | 值 |
|---|---|
| CIDR 表示法 | 192.168.1.0/24 |
| 子网掩码 | 255.255.255.0 |
| 通配符子网掩码 | 0.0.0.255 |
| 网络地址 | 192.168.1.0 |
| 广播地址 | 192.168.1.255 |
| 第一个可用主机 | 192.168.1.1 |
| 最后一个可用主机 | 192.168.1.254 |
| 地址总数 | 256 (2^8) |
| 可用主机 | 254 |
这是典型的家庭和小型办公室网络。从 .1 到 .254 的地址均可供设备使用, .0 表示网络名称,而 .255 是广播地址。
示例 2:10.0.0.0/26
现在来看一个不落在八位字节边界上的前缀。一个 /26 表示 26 个网络位,因此最后一个八位组被拆分:其前两位属于网络,剩余六位为主机位。六个主机位可提供 2^6 = 64 个子网地址。这意味着 /26 子网在最后一个八位组中的地址以64为增量递增:0、64、128、192。
聚焦于第一个块 10.0.0.0/26,其网络掩码为 255.255.255.192 因为 11000000 在最后一个八位组中等于192。
| 属性 | 值 |
|---|---|
| CIDR 表示法 | 10.0.0.0/26 |
| 子网掩码 | 255.255.255.192 |
| 通配符掩码 | 0.0.0.63 |
| 网络地址 | 10.0.0.0 |
| 广播地址 | 10.0.0.63 |
| 第一个可用主机 | 10.0.0.1 |
| 最后一个可用主机 | 10.0.0.62 |
| 地址总数 | 64 (2^6) |
| 可用主机 | 62 |
该序列中的下一个子网应为 10.0.0.64/26 (主机 .65 至 .126,广播地址 .127),然后 10.0.0.128/26,最后是 10.0.0.192/26。请注意,该块大小 64 恰好是决定每个子网起始位置的“魔数”。
例题 3:172.16.5.0/28
最后一个示例将子网压缩得更小。一个 /28 包含28个网络位和仅4个主机位,共产生2^4 = 16个地址,其中仅14个主机地址可用。最后一个八位组用于 11110000 作为网络部分,其值等于240,因此子网掩码为 255.255.255.240。子网以16为增量划分。
| 属性 | 值 |
|---|---|
| CIDR 表示法 | 172.16.5.0/28 |
| 子网掩码 | 255.255.255.240 |
| 通配符掩码 | 0.0.0.15 |
| 网络地址 | 172.16.5.0 |
| 广播地址 | 172.16.5.15 |
| 第一个可用主机 | 172.16.5.1 |
| 最后一个可用主机 | 172.16.5.14 |
| 地址总数 | 16 (2^4) |
| 可用主机 | 14 |
A /28 是小型点对点网络以及严格受控的服务器分段中的一种常见规模,这类场景通常只需少量地址。如果仅需两个主机(例如用于两台路由器之间的链路),则可将规模缩减至 /30,它正好提供 2 个可用地址。
子网划分速查表
与其每次都重新计算2的幂,不如记住或收藏下表。它涵盖了从 /24 至 /30,并显示了子网掩码、通配符、地址块大小(总地址数)以及可用主机数。
| CIDR | 子网掩码 | 通配符 | 总地址数 | 可用主机数 |
|---|---|---|---|---|
| /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 |
请注意这种优雅的规律:前缀每增加一位,主机数量就减半;而最后一个八位组中的掩码值只能是 128、192、224、240、248 或 252 中的一个。 这些是最后一个子网掩码八位组可以取的唯一有效值。
VLSM:不同大小的子网
传统的子网划分将网络分割成大小相等的片段,当各部门的需求差异很大时,这种做法会造成资源浪费。可变长度子网掩码(VLSM)通过允许在同一整体网络内应用不同的前缀长度来解决这一问题。实际上,这是对子网进行进一步的子网划分。
假设您拥有 192.168.10.0/24 ,并需要为一个拥有100台主机的部门、一个拥有50台主机的部门,以及两条各含2台主机的路由器链路提供服务。使用VLSM,您将分配如下:
- A
/25(126台主机)分配给大型部门:192.168.10.0/25. - A
/26(62个主机) 分配给中等规模的部门:192.168.10.128/26. - 两个
/30个子网(每个子网2台主机)用于路由器链路,从剩余空间中划分出来。
VLSM 的黄金法则是先分配最大的子网,然后逐步向下分配,这样各块子网就能整齐嵌套,互不重叠。这就是现实中的地址规划如何在避免浪费的同时,仍为未来扩展预留空间。
关于 IPv6 前缀的说明
以上内容均涉及 IPv4,但 CIDR 表示法可直接应用于 IPv6,只是数字规模更大。IPv6 地址为 128 位而非 32 位,因此前缀范围可达 /128。最需要了解的是 /64:根据长期以来的惯例,单个 IPv6 子网是一个 /64,其中前64位用于网络前缀,后64位用于主机(即“接口标识符”)。 这样每个子网就拥有 2^64 个地址,这是一个几乎难以想象的数字,这也是为什么 IPv6 很少像 IPv4 子网划分那样,需要进行各种地址节约的“花招”。如果您想更深入地比较这两种协议,请参阅我们的《IPv4 与 IPv6 对比指南》。
综合总结
子网划分归根结底涉及三个核心概念:IP 地址由 32 位组成,子网掩码决定网络的边界,而公式 2^(32 − n) 则说明了每个地址块的大小。掌握这些要点后,其余的只是简单的算术运算。 首先确定前缀,将其转换为块大小,找出网络地址和广播地址,可用地址范围就在它们之间。通过几个示例练习,这个过程就会变得轻车熟路。若想即时验证计算结果,只需将任意地址和前缀输入我们的子网计算器工具,并将结果与您的计算结果进行对比。
常见问题
为什么需要从总地址数中减去 2 才能得到可用主机数?
每个 IPv4 子网中都有两个地址被保留,无法分配给设备:网络地址(所有主机位设为 0),用于标识子网;以及广播地址(所有主机位设为 1),用于同时联系所有主机。 减去这两个地址后,剩下的就是您可以实际分配给主机的地址数量,因此公式为 2^(32 − n) − 2。
子网掩码和 CIDR 前缀有什么区别?
它们以两种格式表达完全相同的信息。例如,子网掩码 255.255.255.0 是一个32位的点分十进制值,而CIDR前缀 /24 则仅仅是该子网掩码中 1 位的数量。任何子网掩码都可以写成前缀形式,反之亦然;CIDR 表示法只是更简洁且更不易出错。
IP 地址中的 /24 实际上是什么意思?
斜杠后面的数字是前缀长度,表示该地址的 32 位中有多少位用于定义网络。一个 /24 将前 24 位保留给网络,剩余 8 位用于主机,从而产生 256 个总地址(2^8)和 254 个可用地址。这等同于子网掩码 255.255.255.0.
为什么 CIDR 取代了分级寻址?
分级寻址迫使网络规模以巨大的阶梯式增长:先是 254 个主机,接着是 65,000 个,然后是 1600 万个,中间没有任何过渡。 组织通常被分配的地址远超其实际需求,从而浪费了有限的 IPv4 地址空间。CIDR 允许网络边界落在任意一位上,因此可以按需调整地址块的大小;它还允许对路由进行汇总,从而缩小路由表的规模。
通配符子网掩码有何用途?
通配符子网掩码是子网掩码的位运算补码,通过将每个八位组从 255 中减去得到。子网掩码用于匹配网络部分,而通配符子网掩码则指定哪些位可以变化。它主要出现在思科访问控制列表和 OSPF 等路由协议中,用于简洁地描述地址范围。
IPv6是否也适用相同的子网划分规则?
CIDR 概念是相同的:斜杠后面的前缀长度标记了网络边界。区别在于规模。IPv6 地址为 128 位而非 32 位,标准子网大小为 /64,每个子网可提供 2^64 个主机地址。由于地址空间极其庞大,IPv6 子网划分更侧重于结构和层次,而非竭尽全力榨取每一个地址。