NAT 会话空闲超时

NAT 网关为每个会话维护映射表项,空闲超时后回收:超时过短会让长连接被静默断开,过长会长期占用端口资源。建议与业务心跳周期对齐,并按连接规模选择合适档位。

NAT 会话空闲超时是什么

NAT 网关做地址转换时要为每条会话维护一条映射表项,记录「内网地址端口 ↔ 公网地址端口」的对应关系。会话在设定的空闲时间内没有流量往来,这条表项就会被回收、端口归还池子。于是超时成了一个需要权衡的参数:太短,业务侧的长连接会在无数据时被静默断开,表现为周期性重连;太长,端口长期被不活跃的会话占着,高峰期新连接建不起来。

基本信息

机制SNAT 会话在空闲超时后被回收映射,端口归还地址池
默认值由产品设定,常见区间为几十秒到数百秒
过短症状长连接周期性断开,客户端频繁重连
过长症状端口资源被闲置会话占用,新建连接失败率上升
调优依据与业务心跳周期对齐,观察连接失败率与端口使用率
可调范围各厂商不同,是否可自助调整以产品文档为准

典型使用场景

  • 长连接业务(推送、WebSocket、数据库连接池)出现规律性断连
  • 高并发出口在建连高峰失败,需要判断是否端口被占满
  • 改造心跳周期前先确认 NAT 超时,避免心跳比超时还长
  • 排查「空闲一段时间后第一个请求超时」的间歇性故障
  • 按业务类型分出口:长连接与短连接分别走不同 NAT 实例

超时设置的影响

设置对长连接的影响对端口资源的影响
过短空闲时被回收,出现周期性断连回收快,端口压力小
默认多数业务可用平衡
过长连接稳定闲置会话占用端口,建连失败风险上升
极长几乎不断端口可能被彻底占满,影响整体可用性

观察空闲连接存活时长

观察空闲连接存活时长
timeout 600 nc -v <出口地址> 443     # 建立连接后保持空闲
date +%T                              # 记录开始时间
# 观察连接被断开的时间点,推算空闲超时的大致值
while true; do date +%T; ss -tn state established '( dport = :443 )' | wc -l; sleep 30; done
# 对照业务心跳周期:心跳必须明显短于空闲超时
超时相关默认值与可调范围因厂商而异,具体以所在产品文档为准。调整前先确认业务侧心跳与重连逻辑是否健全——有重连兜底时,短超时的代价只是多几次握手。
为保住长连接把超时调得极大,短期问题消失但端口资源被长期占用,高峰期会以「大量新建连接失败」的形式集中爆发,且更难定位。

易错点

  • 业务心跳间隔长于 NAT 空闲超时,出现规律性断连,排查方向却指向应用
  • 为保长连接把超时调得过大,端口资源紧张,高峰期建连失败
  • 只调 NAT 超时不动心跳,两边参数长期不匹配,问题反复出现
  • 忽略不同协议的超时差异(TCP 与 UDP 处理不同),按经验值统一设置
  • 缺少连接数与失败率监控,超时设置的影响只能在用户报障后才发现

数据来源与参考

  • 阿里云 NAT 网关文档
  • 腾讯云 NAT 网关说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