电脑端口行为
本主题将介绍电脑端口行为。
端口规则
当用户使用内置默认 Windows 防火墙时,电脑端口将允许所有出站传输控制协议 (TCP) 和用户数据报协议 (UDP) 流量,同时阻止未经请求的入站 TCP 和 UDP 数据包。
首选的本地 UDP 多人游戏端口的行为方式与其他端口相同,但允许未经请求的入站 UDP 数据包。 无法使用 TCP。
出站流将始终有效,无需为此声明任何属性。 当用户将第一个数据包发送到远程服务器/设备时,无论何种情况,来自该设备的后续传入数据包都将被交付。
对于 Microsoft 游戏开发工具包 (GDK) 游戏中的对等游戏,应在首选多人游戏端口上使用 UDP。 此外,还必须执行防火墙和 NAT 打洞。 除非用户对游戏进行豁免,否则将阻止未经请求的入站 TCP 数据包。 默认情况下,还将阻止未经请求的入站 UDP 数据包,并且需要来自用户的豁免或某种形式的防火墙打洞来取消阻止 UDP 对等流。
游戏豁免的添加可由用户通过防火墙设置实现,也可由你在打包过程中声明特定属性时实现。 用户的防火墙设置和游戏包的属性都将决定实际未经请求的入站数据包的行为。
请务必注意,电脑用户能够使用第三方防火墙。 这些设置将影响端口的整体行为。 下面提供了更多详细信息。
提示:PlayFab Party 的对等网络拓扑可自动处理此功能。 此外,请将 STUN 和 ICE 的 RFC 视为你自己的实现的起点。
管理未经请求的入站流量
使用 GDK 创建的电脑游戏将发布为 MSIXVC 包。
当游戏作为 MSIXVC 包提供时,你可以选择通过在 MicrosoftGame.config 文件中声明 privateNetworkClientServer 或 internetClientServer 等属性来声明如何处理未经请求的入站流量。
重要说明:由于用户的防火墙和设置,这些属性可能会没有实际效果。 若要了解详细信息,请参阅防火墙及其对流量的影响。
下表列出了属性如何影响未经请求的入站流量访问和预期的客户体验。
MicrosoftGame.config | 访问 | 预期的客户体验 |
---|---|---|
指定 privateNetworkClientServer | 允许未经请求的入站 LAN 流量 | 在安装游戏包中指定的可执行映像期间添加游戏豁免。 |
未指定 privateNetworkClientServer | 维护阻止所有未经请求的入站 LAN 流量的默认行为 | 不显示通知。 未请求的入站 UDP/TCP 数据包被无提示删除。 |
指定 internetClientServer | 允许未经请求的入站对等 Internet 流量 | 在安装游戏包中指定的可执行映像期间添加游戏豁免。 |
未指定 internetClientServer | 维护阻止所有未经请求的入站对等 Internet 流量的默认行为 | 不显示通知。 未请求的入站 UDP/TCP 数据包被无提示删除。 |
如何编辑 GDK 游戏的 MicrosoftGame.config
- 转到游戏的源代码。
- 打开 MicrosoftGame.config。
- 在下面添加代码段并保存文件。
请注意,生成 MXIXVC 包时,它将在 SubmissionValidator 日志文件中生成警告。
<ExtendedAttributeList>
<ExtendedAttribute Name="Capability" Value="privateNetworkClientServer"/>
<ExtendedAttribute Name="Capability" Value="internetClientServer"/>
</ExtendedAttributeList>
将属性添加到游戏的 MicrosoftGame.config 文件时,它们将应用于生成的 AppXManifest.xml。 若要了解有关生成过程的详细信息,请参阅 MicrosoftGame.config 概述。
防火墙及其对流量的影响
用户的防火墙和设置会影响游戏的网络功能。 本部分介绍防火墙如何影响 GDK 游戏的流量,这将有助于你加强网络设计。
为了让你更好地了解本主题,我们还提供了受 Win32 游戏防火墙影响的端口访问权限以供参考。
通常,privateNetworkClientServer 和 internetClientServer 属性对使用第三方防火墙的用户没有影响,你需要对这一点做好准备。 预计这将占总用户的 30-40%。
GDK 可执行游戏
使用默认 Windows 10 防火墙的用户
- privateNetworkClientServer 和 internetClientServer 属性可正常发挥作用,如前文所述
- 无论是否定义 privateNetworkClientServer 和 internetClientServer 属性,基于出站的流将始终有效。 只要用户将第一个数据包发送到远程服务器/设备,来自该设备的后续传入数据包便会被交付。
使用第三方防火墙的用户
- privateNetworkClientServer 和 internetClientServer 属性不起作用。 这些用户将以无提示方式删除未经请求的入站数据包。 注意:无论你在打包过程中是否已在 MicrosoftGame.config 中声明访问功能,都会是这种情况。
- 所有端口(包括首选本地 UDP 多人游戏端口)均受这些防火墙指定的策略约束。
- 基于出站的流通常有效。 此时,需要由用户通过第三方防火墙设置来正确豁免游戏的网络访问权限。
Win32 可执行游戏
注意:添加此部分仅作比较之用。 GDK 游戏不是 Win32 游戏。 我们建议使用 GDK 来开发电脑游戏。
使用默认 Windows 防火墙的用户
- 首次启动时,将显示一条通知,以便用户拒绝或允许应用程序对游戏服务器的网络访问。
- 不过,基于出站的流将始终有效,且没有相关 UI 通知。