什么是拥塞控制?

TCP拥塞控制原理:慢启动、拥塞避免、快重传、快启动 原创

一、为何要进行拥塞控制?

两台主机在传输数据包的时候,如果发送方迟迟没有收到接收方反馈的ACK,那么发送方就会认为它发送的数据包丢失了,进而会重新传输这个丢失的数据包。然而实际情况有可能此时有太多主机正在使用信道资源,导致网络拥塞了。重传数据浪费了资源,所以要进行拥塞控制。发送发不知道一次发多少数据合适,所以设置一个拥塞窗口。

二、如何知道网络的拥塞情况?

确定拥塞窗口的方法:1、第一次发送一个,如果没有拥塞,第二次两个,一个一个增加,但增加速度缓慢。2、第二次成倍数增长,但是增长速度太快,不精确。将两种方法结合起来前期指数增长,到达阈值之后,就以一个一个线性的速度来增长。我们也把指数增长阶段称之为慢启动,线性增长阶段称之为拥塞避免

三、到了瓶颈值之后怎么办?

无论是指数增长还是一个一个增长,最终肯定会出现超时事件,总不可能无限增长吧。当出现超时事件时,我们就认为此时网络出现了拥塞了,不能再继续增长了。我们就把这个时候的N的值称之为瓶颈值吧,用MAX 这个字母来代替吧,即最大值。

当达到最大值MAX之后,我们该怎么办呢?
当到达最大值之后我们采取的策略是这样的:
我们就回到最初的最初的状态,也就是说从1,2,4,8…..开始,不过这个时候我们还会把ssthresh调小,调为MAX值的一半,即ssthresh = MAX / 2。(倒回去重新线性增长确定,精确阈值)

四、超时事件就一定是网络拥塞?

超时事件发送不一定是网络出现了拥堵?有可能是因为某个数据包出现了丢失或者损害了,导致了这个数据包超时事件发生了

为了防止这种情况,我们是通过冗余 ACK来处理的。我们都知道,数据包是有序号的,如果A给B发送M1, M2, M3, M4, M5…N个数据包,如果B收到了M1, M2, M4….却始终没有收到M3,这个时候就会重复确认M2,意在告诉A,M3还没收到,可能是丢失
 

当A连续收到了三个确认M2的ACK,且M3超时事件还没发生。A就知道M3可能丢失了,这个时候A就不必等待M3设置的计时器到期了,而是快速重传M3。并且把ssthresh设置为MAX的一半,即ssthresh = MAX/2,但是这个时候并非把控制窗口N设置为1,而是让N = ssthresh,N在一个一个增长。我们也把这种情况称之为快速恢复

转载于https://mp.weixin.qq.com/s/hoQ6JdNiEByjwaeUKCYwQQ

做了简单修改

发布了212 篇原创文章 · 获赞 40 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/dujuancao11/article/details/105195488