为什么IPv4地址为32位?


33

许多个月前,当我只是一个职业生涯的 白裙时,我接受了一个低级开发人员职位的面试。那时我刚刚学会了CIDR的实施方式,所以我很想炫耀我的知识。

可悲的是,这种策略对我来说效果不是很好。我记得被问到的第一个问题完全弄糟了(然后,之以鼻,这一切都下坡了)。问题是:

为什么 IPv4地址为32位?

我很容易地承认我不知道答案,但我确实知道原始协议设计将地址空间划分为8位网络号和24位主机标识符,因此我基于以下理由进行合理化:协议设计者设想了一个由几个网络组成的Internet(毕竟,它最初是为了将特定的几个链接在一起),每个网络都包含许多主机,并且为了简化编程,使所有内容保持字节边界对齐。

我记得面试官对我的回答不满意,并向我暗示真正的原因是保证它可以容纳long int在C语言中,因此简化了实现细节。当时还年轻又绿色,我接受了一个合理的答案,并且(在今天之前)再也没有想过了。

由于某种原因,对话才刚刚回到我身边,现在我开始反思,这似乎并不完全合理:

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

  2. 在开始进行TCP / IP协议的时候,C既不是标准化的,也不是今天已经成为低级软件开发的事实上的 “通用语言”。

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


3
640 kB ought to be enough for anybody.没人希望烤面包机和冰箱可以上网的原因相同。

1
@afwe:嗯。问题不是他们为什么不选择更大的数字呢?aka 为什么只有32位?(这确实是\ @Jens出色答案的重点),但是32位(而不是16位,24位或48位)
eggyal 2014年

@Downvoter:愿意发表评论吗?
eggyal 2014年

Answers:


23

以下是与Vint Cerf进行的环聊的链接(2014年4月),在其中他解释了他如何认为此互联网仅应作为实验:

在我们考虑Internet时(想好了,这将是任意数量的网络都互连在一起-我们不知道有多少,也不知道它们将如何连接),但是我们在全国范围内使用网络认为“ 好吧,也许每个国家会有两个 ”(因为它很昂贵:目前已经发明了以太网,但并没有像几年后那样在各处普及)。

然后我们说“ 那里有多少个国家? ”(每个国家两个网络,有多少个网络?),所以我们没有Google要问,所以我们猜测是128,而128是256个网络的2倍(即8位),然后我们说“ 每个网络上将有多少台计算机? ”,然后又说“ 约有1600万? ”(即另外24位),所以我们有一个32位地址,允许43 亿个终端,我认为1974/3年足以进行实验!

我已经将其发布为对Jens Link答案的评论,但我觉得它应该多出一点。


我认为这不仅仅是“多一点表面”,比詹斯的答案更直接地回答了实际问题。
eggyal

34

简单的答案:因为Vint Cerf如此决定。他认为自己正在设计一种实验性协议,并认为32位足以满足此目的。他没想到IPv4会在生产系统中使用,因此没有更多考虑地址空间的大小。

在2008年Google IPv6大会上,他主持了小组讨论,题目是IPv6互联网的样子?在此期间,他叙述了

之所以决定使用32位地址空间,是因为一群工程师无法解决32、128或可变长度的问题,他们经过了一年的奋战。经过一年的战斗,我说-我现在在ARPA,正在运行程序,我正在为这些东西付款并使用美国税金-我想取得一些进展,因为我们不知道这是否是去上班。所以我说32位就足够进行一个实验,它是43亿个终端-甚至国防部也不需要43亿个东西,反正买不起43亿个边缘设备来进行测试。因此,当时我以为我们正在进行实验以证明该技术,并且如果该技术可行,我们将有机会进行该产品的生产版本。好吧-[笑声]-它逃脱了!

彼得·E·默里Peter E.Murray)的笔录


7
啊,我真愚蠢! 奥卡姆的剃刀再次击中。至少您知道面试官是错的,这使我感到满意。
Eggyal 2014年

2
@ user5025:是的,有可能(一般情况下)。但是如果Vint说这些是他为IPv4选择32位的原因,那么很难说他还有其他人。
Eggyal 2014年

5
@ user5025:好的,这很公平。实际上,他提到工程师们一直在争论长度应该是多少,有些人主张32位。所以我想问题是他们提倡32位动机是什么(即,什么使Vint可以接受)?
2014年

2
@eggyal:我的意思不是说32位整数“绝对”是一个激励因素,而是建议我认为,足够多的工程师建议使用大小可能已经考虑了一个因素,而没有证据表明这一点很合理。相反,我认为不能排除它是最终选择的一个因素。
超级猫

2
@eggyal:您问什么可能促使工程师选择32位。我的目的是回答这个特定问题。我已经在“裸机”上编写了一个TCP / IP堆栈,不得不在各种场合下处理地址,但是对解析它们从来没有兴趣-只是确定它们是否匹配[此特定堆栈仅处理传入的TCP / IP连接,因此它必须处理ARP,但不能处理网关]。
超级猫

0

大小。他们在写软件,而不是在设计计算机硬件-尽管我确定他们考虑到了性能和可移植性。当时,32位是word,在longwordintlongInt或什么的。请参阅字长选择

他们在“ 32位架构的前几十年(1960年代至1980年代)期间”编写了该软件。- 维基百科


3
除非您建议TCP / IP的架构师考虑特定的计算机体系结构,否则我不确定您将如何使用此论点...您是否有证据表明他们正在使用/设计用于32-位架构,或者甚至是字长与它们为网络地址选择的长度有关?
eggyal

@eggyal:8位和16位计算机的语言通常包含32位整数数据类型,但是32位计算机上的语言具有多字整数数据类型的情况要少得多。至少在源代码级别上,使用32位值本质上与使用16位值一样方便,并且绝对比使用较大类型更方便。此外,对于通信需求有限的设备,如果它们通过更复杂的网关进行通信,则32位寻址就可以了。
超级猫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.