10

我一直在研究在我正在编写的两人游戏中使用网络,但我仍然不清楚设备何时必须转发端口才能与外界通信。

从我在其他游戏中看到的情况来看,为了托管服务器总是需要端口转发,但在客户端上不需要。此外,还有其他情况,例如Skype(据我了解,最终是客户端到客户端),任何一端都必须转发端口。

所以我的问题是,在互联网通信中,什么时候需要端口转发,什么时候不需要端口转发,作为开发人员我可以采取哪些步骤来做到这一点,这样我的用户就不必担心了?提前致谢!

4

3 回答 3

16

当 Internet 上的机器需要启动与防火墙或 NAT 路由器后面的机器的连接时,需要端口转发。如果连接是由防火墙后面的机器发起的,防火墙/路由器会自动识别回复流量并将其发送到打开连接的机器。

但是如果一个数据包到达外部接口,并且它不是这种连接的一部分,路由器需要知道如何处理它。默认情况下,它将拒绝它。但是,如果为端口配置了转发,则会告诉它要将其发送到哪个内部机器。

换句话说:如果您想在 NAT 防火墙/路由器后面运行服务器,则需要端口转发,如果您只是运行客户端,则不需要它。

于 2012-09-05T23:33:08.250 回答
2

Skype不(并非总是)需要手动设置端口转发是有原因的:

安装 Skype 时,会随机选择1024 以上的端口作为传入连接的端口。如果您愿意,您可以将 Skype 配置为使用 不同的端口进行传入连接,但如果您这样做,您必须手动打开备用端口

如果为传入连接选择的端口不可用,默认情况下,端口 80 和 443 将用作替代端口。如果其他应用程序(例如 Apache HTTP 服务器或 IIS)使用这些端口,您可以将应用程序配置为使用其他端口,也可以将 Skype 配置为不使用这些端口。

如果您托管服务器,则必须进行端口转发。您可以使用与 Skype 相同的技术...我不确定是否还有其他选择...

于 2012-09-05T22:08:10.193 回答
2

NAT防火墙或其他一些设备阻止所有或部分端口上的通信时,端口转发(发生)。

以回答您的问题为例,大多数商业路由器使用 NAT 来允许多人使用 ISP 提供的相同 IP(从外部世界看)。大多数 ISP 使用 NAT 来允许多个客户使用相同的 IP(从外部世界来看)。为了让它工作,NAT 将内部 IP 和通信的端口号更改为 THE(整个子网只有一个)外部 IP 和新的端口号。通过这样做,路由器/isp/ect 可以知道每个外部通信去往哪个内部 IP 和端口。

每当通过 Internet 通信的其中一台计算机位于 NAT 之后,就需要进行端口转发。我敢肯定还有比这更多的情况,每种情况的解决方案都可能非常复杂。但这涵盖了绝大多数。

于 2012-09-05T22:16:51.750 回答