21

如果防火墙默认阻止所有传入连接,那么 p2p 技术如何工作?像种子一样,您如何连接到共享文件的每个人并从他们那里获取信息?它是通过中继服务器还是其他什么?

4

4 回答 4

16

我对 BitTorrent 的一切都没有兴趣,因为我对一般的 P2P 连接技术很感兴趣。通常,P2P 网络中的客户端会在公共信令服务器(例如 SIP、XMPP、跟踪服务器、网站)上会合,以交换 IP 地址、其他元数据和消息以引导直接连接。然后使用以下任何技术来进行通信会话:

  • 双方尝试同时相互连接 - 以防一方无法接受传入连接,但允许进行出站连接。防火墙场景就是这种情况。

  • 打孔(与上述结合使用)。中继本身不是必需的,但当两个对等点都位于难以穿越的网络设备后面时,它确实有助于确保连接性。既有UDP打孔技术,也有TCP 打孔技术。更多信息在这里

  • 当无法直接连接时,可以将包括TURN 服务器在内的中继部署到 P2P 网络中。您最喜欢的所有视频通话应用程序都为这些场景部署中继,但尽最大努力让对等方直接连接以避免中继成本。

Bing 用于以下主题:STUN、TURN、ICE(交互式连接建立)、libjingle、pjnath、libnice。

于 2013-02-18T07:03:50.283 回答
5

如果防火墙(而不是 NAT)打算阻止传入连接(我相信他们通常会这样做),那么您无能为力。你可以尝试所有你喜欢的打孔。这仅通过实施对称 NAT 来实现,即每个针孔都是专门为一个 ip、port-quadruple(源、目标端口和 IP)打开的。

BitTorrent 不太可能仅仅因为您无法接收传入连接而停止工作,它的性能只会稍差一些。很有可能群体中至少有一些人可以接收连接,而您只需连接到他们。

是一个古老的解释,说明如何被防火墙主要只是意味着更差的性能。

编辑:

“为什么”的简短回答是大多数对等点不在防火墙后面(只是 NAT)。

于 2013-03-09T02:57:46.020 回答
2

为后代:

简短的回答是,它是通过https://en.wikipedia.org/wiki/Hole_punching_(networking)完成的

当您从您的机器(很可能位于路由器和 NAT 后面)连接到 google.com 时,您的机器 IP 地址和经过 NAT 的端口号会发送到 Google 服务器。Google 使用这些连接信息将搜索结果发送到您的计算机。

你可以把google的服务器想象成p2p网络中的一个节点。即使您的路由器不接受传入连接,Google 也能够从他们的服务器“联系”您。这是因为他们没有启动连接(他们不知道您的 ip:NATedport 组合来启动连接)。但是您的机器可以建立出站连接并将您的 ip:NATedport 组合发送/发布到外部世界。

因此,p2p 中的两个节点都将它们的 ip:NATedport 组合发送到第三方站点并交换此信息并开始相互连接(谁先得到信息)。

于 2016-10-23T01:24:47.733 回答
0


F = # 防火墙节点,
O = # 具有开放传入端口的节点,
T = F + O = 总节点数​​,
P = O / T = 具有开放端口的总节点的比例,
C f = 每个防火墙的最大连接数节点可以拥有,并且
C o = max # 每个打开节点可以拥有的连接数。

然后,
C f = O , ∵ 防火墙节点只能连接到开放节点
C o = T - 1, ∵ 开放节点可以连接到所有其他节点(并且一旦所有防火墙节点都首先连接到它们)
所以
C o / C f = ( T - 1) / O = 1 / P - 1 / O

如果T很大,则
C o / C f ≈ 1 / P

因此,例如,假设一半节点具有开放的传入端口:P = ½。然后,
C o / C f ≈ 2,
这意味着开放节点的连接数约为防火墙节点的 2 倍(这意味着它们负担过重,但也意味着它们具有更高的可见性)。

因此,对于特定节点和整个网络来说,P = 1 会更好;所有节点都将同样可见且负担相同。

如果P = 0,网络将根本无法工作∵ 没有人能够发起与其他对等方的连接。

于 2018-01-10T18:01:06.540 回答