TCP的重传

我们都知道tcp发送的消息,如果没收到ack是会重传的。
具体是怎么重传的呢

比如发送1,2,3,4,5 这5个包,只有2这个包没收到,发送端要怎么重传呢?

没收到2的时候,接受方ack一直都是2,从这个角度来说,发送方其实是不知道3,4,5这个几个包的情况的,所以都会重传。

答:重传2,3,4,5这些包

但是这个很浪费啊,明明3,4,5都收到了的,发送方还要重传一遍。

所以tcp有个sack机制

接受方会返回收到了哪些包,发送方就只是发送2这个包就可以了。

答:开启sack的情况下,只是重传2这个包
image.png

还有个问题,tcp的重传默认是要等一段时间的,这个时间就是RTO,RTO的计算比较复杂,可以大概认为和rtt相关,是个相对比较长的时间了。
有不有更快的解决方法呢,毕竟丢包是比较低概率的事情。

快速重传:

发送方连续收到3次相同的ack,这个时候即使超时定时器还没有超时,也开始启动重传。

答:1,2,3,4,5 这5个包,只有2这个包没收到,会连续3次都为2的ack,所以会马上重传。
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果对网络工程基础不牢,建议通读《细说OSI七层协议模型及OSI参考模型中的数据封装过程?》 下面就是TCP/IP...
    zhoulujun阅读 8,528评论 1 10
  • 众所周知,TCP通过确认重传(手段之一)来保证数据的可靠传输,这里总结一下几种场景: RTO重传,就是数据包发出去...
    areece阅读 9,427评论 0 0
  • 首先,我们需要知道TCP在网络ISO的七层模型中的第四层——Transport层,IP在第三层——Network层...
    CodeKing2017阅读 4,751评论 0 4
  • 这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP...
    半岛夏天阅读 3,751评论 0 2
  • 这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP...
    愛我你就抱抱我阅读 3,688评论 0 0