游戏卡顿白皮书 › 只有部分人遇到的问题
按 IP/设备区分会话的 bug Session keyed by IP or machine ID
原因 ID pt-session-key · 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
服务器或中间服务器按 IP 或设备 ID 区分连接时,会把同一台电脑(同一公网 IP)上的两个客户端认成同一个人。
起因 会话表按 IP 或 IP+设备 ID 建立 → 结果 第二个客户端的信息覆盖或混进第一个会话 → 画面表现 一边看不到 NPC,另一边掉线或收到别人的信息
- 症状
- 隐身/幽灵实体, 掉线
- 因素
- 丢包
- 谁会遇到
- 双开时只有一个客户端, 同一家庭, 特定地区/运营商
- 何时出现
- 刚登录/维护结束后
- 负责方
- 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
- 研发团队要做的事
- 服务器:服务器和中间服务器都按每个连接唯一的会话令牌区分;同一个家里(路由器 NAT 后面)的多个人,以及运营商把一个 IP 分给多个用户的移动线路(CGNAT)用户,也会遇到同样的问题,一定要修。客户端:每个启动的客户端使用各自领取的会话令牌。
- 监控图上
- 仅部分偏高 · 同一公网 IP 的并发会话数,会话被覆盖次数
- 查看位置
- 在服务器、中间服务器日志中记录查找会话时用的键、会话令牌、客户端 IP 和端口,查看同一 IP 第二次连接进来的那一刻原有会话是否被改。在同一台电脑上依次启动两个客户端即可复现
- 确认依据
- 第二个客户端连上的那一刻,第一个会话的地址或角色信息被改掉;同一路由器或移动线路(CGNAT)后面的其他玩家也出现同样的掉线
- 排除依据
- 同一 IP 的两个会话用不同的令牌各自保持,就不是这个原因。两个进程用的是同一个本地端口,看“固定 UDP 端口冲突”
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- RFC 6269: Issues with IP Address Sharing IETF
通过 NAT、CGN 让多个用户共用一个 IPv4 地址时,只凭 IP 无法区分用户
相关原因
同一层:只有部分人遇到的问题
其他层中同样导致“隐身/幽灵实体”的原因
查看含图示和实验的原卡片