TCP 自己实现的一种检测心跳情况的机制。
基于TCP打开的链接,会伴随一些计时器(timer),有些计时器是用来管理keepalive的,当计时器趋于 0 的时候(一般也就是整个链接链路空闲,没有数据传输的时候),会触发keepalive 端向另一端发送ack (相关参数:tcp_keepalive_time,该参数决定idle时间为多少是发送ack),如果这个ack没有正常的回复,则会触发一个ack探针发送(相关参数:tcp_keepalive_probes,该参数决定发送探针应该发送几次才断掉连接),探针发送频率(相关参数:tcp_keepalive_intvl,每个探针发送间隔时间)决定探针发送速度。当探针发送足够而且没有回复,则TCP协议会关掉这条连接。
相关文档:
http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
http://www.blogjava.net/yongboy/archive/2015/04/14/424413.html
http://www.cnblogs.com/fengbohello/p/4250177.html
https://hengyunabc.github.io/why-we-need-heartbeat/