在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中。拥塞控制采用了四个算法:慢开始、拥塞避免、快重传和快恢复
传输过程中发送方维护一个叫做拥塞窗口的状态变量(cwnd),其值取决于网络拥塞程度,并动态变化。发送方将拥塞窗口作为发送窗口,即swnd=cwnd。传输时还有个慢开始门限ssthresh状态变量。
当cwnd<ssthresh时,使用慢开始,
当cwnd>ssthresh时,停止使用慢开始改用拥塞避免,
当cwnd=ssthresh,既可以使用慢开始也可以使用拥塞避免算法。
拥塞控制的全流程:
慢开始:
1)连接建好的开始先初始化发送方cwnd = 1,swnd=cwnd=1,表明可以传一个MSS(最大报文段长度)大小的数据。
2)每当收到接收方对新的数据报文段(重复的不算)的一个ACK,cwnd++;
3)每当过了一个RTT(数据报往返时间),cwnd = cwnd*2; 呈指数让升
4)当cwnd >= ssthresh时,就会进入“拥塞避免算法”
流程:
拥塞避免:
当cwnd = ssthresh时,进入拥塞避免算法。每个传输轮次(RTT)cwnd只能线性加一,而不是像慢开始一样指数增长。
当网络发生拥塞时,把ssthresh值更新为拥塞前ssthresh的一半,cwnd重新设置为1,然后再执行慢开始算法。
快重传:
快重传要求接收方在收到一个失序的报文段后就立即发出重复确认,而不是等到自己发送数据时捎带确认。
如果发送机接收到三个重复确认,它会立即重传丢失的数据段,而不是等该报文段的超时重传计时器超时再重传。
快恢复:
发送方一旦收到3个重复确认,就知道丢失了个别的报文段。于是不启动慢开始,而是执行快恢复算法
发送方将慢开始门限ssthresh值和拥塞窗口cwnd调整为当前窗口cwnd的一半,开始执行拥塞避免算法。也有的实现是将cwnd设置成ssthresh+3*MSS(3的意思是确认有3个数据包被收到了)
今天的文章TCP拥塞控制过程分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/7371.html