Scalable TCP(STCP)拥塞控制算法,在每个RTT周期内,如果没有发生拥塞,将在接收到每个ACK报文后,将拥塞窗口增加0.01(a值)。

cwnd =  cwnd + 0.01

如果在一个RTT周期内第一次检测到拥塞发生,将拥塞窗口减低1/8倍(b值),在同一个RTT周期仅降低一次拥塞窗口。

cwnd =  cwnd − [0.125 * cwnd]

使用STCP算法的发送端在任一发送速率下,经过大约70个RTT可实现速率的翻倍,其窗口更新算法具有可扩展性。如下,以窗口减半为例,即1/2cwnd, Nrtt表示经过多少个RTT周期窗口能增长1/2cwnd,按照STCP的增长算法,每100个ACK将使拥塞窗口增加1,那么在一个RTT周期内,窗口的增加值为cwnd/100。如下等式可得Nrtt为50,即经过50个RTT周期,拥塞窗口可增长一倍。考虑延迟ACK因素,在SCTP的文章(Scalable TCP: Improving Performance in Highspeed Wide Area Networks)中,作者给出的值为70。

cwnd / 100  *  Nrtt  =  1/2 * cwnd

由以上可见,不同于传统TCP拥塞算法(a=1/cwnd, b=0.5),其丢包恢复时间与连接的窗口大小和RTT成比例,这意味着随着带宽的增长,拥塞窗口的增加,发送丢包之后,恢复时间将变得非常长,而STCP的丢包恢复时间仅与RTT成固定比例,这使得STCP在高速WAN网中拥有比传统TCP更高的性能和可扩展性。STCP参数(a,b)的数值选择考虑了对传统TCP流量的影响,带宽分配属性,流量速率变化,收敛属性和控制理论稳定性等。

假设TCP连接的RTT时长为200ms,发送的报文长度为1500字节,带宽为1Gbps,对应于17000个报文(1Gbps / [1/0.2 * 1500 * 8]),对于传统TCP拥塞算法,在发生拥塞时,窗口减半为8500,对应于带宽500Mbps,要再次达到1Gbps的带宽,拥塞窗口需要增加8500,每个RTT(200ms)增加1,需要经过1700秒(8500*0.2=28分钟)。即便经过如此长的时间恢复到1Gbps的带宽,还有前提条件,即在28分钟内,没有再发生任何拥塞。可见,由于较长的丢包恢复时间和对较低丢包率的要求,传统TCP拥塞算法在高速WAN网路中,很难合理利用可用带宽。

依据以上的网络情况,对于STCP,首先,其将拥塞窗口检查1/8;再次,STCP的拥塞窗口不依赖当前窗口,故STCP拥塞窗口增加1/8,所需的时间为: 100/8 = 12.5个RTT,即2.5秒(12.5 * 0.2),远低于传统TCP的28分钟。

在Scalable TCP: Improving Performance in Highspeed Wide Area Networks中定义了原始的窗口增加值a和拥塞减少系数b分别为0.01和0.125,但在内核实现中为弥补延迟ACK带来的损失,a取值增加一倍,为0.02。开启延迟ACK的接收端在接收到两个MSS大小的报文后回复ACK报文,或者等待延迟ACK超时。

如下内核函数tcp_scalable_ssthresh,在发生拥塞时,将慢启动阈值ssthresh设置为当前拥塞窗口的7/8倍。

#define TCP_SCALABLE_MD_SCALE   3static u32 tcp_scalable_ssthresh(struct sock *sk)
{   const struct tcp_sock *tp = tcp_sk(sk);return max(tp->snd_cwnd - (tp->snd_cwnd>>TCP_SCALABLE_MD_SCALE), 2U);
}

在ACK报文的处理过程中,如果报文发送并没有受到拥塞窗口的限制,不进行窗口调整。如果套接口处于慢启动阶段,应用慢启动窗口增长策略,反之,执行AI(Additive Increase)增长,每接收到50个(TCP_SCALABLE_AI_CNT)ACK报文拥塞窗口增加1。

但是,如果当前拥塞窗口值小于50,执行传统TCP拥塞增长算法,即每CWND个ACK报文,拥塞窗口增加1。这要增加了STCP算的TCP友善性(TCP-friendly)。

#define TCP_SCALABLE_AI_CNT 50Ustatic void tcp_scalable_cong_avoid(struct sock *sk, u32 ack, u32 acked)
{   struct tcp_sock *tp = tcp_sk(sk);if (!tcp_is_cwnd_limited(sk))return;if (tcp_in_slow_start(tp))tcp_slow_start(tp, acked);elsetcp_cong_avoid_ai(tp, min(tp->snd_cwnd, TCP_SCALABLE_AI_CNT), 1);
}

内核版本 5.0

