调研TCP定时器

时间:2022-10-13 23:28:29

TCP定时器

   TCP是提供可靠的传输层,既然传输数据就必须确认从另一方收到了数据,但是数据和确认在传输过程中都有可能丢失,那么这个时候,TCP协议是使用定时器进行实现的,如果定时器溢出时还没有收到确认,就会重传,关键在于超时和重传策略,怎样决定超时的时间间隔和如何确定重传的频率。 

TCP定时器的分类:

(1)重传定时器

(2)坚持定时器

(3)保活定时器

(4)时间等待定时器

接下来具体看看这四种定时器

**重传定时器**

1.应用场景:TCP是可靠的,因此,它对于发出去的信息,没有得到正常ACK反馈的,都会启动一个重传机制。这个重传机制使用一个重传定时器,若在计时器超时之前收到对报文段的确认,则撤销计时器;若在收到对特定报文段的确认之前计时器超时,则重传该报文,并把计时器复位。

2.重传时间:2*RTT

(计算RTT常用的公式是:RTT=previous RTT*i + (1-i)*current RT

   i的值通常取90%,即新的RTT是以前的RTT值得90%加上当前RTT值得10%

3.特点:当发现在规定时间内,没有收到ACK,那么,重新发送消息。如果还没有收到ACK,继续重新发送消息。当然,这每次继续重新发送消息的时间间隔是不一样的。一般默认第一次重传是发现超时后的1s,第二次重传是第一次重传后3s,第三次是6s……

**坚持定时器**

1.应用场景:坚持定时器是使用在一方滑动窗口为0之后,另外一方停止传输数据,进入坚持定时器的轮询,知道滑动窗口不再为0。相当于解决了0窗口大小通知可能导致的死锁问题。

2.特点:TCP为每一个连接设有一个坚持计时器,当发送段收到0窗口的确认时,就启动坚持定时器,当坚持定时器的截止期到时,TCP就会发送一个特殊的报文段,叫做探测报文段。这个报文段只有一个字节的数据,该报文段有序号,但永远都不需要确认,甚至在计算对其它部分的数据进行确认的时候这个报文也是被忽略的,探测报文段提醒接受端TCP,确认已经丢失,必须重传。坚持计时器的截止期设置为重传时间的值,但若没有收到从接收端来的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,知道这个值增大到阈值为止(通常为60秒)。之后,发送端每隔60s就发送一个报文段,直到窗口重新打开为止。

**保活定时器**

1.应用场景:在应用层没有数据进行传输的时候。

2.特点:每当服务器收到客户的信息,就将保活定时器复位,超时通常设置2小时(默认),如果服务器超过2小时还没有收到来自客户的的信息,就发送探测报文段,如果发送了10个(默认)探测报文段,每隔7s(默认)发送一个,还没有收到响应是,则终止连接。

**时间等待定时器**

1.应用场景:在TCP进行四次挥手之后,主动发起TCP断开的一方要进入TIME_WITE状态

2.特点:当TCP关闭连接时,并不认为这个连接就真正关闭了,在时间等待期间,连接还处于一种中间过渡状态。主要是考虑到四次挥手的最后一个ACK包对方有可能没有收到,那么就会重新发送FIN包。这个定时器的值通常设置为一格报文段寿命期望值的两倍,也就是2MSL时长。