拥塞通常是由于网络中的资源(如路由器、链路)过载而导致的。当网络负载过大,超过其容量范围时,会出现数据包丢失、延迟增加、传输失败等问题,从而影响网络的性能和可靠性,如果发生,数据包丢失TCP就会重传数据,但是一重传就会导致网络的负担更重,产生更多的丢包,恶性循环不断放大。
拥塞控制是计算机网络中重要的一部分,它是为了解决在网络中出现的拥塞现象而采取的一系列技术和策略。拥塞控制的主要目标是确保网络各部分之间的数据流量不超过其承载能力,以维持网络的正常运行和性能稳定。
TCP四种拥塞控制算法:
拥塞窗口控制:
1.慢开始:在开始传输数据时,拥塞窗口大小逐渐增加,直到遇到拥塞发生或达到网络的容量限制,慢开始是指一开始向网络注入的报文段少,并不是指拥塞窗口增长速度慢,慢开始算法拥塞窗口是按指数增长的。
2.拥塞避免:一旦网络出现拥塞,拥塞窗口大小会减小,并根据网络情况动态调整,以避免进一步加剧拥塞,拥塞避免并非指能够完全避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络不容易出现拥塞,拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1而不是加倍,这样拥塞窗口按线性规律缓慢增长。
发送方维持一个叫做拥塞窗口cwnd (congestion window) 的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。 慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。 为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。ssthresh的用法如下:
当cwnd<ssthresh时使用慢开始算法。
当cwnd>ssthresh时改用拥塞避免算法。
当cwnd=ssthresh时慢开始与拥塞避免算法任意。
可以看到慢开始拥塞窗口呈指数型增长达到慢开始门限ssthresh后改用拥塞避免算法拥塞窗口呈线性增长直到发送了超时重传,判断网络可能出现拥塞,此时将慢开始门限ssthresh更新为发生拥塞时的拥塞窗口的一半,然后将拥塞窗口的值减少为1,并重新开始执行慢开始算法,如此往复。
拥塞检测和响应:
3.快重传
接收方:当个发现乱序时,会发送三个连续的重复的上一次的确认信息。
发送方:收到三个连续的重复确认ACK会立即重传ACK标记的下一个编号的数据包。
4.快恢复
当发送方收到三个重复ACK时,触发快重传机制,慢开始门限变为原来的一半,此时触发快恢复拥塞窗口 = 慢开始门限+3,和超时重传触发的不同是,超时重传是把窗口降为1,快重传是降一半+3。
标签:控制,窗口,重传,网络,计算机网络,拥塞,ssthresh,cwnd From: https://blog.csdn.net/weixin_63162063/article/details/140412786