ゲームラグ白書 › 症状から探す
切断:原因51件と担当
別名:回線落ち、落ちる、サーバーとの接続が切断されました
図のあるメインページの症状辞典で開く →
プレイ中に接続が切れ、ログイン画面や再接続の画面に戻されます。
フリーズが数秒続いた後に「接続が切断されました」と表示される。複数人が同時に切断されるならサーバー側の問題です。
タイムアウト時間内にパケットが一つも届きませんでした。長い回線断、アイドルタイムアウト、サーバーのクラッシュ・再起動、タイムアウトより長く止まったサーバーや自分のPC(長いロード)を確認します。案内なしにゲーム自体が終了したなら、接続よりもクライアントの強制終了(クラッシュ、メモリ不足)を先に疑います。
この症状を引き起こす原因
L1 クライアントのゲームプロセス
- クライアントのメモリリーク: 長く起動しておくほどメモリが増えてだんだん重くなり、最後にはゲームが強制終了します。 (ゲーム開発チーム・クライアント開発)
- クライアントのクラッシュ: 処理されないエラーでゲームが終了します。プレイヤーには切断のように見えますが、サーバーは正常です。 (ゲーム開発チーム・クライアント開発)
- ゲームのセキュリティモジュール(アンチチート)の検査: チートを防ぐためにゲームと一緒に動くセキュリティモジュールが、定期的に検査を行います。検査が重かったり、セキュリティサーバーとやり取りするハートビート(定期的な生存確認の信号)が遅れたりすると、カクついたり切断されたりします。 (ゲーム開発チーム・クライアント開発)
L2 クライアントのOS・端末
- モバイルアプリのバックグラウンド移行: 通知を見ようとアプリをいったんバックグラウンドに移すと、OSが数秒後にアプリを一時停止(suspend)し、その間にサーバーは自分を切断します。 (ゲーム開発チーム・クライアント開発)
- Wi-Fi ↔ LTE・5Gの切り替え: 家の外に出てWi-Fiが切れ、LTE・5Gに切り替わると、自分のIPアドレスが変わり、それまでの接続が無効になります。 (ゲーム開発チーム・サーバー開発)
- ウィンドウの最小化・非アクティブ時の処理制限: ほかのウィンドウを見たりゲームを最小化したりすると、ゲームとWindowsが電力を節約するためにゲームの処理を遅くします。戻ると遅れていたパケットが押し寄せるか、すでに切断されています。 (ゲーム開発チーム・クライアント開発)
- オーバーレイソフトの干渉: メッセンジャー・ランチャー・録画・FPS表示のソフトが、ゲーム画面の上に自分のUIを重ねて描くため、ゲームのレンダリング処理に割り込みます(フック)。フレームごとの処理が増え、ときどきゲームとぶつかって一瞬止まったり、ゲームが強制終了したりします。 (外部・外部)
L3 家庭内ネットワーク
- NATマッピングの期限切れ: ルーターは、しばらくパケットがやり取りされていないアイドル接続をNATテーブルから削除します。しばらく放置した後、動いた瞬間に切断されるときによくある原因です。 (ゲーム開発チーム・クライアント開発)
- ルーターの性能不足・過熱: 安価なルーターに数十台の機器、数千の接続が集中すると、ルーター自体が処理しきれなくなります。 (外部・外部)
- 基地局のハンドオーバー(移動中): バスや地下鉄で移動すると、基地局が切り替わる間、通信が途切れます。 (外部・外部)
- モバイル電波の弱さ・不感地帯: エレベーター・地下・建物の奥では、再送が増えて速度が落ち、最終的に切断されます。 (外部・外部)
L4 インターネット回線
- 国・通信事業者単位のUDP制限・パケット検査: 一部のネットワークでは、特定のUDPアドレス・ポートをブロックしたりUDPの速度を制限したりし、パケット検査装置が識別できないプロトコルを遮断します。UDPで通信するゲームは、そのネットワークでは接続できなかったり、頻繁に切断されたりします。 (外部・外部)
- 回線品質の不良: 端子の接触不良や古いケーブル、モデムの異常は、継続的なパケットロスと周期的な回線断を引き起こします。 (外部・外部)
- DDoSによる共有回線の飽和: ゲーム会社や同じネットワーク内の別の宛先を狙った大量の攻撃が、共有回線を埋め尽くします。 (インフラチーム・ネットワークインフラ)
- 通信事業者の共有IP(CGNAT): モバイル回線や一部の通信事業者では、複数の契約者が1つのIPを共有し、アイドル接続のマッピングを短時間で削除します。 (ゲーム開発チーム・クライアント開発)
L5 データセンターのネットワーク機器
- ファイアウォールのセッションテーブル飽和: ファイアウォールは、通過させたすべての接続をセッションテーブルに記録して追跡します。テーブルがいっぱいになると、新しい接続を受け付けられなくなります。 (インフラチーム・ネットワークインフラ)
- ロードバランサーのアイドルタイムアウト: ロードバランサーは、アイドル状態の接続を一定時間後に削除します。ゲーム側は接続が維持されているものとみなしているうちに、切断されてしまいます。 (インフラチーム・ネットワークインフラ)
- クラウドのセキュリティグループによる接続追跡の期限切れ: クラウドのサーバーに付いているファイアウォール(セキュリティグループ)も接続を追跡し、アイドル接続の追跡エントリは決められた時間の後に期限切れになります。ロードバランサーを通さずに直接つなぐサーバーでも、しばらく放置していたプレイヤーが切断されることがあります。 (インフラチーム・サーバーインフラ)
- ネットワーク機器のフェイルオーバー: ルーター・ファイアウォールの1台が故障して予備機に切り替わる(フェイルオーバー)数秒の間、全員が止まります。 (インフラチーム・ネットワークインフラ)
- MTUの不一致(大きなパケットだけ消える): 途中の区間のMTU(一度に送れるサイズ)が小さくなっているのにサイズ超過の通知がブロックされると、大きなパケットだけが消え続けます。 (インフラチーム・ネットワークインフラ)
L6 サーバーのネットワークカード
- クラウドホストのメンテナンス・ライブマイグレーション: クラウド事業者は物理サーバー(ホスト)をメンテナンスするとき、仮想マシンを別のホストに移したり(ライブマイグレーション)、一時的に止めたりします。その間はサーバー全体が止まり、止まる時間が長いと接続が切れます。 (インフラチーム・サーバーインフラ)
- NICドライバー・ファームウェアの問題: ドライバーのバグや機能の誤動作でカードが止まり、再起動している間はすべての送受信が途切れます。 (インフラチーム・サーバーインフラ)
L7 サーバーOS(カーネル)
- OOM Killer: Linuxはメモリが尽きると、メモリを最も多く使っているプロセスを選んで強制終了します。たいていはゲームサーバーです。 (ゲーム開発チーム・サーバー開発)
- システム時刻のジャンプ(NTPステップ): サーバーの時刻が一度に数秒前後に調整されると、システム時刻に依存するタイマーが一斉に発火したり止まったりします。 (ゲーム開発チーム・サーバー開発)
L8 ソケットとプロトコル
- TCPのRTOと指数バックオフ: 再送がまた失敗するたびに待ち時間が2倍に延びるため、短い回線断が長い停止になります。 (ゲーム開発チーム・サーバー開発)
- 遅いクライアント(slow consumer)の処理ポリシー: 送るデータがたまり続けるクライアントに対して、サーバーが古い更新を破棄したり接続を切ったりします。 (ゲーム開発チーム・サーバー開発)
- RSTによる強制終了で最後のデータが消失: サーバーが接続を急に切ると、最後に送った案内や保存完了の通知が失われます。 (ゲーム開発チーム・サーバー開発)
- SO_REUSEPORTの振り分けの偏り: 同じポートを複数のプロセスで分担して受け付けると、カーネルは接続ごとにアドレスのハッシュで担当プロセスを決め、その後は変更しません。担当プロセスが1つ止まると、そこに割り当てられた人だけが待たされます。 (ゲーム開発チーム・サーバー開発)
- WindowsのUDPソケットのWSAECONNRESETエラー: Windowsサーバーがすでに去ったクライアントにUDPを送ると、「ポート到達不能」(ICMP)の通知が返ってきます。その通知のせいで次の受信呼び出しがエラーで終わりますが、サーバーのコードがこのエラーをソケット自体の故障として扱うと、そのソケットを使っている全員が影響を受けます。 (ゲーム開発チーム・サーバー開発)
L9 サーバーのゲームプロセス
- デッドロック: 2つのスレッドが互いに相手の取ったロックを待つと、永遠に止まったままになります。 (ゲーム開発チーム・サーバー開発)
- サーバークラッシュ: 未処理のエラーでサーバープロセスが落ちると、そのサーバーにいた全員が同時に切断されます。 (ゲーム開発チーム・サーバー開発)
- 無限ループ・ロジックの暴走: バグで1ティックが終わらないとサーバーが止まり、ウォッチドッグが強制的に再起動します。 (ゲーム開発チーム・サーバー開発)
L10 メモリ
- メモリリーク: 解放されないメモリが少しずつたまり、数日後にGCの多発・スワップ・強制終了につながります。 (ゲーム開発チーム・サーバー開発)
- GCスラッシング(ヒープの空き不足): 生存データがヒープの上限に近づくと、GCが走っても回収できるものがほとんどなく、GCが休みなく繰り返されます。 (ゲーム開発チーム・サーバー開発)
- メモリの断片化: アロケーションと解放を繰り返して空き領域が細かく分断されると、実際に使っている量よりはるかに多くのメモリを占有するようになります。 (ゲーム開発チーム・サーバー開発)
L11 ディスク
- ディスクフル: ログとダンプがたまってディスクがいっぱいになると書き込みが失敗し、備えがなければサーバーが落ちます。 (インフラチーム・サーバーインフラ)
L12 データベース
- DBのフェイルオーバー: プライマリが落ちてスタンバイDBに切り替わる間は書き込みができず、レプリケーションが間に合わなかった最後のデータは失われることがあります。 (インフラチーム・DBインフラ)
L13 サーバー構成と運用
- ゲートウェイ・プロキシ経由: クライアントとゲームサーバーの間に中継サーバーを置くと、経由するたびに処理時間が加わり、そのサーバーが単一障害点になります。 (ゲーム開発チーム・サーバー開発)
- ゾーン移動(サーバー間の引き継ぎ): 別のエリアやダンジョンに入るとき、キャラクター情報を別のサーバーへ引き渡す過程で遅延や失敗が起きます。 (ゲーム開発チーム・サーバー開発)
- デプロイ・再起動: アップデートのためにサーバーを再起動するとき、接続を移さずに止めると、そのサーバーにいた人は切断され、終了直前の保存と再接続が一気に集中します。 (ゲーム開発チーム・サーバー開発)
- ログイン待機列の上限・再接続猶予の不足: リリース直後やメンテ明けに接続が集中すると、ログイン待機列が上限に達して新たな待機を拒否し、待っていたユーザーは一瞬切れた間に順番を失って最後尾に戻されます。 (ゲーム開発チーム・サーバー開発)
同期設計
- ホスト(部屋主)型の構成: 1人のプレイヤーのPCがサーバーの役割をすると、その人の回線とPC性能が全員の体感を決めます。 (ゲーム開発チーム・サーバー開発)
一部のユーザーだけに起きる問題
- 特定の通信事業者のユーザーに集中する検証の誤検知: ジッターが大きい回線を使う人は入力がまとまって届くため、サーバーの速度・クールタイムのチェックに頻繁に引っかかります。 (ゲーム開発チーム・サーバー開発)
- 固定UDPポートの衝突: クライアントが決まったローカルポートを使うように作られていると、同じPCの2つ目のクライアントはそのポートを使えないか、1つ目とパケットを分け合って受け取ることになります。 (ゲーム開発チーム・クライアント開発)
- IP・端末基準のセッション識別バグ: サーバーや中継サーバーが接続をIPや端末IDで区別していると、同じPC(同じグローバルIP)の2つのクライアントを1人として認識します。 (ゲーム開発チーム・サーバー開発)
- 多重起動の制限: セキュリティモジュールやサーバーのポリシーが1台のPCでの複数クライアントを制限していると、2つ目のクライアントは起動・接続ができないか、先に起動した側が切断されます。一部のゲームは追加のクライアントの機能だけを制限します。 (ゲーム開発チーム・クライアント開発)
- バックグラウンドウィンドウの処理制限: バックグラウンドウィンドウのクライアントでは、ゲーム・エンジン・OSがフレームと処理を減らします。受け取ったパケットを時間内に処理できず、詰まったりあふれたりします。 (ゲーム開発チーム・クライアント開発)
TCP再送の根本原因
- ファイアウォール・接続追跡による破棄: ファイアウォールやLinuxの接続追跡(conntrack、通過する接続をテーブルに記録する機能)は、テーブルが満杯になったり、接続の状態が合わないと判断したりすると、パケットを破棄します。 (インフラチーム・ネットワークインフラ)
- 中間機器の処理上限超過(ファイアウォール・IPS・DDoS対策): ファイアウォール、侵入防止システム(IPS)、DDoS対策機器は、通過するパケットを1つずつ検査します。検査能力を超えた瞬間から、処理しきれなかったパケットを破棄します。 (インフラチーム・ネットワークインフラ)
- MTUブラックホール(大きいパケットだけ繰り返し失われる): 途中の区間が受け取れるサイズが小さくなったのに「大きすぎる」という通知(ICMP)が遮断されると、大きなパケットは何度送り直しても消え続けます。 (インフラチーム・ネットワークインフラ)
- 接続中のNAT・ロードバランサーのマッピング期限切れ: アイドル接続のマッピング(この接続をどこに転送するかを記録したエントリ)を中間機器が消すと、次に送るパケットは転送されません。再送だけを繰り返した末に切断されるか、機器が接続拒否(RST)を返してすぐに切断されます。 (ゲーム開発チーム・クライアント開発)
図のあるメインページの症状辞典を見る