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

标签 java p2p upnp jxta

我有两个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/

相关文章:

java - 使用netty解析XML字符串

p2p - 点对点 : Methods of Finding Peers

p2p - IPFS - pubsub 从浏览器连接到对等点

java - 如何在Java中将多个扩展JPanel添加到一个JFrame中?

java - 如何实现只有 AtomicInteger 的 Lock?

java - eclipse hadoop 连接被拒绝

javascript - p2p/NodeJS : Undocumented code does not tell us how to send messages through the network

java - 将 XBox 360 用作扩展器/在 XBox 上启用 UPnP AV 传输的 API

javascript - UPnP 发现,Javascript 中的描述

windows - 如何配置窗口以显示 UPnP iconList 中的自定义图标