我有两个java应用程序运行在世界两个不同地区的两台不同机器上。这些机器可以位于 NAT 之后(也可以不位于 NAT 后面!)。
应用程序应该传输一些数据(<500kb)。
我们确实有一台服务器,它可以做所有事情(例如提供对等点的 IP 地址),但来自应用程序的数据必须始终进行点对点传输。数据无法通过服务器路由。
我必须处理防火墙困惑的问题吗?
我必须设置端口转发吗?
我需要 JXTA 或 JGroups 吗?
我需要研究 UPNP 吗?
我应该研究 UDP 打洞吗?
我知道我的问题有点模糊,但请不要拒绝我的问题,我只是需要在正确的方向上插入。随着评论/答案开始出现,我将尝试更好地解释!
最佳答案
我同意上面评论中塞尔比的建议。
简单的回答是,要进行点对点网络,您应该对您提到的所有技术有基本的了解。
Do I have to deal with firewall mess?
如果对等点位于 NAT 之后,您将需要处理 NAT 穿越。
Do I have to set port forwarding?
你“必须”吗?不。但您可以将此视为您问题的解决方案。端口转发是一种配置防火墙的方法,以便您的对等方能够有效地进行通信,就好像他们不在防火墙后面一样。这意味着您可以像没有防火墙一样编写软件。 NAT 打洞是手动端口转发的替代方法。您可以将其视为“自动端口转发”。
Are JXTA or JGroups something that I need?
抱歉。我不知道这些是什么。
is UPNP something I need to look into?
UPnP 是一种可能的 NAT 穿越策略:
http://en.wikipedia.org/wiki/Universal_Plug_and_Play#NAT_traversal
请注意,UPnP 已知是不安全的,可能不应启用,请参见例如:
http://www.zdnet.com/how-to-fix-the-upnp-security-holes-7000010584/
我的印象是,UPnP 不是最重要的 NAT 穿越技术,但它可能是一种有用的技术,可以实现更高的兼容性(即作为 STUN 失败时的后备方案)。
is UDP Hole Punching something I should look into?
您将需要一个 NAT 穿越策略。 UDP Hole Punching(STUN 等)就是这样一种策略,正如 Selbie 所说,这是一种常见的策略。还有无服务器技术(研究 SubEthaEdit 使用的机制)。
完整的 NAT 遍历堆栈可能需要采用多种方法来最大程度地兼容不同的路由器/防火墙。
关于java - 防火墙和 NAT 后面的 P2P 消息传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501359/