在线游戏如何通过互联网发送 UDP 数据包?

在线游戏如何通过互联网发送 UDP 数据包?

使用 UDP 的在线多人游戏如何通过互联网在网络之间传递数据包?据我所知,客户端必须在路由器上启用端口转发,数据包才能到达他们的计算机。大型在线游戏(魔兽世界、暗黑破坏神等)是否要求玩家这样做?

例如,我最近创建了一个处理 UDP 流量的服务器。它只是回显发送者发送的任何内容。我将其部署到互联网上的服务器上。我只能在启用端口转发后将回显返回给发送者,但如果同一本地网络上有两个发送者,这将不起作用。

答案1

简短回答:NAT 连接跟踪

要记住的一件事是,IPv4 互联网上的绝大多数路由器都是 NAT 路由器。

大多数 NAT 实现都具有智能跟踪功能,当您从内部客户端向某个地方发送 UDP 时,您将拥有一个目标端口和一个源端口。如果流量通过反向端口进入,则该流量将被路由回您的客户端,并允许通过大多数防火墙。

具有跟踪功能的 NAT/防火墙检测这些数据包是否相关并将其转发回来。

根据server端口5000UDP上的注释的示例

  • 客户端发送数据包server:5000,源client:5001
  • 第一个 NAT 路由器将看到一个带有源 IP 和端口client:5001以及目标的数据包server:5000
  • 路由器会发送此信息,并且会NATip:NATport
  • 服务器接收此信息并创建一个响应,NATip:NATport该响应具有来源server:5000
  • NAT 收到该数据包后,其源地址和目的server:5000地址NATip:NATport与发送出去的数据包相匹配(但源地址和目的地址相反)。
  • NAT 将此消息发送client:5001到源server:5000

源 ip+port 和目标 ip+port 形成一个可以跟踪的组合。(还有更多细节,但这些是基础知识)

更多阅读但我应该挖掘更好的文献资料,而不仅仅是参考我所见所闻的轶事证据。

相关内容