到底有多少个有效的 IPv4 地址?

Foo*_*Bar 6 routing ipv4

看似简单的问题,有足够的边缘和角落案例,我不相信我的计算能力。可能用作单个目的地的有效 IPv4 地址的确切数量是多少?换句话说,2^32 减去保留块、多播地址、专用网络等。

更新:MK 的回答非常好,但是……假设最大限度地有效使用 CIDR,上限如何?

use*_*ser 17

大约二十年前,在 CIDR 变得司空见惯之前,这会更容易回答。

我假设“有效”是指互联网上的通用路由器配置将代表有效端点主机。完全有可能运行一个与 Internet 完全无关的 IPv4 网络,在这种情况下,在公共 Internet 上所做的许多关于地址空间分配的假设将不成立。

地址空间的某些部分很容易。我们有 2^32 个可能的地址,从中我们可以减去旧的 E 类(第一个八位字节 240-255)、RFC 1918 空间(10/8、172.16/12、192.168/16)、为各种目的保留的范围( 100.64/10 , 127/8, 169.254/16, ...) 等等。还有一些您在公共 Internet 上不太可能遇到的网络块,例如 AMPRNET (netblock 44/8),但它们本身并不被保留。

然而,这并没有真正让我们得到答案。现在的 IPv4 分配是使用 CIDR 完成的,这意味着两个相邻的网络块可能具有完全不同的网络掩码。像 10.0.127.240/28 和 10.0.128.0/17 这样的子网完全可以相邻并属于同一个上游分配,例如 10.0/9。(是的,这是 RFC 1918 空间,但这只是为了我不会不小心命名某人的真实网络。)

理想情况下,16 个相邻的 /28 块总共需要一个 /24 的地址空间,因此您可能认为它允许与单个 /24 相同数量的主机。但他们没有;每个 /28 都有自己的网络和广播地址,而 /24 只有一个这样的集合。因此,从某种意义上说,您“浪费”了额外的 30 个 IP 地址(16 个网络地址和 16 个广播地址,而不是每个地址中的一个)。/28 块的集合允许寻址总计 16 × 14 = 224 台主机,而单个 /24 允许寻址 254 台主机。(为简单起见,我认为子网外围路由器是子网上的主机,但在现实生活中,它是每个子网的另一个必需分配。)子网分配越小,这种效果就越明显。选择是否切出 /29, /28, /24 甚至是 /20 是上游 ISP 做出的商业选择,基于客户的已证明需求以及客户支付地址空间的能力和意愿。我在十多年前为我工作的一家公司发送了一份 IPv4 分配请求,即便如此,获得比 /28 更大的任何东西都是平凡。

这一切归结为没有办法计算互联网上可寻址主机的确切最大数量,因为即使我们枚举并考虑所有保留的 IP 地址范围,我们仍然需要知道子网分配大小为了解决网络和广播地址的不同损失量。在 CIDR 之前,这是可知的;A类是/8,B类是/16,C类是/24。使用 CIDR,不能做出这样的假设。

  • 为了完整起见:`100.64.0.0/10` 也是在 ISP 网络中实现 NAT 的特殊块。[RFC6598](http://tools.ietf.org/html/rfc6598) (2认同)
  • @MichaelKjörling 我并不是要批评你的回答。这是很好的依靠。100.64/10 范围并不广为人知,但如今它变得越来越重要。这就是为什么我认为提及它是好的原因。 (2认同)