TCP 的文化内涵
从历史和文化内涵的视角看 TCP 协议的优势和局限,这些都刻在基因里。节约和经济获得向下兼容,但这也意味着它没有浪费带宽的本意,任何相左的优化策略终将遇到无法解决的困难,大致就这样,这为设计新协议提了意见,别抄 TCP,否则就容忍继承它的一切。
最近看了一份考古文献,来自范雅各布森(VJ):The original Van Jacobson memo,它讲的是一个正常流优化的故事,即坊间著名的 “30 instruction TCP receive”。
结合相关 RFC 和实现,讨论一下 TCP 的文化内涵。
如果过度关注 TCP 性能,会发现这实际上是与 TCP 的核心思想相违背的,而 TCP 核心思想能用两个字总结:“节约” 或 “经济”。
RTO 被认为是个兜底策略,总是被各种优化试图绕开,这是从快速重传(rfc1072,VJ88)开始的,这些优化逐渐模糊并偏离了 TCP 的内涵,给人 “优化可以一直持续下去” 的错觉,现在我们很清楚,很多困难根本无法解决。
VJ 开启了 TCP 优化,但这种优化风格却最终终止了优化,从 RTO 开始,结束于无解的 rate-based cc,大致我们可以看清这个过程。
TCP 作为一个端到端协议,经过多跳收到确认所需时间的概率密度函数图像随着距离的增加越发矮胖,这意味着 RTT 预测非常困难,这是固有的。举例说明,去阳台拿个东西,超过 10 秒就会被催,去 500 米外买东西,20 分钟到 30 分钟都是允许的,因为过路口,排队结账都不可预期,去 30 公里以外上班,1 小时到 2 小时之间都合理。
RTO 最终被确定为:
R T O = S R T T + γ ⋅ R T T V A R RTO=SRTT+\gamma\cdot RTTVAR RTO=SRTT+γ⋅RTTVAR
其中:
R T T V A R = β ⋅ R T T V A R + ( 1 − β ) ⋅ ∣ S R T T − R ∣ RTTVAR=\beta\cdot RTTVAR+(1-\beta)\cdot|SRTT-R| RTTVAR=β⋅RTTVAR+(1−β)⋅∣SRTT−R∣
S R T T = α ⋅ S R T T + ( 1 − α ) ⋅ R SRTT=\alpha\cdot SRTT+(1-\alpha)\cdot R SRTT=α⋅SRTT+(1−α)⋅R
VJ 的著名参数 α = 7 8 , β = 3 4 , γ = 4 \alpha=\dfrac{7}{8},\beta=\dfrac{3}{4},\gamma=4 α=87,β=43,γ=4 多少有些随意,“调得一手好参数” 并不能被人信服,但 “容易计算” 似乎是一个更好的理由,仅用简单的移位,加减就能快速计算正体现了节约和经济,这与文初的引用连接的思想完全一致,这就是 VJ-Style。
粗看起来,节约似乎和优化在结果看来都是 “速度更快”,但也仅仅是结果一致。“更快” 只是节约的顺便,而不是它的目标。这个文化内涵让 TCP 可运行在所有设备上,就像 Linux 和猫科动物,适应所有环境,向下兼容的高尚正由此文化内涵体现,向下兼容确实好。
节约和经济决定了 TCP 的保守。
TCP 尽量少处理异常,因为异常处理需要比正常流执行更多的指令,这意味着节约和经济的反面。如文初链接所体现,要让正常流变得普遍,就要让异常不发生,这决定了传输策略的保守,够用但不逞强。一个具体的例子就是 “重传期间不更新 SRTT”,我前面专门说过这个遗憾源自 TCP 最初的内核,就是上面这段话的意思。同时这也决定了测量 TCP 的 RTT 真的很难,即便如今已经为其添加了那么多 feature,依然摆脱不了这个难题。
另一方面,对指令的节约为我们设计新传输协议也指明了方向,空间换时间,设计更大的序列号空间,避免回绕问题,剪除 PAWS,设计更大滑动窗口空间,剪除 WSCALE,设计更大的端口号空间,剪除端口分配的把戏。
再看看这种文化内涵的背景,摩尔定律,吉尔德定律的曲线即便已经弯折,通信速度的提升仍然快于计算速度的提升,为计算速度而不是带宽来做优化是划算的。软件开发中有一个类似的例子,不要优化代码,而要等待更新的硬件。
在这种背景中孕育的文化的影响下,TCP 不会故意注入更多数据到网络以获得更大的吞吐,因为这种为吞吐而进行的赌博需要更多的异常处理来兜底赌输的情景,这与节约和经济的文化内涵不符。这也是近些年各种为带宽而做优化的算法效果普遍不好的原因,因为这与 TCP 的内核相左,于是人们开始纷纷研发新协议。
让我们再看看现实,马上就会明白为什么 TCP 不再合时宜,也就知道新协议应该怎么做。
网络带宽越来越大,虽然从计算的视角看依然要节约,但带宽却是可是浪费的,于是 TCP 在 2010 年代遭遇带宽利用率不足的问题也就是不足为奇了。我们看一下 VJ-Style 的 loss-based 拥塞控制模型,设 B 为吞吐带宽,p 为容忍丢包率, B = α ⋅ p β B=\alpha\cdot p^{\beta} B=α⋅pβ,这个公式对 p 要求过高了,要想获得更大吞吐,p 必须足够低,低到超过介质的传输误码率极限。
这意味着若要适配高速网络,这个模型必须被废弃,BBR 只解决了理论问题,因为互联网规模已经足够庞大,全网如何平滑切换到一个仅仅吞吐较高但尚未论证稳定性和公平性的算法,风险何其大。
在尚未有能力切换到一个 “完备的下一代协议” 之前,来看 TCP 的解法会存在哪些问题,并给出新协议的建议。
随着网络越加长肥,TCP 反馈慢的代价越大,如果网络过长,拥塞信号至少 1 个 RTT 的反馈时间就显得很慢,而如果网络同时又过肥,这 1 个 RTT 的时间段中 sender 会注入非常大量的数据到网络,从而加重拥塞。CDN 的部署缓解了这个问题,但远未解决。
虽 CDN 已大量部署,但静态资源的需求逐渐减少,随着直播流量占比增加,传统远距离高吞吐认知中的长肥管道拥塞问题会越来越严重。
在本质上,避免反馈的协议才是正确解法,receiver 主导的拥塞控制或许要胜过 sender 依赖的确认反馈,但如何让 sender 对拥塞快速反应,就依赖层间协作了。
总之,不光 TCP,连同整个 TCP/IP 协议族都不太适应越来越高速的网络,和本文前面说的节约的文化内涵一致,这也是整个 TCP/IP-based 互联网的文化内涵,而它源自旨在抵抗核打击的 DARPA。
分组交换带来的收益一定需要付出成本来交换,成本之一就是性能。
so?是层间解耦与高速网络不适应,那耦合它们呢?很难。
幸运的是,这条路在数据中心完全可以走通(infiniband? roce?),总之,网络越往高速发展,就越不可抗拒地将设计推回到面向连接的电路交换。
范雅各布森的 style 就是 TCP 的文化精髓,谨慎,保守,精细。如果你问 srtt 的 α 为什么是 1/8,rto 的 β 为啥是 4,真是调得一手好参数吗,非也!因为 2 的次幂容易算啊,这不但迎合了低端机器,也迎合了 Linux 内核不支持浮点数,顺便和统计概率吻合而已,只有 1% 的概率超过 4 确定的平均方差边界,道出了统计复用动力学的本质。在遥远的 1980 年代,为计算速度而不是带宽优化,已经开始成了信条,最终成了文化。
浙江温州皮鞋湿,下雨进水不会胖。
相关文章:
TCP 的文化内涵
从历史和文化内涵的视角看 TCP 协议的优势和局限,这些都刻在基因里。节约和经济获得向下兼容,但这也意味着它没有浪费带宽的本意,任何相左的优化策略终将遇到无法解决的困难,大致就这样,这为设计新协议提了意见&#x…...

