从 Reno TCP 到 Scalable TCP,HighSpeed TCP

前文 Scalable TCP 如何优化长肥管道 介绍了 Scalable TCP,但联系另一个类似的算法 HighSpeed TCP(简称 HSTCP),就会看到一个类似从 Reno TCP 经 BIC 到 CUBIC 的路线,但采用了不同的策略。

Reno TCP 经 BIC 到 CUBIC 路线的核心在于 “在长肥管道中快速逼近管道容量”,采用二分法或三次曲线除了属于不同实现方式,二者也有承接。

而从 Reno TCP 分化而来的 Scalable TCP,HSTCP 这条路线的核心在于 “在长肥管道容忍更高的丢包率”,前文已经说过 Scalable TCP,本文简述 HSTCP,来自 Sally Floyd,参见 HighSpeed TCP (HSTCP)。

我在 2021 年已经写过一篇关于 HSTCP 的详细推导 漫谈 HSTCP,本文为其缩略版,侧重核心的推导。

常规 Reno TCP 的问题在于对大容量管道没有扩展性,一方面 cwnd 打开速度太慢,另一方面对丢包容忍度太低,二者相互加深纠缠:在高速网络缓慢的 cwnd 打开过程中,只要遭遇丢包,窗口就会减半,而这个过程越久,丢包概率就越大。这个丢包容忍度甚至已经低于世界上最好的介质误码率。

该问题产生的根源在于,设计单纯的端到端拥塞控制算法时只考虑了拥塞丢包(buffer 溢出)的因素,并未考虑底层介质误码造成的随机丢包。这个因素一直影响着几乎所有拥塞控制算法的设计,直到今日。

HSTCP 对 Reno TCP 的优化全在 response curve 上进行。首先给出标准 Reno 的 response function:

W = a ⋅ ( 2 − b ) 2 b ⋅ p W=\sqrt{\dfrac{a\cdot(2-b)}{2b\cdot p}} W=2bpa(2b) 【这个式子我就不推导了,详见之前的文章】

将 a = 1,b = 0.5 带入,得到现行 Reno TCP 的 response function:

W = 1.22 ⋅ 1 p W=1.22\cdot\sqrt{\dfrac{1}{p}} W=1.22p1

双对数坐标系里绘图:
在这里插入图片描述

如红色标注所示,支撑 100 的 cwnd 就需要 10^{-4} 丢包率,可见条件之苛刻。需要让这条线陡峭起来。

不能指望调整 a,b 达到目标,因为 p 的指数不变,线条只能平行移动,而不能改变斜率。前文所述 Scalable TCP 采用改变 per-ack 行为,将与 RTT 相关的 “Per-RTT- Additive Increase” 变换为 RTT 无关的 “Per-ACK- Additive Increase”,做到了 “使斜率变为 -1,直线变陡”,得到了新的 response function:

W = a b ⋅ p W=\dfrac{a}{b\cdot p } W=bpa

HSTCP 则采用了另一种方法,直接从 response curve 上入手,求直线方程:
在这里插入图片描述

很容易求出直线的斜率,即 response function 中 p 的指数:

S = ln ⁡ w 1 − ln ⁡ w 0 ln ⁡ p 1 − ln ⁡ p 0 S=\dfrac{\ln w_1-\ln w_0}{\ln p_1 -\ln p_0} S=lnp1lnp0lnw1lnw0

按照 paper 建议将 p0(0.0015, 31) 和 p1(10^{-7}, 83000) 代入,可求得 S = -0.82,再代入一点坐标,得 HSTCP 的 response function:

W = 0.15 p 0.82 W=\dfrac{0.15}{p^{0.82}} W=p0.820.15

这就是 HSTCP 算法完整描述。但考虑到实际部署实施,还要考虑如何实现算法。

本质上,HSTCP 仍然是一个 AIMD 算法,但显然无法套入 W = a ⋅ ( 2 − b ) 2 b ⋅ p W=\sqrt{\dfrac{a\cdot(2-b)}{2b\cdot p}} W=2bpa(2b) 公式去求 a,b,同时也不能像 Scalable TCP 那样改变 ACK 时钟处理的行为,否则那就是 Scalable TCP 了。HSTCP 的路子是分段拟合不同 a,b 的 response curve: W = a ⋅ ( 2 − b ) 2 b ⋅ p W=\sqrt{\dfrac{a\cdot(2-b)}{2b\cdot p}} W=2bpa(2b) ,具体来讲看下图:
在这里插入图片描述

