文章目录

  • 包对探测法
  • GCC(google congestion control)
  • BBR
  • TCP congestion control
    • Tahoe and Reno
    • BIC TCP
    • Cubic
  • 参考文献

包对探测法

包对探测通过连续发送两个包,并计算时间差来获取瓶颈链路带宽,假设两个包 A 和 B 大小均为 LLL,且两个包紧邻连续发送 如下图所

因此可以通过计算接收方两个包的到达时间差 δ\deltaδ 来估测瓶颈带宽 C=LδC=\frac{L}{\delta}C=δL​。

GCC(google congestion control)

BBR

本方法核心是估计计算当路由器缓冲队列恰好为0时的通信链路容量大小。如果把通信链路比作一条管道,经过的流量类比管道中的水流,路由器缓存看成是输液管道膨胀的部分。如下图:

刚开始,路有缓冲队列为空,发送带宽随发送速率线性提升,rtt不变,进一步提升发送速率,发送数据包开始注入路由缓冲队列,此时发送带宽已到达瓶颈带宽,不再增加,rtt随着路由缓冲队列增加而增大,因此,当路由缓冲队列恰好为空时,此时rtt最小,发送带宽达到最大,因此通信容量的估计为 12RTTmax⋅Bandwidthmax\frac{1}{2}RTT_{max}\cdot Bandwidth_{max}21​RTTmax​⋅Bandwidthmax​

TCP congestion control

Tahoe and Reno

tcp tahoe和 tcp reno 为最早出现的两个tcp拥控算法,也是课本上的经常提到的示例算法,他们拥塞控制策略如下图所示

主要步骤为

  1. 初始时为slow start阶段,此时cwnd (congestion window)为1,每间隔一个RTT(Round-trip time),cwnd 加倍

  2. 当cwnd等于ssthresh时,进入拥塞避免(congestion avoidance)阶段,每间隔一个RTT,cwnd增加一个MSS

  3. 当检测到丢包时(丢包反馈),其中丢包检测的判断为

    1. 发生retransmission timeout(RTO)
    2. 连续收到3个重复的ACK(连续收到4个相同的ACK),快速重传

    当发生丢包事件为 b时:

    tahoe算法:将ssthresh置为当前cwnd的一半,cwnd置为1,并重新开始进入slow start阶段,如上图的蓝线

    Reno算法:进入快速恢复阶段(cwnd不置为1),将ssthresh和cwnd同时置为当前cwnd的一半,并进入拥塞避免阶段,跳过slow start阶段。如上图的黑线

    其对应伪代码如下:

    if (cwnd < ssthresh) {cwnd(n + 1) = cwnd(n) + 1;    // slow start
    } else {cwnd(n + 1) = cwnd(n) + 1 / cwnd(n);  // additive increase
    }if (duplicated 3 acks) {  // fast retransmissionretransmit the lost packet;
    }if (retransmission_timerout) {    // multiplicative decrease ssthresh(n + 1) = cwnd(n) / 2;cwnd(n + 1) = 1;
    }if (duplicated 3 acks) {       //  fast recovery (TCP reno):ssthresh(n + 1) = cwnd(n) / 2;cwnd(n + 1) = sssthresh(n + 1);
    }if (duplicated 3 acks) {  // multiplicative decrease to slow start (TCP Tahoe)ssthresh(n + 1) = cwnd(n) / 2;cwnd(n + 1) = 1;
    }if (retransmission_timerout) { // RTOretransmit the lost packet;
    }
    

BIC TCP

主要考虑三个点:

  1. **TCP friendliness :新协议与TCP共存时,不能抢占太多的TCP带宽,尽量保证带宽分配的公平性。**
  2. **scalability:新协议应用到long fat管道链路上时,有更好的适应性,即不会因为网络状况的改变性能下降太多。**
  3. **RTT fairness :多个运行相同新协议的连接,他们获得的cwnd 与RTT的相关性不应该太大。(RTT小的连接能更快的收敛到管道容量,先收敛不能影响后收敛的)**

Binary increase congestion control 协议主要考虑如何在high-speedlarge delays 网络上cwnd如何更快的收敛至管道容量(standard TCP收敛速度极慢),对于短流(short flow)来说,标准TCP在慢启动阶段就已完成数据传输(slow start持续时间太长)。因此BIC的思想主要为利用二分查找的方法找到管道容量,以丢包反馈信息来指导当前预估的cwnd比管道容量大还是小,如果cwnd大于管道容量,显然会发生丢包。其主要算法伪代码如下:

The following preset parameters are used:
low_window: if the window size is lager than this thresholdBIC engages; otherwisz normal TCP increase/decrease.S_max: the maximum increment.S_min: the mininum increment.β: multiplicative window decrease factor.The following variables are used:W_max: the maximum window sizecwnd: congestion window size;bic_inc: window increment per RTTWhen entering faster recovery:
if (cwnd < low_window) {  // normal tcpcwnd = cwnd * 0.5;return
}if (cwnd < W_max) // fast convergenceW_max = cwnd * (2 - β) / 2;
elseW_max = cwnd;
cwnd = cwmd * (1 - β); // multiplicate decreaseWhen not in fast recovery and an acknowledgment for a new packet arrive:
if (cwnd < low_window) { // normal TCPcwnd = cwnd + 1 / cwnd;return;
}if (cwnd < W_max)  // binary searchbic_inc = (W_max - cwnd) / 2;
else bic_inc = cwnd - W_max;  // slow start
if (bic_inc > S_max) // additive increasebic_inc = S_max;
else if (bic_inc < S_min) // binary search increase or slow startbic_inc = S_min;cwmd = cwmd + bic_inc / cwnd;

