我有两个java应用程序在世界上两个不同的地方的两台不同的机器上运行。机器可以在NAT后面(或者不是!)。
应用程序应该传输一些数据(<500kb)。
我们有一台服务器,它可以做任何事情(比如提供对等体的IP地址),但是应用程序中的数据必须始终是点对点传输的。无法通过服务器路由数据。
我是否必须处理防火墙问题?
我是否必须设置端口转发?
JXTA或JGroups是我需要的东西吗?
UPNP是我需要研究的东西吗?
是UDP打孔我应该研究什么?
我知道我的问题有点模糊,但请不要把我的问题写下来,我只需要朝着正确的方向轻推。随着评论/答案的开始,我将尝试更好地解释!
答案 0 :(得分:2)
我同意selbie在上述评论中的建议。
简短的回答是,要进行点对点网络,您应该对所提到的所有技术有基本的了解。
我是否必须处理防火墙问题?
如果对等体在NAT后面,则需要处理NAT遍历。
我是否必须设置端口转发?
你“必须”吗?不,但您可以将此视为解决问题的方法。端口转发是一种配置防火墙的方法,以便您的对等方可以有效地进行通信,就像它们不在防火墙后面一样。这意味着您可以像没有防火墙一样编写软件。 NAT穿孔是手动端口转发的替代方案。您可以将其视为“自动端口转发”。
JXTA或JGroups是否需要我的东西?
对不起。我不知道这些是什么。
是UPNP我需要研究的东西吗?
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失败则作为后备)。
UDP Hole Punching我应该研究什么?
您将需要NAT遍历策略。 UDP打孔(STUN等)是一种这样的策略,正如塞尔比所说,它是一种常见的策略。还有无服务器技术(查看SubEthaEdit使用的机制)。
完整的NAT遍历堆栈可能需要采用多种方法,以最大限度地兼容不同的路由器/防火墙。