TCP的重传

2019-05-05  本文已影响0人  黄云斌huangyunbin

我们都知道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
上一篇 下一篇

猜你喜欢

热点阅读