计算机网络学习站

kp-011 · 03-网络层与路由

子网划分、CIDR 与路由聚合

核心 约 35 分钟 CIDR子网划分VLSM最长前缀匹配
我的进度:

注:本文基于模型知识整理,建议结合权威教材与 RFC 原文核对细节。

一句话定义

子网划分把一个大网络从主机位借位切成多个小网;CIDR(Classless Inter-Domain Routing,无类别域间路由)彻底抛弃类别边界、用任意长度前缀表达地址块;路由聚合则把多个连续前缀合并成一个更短前缀以压缩路由表。

为什么重要

今天互联网上所有地址分配与路由通告都以 CIDR 斜线记法书写:接口配置写 /24,BGP 通告写 /22,防火墙规则写 /16。不会按位思考前缀,就无法配置网络、读懂路由表,也回答不了「为什么 192.168.1.192/26 不属于 192.168.1.0/25」这类问题。它是网络工程师岗位笔试的必考模块。

前置知识

建议先读 kp-010《IPv4 地址体系与分类编址》,掌握点分十进制、按位与运算、网络地址与广播地址的定义;核心直觉是「掩码中连续 1 的个数决定网络位长度」。

核心概念

  • 分类编址的浪费与 B 类困境:一个 3000 台主机的机构,拿 A 类浪费 99.9% 以上,拿 B 类 65534 个地址只用 3000 个;拿一堆 C 类又使上游路由表条目暴涨。地址消耗与路由表膨胀两头受压,催生了子网化,最终演进为无类别编址。
  • 子网划分(subnetting):从主机位借 n 位作子网号,得到 2^n 个等长子网;剩余 m 位为主机号,每子网可用主机 2^m − 2 台(扣除网络地址与广播地址)。
  • VLSM(Variable Length Subnet Mask,变长子网掩码):允许同一主网内不同子网用不同掩码,按各部门实际人数切分大小不一的子块,先分大网、再分小网,避免小部门占大子网。
  • CIDR 与斜线记法:地址块写作「起始地址/前缀长度」,前缀长度即掩码中连续 1 的个数;/24 等价于掩码 255.255.255.0,块大小为 2^(32−24) = 256 个地址。块必须对齐:起始地址的低 32−前缀长度位全为 0。
  • 路由聚合(超网,supernetting):把起始对齐、个数恰为 2 的幂的连续前缀合并为更短前缀,例如 192.168.0.0/24 至 192.168.3.0/24 四块合并为 192.168.0.0/22,上游路由表只需保留一条表项。
  • 最长前缀匹配(longest prefix match):目的地址同时命中多条路由时,选掩码最长、前缀最具体的那条;它使「一条聚合路由加若干精确例外」得以共存于同一张路由表。

公式与模型

子网数 = 2^n,n 为借用的主机位位数。每子网可用主机数 = 2^m − 2,m 为剩余主机位。地址块大小 = 2^(32−前缀长度)。聚合成立条件:被聚合的 k 个等长前缀必须连续、起始地址对齐,且 k 为 2 的幂,此时聚合后前缀长度 = 原前缀长度 − log2(k)。

图示

192.168.1.0/24 借 2 位拆成 4 个 /26

  主机位拆分:  [子网号 2 位][ 主机号 6 位 ]
                  nn         hhhhhh
  子网号   网络地址            可用主机范围      广播地址
  00       192.168.1.0/26     .1   ~ .62      .63
  01       192.168.1.64/26    .65  ~ .126     .127
  10       192.168.1.128/26   .129 ~ .190     .191
  11       192.168.1.192/26   .193 ~ .254     .255

  新掩码 255.255.255.192 = 11111111.11111111.11111111.11000000

原理与机制

子网化的本质是「网络号变长、主机号变短」:路由器内的转发逻辑不变,仍是按位与后查表,只是掩码不再由类别暗含,而由配置显式给定。VLSM 进一步放宽「同一主网内等长」的约束,使地址利用率逼近按需分配。CIDR 把无类别思想推广到域间:IANA 按前缀逐级下发地址块,运营商把客户前缀聚合后再向上一级通告,全球路由表规模才能与互联网增长解耦。最长前缀匹配是这一切的前提——聚合路由覆盖大片目的地作兜底,个别目的地需要更优下一跳时补充长前缀,匹配时最具体者胜出,两套机制互不冲突。

