zl程序教程

您现在的位置是:首页 >  其他

当前栏目

TCP的拥塞控制

控制TCP 拥塞
2023-09-14 09:06:46 时间

如上图所示很好的显示了TCP拥塞控制的算法流程

发送方的发送窗口=min【拥塞窗口,接收端的接收窗口(该窗口可由接收方在交互中动态调整)】

慢开始:

顾名思义,拥塞窗口以2的x次方进行缓慢的增加,但是在几次缓慢的测试后,窗口大小也因为其增长函数的特性在愈加的增大,当窗口增大到ssthresh的时候就会执行拥塞避免算法

拥塞避免:

拥塞避免还是顾名思义就是防止拥塞,为了防止窗口过大而导致的网络拥塞,此时可以看到窗口的上升函数变成了X,较2的x函数来说,增长的速率降低了很多,可以这么理解一开始进行快速的窗口增长,到了一个ssthresh警告值的时候,窗口的增长就不敢在那么离谱了。当拥塞避免模式下窗口进行增大的时候出现了超时重传,就会将拥塞窗口cwnd变为0,同时将sstresh变为发生拥塞窗口时窗口大小的二分之一。然后再进行慢开始和拥塞避免。

只有慢开始和拥塞避免的问题

如果只要慢开始和拥塞避免,那么主要的问题就是仅将出现超时重传作为网络拥塞的判断依据未免太过单薄,有的时候数据的一次两次的超时重传并不能代表整个网络此时的情况。所以就出现了快重传。

快重传

我们在进行传输的的时候一般会一次性传送多个报文,那么假设此时本轮传输报文数量为4个,那么假设第一个报文就出现了错误,快重传约定即使接收到失序报文也要对已接收报文进行确认,即在快重传模式下不能出现累积确认。那么当第一个报文出现错误后,后续的三个报文被对端接收后会发回重复的三个ack,那么发送方就不会重新进行慢开始,而是将当前窗口大小减少一半,然后继续执行拥塞避免的窗口增大,同时还会立即对缺失的报文进行重传。