【TCP拥塞控制算法(TCP congestion control algorithm)学习笔记】

原理:
让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率

问题的引出:
1.如何限制发送方的发送速率
2.发送方如何感知拥塞
3.感受到拥塞之后,发送发如何限制其发送速率

问题的分析&解决:

  • 如何限制发送方的发送速率?
    Solution:
    1.发送方中未被确认的数据量不会超过cwnd(拥塞窗口)与rwnd(接收窗口)中的最小值;注:TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制,在之前我们还讨论过TCP还有一个对端通告的接收窗口(rwnd)用于流量控制。窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报文段,
    2.为了关注拥塞控制(与流量控制形成对比),假设TCP接收缓存足够大,则可以忽略接收窗口的限制,使得发送方中未被确认的数据量仅仅受限于cwnd,且假设发送发一直发送数据;注:TCP连接的每一端都是由一个接收缓存、一个发送缓存和几个变量(rwnd就是其中之一)组成
    3.上一假设将未被发送的数据量约束于cwnd,间接地就将发送方的发送速率约束于cwnd:
    发送方的发送速率 = cwnd/RTT(字节/秒);至此成功解决问题。

发送方如何感知拥塞?
Solution:
1.当出连接路径上现过度拥堵时,该路径上路由器的缓存会溢出,引起一个数据报(包含一个TCP报文段)被丢弃,随之引起发送发的丢包事件;
2.TCP发送方的“丢包事件”被定义为:·出现超时;
·发送方收到来自接收方的3个冗余ACK;
注:重复的ACK应有4个,包含1个初始ACK和3个冗余ACK
3.出现丢包事件,则意味拥塞;至此成功解决问题
注:因为TCP使用确认来触发(或计时)增大cwnd长度,故TCP被称为自计时(self-clocking)的

*感受到拥塞之后,发送发如何限制其发送速率?
TCP调节其传输速率的策略是增加其速率以响应到达的ACK,而丢包事件指示路径拥塞,出故现丢包事件后减小传输速率。

TCP拥塞控制算法包含的三个主要部分:
慢启动、拥塞避免、快速恢复

各部分的内容:
· 慢启动:
1.TCP连接初始,cwnd初始值设置为一个MSS,则初始发送速率=MSS/RTT;
例如:MSS=500Btye,RTT=20ms,则初始发送速率=20kbps
2.此后每接当传输的报文段首次被确认,MSS翻倍,即以指数型增长(2^(n-1) * MSS);
!慢启动有以下三种结束方式:
1.结束指数增长的时刻:当发生一个由超时引起的丢包事件,TCP做两个动作:
①将ssthresh(阈值)记为当前cwnd的1/2;
②将cwnd置为1(MSS)并重新开始慢启动过程;
2.当cwnd在指数型连续增长的过程中等于了阈值,结束慢启动,TCP转移到拥塞避免模式;
3.若检测到三个冗余的ACK,TCP执行一种快速重传并进入快速恢复状态。

·拥塞避免:
1.进入拥塞避免状态,则意味着cwnd的值达到了上一次拥塞时的cwnd值的一半(即阈值)
2.继续翻倍增长实在鲁莽,故采用保守的增长方式(线性增长):TCP发送方不论何时收到一个新的确认,cwnd都只相应地增加一个MSS;
*以下两种情况结束拥塞避免模式下的线性增长:
1.出现超时的情况下,拥塞避免的行为与慢启动相同,将ssthresh(阈值)更新为当前cwnd的1/2,并将cwnd置为1(MSS)
2.出现三个冗余ACK的情况下:①为了更好的计量结果,三个冗余ACK也要计入MSS;
②ssthresh(阈值)更新为当前cwnd值的一半;
③进入快速恢复状态。

·快速恢复:
理解:快速恢复不涉及连续增长,只是一个cwnd值的变化,根据引起丢包的两种不同情况分别切入慢启动模式或拥塞控制模式。
1.当收到来自“引起TCP进入快速恢复模式的缺失报文段”的ACK时:
①cwnd降低为当前cwnd的1/2;
②依据引起TCP进入快速恢复模式的缺失报文段,cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS;
③进入拥塞避免状态。

2.当出现超时事件引起的丢包时:
①执行如同在慢启动和拥塞避免中相同的动作(更新阈值为cwnd的一半,cwnd置1);
②迁移到慢启动状态。

