【问题标题】:2 PCs with same public IP (same LAN) are absolutely connectable?2台具有相同公共IP(相同LAN)的PC绝对可以连接吗?
【发布时间】:2015-11-27 11:04:21
【问题描述】:

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

假设 2 台没有防火墙或安全过滤器的 PC,如果它们具有相同的公共 IP 地址(2 台 PC 在同一个 LAN 中),那么:从 1 台 PC 发送到使用本地 IP 地址的另一台 PC 的 udp 数据包是否总是到达另一个不知何故? (即使两台PC在不同的子网或复杂的网络结构中)

澄清:“可连接”意味着两台 PC 可以使用本地 IP(例如:192.168.1.100 和 10.0.0.123)交换 udp 数据包或与另一台建立 tcpConnection。我想确保“只要 2 台 PC 在同一个 LAN(具有相同的外部 IP)中,它们就可以“连接”。这对 P2P 应用程序很重要。

【问题讨论】:

    标签: networking udp ip


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 谢谢。这正是我的问题的明确答案。澄清一下:如果两台 PC 无法通过共享的 NAT 路由器进行通信,那么它们绝对无法直接通信?
    • 我将学习 NAT,但请与我分享更多信息:您能否以您的经验非正式地说,在常见情况下(公司、学校、主机等普通路由器的设置) ...等)2台PC是否能够通信?谢谢!
    • @vantrung-cuncon:由于总是存在某些防火墙或 NAT 路由器后面的两个 P2P 设备无法相互通信的情况,因此您通常在公共互联网上拥有转发数据的“超级节点”,而不是拥有对等点之间的直接通信。
    • @vantrung-cuncon:有足够多的情况,两个设备不能直接通信,所有主要的 P2P 网络(包括 Skype 和 Zeus)都包含这样的超级节点。
    • 非常感谢您的好意。你博学的知识和耐心帮助了我很多。这就是我所期望的答案!
    【解决方案2】:

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

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

    【讨论】:

    • 在最坏的情况下,两台 PC 位于不同的子网中,并且在复杂的网络设计中拥有 2 个不同的路由器。 :) 当然他们有 2 个不同的本地 IP,但可能是 192.168.1.100 和 10.0.0.123。是不是有什么东西阻止了他们相互联系?
    【解决方案3】:

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

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

    【讨论】:

    • 好吧,所以...即使两台电脑位于 2 个不同的子网中,具有最奇怪的路由配置,只要它们具有相同的外部 IP,它们仍然可以连接?
    • @vantrung-cuncon 如果该约束是您问题的一部分,则应该说明。但这似乎与没有防火墙的说法相矛盾。
    • @vantrung-cuncon:只要您使用对等方“外部 IP 地址”作为数据的目的地,并且该 IP 地址与发送方的地址相同,它们是否无关紧要是路由器、不同的子网等。由于目标 IP 地址的目标是本地的,因此数据不会离开计算机,因此任何外部设置都无关紧要。要访问与您的 IP 地址相同但在不同网络中的系统,您不能使用它们的 IP 地址(因为它与您的相同),但必须进行一些 NAT。
    • @SteffenUllrich :也许我开始失去你的逻辑线索。假设 extIP="1.2.3.4",您的意思是如果本地 IP 为 192.168.1.100 的 PC1 发送 udp 到“1.2.3.4”,那么“数据不会离开计算机”?我的意思是将 udp 发送到 PC2 的本地 IP“10.0.0.123”。使用外部IP作为peerAddress将udp发送到localPC是没有意义的,我认为是这样。如果我有任何误解,请纠正我。
    • @vantrung-cuncon:如果两台 PC 具有相同的 IP 1.2.3.4,那么从 pc#1 和 1.2.3.4 发送到 IP 地址 1.2.3.4 将永远不会离开 pc#1,因此无法到达电脑#2。即使您的意思是“外部 IP”不是 PC 的 IP 地址,而是 PC 使用的路由器的面向互联网的 IP 地址,情况也没有什么不同。如果两个路由器都具有相同的 IP 地址,则 IP 为 1.2.3.4 的路由器#1 不会将数据包转发到 IP 为 1.2.3.4 的路由器#2,因为 1.2.3.4 是路由器#1 本身的 IP,因此目的地已经是到达。
    【解决方案4】:

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

    但在问题中它说

    “可连接”表示两台PC可以交换udp数据包或使 tcpConnection 使用他们的本地 IP(例如:192.168.1.100 和 10.0.0.123)。

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

    因此,在您的情况下,这一切都归结为连接子网的路由器连接。

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

    【讨论】:

    • 感谢您回答中的文章。我正在阅读它,发现它很有帮助!
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2012-05-25
      相关资源
      最近更新 更多