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

游戏卡顿白皮书 › L3 家庭网络

NAT 映射过期 NAT mapping timeout

原因 ID hn-nat · 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发

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

路由器会把一段时间没有数据包往来的空闲连接从 NAT 表中删除。这是挂机一段时间后一动就掉线的常见原因。

起因 路由器把“内网设备 ↔ 外部服务器”的连接记录在 NAT 表(地址转换表)中 → 结果 一段时间没有数据包就从表中删除(UDP 通常为 30~120 秒) → 画面表现 服务器的数据包进不了家里,掉线

症状
掉线
因素
丢包
谁会遇到
只有我, 同一家庭
何时出现
挂机一段时间后
负责方
主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
研发团队要做的事
客户端:以不超过最短空闲超时一半的间隔发送心跳(UDP 映射只有从家里往外发的数据包才能可靠刷新,所以由客户端发),断开后自动重连。服务器:响应心跳,一段时间收不到就主动清理连接;映射被删、外部地址和端口变化时,用会话令牌(连接时拿到的确认码)确认是同一玩家并接续。
监控图上
连接成批断开 · 掉线次数(心跳超时)、断开前的空闲时长
查看位置
汇总服务器的断线原因,以及断开前该连接最后一个数据包往来后经过的时间(空闲时长),看其分布。测试时把 UDP 发包间隔逐步拉长到 30 秒、60 秒、120 秒,测出响应中断时的间隔
确认依据
只有挂机中的连接会断,空闲时长集中在 30~120 秒这类特定值之后。把心跳间隔缩短到比它更短后消失
排除依据
正在操作时也掉线,是线路或路由问题。只在特定移动运营商下集中在较短的值上,看“运营商共享 IP(CGNAT)”
确认手段
需要游戏服务器/客户端的日志和指标

出处

  1. RFC 4787: Network Address Translation (NAT) Behavioral Requirements for Unicast UDP IETF
    UDP 映射计时器不得短于 2 分钟,建议默认 5 分钟以上;内网往外发的数据包必须刷新映射,外部进来的数据包刷新映射为可选
  2. An Experimental Study of Home Gateway Characteristics (IMC 2010) ACM
    对 34 款家用路由器的测量:UDP 映射保持 30~691 秒,中位数 90 秒,超过一半不到 2 分钟;TCP 中位数约 60 分钟
  3. RFC 9308: Applicability of the QUIC Transport Protocol IETF
    路径上有 NAT 的互联网环境中,约 30 秒间隔的 keep-alive 比较合适,更频繁会浪费流量和电量

相关原因

同一层:L3 家庭网络

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

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