保持计时器 keep timer

 

用来防止TCP连接处于长时间空闲!

如果client端建立到Server端的连接,传输一些数据然后停止传输,可能是Client端出现故障。在这种情况下,这个连接将永远处于Open状态!

为了解决这个问题,在多数实现中都在Server端设置保持计时器,,当Server端收到Client端的报文时,就将保持计时器复位。

如果Server端过了设定的时间还没有收到client端的Message。Server端就Send探测报文,如果发送10个探测报文(每个相隔75秒)还没有响应,就假设Client端出现故障,进而终止该连接!

 

 

时间等待计时器 Time-Wait timer

 

 为了保证TCP连接释放过程正常的进行,TCP设置了时间等待计时器 Time-Wait timer 。

 当TCP关闭一个连接时,它并不认为这个连接马上就真正的关闭。这时Client端进入“Time-Wait” status,需要在等待两个最长报文寿命 Maximum Segment Lifetime MSL)时间之后,才真正进入CLose 状态!

 Client 和Server端进行四次握手之后,确认双方已经同意释放连接,Client端仍然需要采用延迟2MSL time ,确保Server在最后阶段send给Client 的Data,已经Client发送给Server的最后一个ACK报文都能

 正确的被接收,防止因个别报文传输错误导致连接释放fail

 

 

 

  Retransmission Timer 用来控制报文确认与等待重传的time。

  当sender TCP发送一个报文时,首先将它的报文的副本放到重传队列,同时启动一个重传计时器。Retransmission Timer设定一个值,然后开始倒计时。在Retransmission Timer倒计时到0

  之前收到ACK,表示该报文传输成功;如果在计时器倒计时到0之前没收到ACK,表示该报文传输失败,准备重传该报文。

  对于一个TCP连接,TCP维护一个变量,它代表当前最佳往返时间RTT估算值,当一个Message被发送时,启动一个Retransmission Timer,重传计时器有两个作用:

  1:测量该报文从发送到被确认的往返时间,2如果出现超时,启动重传。

  RTO: Retransmission Time-Out  RTO=RTT=4*RTTD  RTT: 最佳往返时间 RTTD: RTT的偏差加权平均值

  

  

  为了防止非零窗口通知丢失造成 死锁的现象出现!

  在执行滑动窗口控制的过程中,要求发送端在接收到零窗口通告之后就停止发送,这个过程直到接收端的TCP在发送出一个非零窗口通知为止,如果下一个非零窗口通知丢失,

  那么发送端将无休止的等待接收端的通知,造成死锁

   当发送端的TCP收到一个零窗口通知书=时,就启动坚持计时器,当坚持计时器时间到,发送端的TCP就发送一个零窗口探测报文。这个报文只有一个字节数据,它有一个序号,

但它的序号不需要确认。零窗口探测报文的作用是提示接收端,非零窗口通知丢失,必须重传。

坚持计时器的值设置为重传时间的数值,最大为60秒。如果发送出的第一个零窗口探测报文没有收到应答,则需要发送第二个零窗口探测报文,直到收到非零窗口为止