(五) TCP 协议之拥塞控制

233 阅读2分钟

在某段时间,如果对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。

拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。

TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

发送窗口大小=min(拥塞窗口,接收窗口)发送窗口大小 = min (拥塞窗口, 接收窗口)

拥塞控制算法

TCP 的拥塞控制采用了四种算法,即 慢启动(从小到大) 、 拥塞避免(缓慢增加) 、快重传快恢复

慢启动

TCP 连接建立时或者重传超时导致的丢包时,会执行慢启动。因为在传输的初始阶段,并不知道网络的传输能力,防止大量数据注入网络而导致拥塞。慢启动是指数级的增长。

拥塞避免

在慢启动之后,达到一个阈值,说明有更多可以用的传输资源。为了避免 TCP 占用太多的传输资源而影响其他的连接,TCP 会进入拥塞避免的阶段,缓慢增加拥塞窗口的值。拥塞避免是线性级的增长。

快重传

快重传时根据收到重复的 ACK 来判断丢包并启动重传,而不必等待重传计时器超时。

快重传和快恢复,没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。如果接收方接收到一个不按顺序的数据段,它会立即给发送方发送一个重复确认。如果发送方接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段,不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。