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

遊戲 Lag 白皮書 › L4 網際網路線路

電信業者共用 IP(CGNAT) Carrier-grade NAT

原因 ID isp-cgnat · 主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發), 基礎設施團隊(網路基礎設施)

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

行動網路與部分電信業者讓多位用戶共用一個 IP,並在短時間內清除閒置連線的 NAT mapping。

為什麼 電信業者的設備要管理大量用戶的 session 表 → 於是 session 表有上限,閒置逾時很短 → 畫面上 閒置一陣子後斷線;共用同一個 IP 的人被誤判而一起封鎖

症狀
斷線, 連不上/無限讀取
因素
遺失
誰會遇到
特定地區/電信業者
何時
閒置一段時間後
負責單位
主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發), 基礎設施團隊(網路基礎設施)
遊戲開發團隊要做的事
用戶端:以最短閒置逾時(行動網路有時只有 30 秒左右)一半以下的間隔送出心跳封包(電信業者的 CGNAT mapping 只有從內部送出的封包才能確實更新,所以由用戶端送),斷線時自動重新連線。伺服器:回應心跳封包,一段時間沒收到就先清理連線;mapping 改變導致位址、port 不同時,也要用 session token 接續成同一位玩家;一個 IP 可能由多人共用,以 IP 為單位的封鎖政策要謹慎(搭配帳號、裝置一起判斷)。
基礎設施團隊要做的事
依電信業者共用 IP 的情況,調整防火牆、DDoS 防護設備的每 IP 連線數與每秒新連線數限制(行動電信業者的位址區段提高門檻或列為例外)。
數值參考
行動網路的 UDP 閒置逾時有時只有 30 秒左右。
圖表上
連線同時大量中斷 · 斷線次數(心跳逾時)、斷線前的閒置時間(依電信業者)
查看位置
在連線 log 中查看同一個 IP 同時連上的帳號數與電信業者(ASN),並依電信業者彙整閒置後才斷線的連線,統計其閒置時間。玩家端請確認分享器管理頁面上的網際網路(WAN)位址
符合的跡象
行動電信業者的位址區段中同一個 IP 連上多個帳號,斷線前的閒置時間集中在 30~60 秒左右的短時間。分享器的 WAN 位址是 100.64.0.0/10(電信業者 NAT 用的共用位址),或與伺服器看到的位址不同
不符合的跡象
與電信業者無關、集中在使用家用分享器的玩家時是「NAT mapping 過期」
確認方式
需要遊戲伺服器/用戶端的 log 與指標

出處

  1. A Multi-perspective Analysis of Carrier-Grade NAT Deployment (IMC 2016) ACM
    實測 NAT 的 UDP mapping 保留時間為 10~200 秒,74% 在 1 分鐘以下,CGN 中位數為行動網路 65 秒、有線網路 35 秒
  2. RFC 6888: Common Requirements for Carrier-Grade NATs (CGNs) IETF
    CGN 必須支援每位用戶的外部 port 數限制與新 mapping 的建立速率限制
  3. RFC 6269: Issues with IP Address Sharing IETF
    多人共用位址時,以 IP 為單位的封鎖(penalty box)會連帶封鎖同一位址的其他用戶
  4. RFC 6598: IANA-Reserved IPv4 Prefix for Shared Address Space IETF
    100.64.0.0/10 是電信業者 NAT(CGN)設備與用戶分享器之間使用的共用位址區段

相關原因

同一層:L4 網際網路線路

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

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