重新审视端到端传输协议:从观念到原则

news/2025/1/17 8:48:30/

将一个功能置于一个复杂系统的何处是系统设计中处处遇到的问题。

现在我们都知道传输协议的端到端原则,但在它成为原则之前只是一个观点,曾经有场辩论,有人认为传输协议应该由参与通信的每一跳协同实现,可为什么与此相对的端到端的观点会胜出?核心的点非常现实且容易理解:

  • 早期 ARPAnet 要利用现有网络(比如电话网),因此不能对已有网络的 feature(比如可靠性) 做任何假设,只能在上层隔离实现网络无关的协议特性以支持对网络不同需求的应用,但网络并不知道所有应用对网络的期望。
    • 这导致了 IP 的分离以及 UDP 的构建,因为并不总能预期应用需要可靠的网络,因此需要一个与可靠协议并列的不可靠协议。现在我们知道分层和模块化是影响性能的关键(来自 RFC817 的预见)。
  • 若在网络路由器中支持传输协议,需要采集并保持每条流(or per-packet)状态,为保证状态不丢失,需将其分布式备份,而分布式一致性算法难以构建。反之,仅在通信的主机两端维护这些信息便轻易实现了 “命运共担”。
    • 事后我们知道这个基本点带来的 “巨大正向副作用”,网络的无状态性使主机接入变得异常简单,互联网进而蓬勃发展。而随着计算机工业持续发展,主机端实现复杂传输协议并非难事。这极大解放了网络路由器的算法复杂性和性能,否则随主机应用的接入,路由器复杂性将指数级增长,总有一天不堪重负而垮掉;
  • 如果协议要满足应用的需求,网络自然没有主机更接近从而更了解应用,网络自然没有主机知道如何更能满足应用,换句话说,让最懂的去做,做不好就不做。
    • 这个观点在关注传输性能优化的今天似乎反了过来,网络似乎更懂传输性能的指标和细节,哪里会丢包,哪里在排队,哪里带宽空闲,也已经有了关于跨层优化的大量研究,在细腰模型的约束下,这些研究基本都集中在 “信息如何 report 给传输层” 方面。
  • 网络要保持健壮就要保持简单。如果地图丢了怎么办?最简单的假设是没有地图,靠打听问路到达目的地。要假设被问方只具备最少知识,而最少知识就是邻居,即下一跳。这意味着描述要简单。
    • 这便是经典的 “IP 逐跳路由”。这意味着所有与逐跳路由无关的信息都不会被保存在路由器上。和上述第二个观点一致,这保证了网络可靠性,但使主机软件变得复杂,考虑到上述第二个观点相同的原因,计算机工业以及软件技术的发展抵消了人们对主机软件复杂性的恐惧。

事后看来,端到端原则让互联网获得巨大成功,但端网分离的端到端原则并不总正确。从互联网破晓到爆发式发展时期,TCP/IP 细腰模型让网络有能力迅速扩展,但扩展到全球近饱和后,管理和性能问题逐渐被关注。当 IoT 终端也实现标准接口时,互联网接入开始从买方市场进入卖方市场。

结构决定行为,存量决定结构。早期的对等通信网络结构早已被分发网络颠覆,看看如今的互联网,作为客户端几乎都在 NAT 后,而早期自然的对等通信是不受待见(抢带宽?)甚至非法(比如 P2P)的,即使 P2P 对等网络,绝大多数情况下,其目的竟然也是获取内容而不是通信,这是多么讽刺。
因此,在历史上有过争议的观点双方需要被重新评估。

或许可以通过构建 overlay 网络的方式来支持当时相反的观点,而不是重构整个互联网(这是不可能的)。比如 CDN,PCDN 就很像 TCP/IP-based NDN,自然可将 CDN 多级 cache 节点当作内容 “路由器”,虽然俺这种理解,仍然无助于解决最后一公里拥塞问题。

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


http://www.ppmy.cn/news/1563847.html

相关文章

详解C#反射(Reflection)

一.反射概述 1.1 自己对反射掌握程度的要求 了解反射相关概念,API,阅读代码和文档时看到反射相关内容能反应过来即可 1.2 反射的概念 反射提供了封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例&…

基于Matlab实现微带贴片天线仿真程序

微带贴片天线是一种广泛应用于无线通信领域的天线类型,因其结构简单、尺寸小巧而备受青睐。在MATLAB环境中,可以使用时域有限差分(Finite Difference Time Domain, FDTD)方法对微带天线进行仿真,以研究其电磁性能。 让…

基于Springboot: 宠物小程序开发笔记(上)

概要设计 提供便捷的宠物服务预约平台, 帮助萌宠预约洗护、上门遛狗狗,上门喂猫,驱虫给药等;主要功能包括:展示不同服务,选择日期和时间,完成服务预约,用户查看历史订单和预约状态等…

Gaea与物联网:构建去中心化AI的资源交换网络

随着物联网(IoT)技术的发展,越来越多的设备开始连接到互联网,产生海量的数据。这些设备和数据在AI训练和智能分析中有着极为重要的价值,但同时也对计算资源和网络带宽提出了巨大的需求。Gaea通过构建一个去中心化的资源…

SparkSQL数据模型综合实践

文章目录 1. 实战概述2. 实战步骤2.1 创建数据集2.2 创建数据模型对象2.2.1 创建常量2.2.2 创建加载数据方法2.2.3 创建过滤年龄方法2.2.4 创建平均薪水方法2.2.5 创建主方法2.2.6 查看完整代码 2.3 运行程序,查看结果 3. 实战小结 1. 实战概述 在本次实战中&#…

参数校验新视角:结合编程方式,超越注解限制

在软件开发中,参数校验是确保数据完整性和系统健壮性的关键环节。传统的做法往往依赖于注解(Annotations)来实现这一功能,它们为代码提供了一种简洁而直观的方式来声明验证规则。然而,随着软件复杂性的增加&#xff0c…

vite功能之---npm 依赖解析和预构建

npm 依赖解析和预构建都做了什么 预构建 它们可以提高页面加载速度,并将 CommonJS / UMD 转换为 ESM 格式。预构建这一步由 esbuild 执行,这使得 Vite 的冷启动时间比任何基于 JavaScript 的打包器都要快得多。 重写导入为合法的 URL,例如 /…

【Apache Doris】周FAQ集锦:第 29 期

引言 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和开发者分享有关 Apache Doris 的常见问题。 通过这个每周 FAQ 栏目,希望帮助社…