【问题标题】:Do I need to port forward for communication between two machines on the same network?我是否需要端口转发才能在同一网络上的两台机器之间进行通信?
【发布时间】:2021-04-15 02:27:53
【问题描述】:

我打算用 Java 编写一个相对简单的客户端-服务器套接字程序,其中服务器将在一台机器上运行,而客户端在另一台机器上运行(两者都连接在同一网络上)。

Link two computers with Socket in Java.
根据上述问题的答案,我相信我需要进行端口转发(这不是我所知道的问题),但这确实违背了我的直觉,因为我认为端口转发只是必要的如果我需要从远程机器(不在网络上)连接到我的网络上的服务/机器/任何东西。

所以我的问题是,我是否需要端口转发才能在本地网络上的两台机器之间进行通信?如果是,为什么?

【问题讨论】:

  • 不,很确定你是对的,只有外部网络连接才需要端口转发。如果它们在同一个网络上,您只需提供另一台设备的本地/私有 IP 地址 :)
  • 我不确定是什么导致您得出该问题表明端口转发是必要的结论。这似乎是作为答案的 cmets 的一部分引入的混淆,这表明可能编写答案的人认为客户端和服务器在不同网络中的情况下(而不是本地防火墙(例如 Windows Defender)阻止一个端口)。
  • @dantechguy 我是这么认为的,谢谢你的澄清:)
  • @MarkRotteveel 我的困惑来自编写问题的人声称更改代码中的“localhost”并没有解决他们的问题。

标签: java sockets port portforwarding


【解决方案1】:

如果机器在同一个网络中,则不需要配置端口转发。即使机器位于不同的网络中,您也不需要配置端口转发,假设这些机器具有可路由的 IP 地址(并​​且没有防火墙阻止该访问)。

端口转发仅在与具有单个 IP 地址的家庭网络通信时才相关,其中内部网络上有多台机器,并且互联网可见的本地路由器需要执行 NAT (网络地址转换)在本地网络和大坏互联网之间映射。端口转发确保将 Internet 可见端口转发到内部网络上机器的 IP 地址。

您需要考虑的是,本地计算机防火墙(例如 Windows Defender)可能会在未明确将应用程序和/或端口列入白名单的情况下阻止访问。

【讨论】:

  • 我的直觉是正确的,当时端口是如何工作的。非常感谢您的解释:)
  • 另一种情况是,如果您运行(内部代码)一个或多个共享主机/真机网络接口的虚拟机;根据您使用的虚拟化,这可能会或可能不会被标记为 NAT,但您需要配置哪些传入端口连接到哪些 VM。类似地,docker(以及基于它的东西)需要转发传入的连接,尽管通常您将其配置为每个容器的一部分而不是单独配置。
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 2018-08-25
  • 2018-09-25
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多