使用 UDP 的在线多人游戏如何通过 Internet 在网络之间传递数据包?据我了解,客户端必须在其路由器上启用端口转发才能使数据包到达他们的计算机。这是大型网络游戏(魔兽世界、暗黑破坏神等)要求玩家做的吗?
例如,我最近创建了一个处理 udp 流量的服务器。它只是回显发件人发送的任何内容。我将它部署到互联网上的服务器。启用端口转发后,我只能将回声返回给发送者,但如果同一本地网络上有两个发送者,这将不起作用。
使用 UDP 的在线多人游戏如何通过 Internet 在网络之间传递数据包?据我了解,客户端必须在其路由器上启用端口转发才能使数据包到达他们的计算机。这是大型网络游戏(魔兽世界、暗黑破坏神等)要求玩家做的吗?
例如,我最近创建了一个处理 udp 流量的服务器。它只是回显发件人发送的任何内容。我将它部署到互联网上的服务器。启用端口转发后,我只能将回声返回给发送者,但如果同一本地网络上有两个发送者,这将不起作用。
简短回答:NAT 连接跟踪
要记住的一件事是,IPv4 互联网上的绝大多数路由器都是 NAT 路由器。
大多数 NAT 实现都进行智能跟踪,当您将 UDP 从内部客户端发送到某个地方时,您将拥有一个目标端口和一个源端口。如果流量在端口反转的情况下进入,那么该流量将被路由回您的客户端,并在大多数防火墙中被允许。
具有跟踪功能的 NAT/防火墙将这些数据包检测为相关并将它们转发回去。
基于UDP
server
端口注释的示例5000
server:5000
客户端为, 源发送一个数据包client:5001
client:5001
以及目标的数据包server:5000
。NATip:NATport
NATip:NATport
,其来源为server:5000
server:5000
destinationNATip:NATport
,它与发出的数据包匹配(但源和目标颠倒了)client:5001
仍然带有源server:5000
源 ip+port 和目标 ip+port 创建一个可以跟踪的组合。(有更多细节,但这是基础)
更多阅读但我应该挖掘更好的文档,而不仅仅是参考我所见经历的轶事证据。