端口转发在流量很大的大型视频游戏中如何工作?

How do port forwarding work in big video games with a lot of traffic?

请考虑以下场景,

假设有两个室友安装了同一个游戏。为了这个问题,我们假设游戏是 DoTA2。

两个室友都连接到同一个路由器,因此本质上具有相同的 public IP。 (路由器的 IP)

现在,假设外面的其他人,即路由器外部的 public 互联网想要连接到室友 1,那么路由器将在 NAT 规则中进行简单的端口转发,可能会像如下,

如果请求来自外部端口 ABC(游戏拥有的端口),则将其转发给室友 1。

现在,如果我们假设室友2也在游戏中在线并且另一台public电脑想要连接到他们,那么端口转发将如何工作?

路由器如何知道连接请求转发给哪台私人电脑(室友)?

请不要给出诸如 DoTA 分配了多个端口或任何特定于游戏的答案,DoTA 的使用只是一个例子。

你甚至可以考虑有两台私人计算机的场景 运行 端口号 80 上的一个简单的 HTTP 服务器,外部计算机如何知道要连接哪一台?

我用谷歌搜索了 DMZ 和端口转发,但不太清楚解决方案。

告诉我们我们可以给出什么样的答案有点不礼貌,特别是当你自己问了一个题外话的问题时。

得到你问题的答案,端口转发是基于私有IP和端口的组合完成的; roomate1 和 rooommate2 具有不同的私有 IP 地址但使用相同的端口,在您的路由器上(假设它是通用的)在任何时候只能使用一个转发规则。

一种可能的解决方案是在您的专用网络侧路由器之后使用像 HAProxy 这样的代理服务器,并使用基于 TCP 关联的策略将数据包转发给室友。

简而言之,NO是不可能的。您只能从 1 public 地址到 X 端口上的内部 IP 地址进行 NAT。

总之,公司这样做,但他们有 2 或 3 个 public 地址,然后您可以映射到不同的内部 IP。

Public IP 1 > 内部 IP:port
Public IP 2 > 内部 IP:port

您可以从一个外部 IP 映射到多个内部 IP 地址,但由于您使用的是相同的服务(游戏),它们可能使用相同的端口。