what(保活机制是什么):
服务器端设置一个保活定时器,当定时器开始工作时,就会定时的向网络通信的另一端发送保活探测的TCP报文。如果服务器接收到了ACK报文,那么对方是存活的,否则网络存在故障。
why(保活机制为何要存在):
1、通过保活机制可以保证通信双方连接不被释放,即:长连接的场景;
2、确保网络连接出问题的TCP连接能够被释放掉。如:客户端或者服务器端发生了错误或者宕机;
how(保活机制是如何工作的):
如果一个连接在最大非活跃时间(tcp_keepidle或者net.ipv4.tcp_keepalive_time)内没有动作,则向客户端发送探测报文(以后间隔tcp_keepintvl或者net.ipv4.tcp_keepalive_intvl再发送)。客户端必须处理以下4种状态:
1、客户端正常,并且可达,服务器在两小时(tcp_keepidle或者net.ipv4.tcp_keepalive_time)后,服务端的保活定时器复位。如果两小时(tcp_keepidle或者net.ipv4.tcp_keepalive_time)之间,有应用程序的通讯通过该连接,定时器在交换完数据后会复位;
2、客户端已经崩溃,并且关闭或者正在重新启动。这种情况下,客户端是没有反应的,服务器会在75秒(tcp_keepintvl或者net.ipv4.tcp_keepalive_intvl)后超时重试,服务器一共重试10次(tcp_keepcnt 或者net.ipv4.tcp_keepalive_probes)。如果服务器没有收到一个响应,它就认为客户主机已经关闭,并终止连接;
3、客户端崩溃后,已经重启动。这时服务器会收到一个复位响应,那么服务器将会终止这个连接;
4、客户端正常,但是客户端和服务器相互不可达。处理和2相同;