TCP拥塞控制

如果网络出现拥塞, 那么分组会丢失. 那么如果发送方继续重传, 就会导致网络拥塞程度更高. 因此当网络出现拥塞的时候, 应当控制发送的速率. 这点和流量控制相似, 但是流量控制是为了让接收方能够来得及接收, 拥塞控制是为了降低这个网络的拥塞程度.

TCP用四种算法来进行拥塞控制: 慢开始, 拥塞避免, 快重传, 快恢复.

  1. 慢开始

    发送最初是慢开始, 令cwnd = 1, 只能发送一个报文段. 收到确认后cwnd加倍.

  2. 拥塞避免

    为了避免cwnd增长过大, 设置慢开始门限ssthresh, 当cwnd >= ssthresh, 进入拥塞避免, 每个轮次cwnd+1.

    如果出现超时, ssthresh = cwnd / 2, cwnd = 1, 重新进行慢开始.

  3. 快重传

    在接收方, 要求每次接收到报文段都应该对最后一个已收到的有序报文进行确认. 例如已经收到了M1和M2, 此时收到了M4, 应当发送对M2的确认.

    在发送方, 如果收到了三个重复(序号)确认, 那么就可以知道下一个报文段丢失, 此时进行快重传, 立即重传下一个报文段.

  4. 快恢复

    这种情况, 只是丢失个别报文段, 而不是网络拥塞. 因此执行快恢复, 令ssthresh = cwnd / 2. cwnd = ssthresh. 直接进入拥塞避免.