• 客户-服务器体系:极大的依赖于总是打开的基础设施服务器
  • P2P体系:对总是打开的基础设施有着最小(甚至没有)的依赖。与之嫌犯,成对间歇连接的主机(称为对等方)彼此直接通信。这些对等方不为服务提供商所拥有,而是受用户控制的桌面计算机和膝上计算机
  • 假设一个单一服务器向大量主机(称为对等方)分发一个大文件,在客户-服务器文件分发中,该服务器必须向每个对等方发送该文件的一个副本,即服务器承受了极大的负担,并且消耗了大量的服务器带宽。在P2P文件分发中,每个对等方能够向任何其他对等方重新分发它已经收到的该文件的任何部分,从而在分发过程中协助该服务器。

    一、P2P体系结构的扩展性

  • 传统的客户-服务器体系中,文件分发时间d会随着客户数量(接收方)的增加而线性增加。比如,服务器要向客户发送一个大小为F的文件。如果接收对等方增加了1000倍,则完全发送的时间也会增加1000倍。

  • 但是P2P体系结构不一样。它的最小分发时间总是小雨客户-服务器体系结构的。而且分发时间也并不会随着客户数的增多而线性增长的,而是增长速度逐渐放缓,最终接近于一个极限。这是由于P2P体系结构的对等接收方在接收文件的同时,也向其他对等的接收方发送自己接受到的一部分。这就意味着,在对等方(客户方)也成为了发送方的一部分,随着客户数量的上升,可用于发送文件的资源也增加了!这就是P2P体系的自拓展性的直接成因:对等方除了是比特的消费者外还是它们的重新分发者

    二、BitTorrent

  • BitTorrent是一种用于文件分发的流行P2P协议(以下简称BT)。用BT的术语来讲,参与一个特定文件分发的所有对等房的集合被称为一个洪流(torrent)。在一个洪流中对等方彼此下载等长度的文件块(chunk),一般一个文件块的标准大小为256KB。

  • 当一个对等方刚刚加入洪流的时候,它是没有块的。随着时间的流逝它接受到了越来越多的块。当它下载块的时候,也为其他对等方上载了许多块。一旦某个对等方获取了所有的块(也就是文件下载完了),它可以直接离开洪流,也可以大公无私地留在洪流中继续向其他对等方上载块。同时,任何对等方可能在任何时候仅具有块的子集就离开该洪流,并在以后重新加入该洪流中
  • 每个洪流具有一个基础设施节点,称为追踪器(tracker)。当一个对等方加入某个洪流时,它向追踪器注册自己,并且周期性地通知追踪器它仍在该洪流中。以这种方式,追踪器跟踪参与在洪流中的对等方。一个给定的洪流可能在任何时刻具有数以百计、数以千计的对等方

image.png

  • 当一个新的对等方Alice加入该洪流的时候,追踪器将会随机的从参与对等方的集合中选择对等方的一个子集(假设选择了50个对等方)。并将这50个对等方的子集给到Alice。然后Alice会试图和这些对等方建立TCP链接。我们称所有这样和Alice成功创建TCP连接的对等方为“邻近对等方”。在传输的过程中,对等方可能会离开,其他对等方可能会和a建立连接,所以一个对等方的邻近对等方会随着时间变化而变化。
  • 在任何给定的时间,每个对等方将具有来自该文件的块的子集,并且不同的对等方具有不同的子集。Alice周期性地(经TCP连接)询问每个邻近对等方它们所具有地块列表。如果Alice具有L个不同地邻居,她将获得L个块列表。有了这个信息,Alice将对她当前还没有地块发出请求(仍通过TCP连接)
  • Alice手中有块子集的信息和地址。那她需要思考两个问题:她应该从她的邻居中请求什么块?应该向哪些邻居发送块?
  • 在决定请求哪些块的过程中,Alice使用一种称为最稀缺优先(rarest first)技术。这种技术的思路为:针对她没有的块在她的邻居中决定最稀缺的块(最稀缺的块也就是在她的邻居中副本数量最少的块),并首先请求哪些最稀缺的块。这样最稀缺的块得到更为迅速的重新分发,其目标是(大致地)均衡每个块在洪流中的副本数量。
  • 而如何决定它应该向哪个对等方发送块,bt用了一种对等算法,其基本思想为Alice根据当前能够以最高速率向他提供数据的邻居,给出优先权。特别是,Alice对于她的每个邻居都持续地测量接收到比特的速率,并确定以最高速率流入的4个邻居。每过10秒,她重新计算该速率并可能修改这4个对等方的集合,用BT的属于来说,这4个对等方被称为疏通(unchocked)。这种效果是对等方能够以趋向于找到彼此的协调的速率上载。除了这5个对等方(“前”4个对等方和一个试探的对等方)的所有其他相邻对等方均被“阻塞”,即它们不能从Alice接收到任何块。