TCP重传机制

超时重传

  发送方在发送数据时,会设定一个计时器,在指定时间内没有收到接收方的应答就会重发该数据。

  超时时间RTO的设置:
超时时间较大,重发偏慢,效率低,性能差
超时时间偏小,数据包没有丢失就重发,重发得频繁,给网络增加拥塞,导致更多超时,恶性循环。

  所以超时时间的设置非常重要,超时时间应该略大于往返的时间RTT,由于网络是经常变化的,所以报文往返时间也是变化的,因此RTO是一个动态变化的值。

快速重传

  快速重传不以时间为驱动,以数据为驱动。

图片来自公众号:小林coding
在这里插入图片描述

  在数据发送过程中,由于某些原因Seq2没有被接收到,所以即使后面的包被接收到了,ACK包依然返回2,在连续三次接收到相同的ACK包后,就会触发重传机制。
  快速重传的缺点在于:接收到ACK2后,不知道ACK是即受到那些数据后发送回来的,也就无法确定后面的包如Seq3、Seq4、Seq5的接收情况,不知道后面的包是否应该重传。

SACK重传

图片来自公众号:小林coding
在这里插入图片描述
   SACK重传是在TCP头部加入SACK选项,SACK中记录了哪一段连续的报文被接收。如上图,发送方收到三个相同的ACK,同时通过SACK知道哪些报文被成功接收,就可以确定该发送哪些数据包。

Duplicate SACK

   Duplicate SACK 又称D-SACK,主要是用SACK告诉发送方哪些数据被重复接收了。

图片来自公众号:小林coding
   情景一:
在这里插入图片描述
   接收方发送的确认应答丢失了,于是发送方发现超时后重传了第一个报文,接收方接收到重复的第一个报文后在ACK报文中用SACK告诉发送方这个数据包已经接收过了,通过ACK确认应答号和SACK可以知道重传是因为ACK包丢失了。

   情景二:
在这里插入图片描述
   数据包1000 – 1499被网络延迟了,后面发送方接收到确认报文时,有三个ACK包中的确认应答号相同,触发了快速重传,当重传的包到达接收方时,接收方又收到了之前的包,向发送方发送确认应答报文,,并将确认应答号改为3000,在响应重复的报文时用SACK告诉发送方该包已经被接收,发送方通过对比前后的确认应答号相同可以判断出,触发重传是因为网络延迟。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值