|
知识路径: > 计算机网络原理 > Internet 协议 > 传输层协议 TCP 与 UDP > TCP 拥塞控制策略(含 RED) > TCP拥塞控制 > 拥塞控制的过程 >
|
相关知识点:2个
|
|
|
|
在TCP中,当TCP报文不能按序到达接收方TCP时,接收方TCP就会产生一个重复ACK返回给发送方;发送方收到一个重复ACK后,还不能确定是由于TCP报文丢失还是TCP报文乱序。如果发送方TCP收到3个重复ACK,则意味着是某个TCP报文丢失了,此时发送方TCP不必等待该报文超时,而是立即重传该报文,这就是快速重传。快速重传避免了让发送方TCP必须等待超时后才重传丢失的报文。下图给出了快速重传示意图。
|
|
|
|
|
在上图中,当发送方TCP连续收到3个重复的ACK:301时,发送方TCP立即重传序号为301~400的报文段,而不必等到超时,这就是快速重传。同时,发送方TCP会将拥塞窗口减半以及重传定时器宽度加倍。
|
|
|
但是快速重传之后,发送方TCP不是进入慢启动阶段,而是进入拥塞避免阶段,这就是快速恢复的意思。理由是重复ACK的出现不仅意味着某个报文的丢失,而且意味着在丢失的报文之后还接收到其后的报文,即网络上仍然可以传输报文,发送方TCP认为网络拥塞还不是非常严重,如果这个时候进入慢启动阶段,有点保守,而是应该进入拥塞避免阶段。
|
|
|
下图给出了拥塞避免、慢启动、快速重传及快速恢复4种机制组合在一起的TCP拥塞控制。
|
|
|
|
|
下图给出了一个实际的TCP拥塞控制实例,假定最大拥塞窗口值是32个报文段,则慢启动阈值ssthresh等于16(最大窗口值的一半)。TCP连接刚刚建立时进入慢启动过程,拥塞窗口cwnd从1指数增长到2,到4,到8,直到16(这里假设重传定时器不发生超时);然后进入拥塞避免阶段,这时,拥塞窗口cwnd从16,到17,到18,到19,一直到20(加法增大)。此时,发生重传定时器超时现象,发送方首先将慢启动阈值ssthresh设为当前拥塞窗口cwnd的一半(乘法减小),即等于10,然后进入慢启动过程,即拥塞窗口cwnd又从1开始,接着指数增长到2,到4,到8,直到10,最后进入拥塞避免阶段,开始线性增加到11,到12。此时,连续收到3个重复ACK,于是进行快速重传,之后直接进入拥塞避免阶段而不是慢启动阶段。
|
|
|
|
|
在过去的十几年时间里,TCP拥塞控制经过不断的改进,性能逐渐得到完善,先后提出了多个TCP协议的实现版本。TCP Tahoe是TCP最早的版本,包含了3个最基本的拥塞控制机制:慢启动、拥塞避免、快速重传。TCP Reno在TCP Tahoe的基础上增加了快速恢复机制。TCP NewReno和TCP SACK都考虑了一个发送窗口内有多个报文丢失的情况,TCP NewReno对Reno中的快速恢复算法进行了补充,只有当所有报文都被应答后才退出快速恢复状态;TCP SACK采用“选择性重传”策略。所谓选择性重传是指当接收方发现报文乱序到达接收方时,接收方通过选择性应答策略通知发送方立即发送丢失的报文,而不需要等到发送方超时重传。
|
|
|