我们正在开发一个P2P应用程序,其中一个最重要的目标是帮助PC连接到PC,无论它们在哪里。我们相信很长一段时间,同一局域网(具有相同的公共IP)的任何2台PC总是可以连接到其他局域网。但最近我们想知道这是否属实,请帮助我们确认。
假设有2台没有防火墙或安全过滤器的PC,如果它们具有相同的公共IP地址(2台PC在同一个LAN中),那么:来自1台PC的udp数据包是否会使用本地IP地址发送到另一台PC另一个莫名其妙? (即使2台PC处于不同的子网或复杂的网络结构中)
澄清:“可连接”意味着2台PC可以使用本地IP交换udp数据包或与另一台交换tcpConnection(例如:192.168.1.100和10.0.0.123)。我想确定“只要2台PC在同一个局域网(拥有相同的外部IP),它们就是”可连接的“。这对P2P应用非常重要。
答案 0 :(得分:2)
虽然Steffan的答案在技术上是正确的,但它没有解决我在你的问题中所读到的内容。如果具有外部地址的路由器正在执行NAT并支持发夹路由,则可以这样做。
当然,这假设您的PC具有不同的本地地址并共享路由器。
答案 1 :(得分:2)
由于问题现在已经改变,因为我的第一个问题(其中包含所有评论)不再适用,我尝试添加新答案。描述在这个答案中处理的设置:
PC1 --------- [NAT Router] ---> Internet
PC2 -------------|
PC1和PC2(具有不同的IP地址)位于同一LAN内并共享相同的NAT路由器。因此,从这些PC到因特网的任何分组都具有NAT路由器的源地址,并且来自因特网的这些PC的任何分组必须具有NAT路由器作为目标。
问题是:PC1和PC2是否可以使用共享的外部IP地址(NAT路由器之一)相互通信
。答案是:它取决于所用路由器的实现和配置。因此,你不应该依赖它。
为了更深入的解释,我建议研究如何在路由器中实现NAT,尤其是关于NAT loopback或NAT hairpinning或NAT反射的部分,这些部分是此处所需的相同功能的不同名称。
答案 2 :(得分:1)
编辑:这是原始问题的答案,该问题询问了两台具有相同IP地址的PC。现在更清楚的是,这个答案不再适用于预期的问题。那么请看我的其他答案。
如果您在TCP / IP网络(如互联网)内寻址系统,则IP地址是唯一标识符。如果您尝试向另一个与您拥有相同地址的系统发送消息,则该消息甚至不会离开您的系统,因为它显然已经到达预定目标(地址匹配)。
答案 3 :(得分:1)
我认为其他人用发夹回答的并不适用于你的情况。 发夹仅适用于两个主机位于同一网络下而不是尝试使用其专用IP直接相互连接的情况,它们会尝试通过其公共IP地址。
但在问题中它说了
"可连接的"意味着2台PC可以交换udp数据包或制作 tcp使用本地IP连接到另一个(例如:192.168.1.100 和10.0.0.123)。
如果它们都在相同的NAT下,但在不同的子网中,就像你的情况一样,它取决于它们所连接的路由器。如果这两个主机之间存在通过路由器连接的路径,那么它们将始终能够相互连接。如果路由器连接不正确,这意味着这是一个断开连接/故障的网络,对于这种情况,某些子网上的所有IP将无法与其他一些子网IP连接。
因此,在您的情况下,这一切都归结为连接子网的路由器连接。
我认为您应该阅读此blog以清除您对不同子网之间路由的困惑。国际海事组织,博客是一篇伟大的文章,必须阅读。
答案 4 :(得分:1)
我没有反对给出的答案,但我也建议您使用Cisco Packet Tracer更好地了解这些设备如何相互通信,您可以进一步尝试您的想法并获得更多更清晰的图片