打开Internet P2P套接字连接

时间:2014-08-11 23:25:18

标签: .net sockets p2p

这是一个讨论得很多的话题,我知道,但我希望有一些创新的方法,或者一些我没有想过要做的事情。本质上,我需要一种在两台客户机上运行的套接字之间建立对等连接的方法。当然,主要问题是防火墙(which should be doable)和端口转发的需要。

现在,我熟悉UPNP等等,我知道你can(有时候,无论如何)设置路由器进行端口转发,但这对我来说似乎是一个混乱的实现,而不是提到不可靠,因为用户可以切换路由器,甚至没有UPNP或禁用它。

我打开(尽管有点不情愿)加入中间服务器以便于连接,如果需要的话,除了简单地从一个流复制到另一个流(数字相当于将两部手机连接在一起,一个面向另一个麦克风的扬声器,反之亦然),但是,正如这个类比希望暗示的那样,做到这一点似乎并不是最好的方法。或许可以采用两个独立连接的不同插座并将它们相互连接起来?

我已经看到lotslots的问题或多或少地说明了我想要的内容,并且我认识到将此标记为其中一些副本的诱惑,但主要是我和#39;我想知道像TeamViewer或Skype这样的应用程序(虽然我认为Skype可能已经切换到通过服务器进行所有通信,如果我没记错,但至少MSN Messenger曾经是P2P)这样做。

所以,问题是:如何设置套接字,无论是否通过使用中间服务器,将从一台客户机连接到另一台客户机,而不必使用UPNP或类似的不可靠的端口转发技术吗

我在途中做了一些笔记:

  • TeamViewer至少会为自己创建一些防火墙例外。我这样做没有问题。但如果它采取持有两部手机的方式,为什么需要这些呢?默认情况下(通常)批准出站请求。
  • 我已经听说过HTML5与WebSockets谈论允许浏览器到浏览器的聊天,但是它是如何工作的?我已经看到了一些帖子,并被介绍给WebRTC,但是可以在浏览器之外使用类似的技术吗?我这样认为,因为一般来说,网络对这种行为的限制更多。

只是为了记录,我确实可以完全控制客户端和任何必要的服务器,所以我可以做任何事情。 我非常感谢不必在发起客户端做某事,因为我很乐意看到Internet Explorer在那个地方发挥作用。基本上我正在寻找一个P2P代理,所以我当然可以做一些更高级的东西,通过编写我自己的套接字在它们之间进行交谈并显示它(它没有必要工作超级好,只够,好,工作),但如果IE可以通过那时直接连接那将是惊人的。

让我知道,我知道这也比我们在这里看到的要广泛得多,它可能更适合程序员,但我尽力保持它尽可能具体。

1 个答案:

答案 0 :(得分:3)

Teamviewer,Skype&类似的P2P应用程序使用UDP打孔机制来进行IPv4 NAT遍历。这使得P2P应用成为可能。但是,如果禁用UDP或NAT路由器是对称的,则这种打孔不起作用。如果网络不支持打孔,所有P2P机制都会回退到中间服务器代理方法。如果您的家庭用户构建应用程序,那么您可以在建立P2P连接方面取得90%的成功。但在企业界,只有极少数人允许P2P连接,因为出于安全原因,大多数人使用HTTP代理服务器代替NAT。 P2P连接的另一种机制是使用IPv6套接字。使用ipv6,不需要NAT&使用全局ipv6地址可直接访问该计算机。这个机制至少可以在windows vista&因为他们在默认情况下使用像teredo,6to4这样的Ipv6过渡技术拥有IPv6地址,所以在PC之上。你可以在Windows机器上看到这个ipv6地址,前缀为2001:这是一个全局ipv6地址,使用它可以直接建立与PC的连接而无需任何中间服务器。甚至ipv6也是不可靠的,因为很少有PC没有启用它。总之,您可以使用上述两种机制来构建应用程序以建立P2P连接,但很少需要回退到中间服务器。