iPhone上的TCP打孔

Posted

技术标签:

【中文标题】iPhone上的TCP打孔【英文标题】:TCP hole punching on iPhone 【发布时间】:2011-09-19 06:54:52 【问题描述】:

我做了一些阅读,虽然我是 iPhone 网络的新手,但我想知道 TCP 打孔是否可以通过 NAT 连接两个 iPhone。我还阅读了一些关于 uPnP 和发夹的有用内容,但我对这些内容并不熟悉,所以如果有人对这是否可能有任何想法。

我的目标是能够在大范围内连接多部 iPhone(因此切换到某种类型的 GPSR 可能会更好),但目前我只使用两部 iPhone,3G NAT Traversal 似乎是最简单且理论上最可靠。

【问题讨论】:

【参考方案1】:

nat traversal 是通用术语,用于在会合服务器的帮助下直接连接两个节点。节点可以是计算机、智能手机或任何其他设备。就 3g 而言,它是传输数据的媒介之一。更多。

如果您在同一 NAT 下的对等设备使用公共 IP 相互连接,则发夹会出现,因为某些路由器不支持发夹,如 cisco 路由器等。如果您使用私有 IP 而不是公共 IP,则可以克服此问题。I在你的情况下不能说任何关于发夹的事情,因为我不知道你的网络的技术细节。

用你正在使用的 3g 之类的技术细节更新你的问题。那么只有我可以说关于 3g 上的发夹。

我已经在 2g 上实现了 udp/tcp 打孔。我使用了三台 PC(一台会合服务器和两个节点)来执行此操作。

    开发一个会在一台电脑上运行的会合服务器程序。该程序应该能够交换两个iphone设备的公共IP。

    开发一个安装在 iphone 中的客户端程序。将 iphone 连接到服务器,这会将 iphone 的公共 ip 暴露给服务器。为第二个 iphone 重复相同的过程。现在服务器将交换公共 ip/port 到两个 iphone。 现在每个人同时开始互相发送数据包,这将在 NAT 上打洞。

有关打孔的详细信息,请参见http://www.brynosaurus.com/pub/net/p2pnat/

最好使用易于开发的UDP打孔。TCP打孔有点棘手。一旦实现了UDP打孔,就很容易实现TCP打孔。

了解 STUN、ICE、NAT 类型、Nat 映射

https://www.rfc-editor.org/rfc/rfc5389http://en.wikipedia.org/wiki/Network_address_translation

【讨论】:

我实际上想知道是否只有 iPhone 才有可能。我的猜测是否定的,因为你必须以某种方式控制每部 iPhone 的本地网络,但我不确定。 每部 iPhone 的局域网都是提供商的网络 以英国电信、沃达丰为例。该本地区域将为每部 iPhone 提供 IP 地址,并且该 IP 是其网络的本地 IP。但是当它到来时在不同网络之间的两部 iPhone 之间进行通信,例如在 VOdafone 和英国电信之间,他们将使用一些公共 IP。这是我的想法并不确定。如果你能澄清“以某种方式能够控制每部 iPhone 的本地网络”,那就容易了了解您的问题 是的。我认为问题是每部手机只能获取另一部手机的公共IP。我认为在不了解每部手机所在网络的情况下,不可能通过 3G 获取 ip 本地 IP 地址,并且由于 Vodafone、Telecom、AT&T 或 Singtel 例如控制该网络,我不认为它是可能的。我想知道是否有可能没有手机的本地IP,或者访问该网络以查找IP地址。 我从未尝试过 3G 但我尝试使用 Vodafone/Air Tel 的数据卡(2G)它只会提供公共 Ip。公共足以在同一网络内或外部相互通信。 2g 网络和 3g 网络是相同的。私有 IP 出现在图片中当您的设备使用路由器(如任何组织中的 PC)连接到网络时。因此,在组织中为了容纳大用户,他们安装了 NAT/路由器。如果是移动通信这种情况永远不会发生,因为您的 iPhone 没有与路由器连接,并且提供商会为每部手机动态分配 IP 地址。 所以,如果我理解正确,只要两部手机在不同的网络中,提供商就会为它们分配不同的 ips,您将无法直接通信(不使用服务器或其他东西)。他们必须在同一个网络中,就我而言,我不能保证。【参考方案2】:

蜂窝网络使用大规模 NAT。只有三种方法可以绕过它。

    请勿使用蜂窝网络或使用连接到蜂窝网络的家庭/Wifi。

    获取 TURN 服务器。

    使用多 UDP 打孔(高级技术)。对于多 UDP 打孔,请尝试: https://drive.google.com/file/d/0B1IimJ20gG0SY2NvaE4wRVVMbG8/view?usp=sharing

【讨论】:

以上是关于iPhone上的TCP打孔的主要内容,如果未能解决你的问题,请参考以下文章

极客日报:马化腾:腾讯只是一家普通公司,随时都可以被替换;22岁编程世界冠军加入华为;iPhone14或采用药丸形打孔屏

Java TCP 打孔

TCP打孔,不能在android上重用地址

如何在 iPhone 上创建 TCP 服务器?

Delphi:TCP 打孔

iPhone 电池是不是会受到开放 TCP 连接且不发送或接收数据的影响?