注意与标准 Reno TCP 的 response curve 黄色线平行的不同 a,b 参数线,图例上都有,它们与 HSTCP 的 response curve 蓝色粗线均有交点,选择几个典型的 a,b 参数,获得各交点的 w 坐标,以这些坐标为界,当 cwnd 达到某个 w 界标后,采用该界标的 a,b 参数直到 cwnd 到达下一个界标 w。

可从 RFC3649 了解整个待定系数的过程:
在这里插入图片描述

Linux kernel 的 HSTCP 实现 中有一张大表,数据均来自该 RFC 建议。

来,看一个不同网络容量下 HSTCP 锯齿的观感:
在这里插入图片描述
看,是不是管道容量越大,锯齿越细,这就是 “可扩展性”!

最后,我们发现 HSTCP 与 Scalable TCP 很像,均做到了 “在大容量网络对 p 的容忍”,即让 response curve 更陡峭,为了做出比较,我将 Scalable TCP 的 curve 也一并画入:
在这里插入图片描述

可见 HSTCP 与 Scalable TCP 何其相似,和 Scalable TCP 固定 AIMD 步频不同,HSTCP 也具有 “可扩展性”,但它体现在 “当前探测的管道容量越大,Additive Increase 就越快,Multiplicative Decrease 比例就越低”,容量越大,就要 capacity-seeking 追得越快,而出现拥塞后的 robustness 容忍度也越大,相对也就不需要过激 md。

这就是 Scalable TCP,HSTCP 的路线,与 BIC,CUBIC 不同,但相似,它们旨在解决类似的问题,提供了不同的方案和迭代路线,《TCP/IP 详解》中提到的 “长肥管道” 问题在不断求解的过程中被解决,但总留下一些尾巴供给下一个挑战者。

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

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

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

相关文章

4反馈、LC、石英、RC振荡器

1什么是振荡器? 我们看看振荡器在无线通信中扮演什么角色? 1)无线通信的波是指电磁波‌。 2‌)电磁波的频率高于100KHz才能在空气中传播。‌ 3)空气中的高频电磁波的相位和振幅可以排列组合包含信息。 4)无…

DBMS-3.4 SQL(4)——存储过程和函数触发器

本文章的素材与知识来自李国良老师和王珊老师。 存储过程和函数 一.存储过程 1.语法 2.示例 (1) 使用DELIMITER更换终止符后用于编写存储过程语句后,在下次执行SQL语句时记得再使用DELIMITER将终止符再换回分号。 使用DELIMITER更换终止符…

Ubuntu 22.04.4 LTS更换下载源

方法1:使用图形界面更换下载源 1. 打开软件和更新应用 2. 在Ubuntu 软件标签中,点击“下载自”旁边的下拉菜单,选择“其他” 3. 点击“选择最佳服务器”来自动选择最快的服务器 4. 选择服务器 5. 确定并关闭窗口,系统会提示您重新…

ElasticSearch备考 -- Multi match

一、题目 索引task有3个字段a、b、c,写一个查询去匹配这三个字段为mom,其中b的字段评分比a、c字段大一倍,将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询,可以考虑multi match、bool query操作。…

【C++第十八章】Map和Set

Map和Set map和set的介绍 容器分为两种,序列式容器和关联式容器,序列式容器因为底层是线性序列的数据结构,存储的是元素本身,而关联式容器中不单是为了存储数据,还要进行查找,所以存储的是键值对&#xff…

网络编程(17)——asio多线程模型IOThreadPool

十七、day17 之前我们介绍了IOServicePool的方式,一个IOServicePool开启n个线程和n个iocontext,每个线程内独立运行iocontext, 各个iocontext监听各自绑定的socket是否就绪,如果就绪就在各自线程里触发回调函数。为避免线程安全问题&#xf…

腾讯云SDK点播播放数据

