什么时候需要端口转发?
Posted
技术标签:
【中文标题】什么时候需要端口转发?【英文标题】:When is port forwarding necessary? 【发布时间】:2012-08-30 16:51:49 【问题描述】:我一直在研究在我正在编写的两人游戏中使用网络,但我仍然不清楚设备何时必须转发端口才能与外界通信。
从我在其他游戏中看到的情况来看,始终需要端口转发来托管服务器,但在客户端上则不需要。此外,还有其他情况,例如Skype(据我理解,最终是客户端到客户端),任何一端都必须转发端口。
所以我的问题是,在互联网通信中,何时需要和不需要端口转发,作为开发人员我可以采取哪些步骤来做到这一点,这样我的用户就不必担心了?提前致谢!
【问题讨论】:
【参考方案1】:Skype 不(并非总是)需要手动设置端口转发是有原因的:
当您安装 Skype 时,会随机选择一个 1024 以上的端口 作为 传入连接的端口。您可以将 Skype 配置为使用 如果您愿意,不同的端口用于传入连接,但如果您愿意, 您必须手动打开备用端口。
如果为传入连接选择的端口不可用,通过 默认端口 80 和 443 将用作替代端口。如果另一个 应用程序(例如 Apache HTTP 服务器或 IIS)使用这些端口,您 可以将应用程序配置为使用其他端口,或者您可以 将 Skype 配置为不使用这些端口。
如果您托管服务器,则必须进行端口转发。 您可以使用与 Skype 相同的技术... 我不确定是否还有其他选择...
【讨论】:
【参考方案2】:当NAT、firewall 或某些其他设备阻止所有或某些端口上的通信时(发生)端口转发。
以回答您的问题为例,大多数商用路由器都使用 NAT 来允许多人使用 ISP 提供的同一 IP(从外部世界来看)。大多数 ISP 使用 NAT 来允许多个客户使用相同的 IP(从外部世界来看)。为了使其工作,NAT 将内部 IP 和通信的端口号更改为 THE(整个子网只有一个)外部 IP 和新端口号。通过这样做,路由器/isp/ect 可以知道每个外部通信到哪个内部 IP 和端口。
只要有一台通过 Internet 通信的计算机位于 NAT 后面,就需要进行端口转发。我敢肯定还有比这更多的情况,每种情况的解决方案都可能相当复杂。但这涵盖了绝大多数。
【讨论】:
【参考方案3】:当 Internet 上的机器需要启动与防火墙或 NAT 路由器后面的机器的连接时,需要端口转发。如果连接是由防火墙后面的机器发起的,防火墙/路由器会自动识别回复流量并将其发送到打开连接的机器。
但是如果一个数据包到达外部接口,并且它不是这种连接的一部分,路由器需要知道如何处理它。默认情况下,它将拒绝它。但是,如果为端口配置了转发,则会告诉它要将其发送到哪个内部机器。
换句话说:如果您想在 NAT 防火墙/路由器后面运行服务器,则需要端口转发,如果您只是运行客户端,则不需要它。
【讨论】:
这是我反复阅读的标准答案,但我仍然感到困惑:为什么发件人不指定目标机器的私有IP地址?然后路由器就会知道要发送到哪台机器。 无法路由到私有地址,只有公有地址可以在常规 Internet 上路由。 地址+房间号怎么样?现在的方式好像是建地址+端口,所以才需要端口转发? 以及为什么 IPv6 将地址大小从 32 位扩展到 128 位。 没错。这就是为什么我们需要设计一个新的协议 IP v6 来绕过这些限制。以上是关于什么时候需要端口转发?的主要内容,如果未能解决你的问题,请参考以下文章