한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › L5 数据中心网络设备

防火墙会话表耗尽 Firewall session table exhaustion

原因 ID dc-firewall · 主责 运维团队·网络运维 · 配合 研发团队·服务器开发, 研发团队·客户端开发

在含图示和实验的完整版中打开此卡片 →

防火墙会把放行的每个连接记到会话表里加以跟踪。表满之后就无法接受新连接。

起因 连接激增或攻击使会话数达到上限 → 结果 没有空位记录新连接,只能拒绝 → 画面表现 新进来的人连不上/无限加载,部分已有连接也会掉线

症状
连不上/无限加载, 掉线
因素
丢包
谁会遇到
全服
何时出现
刚登录/维护结束后, 人多的时候
负责方
主责 运维团队·网络运维 · 配合 研发团队·服务器开发, 研发团队·客户端开发
研发团队要做的事
服务器:用登录排队系统调节集中涌入的连接;复用连接,避免反复建立短连接;心跳中断的连接主动先清理(以免死连接长时间占着会话表)。客户端:心跳间隔不超过最短空闲超时的一半;断开后自动重连,但重试间隔要逐步拉长并随机打散(以免再次同时涌入)。
运维团队要做的事
扩大会话表;尽快清理已结束的短连接(缩短已关闭会话的超时);缩短空闲会话超时时,把新值告知研发团队,以便对齐心跳间隔;拦截攻击;对会话数使用率设告警。
监控图上
触顶后走平 · 防火墙会话数、新建连接失败数
查看位置
把防火墙设备的并发会话数和会话上限画在同一张图上,在设备日志里找因建不了会话而丢弃的记录。Linux 防火墙对比 nf_conntrack_count 与 nf_conntrack_max,并看 dmesg 里的“nf_conntrack: table full, dropping packet”;AWS 实例看 ethtool -S 的 conntrack_allowance_exceeded
确认依据
从会话数在上限处走平的时刻起,新建连接失败增加,会话创建失败记录或丢弃计数器也一起增加
排除依据
会话数离上限还远却连不上,看“连接队列(backlog)溢出”或登录服务器。只有空闲连接断开,看“云安全组连接跟踪过期”
确认手段
运维工具即可确认(无需游戏代码)

出处

  1. Netfilter Conntrack Sysfs variables Linux kernel
    连接跟踪表的最大条目数(nf_conntrack_max),正在关闭的连接的保留时间(TIME_WAIT、FIN_WAIT 默认 120 秒),已建立 TCP 默认 5 天,当前条目数(nf_conntrack_count)
  2. Amazon EC2 security group connection tracking AWS
    超过单个实例可跟踪的连接数时,丢弃新连接的数据包;空闲连接可能耗尽跟踪表
  3. Infrastructure layer attacks AWS
    SYN Flood 这类攻击会占住服务器、防火墙、负载均衡器的资源
  4. net/netfilter/nf_conntrack_core.c (Linux v6.12) Linux kernel
    连接跟踪表满时记录“nf_conntrack: table full, dropping packet”,并丢弃新连接的数据包
  5. Monitor network performance for ENA settings on your EC2 instance AWS
    conntrack_allowance_exceeded:因超出实例连接跟踪上限而丢弃的包数,用 ethtool -S 查看

相关原因

同一层:L5 数据中心网络设备

其他层中同样导致“连不上/无限加载”的原因

查看含图示和实验的原卡片