0

互联网的成功和端到端原则

 2 years ago
source link: https://blog.csdn.net/dog250/article/details/123717728
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

互联网的成功和端到端原则

original.png
dog250 newCurrentTime2.png 于 2022-03-25 01:15:00 发布 articleReadEyes2.png 4400

本文很短,就几句话。

互联网之所以发展迅速,得益于端到端原则:

  • 保持一个极简的核心,将复杂留在端。

道理很简单。

核心若不极简,互联网将无法适应变化。随着接入节点的增加,核心的负担将指数增加,互联网规模终将停滞。

全文完。以下是后序。

网络是分布式的,要实现一个网络功能时,需要选一个部署它的位置,换言之,是在转发节点实现还是在端节点实现。

计算机技术的发展让端越发智能,各类应用的蓬勃是迟早的事,它们对网络的需求各自不一。

以可靠传输为例,若在网络中心实现逐跳可靠传输,必然需要在每一跳记录状态,随着新节点的接入,状态记录将指数增长,转发节点终将不堪重负而崩溃。在中心实现其它需求,结果亦然。

简言之,在中心实现网络需求,没有可扩展性,无法适应变化,而唯一不变的是变化本身。

拥抱变化的取向迫使端到端的需求在端到端实现。否则,互联网甚至无法起步,更别提发展。

就这一点足以确定互联网的架构,其余的都是结果。

先看成本因素,遵循端到端原则是最划算的。

网络核心实现的任何功能,其代价均是全局的。网络核心是所有通信必经之处,任何一个功能,均会对途径的所有数据包进行额外操作,哪怕改功能并不是所有应用必须的。无论该功能软硬件设施所需的金钱,还是额外操作所损耗的时间,都是净损耗。不划算。

再看完备性,遵循端到端原则最完备。

网络核心实现的所有功能,必须满足所有端到端需求的全集,但端到端需求是不断变化的,因此在任何时间点均不存在完备的全集。若实现一个子集,那么实现谁忽略谁将造成不公平。网络核心无法满足全集,又不能简化实现功能子集,端到端需求在端到端满足便是必然。

最后看透明性,遵循端到端原则是保持端到端透明的唯一方式。

网络核心实现的功能,必然涉及对数据包的写操作,比如逐跳的可靠性保证,数据包的目的地永远是下一跳,源则是当前节点,源和目标在网络传输路径上不断变化,端到端的源和目标不再保持。若将功能实现在端,对于应用而言,就好像网络根本不存在一样。因此,端到端原则保持了最佳的透明性。

最终,网络核心只保留不得已而必须的传输功能,它极简,无状态,因此只能“尽力而为”,“逐跳传输”。无论是尽力而为还是逐跳传输,都是端到端原则的必然结果,现实中,这个核心就是IP协议。IP一点也不多,一点也不少,它是系着两个罐子的那根细绳子。

简单说说TCP/IP分层。它也是端到端原则的结果。

TCP/IP一开始并不是分层协议族,它是一个端到端的TCP协议,按照端到端的原则做了减法之后,IP协议分离了出来,这个分离来自于一个减法原则:“网关在搬移数据包时是否需要这个信息,若不需要,那这个信息就不该放入IP”。

这个减法将TCP变成了一个双层协议,TCP/IP。所有使用TCP/IP的上层,便生成了TCP/IP协议族。

IP是个极简协议,它只读(TTL字段只是一个增强),无状态,路由器只看目标地址即可完成转发。

分层协议族的演化表明互联网不是设计规划出来的,而是进化出来的,这个和近乎完备的ISO/OSI完全不同。

端到端原则的核心产物便是分布式路由了。

极简的IP协议唯一特征是全局编址,互联网所有节点组成了一张图,每个节点由一个IP地址标识,所有节点通过与邻居交换信息执行分布式算法,每个节点均会生成一张路由表,节点依照这张路由表执行数据包转发,由于IP是无状态的,转发必然是逐跳的,每个节点均无全局信息,却能将数据包按照最短路径送达目标,大雅。

端到端原则似乎是绝对正确的,事实果真如此吗?

回顾从阿帕网经TCP/IP诞生到现代互联网的历史,我注意到一个转折点。我在之前的文章中也提到过:

  • 让网关作为一个信使而不是一个代理是一个好主意,这使网关的工作变得简单,只需转发数据包而无需拆解它。

仔细一想,这个说法是依赖拓扑的。早期对网络的假设和现在完全不同。早期的假设是,所有节点组成一个P2P对等网络。所有节点是平等的。然而现代互联网却并非如此。

我们来看CDN,CDN网络的cache节点,它既不是源节点,也不是目标节点,逻辑上,它位于网络核心,“让网关作为一个信使而不是一个代理是一个好主意”便错了,cache节点显然要理解数据,它不仅仅要做信使,还要做代理把信拆开。

这属于对端到端原则的补充还是破坏?

早期的P2P假设将网络视为一个对等通信的场所,类似于朋友之间的交流,直到现在我们的社交应用依然符合这种假设,除此之外,人们还将网络视为获取资源的场所,类似于卖场购物,图书馆借书,CDN网络便应运而生。在CDN网络中,中间节点变复杂了,这属实是一种对端到端原则的补充。

然而如何将源站的端到端特征透明传输到客户终端,给中间cache节点带来很大的挑战。cache节点因此变得复杂无比,它需要理解各类源站的端到端特征,似乎它正朝向端到端原则的反面。

除了CDN,数据中心网络亦是端到端原则的反动。各类源抑制,反压机制在交换机上完成精细化的加速,拥塞控制,端主机反而变得简单,省下本应该处理端到端逻辑的资源用于计算业务。数据中心网络核心越发复杂,而端主机越发简单,就像一根玉米棒子两端沾着两粒玉米粒。

想多了,哪有什么普适原则。

端到端原则的最佳实践就是可扩展性,适应变化,它制造了互联网的繁荣。CDN也好,数据中心也好,均是领域网络,它们并没有全球繁荣的所需,CDN仅调度资源到用户家门口,数据中心仅局限在百米范围,与全球互联网完全不同。

因此,适应的才是最好的。

最后,我做一个对比,铁路和公路。本来我想用TCP/IP网络和传统电信网络直接说的,可最终觉得还是铁路和公路最合适。

铁路属于中心控制,复杂性在路网而不在火车,火车只保有启动,加速,刹车,鸣笛等简单功能即可。

公路属于分布式控制,复杂性在汽车而不在公路,公路只保持平整的路面即可。

试问,哪一种路更容易扩展,更适应变化?

先看铁路,新加入一列火车,或者新接入一段铁路,必须对既有牵扯到的时间表调度做完全的调整,每次铁路新增列车,提速,都伴随着巨大的调整,所谓牵一发而动全身。

再看公路,无论是经理新买了一辆新车上路,还是某处新修了一条路,什么都不用改变。汽车属于端到端逻辑,而公路只是一个极简的通道。

铁路对变化的反应是强烈的,随着列车和路网的扩张,反应烈度是指数级增加的。

公路对变化是无感的,各类新车在增加,各类旧车在淘汰,路有新修和拥堵,但几乎不会有任何感觉。

浙江温州皮鞋湿,下雨进水不会胖。

文章知识点与官方知识档案匹配,可进一步学习相关知识

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK