如何在防火墙后面连接两个客户端(其中一个是浏览器)

时间:2012-12-11 16:36:09

标签: p2p nat upnp portforwarding

我知道像Skype这样的p2p软件正在使用UDP打孔。但是,如果其中一个客户端是需要从另一个客户端(TCP连接而不是UDP)下载文件的Web浏览器呢?这种情况有没有技术?

我可以拥有一个可以与客户端结合的中间公共服务器,但我无法承受这些客户端之间的所有流量通过此服务器。公共服务器只能在Skype之间建立连接,就像Skype一样。这必须通过TCP(更确切地说,HTTP)来使下载客户端成为Web浏览器。

不得要求两个客户在路由器或类似设置中设置任何内容。

我打算用C / C ++编写代码,但是我想知道这个想法是否可行。

2 个答案:

答案 0 :(得分:3)

我之前写过一篇非常简洁的粗略答案,内容是关于P2P如何与各种协议和相应的开源库进行讨论。你可以阅读它here

P2P的可靠性最终取决于您从客户端编码角度和服务配置(即信令服务器和中继)投入多少资金。您可以在没有防火墙支持的情况下轻松实现UDP的NAT遍历。也许更多的努力,你得到TCP连接。你可以“一路走”,并为拥有最强防火墙的客户提供HTTPS监听器的继电器。

关于防火墙问题的答案。取决于防火墙的配置方式。许多防火墙只是美化的NAT,具有安全性,可以限制某些端口的流量并阻止未经请求的传入连接。其他的限制非常严格,只允许代理上的HTTP / HTTPS流量。

如果无法直接连接,视频会议应用程序将最终回退到通过PC配置的代理服务器模拟HTTPS连接到远程中继服务器的端口443(或80)。 (在某些情况下,远程客户端将尝试侦听端口80或端口443,以便它可以直接连接)。

你绝对正确地认为让所有客户通过中继都需要昂贵的维护费用。如果您的目标是100%连接,无论客户端是什么类型的防火墙,都必须存在一些中继解决方案。如果您不支持中继解决方案,您可以投入大量资金,使直接连接可靠地工作,并且只有一小部分客户端被阻止。

希望这会有所帮助。

答案 1 :(得分:1)

PeerConnectionWebRTC的一部分在现代浏览器中解决了这个问题。

在幕后,它使用ICE RFC进行NAT打孔。

对于旧版浏览器,可以在Flash中使用P2P支持。