知识卡片
连接假死与心跳探测的必要性
内容
TCP只有收到四次挥手包或RST包才认定连接断开,网卡故障、公网丢包、进程假死会导致一端连接早已失效,另一端毫无感知——这就是连接假死。应用层无法依赖TCP发现问题,必须自己探测:一段时间没读到数据(含心跳包)就主动判定并关闭连接。心跳包用于排除正常静默只是没数据的情况,让超时判断更准确。发散:底层协议语义覆盖不到某些故障场景时,上层必须自己引入探测机制弥补,TCP的keepalive是同一思路。
参考来源
《跟闪电侠学Netty:Netty即时聊天实战与底层原理》第20章《心跳与空闲检测》