Networking 什么时候需要端口转发?

Networking 什么时候需要端口转发?,networking,client,port,multiplayer,Networking,Client,Port,Multiplayer,我一直在研究在我正在写的一个两人游戏中使用的网络,但我仍然不清楚什么时候设备必须有一个转发的端口才能与外部世界通信 从我在其他游戏中看到的情况来看,托管服务器总是需要端口转发,但客户端不需要端口转发。此外,还有其他情况,如skype(据我所知,skype最终是客户端对客户端),其中任何一端都不必转发端口 所以我的问题是,在互联网通信中,什么时候需要端口转发,什么时候不需要端口转发,作为一名开发人员,我可以采取什么步骤来实现端口转发,这样我的用户就不用担心了?提前谢谢 有理由不(并非总是)需要手动

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

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

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

有理由不(并非总是)需要手动设置端口转发:

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

如果为传入连接选择的端口不可用,则 默认的端口80和443将用作备选端口。如果另一个 应用程序(如ApacheHTTP服务器或IIS)使用这些端口时 可以将应用程序配置为使用其他端口,也可以 将Skype配置为不使用这些端口

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

端口转发(发生)在某个或某些其他设备阻止所有或某些端口上的通信时

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


任何时候,通过internet进行通信的计算机中有一台位于NAT之后,都需要端口转发。我相信还有比这更多的情况,每个问题的解决方案都可能相当复杂。但这涵盖了绝大多数人

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

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


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

这是我反复阅读的标准答案,但我仍然感到困惑:为什么发送方不指定目标机器的私有IP地址?然后路由器就会知道要发送到哪台机器。不可能路由到私人地址,只有公共地址可以在常规互联网上路由。@学生认为私人地址就像建筑物中的房间号。如果有人告诉你把快递送到104房间,但没有告诉你大楼地址是什么,你怎么知道要送到哪里?大楼地址+房间号如何?当前的方式似乎是构建地址+端口,这就是为什么我们需要端口转发?没错。这就是为什么我们需要设计一个新的协议IPV6,以绕过这些限制。