TCP 的自然律

news/2024/4/29 15:23:53/文章来源:https://blog.csdn.net/dog250/article/details/126755393

周一傍晚发了一则朋友圈:
在这里插入图片描述
放大配图,来自:How to transfer, share and send big files fast:
在这里插入图片描述
我对此事的看法:“想高效利用庞大的资源需要的代价和资源规模的增加并不是线性的,而且指数的,下凸曲线”。这个看法来自于一本书,《规模:复杂世界的简单法则》。

看来,背后还是自然律。OK,看下这个配图是如何得到的。

基于 TCP 标准 AIMD 行为,简单推导下宏观吞吐公式。以下图,设 AI 参数为 a,MD 参数为 b,丢包率为 P:
在这里插入图片描述
可得,一个 AIMD 周期发送总量 N:

N=(bWa+1)(1−b)W+12(bWa+1)(1−b)WN=(\dfrac{bW}{a}+1)(1−b)W+\dfrac{1}{2}(\dfrac{bW}{a}+1)(1−b)WN=(abW+1)(1b)W+21(abW+1)(1b)W

一个 AIMD 周期丢 1 个包:

P=1NP=\dfrac{1}{N}P=N1

代入 N,则:

P=2ab(2−b)W2+a(2−b)WP=\dfrac{2a}{b(2-b)W^2+a(2-b)W}P=b(2b)W2+a(2b)W2a

反解 W。一个忽略 W 一次项的近似解为:

W=2ab(2−b)PW=\sqrt{\dfrac{2a}{b(2-b)P}}W=b(2b)P2a

求一个 AIMD 周期平均吞吐率。以 1 个 RTT 为测速区间,最小发送量为 (1-b)W,最大发送量为 W,则吞吐率 T:

T=(1−b)W+W2RTT=2−b2×RTTWT=\dfrac{\dfrac{(1-b)W+W}{2}}{RTT}=\dfrac{2-b}{2\times RTT}WT=RTT2(1b)W+W=2×RTT2bW

代入 W:

T=1RTTa(2−b)2b1PT=\dfrac{1}{RTT}\sqrt{\dfrac{a(2-b)}{2b}}\dfrac{1}{\sqrt{P}}T=RTT12ba(2b)P1

设 T,RTT, P,分别为 z,x,y,由于 a, b 均为常数,不影响形状,Geogebra 3D 画图:
在这里插入图片描述
这就是朋友圈配图(离散版本)的连续版本,平滑包络线连接配图各点,与此形状一致。

以上就是 TCP 鸟样子背后自然规律的数学推导。如何理解这个规律呢?

能举起自身重量 300 倍的蚂蚁变成经理这么大也和经理一个鸟样,这个例子说过很多次。换个别的,同样来自《规模》。

增加暖气片数量带来的制暖效率的增速远慢于需要加热的空间体积,因为暖气片是二维的,空间是三维的。

换算到 AIMD TCP,吞吐增加所带来带宽利用率的增速远慢于 BDP 的增加。因为无论 RTT 增加还是丢包率增加,其作用都在 BDP 二维管道内延伸,而 AIMD TCP 吞吐的依据则仅来自于 ACK 信号,换句话说,AIMD 只需要 ACK,不需要时间。

一维量的增速远慢于二维量的增速。这是核心。

把时间和丢包维度考虑进来,就是 BBR 带宽利用率高的原因:

  • BBR 不在对 ACK 到达进行反应,二是对 packet round 内的速率进行反应。
  • 为对抗丢包,BBR 同样引入时间鲁棒性,坚持丢包前速率,取代立即反应。
  • 为弥补丢包损失,BBR 以 25% 增益补损,BBR 竟能忍受高达 20% 丢包率。

