拥塞控制(计算机网络)

拥塞控制


拥塞控制通过拥塞窗口来防止过多的数据注入网络,使得网络中的路由器或者链路过载。

  • 拥塞窗口 cwnd 是发送方维护的一个状态变量,根据网络拥塞程度而变化。
  • 发送窗口的值是 Swnd = min ( Cwnd , rwnd ),也就是拥塞窗口和接收窗口中的最小值。
  • 网络中没有出现拥塞, cwnd 增大,出现拥塞, Cwnd 减小。

其实只要发送方没有在规定时间内接收到 ACK 应答报文,也就是发生了超时重传,就会认为网络出现了拥塞。

拥塞控制的算法

  1. 慢启动
  2. 拥塞避免
  3. 拥塞发生
  4. 快速恢复

1.慢启动


慢启动的算法记住一个规则就行:当发送方每收到一个 ACK ,拥塞窗口 cwnd 的大小就会加1。慢启动算法,发包的个数是指数性的増长。1->2->4->8->2的次方。
有一个慢启动门限 ssthresh 状态变量:

  1. 当 cwnd < ssthresh 时,使用慢启动算法。
  2. 当 Cwnd >= ssthresh 时,就会使用拥塞避免算法。

2.拥塞避免算法

那么进入拥塞避免算法后,它的规则是:发包个数按线性增长(一个一个向上加)。
拥塞避免算法就是将原本慢启动算法的指数增长变成了线性增长,还是增长阶段,但是增长速度缓慢了一些。
随着发包量的逐渐加大,网络就会慢慢进入了拥塞的状况了,于是就会出现丟包现象(即拥塞发生),这时就需要对丟失的数据包进行重传。当触发了重传机制,也就进入了拥塞发生算法。


3.拥塞发生


发生拥塞,进行数据重传2种方式:

  1. 超时重传
  2. 快速重传

(1)发生超时重传的发生算法:
这个时候, ssthresh 和 cwnd 的值会发生变化
1. ssthresh 设为 Cwnd /2。
2. cwnd 重置为1。

突然回到慢启动导致网络卡顿。

(2)快速重传拥塞算法:
 TCP 认为这种情况不严重,因为大部分没丢,只丢了一小部分,则 ssthresh 和 Cwnd 变化如下:
1. cwnd = Cwnd /2,也就是设置为原来的一半2. ssthresh = Cwnd 
3.进入快速恢复算法


4.快速恢复

 

快速重传和快速恢复算法一般同时使用,快速恢复算法是认为,还能收到3个重复 ACK 说明网络也不那么糟糕,所以没有必要像 RTO 超时那么强烈。
进入快速恢复:

  1. 拥塞窗口 cwnd = Ssthresh +3(3的意思是确认有3个数据包被收到了);2.重传丢失的数据包;
  2. 如果再收到重复的 ACK ,那么 Cwnd 增加1;
  3. 如果收到新数据的 ACK 后,把 Cwnd 设置为第一步中的 ssthresh 的值,原因是该 ACK 确认了新的数据,说明从 duplicated ACK 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态;

而是还在比较高的值,后续呈线性増长。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IABQL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值