ASP.NET |日常开发中读写XML详解
ASP.NET |日常开发中读写XML详解 前言一、XML 概述1.1 定义和结构1.2 应用场景 二、读取 XML 文件2.1 使用XmlDocument类(DOM 方式)2.2 使用XmlReader类(流方式) 三、写入 XML 文件3.1 使用XmlDocument类3.2 使用XmlWr…...
Less和SCSS,哪个更好用?
前言 Less 和 SCSS 都是流行的 CSS 预处理器,它们的目的都是扩展 CSS 的功能,使样式表更具组织性、可维护性和可重用性。虽然它们有许多相似之处,但在语法、特性和工作方式上也存在一些差异。 Less Less 是一种动态样式表语言,…...

第一个C++程序--(蓝桥杯备考版)
第一个C程序 基础程序 #include <iostream>//头⽂件 using namespace std;//使⽤std的名字空间 int main()//main函数 {cout << "hello world!" << endl; //输出:在屏幕打印"hello world!" return 0;}main函数 main 函数是…...

NanoLog起步笔记-7-log解压过程初探
nonolog起步笔记-6-log解压过程初探 再看解压过程建立调试工程修改makefile添加新的launch项 注:重新学习nanolog的README.mdPost-Execution Log Decompressor 下面我们尝试了解,解压的过程,是如何得到文件头部的meta信息的。 再看解压过程 …...
【MySQL 进阶之路】基础语法及优化技巧
MySQL DML 基础语法及优化技巧 一、DML(数据操作语言)概述 DML 是数据库操作语言的子集,用于数据的增、删、改、查四个基本操作。MySQL 中的 DML 操作通常是指以下四种基本操作: INSERT:插入数据SELECT:…...

