为什么互联网工程任务组(IETF)选择192.168/16
成为私有 IP 地址类而不是其他的?
为什么具体来说是192.168/16
和10/8
和172.16/12
而不是145.243/16
例如呢?
是否有理由选择这些 IP 地址作为私有 IP 地址的标准,而不是其他可能的 IP 地址?
答案1
我知道是谁选择了这些地址范围。不幸的是,他已经去世了,所以我无法确切地问他为什么他选择了它们,但我可以做出一些有根据的猜测。
在 20 世纪 90 年代中期互联网真正开始流行之前,网上约会并不多见。互联网的历史主要集中在RFC 文档它定义了它,它可追溯到1969,阿帕网的开端。通过它们,你可以看到互联网从一个由当时最聪明的人才设计的由几台原始主机组成的新兴网络发展成为我们今天难以想象没有网络的生活。
这个答案几乎完全来自于那些 RFC,一小部分来自于我当时在互联网上的个人经历。
首先,IETF 没有选择这些 IP 地址范围或任何其他范围。特殊用途地址的分配目前和一直以来的工作互联网号码分配机构。
IANA 一直是角色而不是某个特定组织,而且该角色仅易主过一次。目前由 ICANN 担任,但自 1972 年起直到1998年去世当那个组织为了取代他而成立时,IANA 基本上就只有一个人,乔恩·波斯特尔当然,他首先称这个角色插座数字沙皇, A他亲自承担了这项必要的任务因为必须这样做。他最终成为几乎所有可以分配的数字的统治者:地址、协议号、端口,你能想到的任何东西,很大程度上是因为他愿意这样做,而当互联网向公众开放商业他已经做了 20 多年了。他分配数字,互联网注册局(当时 SRI-NIC 是扩展到分布式注册中心集合这些作品由美国政府出版,并由世界各地读者欣赏。
SRI 的最新 RFC 显示互联网地址分配列表是RFC 1166自 1990 年以来。这是一个非常长的列表,因此这些数据被转移到在线数据库也就不足为奇了。与之前的版本相比RFC 1117显示了互联网在向公众开放之前的几年内的扩张速度。
现在我们可以了解RFC 1918稍微好一点。这实际上是 RFC 的第二次修订;第一次是RFC 1597,发表于 1994 年 3 月,距今已有两年之久。在其鲜为人知的反驳中,RFC 1627中,阐述了当时反对私有地址空间的论点。RFC 1627 也恰好提到了这三个地址空间的分配者。
它们是由 IANA(即 Jon Postel)根据 RFC 1597 作者的要求分配的,如果 RFC 1627 中的投诉可信的话,他是通过秘密渠道而不是通常的公开程序分配的。您可以看到 RFC 1597 本身直接进入了 RFC 状态,而没有通常前互联网草案因此它也通过后门渠道获得了批准,同样是由 Postel 批准的,当时他也是 RFC 的编辑。因此,也许永远不可能对这个问题给出最终的答案。
现在,至于他为什么选择这三个地址范围,让我将注意力转回到 SRI 的 RFC 1166 和 1117,其中有当时的 IP 地址范围分配。在这两个文件中,您会注意到网络 10 仍然分配给已不复存在ARPANET 曾1990 年关闭。Postel 作为 IANA 的负责人,知道这个范围不再使用,可以重新分配。我认为 Postel 选择了网络 10,因为他知道这个范围可用且未被使用。
同样,我估计 Postel 选择 192.168 是因为在他做出选择时,它是下一个可用或几乎是下一个可用的网络,可以从以前的 C 类空间中分配。这可能无法以某种方式证明,但 RFC 中显示的地址分配速度强烈表明,在 1993-1994 年左右分配时,它们应该处于这个大致范围内。(192.159 中的地址正在被分配1992年。192.160-192.167 中的分配没有可用日期,因为这些在某个时间点被重新分配给 RIPE。)
回答 172.16-172.31 的问题更加困难。我找不到任何证据表明为什么选择这个范围。据我所知,以前的 B 类空间中的分配还没有达到这么高。我只能推测 IANA 向飞镖靶投掷飞镖、掷骰子或以其他方式从他的下体中抽出数字。
最后,关于 Jon Postel 的说明。尽管这个 RFC 显然是在没有社区(最初)意见的情况下完全形成的,但我并不是要暗示,也不应该被理解为,Jon Postel 在某种程度上以糟糕或不公平的方式履行了 IANA 职责。他是早期互联网最有影响力的人物之一,如今,每当你瞥见互联网幕后机制时,你仍然能感受到这种影响力,但他总是关心如何做好工作。引用一个回忆:
管理和运营并不光彩。恰恰相反。人们注意到做得不好,但很少赞扬做得好。担任行政职务的人往往成为小官僚。由于这份工作报酬很少,他们人为地把它变成了权力的基础。因此,有些人听到 Jon 被称为互联网数字“沙皇”时感到困惑。他们没有意识到,社区授予 Jon 这一头衔是出于对他为基本基础设施服务带来秩序的喜爱和深深的赞赏。特别是,社区使用这个词时完全知道 Jon 是出于信任,而不是为了获得个人权力。我们一直都知道他的观点来自合法的信仰,我们从来不必担心他会以某种方式考虑政治或个人利益。我们可能不同意他的观点,但我们一直都知道,他首先是出于对做正确事情的关心。
答案2
因为当时这是有道理的?:-D
记得,当分配私有 IP 地址范围时,网络工程师必须应对几个问题:当时一些最强大的路由器的 CPU 能力和 RAM 存储与今天的袖珍图形计算器差不多——而今天的一些路由器仍然比过去的路由器运行得更好(我记得当时 CPU 速度以千赫为单位,RAM 存储以千字节为单位,而不是像今天这样以千兆为单位!)。互联网发展迅速,IPv4地址空间有限,而且看起来到 2000 年左右就会用完,等等。因此,许多 IP 地址范围已经分配,他们不想要求公司归还 IP 地址范围,以便他们可以将它们重新分配给私有范围。他们还想让公司尽可能轻松地使用私有范围——如果公司不得不投入大量资金来使其网络应对一二十个范围/IP 地址,那么很少有公司会合作。
这部分我承认是猜测,但主要基于逻辑和设置网络的经验。他们可能收集了所有未分配网络号的列表,并寻找符合所需标准的区分模式:一个 A 类(网络号中高位为 0xxxxxxx 二进制的网络号为 A 类)、16 个 B 类(网络号 10xxxxxx 二进制)和 256 个 C 类(网络号 110xxxx 二进制)地址。B 类和 C 类地址都应该是连续的,以及。(选择 16 和 256 可能部分是任意的——在做这些事情一段时间后,你倾向于开始以 2 的幂来思考——可能部分是因为这是他们能找到的可用的预约。
由此,他们可能从这些可用地址中选择了最终范围,这将允许路由器制造商对地址进行简单的逐位测试,以确定是否路由/转发/丢弃数据包。我还可以看到位模式的一些属性也有助于构建紧凑的 NAT 表。10.xyz 地址很明显,因为它只需匹配一个网络号。172.16.yz 到 172.32.yz 的模式是,如果您构建一个表,其中低四位交叉引用高四位,则整个范围将填充表的一行,而不会分成两行 - 即第二个八位字节始终为 0001xxxx(二进制)。在 192.168.yz 中,168 的二进制为 10101000 - 即,低三位始终为 0,高五位交替为 1 和 0。
虽然这些可能看起来是任意的,但如果您曾经进行过任何机器语言编程或微代码解码,这些类型的模式允许您仅测试几个位即可做出私有/公共决定,而无需先解码整个 IP 地址。这将允许路由器快速处理此类地址,而无需在内存中维护大量查找表。因此,路由器可以将私有网络数据包推送回私有网络,而无需先对其进行完全解码,从而缩短路由器和网络速度的宝贵时钟周期。
如果你好奇的话,可以看看串行数据传输(比如通用异步收发器) 处理每个字节的数据:它每次只能以控制时钟的速度发送/接收一个位,并且通常将数据封装为额外的位,例如奇偶校验位和“同步”位。尝试一次计算整个字节的奇偶校验之类的东西会耗费太多时间,因此,它会在每个时钟周期维护一个特殊位。该位将被移入/移出发送/接收寄存器的下一个位修改。一旦整个字节被发送/接收,奇偶校验位中剩余的值就已经正确,而无需重新计算。这个概念或多或少是“在做其他事情的同时完成工作”,对于串行芯片,它会在发送/接收的同时计算奇偶校验。对于路由器/交换机,如果它已经在从网络传入的每个地址位时解码 IP 地址,则可以获得更高的性能,并且可能在从网线读取数据包之前就已经知道下一步将数据包发送到哪里!
此外,这只是我基于 25 年从事此类工作得出的逻辑/猜测。我不知道我们是否会知道最终选择数字的确切原因,因为我不记得有任何论文/RFC/等给出完整的理由。我见过的最接近的只是一些评论,建议选择的范围应该让公司能够相对轻松高效地使用它们,并且只需付出最少的努力/投资/重新设计。
答案3
答案4
因为 192 在二进制中以 11xxxxxx 开头,表示C 类网络。它是以两个连续的 1 开头的最小数字。A 类的最高位为 0,B 类的最高位为 10。
RFC 1918定义私有 IP 范围的 IEEE 802.11b/g 文件中没有阐明这一点,因此没有明确的答案说明为什么他们选择 .168 作为 16 位块,但我认为这是因为 RFC 直到 1996 年才发布,而那时已经有大量注册。因为 192 是 C 类分配中的第一个 8 位块,所以许多地址可能已被占用。168 可能是第一个可用的。
还请记住,其中一些选择是任意的。请注意,rfc1918 B 类地址范围是 172.16 - 172.31?我想不出 172 的原因,但我很确定他们选择使用 16 个 B 类地址,因此他们有 100 万个连续地址块(1048576)。
有时协议就是这样。有人必须做出选择,他们就做出了选择。有一段时间,Linux 内核被限制为每个系统最多 1024 个 CPU,最终,在一些超级计算机出现问题后,他们不得不发布补丁。无论谁决定使用 1024,可能除了需要一个值之外没有其他好的理由,而 1024 是整数。