2021-08-16

本文详细介绍了TCP的拥塞控制策略,包括慢开始、拥塞避免算法,以及快重传和快恢复机制。通过慢开始算法逐渐增大发送窗口,当检测到网络拥塞时,使用拥塞避免算法以更缓慢的速度增加窗口。快重传则允许接收方立即发送重复确认,一旦发送方收到三个重复确认,会立即重传未确认报文段,而快恢复则调整门限并执行拥塞避免,以避免网络拥堵。
摘要由CSDN通过智能技术生成

拥塞控制

实现拥塞控制的几种方法:慢开始、拥塞避免、快重传、快恢复。
慢开始一般和拥塞避免配合使用,快重传配合快恢复,因此以下将分为两大块来描述
1.慢开始与拥塞避免
首先,发送方如何知道网络发生拥塞?:当发方(发送数据后)设置的超时计时器时间已到 还未收到确认,即可认为网络发生了拥塞。
AIMD算法:加法增大乘法减小
(1)慢开始:
思想:由小到大逐渐增大发送窗口数值,即增大拥塞窗口数值。刚开始设置cwnd=一个最大报文段MSS值,每收到一个对新报文段的确认后,将窗口值增加至多一个MSS值,逐渐增大,使分组注入到网络的速率更合理。
即假设初始cwnd=1,每经过一个RTT(一个轮次)时间,窗口值加倍。
例如:
起始(发送窗口)cwnd=1,发方发送M1报文段,收方收到后向发方发送确认,发方收到确认后cwnd=1+1=2。再发送时,可以发送M2、M3两个报文段,收到两个确认后,修改窗口值cwnd=2+2=4(每收到一个确认,窗口值加一),下次再发可以发四个报文段,收到确认继续修改窗口值cwnd=4+4=8……依次进行下去,当某个时间发送了数据后,等待不到收方的确认报文,则可以认为网络发生了拥塞。
此时,将慢开始门限ssthresh的值设置为*当前发生拥塞的窗口值的一半***(但不能小于2),并将cwnd发送窗口设置为1,开始执行慢开始算法,当cwnd值再次达到门限值时,此时不继续进行慢开始。而是开始执行拥塞避免算法,每经过一个轮次,cwnd值加1。
慢开始门限:ssthresh状态变量:
cwnd < ssthresh时,执行慢开始算法 **
cwnd > ssthresh时,执行拥塞避免算法
cwnd = ssthresh时,可以执行慢开始算法,也可以执行拥塞避免
(2)拥塞避免算法:
思想:让拥塞窗口cwnd缓慢增大,即每经过一个RTT(往返时间)(不管发了几个报文段),就将发送方的拥塞窗口cwnd加1,而不是加倍。cwnd按线性增长,增长速率比慢开始缓慢的多。
总结:无论慢开始还是拥塞避免,当判断出网络发生拥塞,则将慢开始门限设置为当前发生拥塞的窗口值的一半,并将cwnd值重置为1,再从慢开始算法执行……
2.快重传和快恢复
(1)快重传算法:
首先要求接收方每收到一个失序报文段后就立即发出重复确认(即前一次已经确认过的最后一个报文段)。
例:接收方收到了M1、M2,并且已经确认。没有收到M3,但收到了M4,M4即为
失序报文段
,此时不能确认M4,而应立即重复确认M2,再收到M5、M6,又发了两个M2的重复确认。即表示发送方已经收到了4次M2的确认,最后三次都为重复确认
快重传算法规定,发方只要一连收到3个重复确认,就应当立即重传对方未收到的报文段M3,而不必等M3设置的重传计时器到期。发方能尽早重传未被确认报文段,因此采用快重传后可使整个网络的吞吐量提高。
(2)快恢复算法:
①当发送方接收到3个重复确认,就将执行“乘法减小”,把慢开始门限ssthresh设置为当前窗口值减半。为了预防发生拥塞,但接下来不执行慢开始。
②发方认为网络可能未发生拥塞(因为一连发好几个报文被收方收到并能发送重复确认),不执行慢开始,所以cwnd也≠1,而将cwnd设置为慢开始门限ssthresh(减半后)的数值,开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢线性增大。
:接收方设定自己的rwnd,并将其写入TCP首部中的窗口字段,传送给对方。所以接收窗口又称为通知窗口,
发送方窗口的上限值=Min[rwnd,cwnd]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值