3

我正在制作一个 P2P android 应用程序。我目前的问题是我无法让我的设备相互识别,除非它们在同一个网络上并且我使用私有 IP 地址——我将所有公共 IP/端口/私有 IP 地址存储在数据库中。

鉴于 NAT 阻止了我的尝试,并且我无法从公共 IP 地址中具体选择要选择的私有 IP,我应该如何让一个人联系另一个人,而无需进入路由器设置和端口转发……

我应该如何成功到达我的同伴设备=]

4

3 回答 3

3

简短的回答:你不能

长答案:NAT 穿越的问题需要 10 多个人年的努力,据我所知,除了 Skype 之外,没有其他产品可以可靠地做到这一点(Skype 允许您编写基本上使用 Skype 作为您不必关心的可靠 P2P 连接提供商,请参见此处此处)。果然,使用 Skype 作为“请为我提供 P2P 连接”服务提供商会将您与专有且无法控制的解决方案联系起来,因此它并不是真正的……解决方案。

现在,还有一个问题只会让未来几年在 IPv4 上的 NAT 遍历变得更加困难:具体来说,ISP 将开始引入所谓的“运营商级 NAT”(CGN,请参阅作为介绍),它使用与家庭 NAT 使用的不同类型的端口分配算法(此外,除此之外,您现在将有两个级联 NAT 来处理)。简而言之,如果您手头没有 10 人年以上的开发资源,请忘记任何基于 IPv4 的 P2P。顺便说一句,甚至Skype也有望屈服于CGN(这已经是移动连接的标准,即几乎没有移动运营商为手机提供公共IPv4地址),这(很可能是恕我直言)原因MS 在获得 Skype 后所做的第一件事就是放置数千个 RELAYS,以便这些中继能够在未来几年内解决通过 IPv4 建立 P2P 连接的可能性,请看这个(忘记 MS 的回复在文章的最后,它'

您可以做的是开始更多地了解 IPv6:使用 IPv6 事情应该容易得多,因为(据称)将不再有 NAT(有一种叫做 NPT 的东西,但这是一个 P2P 友好的协议)。IPv6 路由器的问题是(目前)还没有端口控制标准协议,但是目前正在制作一些东西,请看这个,所以应该/什么时候这个(或其他)协议将变得标准化并被 CPE 制造商采用,那么 IPv6 路由器遍历将变得微不足道。

所以,无论哪种方式,你现在最好的选择是在接下来的 3 到 5 年内忘记 P2P。很遗憾...

PS。还有2个链接:

  1. 是我的项目,相信我,这是一团糟;
  2. 野外的CGN
于 2013-01-07T19:39:39.803 回答
0

关键是您只能连接到另一个节点,如果通过公共互联网可以使用某种端口转发/ NAT。很可能是这样,因为对于您的每个私有节点(私有我的意思是一个在公共 ip 后面有一个私有 ip 地址的节点)它仍在访问互联网,并且只有在已经存在一些规则时才会发生这种情况。唯一的问题是您是否可以将该规则用于您的应用程序。

我在上面的评论中提到的链接提到了一些常用的技术。

于 2012-12-21T20:04:58.790 回答
0

您必须使用 STUN 和/或 UPnP 等技术才能通过 NAT 路由器。

于 2012-12-21T20:19:54.840 回答