TCP拥塞处理

为什么要TCP拥塞控制
网络拥塞:

​ 网络中对某一资源的需求量超过该资源所提供的可用部分,网络性能就会变坏,这种叫做网络拥塞,若出现拥塞不进行控制,随着网络请求的增加会导致吞吐量越来越小,最后会导致吞吐量为0,形成死锁,TCP拥塞控制就是要解决这个问题。

TCP拥塞控制
1、慢开始,拥塞避免

​ 发送方维持一个动态大小的拥塞窗口cwnd(congestion window),假设初始设置慢启动阈值为sstresh16,慢开始起始cwnd为1,服务端返回一个确认报文,每次乘以2,第二次发送2个报文,服务端返回两个确认报文,直到慢启动阈值16为止,开始拥塞避免,每次只加一,服务器返回相同数量的确认报文,直到网络拥塞

怎么确认网络已经拥塞了?

假设24个报文在传输过程中有4个报文丢失,有4个报文重传计时器超时,缺失四个数量的确认报文,表示了网络拥塞,然后把慢启动阈值设为网络拥塞时的cwnd的一半,再重置cwnd为一半执行拥塞避免。(之前的版本是觉察到网络拥塞就再执行慢启动,现在已经废除了)

2、快重传,快恢复

​ 快重传就是让发送方尽快进行重传,在重传计时器超时之前完成重传,假设在发送M3报文后发生了数据报文丢失,没有立即发送确认报文,就发送M4,M5,M6报文,每接收方接收到一次报文,就发送一个确认M3报文,接收到连续三个的确认报文,发送方就知道现在网络是不拥塞的,立即重传M3,接收方回复收到M6,避免重复传,之后从M7开始重新传报文,服务端发送确认M7报文。

​ 快恢复是发送方一但接收三次重复的确认报文,会开始快恢复

1、发送发会把sstresh慢开始门限值设为当前的cwnd拥塞窗口的一半,开始执行避免拥塞算法

2、也有把快速恢复开始时的拥塞窗口cwnd再增大一些


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!