对“端到端”原则的理解

来源:互联网 发布:千万别在淘宝搜血滴子 编辑:程序博客网 时间:2024/05/02 00:18

对“端到端”原则的理解

前些天读了两篇论文,一篇是J.H.Saltzer,D.P.ReadD.D.Clark80年代初发表的《The End-TO-End Arguments in System Design》,另一篇是David D.Clark在前篇论文发表近20年后写的《Rethinking the Design of the Internet-The end to end arguments vs. the brave new world》,这两篇论文都是网络设计原则方面的重要理论探讨。

The End-TO-End Arguments in System Design》这篇论文提出了一个著名的“端到端原则”,文章考虑的一个重要问题是如何在功能之间进行合适的划分,如何将功能安置到合适的层中。通讯系统设计的主要目标是要让传输中各种错误发生的概率降低到一个可以接受的水平。对于一个通讯可靠系统,它的出错率应该是很低的,而且只需通过简单的多次传输就可以实现系统的目标。当然也可以采用端到端确认重传来实现,这时就要考虑这些功能在系统中什么地方实现,即层次上的考虑。设置功能时要考虑两个因素的权衡:代价和性能。通常底层的功能可以提高系统的性能(如底层的校验机制),但全局的代价较大(overall cost)。在文中作者通过几个例子(传输保证、安全传输、时序控制以及实务管理)来说明将一些功能放到高层(End)是有利于系统的实现和性能提高的。同时也强调一点:任何应用对功能的需求都是有特指的,因此不可能存在一种底层的功能满足所有的上层应用需求。任何底层功能的设定都是高全局代价的。因此,某些功能的不完全实现往往是提高系统功能的好办法。作者认为网络传输是不可靠的,即由于错误的复制或缓冲,硬件处理器或记忆短暂的错误等各种原因会出现数据包的丢失和损坏,因此在网络的最核心的部分应该只做数据的传输而不能去做一些其他的应用,而数据是否正确传输则应该放到应用层去检查和判断——由此产生了我们今天网络应用层上的确定重传机制。这样一来实际上是降低了网络的核心复杂度,同时也提高了网络的灵活性和可维护性,因为网络只需要做一件事情即传输数据,而其他的功能可以放到应用层上去实现,这样网络一旦出现故障我们首先想到的就不会是网络的核心部件了。

今天我们的网络已经是非常庞大了,可是在当时网络还刚刚起步,我在想作者当时为什么会提出这样一种论点呢?带着这样一个问题反复地拜读了好多次,细细揣摩作者写作的动机,隐隐明白了作者当初想要解决的一些问题。

其一,降低网络核心复杂度,简化复杂功能。文件从主机A传到主机B,也就是说AB主机要通信,需要经过三个环节:首先是主机A从磁盘上读取文件并将数据分组成一个个数据包packet,,然后数据包通过连接主机A和主机B的网络传输到主机B,最后是主机B收到数据包并将数据包写入磁盘。在这个看似简单其实很复杂的过程中可能会由于某些原因而影响正常通信。比如:磁盘上文件读写错误、缓冲溢出、内存出错、网络拥挤等等这些因素都有可能导致数据包的出错或者丢失,由此可见用于通信的网络是不可靠的。那么怎么样在不可靠的网络上实现和确保两个主机之间文件的可靠传输,即实现数据的完整而准确的传输成为通信双方信息共享的关键。由于实现通信只要经过上述三个环节,那么我们就想是否在其中某个环节上增加一个检错纠错机制来用于对信息进行把关呢?在通信时一旦发现数据包有问题就进行相应的处理使得到达主B的数据包都是没有问题的或者说都是正确的数据包。连接主机AB的网络在通信过程中起着桥梁的作用,同时它在整个网络体系结构中也处于一个较低的层次,那么是不是可以把数据包的纠错任务也交给网络呢?事实证明这是行不通的。因为这不但会增加网络的复杂性而且会降低网络的可维护,从而必须要付出昂贵的开销,这是不可取的。这时候“端系统”似乎理所当然地成为了要完成这个任务的佼佼者。实验证明“端系统”完全可以胜任这个工作,因为只有“端系统”可以知道哪个地方出现了错误,哪个地方需要重传。我们将确认传输正确的任务交给“端系统”去完成,在“端系统”没有接收到完整的所需要的资源的同时,可以有多种机制来保证满足传输的正确。如将确认重传机制放在端系统的应用层上可以保证信息的可靠到达,这样就最大的保证了传输的可靠性和完整性。但是为了在一个原本不可靠的网络上实现可靠传输,就必须要有一个独立于网络层的可靠传输协议和一个端系统的应用层的错误检测功能。这样一来,网络的使命就很单纯了,网络只需要负责传输数据,而其他方面都由网络以外的系统去实现了,从而大大地降低了网络的复杂性,提高了网络的通用性和灵活性,当增加新应用时也不必改变核心网络,便于网络的升级,提高了网络的可靠性。

