计算机网络自顶向下方法总结3.7TCP拥塞控制
目录
3.7 TCP拥塞控制
TCP使用端到端拥塞控制机制而不是网络辅助的拥塞控制,因为IP层不向端系统提供显示的网络拥塞反馈。
TCP通过发送方感知到的网络拥塞程度来限制其能向连接发送流量的速率,随之也就有了如下三个问题:
- 一个TCP发送方如何限制它向其连接发送流量的速率。
- 一个TCP发送方如何感知从它到目的地之间的路劲上存在拥塞。
- 当发送方感知到端到端的拥塞时,采用何种算法来改变其发送速率。
这部分书中写的非常详细。
TCP发送方拥塞控制机制跟踪一个额外的变量,即拥塞窗口(congestion window)cwnd。发送方中未被确认的数据量不会超过cwnd和rwnd中的最小值,因此可以调整向连接发送数据的速率。
丢失的数据报会引发发送方的丢包事件(超时或收到3个冗余ACK),发送方就认为在发送方到接收方的路劲上出现了拥塞指示。
一个丢失的报文段意味着拥塞,因此当丢失报文段时应当降低TCP发送方的速率。一个确认的报文段指示该网络正在向接收方交付发送方的报文段,因此当对先前未确认报文段的确认到达时,能够增加发送方的速率。
TCP拥塞控制算法(TCP congestion control algorithm):慢启动,拥塞避免,快速恢复。
1.慢启动
在慢启动(slow-start)状态,cwnd以一个MSS开始并且每当传输的报文段首次被确认就增加一个MSS,以指数增长,每个RTT翻一番。下面三种情况会结束慢启动阶段。
- 如果存在超时指示的丢包事件,TCP发送方将cwnd设置为1并重新开始慢启动,并且将慢启动阈值设置为cwnd/2。
- 如果检测到3个冗余的ACK,会执行快速重传,cwnd变为cwnd/2+3,阈值变为cwnd/2,并且进入快速恢复阶段。
- 当cwnd达到慢启动阈值时,进入拥塞避免阶段。
2.拥塞避免
拥塞避免(congestion-avoidance)每个RTT只增加一个MSS。
- 当出现超时时,cwnd被设置为1,阈值被更新为cwnd/2,进入慢启动阶段。
- 当出现接收3个冗余ACK的丢包事件,会执行快速重传,cwnd变为cwnd/2+3,阈值变为cwnd/2,接下来进入快速恢复状态。
3.快速恢复
当丢失报文段的一个ACK到达时,在降低cwnd等于阈值后进入拥塞避免状态。如果出现超时事件和慢启动和拥塞控制的情况一样。
详细内容见书中,图3.52很清楚的展示了这个过程。
简单的来说当超时时将cwnd设置为1,阈值设置为cwnd/2,当收到3个冗余的ACK时,将cwnd设置为cwnd/2+3,阈值设置为cwnd/2。
忽略慢启动阶段,假定丢包由3个冗余ACK而不是超时指示,TCP的拥塞控制是:每个RTT内cwnd线性增加1MSS,出现3个冗余ACK时cwnd减半。所以TCP拥塞控制常常被称为加性增,乘性减(Additive-Increase Multiplicative-Decrease,AIMD)拥塞控制方式。
TCP发送数据的速率是拥塞窗口与当前RTT的函数,当窗口长度为w字节,且当前往返时间是RTT秒时,则TCP发送速率大约是w/RTT。因为慢启动阶段事件非常短,一般忽略,所以一条连接的平均吞吐量=。
3.7.1 公平性
TCP趋于再竞争的多条TCP连接之间提供一段瓶颈链路带宽的平等分享,连接的带宽最终将沿着平等带宽共享曲线波动,详细见书中的例子。具有较小RTT的连接能够再链路空闲时更快地抢到可用带宽,因而将比那些具有较大RTT的连接享用更高的吞吐量。
UDP没有拥塞控制,有可能压制TCP流量。
3.7.2 明确拥塞通告:网络辅助拥塞控制
一个TCP发送方不会收到来自网络层的明确拥塞指示,而是通过观察分组丢失来推断拥塞。对于IP和TCP的扩展方案允许网络明确向TCP发送方和接收方发出拥塞信号,这种形式的网络辅助拥塞控制称为明确拥塞通告(Explicit Congestion Notification,ECN)。