通俗易懂的TCP拥塞控制详解

接收端窗口 rwnd( receive window):接收端根据其目前接收缓存大小所许诺的最新的窗口值,反映了接收端的容量。
拥塞窗口 cwnd (congestion window):发送端根据自己估计的网络拥塞程度而设置的窗口值,反映了网络的当前容量。
发送窗口 swnd(send window):略

四个算法:慢启动,拥塞避免,快重传,快恢复

1.慢启动
初始:设置cwnd = 1
在每收到一个对新的报文段的确认后,cwnd加倍,即1,2,4,8…
直到cwnd达到阈值ssthresh(slow start threshhold)

2.拥塞避免
当 cwnd < ssthresh 时,使用慢开始算法
当 cwnd >= 时,使用拥塞避免算法

ssthresh = max( 2 , swnd / 2 ) ;
cwnd = 1 ;

无论在慢启动还是在拥塞避免,只要发送方判断网络出现拥塞(根据是没有按时收到确认),就要把慢启动门限ssthresh设置为出现拥塞时的发送窗口的一半(但不能小于2)。然后把拥塞窗口cwnd设置为1,执行慢启算法。

3.快重传
首先要求接收方每收到一个失序报文段后立即发送重复确认。
发送方只要重复收到三个重复确认就应立即重传对方尚未收到的报文。
如下图,发送方收到连续3个对 M 2 M_2 M2的重复确认立即重传 M 3 M_3 M3.
在这里插入图片描述
快重传并非取消重传计数器,而是在某些情况下可更早地重传丢失的报文段。

4.快恢复
1)当发送端收到连续3个重复确认时,就执行“乘法减小”算法,把慢启动门限ssthresh设置为当前拥塞窗口 cwnd 的一半。但接下来不执行慢启动算法。
2)接下来不执行慢启动算法,即cwnd不设置为1,而是将慢启动门限ssthresh设置为当前拥塞窗口 cwnd 的一半。然后开始执行拥塞避免算法(“加法增大”),使得拥塞窗口缓慢线性的增大。
如以cwnd = ssthresh = 4 为基准,如果一次4个没问题,那就一次5个、6个,线性增长直到接收方的极限。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值