众所周知,从DARPA开始而在短短30年间占领全世界互联网络的TCP/IP结构协议已成为人类科技史上的一个传奇。缘何一个只是美国军方为冷战而设计的、满足“最坏”条件下通信需求的协议结构变得如此成功呢?88年就发表在SIGCOMM的著名的David D. Clark撰写的论文《The Design Philosophy of The DARPA Internet Protocols》对TCP/IP协议设计及其演变有着最深刻的理解。
一、“The simple is the best
在解决一个复杂问题时,需要考虑的因素之多自是必然的,但如何能以“四两拨千斤”、举重若轻的从众多问题中提炼出最关键的、最普适的解决方案才是王者之道。论文给出了当初网络结构设计所要达到的目标,即:
1.        即使网络和网关失效,网络通信也必须能够继续;
2.        互联网必须支持多种通信服务;
3.        互联网结构必须能够适应多种网络硬件;
4.        互联网结构必须允许资源的分布式管理;
5.        互联网结构的花费必须是有效的;
6.        互联网结构必须能够方便地进行主机互连;
7.        互联网结构使用的资源必须是可以统计的。
       因此,为解决网络失败问题,网络结构选择将状态信息保存在终端节点,称为命运共享,只有在终端节点失效时,状态信息才会丢失,命运共享比复制状态信息有两个重要优势。命运共享可以防止任意多的中转节点失效,复制状态信息只能防止一定数量的中转节点失效;其次,命运共享简单,便于工程实现。
       为实现多种通信服务及可靠性、时延、带宽等约束的服务,TCP提供了可靠的数据流传输,而IP提供了基于报文的协议,并可以建立多种服务。报文作为IP协议的基本构造单元,能够屏蔽底层通信细节,为上层多种通信应用提供服务,也即我们所称的“细腰结构”。但IP并不可靠的,为满足可靠通信要求,可以在高层协议通过确认、重传等机制实现可靠性,或者用可靠×××换低时延,满足如视频会议等特殊场合的需求。UDP提供基于报文服务的应用级别接口。
       由于当时的设计并没有较多的考虑网络系统管理 ,但简洁、灵活的设计为后续网络测量、管理及安全等提供了应用基础。如作者在谈到协议设计如何兼容各种不同结构及功能的网络时,提出了最基本而且简单的假设,即:所有网络都是使用数据包来进行传播的,包结构必须合理,而且易于传播,没有依赖性。在考虑系统数据的按序传播、时延、网络分层多播及优先级调整等需求时,若协议从一开始就进行上述因素的工程实现,相信我们的协议会从诞生时就是一个不健康的“巨婴”,或许不到十年就将因自身负担过重而被淘汰掉。按照需求分层实现是个不错的选择,将这些需求交给端系统或其他真正有需要的应用场合进行工程实现的意义更大些。
