网络原理考点之拥塞控制

如2019年10月04741网络原理第44题:

答:有些印象,需要增强记忆。

1)SA应该是慢启动 BC快速恢复 FG慢启动

2)AC,是收到三次重复ACK E是超时未收到 G收到正确的回复

3)阀值一样

4)是

又如2018年10月

答:

1、16MSS

2、0~4 17~20

3、4~10  11~16 20~25

4、收到三次重复的ACK,拥塞窗口阀值设置为当前拥塞窗口一半,即11MSS,拥塞窗口由22MSS变为11MSS。

5、超时,拥塞窗口阀值置为当前拥塞窗口一半,即8MSS,拥塞窗口大小置为1MSS

TCP协议有两个比较重要的控制算法,一个是流量控制,另一个就是阻塞控制。

TCP协议通过滑动窗口来进行流量控制,它是控制发送方的发送速度从而使接受者来得及接收并处理。而拥塞控制是作用于网络,它是防止过多的包被发送到网络中,避免出现网络负载过大,网络拥塞的情况。

拥塞控制与流量控制有什么不同??

1)流量控制是发送方根据接收方的接收能力,包括接收缓存、处理速度等,调整数据发送速率和数据量,以避免接收方被数据淹没;拥塞则是根据网络通过能力或网络拥挤程度,来调整发送速率和数据量。

2)拥塞控制的任务是确保网络能够承载所达到的流量,而流量控制只与特定的发送方和特定的接收方之间的点到点流量有关。

 

拥塞算法需要掌握其状态机和四种算法。拥塞控制状态机的状态有五种,分别是Open,Disorder,CWR,Recovery和Loss状态。四个算法为慢启动,拥塞避免,拥塞发生时算法和快速恢复。

其中状态机的部分,教材是没有涉及的,作为编程的基础来看待吧。

状态机:

当发送方收到一个Ack时,Linux TCP通过状态机(state)来决定其接下来的行为,是应该降低拥塞窗口cwnd大小,或者保持cwnd不变,还是继续增加cwnd。如果处理不当,可能会导致丢包或者超时。

1 Open状态

Open状态是拥塞控制状态机的默认状态。这种状态下,当ACK到达时,发送方根据拥塞窗口cwnd(Congestion Window)是小于还是大于慢启动阈值ssthresh(slow start threshold),来按照慢启动或者拥塞避免算法来调整拥塞窗口。

2 Disorder状态d(英文为紊乱)

当发送方检测到DACK(重复确认)或者SACK(选择性确认)时,状态机将转变为Disorder状态。在此状态下,发送方遵循飞行(in-flight)包守恒原则,即一个新包只有在一个老包离开网络后才发送,也就是发送方收到老包的ACK后,才会再发送一个新包。

3 CWR状态

发送方接收到一个拥塞通知时,并不会立刻减少拥塞窗口cwnd,而是每收到两个ACK就减少一个段,直到窗口的大小减半为止。当cwnd正在减小并且网络中有没有重传包时,这个状态就叫CWR(Congestion Window Reduced,拥塞窗口减少)状态。CWR状态可以转变成Recovery或者Loss状态。

4 Recovery状态 (英文为复苏)

当发送方接收到足够(推荐为三个)的DACK(重复确认)后,进入该状态。在该状态下,拥塞窗口cnwd每收到两个ACK就减少一个段(segment),直到cwnd等于慢启动阈值ssthresh,也就是刚进入Recover状态时cwnd的一半大小。 发送方保持 Recovery 状态直到所有进入 Recovery状态时正在发送的数据段都成功地被确认,然后发送方恢复成Open状态,重传超时有可能中断 Recovery 状态,进入Loss状态。

5 Loss状态

当一个RTO(重传超时时间)到期后,发送方进入Loss状态。所有正在发送的数据标记为丢失,拥塞窗口cwnd设置为一个段(segment),发送方再次以慢启动算法增大拥塞窗口cwnd。

Loss 和 Recovery 状态的区别是:Loss状态下,拥塞窗口在发送方设置为一个段后增大,而 Recovery 状态下,拥塞窗口只能被减小。Loss 状态不能被其他的状态中断,因此,发送方只有在所有 Loss 开始时正在传输的数据都得到成功确认后,才能退到 Open 状态。

四大算法:本题着重考察点

先从教材了解下拥塞控制两种策略:拥塞控制主要用在网络层和传输层。本题其实是传输层,网络层拥塞控制策略见扩展。

一种是拥塞预防可采用流量整形技术,规范主机向网络中发送数据的流量,预防拥塞的发生。

另一种拥塞消除,基于某种拥塞检测机制。检测机制分为基于拥塞状态反馈,如网络层的拥塞控制,适用于虚电路网络如ATM网络的状态反馈,警告位,丢弃分组等。

无需拥塞状态反馈,其实就是TCP拥塞控制方法。主要在端系统中,报文段超时或(3次重复确认),以此判断拥塞。

如2018年4月

