TCP-超时重传和快速重传

超时重传

重传机制会设定一个定时器,当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发该数据,这就是超时重传

超时重传时间RTO

假设在重传的情况下,超时时间 RTO 过长或过短时,会发生什么事情呢?
在这里插入图片描述

  • 当超时时间 RTO 较大时,重发就慢,丢了老半天才重发,没有效率,性能差;
  • 当超时时间 RTO 较小时,会导致可能并没有丢就重发,于是重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。

所以精确的测量超时时间 RTO 的值是非常重要的,这可让我们的重传机制更高效。

那RTO该如何设置最高效呢?
设置成略大于报文往返时间RTT
具体做法:取多个RTT的取平均值
比如第一次 RTT 为 500ms,第二次 RTT 为 800ms,那么第三次发送时,各让一步取平均值 RTO 为 650ms。

重传二义性

重传必然会有重传二义性
重传二义性:当重传一方收到重传请求中的某个请求的应答时,它不能区分该应答对应哪一次请求。

  • 如果算作对第一次的应答,就会出现如下图 1 和图 2 中的问题,RTT 时间明显是大于实际值
  • 如果算作对第二次的应答,,就会出现图 3 中的问题,RTT 时间明显小于实际值
    在这里插入图片描述

那么如何解决呢?
在TCP头加入重传序列号,用序列号来唯一标识这次请求。

如果多次超时呢?——超时时间间隔加倍

如果超时重发的数据,再次超时的时候,TCP 的策略是超时时间间隔加倍
也就是每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送。

快速重传

超时重传最大的问题就是太慢了,需要一直等到超时了才重传,
「快速重传」可以解决超时重发的时间等待问题。

快速重传机制是如何工作的?
快重传要求,接收者如果接收到一个乱序的分组的话,就返回对前一个正确分组的确认应答,
当发送方连续收到三个冗余ACK,就会马上快速重传丢失数据,不必等到超时时间再重传。

图示如下:
在这里插入图片描述

超时重传和快速重传的对比

超时重传缺点是太慢了,RTO的设置不好把握
快速重传解决了超时重传的慢速缺点,但是多发了好几个ACK会导致网络更加拥塞

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值