TCP/IP 之TCP协议(6):4种计时器

来源:互联网 发布:c语言的应用 编辑:程序博客网 时间:2024/05/29 19:42
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; 这个叫做指数退避,知道一个上限为止。



原创粉丝点击