接收端窗口 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个,线性增长直到接收方的极限。