BIC协议运行步骤主要如下,首先定义

步长最大值SmaxS_{max}Smax​

步长最小值SminS_{min}Smin​

当前最大窗口大小WmaxW_{max}Wmax​

窗口乘性减因子β\betaβ

  1. 初始cwnd=1,并以binary search increase的方式计算步长,即步长 bic_inc=Wmax−cwnd2bic\_inc = \frac{W_{max}-cwnd}{2}bic_inc=2Wmax​−cwnd​,但是为了减少因为初始步长太大,导致网络瞬时注入太多包,因此步长不能超过上界SmaxS_{max}Smax​,因此实际上,在启动初始阶段,先进入additive increase阶段(虽然是线性增,但是SmaxS_{max}Smax​值很大,所以收敛速度很快),即 cwnd(n+1)=cwnd(n)+Smaxcwnd(n+1)=cwnd(n)+S_{max}cwnd(n+1)=cwnd(n)+Smax​
  2. 当 Smin<bin_inc<SmaxS_{min}<bin\_inc < S_{max}Smin​<bin_inc<Smax​时,进入 binary search increase阶段,即新的cwnd 总是等于旧的cwnd到WmaxW_{max}Wmax​的中间值。即

cwnd(n+1)=cwnd(n)+Wmax−cwnd(n)2=Wmax+cwnd(n)2cwnd(n + 1) = cwnd(n) + \frac{W_{max}-cwnd(n)}{2}=\frac{W_{max}+cwnd(n)}{2} cwnd(n+1)=cwnd(n)+2Wmax​−cwnd(n)​=2Wmax​+cwnd(n)​

  1. 当 cwnd(n)cwnd(n)cwnd(n)接近WmaxW_{max}Wmax​时且Wmax−cwnd(n)<SminW_{max}-cwnd(n)<S_{min}Wmax​−cwnd(n)<Smin​时,不再使用binary search increase 更新cwnd,而是使用 cwnd(n+1)=cwnd(n)+Smincwnd(n+1)=cwnd(n)+S_{min}cwnd(n+1)=cwnd(n)+Smin​ 来逐渐超过 WmaxW_{max}Wmax​。
  2. 当 cwnd(n)>Wmaxcwnd(n)>W_{max}cwnd(n)>Wmax​时,进入 slow start阶段增长cwnd(n)cwnd(n)cwnd(n),即

bin_inc(1)=cwnd(k)−Wmaxbin\_inc(1)=cwnd(k)-W_{max} bin_inc(1)=cwnd(k)−Wmax​

bin_inc(m)=2⋅bin_inc(m−1)+1bin\_inc(m)=2\cdot bin\_inc(m-1)+1 bin_inc(m)=2⋅bin_inc(m−1)+1

cwnd(n+1)=cwnd(n)+bin_inc(n−k+1)cwnd(n+1)=cwnd(n)+bin\_inc(n-k+1) cwnd(n+1)=cwnd(n)+bin_inc(n−k+1)

 可以看到步长是以2的幂次递增的
  1. 当发生丢包事件时,

    1. 如果此时 cwnd(n)≥Wmaxcwnd(n)\ge W_{max}cwnd(n)≥Wmax​,则进入multiplicative decrease 阶段,Wmax=cwnd(n)W_{max}=cwnd(n)Wmax​=cwnd(n),cwnd(n+1)=cwnd(n)⋅(1−β)cwnd(n+1)=cwnd(n)\cdot (1-\beta)cwnd(n+1)=cwnd(n)⋅(1−β)
    2. 如果cwnd(n)<Wmaxcwnd(n)<W_{max}cwnd(n)<Wmax​,则进入 fast convergence阶段

    Wmax=cwnd(n)⋅(1−β)+cwnd(n)2W_{max}=\frac{cwnd(n)\cdot(1-\beta)+cwnd(n)}{2} Wmax​=2cwnd(n)⋅(1−β)+cwnd(n)​

Cubic

参考文献

  1. Dovrolis C, Ramanathan P, Moore D. Packet-dispersion techniques and a capacity-estimation methodology[J]. IEEE/ACM Transactions On Networking, 2004, 12(6): 963-977.
  2. Cardwell N, Cheng Y, Gunn C S, et al. BBR: Congestion-based congestion control: Measuring bottleneck bandwidth and round-trip propagation time[J]. Queue, 2016, 14(5): 20-53.
  3. Xu L, Harfoush K, Rhee I. Binary increase congestion control (BIC) for fast long-distance networks[C]//IEEE INFOCOM 2004. IEEE, 2004, 4: 2514-2524.

