1、大多数TCP实现使用至少4种计时器:重传,2MSL,持久,保活
2、2MSL计时器用于连接终止时,原因见:TCP协议的状态和连接
3、保活计时器(keepalive timer)用于防止连接出现长时间的空闲;每当服务器收到客户消息就把该计时器复位,如果超过时间还没有收到消息,就发送探测报文段,定时的发N个,如果还没有收到响应,就认为是客户除了故障,终止连接
4、持久计时器(persistence timer),用于对付0窗口而引起的死锁。
当发端收到窗口为0的消息,开启该计时器,到了一定时间,发字节为一的报文段去试探(试探报文段只有一个字节,且无需确认),如果没有响应,则再发,同时将该计时器加倍和复位。到这个值到达上限为止(一般是1分钟),然后就每隔这个上限发一次报文到窗口重新打开。
5、重传计时器:
(1)、重传的两种情况,当TCP发送一个报文段时,创建这个报文段的重传计时器。重传超时(RTO)
a、如果在这个时间之前,收到此报文的ACK,则撤销此计时器
b、如果时间到,将计时器复位,并重传报文
(2)、RTT(往返时间)的测量,用RTT(M)表示测量的RTT值,注意的是,如果测量已经开始,在此测量未结束之时,不能进行另一个测量;在计算新的RTO时候不用考虑重传的RTT
(2)、平滑RTT(S)与偏差RTT(D),使用前后的测量值加权的结果,计算方法如下(多数实现中,a取1/8,b取1/4):
第一次测量后:RTT(S) = RTT(M), RTT(D) = RTT(M)/2;
以后每次测量后:RTT(S) = (1 - a) * RTT(S) + a * RTT(M)
RTT(D)= (1 - b) * RTT(D) + b * abs( RTT(S) - RTT(M) );
(3)、重传超时(RTO)的计算:
最初:RTO = 初始值
每次测量后:RTO = RTT(S) + 4 * RTT(D);
(4)、发生重传时,就将RTO加倍,RTO *= 2; 这个叫做指数退避,知道一个上限为止。
2、2MSL计时器用于连接终止时,原因见:TCP协议的状态和连接
3、保活计时器(keepalive timer)用于防止连接出现长时间的空闲;每当服务器收到客户消息就把该计时器复位,如果超过时间还没有收到消息,就发送探测报文段,定时的发N个,如果还没有收到响应,就认为是客户除了故障,终止连接
4、持久计时器(persistence timer),用于对付0窗口而引起的死锁。
当发端收到窗口为0的消息,开启该计时器,到了一定时间,发字节为一的报文段去试探(试探报文段只有一个字节,且无需确认),如果没有响应,则再发,同时将该计时器加倍和复位。到这个值到达上限为止(一般是1分钟),然后就每隔这个上限发一次报文到窗口重新打开。
5、重传计时器:
(1)、重传的两种情况,当TCP发送一个报文段时,创建这个报文段的重传计时器。重传超时(RTO)
a、如果在这个时间之前,收到此报文的ACK,则撤销此计时器
b、如果时间到,将计时器复位,并重传报文
(2)、RTT(往返时间)的测量,用RTT(M)表示测量的RTT值,注意的是,如果测量已经开始,在此测量未结束之时,不能进行另一个测量;在计算新的RTO时候不用考虑重传的RTT
(2)、平滑RTT(S)与偏差RTT(D),使用前后的测量值加权的结果,计算方法如下(多数实现中,a取1/8,b取1/4):
第一次测量后:RTT(S) = RTT(M), RTT(D) = RTT(M)/2;
以后每次测量后:RTT(S) = (1 - a) * RTT(S) + a * RTT(M)
RTT(D)= (1 - b) * RTT(D) + b * abs( RTT(S) - RTT(M) );
(3)、重传超时(RTO)的计算:
最初:RTO = 初始值
每次测量后:RTO = RTT(S) + 4 * RTT(D);
(4)、发生重传时,就将RTO加倍,RTO *= 2; 这个叫做指数退避,知道一个上限为止。