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

本文详细介绍了TCP的拥塞控制机制,包括慢启动、拥塞避免和快速恢复三个主要部分。通过设置拥塞窗口cwnd和阈值ssthresh,TCP动态调整发送速率以应对网络拥塞。在丢包事件发生时,TCP会根据超时或冗余ACK来调整策略,快速恢复策略能更快地适应网络状况,避免慢启动阶段的大量数据发送。
摘要由CSDN通过智能技术生成

【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并进入慢启动阶段,而是跳过慢启动阶段直接进入拥塞避免状态。

引用自《计算机网络·自顶向下方法》(第七版)(詹姆斯·F·库罗斯 著)(陈鸣 译)
根据以上理解,可以得知:
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
引用自《计算机网络·自顶向下方法》(第七版)(詹姆斯·F·库罗斯 著)(陈鸣 译)
答案:
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个报文段;

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狱典司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值