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

遊戲 Lag 白皮書 › L5 資料中心網路設備

防火牆 session 表飽和 Firewall session table exhaustion

原因 ID dc-firewall · 主要負責 基礎設施團隊(網路基礎設施) · 協同 遊戲開發團隊(伺服器開發), 遊戲開發團隊(用戶端開發)

在含圖解與實驗的完整版中開啟卡片 →

防火牆會把放行的每條連線記錄在 session 表中追蹤。表一旦滿了,就無法接受新連線。

為什麼 連線暴增或遭受攻擊,使 session 數達到上限 → 於是 沒有空的項目可以記錄新連線,因此拒絕連線 → 畫面上 想新連進來的人連不上/無限讀取,部分既有連線也會斷線

症狀
連不上/無限讀取, 斷線
因素
遺失
誰會遇到
整個伺服器
何時
剛登入/維護剛結束, 人潮湧入時
負責單位
主要負責 基礎設施團隊(網路基礎設施) · 協同 遊戲開發團隊(伺服器開發), 遊戲開發團隊(用戶端開發)
遊戲開發團隊要做的事
伺服器:用登入排隊系統調節一次湧入的連線;重複使用連線,避免反覆建立短連線;心跳封包中斷的連線要主動先清理(避免死掉的連線長時間佔用 session 表)。用戶端:以最短閒置逾時一半以下的間隔送出心跳封包;斷線時自動重新連線,但要逐步拉長重試間隔並隨機分散(避免大家又同時湧入)。
基礎設施團隊要做的事
加大 session 表;盡快清理很快就結束的連線(縮短已結束 session 的逾時);縮短閒置 session 逾時時,要把數值告知遊戲團隊以配合調整心跳封包間隔;阻擋攻擊;設定 session 使用率警示。
圖表上
碰到上限後持平 · 防火牆 session 數、新連線失敗數
查看位置
把防火牆設備的同時 session 數與 session 上限畫在同一張圖上,並在設備 log 中找出無法建立 session 而丟棄的紀錄。若是 Linux 防火牆,比較 nf_conntrack_count 與 nf_conntrack_max,並查看 dmesg 中的「nf_conntrack: table full, dropping packet」;若是 AWS 執行個體,查看 ethtool -S 的 conntrack_allowance_exceeded
符合的跡象
session 數在上限處持平的時間點起,新連線失敗增加,session 建立失敗紀錄或丟棄計數器也一起增加
不符合的跡象
session 數遠低於上限卻連不上時,是「連線等待佇列(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 資料中心網路設備

同一症狀(連不上/無限讀取)在其他層的原因

查看含圖解與實驗的完整版卡片