跳到主要内容

3. 以无类编址作为解决方案 (Classless Addressing as a Solution)

  1. 以无类编址作为解决方案 (Classless Addressing as a Solution)

社区提出的解决方案是弃用 Class A/B/C 网络地址分配系统, 转而使用"无类 (classless)",

层次化的 IP 地址块 (称为前缀, prefixes). 前缀分配意在大致遵循底层 Internet 拓扑,

从而可以通过聚合 (aggregation) 帮助全局路由系统扩展. 这一策略的一个含义是,

前缀分配和聚合通常按照提供商-订户关系完成, 因为 Internet 拓扑正是由这种关系决定的.

该编址计划最初在 [RFC1338] 和 [RFC1519] 中提出时, 原本是一个相对短期的响应方案,

预计持续约三到五年; 在此期间, 将设计并实现一种更持久的编址和路由架构.

从原始文档的日期可以看出, CIDR 的使用寿命已经远远超过预期,

并已成为解决上述问题的中期方案.

请注意, 在下文中, 我们描述的是已经部署用于实现这里所讨论分配架构的当前策略和过程.

该描述不应被解释为对 IANA 的指示.

与 Regional Internet Registries (区域 Internet 注册机构, 见 [NRO] 获取详情)

实施的地址管理策略相结合, CIDR 风格编址的部署也降低了 IPv4 地址空间的消耗速度,

从而为上文所述问题 #3 提供了短期到中期的缓解.

请注意, 按照定义, 该计划既不要求也不假设重新分配旧式 "Class C" 空间中那些不适合聚合的部分

(有时称为 "the swamp"). 这样做会在一定程度上减小路由表规模 (当前估计 "the swamp"

包含约 15,000 个条目), 但会产生显著的重新编号成本. 同样, 也没有硬性要求任何终端站点

(end site) 在更换中转服务提供商时重新编号, 但鼓励终端站点这样做,

以消除将其前缀显式通告到全局路由系统中的需要.

3.1. 基本概念和前缀表示法 (Basic Concept and Prefix Notation)

从最简单的角度看, 从 Class A/B/C 网络号改为无类前缀, 就是明确指出 32-bit IPv4 地址中的

哪些位被解释为与某个站点相关联的网络号 (或前缀), 以及哪些位用于为该站点内的各个端系统编号.

在 CIDR 表示法中, 前缀表示为一个 4-octet 数值, 与传统 IPv4 地址或网络号一样,

后接 "/" (斜杠) 字符, 再后接一个 0 到 32 之间的十进制值,

用于描述有效位 (significant bits) 的数量.

例如, 旧式 "Class B" 网络 172.16.0.0 隐含的网络掩码为 255.255.0.0,

它被定义为前缀 172.16.0.0/16; 其中 "/16" 表示用于提取前缀网络部分的掩码

是一个 32-bit 值, 其最高有效 16 位为一, 最低有效 16 位为零.

类似地, 旧式 "Class C" 网络号 192.168.99.0 被定义为前缀 192.168.99.0/24;

最高有效 24 位为一, 最低有效 8 位为零.

使用带有显式前缀长度的无类前缀, 可以根据实际需要更灵活地匹配地址空间块.

过去只有三种网络大小可用, 而现在可以定义前缀来描述任意大小为 2 的幂的地址块,

范围从一个端系统地址到 2^32 个端系统地址. 在实践中, 未分配地址池由 Internet Assigned

Numbers Authority ([IANA]) 管理. IANA 根据需要从该地址池向 Regional Internet

Registries 分配地址. 这些分配以连续, 按位对齐的 2^24 个地址块

(也称为 /8 前缀) 进行. Regional Internet Registries (RIRs) 随后向 Local Internet

Registries (LIRs) 或 Internet Service Providers (ISPs) 分配或指派更小的地址块.

这些实体可以直接使用该指派 (这通常适用于 ISP), 也可以进一步将地址子分配给其客户.

RIR 的这些地址分配会根据每个 ISP 或 LIR 的需求而不同. 例如, 一个大型 ISP 可能会被分配

一个包含 2^17 个地址的地址块 (一个 /15 前缀), 而一个较小的 ISP 可能会被分配

一个包含 2^11 个地址的地址块 (一个 /21 前缀).

请注意, "allocate" 和 "assign" 这两个术语在 Internet 地址注册系统中有特定含义:

"allocate" 指将一块地址空间委托给预期会进一步进行子委托的组织,

而 "assign" 用于直接使用所收到地址块的站点 (即为各个主机编号).

下表提供了所有 CIDR 前缀大小的便捷速查, 展示每个前缀中可能的地址数量,

以及在 32-bit IPv4 地址空间中可以编号的该大小前缀数量:

   notation       addrs/block      # blocks

-------- ----------- ----------

n.n.n.n/32 1 4294967296 "host route"

n.n.n.x/31 2 2147483648 "p2p link"

n.n.n.x/30 4 1073741824

n.n.n.x/29 8 536870912

n.n.n.x/28 16 268435456

n.n.n.x/27 32 134217728

n.n.n.x/26 64 67108864

n.n.n.x/25 128 33554432

n.n.n.0/24 256 16777216 legacy "Class C"

n.n.x.0/23 512 8388608

n.n.x.0/22 1024 4194304

n.n.x.0/21 2048 2097152

n.n.x.0/20 4096 1048576

n.n.x.0/19 8192 524288

n.n.x.0/18 16384 262144

n.n.x.0/17 32768 131072

n.n.0.0/16 65536 65536 legacy "Class B"

n.x.0.0/15 131072 32768

n.x.0.0/14 262144 16384

n.x.0.0/13 524288 8192

n.x.0.0/12 1048576 4096

n.x.0.0/11 2097152 2048

n.x.0.0/10 4194304 1024

n.x.0.0/9 8388608 512

n.0.0.0/8 16777216 256 legacy "Class A"

x.0.0.0/7 33554432 128

x.0.0.0/6 67108864 64

x.0.0.0/5 134217728 32

x.0.0.0/4 268435456 16

x.0.0.0/3 536870912 8

x.0.0.0/2 1073741824 4

x.0.0.0/1 2147483648 2

0.0.0.0/0 4294967296 1 "default route"

n 是一个 8-bit 十进制 octet 值. 点到点链路 (point-to-point links)

在 [RFC3021] 中有更详细讨论.

x 是一个 1 到 7-bit 的值, 由前缀长度决定; 它被移入该 octet 的最高有效位,

并转换为十进制形式; 该 octet 的最低有效位为零.

在实践中, 到目前为止尚未分配或指派长度短于 8 的前缀, 虽然在执行激进聚合时,

路由表中可能存在指向这类短前缀的路由. 截至本文档写作时, 全局路由系统中没有看到此类路由,

但过去某些时候, 操作员错误和其他事件曾导致其中一些路由 (即 128.0.0.0/1 和 192.0.0.0/2) 在某些网络中被观察到.