为什么 IPv4 地址是 32 位的?

网络工程 ipv4 协议理论 记忆
2021-07-08 13:45:55

很久以前,当我还是一个凌晨 bairn开始我的职业生涯,我有一个面试的一个低级别的开发者角色。那时刚刚了解了 CIDR 的实施方式,我很想炫耀我的知识。

可悲的是,这种策略对我来说效果不佳。我记得被问到的第一个问题完全惊呆了(然后被激怒了,这一切都走下坡路了)。问题是:

为什么IPv4 地址是 32 位的?

我欣然承认我不知道答案,但我确实知道最初的协议设计将地址空间划分为 8 位网络号和 24 位主机标识符——所以我试图将其合理化,理由是协议设计者设想了一个由几个网络组成的互联网(毕竟,它最初打算将特定的几个网络连接在一起),每个网络包含许多主机,并且为了编程的简单性,使所有内容都与字节边界对齐。

我记得面试官对我的回答不满意,向我暗示真正的原因是它保证适合long int在 C 中的a中,因此简化了实现细节。当时我还年轻,我认为这是一个合理的答案,并且(在今天之前)没有再考虑过。

出于某种原因,那次谈话刚刚回到我身边,现在我回想起来,这似乎并不完全合理:

  1. 在包含固定大小的网络和主机字段的原始寻址方案下,开发人员不太可能希望将两个字段的串联分配给单个变量(我无法访问任何早期的 IP 实现来验证它们的内容)在实践中确实做到了);

  2. 在 TCP/IP 工作开始时,C 既不是标准化的,也不是它今天成为的低级软件开发的事实上的“通用语言”。

面试官的建议真的成立吗?如果没有,什么真正的原因,该协议的设计师选择了32位寻址?

3个回答

简单的回答:因为 Vint Cerf 决定这样做他认为他正在设计一个实验协议,并认为 32 位对于这个目的已经绰绰有余;他没想到 IPv4 会在生产系统中使用,因此没有更多考虑地址空间的大小。

在 2008 年 Google IPv6 大会上,他主持了一场题为IPv6 Internet 会是什么样子的小组讨论会?在此期间,他讲述了

将 32 位地址空间放在那里的决定是一群工程师一年之战的结果,他们无法对 32、128 或可变长度下定决心。经过一年的斗争,我说——我现在在 ARPA,我正在运行这个程序,我正在支付这些费用并使用美国税金——我想要一些进展,因为我们不知道这是否是去上班。所以我说32位,做个实验就够了,43亿个终端——连国防部都不需要43亿个,反正也买不起43亿个边缘设备做测试。所以当时我认为我们正在做一个实验来证明这项技术,如果它有效,我们就有机会制作它的生产版本。好吧——[笑声]——它刚刚逃脱了!

成绩单彼得·E.穆雷

这是与 Vint Cerf环聊(2014 年 4 月)的链接,他解释了他如何认为这个互联网应该只是一个实验:

正如我们在考虑互联网(好好想想,这将是一些任意数量的网络相互连接——我们不知道有多少,也不知道它们将如何连接),但是我们在全国范围内的网络想“好吧,也许每个国家会有两个”(因为它很贵:此时以太网已经被发明,但它并没有像几年后那样到处普及)。

然后我们说“有多少个国家? ”(每个国家两个网络,有多少个网络?)我们没有让谷歌问,所以我们猜测是 128,那将是 2 倍 128 是 256 个网络(即 8位)然后我们说“每个网络上会有多少台计算机? ”我们说“大约 1600 万台怎么样? ”(另外 24 位)所以我们有一个 32 位地址,它允许 43亿个终端——我以为1974/3就够做实验了!

我已经将此作为对 Jens Link 答案的评论发布了,但我觉得它应该更多地浮出水面。

大小。他们正在编写软件,而不是设计计算机硬件——尽管我确信他们考虑到了性能和便携性。当时,32 位是word、 、longword、 或intlongInt或其他。请参阅字大小选择

他们“在 32 位架构的最初几十年(1960 年代到 1980 年代)”编写了这个软件。-维基百科