P2P体系结构

体系结构

客户 - 服务器体系结构

例子:Web 、电子邮件、DNS

客户-服务器体系结构特点

极大地依赖于总是打开的基础设施服务器。

在客户 - 服务器文件分发中,该服务器必须向每个对等方发送该文件的一个副本,所以服务器承受了极大的负担,并且消耗了大量的服务器带宽。

客户-服务器分发文件时,分发时间随着对等方的数量线性的增加,而且没有上界只有下界。

P2P 体系结构

对等方:成对间歇性连接的主机。(其实就相当与客户 - 服务器体系结构中的客户主机)

分发时间(distribution time)所有 对等方得到服务器上传的文件副本所需要的时间。

在 P2P 文件分发中,在对等方直接分发的数据其实是文件块 ,而不是一个个比特(所以不是使用 HTTP 协议?TCP 报文是以比特形式传输的)。

最为流行的 P2P 文件分发协议:BitTorrent

P2P体系结构特点

对总是打开的基础设施服务器有 最小 的依赖。

在 P2P 文件分发中,每个对等方能够向任何其它对等方重新分发它已经收到的该文件的任何部分从而在文件分发过程中协助该服务器。

自扩展性:具有 P2P 体系结构的应用程序总是自扩展的,直接成因是:对等方除了是比特的消费者外还是他们的重新分发者。

P2P 文件分发中,在只考虑文件分发方法的情况下,P2P 体系结构的分发时间总是小于客户 - 服务器体系结构。并且,无论对等方的数量多么大,分发时间既有下界,也有上界!

BitTorrent

用 BitTorrent 的术语来说,参与一个特定文件分发的所有对等方的集合,被称为一个 洪流(torrent)

一个洪流中的对等方彼此下载等长度的 文件块(chunk),文件块长度一般为 256 KB。

对于一个对等方来说,一开始它加入洪流中,没有任何文件块。随着时间的推移,它的文件块越来越多,在这个过程中,它既从别的对等方那里下载块,也给其它对等方上载块。一旦对等方获得了整个文件,它也许(自私地)离开洪流,也可能(无私地)继续待在洪流中继续向其它对等方上载块。当然,对等方也可能在仅仅具有块的子集时就离开洪流,并在以后又重新加入这个洪流。

接下来,我们以应用程序 迅雷 qBitTorrent 的用户界面为例,对相关知识进行验证,顺便学学 qBitTorrent 中的各种关键词的实际含义,然后……

每个洪流具有一个基础设施节点,称为 追踪器(tracker)。当一个对等方加入某洪流时,它会向追踪器注册自己,并周期性地通知追踪器它仍然在洪流中。

当一个新的对等方(我自己正在使用 qBitTorrent 下载 JOJORabbit 电影的主机)加入该洪流时,追踪器随机的从洪流的对等方中选择一个子集,并将子集中所有对等方的 IP 地址发给我的主机。我的主机持有等对方的这张列表,会试图与该列表上的所有对等方创建并行的 TCP 连接(显然,这可能让我的主机变得非常卡)。

我们称所有与 我的主机 成功建立一个 TCP 连接的对等方为 邻近对等方。所有的邻近对等方我展示在 qBitTorrent 的用户界面中。因为任意时刻,可能有邻近对等方离开,也可能有新的对等方试图与 我的主机 建立 TCP 连接。因此 **一个对等方的邻近对等方将随时间而波动。**这同样在 qBitTorrent 的用户界面中体现:中间的 邻近对等方 列表每时每刻都在动态变化。

qBitTorrent 用户界面:

image-20201023175259050

image-20201023191443396

因为会并行地与多个对等方建立 TCP 连接传送文件块,因此在使用 qBitTorrent 时,如果文件下载速度很快,电脑的负载就会很大,我们能明显地感受到整个电脑变卡了。

请求文件块中的学问:最稀缺优先技术

显然,我们只会请求一个文件中还未下载的文件块。我的主机 会周期性地询问(经 TCP 连接)询问每个邻近对等方他们所具有的块列表。如果我有 L 个邻近对等方,就会有 L 个块列表。有了这些块列表后,我的主机就可以对我还没有的块发出请求(还是通过 TCP)。

通过上文,我们知道:任何时刻,我的主机都知道自己缺哪些文件块,也知道哪些邻近对等方有这些文件块。因此我应当向哪些邻近对等方请求这些块?又应该向哪些向我请求块的邻居发送块?

在决定请求哪些块的过程中,会使用 最稀缺优先 技术。技术思路:针对没有的块,在我的邻居中绝对最稀缺的块(最稀缺的块就是在邻居中副本最少的块),并首先请求这些最稀缺的块。这样,最稀缺的块得到更为迅速的重新分发,其目标是(大致地)均衡每个块在洪流中的副本数量。

响应文件块中的机灵:对换算法

在决定该响应哪些邻居对文件块的请求中,BitTorrent 使用了一种机灵的 对换算法

对换算法基本思路:根据当前能够以 最高速率 向她提供数据的邻居,给出其优先权。我的主机会 持续地 测量我对每个邻居的 接收速率,并确定最高速率流入的 4 个邻居。每过 10 s,重新计算速率,并可能更新这 4 个邻居。用 BitTorrent 的术语来说,这 4 个对等方的集合被称为 疏通(unchoked)

更重要的是,每过 30s,我的主机也要 随机地 选择另外一个邻居(假设叫 bingo)并向其发送块,如果 我的主机 同过发送块,成为了 bingo 主机的前 4 位上载者,bingo 也会开始向我的主机发送块,这样 bingo 的主机也可能成为了我的主机的前 4 位上载者。每过 30s 会再次随机选择一名新的对换伴侣并开始与这位对换伴侣进行对换,我们希望找到更好 的对换伴侣,使对等方能够以趋向于找到彼此的协调的速率上载。

随机选择邻居也允许新的对等方得到块。

除了这 5 个对等方的所有其它相邻对等方均被 “阻塞 ” ,既它们不能从我的主机接收任何块。这种交换激励机制又被称为 “一报还一报”。 **已经证实这种激励方案能够被回避。**但是 BitTorrent 依旧取得了广泛的成功。

分布式散列表(DHT)

是一种 P2P 的应用,是一种简单的 数据库。其 数据库记录 分布在一个 P2P 系统的多个对等方上。我们在 qBitTorrent 的 UI 界面的右下角也可以看到 DHT 关键词。

image-20201023194708095

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值