注:
1.TCP Tahoe(早期TCP):不论丢包是由超时还是3个冗余ACK引起的,都无条件的将cwnd置1并进入慢启动阶段;
2.TCP Reno(较新版本):综合了快速恢复。
实例:

根据以上理解,可以得知:
A.
①若丢包由超时事件引起,则快速回复和拥塞避免中cwnd增长相同,即更新阈值为cwnd的一半,cwnd置1;
②若是由三个冗余ACK引起的丢包事件,快速恢复中cwnd的增长为:
cwnd降低为当前cwnd的1/2,并依据引起TCP进入快速恢复模式的缺失报文段,cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS;而在没有发生拥塞的情况下,拥塞避免的增长:保守的增长方式(线性增长):TCP发送方不论何时收到一个新的确认,cwnd都只相应地增加一个MSS;

B.
快恢复【快】在:当收到来自“引起TCP进入快速恢复模式的缺失报文段”的ACK时,cwnd不必置1,而是将cwnd降低为当前cwnd的1/2,再依据引起TCP进入快速恢复模式的缺失报文段,令cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS后直接进入拥塞避免状态。

如综合了快速恢复的TCP Reno在遇到三个冗余ACK引起的丢包时,不必像早期的TCP Tahoe那样将cwnd置1并进入慢启动阶段,而是跳过慢启动阶段直接进入拥塞避免状态。


根据以上理解,可以得知:
A.
①若丢包由超时事件引起,则快速回复和拥塞避免中cwnd增长相同,即更新阈值为cwnd的一半,cwnd置1;
②若是由三个冗余ACK引起的丢包事件,快速恢复中cwnd的增长为:
cwnd降低为当前cwnd的1/2,并依据引起TCP进入快速恢复模式的缺失报文段,cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS;而在没有发生拥塞的情况下,拥塞避免的增长:保守的增长方式(线性增长):TCP发送方不论何时收到一个新的确认,cwnd都只相应地增加一个MSS;

B.
快恢复【快】在:当收到来自“引起TCP进入快速恢复模式的缺失报文段”的ACK时,cwnd不必置1,而是将cwnd降低为当前cwnd的1/2,再依据引起TCP进入快速恢复模式的缺失报文段,令cwnd增加(该缺失报文段的冗余ACK个数,一般为3)*MSS后直接进入拥塞避免状态。

如综合了快速恢复的TCP Reno在遇到三个冗余ACK引起的丢包时,不必像早期的TCP Tahoe那样将cwnd置1并进入慢启动阶段,而是跳过慢启动阶段直接进入拥塞避免状态。

例题:
《计算机网络·自顶向下方法》(第七版)Page.193–Problem10

答案:
C.是根据三个冗余ACK检测来的;因为TCP跳过了慢启动而直接进入了拥塞避免,且第17轮传输的cwdn值约等于阈值(42/2=21)+(缺失报文段的冗余ACK数3)=24MSS,得证;
D.是根据超时检测出来的;因为第23轮及之后传输中TCP进入了慢启动模式,cwnd置1且在cwnd值未超过阈值(约等于29/2=14.5)时保持指数型增长,得证;
E.由TCP从慢启动模式转入拥塞避免模式时的cwnd值可知:在第一个传输轮回里,阈值ssthresh为35-3=32;
F.第18轮传输的阈值ssthresh为42/2=21;
G.同理,阈值为:(25+4)/ 2 = 14.5;
H.第一轮传输的慢启动共传输了1+2+4+8+16+32=63个报文段,慢启动进入拥塞避免是在第6轮传输,6+(70-63)=13,故在第13轮传输中发送第70个报文段;
I.慢启动状态下,若检测到三个冗余的ACK,TCP执行一种快速重传并进入快速恢复状态,故cwnd为8/2+3=7,阈值为8/2=4;
J.第16轮:TCP进入慢启动状态,cwnd在第17轮置1,阈值为42/2=21;
第19轮:cwnd值为4,阈值为21;
K.<?第22个轮回的超时事件有影响吗?><?是否基于上一题的条件?>
假设基于上一题的条件,且22轮的超时事件只是为了迎合图,则:
17轮~22轮共传输1+2+4+8+16+21(第22轮达到阈值)=52个报文段;

