遊戲 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 與指標
出處
- RFC 4787: Network Address Translation (NAT) Behavioral Requirements for Unicast UDP IETF
UDP mapping 計時器不得在 2 分鐘內到期,建議預設 5 分鐘以上;由內往外的封包必須能更新 mapping,由外往內的封包更新則為選用 - An Experimental Study of Home Gateway Characteristics (IMC 2010) ACM
實測 34 款家用分享器:UDP mapping 保留 30~691 秒、中位數 90 秒,過半數不到 2 分鐘;TCP 中位數約 60 分鐘 - RFC 9308: Applicability of the QUIC Transport Protocol IETF
路徑上有 NAT 的網際網路,keep-alive 間隔約 30 秒較適當,更頻繁則會浪費流量與電力
相關原因
同一層:L3 家用網路
同一症狀(斷線)在其他層的原因
查看含圖解與實驗的完整版卡片