【TCP/IP详解 卷一:协议】第二十三章 TCP的保活定时器
本章介绍保活定时器。
在 TCP 的三握四挥 章节中,我们介绍了 处在 TIME_WAIT 的 2MSL定时器;在 TCP的超时与重传 章节中,我们介绍了 重传定时器;在上一章节中,我们介绍了 防止死锁现象的 坚持定时器。
那么在本章节,我们将介绍 争议颇多的 保活定时器。
保活定时器
一个比较让人惊讶的事实是:可以没有任何数据通过一个空闲的TCP连接,如果TCP连接的双方都没有向对方发送数据,那么在两个TCP模块之间不交换任何信息。
两个应用进程 -客户进程 和 服务器进程 都没有使用应用级的定时器来检测 非活动状态:这种非活动状态 可以导致应用程序中的任何一个 终止其活动。
许多时候,一个服务器希望知道客户主机是否 崩溃并关机,或者 崩溃又重新启动。许多实现提供的保活定时器可以提供这个能力。
但是,保活定时器并不是TCP规范中的一部分,它有如下三个缺点:
- (1)在出现短暂错误的情况下,这可能会使一个非常好的连接释放掉。
- (2)它们耗费不必要的带宽。
- (3)在按分组计费的情况下,会在互联网花掉更多的钱。
在连接两个端系统的网络出现临时故障的时候,保活选项会引起一个实际上很好的连接终止。比如,一个中间路由器崩溃并重新启动时,发送保活探查,那么TCP会认为客户的主机已经崩溃,但是实际上并不是这样。
保活功能主要是为应用程序提供的。服务器应用程序可能会代表客户绑定一些资源,因此希望知道客户主机什么时候关闭或者已经崩溃。
在之前的章节里面,我们介绍了 半开放连接 会引起复位,但是那是来自正在发送数据的客户端,如果客户消失了,服务器会永远等待客户的数据:保活定时器 就是试图在服务器端检测到这种半开放的连接。
具体描述
保活选项的一端 为服务器端,另外一端为客户端。一般都是服务器设置这个功能。
如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客户发送一个 探查报文段,客户主机必须处于以下4个阶段之一:
(1)客户主机依然正常运行,并从服务器可达。TCP响应正常,服务器就将保活定时器复位。如果进行了交换数据,那么就在交换数据结束之后进行复位。
(2)客户主机崩溃,并且关闭 或者 正在重新启动。客户的TCP没有响应,服务器收不到对该探查的响应,在 75s 之后超时,总共发送 10个探查,每个间隔75s,如果没有收到任何一个响应,它就认为客户主机已经关闭 并且 终止这个连接。
(3)客户主机已经崩溃,并已经重新启动。服务器收到探查,但是是一个复位,使得服务器终止这个连接。
(4)客户主机正常运行,但是从服务器不可达。这与状态2相同,因为TCP不能识别状态4和状态2的区别,它所能发现的就是 没有收到探查。
在第一种情况下,服务器的进程没有感觉到保活探查的发生,TCP负责一切,这个过程对所有的应用程序都是透明的。在后面三种情况下,服务器将收到来自TCP的差错报告:比如 连接超时,连接被对方复位等等。
小结:保活定时器的优点与缺点
优点:
(1)激活应用程序中的保活选项 通常比 编写应用程序探查报文 更简单。
(2)通过探查可以使服务器知道客户主机是否崩溃又重新启动。
(3)探查报文 比 应用程序探查报文 耗费更少的带宽。
缺点:
(1)在出现短暂错误的情况下,这可能会使一个非常好的连接释放掉。
(2)它们耗费不必要的带宽。
(3)在按分组计费的情况下,会在互联网花掉更多的钱。
2016/8/20