2台具有相同public IP(同一局域网)的PC绝对可以连接?

2 PCs with same public IP (same LAN) are absolutely connectable?

我们正在开发一个 P2P 应用程序,其最重要的目标之一是帮助 PC 连接到任何地方的 PC。很长一段时间以来,我们一直相信同一局域网中的任何 2 台电脑(具有相同的 public IP)将始终可以连接到其他电脑。不过最近不知道是不是真的,请大家帮忙确认一下。

假设 2 台没有防火墙或安全过滤器的 PC,如果它们具有相同的 public IP 地址(2 台 PC 在同一个 LAN 中),则: 1 台 PC 的 udp 数据包将发送到另一台 PC使用本地 IP 地址总能以某种方式到达另一个? (即使2台PC在不同的子网或复杂的网络结构)

澄清:"Connectable" 表示 2 台 PC 可以交换 udp 数据包或使用其本地 IP(例如:192.168.1.100 和 10.0.0.123)与另一台建立 tcpConnection。我想确保 "As long as 2 PCs are in same LAN (having the same external IP) they are " 可连接”。这对 P2P 应用程序很重要。

编辑:这是对原始问题的回答,该问题询问两台具有相同 IP 地址的 PC。现在更清楚了预期的问题是什么,这个答案不再适用。那就看我的另一个回答吧

如果您在 TCP/IP 网络(如 Internet)中寻址系统,则 IP 地址是唯一标识符。如果您尝试向另一个与您的地址具有相同地址的系统发送消息,则该消息甚至不会离开您的系统,因为它显然已经到达预期目标(地址匹配)。

虽然 Steffan 的回答在技术上是正确的,但它没有解决我对你的问题的解读。如果具有外部地址的路由器正在执行 NAT 并支持发夹路由,则这是可能的。

当然,这假设您的 PC 具有不同的本地地址并共享路由器。

由于问题现在已更改,我的第一个问题(以及那里的所有评论)不再适用,因此我尝试添加一个新答案。描述此答案中处理的设置:

 PC1 --------- [NAT Router] ---> Internet
 PC2 -------------|

PC1和PC2(IP地址不同)在同一个局域网内,共享同一个NAT路由器。因此,从这些 PC 到 Internet 的任何数据包都具有 NAT 路由器的源地址,并且从 Internet 到这些 PC 的任何数据包都必须将 NAT 路由器作为目标。

问题是:PC1 和 PC2 能否始终使用它们共享的外部 IP 地址(NAT 路由器之一)相互通信

答案是:这取决于所使用的路由器的实现和配置。因此你不应该依赖它。

为了更深入的解释,我建议研究如何在路由器中实现 NAT,尤其是关于 NAT loopback or NAT hairpinning 或 NAT 反射的部分,它们是此处需要的相同功能的不同名称。

我认为其他人用发夹回答的问题不适用于您的情况。 发夹仅适用于同一网络下的两个主机,而不是尝试使用其私有 IP 直接相互连接,而是尝试通过其 public IP 地址。

但在问题中它说

"Connectable" means that 2 PCs can exchange udp packets or making tcpConnection to the other using their local IPs (ex: 192.168.1.100 and 10.0.0.123).

如果它们都在同一个 NAT 下,但像您的情况一样在不同的子网中,这取决于它们连接到的路由器。如果这两台主机之间存在通过路由器连接的路径,那么它们将始终能够相互连接。如果路由器未正确连接,这意味着这是一个 disconnected/faulty 网络,在这种情况下,某些子网上的所有 IP 将无法与其他一些子网 IP 连接。

所以在你的情况下,这一切都归结为连接子网的路由器连接。

我认为您应该阅读这篇文章 blog 以消除您对不同子网之间路由的困惑。 IMO 该博客是一篇很棒的文章,必须阅读。

我不反对给出的答案,但我也建议您使用 Cisco Packet Tracer 来更好地了解这些设备如何相互通信,您可以进一步试验您的想法并获得更清晰的画面