17、为预防拥塞在网络的传输层上可采取的策略是()

A、分组排队策略                    B、分组丢弃策略

C、选择路由算法                    D、确定超时策略

分析:

c肯定不对,路由选择应该是网络层的事

分组排队,立刻想到滑动窗口机制,属于流量控制

分组丢弃,属于网络层拥塞控制,详见扩展里的负载脱落

只有确定超时,属于传输层的拥塞控制,并且也可以从状态机中Loss状态得到印证。传输层,应该想到慢启动等拥塞控制算法。这样才能排除干扰,找到正确答案。

 

TCP的拥塞控制算法:

慢热启动算法 – Slow Start

所谓慢启动,也就是TCP连接刚建立,一点一点地提速,试探一下网络的承受能力,以免直接扰乱了网络通道的秩序。

慢启动算法:

1) 连接建好的开始先初始化拥塞窗口cwnd大小为1,表明可以传一个MSS大小的数据。 2) 每当收到一个ACK,cwnd大小加一,呈线性上升。 3) 每当过了一个往返延迟时间RTT(Round-Trip Time),cwnd大小直接翻倍,乘以2,呈指数让升。 4) 还有一个ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”(后面会说这个算法)

注:MMS:指最大段长度

拥塞避免算法 – Congestion Avoidance

如同前边说的,当拥塞窗口大小cwnd大于等于慢启动阈值ssthresh后,就进入拥塞避免算法。算法如下:

1) 收到一个ACK,则cwnd = cwnd + 1 / cwnd   (单位是基于MMS)           2) 每当过了一个往返延迟时间RTT,cwnd大小加一。

过了慢启动阈值后,拥塞避免算法可以避免窗口增长过快导致窗口拥塞,而是缓慢的增加调整到网络的最佳值。

拥塞状态时的算法

一般来说,TCP拥塞控制默认认为网络丢包是由于网络拥塞导致的,所以一般的TCP拥塞控制算法以丢包为网络进入拥塞状态的信号。对于丢包有两种判定方式,一种是超时重传RTO[Retransmission Timeout]超时,另一个是收到三个重复确认ACK。

超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个计时器,在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,直到发送成功为止。

但是如果发送端接收到3个以上的重复ACK,TCP就意识到数据发生丢失,需要重传。这个机制不需要等到重传定时器超时,所以叫 做快速重传,而快速重传后没有使用慢启动算法,而是拥塞避免算法,所以这又叫做快速恢复算法

超时重传RTO[Retransmission Timeout]超时,TCP会重传数据包。TCP认为这种情况比较糟糕,反应也比较强烈:

  • 由于发生丢包,将慢启动阈值ssthresh设置为当前cwnd的一半,即ssthresh = cwnd / 2.
  • cwnd重置为1
  • 进入慢启动过程

最为早期的TCP Tahoe算法就只使用上述处理办法,但是由于一丢包就一切重来,导致cwnd又重置为1,十分不利于网络数据的稳定传递。

所以,TCP Reno算法进行了优化。当收到三个重复确认ACK时,TCP开启快速重传Fast Retransmit算法,而不用等到RTO超时再进行重传:

  • cwnd大小缩小为当前的一半
  • ssthresh设置为缩小后的cwnd大小
  • 然后进入快速恢复算法Fast Recovery。

快速恢复算法 – Fast Recovery

TCP Tahoe是早期的算法,所以没有快速恢复算法,而Reno算法有。在进入快速恢复之前,cwnd和ssthresh已经被更改为原有cwnd的一半。快速恢复算法的逻辑如下:

  • cwnd = cwnd + 3 * MSS,加3 * MSS的原因是因为收到3个重复的ACK。
  • 重传DACKs指定的数据包。
  • 如果再收到DACKs,那么cwnd大小增加一。
  • 如果收到新的ACK,表明重传的包成功了,那么退出快速恢复算法。将cwnd设置为ssthresh,然后进入拥塞避免算法。

如图所示,第五个包发生了丢失,所以导致接收方接收到三次重复ACK,也就是ACK5。所以将ssthresh设置当当时cwnd的一半,也就是6/2 = 3,cwnd设置为3 + 3 = 6。然后重传第五个包。当收到新的ACK时,也就是ACK11,则退出快速恢复阶段,将cwnd重新设置为当前的ssthresh,也就是3,然后进入拥塞避免算法阶段。

扩展:网络层拥塞控制策略

1、流量感知

2、准入控制:

3、流量调节:

需要解决两个基本问题:

1、网络结点如何够感知网络已经发生了拥塞呢?

对路由器而言通过输出端口排队延迟来对网络拥塞状况进行感知。

只用排队延迟来估计,很有可能会误判,一般通过过去一段时间内的排除延迟以及当前的瞬时排队延迟的加权组合,来对当前的排队延迟进行估计,从而对网络拥塞状况进行较为准确的评判。

2、背压

 

4、负载脱落

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

guangod

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

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

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

打赏作者

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

抵扣说明:

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

余额充值