한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 Lag 白皮書 › L3 家用網路

NAT mapping 過期 NAT mapping timeout

原因 ID hn-nat · 主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發)

在含圖解與實驗的完整版中開啟卡片 →

分享器會把一段時間沒有封包往來的閒置連線從 NAT 表中刪除。這是閒置一段時間後一有動作就斷線的常見原因。

為什麼 分享器把「內部裝置 ↔ 外部伺服器」的連線記錄在 NAT 表(位址轉換表)中 → 於是 一段時間沒有封包就從表中刪除(UDP 通常為 30~120 秒) → 畫面上 伺服器的封包進不了家中網路,造成斷線

症狀
斷線
因素
遺失
誰會遇到
只有我, 同一個家
何時
閒置一段時間後
負責單位
主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
用戶端:以最短閒置逾時一半以下的間隔送出心跳封包(UDP mapping 只有從家中送出的封包才能確實更新,所以由用戶端送),斷線時自動重新連線。伺服器:回應心跳封包,一段時間沒收到就先清理連線;mapping 被刪除導致外部位址、port 改變時,也要用 session token(連線時取得的識別碼)確認是同一位玩家並接續。
圖表上
連線同時大量中斷 · 斷線次數(心跳逾時)、斷線前的閒置時間
查看位置
收集伺服器端的斷線原因,以及斷線前該連線最後一次封包往來後經過的時間(閒置時間),查看其分布。測試時把 UDP 封包間隔逐步拉長到 30 秒、60 秒、120 秒,量出回應中斷的間隔
符合的跡象
只有閒置中的連線會斷,且閒置時間集中在 30~120 秒這類特定值之後。把心跳間隔縮得比這更短就消失
不符合的跡象
移動中也會斷線時,問題在線路或路由。只在特定行動電信業者集中於較短的值時,是「電信業者共用 IP(CGNAT)」
確認方式
需要遊戲伺服器/用戶端的 log 與指標

出處

  1. RFC 4787: Network Address Translation (NAT) Behavioral Requirements for Unicast UDP IETF
    UDP mapping 計時器不得在 2 分鐘內到期,建議預設 5 分鐘以上;由內往外的封包必須能更新 mapping,由外往內的封包更新則為選用
  2. An Experimental Study of Home Gateway Characteristics (IMC 2010) ACM
    實測 34 款家用分享器:UDP mapping 保留 30~691 秒、中位數 90 秒,過半數不到 2 分鐘;TCP 中位數約 60 分鐘
  3. RFC 9308: Applicability of the QUIC Transport Protocol IETF
    路徑上有 NAT 的網際網路,keep-alive 間隔約 30 秒較適當,更頻繁則會浪費流量與電力

相關原因

同一層:L3 家用網路

同一症狀(斷線)在其他層的原因

查看含圖解與實驗的完整版卡片