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

ゲームラグ白書 › L5 データセンターのネットワーク機器

クラウドのセキュリティグループによる接続追跡の期限切れ Cloud security group connection tracking timeout

原因ID dc-cloud-conntrack · 主担当 インフラチーム・サーバーインフラ · 副担当 ゲーム開発チーム・クライアント開発, ゲーム開発チーム・サーバー開発

図と実験のあるメインページでこのカードを開く →

クラウドのサーバーに付いているファイアウォール(セキュリティグループ)も接続を追跡し、アイドル接続の追跡エントリは決められた時間の後に期限切れになります。ロードバランサーを通さずに直接つなぐサーバーでも、しばらく放置していたプレイヤーが切断されることがあります。

なぜ セキュリティグループがゲームの接続を追跡する設定(特定のアドレスだけ許可、アウトバウンドルールの制限、NLB経由など) → すると しばらくアイドル状態だった接続の追跡エントリが期限切れになり、その後に届いたパケットをセキュリティグループが黙って破棄 → 画面では 離席後に再び動くと反応がないまま切断。サーバープログラムはしばらく気づかない

症状
切断
要因
パケットロス
誰に起きるか
自分だけ, サーバー全体
いつ
しばらく放置した後
担当
主担当 インフラチーム・サーバーインフラ · 副担当 ゲーム開発チーム・クライアント開発, ゲーム開発チーム・サーバー開発
ゲーム開発チームの対応
クライアント:最も短いアイドルタイムアウトの半分以下の間隔でハートビートを送る(TCP 350秒なら175秒以下、UDPストリーム180秒なら90秒以下)、切れたら自動で再接続。サーバー:ハートビートに応答し、一定時間受け取れなければ先に接続を整理、セッショントークンで引き継ぐ。
インフラチームの対応
インスタンスの接続追跡時間(TcpEstablishedTimeout)を確認し必要なら延ばす(UDPは180秒が最大のため延ばせない)、追跡が発生しないセキュリティグループ構成を検討(ゲームのポートはすべてのアドレスを許可、アウトバウンドルールはすべて許可。NLBを経由する接続はそれでも追跡される)、新世代のインスタンスに移行するときにアイドル試験。
数値の目安
AWSでは、Nitro v6のインスタンスタイプはアイドル状態のTCP接続の追跡エントリをデフォルトで350秒後に削除します(それ以外のタイプは5日)。UDPは、要求と応答が何度もやり取りされたフロー(ストリーム)が180秒、一方向だけに流れたか要求・応答が1回だけのフローが30秒がデフォルトです。
グラフでは
接続が一斉に切れる · 切断数、切断前のアイドル時間
確認箇所
インスタンスの接続追跡時間の設定とセキュリティグループのルール(追跡が発生する構成か)を確認し、切れた接続のアイドル時間を集計。切れた直後にサーバーでss -tnoiを実行し、その接続がESTABLISHEDのまま残って再送タイマー(timer:(on,…))が動き、backoffが増えていくかを確認
該当する場合
切れた接続のアイドル時間がTCP 350秒、UDPストリーム180秒、UDP一方向30秒の直後に集中し、サーバー側のソケットは切断を検知できないままESTABLISHEDで残る(サーバーに送るデータがあれば再送だけを繰り返す)
該当しない場合
セキュリティグループが追跡しない構成(ゲームのポートをすべてのアドレスに許可、アウトバウンドルールはすべて許可、NLBを経由しない)ならこの原因ではない。NLBを経由するなら「ロードバランサーのアイドルタイムアウト」と値を比較
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. Amazon EC2 security group connection tracking AWS
    TCPアイドルの追跡はデフォルト350秒(Nitro v6、それ以外は432,000秒=5日)、UDPは一方向30秒・ストリーム180秒(最大180)、すべてのアドレスを許可するルールなら追跡しない、NLB経由の接続は常に追跡
  2. Update the TCP idle timeout for your Network Load Balancer listener AWS
    NLBのアイドルタイムアウトがターゲットインスタンスの接続追跡時間より長いと、インスタンス側が先に黙って接続状態を破棄する
  3. ss(8) — Linux manual page iproute2
    -oのtimer:(on,…)は再送タイマー、-iのbackoffは再送の待ち時間を2倍ずつ延ばした回数

あわせて読みたい原因

同じ層:L5 データセンターのネットワーク機器

同じ症状(切断)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る