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…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
