P2P 是 Peer-to-Peer(点对点) 的缩写,是一种 去中心化 的网络架构,其中每个节点(称为 “对等节点”,Peer)既是 “客户端”,也是 “服务器”,可以直接与其他节点通信、共享资源或服务,无需依赖中心服务器。
像Web,EMail,DNS等等都采用了CS体系架构,即客户-服务器体系,极大依赖于总是打开的基础设施服务器。比如在CS架构中分发文件,服务器必须为每一个对等方发送一个文件副本,服务器承受了极大的负担,并且消耗了大量的服务器带宽。而在P2P架构中,每个对等方能够向任意一个对等方重新发送它已经收到的文件的任何部分,从而在分发的过程中协助服务器。
P2P体系的扩展性
我们先计算一下理想状态下CS架构中的分发时间:
如图2 - 21所示,服务器和对等方使用接入链路与因特网相连。其中us表示服务器接入链路的上载速率,ui表示第i对等方接入链路的上载速率,di表示第i对等方接入链路的下载速率。用F表示被分发的文件长度(以比特计),N表示要获得该文件副本的对等方的数量。分发时间是所有N个对等方得到该文件的副本所需要的时间。
服务器必须向N个对等方传输一个文件的副本,苏所以服务器NFbit数据。因为服务器上载速率是us,所以分发该文件的时间至少是NF/us.
我们设dmin为其中最小下载速率的对等方下载速度,所以最小下载速率的对等方得到全都Fbit的数据时间至少为F/dmin.
结合到一起我们得到最小实际发送时间:Dcs >=max(NF/us,F/dmin).
因此,如果客户N急剧增大,分发时间也会呈线性速度不断上涨。
接下来我们简单分析一下理想状态下P2P架构的最小文件发送时间,感受一下P2P体系的扩展性有多强。
起初,只有服务器才具有文件,所以为了使社区所有的对等方都具有该文件,服务器至少完整的发送该文件一次,即F/us.
与CS架构相同,我们设置dmin为其中最小下载速率的对等方下载速度,所以最小下载速率的对等方得到全都Fbit的数据时间至少为F/dmin.
最后我们观察到系统整体的上载速率为服务器的上载速率加上每一个对等方的上载速率,即Utotal=us+u1+u2+...un.因此,最少分发时间最少也得有NF/Utotal.
因此把上面三项放在一起比较,就构成了P2P架构中文件最小分发时间:
Dp2p >=max(F/us,F/dmin,NF/Utotal).
我们不难看出对于N的不断增加,Dp2p不会无限增长,而是趋于稳定。
形成这种拓展性的直接原因就是:对等方除了是bit的消费者外,同时还是它们自身的分发者。
BitTorrent
BitTorrent 是一种基于 P2P(点对点) 技术的去中心化文件共享协议,它通过将大文件分割成小块,让用户同时从多个节点下载和上传数据,从而提升传输效率。
用BitTorrent的术语来说,每一个参与文件分发的对等方的集合被称为一个洪流,在一个洪流的对等方彼此下载等长度的文件块,典型的长度块为256kb.当一个对等方首次加入洪流的时候,它没有块,但随着时间的流逝,它会积累越来越多的块。
在BitTorrent中,种子节点(Seed)指的是已完整下载文件并继续保留文件、向其他节点上传数据的设备。它作为数据的主要来源,向下载者(Leecher)提供文件分片。下载者节点则指的是正在下载文件、尚未完成的设备。
每一个洪流之中有一个基础设施节点,称为追踪器。其负责指挥种子(Seed)节点和下载者(Leecher)节点之间的 BitTorrent 数据传输。
追踪器通过维护节点信息数据库,为其所负责的所有文件的分发维护一个统一的节点信息数据库,记录着所有正在共享该文件的种子节点和下载者节点的相关信息,如 IP 地址、端口号、上传和下载速度等。
当客户端通过种子文件中提供的 Tracker 服务器地址发送下载请求时,Tracker 服务器会在其数据库中查找是否有其他用户正在共享这个文件。如果有,服务器响应客户端请求,返回这些用户的 IP 地址、端口信息以及他们当前上传和下载的速度等,让新客户端可以直接与这些节点建立连接,开始下载文件。
在下载过程中,客户端会定期向 Tracker 服务器汇报下载进度和其他相关信息,Tracker 会更新自己的记录,并可能提供新的同行列表以优化下载性能。通过与节点的周期性交互,Tracker 可以了解节点的活跃状态,以便及时调整节点列表,确保客户端获取到的都是有效的节点信息。通过合理地分配节点连接,避免某些节点连接过多或过少客户端,从而使文件下载和上传能够更高效、均衡地进行,提高整个网络的性能和稳定性。
同时P2P采用了一种最稀缺优先的技术,每个节点在下载文件时,会根据网络中各个文件分割片段的稀缺程度来决定优先下载哪些片段。稀缺程度通常通过统计拥有该片段的节点数量来衡量,拥有某个片段的节点越少,该片段就越稀缺。节点会优先向拥有稀缺片段的其他节点请求下载这些片段,以尽快获取文件的完整内容。
所以BitTorrent 协议下载文件的典型流程可以总结为:获取种子文件--连接Tracker服务器--获取对等节点列表--建立P2P连接--文件分块下载与上传--完成下载。
在 BitTorrent 中,“一报还一报” 是一种激励机制和阻塞算法,当每个对等节点在下载文件的同时,也需要向其他节点上传已下载的部分。节点会优先与那些向自己提供高速下载的节点建立连接并进行数据传输,而对于那些不积极上传或上传速度慢的节点,则可能会采取阻塞措施,暂时停止向它们上传数据,保证了系统的公平性,同时也促进了资源共享。
BitTorrent 的成功在于其混合设计:用 Tracker 提升初期效率,用 DHT(分布式哈希表) 保证去中心化,所有节点地位平等,最终实现大规模文件分发的高性能与抗审查性。
🍁🍁🍁.