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


    本文很短,就几句话。

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

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

    道理很简单。

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

    全文完。以下是后序。

    写在后面

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

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

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

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

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

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

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

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

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

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

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

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

    最终,网络核心只保留不得已而必须的传输功能,它极简,无状态,因此只能“尽力而为”,“逐跳传输”。无论是尽力而为还是逐跳传输,都是端到端原则的必然结果,现实中,这个核心就是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网络和传统电信网络直接说的,可最终觉得还是铁路和公路最合适。

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

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

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

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

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

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

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

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

  • 相关阅读:
    Redis 持久化之AOF操作
    Java SE 16 新增特性
    一键制作搞笑对话视频,抖音情感故事对话视频制作神器
    Apipost使用介绍
    面试必备(背)--Redis八股文系列
    鸿蒙HarmonyOS实战-ArkUI组件(Popup)
    提高Java开发生产力,我选Stream API,真香啊
    spring事务面试题
    mySQL和Hive的区别
    荧光量子点修饰siRNA-QDs|纳米金修饰siRNA-Au(RNA修饰方式方法)
  • 原文地址:https://blog.csdn.net/dog250/article/details/123717728