ゲームラグ白書 › L3 家庭内ネットワーク
NATマッピングの期限切れ NAT mapping timeout
原因ID hn-nat · 主担当 ゲーム開発チーム・クライアント開発 · 副担当 ゲーム開発チーム・サーバー開発
図と実験のあるメインページでこのカードを開く →
ルーターは、しばらくパケットがやり取りされていないアイドル接続をNATテーブルから削除します。しばらく放置した後、動いた瞬間に切断されるときによくある原因です。
なぜ ルーターが「内側の機器 ↔ 外側のサーバー」の接続をNATテーブル(アドレス変換表)に記録 → すると パケットがしばらくないとテーブルから削除(UDPは30〜120秒が多い) → 画面では サーバーのパケットが家の中に入れず、切断
- 症状
- 切断
- 要因
- パケットロス
- 誰に起きるか
- 自分だけ, 同じ家
- いつ
- しばらく放置した後
- 担当
- 主担当 ゲーム開発チーム・クライアント開発 · 副担当 ゲーム開発チーム・サーバー開発
- ゲーム開発チームの対応
- クライアント:最も短いアイドルタイムアウトの半分以下の間隔でハートビートを送る(UDPのマッピングは家の中から出ていくパケットでしか確実に更新されないため、クライアントが送る)、切れたら自動再接続。サーバー:ハートビートに応答し、一定時間受信がなければ先に接続を片付ける。マッピングが消えて外側のアドレス・ポートが変わっても、セッショントークン(接続時に受け取った確認用の番号)で同じプレイヤーであることを確かめて引き継ぐ。
- グラフでは
- 接続が一斉に切れる · 切断数(ハートビートのタイムアウト)、切断前のアイドル時間
- 確認箇所
- サーバーの切断理由と、切断前にその接続で最後のパケットがやり取りされてから経過した時間(アイドル時間)を集めて分布を確認。テストでは、UDPパケットの間隔を30秒・60秒・120秒と延ばしながら、応答が途切れる間隔を測定
- 該当する場合
- 放置していた接続だけが切れ、アイドル時間が30〜120秒のような特定の値の直後に集中する。ハートビートの間隔をそれより短くすると消える
- 該当しない場合
- 動いている最中にも切れるなら回線・経路側。特定のモバイルキャリアだけで短い値に集中するなら「通信事業者の共有IP(CGNAT)」
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- RFC 4787: Network Address Translation (NAT) Behavioral Requirements for Unicast UDP IETF
UDPのマッピングタイマーは2分より前に切れてはならず、デフォルトは5分以上を推奨。内側から出ていくパケットによる更新は必須、外側から入ってくるパケットによる更新は任意 - An Experimental Study of Home Gateway Characteristics (IMC 2010) ACM
家庭用ルーター34機種を測定:UDPマッピングの保持は30〜691秒・中央値90秒で、半数以上が2分未満。TCPは中央値約60分 - RFC 9308: Applicability of the QUIC Transport Protocol IETF
経路にNATがあるインターネットでは約30秒間隔のkeep-aliveが適切。それより頻繁だとトラフィック・電力の無駄
あわせて読みたい原因
同じ層:L3 家庭内ネットワーク
同じ症状(切断)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る