TCP吞吐量的理论计算公式

2023-11-07

  本篇文章本来是收录AIMD拥塞控制吞吐量的计算公式。Valve游戏公司开源GameNetworkingSockets[1],既支持可靠的数据传输,也支持不可靠的数据传输。数据的传输速率,是直接计算出来的。

const int64 k_nMillion = 1000000;
int TFRCCalcX( int s, int64 rtt, float p )
{
	// TFRC throughput equation
	// 
	//                                s
	//   X_Bps = ----------------------------------------------------------
	//           R*sqrt(2*b*p/3) + (t_RTO * (3*sqrt(3*b*p/8)*p*(1+32*p^2)))
	//
	// b is TCP acknowlege packet rate, assumed to be 1 for this implementation

	float R = (double)rtt / k_nMillion;
	float t_RTO = MAX( 4 * R, 1.0f );

	return static_cast< int >( static_cast<float>( s ) /
		( R * sqrt( 2 * p / 3 ) + ( t_RTO * ( 3 * sqrt( 3 * p / 8 ) * p * ( 1 + 32 * ( p * p ) ) ) ) ) );
}

 这个公式速率控制公式就是基于一篇大名鼎鼎的论文[2]。[3]的论文论文早一年, 对Jocobson提出拥塞控制算法进行数学建模,称之为TCP的宏观模型。但是直接基于一个公式计算出数据的发送速率,是不靠谱的。一条数据流不向网络中注入多余的数据,是不可能探测更多的可用带宽的。而要探测带宽,必然导致网络拥塞。另外一个不靠谱的领域就是带宽测量。通过一次测量的带宽值,就能当做一个会话持续过程的传输速率吗?还好,这个领域过气很多年了。
 互联网的互联靠的数据传输,数据传输依赖TCP,TCP需要拥塞控制。因为1986的网络拥塞崩溃,Jocobson提议基于AIMD机制TCP作为拥塞控制算法[4]。 TCP的拥塞控制将互联网从拥塞奔溃中拯救了出来。这里用了提议,没有用提出。Jain [5] 在1988年就讨论了几种可能的拥塞控制算法: AIAD,AIMD, MIMD, MIAD。最终的建议是AIMD,因为这个算法能够保证带宽资源的公平性。但是,在拥塞控制领域,好像大家更认可Jocobson的工作。Jain只能在自己的维基百科上写道:He is also the co-inventor of the Additive Increase Multiplicative Decrease (AIMD) principle used for traffic management in computer networks。
 学术其实是一件功利的事情。谁不想做出一件事情,能够让后世铭记呢。棺材一抬,人生白来。死亡的恐惧太过强大。普通人只能靠宗教,上天堂。牛逼的人,靠贡献,进入各种历史记录中。牛逼的人知道,天堂太虚幻。Benjamin Franklin: “If you would not be forgotten, as soon as you are dead and rotten, either write things worth reading, or do things worth writing.” 中文版:太上有立德,其次有立功,其次有立言,虽久不废,此之谓不朽。AIMD的算法机制很简单,但是总结计算机网络的发展历史,Jocobson这个名字是绕不开的。He is one of the primary contributors to the TCP/IP protocol stack—the technological foundation of today’s Internet.
 TCP的宏观模型其实就是总结Reno算法吞吐量的理论公式: T = M S S ∗ C r t t ∗ p T=\frac{MSS*C}{rtt*\sqrt{p}} T=rttp MSSC. The TCP Macroscopic Model estimates that Reno TCP performance is proportional to one over the square root of the loss probability.
 在2020的sigcomm会议,Mathis要宣布TCP Macroscopic Model过时了。

The TCP Macroscopic Model will be completely obsolete soon. It was a closed form performance model for Van Jacobson’s landmark congestion control algorithms presented at Sigcomm’88. Jacobson88 requires relatively large buffers to function as intended, while Moore’s law is making them uneconomical.

 它的过时,是因为BBR的出现。BBR算法开启拥塞控制的新时代。

