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