假设我们在两台不同的 PC(A 和 B)上运行 GTalk、Skype 等 Messenger,它们具有私有 IP 地址,但通过某个 ISP 连接到 Internet。两台 PC 可能位于世界的不同地方。现在可以在 A 和 B 之间发送消息并进行 VoIP 呼叫。
这显然使用服务器进行通信建立。对于文本消息,它可以通过服务器路由到 A 和 B。
但是对于 VoIP 通话,我相信最初的建立将借助服务器,后来 VoIP 数据将直接在 A 和 B 之间流动。现在,A 和 B 都有私有 IP 地址。
所以我的问题是如何在拥有私有 IP 地址的互联网上直接在 A 和 B 之间进行通信?
这有什么具体的标准吗?我不是在谈论 RTP 等 VoIP 标准,而是使用私有 IP 地址通过 Internet 进行通信的机制。换句话说,我只是在 A 和 B 上分别运行了一个 TCP 客户端和 TCP 服务器。TCP客户端如何到达TCP服务器?
我想知道 GTalk、Yahoo、Skype 等 Messenger 以及 Viber、Kakoa talk、WhatsApp 等许多 Android 应用程序是否为此使用任何特定标准。而且我已经看到这些工作几乎总是在 A 和 B 工作之间的调用,位于世界任何地方。
如果有人可以分享所涉及的架构和概念,那就太好了。
[我确实读过 STUN 和打孔等概念。但我没有看到任何具体的方法。并且不能保证这些会根据 NAT 行为起作用]
谢谢你。