Research
通信リサーチ
オンラインゲームの通信とクライアント実装を調べ、権威の置き方(どこが正とされるか)を整理する。対象タイトルの調査記録と、作品をまたいで見える設計パターンのメモ。
01 / Method
調査の進め方
パケットの羅列ではなく、「この値は誰が正か」を追う。再現可能な仮説だけを隔離環境で検証する。
手順
- –キャプチャ → 操作との相関 → 状態遷移図の作成
- –ローカル表示値と通信で確定した値の差分を記録
- –権威の所在を分類(クライアント / サーバー / 予測+訂正)
- –最小の再現環境で仮説を試し、パターンとして整理する
倫理・環境
- –隔離環境のみ。実サービスへの干渉・妨害はしない
- –調査対象の詳細・生データは公開しない
- –再現は検証用途に限定し、攻撃手順は公開しない
- –攻撃手順の公開ではなく、設計パターンの学習が目的
02 / Protocol
通信解析
認証から戦闘・報酬まで、メッセージの順序依存と「送ってよい情報」の粒度を読み解く。
見ているもの
- –セッションの寿命 — ログイン、入場、再接続でトークンがどう変わるか
- –メッセージの意味 — 意図(対象 ID)か結果(ダメージ値)か
- –順序依存 — 先に消費すべきリソース、単発で失効する入場権
- –冪等性 — 再送・二重送信で状態が壊れるか
- –ローカルキャッシュとサーバー確定値の同期タイミング
よく見るパターン
- –意図だけ送る — 攻撃は対象 ID のみ、ダメージはサーバー算出
- –結果を送る — クライアント計算値をそのまま受理(検証次第で危うい)
- –予測+訂正 — 移動は先に反映、サーバーが後から位置を戻す
- –イベント駆動 — 報酬・ドロップはサーバー通知が正、UI は追従
03 / Trust Boundary
クライアント側の権威
ローカルで何が計算され、改ざんや不整合がゲーム結果に届くか。表示用の値と確定値の境界を切り分ける。
ローカルに残りやすいもの
- –UI 用のステータス・クールタイム表示
- –移動・攻撃の予測再生(サーバー訂正前)
- –セーブデータ上の所持数・装備(同期遅延のキャッシュ)
- –演出・アニメーション用の一時状態
危うくなりやすい条件
- –ローカル判定だけで結果が確定する処理
- –サーバー検証前にインベントリへ反映する UI
- –クライアント送信値をそのまま信じる API
- –再接続時にローカル状態を優先する復元
差分分析で分かること
- –操作前後のセーブとメモリ — 何が即時変わり、何が通信後に変わるか
- –表示と実値のズレ — チートツールの有無より、設計上の隙間の指標になる
- –ローカルだけ変わる値 — サーバー再計算の候補としてマークする
04 / Patterns
設計パターンの整理
複数作品を通して繰り返し見える構成。個別タイトルの実装詳細ではなく、一般化したメモ。
サーバー構成
- –認証・マッチング層とフィールド層の分離(Gateway / World 型)
- –入場トークンは短命・単発消費が多い
- –ソーシャル調整とシーン進行は別チャンネルに載ることがある
権威の置き方
- –クライアントは意図のみ送り、結果はサーバーが確定
- –コンテナ同期 — 入場時にまとめて、以降は差分
- –Attr リスト — キャラごとに同じ形で状態を表す
クライアント実装
- –C#(エンジン)と Lua(UI・ソーシャル)の二層構成が大規模 MMO で多い
- –RPC は method ごとに C# / Lua に振り分けられる
- –スクリプト層はホットアップデートとコンテンツ量の多さに向く
調査の生データ・対象タイトルの特定情報は公開しない。ここに書いているのは、複数作品を通して見えた設計パターンの一般化のみ。