我的目标是能够连接多个iPhone,覆盖范围较大(因此最好切换到某种类型的GPSR),但现在我只需要处理两个iPhone,理论上3G NAT遍历似乎是最简单和最可靠的方法。
网络地址转换穿越(NAT traversal)是用于通过会议服务器直接连接两个节点的通用术语。节点可以是任何东西,计算机、智能手机或任何其他设备。就3G而言,它是传输数据的媒介之一,没有更多内容。
如果您的对等设备在同一个 NAT 下使用公共 IP 进行连接,则会出现 Hairpin 的情况,因为某些路由器不支持 Hairpinning,如 Cisco 路由器等。如果您使用私有 IP 而不是公共 IP,则可以克服这个问题。我不能针对您的情况讲解 Hairpinning,因为我不知道您网络的技术细节。
请更新您的问题,提供关于您使用的 3G 类型等技术细节,然后我才能谈论 3G 上的 Hairpinning。
我已经在 2G 上使用 UDP/TCP 打洞实现了 NAT 穿透。我使用三台电脑(一个会议服务器和两个节点)来完成此操作。
开发一个会议服务器程序,在一台电脑上运行。该程序应能够交换两个 iPhone 设备的公共 IP。
开发一个客户端程序,安装在 iPhone 上。将 iPhone 连接到服务器,这将向服务器公开 iPhone 的公共 IP。对于第二个 iPhone,重复同样的过程。现在,服务器将公共 IP/端口交换给两个 iPhone。然后同时开始向彼此发送数据包,这将打洞 NAT。
关于打洞的详细信息可以在此处找到:http://www.brynosaurus.com/pub/net/p2pnat/
最好尝试使用容易开发的 UDP 打洞。TCP 打洞有点棘手。一旦实现了 UDP 打洞,就很容易实现 TCP 打洞。请了解 STUN、ICE、NAT 类型和 NAT 映射等知识。
https://www.rfc-editor.org/rfc/rfc5389
http://en.wikipedia.org/wiki/Network_address_translation
移动网络使用大规模NAT。只有三种方法可以绕过它。
不要使用移动网络或使用连接到移动网络的家庭/ WiFi。
获取TURN服务器。
使用多UDP打洞(高级技术)。对于多UDP打洞,请尝试: https://drive.google.com/file/d/0B1IimJ20gG0SY2NvaE4wRVVMbG8/view?usp=sharing