#笔记整理
TCP 保活机制
一些情况下,客户端和服务器需要了解什么时候终止进程或者与对方断开连接。应用进程之间没有任何数据交换,但仍然需要通过连接保持一个最小的数据流。TCP 保活机制即为了解决上述两种情况而设计。保活机制是一种在不影响数据流内容的情况下探测对方的方式。
它是由一个保活计时器实现的,当计时器被激发,连接一端将发送一个保活探测(简称保活)报文,另一端接收报文的同时会发送一个ACK作为响应。
注意: 保活机制并不是 TCP 规范中的一部分,对此 [RFC1122] 给出三个理由:
- 在出现短暂的网络错误的时候,保活机制会使一个好的连接断开;
- 保活机制会占用不必要的带宽;
- 在按流量计费的情况下会花费更多的经济开销。
TCP 保活机制仍存在争议,一种观点认为这一功能不应该在TCP协议中提供,而应在应用程序中实现;另一种观点认为大多数应用程序都需要这一功能,应该在TCP协议中实现。
不过,现在所有主流TCP版本都实现了保活功能,只是该功能在默认情况下是关闭的,是一个可选择激活的功能。 TCP 连接的任何一端都可以请求打开这一功能,且该功能可以设置在连接的一端、两端或者两端都没有。
保活机制主要作用:
-
检测半开放的连接(另一端非常规关闭连接),及时释放这种连接,避免其长期无效占用资源。
-
保持主机与 NAT 路由器(只是一种举例,此处应是泛指)的长时间连接, 防止中间设备因超时删除连接相关的连接表。
第2点