微信小程序做电子签名功能
文章目录 最近需求要做就记录一下。 人狠话不多,直接上功能: 直接搂代码吧,复制过去就可以用,有其他需求自己改吧改吧。 signature.wxml <!-- 电子签名页面 --> <custom-navbar title"电子签名"show-home"{{fals…...

PR的选择与移动
选择工具 可以选择序列上的剪辑,如果需要多选可以按住shift键选中多个剪辑 CtrlA:可以进行全选 编组 选中多个剪辑后“右键-编组“可以将所选的剪辑连接在一起。这时单击任意剪辑都可以选中全部 向前选择轨道工具与向后选择轨道工具 向前选择轨道工具…...

Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿
目录 1. 进程状态的概念 1.1 课本上的说法:名词提炼 1.2 运行,阻塞和挂起 1.2.1 什么叫做运行状态(running)? 1.2.2 什么叫做阻塞状态(sleeping)? 1.2.3 什么叫做挂起状态&…...

linux/centOS7用户和权限管理笔记
linux系列中可以: 配置多个用户配置多个用户组用户可以加入多个用户中 linux中关于权限的管理级别有2个级别,分别是: 针对用户的权限控制针对用户组的权限控制 一,root用户 root用户拥有最大的系统操作权限,而普通…...

使用C#基于ADO.NET编写MySQL的程序
MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本:MySQL 服务器系统和 MySQL 嵌入…...
Scala函数的泛型
package hfd //泛型 //需求:你是一个程序员,老板让你写一个函数,用来获取列表中的中间元素 //List(1,2,3,4,5)>中间元素的下标长度/2 >3 //getMiddleEle object Test38_5 {def print1():Unit{println(1)}def print2(): Unit {println(…...

云轴科技ZStack亮相中国生成式AI大会上海站 展现AI Infra新势力
近日,以“智能跃进,创造无限”为主题的2024中国生成式AI大会在上海举办。本次大会由上海市人工智能行业协会指导,智东西、智猩猩共同发起,邀请了人工智能行业的顶尖嘉宾汇聚一堂,以前瞻性视角解构和把脉生成式AI的技术…...
态感知与势感知
“态感知”和“势感知”是两个人机交互中较为深奥的概念,它们虽然都与感知、认知相关,但侧重点不同。下面将从这两个概念的定义、区分以及应用领域进行解释: 1. 态感知 态感知通常指的是对事物当前状态、属性或者内在特征的感知。它强调的是在…...

汽车零部件设计之——发动机曲轴预应力模态分析仿真APP
汽车零部件是汽车工业的基石,是构成车辆的基础元素。一辆汽车通常由上万件零部件组成,包括发动机系统、传动系统、制动系统、电子控制系统等,它们共同确保了汽车的安全、可靠性及高效运行。在汽车产业快速发展的今天,汽车零部件需…...

谷歌浏览器的网页数据导出与导入方法
谷歌浏览器是全球最受欢迎的网络浏览器之一,它不仅提供了快速、安全的浏览体验,还拥有丰富的功能和扩展程序。本文将详细介绍如何在Chrome浏览器中导出和导入网页数据,同时涵盖一些相关的实用技巧,如调试JavaScript、自动填充表单…...

pytroch环境安装-pycharm
环境介绍 安装pycharm 官网下载即可,我这里已经安装,就不演示了 安装anaconda 【官网链接】点击下载 注意这一步选择just me 这一步全部勾上 打开 anaconda Prompt 输入conda create -n pytorch python3.8 命令解释:创建一个叫pytorch&…...
【大模型】PostgreSQL是向量数据库吗
PostgreSQL(通常简称为 Postgre)本身并不是一个专门的向量数据库,但它可以通过扩展或插件支持向量数据的存储、检索和处理,因此可以在某些场景下作为向量数据库使用。以下是关于 PostgreSQL 是否可以作为向量数据库的详细说明&…...

【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码
目录 一、PyQt5介绍: (1)PyQt简介: (2)PyQt API: (3)支持的环境: (4)安装: (5)配置环境变量…...

Qt 联合Halcon配置
文章目录 配置代码窗口绑定 配置 选择添加库 选择外部库 LIBS -LC:/Program Files/MVTec/HALCON-17.12-Progress/lib/x64-win64/ LIBS -lhalconcpp\-lhdevenginecpp\-lhalconINCLUDEPATH C:/Program Files/MVTec/HALCON-17.12-Progress/include DEPENDPATH C:/Program Fil…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...