TCP超时重传

转载自: https://blog.****.net/ahafg/article/details/51058467

1、基本原理

       在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。

2、重传超时时间设置:

      应当设置这个定时器的时间(RTO),保证对网络资源最小的浪费。因为若RTO太小,可能有些报文只是遇到拥堵或网络不好延迟较大而已,这样就会造成不必要的重传。太大的话,使发送端需要等待过长的时间才能发现数据丢失,影响网络传输效率。

     由于不同的网络情况不一样,不可能设置一样的RTO,实际中RTO是根据网络中的RTT(传输往返时间)来自适应调整的。具体关系参考相关算法。

     大致流程如图所示:

                        TCP超时重传

 

TCP慢启动:

       主机开发发送数据报时,如果立即将大量的数据注入到网络中,可能会出现网络的拥塞。慢启动算法就是在主机刚开始发送数据报的时候先探测一下网络的状况,如果网络状况良好,发送方每发送一次文段都能正确的接受确认报文段。那么就从小到大的增加拥塞窗口的大小,即增加发送窗口的大小。

 

拥塞避免:  

        为了防止慢启动的拥塞窗口增长过快导致网络拥塞,设置拥塞控制算法,限制慢启动算法。

 

图示情况:

                    TCP超时重传

      在该图中,假定当cwnd为32个报文段时就会发生拥塞。于是设置 ssthresh为16个报文段,而cwnd为1个报文段。在时刻 0发送了一个报文段,并假定在时刻 1接收到它的ACK,此时cwnd增加为2。接着发送了2个报文段,并假定在时刻 2接收到它们的ACK,于是cwnd增加为4(对每个ACK增加1次)。这种指数增加算法一直进行到在时刻3和4之间收到8个ACK后cwnd等于ssthresh时才停止,从该时刻起,cwnd以线性方式增加,在每个往返时间内最多增加 1个报文段。【存在在后续时间,发送方和接收方之间的管道被填满。此时不论拥塞窗口和通告窗口是多少,它都不能再容纳更多数据。每当接收方在某一个时间单位从网络上移去一个报文段,发送方就再发送一个报文段到网络】

 

快重传、快恢复:

       一种数据丢包情况下给出的修补机制,不需要等待重传计时器超时而空闲较长时间。