TCP协议-TCP中的定时器/计时器

 1 概述

我们知道,TCP协议是面向连接、提供可靠交付的服务的传输层协议。 为了保证传输的可靠性,TCP 使用了多种定时器,下面我们就来探讨和分析一下 TCP 使用了哪些定时器?分别起什么作用?

  • 超时定时器(timeout timer):当发送方发出报文段后,就启动超时定时器,如果在规定时间内没有收到对端发来的确认,就重传已发送过的报文段。
  • 持续计时器(persistence timer):当 TCP 连接的一方收到对方的零窗口通知时,就启动持续计时器。
  • 时间等待计时器(TIME-WAIT timer):主动发起连接释放的一方处于 TIME-WAIT 状态时,启动该计时器,等待2MSL的时间后才能进入到CLOSED状态。因此,该计时器也称为 2MSL计时器
  • 保活定时器(keepalive timer):用于检测一个空闲的 TCP 连接是否仍然是保持着连接的状态。

 <> MSL(Maximum Segment Lifetime,最长报文段寿命) [RFC 793] 标准文档建议设置为 2 分钟。当然,TCP 允许不同的实现可以根据实际情况使用更小的 MSL 值。

 2 超时定时器

  • 作用实现超时重传的功能,提高 TCP 的传输可靠性,确保对方收到,并返回确认。
  • 情景分析:发送方每发送完一个TCP报文段,就启动超时计时器。如果在超时计时器到期之前收到了对方的确认,就撤销已设置的计时器;如果超时计时器到期后仍未收到对方的确认,就认为刚才发送的报文段丢失了,因而重传前面发送过的报文段。
  • 超时重传时间的选择:设置RTO(Retransmission Time-Out)值。RTO 不是固定值,需要参考测量所得的往返时间RTT(Round Trip Time)的样本值。
  • 计算RTO的算法:经典算法(SRTT算法)、 Karn / Partridge 算法(SRTT优化算法)、Jacobson / Karels 算法(SRTT改良算法)

3 持续计时器

  • 作用:为了解决当滑动窗口为零时而可能出现的死锁问题
  • 情景分析:当 TCP 连接的一方收到零窗口通知的一方,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),然后根据对方回复的确认报文段中给出的窗口值进行判断。如果窗口值仍为零,那么收到这个确认报文段的一方就重置持续计时器,轮询发送零窗口探测报文段;如果窗口值不为零,那么死锁的僵局可以打破了,从而可以继续发送数据了。

4 时间等待计时器

  • 作用:在连接释放的过程中,确保对端有足够的时间收到最后一个ACK确认报文段,从而使TCP连接能够正常断开。
  • 情景分析:在TCP连接释放的过程中,主动关闭连接的一方,当收到对端发来的FIN结束报文段后,需要对此发出确认,然后进入到 TIME-WAIT 状态。请注意,此时TCP连接还没有释放掉。它会启动时间等待计时器,等待 2MSL 的时间后,才能进入到 CLOSED 状态,才算真正结束了此次TCP连接。如果在 2MSL 时间内,又重新收到了对端发来的 FIN+ACK 报文段,说明对端没有收到最后一个ACK确认报文段,对端于是超时重传了这个 FIN+ACK 报文段。接着,本端重传一次确认,重新启动 2MSL 计时器,等待 2MSL 的时间后,才能进入到 CLOSED 状态。
  • MSL值:需要参考 TTL 时间,大于等于 TTL 即可。

<> TTL(Time To Live,生存时间)  是指IP数据报在网络中的生存寿命。IP数据报每经过一个路由器时,就把 TTL 减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于 1 秒,就把 TTL 的值减 1。当 TTL 值减为零时,就丢弃这个数据报。

5 保活计时器

  • 作用:在一条TCP连接中,通信双方长时间没有数据传输的情况下,检测对端是否还活着。
  • 情景分析
  • 客户主机正常运行且可达:服务器每收到一次客户的数据,就重置保活计时器,时间的设置默认是 2 小时。
  • 客户主机崩溃:若在保活计时器设置的超时时间到期后,仍没有收到客户的数据,服务器就发送一个探测报文段,以后每隔 75 秒发送一次。若一连重试 10 次后仍无客户端的响应,服务器就认为客户端出了故障,接着就关闭该TCP连接。
  • 客户主机崩溃并重新启动:这时服务器将收到一个对其保活探测报文段的确认,但是这个确认是一个复位(RST=1),使得服务器主动终止该TCP连接。
  • 客户主机正常运行但不可达:同第二种情况一样的处理。

6 补充

  • RTT(往返时间):采样值,一般实时计算,比较严格。
  • TTL(IP数据报生存时间):固定值,在IP首部的 “生存时间” 字段中设置。
  • MSL(TCP报文段的最大生存时间):固定值,MSL >= TTL。

参考

《计算机网络(第7版-谢希仁)》第5章

TCP协议探究(四):定时器

你可能感兴趣的:(#,计算机网络基础,TCP协议)