任何 Linux 专业人员都应该熟悉网络路由中的一个关键概念,即网络记法。本文的灵感来自于我的文章《Linux 网络路由简介》的一位读者的请求,希望更详细地解释 CIDR 记法及其工作原理。CIDR 代表 无类别域间路由;它定义了一种用于网络寻址的记法方法,用于指定 IP 地址的网络部分。
网络类别
在研究 CIDR 的实际工作原理之前,我们首先看一下 CIDR 取代的有类别网络记法。有类别方法于 1981 年推出,定义了五种网络类别,用于识别和寻址互联网上的设备。网络类别由地址的前四位定义。
类别 | 前导位 | 起始 | 结束 | 子网掩码 | CIDR | 网络数 | IP 地址/网络 |
A | 0 | 0.0.0.0 | 127.255.255.255 | 255.0.0.0 | /8 | 128 | 16,177,216 (224) |
B | 10 | 128.0.0.0 | 191.255.255.255 | 255.255.0.0 | /16 | 16,384 | 65,536 (216) |
C | 110 | 192.0.0.0 | 223.255.255.255 | 255.255.255.0 | /24 | 2,097,152 | 256 (28) |
D | 1110 | 224.0.0.0 | 239.255.255.255 | 未定义 | 未定义 | ||
E | 1111 | 240.0.0.0 | 255.255.255.255 | 未定义 | 未定义 |
表 1:有类别互联网寻址定义了五种类别。
表 1 显示了有类别网络寻址定义的五种网络类别,包括每种类别的子网掩码和 CIDR 记法。A 类、B 类和 C 类是常用的单播地址范围,分配给组织。单播意味着数据包被发送到单个目标主机。D 类是所谓的多播地址范围。在这个范围内,数据包将被发送到定义网络上的所有主机。这个 IP 地址范围基本上未使用。E 类地址范围保留用于未来扩展,但也从未使用过。
请注意,只有三个可能的子网掩码与有类别网络的每个类别匹配:255.0.0.0(8 位)、255.255.0.0(16 位)和 255.255.255.0(24 位),它们在八位字节边界上划分。这是公共地址分配的限制因素之一,因为这些类别定义的网络数量相对有限。
不幸的是,有类别网络分配导致了严重的浪费。组织会申请一些地址,但如果他们需要的地址数量超过了例如 C 类网络中的地址数量,他们将申请并被分配整个 B 类网络,无论他们是否需要该网络中的所有地址。B 类网络也是如此;一些大型组织需要的地址超过了 B 类网络,因此他们被分配了 A 类网络。因此,少数大型组织成为了非常大量的 IP 地址的分配者。有关当前 /8 区块和历史 A 类网络的完整列表的分配者,请参阅下面的参考资料链接。
重要的是要理解,地址的前四位(最左边的位)定义了网络的类别,而不是子网掩码或子网掩码的 CIDR 等效项。实际上,这意味着大型网络无法在互联网级别细分为更小的子网,因为互联网路由器只能为每个分配的有类别网络设置一条路由。此外,尽管大型有类别网络可以由拥有它们的组织划分为子网,但随后将数据包路由到同一网络上的其他地理位置,则需要该组织以非常高的溢价成本使用私有内部网络或公共 VPN。
举一个简单的例子,假设一家公司有六个部门,每个部门大约需要 400 个 IP 地址。这需要的地址超过了一个 C 类网络(256 个 IP 地址),总共需要 2,400 个地址。该公司被分配了一个 B 类网络,拥有 65,536 个地址。结果,剩余的 63,136 个 IP 地址将被浪费,因为它们无法分配给其他组织。
注意: 为了本示例的目的,有必要使用当前私有 10.0.0.0/8 CIDR 地址块的一部分,就好像它是公共 B 类地址一样。这是为了保护可能属于某些组织的公共地址。
我使用了 sipcalc 命令行程序来提供从伪公共地址范围中随机选择的 B 类网络的网络数据。sipcalc 命令提供了有关 IP 地址或地址范围的大量信息。正如您稍后将看到的,它还能够根据给定的子网掩码生成给定地址范围内的子网列表。您可能需要安装 sipcalc 程序;我的 Fedora 系统默认未安装它。
$ sipcalc 10.125.0.0/16
-[ipv4 : 10.125.0.0/16] - 0
[CIDR]
Host address - 10.125.0.0
Host address (decimal) - 175964160
Host address (hex) - A7D0000
Network address - 10.125.0.0
Network mask - 255.255.0.0
Network mask (bits) - 16
Network mask (hex) - FFFF0000
Broadcast address - 10.125.255.255
Cisco wildcard - 0.0.255.255
Addresses in network - 65536
Network range - 10.125.0.0 - 10.125.255.255
Usable range - 10.125.0.1 - 10.125.255.254
图 1:网络 10.125.0.0/16 的详细信息
图 1 中 sipcalc 命令的输出显示了网络地址、网络掩码、网络地址范围以及该范围内的可用地址等信息。地址 10.125.0.0 是网络地址,10.125.255.255 是该网络的广播地址。这两个地址不能用于主机。
另一种选择是将多个 C 类网络分配给该公司。这将大大减少浪费的 IP 地址数量,但为此组织配置路由将比使用单个网络时更复杂。此选项还将减少可供其他组织使用的 C 类地址块的数量。
CIDR 的出现
CIDR 记法于 1993 年引入,作为 延长 IPV4 生命周期 的一种手段,当时 IPV4 的可分配地址即将耗尽。它通过使组织能够更充分地利用分配给他们的公共 IPV4 地址范围,并开放一些以前保留的地址范围来实现这一点。
1996 年,RFC1918 通过在旧的 A 类、B 类和 C 类范围中分配保留的、外部不可路由的网络,增强了 CIDR。任何组织都可以自由使用这些私有网络用于其内部网络;不再需要每台计算机都拥有分配的公共 IP 地址。此功能为解决多个问题提供了重要的一部分解决方案。
CIDR 块 | 地址范围 | IP 地址数量 |
10.0.0.0/8 |
10.0.0.0 – 10.255.255.255 |
16,777,216 |
172.16.0.0/12 |
172.16.0.0 – 172.31.255.255 |
1,048,576 |
192.168.0.0/16 |
192.168.0.0 – 192.168.255.255 |
65,536 |
表 2:保留用作内部网络的地址范围。
使用这些私有内部网络允许组织被分配一个或可能几个公共 IP 地址以访问外部互联网,同时为内部网络提供大型私有地址空间。为了绝对清楚起见,这些地址范围中的每一个都可以被许多不同的组织使用,因为这些私有网络地址无法通过互联网路由;当然,组织可以在私有网络之间进行内部路由。
回到我们的示例公司,让我们假设它只需要一个公共 IP 地址即可连接到外部世界。该公司的互联网提供商仅分配 4 个地址的最小块,其中两个地址保留用于网络地址和广播地址,因此留下 2 个可用地址。这在因过度子网划分而导致的不可用地址、浪费的地址以及客户成本之间取得了平衡。
ISP 为该公司分配了一个公共网络地址 10.125.16.32/30。请记住,在本示例中,我们正在使用 10.0.0.0/8 私有网络的一部分,就好像它是公共网络一样。此分配为该公司提供了以下公共网络。
$ sipcalc 10.125.16.32/30
-[ipv4 : 10.125.16.32/30] - 0
[CIDR]
Host address - 10.125.16.32
Host address (decimal) - 175968288
Host address (hex) - A7D1020
Network address - 10.125.16.32
Network mask - 255.255.255.252
Network mask (bits) - 30
Network mask (hex) - FFFFFFFC
Broadcast address - 10.125.16.35
Cisco wildcard - 0.0.0.3
Addresses in network - 4
Network range - 10.125.16.32 - 10.125.16.35
Usable range - 10.125.16.33 - 10.125.16.34
图 2:网络 10.125.75.32/30 的详细信息
然后,我们的示例公司可以选择使用任何私有网络范围作为其内部网络。然后,他们可以使用网络地址转换 (NAT) 从其内部私有网络访问外部世界。
$ sipcalc 172.16.0.0/12
-[ipv4 : 172.16.0.0/12] - 0
[CIDR]
Host address - 172.16.0.0
Host address (decimal) - 2886729728
Host address (hex) - AC100000
Network address - 172.16.0.0
Network mask - 255.240.0.0
Network mask (bits) - 12
Network mask (hex) - FFF00000
Broadcast address - 172.31.255.255
Cisco wildcard - 0.15.255.255
Addresses in network - 1048576
Network range - 172.16.0.0 - 172.31.255.255
Usable range - 172.16.0.1 - 172.31.255.254
图 3:网络 172.16.0.0/12 的详细信息
乍一看,最直接的做法可能是从私有 172.16.0.0/12 范围中选择一个网络,以提供足够大的范围用于单个内部网络。对于我们的示例,他们可以选择 172.16.0.0/12 网络,这将为他们提供以下内部网络空间。
请注意,此网络不符合旧的 B 类网络,因为它的网络掩码中的网络位较少,因此为主机地址位提供了更多空间。12 个网络位为主机留下了 20 位,总共 1,048,576 个主机。这比旧的 B 类网络为网络提供的主机多得多。它也比他们的网络实际需要的空间大得多。
可变长子网掩码 (VLSM)
CIDR 还带来了一种新的旧网络掩码方法,称为可变长子网掩码或 VLSM。图 3 中 CIDR 块定义的私有地址范围使用 12 位网络掩码暗示了这一点。
VLSM 允许我们的示例公司通过在其将使用的网络掩码中添加位,轻松地从可供他们使用的大型私有地址空间中创建更易于管理的子网。使用 12 位网络掩码涵盖了整个可用的私有地址范围,因此为了在公司实际需要的地址空间方面更加保守,他们决定增加他们将使用的网络掩码中的位数。
sipcalc -s xx 命令(其中 xx 是子网掩码中的位数)可用于计算此私有地址范围中的子网。例如,下面的图 4 显示了 172.16.0.0/12 的 16 个子网,它们具有 16 位子网掩码。
$ sipcalc 172.16.0.0/12 -s 16
-[ipv4 : 172.16.0.0/12] - 0
[Split network]
Network - 172.16.0.0 - 172.16.255.255
Network - 172.17.0.0 - 172.17.255.255
Network - 172.18.0.0 - 172.18.255.255
Network - 172.19.0.0 - 172.19.255.255
Network - 172.20.0.0 - 172.20.255.255
Network - 172.21.0.0 - 172.21.255.255
Network - 172.22.0.0 - 172.22.255.255
Network - 172.23.0.0 - 172.23.255.255
Network - 172.24.0.0 - 172.24.255.255
Network - 172.25.0.0 - 172.25.255.255
Network - 172.26.0.0 - 172.26.255.255
Network - 172.27.0.0 - 172.27.255.255
Network - 172.28.0.0 - 172.28.255.255
Network - 172.29.0.0 - 172.29.255.255
Network - 172.30.0.0 - 172.30.255.255
Network - 172.31.0.0 - 172.31.255.255
图 4:使用 sipcalc 计算 172.0.0/12 私有地址范围的 16 位子网。
使用 sipcalc 计算 172.16.0.0/12 网络的网络掩码中不同位数提供的地址数量,他们确定了以下内容
网络掩码中的位数 | 地址数量 |
12 | 1,048,576 |
16 | 65,536 |
17 | 32,768 |
18 | 16,384 |
19 | 8,192 |
20 | 4,096 |
表 3:网络 172.16.0.0/12 的各种子网范围内的地址数量
如前所述,该公司目前需要大约 2400 个 IP 地址。为了留出充足的增长空间,同时将地址总数减少到可管理的水平,该公司选择使用 19 位网络掩码,该掩码提供 8,192 个地址。他们使用 sipcalc 计算可用的 19 位子网,如下面的图 5 所示。
$ sipcalc 172.16.0.0/12 -s 19
-[ipv4 : 172.16.0.0/12] - 0
[Split network]
Network - 172.16.0.0 - 172.16.31.255
Network - 172.16.32.0 - 172.16.63.255
Network - 172.16.64.0 - 172.16.95.255
Network - 172.16.96.0 - 172.16.127.255
Network - 172.16.128.0 - 172.16.159.255
Network - 172.16.160.0 - 172.16.191.255
Network - 172.16.192.0 - 172.16.223.255
Network - 172.16.224.0 - 172.16.255.255
<snip>
Network - 172.31.0.0 - 172.31.31.255
Network - 172.31.32.0 - 172.31.63.255
Network - 172.31.64.0 - 172.31.95.255
Network - 172.31.96.0 - 172.31.127.255
Network - 172.31.128.0 - 172.31.159.255
Network - 172.31.160.0 - 172.31.191.255
Network - 172.31.192.0 - 172.31.223.255
Network - 172.31.224.0 - 172.31.255.255
图 5:172.16.0.0/12 私有地址范围中 128 个 19 位子网的部分列表。
该公司随机决定使用 172.30.64.0/19 子网。因此,他们的网络规范如图 6 所示。
$ sipcalc 172.30.64.0/19
-[ipv4 : 172.30.64.0/19] - 0
[CIDR]
Host address - 172.30.64.0
Host address (decimal) - 2887663616
Host address (hex) - AC1E4000
Network address - 172.30.64.0
Network mask - 255.255.224.0
Network mask (bits) - 19
Network mask (hex) - FFFFE000
Broadcast address - 172.30.95.255
Cisco wildcard - 0.0.31.255
Addresses in network - 8192
Network range - 172.30.64.0 - 172.30.95.255
Usable range - 172.30.64.1 - 172.30.95.254
图 6:网络 172.30.64.0/19 的详细信息
当然,这只是私有地址范围中 128 个可能的 19 位子网之一。该公司可以选择图 5 中计算的任何 19 位子网,任何一个子网都能同样出色地工作。
另一种选择是使用 192.168.0.0/16 私有地址范围,并选择该范围中可用的 19 位子网之一。我将确定该范围中可用的子网数量和子网类型的任务留给读者作为练习。
结论
使用 CIDR 记法以及通过 CIDR 块重新组织以前分配的地址,以及使用 VLSM,提供了更多可用的公共 IP 地址,并提高了公共地址分配的灵活性。CIDR 记法与 VLSM 的设计尊重了旧的有类别网络方案,同时为各种规模的组织提供了显着更高的灵活性和私有内部使用的 IP 地址可用性。私有地址空间以及分配的公共地址空间可以通过在网络掩码中添加位轻松地拆分为子网,而无需考虑网络类别。
CIDR 记法可以在引用有类别网络时使用,但仅作为一种符号速记。
资源
- 无类别域间路由 (维基百科)
- 地址空间短缺的处方 (Linux Journal)
- RFC790 A 类网络的历史分配 (IETF)
- 已分配 /8 区块网络列表 (维基百科)
- RFC1918 私有互联网的地址分配 (IETF)
10 条评论