其二,尽可能好的数据传输服务。对于数据的传输来说,网络层的最主要目的是增大数据传输的速率,网络层不需要考虑数据的完整性,数据的完整性和正确性交给端系统去检测就行了,因此在数据传输中,对于网络层只能要求其提供尽可能好的数据传输服务,而不可能寄希望于网络层提供数据完整性的服务。这种设计原则可以使得传输的速率最大化,同时也为多种服务的实现提供了数据传输方面的保证。现在广泛使用的TCP协议也只能够用确定重传的机制来保证数据的一致性和完整性,因此这对于端系统的检测数据完整性和保证数据的正确性提出了更高的要求。

其三,“End-To-End”地址透明性和全球唯一地址。“端到端”设计原则需要给Internet上的主机分配全球唯一的地址以用于标识不同的主机,这样在传输的过程中不需要中间的节点或者转发节点对于包的内容进行修改。在数据包中包括了来源和目的地的完整的信息,中间的路由等转发节点也不需要去知道该数据包的信息。在这个意义上,数据在端系统之间的传输好像是有唯一的通路直接相连。这样,端系统上的应用程序也不需要知道实际传输的具体的线路,为实际应用也带来了方便。

Rethinking the Design of the Internet-The end to end arguments vs. the brave new world》这篇论文是MIT教授David Clark2001年发表在ACM上的另一篇关于重新思考Internet设计原则的重要论文。20多年前他提出的“End-to-End Argument”表述为:一种应用功能只有当其知识和帮助置于通信系统的边缘才能完全和正确地实现,因此将提出这种应用功能作为通信系统本身的性质是不可能的。当时提出这种论断的依据是网络是不可靠的,网络只做最通用的数据传输,而最终检查是否正确执行只能在处于传输终端的应用层。这样一种设计原则的优点很多,解决了当时很多难题,这在前面已有论述。可是到了今天,这样一种设计原则是否仍然适用呢?“端到端”原则是绝对可靠的吗?这正是作者在这篇文章中思考的问题。

当今的网络已是今非昔比,不但网络的规模是当时无法想象的,就是网络的应用环境也大大地改变了。一方面由于端系统原则要求每台主机都要有一个全球唯一的地址,这样20年前的IPV4已经不可以保证每一台端系统都有唯一的地址,这样就产生了A,BC类地址,产生了子网、网关等等也产生了IPV6技术来面对地址空间不足的挑战。另一方面Internet初期的用户基本上都属于技术型的科研人员,而现今已普及到一般老百姓,所以事实上许多复杂的软件都放在服务器而不再是“end”,这是与当初“端系统”原则不相符合的。由于用户急剧增加而互不了解,Internet已变成没有信用的世界,必须在网络的核心部分增加认证、授权等机制使网络更可信。尽力服务不能保证服务质量,特别是流媒体服务质量,需要在网络中间增加存储节点。ISP服务的多样化,要求基于中间服务器的应用。出于信息安全等方面的考虑,政府与中介组织参与网络内容与服务的监督管理,网络核心不可能再是“Dumb”网。所有这些变化都要求增加核心网络的功能,这对“端系统”原则提出了重大挑战。

我想今后网络的发展不可能完全局限于“端到端”原则的架构思想,但也不可能完全抛弃这样一种理论的指导,“端到端”原则所提倡的灵活性和开放性对今后网络的发展仍将具有重要指导意义。

 

原文来自:http://blog.csdn.net/collier/article/details/3547200