唯一一个可见的Chaosnet残留就是DNS的CH类。这个事实让我着迷。CH类别是那被遗忘的幽魂——在TCP/IP广泛部署中存在的一个替代协议Chaosnet的最后栖身之地。
--Two-bitHistory
如果你输入dig命令对进行DNS查询,你会得到如下答复:
所以说,除了IN以外的类别没有得到广泛支持,但它们的确是存在的。除了IN之外,DNS记录还有HS(我们刚刚看到的)和CH这两个类别。HS类是为一个叫做Hesiod的系统预留的,它可以利用DNS来存储并让用户访问一些文本资料。它通常在本地环境中作为LDAP的替代品使用。而CH这个类别,则是为Chaosnet预留的。
如今,大家都在使用TCP/IP协议族。这两种协议(TCP及UDP)是绝大部分电脑远程连接采用的协议。不过我觉得,从互联网的垃圾堆里翻出了一个布满灰尘,绝迹已久,被人们遗忘的系统,也是一件令人愉悦的事情。那么,Chaosnet是什么?为什么它像恐龙一样,走上了毁灭的道路呢?
在MIT的机房里Chaosnet是在1970年代,由MIT人工智能实验室的研究员们研发的。它是一个宏伟目标的一部分——设计并制造一个能比其他通用电脑更高效率运行Lisp代码的机器。
Lisp是MIT教授JohnMcCarthy的造物,他亦是人工智能领域的先驱者。在1960年发布的一篇论文中,他首次描述了Lisp这个语言。在1962年,Lisp的编译器和解释器诞生了。Lisp引入了非常多的新特性,这些特性在现在看来是每一门编程语言不可或缺的一部分。它是第一门拥有垃圾回收器的语言,是第一个有REPL(Read-eval-print-loop:交互式解析器)的语言,也是第一个支持动态类型的语言。在人工智能领域工作的程序员们都十分喜爱这门语言,比如说,大名鼎鼎的SHRDLU就是用它写的。这个程序允许人们使用自然语言,向机器下达挪动玩具方块这样的命令。
Lisp的缺点是它太慢了。跟其它语言相比,Lisp需要使用两倍的时间来执行相同的操作。因为Lisp在运行中仍会检查变量类型,而不仅是编译过程中。在MIT的IBM7090上,它的垃圾回收器也需要长达一秒钟的时间来执行。1这个性能问题急需解决,因为AI研究者们试图搭建类似SHRDLU的应用。他们需要程序与使用者进行实时互动。因此,在1970年代的晚期,MIT人工智能实验室的研究员们决定去建造一个能更高效运行Lisp的机器来解决这个问题。这些“Lisp机器”们拥有更大的存储和更精简的指令集,更加适合Lisp。类型检查由专门的电路完成,因此在Lisp运行速度的提升上达成了质的飞跃。跟那时流行的计算机系统不同,这些机器并不支持分时,整台电脑的资源都用来运行一个单独的Lisp程序。每一个用户都会得到他自己单独的CPU。MIT的Lisp机器小组(LispMachineGroup)在一个备忘录里提到,这些功能是如何让Lisp运行变得更简单的:
这个Lisp机器跟我们认知的现代个人电脑有很大的不同。该小组原本希望今后用户不用直接面对Lisp机器,而是面对终端。那些终端会与位于别处的Lisp机器进行连接。虽然每个用户都有自己专属的处理器,但那些处理器在工作时会发出很大的噪音,因此它们最好是位于机房,而不是放在本应安静的办公室里。3这些处理器会通过一个“完全分布式控制”的高速本地网络共享访问一个文件系统和设备,例如打印机。4这个网络的名字就是Chaosnet。
Chaosnet既是硬件标准也是软件协议。它的硬件标准与以太网类似,事实上Chaosnet软件协议是运行在以太网之上的。这个软件协议在网络层和传输层之间交互,它并不像TCP/IP,而总是控制着本地网络。Lisp机器小组的一个成员DavidMoon写的另一个备忘录中提到,Chaosnet“目前并不打算为低速链接、高信噪链接、多路径、长距离链接做特别的优化。”5他们专注于打造一个在小型网络里表现极佳的协议。
因为Chaosnet连接在Lisp处理器和文件系统之间,所以速度十分重要。网络延迟会严重拖慢一些像打开文本文档这种简单操作的速度,为了提高速度,Chaosnet结合了在NetworkControlProgram网络控制程序中使用的一些改进方法,随后的Arpanet项目中也使用了这些方法。据Moon所说,“为了突破诸如在Arpanet中发现的速率瓶颈,很有必要采纳新的设计。目前来看,瓶颈在于由多个链接分享控制链接,而且在下一个信息发送之前,我们需要知道本次信息已经送达。”6Chaosnet协议族的批量ACK包跟当今TCP的差不多,它减少了1/3到一半的需要传输的包的数量。
因为绝大多数Lisp机器使用较短的单线进行连接,所以Chaosnet可以使用较为简单的路由算法。Moon在Chaosnet路由方案中写道“预计要适配的网络架构十分简单,很少有多个路径,而且每个节点之间的距离很短。所以我认为没有必要进行复杂的方案设计。”7因为Chaosnet采用的算法十分简单,所以实现它也很容易。与之对比明显,其实现程序据说只有Arpanet网络控制程序的一半。8
Chaosnet的另一个特性是,它的地址只有16位,是IPv4地址的一半。所以这也意味着Chaosnet只能在局域网里工作。Chaosnet也不会去使用端口号;当一个进程试图连接另一个机器上的另外一个进程时,需要首先初始化连接,获取一个特定的目标“联系名称(contactname)”。这个联系名称一般是某个特定服务的名字。比方说,一个主机试图使用TELNET作为联系名称,连接另一个主机。我认为它的工作方式在实践中有点类似于TCP,因为有些非常著名的服务也会拥有联系名称,比如运行在80端口上的HTTP服务。
在1986年,RFC973通过了将ChaosnetDNS类别加入域名解析系统的决议。它替代了一个早先出现的类别CSNET。CSNET是为了支持一个名叫计算机科学网络(ComputerScienceNetwork)而被制造出来的协议。我并不知道为什么Chaosnet能被域名解析系统另眼相待。很多别的协议族也有资格加入DNS,但是却被忽略了。比如DNS的主要架构师之一PaulMockapetris提到说在他原本的构想里,施乐(Xerox)的网络协议应该被包括在DNS里。9但是它并没有被加入。Chaosnet被加入的原因大概是因为Arpanet项目和互联网的早期工作,有很多都在麻省剑桥的博尔特·贝拉尼克—纽曼公司,他们的雇员和MIT大多有紧密的联系。在这一小撮致力于发展计算机网络人中,Chaosnet这个协议应该较为有名。
Chaosnet随着Lisp机器的衰落渐渐变得不那么流行。尽管在一小段时间内Lisp机器有实际的商业产品——Symbolics和LispMachinesInc在80年代售卖了这些机器。但它们很快被更便宜的微型计算机替代。这些计算机没有特殊制造的回路,但也可以快速运行Lisp。Chaosnet被制造出来的目的之一是解决一些Apernet协议的原始设计缺陷,但现在TCP/IP协议族同样能够解决这些问题了。
壳中幽灵非常不幸的是,在互联网中留存的关于Chaosnet的资料不多。RFC675——TCP/IP的初稿于1974年发布,而Chasnet于1975年开始开发。10但TCP/IP最终征服了整个互联网世界,Chaosnet则被宣布技术性死亡。尽管Chaosnet有可能影响了接下来TCP/IP的发展,可我并没有找到能够支持这个猜测的证据。
唯一一个可见的Chaosnet残留就是DNS的CH类。这个事实让我着迷。CH类别是那被遗忘的幽魂——在TCP/IP广泛部署中存在的一个替代协议Chaosnet的最后栖身之地。至少对于我来说,这件事情是十分让人激动。它告诉我关于Chaosnet的最后一丝痕迹,仍然藏在我们日常使用的网络基础架构之中。DNS的CH类别是有趣的数码考古学遗迹。但它同时也是活生生的标识,提醒着我们互联网并非天生完整成型的,TCP/IP不是唯一一个能够让计算机们交流的协议。“万维网”也远远不是我们这全球交流系统所能有的,最酷的名字。
’sManual,TheComputationCenterandResearchLaboratoryofElectronics,90,accessedSeptember30,2018,↩
LispMachineProgressReport(ArtificialIntelligenceMemo444),MITArtificialIntelligenceLaboratory,August,1977,3,accessedSeptember30,2018,.↩
LispMachineProgressReport(ArtificialIntelligenceMemo444),4.↩
同上↩
Chaosnet(ArtificialIntelligenceMemo628),MITArtificialIntelligenceLaboratory,June,1981,1,accessedSeptember30,2018,.↩
同上↩
Chaosnet(ArtificialIntelligenceMemo628),16.↩
Chaosnet(ArtificialIntelligenceMemo628),9.↩
PaulMockapetrisandKevinDunlap,“TheDesignoftheDomainNameSystem,”ComputerCommunicationReview18,(August1988):3,accessedSeptember30,2018,.↩
Chaosnet(ArtificialIntelligenceMemo628),1.↩
via:
作者:Two-BitHistory选题:lujun9972译者:acyanbird校对:wxy
本文由LCTT原创编译,Linux中国荣誉推出