从 Reno TCP 到 Scalable TCP,HighSpeed TCP

server/2024/10/18 1:22:33/

前文 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.ppmy.cn/server/132045.html

相关文章

SD-WAN解决多云网络互通问题

随着企业业务的扩展,云资源的使用需求日益增加,许多企业逐渐采用了混合云架构。然而,如何高效地实现多云网络的互通,成为了企业急需解决的问题。本文将详细分析当前较为常用的云专线方案面临的挑战以及介绍新的SD-WAN方案。 云专线…

路由器原理

路由器原理 路由器:能够将数据转发到正确的目标,而在这一转发过程中选中最佳路径 路由器原理:根据IP地址转发 路由表:记录的转发的路径 路由表生成: 手动配置路由器自己学习 路由器基础命令: 含义指令查看路由表di…

基于ssm的社区家政服务预约系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 选题的目的和意义 基于ssm的社区网络的快速发展从根本上更改了世界的企业的管理方式,自二十世纪九十年代开始,我国的很多企业就设想可以通过互联网来进行管理员工以及客户信息。因为当时存在很多的原因&a…

【技术支持】家里智能电视不能联网重置小米路由器之路

问题现象 最近家里的路由器出现一点问题,现象是手机和电脑连接wifi后,都可以正常打开网页看视频。 但是小爱同学和小米盒子,都出现网络问题,不能正常播放音乐或者视频。 这是小米盒子的网络问题截图 这是和小米盒子连接的智能电…

k8s杂记

在node节点内部使用kubectl: rootmultinode-demo-m02:/# ps aux | grep kubelet root 218 3.1 1.6 2066316 62516 ? Ssl 07:35 0:29 /var/lib/minikube/binaries/v1.30.0/kubelet --bootstrap-kubeconfig/etc/kubernetes/bootstrap-kubelet.con…

探索CI/CD:持续集成与持续部署的基本概念

在现代软件开发中,持续集成(CI)和持续部署(CD)已经成为提高开发效率和产品质量的关键实践。本文将详细介绍CI/CD的基本概念、优势以及如何在实际项目中实施CI/CD。 一、什么是持续集成(CI)&…

(35)信号频谱的双边谱与单边谱

文章目录 前言一、仿真代码二、仿真结果画图 前言 本文首先使用MATLAB生成一段余弦信号,然后对其进行FFT变换,首先计算出信号的双边谱,然后在双边谱的基础上计算出信号的单边谱。 一、仿真代码 代码如下: %% 生成余弦波 % 指定…

c++实战项目:日期计算器的实现

目录 一.日期类功能二.运算符重载函数1如何在类中定义方法2分文件操作三.具体方法实现1 日期类的逻辑判断操作符2 复用简化代码3日期-天数的实现4测试四源代码 一.日期类功能 我们通过对日期类整型操作来得到具体多少天后的日期,并在控制台输出。 例如: …