tcp/ip定时器

TCP/IP定时器介绍

一条TCP连接会使用9个定时器:

超时重传定时器,持续定时器,ER延迟定时器,PTO定时器,ACK延迟定时器,

SYNACK定时器,保活定时器,FIN_WAIT2定时器,TIME_WAIT定时器。

#define ICSK_TIME_RETRANS 1 /* Retransmit timer */

#define ICSK_TIME_DACK 2 /* Delayed ack timer */

#define ICSK_TIME_PROBE0 3 /* Zero window probe timer */

#define ICSK_TIME_EARLY_RETRANS 4 /* Early retransmittimer */

#define ICSK_TIME_LOSS_PROBE 5 /* Tail loss probe timer */

 上述5种定时器分别为:超时重传定时器、ACK延迟定时器、持续定时器、ER延迟定时器、PTO定时器。

另外还有保活定时器、FIN_WAIT2定时器、TIME_WAIT定时器、SYNACK定时器。

虽然定义了9个定时器,但是内核中只用了4个实例(timer_list),所以有些定时器是共用一个实例的。

这4个实例分别是:

icsk->icsk_retransmit_timer:超时重传定时器、持续定时器、ER延迟定时器、PTO定时器。

icsk->icsk_delack_timer:ACK延迟定时器。

sk->sk_timer:保活定时器,SYNACK定时器,FIN_WAIT2定时器。

death_row->tw_timer:TIME_WAIT定时器。

TCP要保证正常工作,至少应该有四种计时器:重传计时器、持久计时器、保活计时器和时间等待计时器。

一、       重传计时器:

超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。当TCP发送报文段时,就创建该特定报文段的重传计时器。

可能发生两种情况:

 1. 若在计时器截止时间到之前收到了对此特定报文段的确认,则撤销此计时器。

  2.若在收到了对此特定报文段的确认之前计时器截止期到,则重传此报文段,并将计时器复位。

1.重传超时时间:

影响超时重传机制协议效率的一个关键参数是重传超时时间(RTO,Retransmission TimeOut)。RTO的值被设置过大过小都会对协议造成不利影响。如果RTO设置过大将会使发送端经过较长时间的等待才能发现报文段丢失,降低了连接数据传输的吞吐量;另一方面,若RTO过小,发送端尽管可以很快地检测出报文段的丢失,但也可能将一些延迟大的报文段误认为是丢失,造成不必要的重传,浪费了网络资源。

如果底层网络的传输特性是可预知的,那么重传机制的设计相对简单得多,可根据底层网络的传输时延的特性选择一个合适的RTO,使协议的性能得到优化。但是TCP的底层网络环境是一个完全异构的互联结构。在实现端到端的通信时,不同端点之间传输通路的性能可能存在着巨大的差异,而且同一个TCP连接在不同的时间段上,也会由于不同的网络状态具有不同的传输时延。

因次,TCP协议必须适应两个方面的时延差异:一个是达到不同目的端的时延的差异,另一个是统一连接上的传输时延随业务量负载的变化而出现的差异。为了处理这种底层网络传输特性的差异性和变化性,TCP的重传机制相对于其他协议显然也将更为复杂,其复杂性主要表现在对超时时间间隔的处理上。为此,TCP协议使用自适应算法(Adaptive RetransmissionAlgorithm)以适应互联网分组传输时延的变化。这种算法的基本要点是TCP监视每个连接的性能(即传输时延),由此每一个TCP连接推算出合适的RTO值,当连接时延性能变化时,TCP也能够相应地自动修改RTO的设定,以适应这种网络的变化。

   

2.连接往返时间:

 对一个连接而言,若能够了解端点间的传输往返时间(RTT,Round Trip Time),则可根据RTT来设置一合适的RTO。显然,在任何时刻连接的RTT都是随机的,无法事先预知。TCP通过测量来获得连接当前RTT的一个估计值,并以该RTT估计值为基准来设置当前的RTO。自适应重传算法的关键就在于对当前RTT的准确估计,以便适时调整RTO。

为了搜集足够的数据来精确地估算当前的RTTTCP对每个报文都记录下发送出的时间和收到的确认时间。每一个(发送时间,确认时间)对就可以计算出一个RTT测量值的样本(Sample RTT)。TCP为每一个活动的连接都维护一个当前的RTT估计值。该值是对已经过去的一个时间段内该连接的RTT了两只的加权平均,并作为TCP对连接当前实际的RTT值的一种估计。RTT估计值将在发送报文段时被用于确定报文段的RTO。为了保证它能够比较准确地反应当前的网络状态,每当TCP通过测量获得了个新的RTT样本时,都将对RTT的估计值进行更新。不同的更新算法或参数可能获得不同的特性。[1] 

最早的TCP曾经用了一个非常简单的公式来估计当前网络的状况,如下

R<-aR+(1-a)MRTP=Rb其中a是一个经验系数为0.1,b通常为2。注意,这是经验,没有推导过程,这个数值是可以被修改的。这个公式是说用旧的RTT(R)和新的RTT (M)综合到一起来考虑新的RTT(R)的大小。但又可以看到&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值