许多个月前,当我只是一个职业生涯的小 白裙时,我接受了一个低级开发人员职位的面试。那时我刚刚学会了CIDR的实施方式,所以我很想炫耀我的知识。
可悲的是,这种策略对我来说效果不是很好。我记得被问到的第一个问题完全弄糟了(然后,之以鼻,这一切都下坡了)。问题是:
为什么 IPv4地址为32位?
我很容易地承认我不知道答案,但我确实知道原始协议设计将地址空间划分为8位网络号和24位主机标识符,因此我基于以下理由进行合理化:协议设计者设想了一个由几个网络组成的Internet(毕竟,它最初是为了将特定的几个链接在一起),每个网络都包含许多主机,并且为了简化编程,使所有内容保持字节边界对齐。
我记得面试官对我的回答不满意,并向我暗示真正的原因是保证它可以容纳long int
在C语言中,因此简化了实现细节。当时还年轻又绿色,我接受了一个合理的答案,并且(在今天之前)再也没有想过了。
由于某种原因,对话才刚刚回到我身边,现在我开始反思,这似乎并不完全合理:
在包含固定大小的网络和主机字段的原始寻址方案下,开发人员不太可能希望将两个字段的串联分配给单个变量(我无法访问任何早期的IP实现来验证它们的作用)。实际上是在实践中);和
在开始进行TCP / IP协议的时候,C既不是标准化的,也不是今天已经成为低级软件开发的事实上的 “通用语言”。
面试官的建议实际上成立了吗?如果没有,什么是真正的原因,该协议的设计师选择了32位寻址?
640 kB ought to be enough for anybody.
没人希望烤面包机和冰箱可以上网的原因相同。