拥塞控制算法(Congestion Control)对比相关推荐

  1. 阿里拥塞控制算法HPCC: High Precision Congestion Control论文

    要解决的主要问题 在运行大规模 RoCEv2 网络多年之后,RDMA 网络面临着调和低延迟.高带宽利用率和高稳定性的根本挑战.这是因为高速意味着流以线速开始并积极抢占可用网络容量,这很容易在大规模网络 ...

  2. WebRTC的拥塞控制技术(Congestion Control

    http://www.jianshu.com/p/9061b6d0a901 1. 概述 对于共享网络资源的各类应用来说,拥塞控制技术的使用有利于提高带宽利用率,同时也使得终端用户在使用网络时能够获得更 ...

  3. webrtc拥塞控制算法对比-GCC vs BBR vs PCC

    1.前言 现有集成在webrtc中的拥塞控制算法有三种, 分别是: 谷歌自研发的gcc, 谷歌自研发的BBR算法, 斯坦福大学提出的基于机器学习凸优化的PCC算法. 本文将探讨一下三个算法的区别和优缺 ...

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

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

  5. Ubuntu配置|添加拥塞控制算法到Linux内核

    文章目录 前言 一.问题描述 二.解决方案 1.查看系统中安装的拥塞控制算法模块 2.安装指定模块 Reference 前言 较高版本的Linux内核中,有多个高级拥塞控制算法,一些对TCP拥塞控制算 ...

  6. 面试热点|理解TCP/IP传输层拥塞控制算法

    来自:后端技术指南针 0x00.前言 这是TCP/IP协议栈系列的第二篇文章,之前的一篇理解TCP/IP协议栈之HTTP2.0感兴趣可以看下,今天一起来学习下一个热点问题. 通过本文你将了解到以下内容 ...

  7. 一周一论文(翻译)——[SIGMOD 2015] TIMELY RTT-based Congestion Control for the Datacenter

    本文主要解决的问题是在,基于优先级的拥塞控制PFC是一种粗粒度的机制,它主要是通过检测优先级队列的长度是否超过阈值,然后再发送PFC拥塞信号帧来进行流量控制.这种做法会带来不公平性以及行头阻塞等问题. ...

  8. Google BBR拥塞控制算法模型初探

    女主宣言 本文出自于ADDOPS团队,该文章是一篇兴趣触发的探索性文章,作者是一名刚毕业的小鲜肉,买新系统,去自己探索bbr算法,难能可贵,并且给出了详细的部署步骤,也能让大家在兴趣之余跟着步骤试一把 ...

  9. 【转载】TCP拥塞控制算法 优缺点 适用环境 性能分析

    [摘要]对多种TCP拥塞控制算法进行简要说明,指出它们的优缺点.以及它们的适用环境. [关键字]TCP拥塞控制算法 优点    缺点   适用环境公平性 公平性 公平性是在发生拥塞时各源端(或同一源端 ...

  10. A Google Congestion Control Algorithm for Real-Time Communication

    原文地址 https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc Abstract 摘要 This document describes ...

最新文章

  1. 瀑布式开发与敏捷开发的区别是什么
  2. windows下查看dns缓存和刷新缓存
  3. 2022-03-16
  4. bat 变量 文件内容第一行_VBA基础入门(38)FSO生成bat文件后执行的实例
  5. android实现推送方式解决方案,Android实现推送方式解决方案系列教程
  6. 拜托!代码有BUG不一定都是程序员的锅
  7. Html5+NodeJS——拖拽多个文件上传到服务器
  8. dat图片 电脑端微信_微信 PC 版迎来了重磅更新,可以在电脑端使用小程序了 !...
  9. Android中service的生命周期
  10. 无连续整数的子集数问题
  11. canny边缘检测_每日习题-图像处理-Canny边缘检测(2020.4.15)
  12. 2021年5月系统集成项目管理工程师案例分析真题讲解(2)
  13. 天线基础知识(四)接收灵敏度
  14. mapping的介绍和实战
  15. matlab节点连通率,利用matlab仿真最小发射功率下wsn的连通性和覆盖率.docx
  16. 利用幂级数性质解级数求和问题
  17. Shiro权限控制+整合shiro
  18. 报错:Process finished with exit code -1073741819 (0xC0000005)
  19. 战地4网页怎么换服务器地址,战地4设置服务器地址
  20. 2022年研究一下PC微信 HOOK 技术(版本:3.4.5.27)

热门文章

  1. 红米开发版刷机教程_红米Note3开发版怎么刷机 红米Note3开发版刷机教程
  2. VVIC搜款网平台API接口
  3. 关于“明显没有bug的代码”的一些拙见
  4. 制造业OEER语言数据挖掘之相关性分析
  5. 香橙派 Ubuntu修改系统时间
  6. 科研热点|发一篇SCI吃半年土?为何国际期刊版面费越来越贵?
  7. educoder Git进阶之合并远程分支、rebase、储藏
  8. OAException Application ICX Message Name ICX SESSION FAI
  9. C语言常见问题(9):Value stored to ret is never read
  10. 阿里面试:设计一个电商平台积分兑换系统!