day215-TCP KeepAlive-笔记

要点

  1. 基本原理
  2. TCP的连接
  3. KeepAlive的局限

基本原理

隔一段时间给连接对端发送一个探测包,如果收到对方回应的 ACK,则认为连接还是存活的,在超过一定重试次数之后还是没有收到对方的回应,则丢弃该 TCP 连接。

TCP的连接

物理层面并没有“连接”的概念。

TCP通信双方建立连接,但并不是一直数据交互,有些连接会在数据交互后,主动释放连接,而有些不会。在长时间无数据交互的时间段内,交互双方都有可能出现掉电、死机、异常重启等各种意外,当这些意外发生之后,这些 TCP 连接并未来得及正常释放,在软件层面上,连接的另一方并不知道对端的情况,它会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成端系统资源的消耗和浪费。

为了解决这个问题,在传输层可以利用TCPKeepAlive机制实现来实现。

KeepAlive的局限

KeepAlive监测的方式是发送probe包,会给网络带来额外的流量。

TCP KeepAlive只能在内核层级监测连接的存活与否,而连接的存活不一定代表服务的可用。

例如当一个服务器 CPU 进程服务器占用达到 100%,已经卡死不能响应请求了,此时 TCP KeepAlive 依然会认为连接是存活的。

因此 TCP KeepAlive 对于应用层程序的价值是相对较小的。

参考

TCP Keepalive HOWTO

TCP KeepAlive

文章作者: lmislm
文章链接: http://lmislm.com/2019/08/16/2019-08-16/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog