Linux 网络指南:CIDR 表示法和配置

500 位读者喜欢这篇文章。
people on top of a connected globe

Pixabay

对于任何 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 显示了具有 16 位子网掩码的 172.16.0.0/12 的 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 表示法可以在引用类别网络时使用,但只能作为符号速记。

资源

标签
David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。自 1996 年以来,他一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员 Linux 哲学”的坚定支持者和传播者。

10 条评论

这是一个令人难以置信的资源。你把它呈现得非常简洁。

一个快速说明

在你的第一个表中:2^16 = 65,536,而不是像写的那样 2^20。

你是对的。我已经做了修改。感谢指出。

回复 作者:SET(未验证)

在表 1 中,另一个错别字 2^24 是 16,777,216

回复 作者:dboth

感谢您的评论。但是不,这不是错别字。在表 1 中,网络数量与 CIDR 数量无关,这可能会让将其包含在该表中有点令人困惑。类别网络中的网络数量必须减少定义网络类别的先导位的数量。只有剩余的位用于定义网络。因此,该数字是正确的,它是通过 2^(24-3) 或 2^21 = 2,097,152 计算得出的。请务必查看 https://en.wikipedia.org/wiki/Classful_network 以获取更多信息。

谢谢。

回复 作者:dave stevens(未验证)

非常有用的 CIDR 概述和 sipcalc 用法的实用示例,感谢您的分享。只是一个小问题,在“...10.125.255.254 是此网络的广播地址...”中,我认为正确的地址应该是 10.125.255.255。

我很高兴这篇文章对您有所帮助。感谢您指出该错误;我已经做了修改。

回复 作者:Nikos(未验证)

谢谢:)

很棒的文章。

sipcalc 是我真希望多年前就找到的工具之一,谢谢!

很棒的文章,感谢分享。

sipcalc 将在未来提供很大的帮助。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.