【TCP拥塞控制算法(TCP congestion control algorithm)学习笔记】相关推荐

  1. TCP 拥塞控制算法 1

    转自:https://mp.weixin.qq.com/s/NIFandX8w-Cynnbl-f2Lwg 拥塞:路由器因无法处理高速到达的流量而被迫丢弃数据信息的现象称为拥塞. 为什么有了流量控制,还 ...

  2. TCP拥塞控制算法BBR源码分析

      BBR是谷歌与2016年提出的TCP拥塞控制算法,在Linux4.9的patch中正式加入.该算法一出,瞬间引起了极大的轰动.在CSDN上也有众多大佬对此进行分析讨论,褒贬不一.   本文首先对源 ...

  3. TCP拥塞控制算法纵横谈-Illinois和YeAH

    周五晚上,终于下了雨,所以也终于可以乱七八糟多写点松散的东西了... 方法论问题. 这个题目太大以至于内容和题目的关联看起来有失偏颇,不过也无所谓,既然被人以为"没有方法论"而鄙视 ...

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

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

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

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

  6. Google's BBR TCP拥塞控制算法的四个变速引擎

    台风海马来临前的两个几乎通宵的夜晚,我用一篇关于BBR算法的文章的迎接海马!公司在昨晚响应深圳市停工,停课号召,发布了在家办公(请注意,不是放假...)通知...其实吧,我觉得停电才是王道,你觉得呢? ...

  7. TCP拥塞控制算法(Tahoe/Reno/Newreno)

    TCP拥塞控制算法(Tahoe/Reno/Newreno) 前言 TCP(Transmission Control Protocol),传输控制协议,是目前__Internet__上最重要的一个通信协 ...

  8. Linux TCP拥塞控制算法原理解析

    这里只是简单梳理TCP各版本的控制原理,对于基本的变量定义,可以参考以下链接: TCP基本拥塞控制http://blog.csdn.net/sicofield/article/details/9708 ...

  9. 让人很容易误解的TCP拥塞控制算法

    正文 很多人会认为一个好的TCP拥塞控制算法会让连接加速,这种观点是错误的,恰恰相反,所有的拥塞控制算法都是为了TCP可以在贪婪的时候悬崖勒马,大多数时候,拥塞控制是降低了数据发送的速度. 我在本文中 ...

  10. Tcp拥塞控制算法入门:分类及介绍( Reno bic Cubic vegas Bbr)

    目录 一.Tcp拥塞控制算法的发展历程及种类 二.Reno算法 三.bic算法.Cubic算法 3.1bic算法 3.2Cubic算法 四.vegas算法 五.Bbr算法 本文介绍了一些基础的拥塞控制 ...

最新文章

  1. 具有不同字体的列表框
  2. 一张图解释Linux的目录结构
  3. Python 延迟初始化(lazy property)
  4. 【英语】英语学习之道
  5. 计算机语言恢复,win10系统找回消失不见语言栏的恢复方法
  6. python爬虫怎么挣钱-月薪45K的Python爬虫工程师告诉你爬虫应该怎么学,太详细了!...
  7. 手写一个类django框架
  8. JQuery Dialog(转)
  9. Markdown文档常用字体及颜色设置
  10. YY一下淘宝商品模型
  11. 基于AD7705的32路信号采集软件设计
  12. 将Shapefile数据导入Winbugs的方法
  13. Teradata使用笔记(2)--数据库操作
  14. linux leanote云笔记搭建
  15. 【12月英语——快乐中学习】
  16. python幂指数_幂指数 python
  17. cli命令行配置路由器_[企业路由器应用] 命令行—登陆
  18. 我放弃了年薪20万offer,挑战自动化测试(一)
  19. 计算机维护费可以跨年吗,税控维护费跨年抵扣分录怎么做
  20. 网站性能测试:使用Selenium测试网页加载时间

热门文章

  1. 用尽量简单地话,一次讲明白傅里叶级数(FS)、傅里叶变换(FT)、离散时间傅里叶变换(DTFT)、离散傅里叶级数(DFS)、离散傅里叶变换(DFT)以及它们之间的联系和区别。
  2. ❌ Exiting due to GUEST_PROVISION: Failed to cache ISO: unable to cache ISO:
  3. 杨森翔人日诗词;人日书法
  4. python 协程加多线程下载asyncio、ThreadPoolExecutor
  5. 菜鸟日记(yzy):初见opencMS
  6. Android图像处理(五)镜像、倒影、drawBitmapMesh实现旗帜飘扬效果
  7. webStorm下载旧版本
  8. cmd批量修改文件名 增加文字_cmd命令批量修改文件名或后缀名
  9. (附源码)springboot宠物管理系统 毕业设计121654
  10. 《关键信息基础设施安全保护条例》来了!完善网络安全体系 华云数据构筑云上安全屏障