论文作者开始分析DARPA网络体系结构的设计初衷,以及设计的指导思想。这些设计思想的产生与演变在论文中得到了很好的论述。从最初的实际应用型到打败科班出生的OSI,成为互联网界的实际标准,一统天下,这确实与其强大的生命力分不开,正所谓“The simple is the best”。正如Robert KahnVinton Cerf多年前所知道的那样,一个具备高度适应性的协议将具有强大的生命力,正是他们在DARPA的准确定位,使得TCP/IP协议最终成为DoD标准。
二、需求才是最终驱动
如上所述,DARPA的设计者们在最初为了完成网络互联的需要,设计了很多目标,然而在不同的应用环境下这些目标的重要性又不尽相同,军队网络和商用网络的开放性使得网络协议架构存在根本的差异。如何处理好这些需求的优先级以及协议关系非常重要。论文从一开始就说明DARPA的出发点,提出了一个最基本的目的:为了开发一个能够充分利用现存网络的高效的技术,这也决定了互联网络的结构是一个高度可适的结构。因此,报文交换技术及其相关技术被付诸实践至今,如网关、存储-转发机制等。如何“高效”,论文中作者对高效的含义做了7个方面的注解。并且提出当7个目标的实现顺序被更改,网络体系结构也必将发生变化。这也表明,网络体系结构该如何设计,和我们需要达到的目的有非常紧密的联系。并且,当我们改变了设计并且优化了某方面的性能时,我们很可能正在把另外几个方面的性能的优先级排到了后面。我们既要保证数据传输的稳定性还要有时效性,同时还需要互联网能提供多样的服务以适应不同的需求。
我们都知道,TCP可以提供稳定的数据传输,而IP又能兼容很多服务。在需求驱动下,TCP/IP协议结构使得这些目标能够最好的达到。但是,它仍然不能够满足所有的要求,正因为这样,互联网协议才在不断的发展和完善,比如UDP协议的出现。
数据报的应用及其成功无需置疑:中转节点无需保存连接的状态信息,这意味着网络失败后可以方便地的进行重建,而不需要考虑到状态;数据报提供了用于创造多种服务的基本构造块,便于扩展应用;数据报只对网络进行了很少的假设,使得系统可以兼容多种网络结构,进行多种网络实现。可以说,选择数据报作为网络传输的基础是互联网结构获得巨大成功的重要原因。但是,我们也应看到:数据报无法达到资源统计和管理的目标,因为数据报通常是由字节流分拆得到的,是整个流的一部分,而不是孤立的单元,而网关将所有的数据报当作单独的单元进行处理。
关于需求驱动的问题,论文中也提到,DARPA体系结构的称也说明了某些场合,设计者的实现并不是按照实际用户的需求来的。但是我认为:单个群体的需求并不能决定演化的方向,互联网作为一个“巨系统”,它的需求输入是复杂的。针对各种网络突现行为的研究能在一定程度上说明需求的衍生与相互干涉。只有这样的综合,才能作为未来发展的最终驱动。
三、其他
论文中讨论了关于主机驻留的算法实现与网络鲁棒性折中的设计,确实,在很多应用中,算法实现的效率往往是与在与现实进行权衡后的值。这对我们的研究工作有所启示:也许理论上这个算法堪称完美,但在与实践接轨时可能会遇到一些批评,不要说“仁者见仁,智者见智”,那只是直接证明了这个算法的不完美性,即:只有符合应用实际的才是完美的算法。
论文对协议与规范、架构与实现的关系进行了讨论,最终作者认为始终需要对协议的实现进行指导,即使到今天也是如此。
论文也分析了体系结构的架构过程,提出了问题复杂性的讨论,体系结构的设计者们痛恨那种只关心逻辑对错,而忽略了系统性能的现象。这也提出了关键性的另一个问题,就是在体系结构中如何规范的描述结构性能问题,以期能切实指导实践者,单纯的指明“这个网络能吞吐多少数据”并不能解决根本性的问题,也不是体系结构需要进行描述的。也许如今网络测量研究及形式化方法的进一步研究能够解决这些问题。文中提到使用模拟的手段对体系结构进行评测,但是迄今还没有什么模拟器可以完整地对主机的实现和网络的真实性能做出有说服力的评测结果,例如网关的实现。
论文还探讨了数据报和人们的一些误区,声明了数据报并不是因为用户的需求才被使用的。对于TCP协议和字符流,作者也比照数据报阐述了它的自身优势,分析了EOL发展和逝去的过程。
在结论部分,作者认为会有更好的流和信息块分割来代替现在的数据报,网络体系结构也会发展得越来越完善。
四、思考
读完这篇经典论文,我感觉收获挺大,初步理解了今天互联网络如此设计的原因及其演进,加深了对网络结构的理解。如今互联网络的蓬勃发展为我们创造了许多机遇,也为我们带来很多挑战。有人就认为互联网发展到今天简直发展得像一个怪物,技术的更新甚至不能赶上众多用户在现有技术上的创新;也催生了很多新应用,衍生出网络专业的很多研究方向,如:移动网络、社会网络、绿色网络、传感器网络等。Clark的这篇论文直到现在仍然对我们的研究有着很多启发。