TCP常用的四种定时器:
重传定时器
坚持定时器
保活定时器
- 时间等待定时器
具体介绍:
(1)重传定时器
①应用场景: TCP报文段超时
② 特点:对于tcp协议,在规定的时间内,发现没有收到ACK,就会重新发送消息,如果还没有收到ACK,继续重新发送消息,每次重新发送消息的时间间隔不同,默认第一次重传是发现超时后1s,第二次重传是第一次重传后3s,第三次是6s;
③重传时间=2*RTT
计算RTT常用的公式是:RTT=previous RTT*i + (1-i)*current RT
(i的值通常取90%,即新的RTT是以前的RTT值的90%加上当前RTT值的10%)
(2)坚持定时器
①应用场景:一方滑动窗口为0之后,另外一方停止传输数据,进入坚持定时器的轮询,直到滑动窗口不再为0了。为了解决零窗口大小通知可能导致的死锁问题。
②特点:
TCP为每一个连接设有一个坚持定时器(也叫持续计数器)。只要TCP连接的一方收到对方的零窗口通知,就启动坚持定时器。若坚持定时器设置的时间到期,就发送一个零窗口控测报文段(该报文段只有一个字节的数据,它有一个序号,但该序号永远不需要确认,因此该序号可以持续重传),之后会出现以下三种情况:一、对方在收到探测报文段后,在对该报文段的确认中给出现在的窗口值,如果窗口值仍未零,则收到这个报文段的一方将坚持定时器的值加倍并重启。坚持计数器最大只能增加到约60秒,在此之后,每次收到零窗口通知,坚持计数器的值就定位60秒。
二、对方在收到探测报文段后,在对该报文段的确认中给出现在的窗口值,如果窗口不为零,那么死锁的僵局就被打破了。
三、该探测报文发出后,会同时启动重传定时器,如果重传定时器的时间到期,还没有收到接收到发来的响应,则超时重传探测报文。
(3)保活定时器
①应用场景:当两个TCP连接间出现长时间没有数据传输时;
②特点:
每当服务器收到客户的信息,就将保活定时器复位,超时通常设置2小时,若服务器超过2小时还没有收到来自客户的信息,就发送探测报文段,若发送了10个探测报文段,每75s发送一个,还没收到响应时,则终止连接。
(4)时间等待定时器(Time_Wait)
①应用场景:TCP四次挥手后;
②特点:主动发起TCP断开的一方需要保持2MSL的时间等待定时器,主要是考虑到四次挥手的最后一个ACK包对方没有收到,那么对方会重发FIN包,这么一来一回就是2倍的MSL时长。