我正在构建一个依赖中央服务器将第一个用户(移动或桌面应用程序)的IP地址和端口发送给第二个用户(移动或桌面应用程序)的系统。第二个用户与第一个用户建立P2P加密连接,使用中央服务器发送的IP地址和端口,直接发送一个大文件(理想情况下,实际文件不经过中央服务器)。
这个系统需要工作,即使用户在不同的防火墙/nat后面,在移动或桌面设备上,没有要求用户手动打开端口。
我一直在研究NAT遍历协议(Teredo IPv6), libjingle(谷歌的开源套件),STUN,直接套接字连接,以及用户之间的直接vpn。
我很困惑,如果我接近这个正确。所有这些选项都能独立解决这个问题吗?还是我说错了?直接IPv6连接会直接出来吗,甚至在IPv4路由器后面?
P2P连接不能保证总是成功。它可能因以下原因而失败:1)两个对等体在对称NAT后(尽管Teredo可以在一个对等体在对称NAT后工作)2)UDP被阻塞3)如果对等体在代理之后。4)双NAT场景。ipv6地址有三种类型:链路本地地址,私有地址&全球。如果有全局地址,两个对等点可以通过互联网直接连接。全局地址前缀为(200:....)。如果您构建的是P2P系统,您应该有回退机制,在这种情况下,中央服务器应该在对等点之间中继数据。通过这种方式,您可以使您的应用程序在使用p2p的时候可靠,使大多数对等点的连接速度更快。