为了实现TCP, 它维护着4个定时器来实现特定功能。
重传定时器
TCP 提供 可靠的传输是采用超时重传来解决的。
TCP 每发送一个报文就会启动该定时器,在重传时间内(等待一个报文确认的时间段),收到确认,则停止该定时器;反之该报文被重传,且定时器复位。
重传时间的确定 :
重传时间取决于TCP 连接的RTT(往返时间)。如果太短,在途中的报文会重传,从而增加网络负担;如果太长,导致效率会低下。所以TCP 采用的是一种动态策略,根据监测网络性能而不断调整重传时间。
RRT = a (前一个RRT) + (1-a)(当前RRT);
二义性问题
当一个报文被重传后,TCP 收到的确认报无法判断是第一次 的 还是重传的确认,导致二义性;
当超时和重传发生时,在收到重传确认前,不更新RRT.每重传一次,RRT 加倍 直到发送了一个报文 并收到不需要重传的确认为止;
解决这个问题普遍采用 Karn 算法,
T = b RRT ( b 典型为2)
持续计时器
持续计时器 主要解决死锁问题;
#保活定时器
保活定时器来防止一个长时间的空闲。如果启动了一个客户与服务器的时间却长时间不传数据,只要俩端主机没有重启,该连接会一直保持占用资源。
实际中 每当服务器收到数据时,就会复位保活定时器,通常为 2h , 若超时,则服务器会发送10 个间隔时间为 75s 的探测报文,若客户端没有响应,就认为故障或下线,终止连接。
时间等待计时器
每个连接的最后一个计时器。 它在关闭连接 的 TIMED_WAIT 状态中使用。当TCP关闭一个连接时,并不是立刻关闭,而是在等待期中过渡,已使丢弃重复的 FIN 报文,通常设置为生存时间的俩倍。