为了账号安全,请及时绑定邮箱和手机立即绑定

计算机网络自学笔记:P2P

标签:
Java

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

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

webp

在以上例子中,在分发的开始,只有服务器拥有文件。为了使这些 peer 节点得到该文 件,服务器必须经其接入链路至少发送一次该文件。因此,最小分发时间至少是

webp

显然,对干 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 

webp

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

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

webp

此时每个 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 两个后继以检测活性,如果直接后继离开, 那么选 择下一后继为当前直接后继。 



作者:云时之间
链接:https://www.jianshu.com/p/618f6329e859


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消