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

游戏卡顿白皮书 › L4 公网链路

运营商共享 IP(CGNAT) Carrier-grade NAT

原因 ID isp-cgnat · 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发, 运维团队·网络运维

在含图示和实验的完整版中打开此卡片 →

移动网络和部分运营商让多个用户共用一个 IP,并会在很短时间内清掉空闲连接的映射。

起因 运营商设备管理着海量用户的会话表 → 结果 会话表有上限,空闲超时短 → 画面表现 挂机一会儿就掉线;共用同一 IP 的人被一起封禁的误判

症状
掉线, 连不上/无限加载
因素
丢包
谁会遇到
特定地区/运营商
何时出现
挂机一段时间后
负责方
主责 研发团队·客户端开发 · 配合 研发团队·服务器开发, 运维团队·网络运维
研发团队要做的事
客户端:心跳间隔不超过最短空闲超时(移动网络有时只有 30 秒左右)的一半(运营商 CGNAT 的映射只有内部发出的包才能可靠刷新,所以由客户端发送);断开后自动重连。服务器:响应心跳,一段时间收不到就主动清理连接;映射变化导致地址、端口改变时,凭会话令牌识别为同一玩家并接续会话;一个 IP 可能由多人共用,按 IP 封禁的策略要慎重(结合账号、设备维度判断)。
运维团队要做的事
按运营商共享 IP 的情况,调整防火墙、DDoS 防护设备的单 IP 连接数和每秒新建连接数限制(移动运营商的地址段提高阈值或加入例外)。
数值参考
移动网络的 UDP 空闲超时有时只有 30 秒左右。
监控图上
连接成批断开 · 断开次数(心跳超时)、断开前的空闲时长(按运营商)
查看位置
在连接日志里看同一 IP 同时在线的账号数和所属运营商(ASN),按运营商汇总空闲后断开的连接的空闲时长。玩家侧在路由器管理页面查看互联网(WAN)地址
确认依据
移动运营商地址段内一个 IP 上挂着多个账号,断开前的空闲时长集中在 30~60 秒左右。路由器的 WAN 地址属于 100.64.0.0/10(运营商 NAT 用的共享地址),或与服务器看到的地址不同
排除依据
与运营商无关、集中在家用路由器用户上,看“NAT 映射过期”
确认手段
需要游戏服务器/客户端的日志和指标

出处

  1. A Multi-perspective Analysis of Carrier-Grade NAT Deployment (IMC 2016) ACM
    实测 NAT 的 UDP 映射保持时间为 10~200 秒,74% 不超过 1 分钟;CGN 的中位数为移动网络 65 秒、有线网络 35 秒
  2. RFC 6888: Common Requirements for Carrier-Grade NATs (CGNs) IETF
    CGN 必须支持限制每个用户的外部端口数,以及限制新建映射的速率
  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 公网链路

其他层中同样导致“掉线”的原因

查看含图示和实验的原卡片