TCP拥塞控制四个主要过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TCP 拥塞控制四个主要过程
1 / 1 TCP 拥塞控制四个主要过程(如图(a )和(b )所示)简要介绍如下:
图(a ):慢启动和拥塞避免 图(b ):快速重传和快速恢复
1. 慢启动阶段:早期开发的TCP 应用在启动一个连接时会向网络中发送大量的数据包,这样
很容易导致路由器缓存空间耗尽,网络发生拥塞,使得TCP 连接的吞吐量急剧下降。

由于TCP 源端无法知道网络资源当前的利用状况,因此新建立的TCP 连接不能一开始就发送大量数据,而只能逐步增加每次发送的数据量,以避免上述现象的发生。

具体地说,当建立新的TCP 连接时,拥塞窗口(congestion window ,cwnd )初始化为一个数据包大小。

源端按cwnd 大小发送数据,每收到一个ACK 确认,cwnd 就增加一个数据包发送量,这样cwnd 就将随着回路响应时间(Round Trip Time ,RTT )呈指数增长,源端向网络发送的数据量将急剧增加。

事实上,慢启动一点也不慢,要达到每RTT 发送W 个数据包所需时间仅为RTT×logW 。

由于在发生拥塞时,拥塞窗口会减半或降到1,因此慢启动确保了源端的发送速率最多是链路带宽的两倍。

2. 拥塞避免阶段:如果TCP 源端发现超时或收到3个相同ACK 副本时,即认为网络发生了拥
塞(主要因为由传输引起的数据包损坏和丢失的概率很小(<<1%))。

此时就进入拥塞避免阶段。

慢启动阈值(ssthresh )被设置为当前拥塞窗口大小的一半;如果超时,拥塞窗口被置1。

如果cwnd>ssthresh ,TCP 就执行拥塞避免算法,此时,cwnd 在每次收到一个ACK 时只增加1/cwnd 个数据包,这样,在一个RTT 内,cwnd 将增加1,所以在拥塞避免阶段,cwnd 不是呈指数增长,而是线性增长。

3. 快速重传和快速恢复阶段:快速重传是当TCP 源端收到到三个相同的ACK 副本时,即认为
有数据包丢失,则源端重传丢失的数据包,而不必等待RTO 超时。

同时将ssthresh 设置为当前cwnd 值的一半,并且将cwnd 减为原先的一半。

快速恢复是基于“管道”模型(pipe model )的“数据包守恒”的原则(conservation of packets principle ),即同一时刻在网络中传输的数据包数量是恒定的,只有当“旧”数据包离开网络后,才能发送“新”数据包进入网络。

如果发送方收到一个重复的ACK ,则认为已经有一个数据包离开了网络,于是将拥塞窗口加1。

如果“数据包守恒”原则能够得到严格遵守,那么网络中将很少会发生拥塞;本质上,拥塞控制的目的就是找到违反该原则的地方并进行修正。

经过十多年的发展,目前TCP 协议主要包含有四个版本:TCP Tahoe 、TCP Reno 、TCP NewReno 和TCP SACK 。

TCP Tahoe 是早期的TCP 版本,它包括了3个最基本的拥塞控制算法-“慢启动”、“拥塞避免”和“快速重传”。

TCP Reno 在TCP Tahoe 基础上增加了“快速恢复”算法。

TCP NewReno 对TCP Reno 中的“快速恢复”算法进行了修正,它考虑了一个发送窗口内多个数据包丢失的情况。

在Reno 版中,发送端收到一个新的ACK 后旧退出“快速恢复”阶段,而在NewReno 版中,只有当所有的数据包都被确认后才退出“快速恢复”阶段。

TCP SACK 关注的也是一个窗口内多个数据包丢失的情况,它避免了之前版本的TCP 重传一个窗口内所有数据包的情况,包括那些已经被接收端正确接收的数据包,而只是重传那些被丢弃的数据包。

相关文档
最新文档