TCP Keepalive Timer

简介

TCP Keepalive是一有争议的特征,不是TCP规范的一部分。目前协议专家仍然争论是否属于传输层范围,或者应该纳入应用层协议来处理。

特征

  1. tcp keepalive具有检测死连接的作用。但是有一些缺陷:

Keepalives are not part of the TCP specification. The Host Requirements RFC provides three reasons not to use them: (1) they can cause perfectly good connections to be dropped during transient failures, (2) they consume unnecessary bandwidth, and (3) they cost money on an internet that charges by the packet. Nevertheless, many implementations provide the keep-alive timer.
(1)在短暂的故障期间,它们可能引起一个良好连接(good connection)被释放(dropped);
(2)它们消费了不必要的宽带;
(3)在以数据包计费的互联网上它们(额外)花费金钱。然而,在许多的实现中提供了存活定时器;

  1. tcp连接是一个抽象的概念,是个虚拟连接。当客户端服务器建立一个连接后,即使客户端或者服务器网络中断,但是逻辑上此连接仍然存在,当网络重新接通以后仍然可以传输数据。但是如果在短暂断网期间,keepalive机制发送的probe包检测到无响应,则会判断当前连接掉线,清除。在这种业务场景之下,这也是tcp keepalive的一个副作用。
  2. keepalive设计初衷清除和回收死亡时间长的连接。
  3. 使用时需要依据实际业务场景,默认tcp keepalive是关闭状态,连接上无数据传输以后默认2小时才会发送探针检测连接状态,这不适合实时业务场景。对于推送长连接、IM等,判断死连接以便及时清理通过在应用层协议发送心跳包机制,tcp keepalive定时器并不适合这些应用场景。

参考

TCP Keepalive timer

从keep-alive原理 分析TCP游戏服务端心跳包的实用功能

推送方案

你可能感兴趣的:(TCP-IP)