使用 UDP 的在线多人游戏如何通过互联网在网络之间传递数据包?据我所知,客户端必须在路由器上启用端口转发,数据包才能到达他们的计算机。大型在线游戏(魔兽世界、暗黑破坏神等)是否要求玩家这样做?
例如,我最近创建了一个处理 UDP 流量的服务器。它只是回显发送者发送的任何内容。我将其部署到互联网上的服务器上。我只能在启用端口转发后将回显返回给发送者,但如果同一本地网络上有两个发送者,这将不起作用。
答案1
简短回答:NAT 连接跟踪
要记住的一件事是,IPv4 互联网上的绝大多数路由器都是 NAT 路由器。
大多数 NAT 实现都具有智能跟踪功能,当您从内部客户端向某个地方发送 UDP 时,您将拥有一个目标端口和一个源端口。如果流量通过反向端口进入,则该流量将被路由回您的客户端,并允许通过大多数防火墙。
具有跟踪功能的 NAT/防火墙检测这些数据包是否相关并将其转发回来。
根据server
端口5000
UDP上的注释的示例
- 客户端发送数据包
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 形成一个可以跟踪的组合。(还有更多细节,但这些是基础知识)
更多阅读但我应该挖掘更好的文献资料,而不仅仅是参考我所见所闻的轶事证据。