(23)TCP的保活定时器
一、简介
对于运输层是否应该存在保活定时器的讨论一直都有,一些专家觉得这应该有应用层自行维护。
如果一个给定的连接在2小时内没有任何动作,那么服务器就向客户发送一个探查报文段。客户主机必须处于以下4个状态之一。
(1)客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方的正常工作的。服务器在2小时内将保活定时器复位。
(2)客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务器将不能收到对探查的响应,并在75秒后超时。总共发送10个探查,间隔75秒(初始定时器为2小时)。最终返回给应用的可能是“连接超时”。
(3)客户主机崩溃并已经重新启动。这是服务器将收到一个对其保活探查的响应,但这个响应是一个复位(RST),使得服务器终止这个连接。
(4)客户主机正常运行,但是从服务器不可达。此时保活探测会引发ICMP网络不可达的差错。但对TCP而言这是一个软差错,并不终止此链接,而是在每隔75s发送
完成10次保活探测后,会向应用程序产生一个不可达差错。
保活功能主要是为服务器应用程序提供的。服务器应用程序希望知道客户主机是否崩溃,从而可以代表客户使用资源。保活功能还可试图在服务器端检测半开放连接(客户端关闭断开连接后,服务器并不知道的情况)。