遊戲 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 與指標
出處
- A Multi-perspective Analysis of Carrier-Grade NAT Deployment (IMC 2016) ACM
實測 NAT 的 UDP mapping 保留時間為 10~200 秒,74% 在 1 分鐘以下,CGN 中位數為行動網路 65 秒、有線網路 35 秒 - RFC 6888: Common Requirements for Carrier-Grade NATs (CGNs) IETF
CGN 必須支援每位用戶的外部 port 數限制與新 mapping 的建立速率限制 - RFC 6269: Issues with IP Address Sharing IETF
多人共用位址時,以 IP 為單位的封鎖(penalty box)會連帶封鎖同一位址的其他用戶 - RFC 6598: IANA-Reserved IPv4 Prefix for Shared Address Space IETF
100.64.0.0/10 是電信業者 NAT(CGN)設備與用戶分享器之間使用的共用位址區段
相關原因
同一層:L4 網際網路線路
同一症狀(斷線)在其他層的原因
查看含圖解與實驗的完整版卡片