点播播放质量监控提供点播播放全链路的数据统计、质量监控及可视化分析服务。支持实时数据上报、数据聚合、多维筛选和精细化定向分析,可帮助企业实时掌控大盘运营状况、了解用户习惯和行为特征,有效指导运营决策、驱动业务增长。 注意事项 点播播放质…

Python 工具库每日推荐 【Pandas】

文章目录 引言Python数据处理库的重要性今日推荐:Pandas工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:销售数据分析案例分析高级特性数据合并和连接时间序列处理数据透视表扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScrip…

基于 CSS Grid 的简易拖拉拽 Vue3 组件,从代码到NPM发布(1)- 拖拉拽交互

基于特定的应用场景,需要在页面中以网格的方式,实现目标组件在网格中可以进行拖拉拽、修改大小等交互。本章开始分享如何一步步从代码设计,最后到如何在 NPM 上发布。 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug…

探索未来:mosquitto-python,AI领域的新宠

文章目录 探索未来:mosquitto-python,AI领域的新宠背景:为何选择mosquitto-python?库简介:mosquitto-python是什么?安装指南:如何安装mosquitto-python?函数用法:5个简单…

代码随想录算法训练营第四十六天 | 647. 回文子串,516.最长回文子序列

四十六天打卡,今天用动态规划解决回文问题,回文问题需要用二维dp解决 647.回文子串 题目链接 解题思路 没做出来,布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串&#xff0…

深入理解Transformer的笔记记录(精简版本)---- Transformer

自注意力机制开启大规模预训练时代 1 从机器翻译模型举例 1.1把编码器和解码器联合起来看待的话,则整个流程就是(如下图从左至右所示): 1.首先,从编码器输入的句子会先经过一个自注意力层(即self-attention),它会帮助编码器在对每个单词编码时关注输入句子中的的其他单…

【JavaEE】——回显服务器的实现

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:引入 1:基本概念 二:UDP socket API使用 1:socke…

2-118 基于matlab的六面体建模和掉落仿真

基于matlab的六面体建模和掉落仿真,将对象建模为刚体来模拟将立方体扔到地面上。同时考虑地面摩擦力、刚度和阻尼所施加的力,在三个维度上跟踪平移运动和旋转运动。程序已调通,可直接运行。 下载源程序请点链接:2-118 基于matla…

基于SpringBoot“花开富贵”花园管理系统【附源码】

效果如下: 系统注册页面 系统首页界面 植物信息详细页面 后台登录界面 管理员主界面 植物分类管理界面 植物信息管理界面 园艺记录管理界面 研究背景 随着城市化进程的加快和人们生活质量的提升,越来越多的人开始追求与自然和谐共生的生活方式&#xf…

使用激光跟踪仪提升码垛机器人精度

标题1.背景 码垛机器人是一种用于工业自动化的机器人,专门设计用来将物品按照一定的顺序和结构堆叠起来,通常用于仓库、物流中心和生产线上,它们可以自动执行重复的、高强度的搬运和堆垛任务。 图1 码垛机器人 传统调整码垛机器人的方法&a…

通信工程学习:什么是DIP数据集成点

DIP:数据集成点 DIP数据集成点(Data Integration Point),简称DIP,是物联网技术(IoT)和机器到机器(M2M)通信中的一个重要组成部分。DIP在数据集成和传输过程中扮演着关键角…

【笔记】6.2 玻璃的成型

玻璃熔体的成型方法,有压制法(例如,制作水杯、烟灰缸等)、压延法(例如,制作压花玻璃等)、浇铸法(例如,制作光学玻璃、熔铸耐火材料、铸石等) 、吹制法(例如,制作瓶罐等空心玻璃)、拉制法(例如,制作窗用玻璃、玻璃管、玻璃纤维等)、离心法(例如,制作玻璃棉等)、喷吹法(例如,制作…

Ansible 工具从入门到使用

1. Ansible概述 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主…

各类排序详解

前言 本篇博客将为大家介绍各类排序算法,大家知道,在我们生活中,排序其实是一件很重要的事,我们在网上购物,需要根据不同的需求进行排序,异或是我们在高考完报志愿时,需要看看院校的排名&#…