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

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

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

  • 早期 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 节点当作内容 “路由器”,虽然俺这种理解,仍然无助于解决最后一公里拥塞问题。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955223.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学

智能家居篇 一、Win10 VM虚拟机安装 Home Assistant 手把手教学 文章目录 [智能家居篇]( )一、Win10 VM虚拟机安装 Home Assistant 手把手教学 前言一.下载Vm版本的HomeAsistant安装包 二.打开Vmware选择新建虚拟机1.选择自定义高级2.选择16.x及以上3.选择稍后安装4.根据官网的…

神经网络基础-正则化方法

文章目录 1. 什么是正则化2. 正则化方法2.1 Dropout正则化2.2 批量归一化(BN层) 学习目标: 知道正则化的作用掌握随机失活 DropOut 策略知道 BN 层的作用 1. 什么是正则化 在设计机器学习算法时希望在新样本上的泛化能力强。许多机器学习算法都采用相关的策略来减小…

vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址

VMware版本 :VMware Workstation 17 Pro ubuntu版本:ubuntu-18.04.4-desktop-amd64 主机环境 win11 1. 修改 VMware虚拟网络编辑器 打开vmware,点击顶部的“编辑"菜单,打开 ”虚拟化网络编辑器“ 。 选择更改设置&#…

前端【2】html添加样式、CSS选择器

一、为html添加样式的三种方法 1、内部样式 2、外部样式 3、行内样式 二、css的使用--css选择器 1、css基本选择器 元素选择器 属性选择器 id选择器 class/类选择器 通配符选择器 2、群组选择器-多方面筛选 3、关系选择器 后代选择器【包含选择器】 子元素选择器…

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <3>5分钟集成好druid并使用druid自带监控工具监控sql请求

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…

仿射密码实验——Python实现(完整解析版)

文章目录 前言实验内容实验操作步骤1.编写主程序2.编写加密模块3.编写解密模块4.编写文件加解密模块 实验结果实验心得实验源码scirpt.pyusefile.py 前言 实验目的 1&#xff09;初步了解古典密码 2&#xff09;掌握仿射密码的实现 实验方法 根据下图仿射密码&#xff08;变换…

在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南

QNAP 为用户提供了一个名为 Container Station 的应用&#xff0c;它在 QNAP NAS 上将 Docker 和 LXC 结合在一起&#xff0c;通过图形化界面&#xff0c;让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station&#xff0c;以…

基于vite+vue3+mapbox-gl从零搭建一个项目

下面是基于 Vite、Vue 3 和 Mapbox GL 从零搭建一个项目的完整步骤&#xff0c;包括环境搭建、依赖安装、配置和代码示例。 文章目录 1. 初始化项目2. 安装 mapbox-gl 依赖3. 配置 Mapbox Access Token4. 实现地图组件5. 在 App.vue 中使用地图组件6. 启动开发服务器7. 添加自定…

运维作业一

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 首先&#xff0c;获得随机字符&#xff0c;需下载pwgen&am…

【拒绝算法PUA】3065. 超过阈值的最少操作数 I

系列文章目录 【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中 C刷题技巧总结&#xff1a; [温习C/C]0x04 刷…

SSE部署后无法连接问题解决

1. 问题现象 通过域名访问 https://api-uat.sfxs.com/sse/subscribe?tokenBearer%20eyJUxMiJ9.eyJhY2NvdW50IjoiYWRtaWZ0NvZGUiOiIwMDEiLCJyb2xidXNlcm5hbWUiOiLotoXnuqfnrqHnkIblkZgifQ.tlz9N61Y4 一直无法正常连接 2. 问题解决 nginx.conf进行配置 server {location /ss…

JS宏进阶: 工厂函数与构造函数

一、构造函数 在JavaScript中&#xff0c;构造函数是一种用于创建和初始化对象的特殊函数。构造函数的名字通常以大写字母开头&#xff0c;以区分于普通函数。通过new关键字调用构造函数&#xff0c;可以创建一个新的实例对象&#xff0c;并自动执行构造函数内部的代码来初始化…

编译pytorch——cuda-toolkit-nvcc

链接 https://blog.csdn.net/wjinjie/article/details/108997692https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#switching-between-driver-module-flavorshttps://forums.developer.nvidia.com/t/can-not-load-nvidia-drivers-on-ubuntu-22-10/239750https://…

光谱相机的光谱分辨率可以达到多少?

多光谱相机 多光谱相机的光谱分辨率相对较低&#xff0c;波段数一般在 10 到 20 个左右&#xff0c;光谱分辨率通常在几十纳米到几百纳米之间&#xff0c;如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…

案例 —— 怪物出水

目录 一&#xff0c;Ocean Setup 二&#xff0c;Water Setup 解算前设置 解算设置 解算后设置 三&#xff0c;Meshing Setup Meshing 剔除外围边界mesh 应用低频频谱变形并添加变形速度 为whitewater创建自定义的surface、vel 清理属性和组并缓存 四&#xff0c;Wh…

怎么在iPhone手机上使用便签进行记录?

宝子们&#xff0c;在这个快节奏的时代&#xff0c;灵感的火花总是一闪而过&#xff0c;待办事项也常常让人应接不暇。好在咱们的 iPhone手机便签超给力&#xff0c;能满足各种记录需求&#xff01;今天就来给大家分享一下&#xff0c;如何在 iPhone 手机上巧用便签&#xff0c…

2025宝塔API一键建站系统PHP源码

源码介绍 2025宝塔API一键建站系统PHP源码&#xff0c;对接自己的支付&#xff0c;虚拟主机也能搭建&#xff0c;小白式建站系统&#xff0c;基于宝塔面板搭建的建站系统&#xff0c;功能丰富&#xff0c;多款模板&#xff0c;每日更新 上传源码到服务器&#xff0c;浏览器访问…

【C++】拷贝构造函数与运算符重载

写在前面 拷贝构造函数、赋值运算符重载、取地址运算符都是属于类的默认成员函数&#xff01; 默认成员函数是程序猿不显示声明定义&#xff0c;编译器会中生成。 在程序编写中&#xff0c;我们也经常使用拷贝的方式来获取到对应的值&#xff0c;例如整形变量拷贝int a 0; i…

Linux:SystemV通信

目录 一、System V通信 二、共享内存 代码板块 总结 三、信号量 信号量理论 信号量接口 一、System V通信 System V IPC&#xff08;inter-process communication&#xff09;&#xff0c;是一种进程间通信方式。其实现的方法有共享内存、消息队列、信号量这三种机制。 …

2025.1.15——七、cookie注入

题目来源&#xff1a;ctfhub技能树 目录 一、打开靶机&#xff0c;整理已知信息 二、解题步骤 step 1&#xff1a;按F12查看cookie信息&#xff0c;见上 step 2&#xff1a;bp抓包修改cookie信息&#xff0c;确认注入类型 step 3&#xff1a;查看字段数 step 4&#xff…