TCP的拥塞控制原理是什么?[面试7.0]
TCP发送方有一个拥塞窗口,若网络中发生超时重传就表示拥塞,当没有拥塞时拥塞窗口的值会增长,若发生了拥塞则拥塞窗口值会缩小
TCP发送数据时,先将发送窗口的值设置为拥塞窗口,先进行慢开始算法:有两个值,1个是拥塞窗口大小,2是慢开始阈值,发送数据后,接收方返回确认报文,这时发送方将拥塞窗口大小成指数增长,增加到慢开始阀值时采用拥塞避免算法
拥塞避免算法:每个传输轮次,拥塞窗口的值线性加一,若传输报文有丢失,会导致发送方超时重传,一旦发生超时重传就会将拥塞窗口设置为1,并更新慢开始阀值为当前拥塞时拥塞窗口值的一半,然后重新执行慢开始算法
有时发送的报文可能是在网络中丢失了,但实际上并未发生拥塞,由于重传导致重新执行慢开始,这样会降低传输效率,所以又出现一种算法:快重传:接收方即便有收到失序的报文段,也要立即发送确认,当发送方当3次收到接收方的重复确认,就将相应的报文段立即重传,而不是等待该报文段的超时重传计时器去重传,重传后启用快恢复算法
快恢复:发送方的拥塞窗口和慢开始阀值都调整为当前拥塞窗口的一半(而不是将拥塞窗口值设置为1),然后开始执行拥塞避免算法,也有的将拥塞窗口值设置为新慢开始阀值+3(既然有3个重复确认就表示3个数据报文段离开了网络,不再消耗网络资源,这时可以加3以扩大一点拥塞窗口值)