3. 无类别地址作为解决方案 (Classless Addressing as a Solution)
社区创建的解决方案是弃用A/B/C类网络地址分配系统,转而使用"无类别 (Classless)"的、分层的IP地址块 (称为前缀, Prefixes)。前缀的分配旨在大致遵循底层互联网拓扑,以便聚合 (Aggregation) 可以用于促进全局路由系统的扩展。此策略的一个含义是,前缀分配和聚合通常根据提供商-订户关系 (Provider-Subscriber Relationships) 进行,因为这就是互联网拓扑的确定方式。
当最初在 [RFC1338] 和 [RFC1519] 中提出时,这种地址计划旨在作为一个相对短期的响应,持续大约三到五年,在此期间将设计和实现更永久的地址和路由架构。从原始文档的日期可以推断,CIDR 远远超过了其预期寿命,并已成为上述问题的中期解决方案。
请注意,在以下文本中,我们描述了为实施此处讨论的分配架构而制定的当前政策和程序。此描述无意被解释为对IANA的指示。
结合区域互联网注册机构 (RIR, Regional Internet Registries) 实施的地址管理策略 (详见 [NRO]),CIDR风格地址的部署也降低了IPv4地址空间的消耗速度,从而为上述问题#3提供了短期到中期的缓解。
请注意,根据定义,此计划既不要求也不假定重新分配遗留"C类"空间中不适合聚合的那些部分 (有时称为"沼泽地, the swamp")。这样做会在一定程度上减少路由表大小 (当前估计"沼泽地"包含大约15,000个条目),但代价是显著的重新编号成本。同样,当更换传输服务提供商时,没有硬性要求任何终端站点重新编号,但鼓励终端站点这样做,以消除将其前缀显式广告到全局路由系统中的需求。
3.1. 基本概念和前缀表示法 (Basic Concept and Prefix Notation)
从最简单的意义上讲,从A/B/C类网络号到无类别前缀的变化是明确指定32位IPv4地址中的哪些位被解释为与站点关联的网络号 (或前缀),哪些位用于在站点内对各个终端系统进行编号。在CIDR表示法中,前缀显示为4个八位字节的量,就像传统的IPv4地址或网络号一样,后跟"/" (斜杠) 字符,再后跟一个介于0和32之间的十进制值,该值描述有效位的数量。
例如,传统的"B类"网络 172.16.0.0,具有隐含的网络掩码 255.255.0.0,被定义为前缀 172.16.0.0/16,其中"/16"表示用于提取前缀的地址部分的掩码是一个32位值,其中最高有效 (最左边) 16位设置为1,最低有效 (最右边) 16位设置为0。请注意,通过使用前缀表示法,指定地址和网络掩码的需求被一个单一的条目折叠了。
前缀长度表 (Table of Prefix Lengths)
下表显示了CIDR前缀长度与传统网络和主机大小之间的关系:
| 前缀长度 | 网络号位数 | 主机号位数 | 可用地址数 | 传统等效 |
|---|---|---|---|---|
| /8 | 8 | 24 | 16,777,216 | 1 个A类 |
| /9 | 9 | 23 | 8,388,608 | 128 个B类 |
| /10 | 10 | 22 | 4,194,304 | 64 个B类 |
| /11 | 11 | 21 | 2,097,152 | 32 个B类 |
| /12 | 12 | 20 | 1,048,576 | 16 个B类 |
| /13 | 13 | 19 | 524,288 | 8 个B类 |
| /14 | 14 | 18 | 262,144 | 4 个B类 |
| /15 | 15 | 17 | 131,072 | 2 个B类 |
| /16 | 16 | 16 | 65,536 | 1 个B类 |
| /17 | 17 | 15 | 32,768 | 128 个C类 |
| /18 | 18 | 14 | 16,384 | 64 个C类 |
| /19 | 19 | 13 | 8,192 | 32 个C类 |
| /20 | 20 | 12 | 4,096 | 16 个C类 |
| /21 | 21 | 11 | 2,048 | 8 个C类 |
| /22 | 22 | 10 | 1,024 | 4 个C类 |
| /23 | 23 | 9 | 512 | 2 个C类 |
| /24 | 24 | 8 | 256 | 1 个C类 |
| /25 | 25 | 7 | 128 | 1/2 个C类 |
| /26 | 26 | 6 | 64 | 1/4 个C类 |
| /27 | 27 | 5 | 32 | 1/8 个C类 |
| /28 | 28 | 4 | 16 | 1/16 个C类 |
| /29 | 29 | 3 | 8 | 1/32 个C类 |
| /30 | 30 | 2 | 4 | 1/64 个C类 |
请注意,传统的"子网划分 (Subnetting)",如 [RFC950] 中所定义,只是将CIDR前缀的概念应用于传统网络号内的地址范围。
CIDR的一个重要方面是聚合 (Aggregation) 或"超网化 (Supernetting)"的概念。给定共享共同高阶位的一组连续前缀,可以组合为单个超前缀 (Superprefix),只要实际进行聚合的路由器具有到每个原始前缀的单独路由。例如,前缀 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。这种聚合可以重复进行:给定一组共享共同高阶位的 /22 前缀,它们可以聚合为单个 /21,依此类推。
聚合会丢弃有关原始前缀的详细信息,因此不能由不具有到每个组成前缀的至少一个单独路由的路由器执行。聚合还可以用于将用于网络内路由的更特定路由折叠到用于外部通信的更通用路由中。
3.2. CIDR地址分配策略 (CIDR Address Allocation Policy)
CIDR地址分配的基本策略可以通过以下方式总结:
-
分层分配 (Hierarchical Allocation): 地址空间被分层分配,从IANA到RIR,再到ISP,最后到终端用户。这种分层结构支持高效的路由聚合。
-
拓扑相关分配 (Topology-Based Allocation): 地址分配应尽可能反映网络拓扑,以便支持路由聚合。
-
按需分配 (Allocation on Demand): 地址应根据证明的需求分配,而不是根据预期的未来需求。
-
慢启动 (Slow Start): 最初应分配较小的地址块,随着需求的证明可以扩展。
-
高效利用 (Efficient Utilization): 应鼓励高效使用地址空间,避免浪费。
这些策略由区域互联网注册机构 (RIR) 在其服务区域内实施,旨在平衡保护地址空间与支持互联网增长的需求。
3.3. CIDR与路由层次结构 (CIDR and Routing Hierarchy)
CIDR的一个关键优势是它支持在全局路由系统中建立层次结构。通过基于拓扑分配地址并在每个级别聚合路由,可以显著减少需要在全局路由表中维护的路由数量。
理想情况下,路由层次结构如下所示:
-
Tier 1 (顶层): 主要的互联网骨干网提供商维护全局路由表,包含来自所有其他Tier 1提供商和直接连接的下游网络的聚合前缀。
-
Tier 2 (中层): 区域或国家级提供商维护包含其上游提供商的默认路由、其对等方的聚合前缀以及其自己客户的更特定路由的路由表。
-
Tier 3 (底层): 本地ISP和企业网络通常维护到其上游提供商的默认路由,以及其自己客户站点的特定路由。
这种层次结构允许每个级别的路由器仅维护其运营所需的路由状态,而不是完整的全局路由表。