您好,欢迎访问三七文档
TheDesignPhilosophyoftheDARPAInternetProtocols简译DavidD.Clark*MassachusettsInstituteofTechnologyLaboratoryforComputerScienceCambridge,MA.02139(OriginallypublishedinProc.SIGCOMM‘88,ComputerCommunicationReviewVol.18,No.4,August1988,pp.106–114)摘要TCP/IP,Internet世界中必不可少的协议包,是由美国国防先进技术研究计划署(DARPA)于15年前开发实现的,已经被广泛地应用于国防和经济领域。如今我们可以轻易地找到大量研究这个协议如何工作的论文,但是我们很难从这些论文中弄清楚这个协议为什么一步步地变成了现在的样子。比如说,Internet协议是为了能够提供无连接或报文模式服务而设计的,但是其中详细的设计动机已经被人们大大的误解了。这片论文就是尝试着发掘这些最终决定了Internet协议结构的最初的一些想法。1.简介过去的15年里,美国国防先进技术研究计划署开发出了一系列用于包交换网络的协议,其中就有IP和TCP。而这两个协议现已成为美国国防部内网的标准,同时也已在经济领域广泛应用。不仅如此,它们还影响了其它相关协议的设计,最重要的就是ISO的无连接架构协议。尽管国防部这个协议用得挺好,但是现在很难搞明白当初是何因素促成了这种良好的设计。事实上,从第一个协议诞生,一直发展到现在的标准,这整个过程中处处散发着设计哲学的气息,时时都晃动着设计哲学的影子。比如说,第一篇论文里并没有特别强调报文和无连接服务,但是它们逐渐成为了这个协议的关键特征。还有一个例子,我们现在感觉在IP层和TCP层之间加上层次结构是最基本的设计常识了,但是你相信吗,最初的设计并没有考虑到这些。在反复的实践和测试中,这些更“合理”的设计才逐渐被加入到协议中。Internet的体系结构还在发展中。一些新的发展思路可能会和现有的设计规范相冲突,但是我们应该认识到,对以往的Internet设计哲学的良好理解总是可以给现在的工作提供有意义的借鉴的。ISO的无连接协议里面也是经常可以看到Internet设计哲学的影子,所以好好了解一下这种设计哲学对那些在ISO组织的工作人员来说应该是有帮助的。这篇论文罗列了Internet体系结构设计的最初的一些目标,然后讨论了这些目标和协议中重要特征之间的关系。2.目标之基础层次DARPA-Internet体系结构设计的高级目标就是想开发出一种实用的技术,使现存的多种网络环境之间能够自由沟通。下面一些具体的例子可以让大家更了解这个目标。Internet的组件是各种各样的网络,而这些不同的网络可以相互联通以便提供更多高级的服务。最初的目标就是想把当初的ARPANET和ARPA电台网连接起来,让后者的用户可以享受前者提供的服务。当时设计人员就已经假定会有各种各样其它的网络共存,虽然那时局域网都还没有出现。为了实现网络互联的目的,我们可以设计一个所有网络的综合体,也就是巨大而复杂的“多媒体”网络——融合度越高,越好使。那也就是说,要想让这个Internet真正地好用,我们必须将所有现存的网络系统全部融合在一起。更可怕的是,网络本身还存在着管理域的问题。所以说,要实现这样一种方式的互联似乎有些过于雄心壮志了——野心太大了,不现实。现实中我们选择了包交换技术用于适应多元化的网络环境。当然,像电路交换似乎也可以考虑,但是实际上它的应用,比如远程登入,其实也还是依靠报文交换技术实现的,网络互联用的是网络交换,都属于包交换。也就是说,包交换应该成为Internet体系结构的一个基础构件。要实现这个基本的目标,最后要考虑的就是实现互联的技术细节了。而之前DARPA的另一个项目——ARPANET,已经实现了一种很好的存储转送包交换技术,那么我们就需要考虑更高级的细节问题:实现一种基于Internet层次的包交换,而这种层次上的连接我们称之为网关。好了,从这些细节我们已经可以看到Internet的结构雏形了:在一个很大的基于包交换技术的环境中,大量各种各样、乱七八糟的网络通过使用一种称之为网关的包交换处理机实现了互联,在这种网关里面执行的是一种存储转送包交换算法。3.目标之第二层次关于更高一层的目标,前面已经提到,那就是“有效”。当然前面并没有提供有效连接的具体定义,下面列出了一组评测Internet体系结构够不够有效的目标:1.Internet连接可以保持下去,即使网络或者网关出了问题;2.Internet必须可以支持大量的网络互联服务;3.Internet体系结构必须能容纳各种各样的网络;4.Internet体系结构必须可以胜任各种资源的分散式管理;5.Internet体系结构必须可以做到投入合理;6.Internet体系结构必须可以比较方便地成为主机的一部分;7.Internet体系结构里面使用的资源必须是可控、容易被理解的。这些目标看起来不过是所有特征网络的集合。但是我们一定要明白这些特征排列顺序的重要性。顺序不同,网络可能也就不同了。比如说,对于军用网络,生存性就会被排在第一位,而易解读性则应该放在最后。在战场上,我们更关心的是如何尽快将所能搜集到的所有信息以最可靠的方式传到目的地,而不是关注于种种细节的含义。起初大家并没有太留意易解读性,后来才逐渐重视的。对于为经济应用而设计的体系而言,易解读性应该放在第一位。同样地,降低成本也是我们明确的目标,但是排在胜任分散式管理和容纳所有网络之后。而在其它协议里,包括一些很出名的商用体系,比如一个基于多媒体快速传输的网络而言,它就需要很昂贵的设备投入,并且与其它网络的互联性能也很差,局域网就是一例。读者可能很仔细地考虑了上面的目标清单,并且发现这并不是一个真正的“母版”清单,而只是一组对Internet体系产生了很大影响的优先考虑的设计目标。下面几部分讨论这个清单和实际中Internet特征之间的关系。4.绝境逢生在Internet中最重要的目标就是要持续地提供互联服务,即使网络和网关都出现了错误。具体说,有两个网络正在通过Internet互联,一些错误导致Internet发生暂时性中断,然后Internet可以自己悄无声息地自动重新连接修复错误,继续提供服务,而不用我们人为地去在更高层次进行操作来手工修复Internet。更准确地说,传输层协议并不总向客户端报告发送方和接受方可能失去同步性这一事实,它总是假定这个同步性是一定可以保障实现的,除了确实无路可走了。对于传输层的最高层而言,只有一个最终的无连接的错误报告,而发生在底层的各种各样的传输错误体系根本不会让我们知道。为了达到上面的目标,我们必须保存好通信的状态信息。典型的状态信息应该包括传送包数,应答数,还有流量控制信息。协议低层如果丢失了这些信息的话,他们就搞不清楚数据是否丢失了,应用层还得应付同步性缺失的问题。本协议中就不容许丢失这些重要的状态信息,必须要保存好。有些网络体系是把这些状态信息保存在网络包交换节点里的。在这种情况下,我们就需要把信息复制。考虑到复制的分布式的特性,而保障复制可靠性的算法又很难实现,所以几乎所有这种网络体系都不提供应付失败的机制。另一种方案呢,就是把状态信息收集起来保存在网络终端,当然这些终端本身也使用网络服务。我把这种方式称为“各扫门前雪”(均担)——一个终端实体消失了,那么它自己保存的状态信息也可以丢失,对别的实体、整个Internet并无太大影响。传输层同步性信息则保存在主机中,主机连接到整个网络并且使用整个网络上的服务。“各扫门前雪”模式比“复制”模式有两大优势:第一,前者不怕出错(任何错误不致影响到整个网络),而后者容错性就差多了;第二,前者在技术上也更容易实现。“各扫门前雪”模式引出了两个推论:第一,无论中间包交换节点还是网关,都不能携带包含持续互联的实质性信息,换句话说,他们是无状态信息的包交换,因此有时候这种网络设计被称为“报文”网络,他们自己带着寻址信息,并不管中间怎么走;第二,在这个体系中主机的作用更主要,因为它不像有些网络本身就可以保障数据传输安全。如果主机可以搞定数据传输中的各种问题,那么应用层就不需要再去费心这些事了。尽管连接的持续性是最重要的目标,但是还有一个很高的目标就是互联现存所有的网络。多功能的网络体系设计可能会让网络互联更加健壮。比如说,Internet不太相信网络会报告自身发生的错误,而是亲历亲为,从Internet层次发现控制错误。5.还要支持各种各样的服务Internet体系第二个目标就是要为各种各样的网络服务提供支持。不同服务存在着巨大的差异,在速度、延迟和可靠性方面都有不同的要求。传统的服务类型是面向双向可靠数据传输的,这种服务又被称为“虚电路”服务,一般应用于远程登录和文件传输,这是在Internet中用传输控制协议(TCP)提供的最重要的服务。人们很早就认识到这种服务要面对不同的需求,因为远程登录要求延迟不能太长,但是并不苛求带宽;而文件传输则对带宽(数据吞吐量)要求很高,对延迟要求不高。TCP就要同时提供这两者不同的服务。最初人们感觉TCP就是要提高所有类型的服务,但是后来大家弄清楚到底有多少服务类型时,谁都知道,用一个协议来支持那么多的服务是很不行的。第一个TCP之外的实例是用来支持XNET的。以下原因使得TCP并不适用于XNET:第一,调试器协议不需要多么可靠。这可能听起来挺古怪。不过我们设想一下:在一个高负荷和充满错误的恶劣条件下我们却要求可靠的连接,这是不太现实的,而也许恰恰这个时候我们需要调试器——很显然,我们这时候就是要想办法建立起连接,可以将数据传出去,而不能再那么死板地要求字节流一定要按顺序传输了。第二,假如TCP可以包容大量不同的客户段,那么它必定是相当的复杂,而在调试环境中引入这种复杂度是不明智的,要知道,在调试环境可能连其它系统必需的最基本的服务(比如计时器)都没有。所以XNET被设计成一种运行在Internet提供报文服务层上端的系统。还有一种不符合TCP胃口的服务是数字语音实时传输(用于命令控制系统中的电话会议方面),它不要求传输多么可靠,而是要求传输得尽量及时和平滑。应用层把语言数字化,打包并像其它数据一样传出去,但是要求接收方可以接收到正常顺序的数据流并可以还原成正确的语音。假如没有收到应该收到的数据,那么就不能实时地再现语音了。而通过调查,人们惊讶地发现传输延迟大部分是因为对传输可靠性要求太高了!典型的可靠传输是这样的,一旦有数据包传输发生错误,它就要求重发,直到正确地接收到这个包才会继续接收其它后续的数据包。这样就会导致传输延迟比正常时多出很多倍,当然也就中断了语音的再现。事实上,偶尔丢失了一个数据包并不要紧,我们可以用空白代替它,这在语音还原时不会造成听者的理解障碍。即使听者没听清(此时可能网络环境不好,接连发生了较多的包丢失),我们此时还有高级纠错措施;再说了,听者也可以让说话者重复一遍嘛。因此在相当早的时候,人们就认识到有很多传输服务需要支持,体系必须容忍同时发生的传输对可靠性、延迟、带宽有着不同的要求。这个目标导致了TCP和IP的产生,从原来的一个层变成现在的两个层。TCP提高可靠的顺序的数据流传输服务,而IP则提供一个基本的隔离区,把各种不同的服务都隔离在IP层之下。这种隔离区里面用的是支持持续连接的报文传递。此时报文传递“很高效”,但是可靠性不能得到保障,怎么办呢?有办法!我们可以另外建立一个可靠的服务(通过更高层次上的确认重传机制实现);还有一种方法,牺牲物理层原始延迟换取可靠性。用户数据报协议(UDP)提供基本的Internet数据报文服务。协议不希望下层网络自己就可以支持多种服务,因为这与使用现存网络的目标相违背(现有网络应该独立于其它同层网络)。实际上,我们希望用主机和网关里的算法通过熟记报文的方式来支持多种服务。比如说(尽管现在我们一般不那么做),我们把延迟可控
本文标题:简译The-Design-Philosophy-of-the-DARPA-Internet-Prot
链接地址:https://www.777doc.com/doc-5032081 .html