TCP重传机制
常见的TCP重传
- 超时重传
- 快速重传
- SACK
- D-Sack
超时重传
-
机制基础: 在TCP中,当发送端数据到达接收端时,接收端会返回一个确认应答的消息(表示已经收到)。
-
超时重传:为了保证所有的数据包都可以按时到达,当发送端在一个
规定时间(RTO超时重传时间)
未收到来自接收端的ACK,那么发送端就认为数据丢失了,进行重传。 -
RTO超时重传时间设定:略大于RTT(往返时延),而往返时延可以采用加权平均的方式,使得RTO能够动态变化,并且避免RTT有一个较大的波动。每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍
-
超时重传的范围:发送端发送过程丢包;接收端发送ACK过程丢包
快速重传
- 机制基础:不以时间驱动,而以数据驱动重传。
- 快速重传:超时触发重传存在的问题是,超时周期可能相对较长,因此为了还是重传机制,由于若接收端如果没有收到期望的数据,却收到后续乱序的包,也回给客户端回复 ACK,只不过是重复的 ACk,,回复相同的ACK三次以后触发快速重传。
SACK
- 机制基础:由于快速重发机制未确定重传的数量,其在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了。如果要支持
SACK
,必须双方都要支持。在 Linux 下,可以通过net.ipv4.tcp_sack
参数打开这个功能(Linux 2.4 后默认打开)
Duplicate SACK
机制基础:重复 SACK,其在 SACK 的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了。
目的:其主要是帮助发送方判断,是否发生了包失序、ACK 丢失、包重复或伪重传。让 TCP 可以更好的做网络流控。失序、ACK 丢失、包重复或伪重传。让 TCP 可以更好的做网络流控。
参考博客: https://www.cnblogs.com/-wenli/p/13080675.html