Reference:
[1]GameNetworkingSockets
[2]Padhye J, Firoiu V, Towsley D, et al. Modeling TCP throughput: A simple model and its empirical validation[J]. ACM SIGCOMM Computer Communication Review, 1998, 28(4): 303-314
[3] Mathis M, Semke J, Mahdavi J, et al. The macroscopic behavior of the TCP congestion avoidance algorithm[J]. ACM SIGCOMM Computer Communication Review, 1997, 27(3): 67-82.
[4] Jacobson V. Congestion avoidance and control[J]. ACM SIGCOMM computer communication review, 1988, 18(4): 314-329.
[5] Congestion avoidance in computer networks with a connectionless network layer: concepts, goals and methodology
[6] Mathis M, Mahdavi J. Deprecating the TCP macroscopic model[J]. ACM SIGCOMM Computer Communication Review, 2019, 49(5): 63-68.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP吞吐量的理论计算公式 的相关文章

  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • 构建多线程 TCP/IP 服务器

    我想构建一个可供最多 100 个并发客户端使用的 TCP IP 服务器 但仍不确定如何开始 至少我需要服务器 监听客户端 并将它们全部存储在数组或列表中 对于每个客户端 它需要根据其客户端状态接收和发送数据 当有人连接或断开连接时 服务器应
  • ZeroMQ可以用来接受传统的套接字请求吗?

    我正在尝试使用 ZeroMQ 重写我们的旧服务器之一 现在我有以下服务器设置 适用于 Zmq 请求 using var context ZmqContext Create using var server context CreateSoc
  • 视频流上的 TCP 与 UDP

    我刚从网络编程考试回来 他们问我们的问题之一是 如果您要传输视频 您会使用 TCP 还是 UDP 请解释一下存储视频和实时视频流 对于这个问题 他们只是希望得到一个简短的答案 TCP 用于存储视频 UDP 用于实时视频 但我在回家的路上想到
  • 为什么turn服务器不支持tcp连接?

    我是 WebRTC 新手 我需要为我的 webrtc 应用程序配置我自己的 Turn 服务器 我使用以下命令安装了我的转弯服务器 apt get install coturn 我只需要通过 tcp 运行转变服务器 它不必使用 UDP 进行任
  • 访问 AWS 上的 Tensorboard

    我正在尝试访问 AWS 上的 Tensorboard 这是我的设置 张量板 tensorboard host 0 0 0 0 logdir train 在端口 6006 上启动 TensorBoard b 39 您可以导航到http 172
  • 无法分配请求的地址 - 可能的原因?

    我有一个由主服务器和分布式从服务器组成的程序 从属服务器向服务器发送状态更新 如果服务器在固定时间内没有收到特定从属服务器的消息 则会将该从属服务器标记为关闭 这种情况一直在发生 通过检查日志 我发现从站只能向服务器发送一个状态更新 然后永
  • iOS 上的多个 HTTP 请求与单个 TCP 连接

    我正在开发一个 iPhone 应用程序 它使用我控制的基于 Web 的 API 连接到持续打开的 TCP 端口并通过 TCP API 发出请求 或者为我想要获取的所有数据发出新的 HTTP 请求 会更快或更高效吗 我认为差异可以忽略不计 但
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • ADO.NET SQLServer:如何防止关闭的连接持有S-DB锁?

    i Dispose http msdn microsoft com en us library system data sqlclient sqlconnection close aspx一个 SqlConnection 对象 但是当然它并
  • 如何抑制Windows防火墙的Windows安全警报?

    当我从这里找到的 ZeroMQ 指南中用 C 创建 Hello World 示例时 http zguide zeromq org page all Ask and Ye Shall Receive http zguide zeromq or
  • 如何使用 Nmap 检索 TCP 和 UDP 端口? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我需要在使用 Nmap 的同一扫描中以尽可能最快的方式检索 TCP 和 UDP 端口 我会尽力解释得更好 如果我使用最常用的命令 nmap 192 1
  • 计算 TCP 重传次数

    我想知道在LINUX中是否有一种方法可以计算一个流中发生的TCP重传的次数 无论是在客户端还是服务器端 好像netstat s解决了我的目的
  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • Java Servlet 中限制 HTTP 请求

    在 java servlet 中 如何根据客户端的 IP 地址限制来自用户的 http 请求 我不想每秒处理来自特定源 IP 地址的超过 X 个请求 其中 X 是可配置的并且具有 0 1 中的实际值 10 范围 从 10 秒内 1 个请求到
  • Java TCP Echo 服务器 - 广播

    我有一个简单的回显服务器 我希望当连接的用户向服务器键入任何内容时 所有其他客户端和该客户端都会收到消息 MOD 它现在不会发送给所有客户端 但它应该发送 而且我只是不知道我的代码出了什么问题 所以现在它只会将消息 MOD 发送给发送消息的
  • TCP 中推送标志和紧急标志之间的区别

    我试图理解带有标志的 TCP 段之间的区别PSH和旗帜URG 我阅读了 RFC 但仍然无法获取它 其中一个在将数据发送到进程之前是否缓冲数据 而另一个则没有 它们是两种截然不同的机制 PSH 和 PUSH 函数 当您发送数据时 您的TCP缓
  • PHP 通过 TCP/IP 发送消息

    我尝试通过 TCP IP 从 PHP 网站向 Arduino 发送消息 使用以下代码我可以从 php 网站发送消息 问题是 当第一次调用该网站时 消息不会立即发送 网站刷新几次后 消息就会到达 但逻辑上很多次 就像网站刷新量一样 已经尝试将
  • SO_REUSEPORT 可以在 Unix 域套接字上使用吗?

    Linux 内核 gt 3 9 允许通过设置在内核负载平衡的进程之间共享套接字SO REUSEPORT http lwn net Articles 542629 http lwn net Articles 542629 这如何用于类型的套接

