TCP拥塞控制机制回顾
在分析Low-Rate DoS攻击之前,我们先回顾一下TCP的拥塞控制原理。TCP协议采用滑动窗口和差错控制机制实现端到端的流量控制,在实际应用中,这两种机制和其他一些措施结合使用,以达到拥塞检测、拥塞避免、拥塞恢复的目的。这些措施包括:RTT方差估计、指数RTO退避、Karn算法、慢启动、拥塞控制、快速重传、快速恢复等。这些名词还能记得多少;-)没关系,接下来会顺带解释这些名词的。
TCP的拥塞控制机制的主要作用是使TCP连接在网络发生拥塞时退避(back off),也就是说TCP源端会对网络发出的拥塞信号(congestion notification)如丢包、重复的ACK等,作出响应通过自适应的调整发送端窗口的大小,使网络链路达到最有效的利用。
在拥塞控制机制下,可将链路状态分为三种情况:慢启动状态、超时重传状态和稳定状态。其中标准TCP稳定状态下主要采用加性增加乘性减少AIMD算法和快速重传/快速恢复算法。
慢启动状态
当建立新的TCP连接或者连接从超时中恢复时,链路进入慢启动状态。拥塞窗口(Congestion Window, cwnd)开始设置为一个最大报文段MSS,每接收到一个ACK确认,cwnd就增加一倍,这样cwnd就随着往返时间(Round Trip Time, RTT)呈指数级增长。当cwnd增长到慢启动阈值ssthresh时,链路进入稳定状态,cwnd按线性规律增长。
超时重传状态
如果TCP源端发现其设置的超时重传定时器超时,即认为网络发生了严重拥塞(因为通常传输引起的数据包损坏和丢失是小概率事件)。链路进入超时重传状态,慢启动阈值ssthresh被设置为当前cwnd的一半,重传丢失的数据包,且cwnd被设置为1,链路重新进入慢启动状态。为了获得更好的性能,RFC 2988建议TCP流的RTO的最小值为1s,而且每经历一次超时就增加一倍(RTO指数退避)。
稳定状态