实例分析

先把 192.168.1.0/24 均分 4 份:借 2 位得 4 个 /26,掩码 255.255.255.192,四个子网依次为 192.168.1.0/26(可用 .1~.62)、192.168.1.64/26(.65~.126)、192.168.1.128/26(.129~.190)、192.168.1.192/26(.193~.254),每子网 62 台可用主机。再用 VLSM 按需切分:60 人部门取 /26(62 台),分到 192.168.2.0/26;30 人部门取 /27(30 台),紧跟其后分到 192.168.2.64/27;剩余空间留待后续细分子块。聚合练习:把 192.168.16.0/24、192.168.17.0/24、192.168.18.0/24、192.168.19.0/24 聚合,四个第三字节 16 至 19 的二进制高 6 位同为 000100,故聚合为 192.168.16.0/22。最长前缀匹配示例:路由表含 0.0.0.0/0 指向 R3、192.168.0.0/16 指向 R1、192.168.2.0/24 指向 R2;目的地址 192.168.2.7 三条全命中,按最长匹配交给 R2,而目的地址 10.1.1.1 只命中默认路由,交给 R3。

练习一:把 172.16.0.0/16 借 4 位子网化,写出掩码与子网数。
答案要点:借 4 位得 2^4 = 16 个子网,掩码 /20 即 255.255.240.0,每子网可用主机 2^12 − 2 = 4094 台;首个子网为 172.16.0.0/20,广播地址 172.16.15.255。

练习二:从 192.168.4.0/24 中分出 1 个 60 主机网、1 个 30 主机网和两条点对点链路。
答案要点:60 台取 192.168.4.0/26(可用 62),30 台取 192.168.4.64/27(可用 30),两条链路各取 /30:192.168.4.96/30 与 192.168.4.100/30,其余空间保持对齐、按需再切。

常见误区

  • 以为借 n 位得到 n 个子网:实际是 2^n 个。
  • 计算可用主机数忘记减 2:网络地址与广播地址不能配给主机。
  • 把不连续或不对齐的地址强行聚合:只有连续、对齐、2 的幂个数的块才能合并为一个前缀,否则会覆盖不属于自己的地址。
  • 认为「/n 后面的数字任意写都合法」:起始地址低 32−n 位必须全 0,192.168.1.5/26 不是合法的网络地址写法。

自测题

  1. 10.0.0.0/8 借 6 位子网化后的掩码、子网数与每子网可用主机数?

答案要点:掩码 /14 即 255.252.0.0;子网数 2^6 = 64;每子网可用主机 2^18 − 2 = 262142 台。

  1. 主机 192.168.1.100/26 所在子网的网络地址、广播地址与可用范围?

答案要点:100 = 01100100,子网号取前 2 位 01,网络地址 192.168.1.64/26,广播地址 192.168.1.127,可用主机 .65 至 .126。

  1. 为什么聚合块必须连续、对齐且个数为 2 的幂?

答案要点:CIDR 前缀要求被覆盖地址的高位完全一致,只有这样的块共享同一前缀;不满足时必须拆成多个前缀分别通告,否则聚合会吞掉无关地址。

  1. 最长前缀匹配如何同时支持聚合与精确路由?

答案要点:短前缀聚合覆盖大范围目的地作兜底,长前缀为个别目的地指定更优下一跳;匹配时选最长者,聚合与精确路由互不干扰。

  1. VLSM 相比等长划分节省了什么?

答案要点:按实际规模取满足 2^m − 2 不小于需求的最小子块,避免小部门占用大子网造成的地址浪费。

延伸阅读

  • RFC 4632《Classless Inter-domain Routing (CIDR)》
  • 谢希仁《计算机网络》
  • W. Richard Stevens《TCP/IP 详解 卷 1:协议》