ゲームラグ白書 › 一部のユーザーだけに起きる問題
IP・端末基準のセッション識別バグ Session keyed by IP or machine ID
原因ID pt-session-key · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
図と実験のあるメインページでこのカードを開く →
サーバーや中継サーバーが接続をIPや端末IDで区別していると、同じPC(同じグローバルIP)の2つのクライアントを1人として認識します。
なぜ セッションテーブルをIP、またはIP+端末IDで作っている → すると 2つ目のクライアントの情報が1つ目のセッションに上書きされるか混ざる → 画面では 片方はNPCが表示されず、もう片方は切断されるかほかの人の情報を受け取る
- 症状
- 表示されない・ゴースト, 切断
- 要因
- パケットロス
- 誰に起きるか
- 同じPCの片方のクライアントだけ, 同じ家, 特定の地域・ISP
- いつ
- 接続直後・メンテ明け
- 担当
- 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
- ゲーム開発チームの対応
- サーバー:サーバー・中継サーバーとも接続ごとに一意のセッショントークンで区別、同じ家(ルーターのNATの内側)の複数人や、通信事業者が1つのIPを複数の契約者に割り当てるモバイル回線(CGNAT)のユーザーも同じ問題に遭うので必ず修正。クライアント:起動したクライアントごとに個別に受け取ったセッショントークンを使う。
- グラフでは
- 一部だけ高い · 同じグローバルIPの同時セッション数、セッション上書きの数
- 確認箇所
- サーバー・中継サーバーのログに、セッション検索に使ったキー、セッショントークン、クライアントのIP・ポートを記録し、同じIPから2つ目の接続が来た瞬間に既存のセッションが変わったかを確認。同じPCで2つのクライアントを順に起動すると再現する
- 該当する場合
- 2つ目のクライアントが接続した瞬間に1つ目のセッションのアドレスやキャラクター情報が変わり、同じルーターやモバイル回線(CGNAT)の内側にいるほかのユーザーでも同じ切断が見られる
- 該当しない場合
- 同じIPの2つのセッションが別々のトークンで個別に維持されているなら、この原因ではない。2つのプロセスが同じローカルポートを使っているなら、固定UDPポートの衝突
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- RFC 6269: Issues with IP Address Sharing IETF
NAT・CGNで複数の契約者が1つのIPv4アドレスを共有すると、IPだけではユーザーを区別できない
あわせて読みたい原因
同じ層:一部のユーザーだけに起きる問題
同じ症状(表示されない・ゴースト)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る