理想中的 BBR Throughput/Rrr/Loss 是(来自:https://www.ibm.com/cloud/smartpapers/aspera/transfer-large-files/):
在这里插入图片描述
现实中 BBR 据此非常遥远。也许是 TCP 固有缺陷导致,也许是别的。

经常有人问,40% 的增益是否能容忍 40% Loss,非常不对。TCP 端到端的本质使它无法识别 Loss 过程,40% 增益意味着 BBR 以 140% 的速率发送,这个增益将放大 MIMD。

无论怎样,BBR 仍保留了无视现实的假设。如多流场景下,当 buffer 开始 bloat,只要 probe 都会带来 delivery rate 增益,并不存在 BBR 假设的 btlBW*RTprop 上界的约束。

准备写个朴素的 tcp_caohejing 算法,实现一个新思路。但下回分解。

居家办公,省掉了通勤时间,吃完晚饭出去探视了家附近的烂尾楼,唏嘘。归家继续思考漕河泾算法,作为前奏把周一傍晚朋友圈里的配图解释一下。本文除了漕河泾算法的引,也算一本极佳的书《规模》的读后感。

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

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

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

相关文章

新一代网络请求库:python-httpx库

文章目录httpx库一、 概述1、 简介2、 命令行模式3、 快速开始3.1 get请求3.2 post请求3.2.1 表单3.2.2 文件3.2.3 JSON3.2.4 二进制3.3 响应处理3.4 流式响应3.5 cookie3.6 重定向3.7 超时和验证二、 客户端1、 特性2、 发出请求3、 其他配置4、 python_web5、 Request对象6、…

Python基础学习

文章目录1.1变量与运算符案例一:变量与运算符1.2选择结构与循环结构实训案例一:使用for循环输出满足条件的内容案例二:使用while循环1.3数据结构实战案例一:列表案例二:元组案例三:字典案例四:集…

《高级C/C++编译技术》01

Linux程序内存布局:启动程序的默认加载点是在链接阶段才添加的,通常放在程序内存映射的起始处(这是可执行文件和动态库之间的唯一区别)。启动代码有两种不同方式:crt0:“纯粹”的入口点,这是程序代码的第一部分,在内核控制下执行 crt1:更现代化的启动例程,可以在main…

某银行开发一个信用卡管理系统CCMS

38.现准备为某银行开发一个信用卡管理系统CCMS,该系统的基本功能为: (1)信用卡申请:非信用卡客户填写信用卡审请表,说明所要申请的信用卡类型及申 请者的蒸本信息,并提交给CCMS。如果信用卡申请者被…

Day08__异常

异常 Error和Exception捕获和抛出异常package exception;public class Demo01 {public static void main(String[] args) {int a=1;int b=0;//Ctrl+Alt+ttry {//try监控区域System.out.println(a/b);}catch (ArithmeticException e){//捕获异常System.out.println("除数不…

JAVA基础知识

JAVA基础知识目录IDEA快捷键简洁语法CtrlAltShift操作其他常用操作JAVA基础知识注释字面量变量数据类型关键字标识符类型转换自动类型转换表达式的自动类型转换强制类型转换运算符算数运算符符号做连接符自增自减运算符关系运算符和逻辑运算符三元运算符运算符优先级数组数组的…

Code For Better 谷歌开发者之声——Flutter - Google 开源的移动 UI 框架

写在前面 如今,人们都希望自己手机里的应用又漂亮的设计,顺滑的动画以及优异的功能,为了做到这些,开发者们需要在不妥协质量和性能的前提下,更快速地推进新功能的研发,这就是Flutter的核心。 文章目录写在前…

【转】VS2019 安装完成之后再安装其它功能模块组件安装

VisualStudio2019安装完成之后,由于开发需求需要安装其它模块或组件,点击工具,选择获取工具和功能,进行选择安装。 做个笔记随笔记录一下。选择需要的模块进行即可。【转自】https://www.cnblogs.com/jiayan1578/p/13665423.html

网络抖动了解

转自:https://blog.csdn.net/W_317/article/details/112801222, https://zhuanlan.zhihu.com/p/403614008 1.网络抖动 指网络中的延迟是指信息从发送到接收经过的延迟时间,一般由传输延迟及处理延迟组成; 抖动=最大延迟-最小延迟 如访问一个网站的最大延迟是20毫秒,最小延迟…

【转载】预测算法--时间序列(ARIMA)模型

ARIMA:AutoregressiveIntegratedMovingAverage model。自回归差分移动平均模型(p,d,q),可以说AR自回归模型,MA移动平均模型,ARMA自回归移动平均模型都是ARIMA的特殊形式. 时间序列模型一般性步骤包括:1. 数据平稳性检验;2. 确定模型参数;3. 构建时间序列模型;4.模型预测…

STM32二十:OLED和LCD

一.概述 1.OLED介绍 1 //OLED的显存2 //存放格式如下.3 //[0]0 1 2 3 ... 127 4 //[1]0 1 2 3 ... 127 5 //[2]0 1 2 3 ... 127 6 //[3]0 1 2 3 ... 127 7 //[4]0 1 2 3 ... 127 8 //[5]0 1 2 3 ... 127 9 //[6]0 1 2 3 ... 127 10 //[7]0 1 2 3 ... 127 …

一.xv6环境搭建

内容大致来源:1.视频教程:https://space.bilibili.com/16765968/channel/collectiondetail?sid=86878 2.文档:https://tarplkpqsm.feishu.cn/docs/doccnoBgv1TQlj4ZtVnP0hNRETd#W8iZmH一.windows升级为专业版注意:docker支持Windows 10 操作系统专业版,所以要升级windows…

【ASP.NET Core】自定义Session的存储方式

在开始今天的表演之前,老周先跟大伙伴们说一句:“中秋节快乐”。 今天咱们来聊一下如何自己动手,实现会话(Session)的存储方式。默认是存放在分布式内存中。由于HTTP消息是无状态的,所以,为了让服务器能记住用户的一些信息,就用到了会话。但会话数据毕竟是临时性的,不…

MySQL-3-多表查询和事务(结合案例学习)

我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作,主要从以下几个方面进行讲解。 多表查询多表查询多表关系分类连接查询内连接隐…

【数据结构】绪论

文章目录 1. 绪论 1.1 概述 1.2 数据与数据结构 1.2.1 术语 1.2.2 逻辑结构 1.2.3 存储结构: 1.2.4 数据操作: 1.3 算法 1.3.1 算法特性 1.3.2 算法目标 1.3.3 算法分析:概述 1.3.4 算法分析:时间复杂度(大…

Markdown笔记软件之 Obsidian

我使用过什么markdown笔记软件了解自己的需求 Markdown 语法简洁vscode内置 markdown 插件,预览等 snippet(摘要功能)自定义代码片段typero实时渲染,所见即所得 美观缺点不适合我个人 收费 不支持打标签 tag 放弃:解决不了我的痛点(全键盘),收费 不支持移动端joplin支持 v…

模拟用户登录功能的实现以及演示SQL注入现象

模拟用户登录功能的实现以及演示SQL注入现象 /* 实现功能:1、需求:模拟用户登录功能的实现。2、业务描述:程序运行的时候,提供一个输入的入口,可以让用户输入用户名和密码用户输入用户名和密码之后,提交信息…

Day07__面向对象

面向对象 什么是面向对象回顾方法的定义 package objectOriented;import java.io.IOException;//回顾方法的定义 public class Demo01 {public static void main(String[] args) {}public static String sayHello(){return "Hello,World!";}public int max(int a,int…

Deno 会取代NodeJS吗?

目标:了解Deno的学习价值和前景。 从下面几个维度进行分析 成熟度 Node已经在大量商业应用中,Deno只是还在商业试验阶段 生态 Node已经有丰富的生态,包含各种框架和库,并且都已经广泛应用Deno的框架和库基本上都是刚刚起步 学习成本 如果你已经了解Node,Deno也还是需要不…

基于蜜蜂算法求解电力系统经济调度(Matlab代码实现)

目录 1 蜜蜂优化算法 1.1 蜂群觅食机制 1.2 蜜蜂算法 1.3 流程 2 经济调度 3 运行结果 4 Matlab代码及文章 5 参考文献 6 写在最后 1 蜜蜂优化算法 蜜蜂算法( Bees Algorithm,BA) 由英国学者 AfshinGhanbarzadeh 和他的研究小组于 2005 年提出。该算法是一…