很久以前,当我还是一个凌晨 bairn开始我的职业生涯,我有一个面试的一个低级别的开发者角色。那时刚刚了解了 CIDR 的实施方式,我很想炫耀我的知识。
可悲的是,这种策略对我来说效果不佳。我记得被问到的第一个问题完全惊呆了(然后被激怒了,这一切都走下坡路了)。问题是:
为什么IPv4 地址是 32 位的?
我欣然承认我不知道答案,但我确实知道最初的协议设计将地址空间划分为 8 位网络号和 24 位主机标识符——所以我试图将其合理化,理由是协议设计者设想了一个由几个网络组成的互联网(毕竟,它最初打算将特定的几个网络连接在一起),每个网络包含许多主机,并且为了编程的简单性,使所有内容都与字节边界对齐。
我记得面试官对我的回答不满意,向我暗示真正的原因是它保证适合long int
在 C 中的a中,因此简化了实现细节。当时我还年轻,我认为这是一个合理的答案,并且(在今天之前)没有再考虑过。
出于某种原因,那次谈话刚刚回到我身边,现在我回想起来,这似乎并不完全合理:
在包含固定大小的网络和主机字段的原始寻址方案下,开发人员不太可能希望将两个字段的串联分配给单个变量(我无法访问任何早期的 IP 实现来验证它们的内容)在实践中确实做到了);和
在 TCP/IP 工作开始时,C 既不是标准化的,也不是它今天成为的低级软件开发的事实上的“通用语言”。
面试官的建议真的成立吗?如果没有,什么是真正的原因,该协议的设计师选择了32位寻址?