TCP使用四种定时器:

重传定时器(Retransmission Timer)、坚持定时器(Persistent Timer)、保活定时器(Keeplive Timer)、时间等待定时器(Time_Wait Timer)。

重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建重传计时器,若在计时器超时之前收到对报文段的确认,撤销计时器;若在计时器超时之后收到,则重传报文,复位计时器。


坚持定时器:ACK的传输不可靠,TCP不对ACK报文段进行确认,TCP 只确认那些包含数据的ACK报文段,为了防止因为ACK报文段丢失而双方进行等待的问题,发送方用一个坚持计时器来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查。坚持计时器总是在5-60秒之间。

保活定时器:如果一个连接在两个小时之内没有任何动作,则服务器就向客户发送一个探查报文段。客户主机必须处于一下4个状态之一:
  1)客户主机依然正常运行,并从服务器可达。服务器在2个小时以后将保活计时器复位。
  2)客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应,服务器也收不到对探查的响应,并在75秒后超时。服务器总共发送10个这样的探查,每个间隔75秒。如果服务器没有收到一个响应,就会认为客户主机已经关闭并终止连接。
  3)客户主机崩溃并已经重新启动。这是服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。
  4)客户主机正常运行,但是服务器不可达。这与状态2相同,TCP不能够区分状态4与状态2的区别,它所能发现的就是没有收到探查的响应。

时间等待定时器:在连接终止期使用,当TCP关闭连接时,并不认为这个连接就真正关闭了,在时间等待期间,连接还处于一种中间过度状态,这样就可以使重复的fin报文段在达到终点后被丢弃,这个计时器的值通常设置为一个报文段寿命期望值的2倍。


TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime),它是任何报文段被丢弃前在网络内的最长时间。当TCP 执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL,这样可以:

1)让TCP再次发送最后的ACK以防止这个ACK丢失(另一端超时并重发最后的FIN)。

2)在2MSL等待时间,插中使用的本地端口在默认情况下不能再被使用。在连接处于2MSL等待时,任何迟到的报文段将被丢弃。



TCP半关闭:TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。


参考:

《TCP/IP 详解(卷1:协议)》

版权声明:本文为博主原创文章,未经博主允许不得转载。

 posted on 2014-07-10 19:27  Rex7  阅读(978)  评论(0编辑  收藏  举报