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…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...

【Axure高保真原型】图片列表添加和删除图片
今天和大家分享图片列表添加和删除图片的原型模板,效果包括: 点击图片列表的加号可以显示图片选择器,选择里面的图片; 选择图片后点击添加按钮,可以将该图片添加到图片列表; 鼠标移入图片列表的图片&…...