随机推荐

  • Spring Cloud(七):服务网关zuul过滤器

    上文介绍了Zuul的基本使用与路由功能 本文接着介绍Zuul的核心概念 Zuul过滤器 filter Zuul的功能基本通过Zuul过滤器来实现 类比于Struts的拦截器 只是Struts拦截器用到责任链模式 Zuul则是通过Filter
  • 云计算是被逼出来的

    author skate time 2010 05 26 云计算是被逼出来的 1 云计算是被逼出来的 云计算是被逼出来的 计算量越来越大 数据越来越多 越来越要动态 越来越要实时 越来越需要结构化 光有服务器 光有PC客户端已经不够了 所以
  • 集合泛型为对象,根据对象的某个属性进行排序

    根据集合里的深度 排序集合 Collections sort irFldsltpvMList new Comparator 为集合名 为实体类对象 Override public int compare IrFldsltpvM o1 IrF
  • java的两种比较器

    比较算法 日常生活中 如果想比较两个数的大小 可采用做差的方式 做差结果的正负可用来判断两个数的大小 假设A B C 若整数C gt 0 说明 A gt B 若整数C 0 说明 A B 若整数C lt 0 说明 A lt B java的两种
  • 求子数组问题

    子数组问题分为三类 1 连续子数组 2 非连续子数组 3 可连续也可以不连续 这三类问题的解决办法一般都是循环或者动态规划 尝试了dfs算法 结果把自己给绕进去了 一 最大升序问题 属于第三类 参考 https www cnblogs co
  • Controlling Font Size With Javascript 兼容主流浏览器

  • 简单的递归组件示例-vue3

    1 呈现效果 2 代码实现 2 1 src App vue 代码
  • 送呆萌的她一个皮卡丘(Python实现)

    目录 1 呆萌的她 2 思维需要革新 3 送她的一个漂亮皮卡丘 4 Python完整代码奉上 1 呆萌的她 又是一季春风暖阳下 你是一湾一湾羞涩的春波 静静感受着 你垂下的枝膊 在我的脸上轻轻抚摸 一对春燕 低低掠过 涟漪乍起 是你浅浅的笑
  • 计算机的性能公式

    cpu执行时间 简称CPU时间 表示执行某一任务在CPU上所花费的时间 不包括等待I O或运行其他程序的时间 程序的cpu执行时间 cpu时钟周期数 时钟周期时间 cpu时钟周期数 主频 要想缩短cpu执行时间 最简单的方法就是缩短cpu的
  • 连表查询可以跟多个条件

    连表查询时后面条件可以跟多个条件 select from tabA a tabB b where a userID b userID and a userName b userName select from tabA a left joi
  • 基于JWT(JSON Web Token)的工程引入与落地实践

    JWT从认识 起飞到落地 1 JWT认识 1 1 什么是JWT 1 2 透明令牌与自包含令牌 2 JWT起飞 2 1 JWT的用处 2 2 JWT的原理 2 3 JWT的结构 2 3 1 JWT头 2 3 2 有效载荷 2 3 3 签名哈希
  • C语言中数组所占字节怎么算

    数组在内存中所占字节数可以使用sizeof操作符来计算 该操作符是专门用于检测类型或变量或数组在内存中所占有的空间 字节数 语法 sizeof x 其中x是类型名 变量名或数组名等 可以返回x所占字节数 C语言中计算一个数组占内存多少空间
  • 翻斗式雨量计的组成与工作原理

    雨量计也叫雨量记录仪 量雨计 测雨计 是常规的气象检测仪器 气象部门通过它来监测计量降雨量和降雨强度 常见的有虹吸式雨量计 翻斗式雨量计和称重式雨量计等 因为翻斗式雨量计方便携带安装 数据相对精确 因此在农业气象监测中广泛应用 1 翻斗式雨
  • lua的coroutine

    编辑器是IDEA lua协程学习汇总 lua协程 可以使用debug模式一步步查看程序的运行 coroutineFunction function a b coroutine yield 挂起正在运行的协程 传递给yield的参数将成为re
  • 墨者靶场(综合)

    初级 综合 表单暴力破解实训 第1题 提示 直接使用BurpSuite抓包跑数字 HTML前端代码分析 暗链 提示 打开页面 访问得到key值 SVN信息泄露漏洞分析 第1题 背景介绍 提示 1 使用dirsearch扫描地址 2 使用Na
  • click house索引

    稀疏索引 好处 范围查询过滤比较快 弊端 不适合点对点查询 索引必须依赖物理存储顺序 排序字段a b c 索引字段 a ab abc 索引字段必须是排序字段的前缀 语句级多线程 由于一条数据 不适合高qps的高频短查询 更适合低频的大数据复
  • PCL DBSCAN密度聚类

    目录 一 算法原理 1 密度聚类 2 参考文献 二 代码实现 三 结果展示 四 附 matlab验证代码 一 算法原理 1 密度聚类 密度聚类是将簇定义为密度相连的点的最大集合 能够把具有足够高密度的区域划分为簇 并可在噪声的空间数据库中发
  • Android面试常用面试题

    1 Android手机横竖屏切换的问题及其解决方案 默认情况下 横竖屏切换的时候 系统会销毁当前的Activity 然后新建一个Activity 显然 太浪费资源了 http www cnblogs com zhangkai281 arch
  • 机器学习(machine learning)之AdaBoost算法

    转载自 http blog csdn net haidao2009 article details 7514787 菜鸟最近开始学习machine learning 发现adaboost 挺有趣 就把自己的一些思考写下来 主要参考了http
  • TCP吞吐量的理论计算公式

    源 本篇文章本来是收录AIMD拥塞控制吞吐量的计算公式 Valve游戏公司开源GameNetworkingSockets 1 既支持可靠的数据传输 也支持不可靠的数据传输 数据的传输速率 是直接计算出来的 const int64 k nMi