ゲームラグ白書 › 同期設計
厳しすぎるサーバー検証 Over-strict server validation
原因ID sy-strict-check · 主担当 ゲーム開発チーム・サーバー開発
図と実験のあるメインページでこのカードを開く →
移動速度・クールタイム・射程をサーバーが厳しくチェックしすぎると、ジッターでまとめて届いた正常な入力まで拒否します。
なぜ 「1ティックで移動できる距離」「クールタイムの許容誤差0ms」のような厳しい基準 → すると ジッターで2つのコマンドが1ティックにまとめて届くと、ルール違反と判定 → 画面では 引き戻し、クールタイムが終わったのにスキルが拒否される
- 症状
- 引き戻し, 不発・ロールバック
- 要因
- ジッター
- 誰に起きるか
- 自分だけ
- いつ
- ときどきランダムに, 移動中・マップ切り替え時
- 担当
- 主担当 ゲーム開発チーム・サーバー開発
- ゲーム開発チームの対応
- 累積の許容量(トークンバケット)方式でチェック、Ping・ジッターの分の余裕を持たせる。
- グラフでは
- 不定期なスパイク · サーバー検証による拒否・位置補正の数
- 確認箇所
- サーバーログに、検証による拒否・位置補正のたびに、理由、そのティックに届いたそのユーザーのコマンド数、直前のコマンドとの到着間隔を記録
- 該当する場合
- 拒否・補正が、1ティックにコマンドが2つ以上まとめて届いた瞬間に集中しており、数秒単位で合計した移動量・使用回数はルールの範囲内
- 該当しない場合
- 数秒単位で合計してもルールを超えるなら、実際の速度超過・チートの可能性。拒否が特定の通信事業者と夜の時間帯に集中するなら、特定の通信事業者のユーザーに集中する検証の誤検知側
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- Source SDK 2013: player.cpp Valve
ティックごとにたまるコマンド処理バジェット(最大sv_maxusrcmdprocessticks 24ティック)で、まとめて届いたコマンドを許容。これ以上厳しく制限すると正常なユーザーでもカクつきが出たという開発者のコメント - RFC 2697: A Single Rate Three Color Marker IETF
トークンバケット:平均速度(CIR)と一度に許容するバーストサイズ(CBS)で判定
あわせて読みたい原因
同じ層:同期設計
同じ症状(引き戻し)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る