首页/系统/Linux 内核与性能调优速查/nf_conntrack UDP 超时调优
网络栈调优98 条

nf_conntrack UDP 超时调优

UDP 会话在连接跟踪表里的存活时间由独立超时控制; 过长会堆积死条目, 过短会回收仍在通信的长会话。

什么是 conntrack UDP 超时

开启连接跟踪(netfilter conntrack)后,内核为每条流量维护一份状态条目。UDP 无连接语义,条目靠超时老化:net.netfilter.nf_conntrack_udp_timeout 控制普通 UDP 会话的存活时间,nf_conntrack_udp_timeout_stream 控制被判定为“有双向流量”的长会话(音视频、QUIC 等)。超时过长会堆积大量死条目,过短则会在会话仍在通信时回收条目,导致 NAT 映射失效、回包被丢弃。

基本信息

参数路径net.netfilter.nf_conntrack_udp_timeout / ..._udp_timeout_stream
单位秒
普通值参考常见 30 秒
长会话参考常见 120 秒或更长
观测conntrack -S、/proc/sys/net/netfilter/nf_conntrack_count
前提需要装载 nf_conntrack 相关模块

典型使用场景

  • NAT 网关后的语音视频卡顿:确认长 UDP 会话条目是否被提前回收
  • 连接跟踪表打满:核对表中条目构成与各协议的存活时间
  • 高并发 UDP 服务调优:在内存占用与映射稳定性之间取平衡
  • 故障复盘:确认回包丢失是否由 NAT 映射消失引起
  • 与 TCP 超时参数一起核对,形成完整的老化策略

查看与调整

查看与调整
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
conntrack -S | head -10                 # 各协议的统计
conntrack -L -p udp 2>/dev/null | head -5   # 查看 UDP 条目(需 conntrack-tools)
# 调整示例(先记录原值):sysctl -w net.netfilter.nf_conntrack_udp_timeout=60

两个参数的分工

参数覆盖对象调整影响
udp_timeout普通单向或短 UDP 流缩短可释放表容量,过长则堆积死条目
udp_timeout_stream双向持续通信的长会话过短会中断音视频与 QUIC 类流量
nf_conntrack_max表容量上限仅调超时不解决容量不足
tcp 相关超时项TCP 各状态存活时间需与 UDP 策略整体评估
先确认丢包是否真由 conntrack 引起:抓包看回包是否到达网卡却在防火墙处被丢弃,或观察条目计数是否出现快速增删,再动超时参数。
缩短超时会让长 UDP 会话在通信过程中被回收,NAT 映射随之失效,表现为通话中断或周期性丢包,这类故障排查成本很高。
动参数前先确认网关是否真的依赖连接跟踪:只有无状态转发而没有状态化规则的场景,这些超时项可能根本不起作用,改了也看不到效果。

易错点

  • 缩短超时导致长 UDP 会话被提前回收,NAT 映射失效,业务表现为周期性中断
  • 修改前未记录现值,异常时无法快速回滚,故障窗口被无谓拉长
  • 把连接跟踪表打满的问题当成超时问题处理,容量与老化是两个维度
  • 只调 UDP 参数而忽略 TCP 侧老化策略,整体行为仍然不符合预期

数据来源与参考

  • Linux Documentation/networking/nf_conntrack-sysctl.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