View a markdown version of this page

玩家网关的工作原理 - 亚马逊 GameLift 服务器
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

玩家网关的工作原理

玩家网关使用中继网络在游戏客户端和游戏服务器之间路由 UDP 流量。这通过在流量到达游戏服务器之前对其进行验证、限制玩家流量、向公众隐藏游戏服务器 IP 地址以及在中继端点变得不健康时提供更新的端点来防御 DDoS 攻击。

流量流

当玩家连接到游戏会话时,您的游戏后端会从 GetPlayerConnectionDetails API 中检索中继端点和玩家网关令牌,并将其发送到游戏客户端。游戏客户端将玩家网关令牌预置在 UDP 数据包中,并将数据包发送到中继端点。中继网络验证令牌并将合法流量路由到游戏服务器。在交付之前,中继网络会剥离玩家网关令牌,以便游戏服务器接收原始游戏客户端有效负载,并且不需要更改代码。从游戏服务器返回到游戏客户端的通信通过中继网络返回,无需修改。

架构图显示了游戏客户端通过中继网络连接到游戏服务器

核心概念

中继端点

中继端点是游戏客户端用来通过玩家网关发送流量的 IP 地址和端口组合。每个玩家都会收到多个端点,这些端点因玩家而异,以分配流量并减少攻击对同一游戏会话中其他玩家的影响。

该图显示了多个玩家在相同的游戏会话中接收不同的中继端点

玩家网关代币

玩家网关令牌是加密的字节数组,授权玩家通过玩家网关向游戏会话发送流量。GetPlayerConnectionDetailsAPI 以 base64 编码的字符串形式返回令牌。游戏客户端必须在每个 UDP 数据包中预先添加玩家网关令牌。中继网络验证令牌并拒绝带有无效或缺失令牌的数据包。

重要

玩家网关令牌不得加密,并且必须出现在游戏客户端发送的每个 UDP 数据包的开头。如果您的游戏对有效负载进行加密,请在加密游戏数据后预先添加未修改的玩家网关令牌。

玩家网关代币的有效期至少为 3 分钟。我们建议每 60 秒刷新一次令牌,以确保玩家在中继端点变得不健康时收到更新的端点。

GetPlayerConnectionDetails API

您的游戏后端调用 GetPlayerConnectionDetails API 来检索游戏会话中玩家的连接详细信息。API 返回中继端点和玩家网关令牌,或者回退到游戏服务器的 IP 地址和端口进行直接连接。您的游戏客户端应设计为可以处理这两种连接类型。要在中继端点变得不健康时接收更新的端点,请在整个游戏会话中定期调用此 API(建议每 60 秒调用一次)。

有关更多信息,请参阅 GetPlayerConnectionDetails API

监控玩家网关

Player gateway CloudWatch 向 Amazon 发布指标,以帮助您监控网络流量模式、识别潜在的 DDoS 攻击并跟踪中继性能。指标包括数据包和字节 in/out、受限流量和玩家会话。有关玩家网关指标的完整列表,请参阅DDoS 防护(玩家网关)指标

玩家网关限制

为了保护您的游戏服务器免受流量滥用,玩家网关对每位玩家的 UDP 流量施加了速率限制。使用有效的玩家网关令牌,玩家网关将每个玩家令牌限制为每秒 100 个数据包 (pps)。中继网络会限制超过此限制的流量,并且流量无法到达游戏服务器。

这种每位玩家的速率限制有助于防止个别玩家因客户端配置错误或恶意意图而导致流量过大的游戏服务器不堪重负。

IPv4 和 IPv6 兼容性

游戏客户端使用 IPv4 进行通信。玩家网关使用 IPv6 与游戏服务器通信。 Amazon GameLift Servers根据您的队列配置自动处理 IPv4 和 IPv6 之间的转换。

有关在舰队上配置玩家网关的更多信息,请参阅CreateFleetCreateContainerFleet。有关 IPv4 和 IPv6 支持的更多信息,请参阅IPv4 和 IPv6 兼容性