TCP建立连接与释放时管理的定时器如下:
重传计时器:Retransmission Timer
坚持计时器:Persistent Timer
保活计时器:Keeplive Timer
时间等待计时器(2MSL Timer):Time_Wait Timer
FIN_WAIT_2定时器(FIN_WAIT_2 timer)
重传计时器:Retransmission Timer
对于TCP发送出去的数据包, 需要等待对端发来ACK才能从内存里面删除, 那么如果对端没有发送ACK就会重传, 在发送数据的同时,在设置一个超时时间(一般设置成2个RTT的时间),如果在这个超时时间内, 没有收到ACK,那么就重传刚才发送的数据。
重传时间=2*RTT;
RTT(Round-Trip Time): 往返时延。表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
坚持计时器:Persistent Timer
比如最后一个ACK丢了, 那么发送端就永远认为接收端的窗口是0, 那么就发不了数据了。这个时候就需要坚持定时器,每隔一段时间(第一个探测包是在收到窗口为0的消息后的5秒)发送一个字节的探测包给服务端, 如果服务端窗口不是0了, 会在ack里面更新窗口大小的。
坚持计时器的截止期设置为重传时间的值,但若没有收到从接收端来的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,知道这个值增大到阈值为止&