什么是重传机制
TCP实现可靠传输的方式之一,就是通过序列号和确认应答。
在TCP中,当发送端的数据到达接收端之后,接收端主机会返回一个确认应答消息,表示已经接收到消息
但是网络世界影响因素很多,传输过程很可能会产生丢包,所以就会用到重传机制
解决方法
1.超时重传
重传机制的其中一个方式,就是在发送数据时,设定一个定时器,当超过指定的时间RTO
后,没有收到对方的ACK
确认应答报文,就会重发该数据,也就是超时重传
- RTO(Retransmission Timeout 超时重传时间):从上一次发送数据,因为长期没有收到ACK响应,到下一次重发之间的时间。就是重传时间通常每次重传RTO是前⼀次重传间隔的两倍,计量单位通常是RTT。例:1RTT,2RTT,4RTT,8RTT…。重传次数到达上限之后停⽌重传。
- RTT (Round-Trip Time 往返时延)就是数据从网络一端传输到另一端所需的时间,也就是包的往返时间大小不稳定。目的是接收方通过TCP头窗口字段告知发送方本方可以接收的最大数据量,用以解决发送速率过快导致接收放不能接收的问题。
一般RTO设置为略大于RTT
2.快速重传
因为RTO每次重传都会翻倍增长,所以效率很低,这时就可以用到快速重传,节省时间
发送方一共发出五分数据,但是第二份数据丢失了
当收到第一份数据的时候,接收方发送一个ack2,表示期望接下来希望接收第二份数据(编号为2),但是由于第二份数据缺失了,于是并没有接收到ack2
发送发继续发送第三份数据,当接收方接收到第三份数据后,由于没有接收到ack2,所以并没有发送ack4表示希望接下来接收第四份数据,而是再次发送ack2.......
发送端收到了三个 Ack = 2 的确认,知道了 Seq2 还没有收到,就会重传Seq2
最后,收到了 Seq2,此时因为 Seq3,Seq4,Seq5 都收到了,于是 Ack 回 6
快速重传的缺点就是无法判断到底是缺了哪个包