防火墙和NAT后面的P2P消息传输

时间:2014-02-01 17:44:20

标签: java p2p upnp jxta

我有两个java应用程序在世界上两个不同的地方的两台不同的机器上运行。机器可以在NAT后面(或者不是!)。

应用程序应该传输一些数据(<500kb)。

我们有一台服务器,它可以做任何事情(比如提供对等体的IP地址),但是应用程序中的数据必须始终是点对点传输的。无法通过服务器路由数据。

我是否必须处理防火墙问题? 我是否必须设置端口转发?
JXTA或JGroups是我需要的东西吗? UPNP是我需要研究的东西吗? 是UDP打孔我应该研究什么?

我知道我的问题有点模糊,但请不要把我的问题写下来,我只需要朝着正确的方向轻推。随着评论/答案的开始,我将尝试更好地解释!

1 个答案:

答案 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遍历堆栈可能需要采用多种方法,以最大限度地兼容不同的路由器/防火墙。