Plainnotes

长连接被中间设备掐断

2026-09-26 · 3 分钟网络

客户端报“连接偶尔断一下,重连就好”,间隔大概五分钟。这种规律性通常是中间设备的会话表过期。

家用路由器、云厂商的 NAT 网关、部分防火墙,对空闲 TCP 连接的保持时间常见是 300 秒。连接空闲超过这个时间,表项被回收,下一个包发出去就没了。

对策是把探测周期压到比它短:

net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

应用层有心跳的话优先用它,TCP keepalive 只能在连接空闲时发,且默认要两小时才动。服务端和客户端两边都要设,只设一边没用——断的是中间的会话,不是某一端。