原贴地址:https://blog.csdn.net/djl806943371/article/details/89550824
TCP经历了Tahoe版本之后,出现了一个新版本 Reno 。这个版本对Tahoe进行了改进,如果从有限状态机的角度看,Tahoe有两个状态,Reno有三个状态:
这里面有三个机制,这一部分需要认真好好理解,很容易发现知识盲区:
1. 快速重传:当发送者接收到三个重复的ack即认为丢失了一个包,立马对该包进行重传,在这一点上与Tahoe是一致的,但是Reno不会返回慢启动状态,只有超时才会返回慢启动状态;
2. 快速恢复:当接收到三个重复ack时,不会将cwnd设为1MSS,而是减半原先的一半,原先的记为oldcwnd(后面有用处),与AIMD一致,进入快速恢复状态;
3. 快速恢复:当处于快速恢复状态时(即收到三个重复ack,重传了丢失的包,进入了快速恢复状态),当又接收到一个重复ack时,将cwnd+3+1,此后每再次受到一个重复ack,将cwnd+1。通过这种方式,可以实现每收到一个ack,便发送一个数据,而不需要等待重传包的ack(即与先前受到的ack不相等的新的ack)返回之后才开始发送新数据。之所以要这样处理,是因为接收到重复ack意味着有数据包离开网络,如果在这种情况下,是可以继续发送新数据的。而我们知道cwnd在这种扩张模式下,每过RTT,cwnd将会翻倍。而重传丢失的包到新的ack到达之间的时间刚好的一个RTT,因此在这期间,又发送了0.5oldcwnd+oldcwnd 即 1.5oldcwnd,可以看到与oldcwnd相比较,多发送了0.5oldcwnd的数据。在这之后接收到了新的ack,此时将cwnd重置为 oldcwnd/2 ,并再次进入拥塞避免状态。
可以对比下面两个示意图,比较Tahoe与Reno的区别:
最后给出一个题目检验下是不是真的会了,总体来说这一节比较难: