0

我正在开发一个程序,该程序需要能够雄辩地处理防火墙,同时允许两个客户端之间的直接通信。

我正在考虑类似于 Skype 的东西,其中第三方用于建立两个用户之间的连接,但是一旦建立连接,就不会将任何实际数据发送到第三方。

我知道几乎所有的防火墙都会阻止所有未经请求的传入流量,但是只要内部程序是第一个通信的,就很容易让程序建立连接。我不明白的是如何能够直接在两个客户端之间建立连接。

我怎样才能实现这样的事情?是否有任何适当的术语来描述这种技术的名称?一个客户端必须用 Java 编写,但服务器和其他客户端几乎可以使用任何我想要的语言。

如果已经问过这个问题,我提前道歉,我试着环顾四周,但我觉得我可能没有使用正确的关键字来找到它。

4

3 回答 3

3

我认为您正在寻找的术语是“ NAT 遍历”。它与防火墙无关,更多的是关于克服到达 NAT 设备另一(私有)端的特定节点的困难(例如,像电缆调制解调器,LAN 端通常被分配一些不可路由的地址范围,例如192.168.*.*

一种可能对您有用的技术是UDP 打孔。每个端点都可以建立到第三方服务器的传出连接,每个端点的 NAT 设备将打开端口以允许返回流量通过防火墙并将其路由到每一侧的适当 LAN 节点。端点通过第三方服务器交换端口信息,然后重新使用它们刚刚通过 NAT 设备“打孔”的“孔”,从那时起直接相互通信。

于 2011-04-20T05:54:55.080 回答
1

就像 Jim 所说的那样,它是 Traversal NAT 或 STUN。有一个Java实现,项目不再维护,但你可以用它来学习。

http://nutss.gforge.cis.cornell.edu/stunt.php

于 2011-04-20T06:01:37.653 回答
0

这取决于你想要什么!

如果你希望它只在大约 85% 的时间内工作,你可以使用 STUN 服务器!这是一些免费的列表:

https://gist.github.com/zziuni/3741933

但是对于 100%,您还需要实现一个 TURN 服务器(中继服务器),这非常昂贵!因为您的所有流量都将通过您的服务器并被中继到客户端,您可以看到https://www.twilio.com/stun-turn看看它有多贵,您也可以部署自己的 对我来说最好的是https ://code.google.com/p/rfc5766-turn-server/

但这只是冰山一角!!!!!!!!!

现在您知道如何在客户端之间发送交换数据了!但是您要使用信令服务器来创建通信会话,因为当我想给您打电话时,您必须收到通知说,我正在尝试给您打电话。

那么如果我们接听电话,我们仍然需要交换我们将如何通话!为什么因为也许我可以 p2p 但你不能,所以我们必须使用中继服务器。下一步是说我们要发送什么,毕竟我们开始正常通信......

阅读webrtc以获得更好的观点

我希望它有帮助

于 2015-08-18T02:45:26.697 回答