如果防火墙默认阻止所有传入连接,p2p技术如何工作?像种子一样,你如何连接到共享文件并从中获取信息的每个人?它是通过中继服务器还是什么?
答案 0 :(得分:14)
我对BitTorrent的一切都不了解,因为我讲的是一般的P2P连接技术。通常,P2P网络中的客户端在公共信令服务器(例如,SIP,XMPP,跟踪服务器,网站)上会合以交换IP地址,其他元数据和消息以引导直接连接。然后使用以下任何一种技术进行通信会话:
双方同时尝试相互连接 - 如果一方无法接受传入连接,但允许进行出站连接。防火墙场景就是这种情况。
打孔(与上述配合使用)。继电器本身并不是必需的,但是当两个对等体都在难以遍历的网络设备后面时,确实有助于确保连接。有UDP Hole Punching和TCP Hole Punching技术。更多信息here。
当无法直接连接时,可以将包括TURN servers在内的中继部署到P2P网络中。所有您喜欢的视频通话应用程序都会针对这些情况部署中继,但要尽最大努力让同行直接连接以避免中继费用。
Bing有以下主题:STUN,TURN,ICE(交互式连接建立),libjingle,pjnath,libnice。
答案 1 :(得分:5)
如果防火墙(而不是NAT)打算阻止传入连接(我相信它们通常会这样做),那么你无能为力。你可以试试你喜欢的所有打孔。这是通过实现对称NAT来实现的,即每个针孔专门针对ip,端口四倍(源,目标端口和IP)打开。
BitTorrent不太可能因为你无法接收传入连接而停止工作,它只是表现稍差。有可能群中至少有一些人可以接收连接,你只需要连接它们。
This是一个古老的解释,说明如何防火墙主要意味着更糟糕的表现。
修改强>
“为什么”的简短回答是大多数同行不在防火墙之后(只是NAT)。
答案 2 :(得分:1)
后人:
简短的回答是,它是通过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组合发送到第三方站点并交换此信息并开始连接(无论谁先获得信息)。
答案 3 :(得分:0)
设左 F =#防火节点,
O =打开传入端口的#节点,
T = F + O =节点总数,
P = O / T =具有开放端口的总节点数的比例,
每个防火墙节点都可以拥有 C f = max#connections,并且
每个开放节点可以有 C o = max#connections。
然后,
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,网络根本不起作用∵没有人能够发起与其他同伴的连接。