Scalable TCP拥塞算法相关推荐

  1. cubic算法优化_安卓cpu优化tcp拥塞算法cubic和reno怎么选择?

    上述具体的论文可以参考:CUBIC: A New TCP-Friendly High-Speed TCP Variant 1. tcp cubic数学模型 CUBIC在设计上简化了BIC-TCP的窗口 ...

  2. cubic算法优化_安卓cpu优化 tcp拥塞算法cubic和reno怎么选择

    上述具体的论文可以62616964757a686964616fe59b9ee7ad9431333365643662参考:CUBIC: A New TCP-Friendly High-Speed TCP ...

  3. tcp拥塞算法分析三(cubic)

    本文分析linux-4.14.69代码的cubic拥塞算法,参考论文 "CUBIC: A New TCP-Friendly High-Speed TCP Variant" 传统的拥 ...

  4. TCP拥塞控制算法-从BIC到CUBIC

    摘要:tcp就是乘性加,然后加性加接近最大码率.BIC优化了,变成折半加,不是加一个rtt,这样加的速度变快,同时进入下一周期做了图形对称.cubic完全根据bic的图形,将图形转成代数,带入3个关键 ...

  5. tcp拥塞算法分析一(拥塞避免和慢启动)

    最近需要研究tcp拥塞算法,决定通过写博客的方式加深理解.这是第一篇,记录下拥塞避免和慢启动算法 拥塞避免阶段:以1/cwnd的速度增长.即每次收到一个ack(如果每个包都对应一个ack,不考虑延迟a ...

  6. TCP BBR算法与Reno/CUBIC的对比

    我一再强调,BBR算法是个分界点,所有的TCP拥塞控制算法,被分为BBR之前和BBR之后的(其实发现,这并不是我个人的观点,很多人都这么认为,所有想写本文探个究竟).当然这里的"所有&quo ...

  7. QVegas-一个升级版的TCP Vegas拥塞算法

    拥塞避免带来了很多疑惑,本文解开这个疑惑并给出一个实实在在但却很简陋的算法.         其实在基于丢包的拥塞算法中,拥塞避免的过程总是伴随着AI和MD的,不能光说AI而忽略MD.         ...

  8. 从TCP拥塞本质看BBR算法及其收敛性(附CUBIC的改进/NCL机制)

    本文试图给出一些与BBR算法相关但却是其之外的东西. 1.TCP拥塞的本质 注意,我并没有把题目定义成网络拥塞的本质,不然又要扯泊松到达和排队论了.事实上,TCP拥塞的本质要好理解的多!TCP拥塞绝大 ...

  9. 常见 TCP 拥塞避免算法浏览(下)

    文末可长摁二维码查看分享视频版本- BBR 估计 BtlBw 和 RTprop 延续前面说的,要把发送速率调整到跟 BDP 差不多大是最优的.因为网络环境会持续变化,所以需要持续监控 RTprop 和 ...

最新文章

  1. leetcode006 zig_zig_print
  2. 构建之法第二章读后感
  3. 内存映射MMAP和DMA【转】
  4. 二、ElasticSearch内置分词器
  5. android状态机是线程么,安卓StateMachine运行过程理解(翻译)
  6. 随想录(keras入门)
  7. AngularJs自定义指令详解(10) - 执行次序
  8. PHP文件上传类(页面和调用部分)
  9. 宇枫资本年轻人投资理财的方法
  10. Riverbed助力富邦人寿在市场竞争和数字化进程中抢占先机
  11. 51单片机LCD1602液晶显示屏
  12. python缺省值_python函数缺省值
  13. 实验一 常用仪器与门逻辑电路实验
  14. 离开学校如何自学修炼成为一名网页设计师(二)
  15. 【融职培训】Web前端学习 第2章 网页重构11 HTML5新增标签
  16. ADDS:在域内或域间复制组成员
  17. 50 行 Python 代码绘制数据大屏,这个可视化框架真的太神了
  18. 什么是DevSecOps?理解DevOps安全性
  19. 自制感光法印制PCB(干货)-激光雕刻丝印层
  20. 你现有的岗位工作多少年,薪资能赶上程序员?

热门文章

  1. 超声波下水道液位计传感器的工作原理
  2. 计算机应用基础统考试题库与答案,计算机应用基础统考试题库和答案.docx
  3. 甘肃省兰州市谷歌卫星地图下载
  4. Linux中制作本地yum源
  5. 外国小哥总结各国旅行好用App,中国区榜首心服口服
  6. 谷歌Chrome浏览器将对浏览器缓存进行分区
  7. 扁平化图标!让total commander跟上时代潮流!
  8. 关于蓝牙异常断开的问题
  9. 破案了,能ping通但是网络不通,是它们在搞鬼
  10. IOS 图形开发绘图小结