快速重传与快速恢复

快速重传与快速恢复

快速重传

在超时重传中,重点是定时器溢出超时了才认为发送的数据包丢失,快速重传机制,实现了另外的一种丢包评定标准,即如果我连续收到3次dup ACK,发送方就认为这个seq的包丢失了,立刻进行重传,这样如果接收端回复及时的话,基本就是在重传定时器到期之前,提高了重传的效率。
如果只出现两次dup ACK 我们可能会认为只是失序如果收到一个out-of-order的报文段时, TCP需要立刻产生一个ACK。所以收到3个dup ACK 或者以上我们就会认为是丢失了。

在传输过程中会出现out-of-order的现象,但是在滑动窗口中会有严格的顺序控制,假设有4,5,6三个待接收的数据包,先收到了5,6,协议栈是不会回复对5,6包的确认,而是根据TCP协议的规定,当接收方收到乱序片段时,需要重复发送ACK, 在这个地方会发送报文4 seq的ACK,表明需要报文4没有被接收到,如果此后收到的是报文7,那么仍然要回报文4 seq的ACK,如果连续发送3个 dup ACK,接收端(这里的接收端其实就是发送数据端)认为这个片段已经丢失,进行快速重传。

快速恢复算法

快速重传和快速恢复算法一般同时使用。快速恢复算法是认为,你还有3个Duplicated Acks说明网络也不那么糟糕,所以没有必要像RTO超时那么强烈,并不需要重新回到慢启动进行,这样可能降低效率。所以协议栈会做如下工作

  1. cwnd = cwnd/2

  2. sshthresh = cwnd

然后启动快速恢复算法:

  1. 设置cwnd = ssthresh+ACK个数*MSS(一般情况下会是3个dup ACK)

  2. 重传丢失的数据包(对于重传丢失的那个数据包,可以参考TCP-IP详解:SACK选项)

  3. 如果只收到Dup ACK,那么cwnd = cwnd + 1, 并且在允许的条件下发送一个报文段

  4. 如果收到新的ACK, 设置cwnd = ssthresh, 进入拥塞避免阶段

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快速重传(Fast Retransmit)和普通重传是TCP(Transmission Control Protocol)中两种机制,用于在网络通信中处理数据包丢失的情况。它们的主要区别在于如何管理和响应丢失的数据段,以及对恢复时间的影响。 1. 普通重传(Selective Repeat, SR): - 当接收端发现某个数据段丢失后,它会发送一个确认(ACK)来通知发送端。发送端接收到这个ACK后,会重新发送所有未得到确认的数据段。 - 这个过程可能需要等待一个完整的往返时间(Round-Trip Time, RTT)来确保丢失的数据段确实没有到达,因为可能是在传输过程中被再次错误地丢弃了。 - 如果连续收到多个确认,说明数据段已经被正确接收,发送端才会停止重传那部分数据。 2. 快速重传(Fast Retransmit): - 采用更快速的响应机制。当接收端连续两次接收到相同的确认(ACK),即使还未接收到完整的数据,它也会假设先前的一个数据段已经丢失,并立即开始快速重传。 - 这样做的好处是可以更快地检测到丢失并启动重传,减少等待的时间,提高网络效率。 - 但是,由于快速重传可能导致短暂的拥塞控制问题,因为发送端可能会过早地发送过多的数据。 总结: - 普通重传更保守,等待完整RTT后再确认丢失,确保数据不重复; - 快速重传则更灵敏,通过连续的相同确认触发快速重传,但也增加了误重传的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值