TCP/IP 前传:破晓与传奇
再次从回顾分组交换网开始。美苏争霸的 1950 年代后期,美军需要一个能抵御核打击的健壮通信网络,保罗・巴兰提出一个去中心化方案被大美丽国军方采纳,当将此方案交给世界上最懂电话网的 AT&T 去实现时,却被高傲的 AT&T 高调否决,AT&T 决不允许一个自以为是的年轻人教自己如何建立一个电话网络。
几年过去了,苏联卫星上天刺激到了大美丽国,慌乱中草创了 ARPA(高级研究计划局) 以应对技术威胁,由于行为过于草率,该局除了一间办公室和少量预算,什么也没有,更不知道自己的核心使命,谈何使命必达。
当 ARPA 终于知道自己大致要干什么时,经理劳伦斯・罗伯茨开始关注通信网络本身,而不是它连接的东西(电话?小型机?)。经理联系了各种专家频繁开会对齐方案。1967 年下半年一次会议上,经理惊讶于一个英国人唐纳德・戴维斯已经实现了一个分组交换网原型,该原型的思想正来自早就被 AT&T 鄙视的保罗・巴兰。
照此原型部署的最初的 ARPAnet(来自 ARPA 的 net) 由一系列节点织成,每个节点由一个 IMP(接口消息处理器) 和一台主机(小型机)组成,事后看来,这个思想非常简单,我也能想到,无非就是将集中式的 PBX(电话交换机) 拆分成与电话数量相同的一个个相同小件,并移送部署到每一部电话附近,然后这些小件分布式协同完成原先集中式 PBX 的工作:
偏个题插一句,将整个过程反着来也有一个例子,即分布式总线以太网将网卡的 MAC 的 CSMA/CD 功能集中在一起就是交换式以太网。
说回 ARPAnet。有了最初的物理形态,下一步就是设计通信协议,如上图所示,作为首个大型且正式的分组交换网的 ARPAnet 主要涉及三类接口,主机-IMP接口,IMP-IMP接口,主机-主机接口。
1969 年,在与加州大学洛杉矶分校,犹他大学和斯坦福研究院的工程师们进行一系列会议对齐后,NCP 于 1970 年在 RFC33(我还真花了几个小时读了读) 中被最终确定为 ARPAnet 标准协议,并于当年 12 月部署到 ARPAnet 的所有节点。
NCP 提供了主机到主机的连接功能和传输层,并支撑上层应用,这正是唐纳德・戴维斯最初的愿景,而连接功能需求则来自美国国防部。然而 NCP 却不支持异构网络互联,也就是主机到 IMP 以及 IMP 到另一个 IMP 必须使用相同至少相似的网络技术。
一次从卡车经过卫星通达伦敦大学的演示证实了 ARPAnet 并不适合跨越异构网络,这个问题催生了有关 ARPAnet 协议互操作的更多研究,并最终导致 TCP(即后来的 TCP/IP) 的诞生。而 TCP 解决的核心问题就是异构网络互联(关键中的关键),我们现在知道,IP 最终从 TCP 剥离,专门负责这件事,以至于这个细腰协议作为一个稳定平台,直接导致了后来的 Internet 应用寒武纪大爆发。
但不管怎样,NCP 一直工作到 1982 年底。随着 TCP/IP 在 1981 年 9 月的 RFC791/793 中被标准化,1983 年 1 月 1 日起,ARPAnet 将网络核心协议由 NCP 替换为 TCP/IP 协议。后面的故事大家都知道了。
有个小插曲不得不提。
虽然 TCP/IP 在 1983 年初取代了运行了十多年的 NCP,它自己就没有任何缺陷吗?这些缺陷会严重到成为阻碍部署的力量吗?如果是,这个力量有多大,后果有多严重?即便是标准化的 TCP/IP 也有可能被另一种事实上的标准所取代。事后看来,这个担心是多余的,TCP/IP 几乎以摧枯拉朽之势迅速铺开,这背后到底是谁在神助攻呢?
答案是 BSD Socket!本文讲的是 TCP/IP 和网络,插入过多别的内容不太合适,但在这里我要说的是,这里缺省了另一条几乎平行的线索,UNIX 之于操作系统的历史主线和网络一样精彩,UNIX 自 1960 年代后期诞生几乎与 ARPAnet 同时,同样经历了 1970 年代的诸侯纷争,在 1983 年,两条线实现了最完美交汇。
真是机缘巧合!UNIX,TCP/IP,还有一个是谁?以太网!致敬!【UNIX 应用通过 TCP/IP 在以太网上交互】
迁移到新协议并支持应用是困难的,4.2 BSD 恰好在 1983 年 8 月发布,它提供了一个非常方便的 TCP/IP 编程接口,BSD Socket,这让网络编程变得更加容易,这件事离全面部署 TCP/IP 只有 8 个月,完美交接。
若不是 Socket 接口,TCP/IP 的前路肯定不会太平坦,至少不会被快速认定为事实标准,别忘了彼时还有一个巨无霸 ISO/OSI 协议族呢,它会像 AT&T 鄙视保罗・巴兰一样鄙视 TCP/IP。
有了 Socket 接口提供的便利,各操作系统为了联网应用,迅速支持,以至于到了后来我开始找工作时,精通 Socket 竟然成了精通网络的代名词。
这就是今天我要讲的 TCP/IP 前传。
浙江温州皮鞋湿,下雨进水不会胖。