长连接为什么会被切断
防火墙、负载均衡等中间设备为每条 TCP/UDP 流量维护会话表项,表项空闲超过老化时间就被回收。数据库连接池、视频会议、MQTT 与推送心跳这类业务长时间没有数据报文,表项被提前老化后,后续报文在设备上找不到匹配会话,表现为连接随机中断、要求重新登录或重连,而不是一开始就连不通。
基本信息
| 适用平台 | 华为 USG 系列、H3C SecPath、深信服 AF 等状态检测型安全设备 |
|---|---|
| 涉及业务 | 数据库连接池、视频会议、IM 推送、MQTT、长轮询与 SSE |
| 设备侧相关设置 | 会话老化时间、长连接处理、主备会话同步 |
| 网络侧相关因素 | 多出口路径不一致、链路切换、NAT 端口漂移 |
典型使用场景
- 数据库长连接:应用连接池与数据库之间空闲十几分钟即被回收,表现为偶发的连接失效报错
- 视频会议与实时音视频:媒体流之外的信号通道长时间空闲,被老化后会议中途掉线
- IoT 心跳上报:设备上报间隔大于老化时间时,会出现规律性重连,间隔与老化时间往往高度吻合
- 双机主备切换:切换瞬间会话表重建,未开启会话同步时长连接全部需要重连
- 多出口链路:同一会话的后续报文走到另一条出口,源地址或端口不一致导致连接被拒绝
排查顺序
排查顺序
1. 记录闪断时刻,客户端与服务器两端同步抓包
2. 在设备上查该五元组会话是否存在、剩余老化时间
3. 核对业务心跳间隔与设备老化时间的大小关系
4. 检查闪断时刻是否发生过主备切换或链路切换
5. 调整老化时间或长连接处理参数后回归观察现象与成因对照
| 现象 | 优先怀疑 | 验证方式 |
|---|---|---|
| 空闲固定时长后断开 | 会话老化时间小于业务心跳间隔 | 对比断开间隔与老化时间是否吻合 |
| 切换主备后集中掉线 | 会话未同步,切换后会话表为空 | 在主备设备上查同一五元组会话 |
| 部分终端断、部分正常 | 多出口路径不一致,NAT 转换结果不同 | 分别查各出口上的会话转换地址 |
| 连接被 RST 而非静默超时 | 会话表接近规格上限被主动清理 | 查当前会话数与设备规格余量 |
长连接业务的瓶颈通常不是带宽而是状态:先量化业务心跳间隔,再决定是延长老化时间还是缩短心跳;改设备参数前确认内存与会话规格余量。