快速重传与快速康复算法

时间:2019-02-02 08:49 来源:365bet体育在线总站 作者:admin

1990年提出了一种避免拥塞的算法修改[Jacobson 1990b]。 在介绍这些变化之前,我们意识到当一个段不按顺序接收时,TCP立即需要生成一个ACK(一个重复的ACK)。 不应该延迟这种重复的ACK。 重复ACK的目的是让对方知道他们已经收到了无序的段,并通知对方他们希望接收的序列号。 由于我们不知道重复的ACK是由丢失的段引起的,还是因为只有一些段重新排序,我们预计会有少量重复的ACK到达。 如果这只是某些段的重新排序,则在处理重新排序的段并生成新的ACK之前,只能生成一个或两个重复的ACK。 如果收到一系列3个或更多重复的ACK,则很可能丢失一个段。 所以我们重新发送丢失的数据段而不等待超时定时器溢出。 这是快速重传算法。 以下不是慢启动算法,而是避免拥塞的算法。 这是快速恢复算法。 在下图中,您可以看到在收到3个重复的ACK后没有进行慢启动。 相反,发送方在接收重传的ACK之前重新发送然后发送3个新的数据段(消息67,69和71)。 在这种情况下没有进行慢启动的原因是因为接收重复的ACK不仅告诉我们数据包丢失了。 由于接收器在接收到另一个段时仅生成重复的ACK,因此该段离开网络并进入接收器的高速缓存。 也就是说,在发送端和接收端之间仍然存在传输数据,并且我们不希望执行缓慢启动以突然减少数据流。 该算法通常按以下方式实现:1)当您收到第三个重复ACK时,将ssthresh设置为当前拥塞窗口cwnd的中间位置。 重新传输丢失的部分。 将cwnd设置为ssthresh超过段大小的3倍。 2)每次收到另一个重复的ACK,cwnd增加1个段大小并发送1个数据包(如果新的cwnd允许传输)。 3)当确认新数据的下一个ACK到达时,将cwnd设置为ssthresh(步骤1中设置的值)。 该ACK必须是在重传之后的往返时间内在步骤1中重传的确认。 此外,该ACK还必须是对丢失分组与所接收的第一个接收到的ACK之间的所有中间段的确认。 此步骤使用拥塞避免,因为我们将数据包丢失时的当前速率减半。 快速重传算法在4.3BSDTahoe版本中首次出现,但后来错误地使用了慢启动。 快速恢复算法出现在4.3BSDReno版本中。
回到顶部