java - 防火墙和NAT之后的P2P消息传输

标签 java p2p upnp jxta

我有两个Java应用程序在世界上两个不同的地方的两个不同的机器上运行。机器可以位于NAT之后(也可以不!)。

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

我们确实有一个服务器,可以完成所有工作(例如提供对等方的ip地址),但是来自应用程序的数据必须始终进行对等传输。数据无法通过服务器路由。

我必须处理防火墙混乱吗?
我必须设置端口转发吗?
我需要JXTA或JGroups吗?
我需要研究UPNP吗?
我应该研究UDP打孔吗?

我知道我的问题有点含糊,但请不要轻易回答我的问题,我只需要向正确的方向轻推即可。随着评论/答案的不断涌现,我将尝试更好地解释!

最佳答案

我在上面的评论中同意塞尔比的建议。

简短的答案是,要进行对等网络,您应该对您提到的所有技术都有基本的了解。


  我必须处理防火墙混乱吗?


如果对等方位于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打孔吗?


您将需要NAT遍历策略。 UDP打孔(STUN等)就是这样一种策略,正如selbie所说,这是一种常见的策略。还有无服务器技术(请查看SubEthaEdit使用的机制)。

完整的NAT遍历堆栈可能需要采用多种方法,以最大程度地与不同的路由器/防火墙兼容。

本文翻译自 https://stackoverflow.com/questions/21501359/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。


相关文章:

iphone - iPhone上的TCP打孔

java - 如何在Twitter的流式API中检查速率限制

java - Java持续时间错误从一天到另一天

c++ - UDP数据包安排

android - 如何在Android平台上利用网络进行p2p文件共享?

c# - 如何为WCF ServiceContract命名空间添加前缀

java - SLF4J记录器绑定不起作用

java - 更新时发生休眠错误[重复]

api - Google钱包是否提供api来进行人与人之间的汇款和/或批量付款?

linux - Linux上的libupnp静态库