我一直在研究用于我正在编写的双人游戏的网络,而且我还不清楚设备何时必须转发端口才能与外界通信。
从我在其他游戏中看到的情况来看,总是需要端口转发才能托管服务器,但客户端不需要端口转发。此外,还有其他情况,例如skype(根据我的理解,最终是客户端到客户端),其中两端都不能转发端口。
所以我的问题是,在互联网通信中,何时需要端口转发并且不需要端口转发,以及我可以采取哪些步骤作为开发人员来实现它,以便我的用户不必担心它?提前谢谢!
答案 0 :(得分:10)
当Internet上的计算机需要启动与防火墙或NAT路由器后面的计算机的连接时,需要端口转发。如果连接由防火墙后面的计算机启动,则防火墙/路由器会自动识别回复流量并将其发送到打开连接的计算机。
但是如果数据包到达外部接口,并且它不是这种连接的一部分,则路由器需要知道如何处理它。默认情况下,它会拒绝它。但是,如果为端口配置了转发,则告诉它将内发送到哪个内部机器。
换句话说:如果你想在NAT防火墙/路由器后面运行服务器,你需要端口转发,如果你只是在运行客户端,则不需要它。
答案 1 :(得分:2)
当NAT,firewall或其他设备阻止所有或某些端口上的通信时,端口转发(发生)。
以回答您的问题为例,大多数商用路由器使用NAT来允许多人使用ISP提供的相同IP(来自外部世界的视图)。大多数ISP使用NAT来允许多个客户使用相同的IP(从外部世界看)。为了使其工作,NAT将内部IP和通信的端口号更改为THE(整个子网只有一个)外部IP和新端口号。通过这样做,router / isp / ect可以告诉每个外部通信进入哪个内部IP和端口。
只要其中一台通过互联网进行通信的计算机位于NAT后面,就需要进行端口转发。我确信有比这更多的情况,每个解决方案都可能非常复杂。但这涵盖了绝大多数。
答案 2 :(得分:1)
Skype有理由不(并不总是)需要手动设置端口转发:
安装Skype时,随机选择高于1024 的端口作为 传入连接的端口。您可以配置Skype以使用 如果您愿意,可以使用其他端口作为传入连接,但如果您这样做, 您必须手动打开备用端口。
如果为传入连接选择的端口不可用,请执行 默认端口80和443将用作替代方案。如果另一个 应用程序(例如Apache HTTP服务器或IIS)使用这些端口 可以将应用程序配置为使用其他端口,或者您可以 配置Skype不使用这些端口。
如果您托管服务器,则必须进行端口转发。 您可以使用与Skype相同的技术...... 我不确定是否还有其他选择...