夜光:计算机网络笔记(十二)

夜光序言:

 

我觉得泪水是世间最不需要强忍的东西,有时候我也想忍住,让别人觉得我很坚强,但忍不住的时候我就不会忍,因为后来我明白坚强只是一种内心,爱哭不是不坚强,哭过之后还能站起来,能清醒地明白该走什么样的路,做什么样的事,我要做的是这样的人。

 

 

 

 

 

 

正文:

 

P2P
1P2P 文件分发的可扩展性


P2P 体系结构中,其中每个 peer 节点都能够帮助服务器来分发文件。也就是说,当一个 peer 节点接收到文件数据时,它可以利用自己的上载能力重新将数据分发给其他 peer 节点。

在以上例子中,在分发的开始,只有服务器拥有文件。为了使这些 peer 节点得到该文件,服务器必须经其接入链路至少发送一次该文件。因此,最小分发时间至少是
F/us
客户机 i 下载时间是
F/di 
系统的总上载能力等于服务器的上载速率加上每个 peer 节点的上载速率,即
us + ∑ui
系统必须向 N 个 peer 节点的每个交付(上载)NF 比特,因此最小分发时间至少是
NF/(us + ∑ui)

将这三个观察结合起来,我们可以得到 P2P 系统的最小分发时间,记为 dP2P
dP2P = max { F/us, F/min(di) , NF/(us + ∑ui)}

显然,对干 P2P 体系结构,文件分发是可以自我扩展的,因为 peer 节点除了是下载消费外还能进行上传提供服务。随着 N 的增大,∑ui也会增大,所以 dP2P会保持稳定。



2 .BitTorrent


BitTorrent 是一种用于文件分发的 P2P 协议。 

在一个 Torrent 中,peer 节点彼此下载等长度的文件块,块长度通常为 256KB。当一个peer 节点开始加入一个 Torrent 时,它没有文件块。随着时间的推移,它将累积越来越多的文件块。

 

当它下载文件块时,也为其他 peer 节点上载了多个文件块。peer 节点一但获得了整个文件,它可以(自私地)离开 Torrent,或(大公无私地)留在 Torrent 中并继续向其他 peer节点上载文件块。

 

当一个 peer 节点 Alice 加入 Torrent 时,追踪服务器随机选择一些 peer 节点,并将这些peer 节点的 IP 地址发送给 Alice。


 

Alice 持有这些 peer 节点的列表,试着与该列表上的多个 peer 节点创建并行的 TCP 连接。

这里称所有与 Alice 成功地创建 TCP 连接的 peer 节点为“邻近 peer 节点”。

随着时间的推移,其中的一些 peer 节点可能离开,而其他 peer 节点可能试着与 Alice创建 TCP 连接。因此,邻近 peer 节点将随着时间而改变。
 


在任何时刻,每个 peer 节点都拥有来自某文件块的子集,且不同的 peer 节点具有不同的文件块子集。Alice 周期性地(经 TCP 连接)询问每个邻近 peer 节点它们所具有的块列表。

如果 Alice 有 L 个邻居,那么她将获得 L 个块列表。因此,Alice 将对她当前还没有的块发出请求(仍通过 TCP 连接)。
 

 


Alice 使用一种称为最稀罕优先的策略,其思路是根据她没有的块从她的邻居中确定最稀罕的块(最稀罕的块就是在她的邻居中拷贝数量最少的那些块),并优先请求那些最稀罕的块。按照此方式,最稀罕的块更迅速地重新分发,其目标(大致)是均衡每个块在洪流中的拷贝数量。

 

如果多个用户向她请求文件块,为了决定她响应哪个请求,BitTorrent 使用了一种对换算法。其基本思想那些当前能够以最高的速率供给她数据的邻居具有较高的优先权。Alice对于她的每个邻居都持续地测量她们之间连接的速率,确定以最高速率流入的 4 个邻居。然后,她将数据块发给这 4 个邻居。每过 10 秒,她重新计算该速率并可能修改这 4 个 peer节点。更重要的是,每过 30 秒,她要随机地选择一个另外的邻居并向它发送块。

在 PZP 文件共享中,搭免费车(free-riding)是一个常见的问题,这是指 peer 节点从文件共享系统中下载文件而不上载文件。BitTorrent 的对换算法有效地消除了这种搭免费车问题。

 



3 分布式散列表


分布式散列表在 P2P 网络中实现了一个简单的数据库。


数据库只包含 key-value 对例如:键可以是社会保险号,值可以是相应的人名;在这种情况下,键一值对的例子如(156-45- 7081 , John ),或者键可以是目录名(例如,电影、唱片和软件的名字),值可以是存储内容的 IP 地址。当用键来查询数据库,如果存在键值对,数据库就返回相应的值。


可以为每个 peer 节点分配一个标识符 ID,其中每个标识符是一个(0, 2n-1)范围内的整数,n取某些固定的值。使用散列函数把每个键(如社会保险号)映射为(0, 2n-1)范围内的一个整数。

 

散列函数是一种多对一的函数,使两个不同的输入可能具有相同的输出(相同的整数),但是具有相同输出的似然性极低。

由于每个 peer 节点具有了一个整数标识符,这时就可以将 key-value 对分配给具有最近ID 的 peer 节点.,一般最近的 peer 节点是指 key 是最邻近的 peer 节点的后继,例如

假设有 8 个 peers: 1,12,13,25,32,40,48,60
如果 key = 53,那么这个 key-value 对将分配到 60 号 peer 节点
如果 key = 60,那么这个 key-value 对将分配到 60 号 peer 节点
如果 key = 61,那么这个 key-value 对将分配到 1 号 peer 节点

环形 DHT


为了处理规模的问题,将这些 peer 节点组织成环状,每个 peer 节点仅知道它的直接
successor 和 predecessor。查找某个键值对时,在这个环状网络中进行时钟顺序查找。

为了加速查找,又建立了 peer 节点之间的 shortcut 连接。

此时每个 peer 节点保留 predecessor, successor, short cuts 的 IP 地址。例如 peer12 进行键值 53 的查找从原来的 12-13-25-32-40-48-60 需要 7 个消息减少 12-48-60 的 3 个消息。

在 DHT 数据库中,peers 节点可能加入和离开(churn),但是由于每个 peer 知道两个后继的地址。只要每个 peer 周期性的 ping 两个后继以检测活性,如果直接后继离开, 那么选择下一后继为当前直接后继。


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值