P2P文件分享

P2P文件分享

Kronos Damocles

内容提要

P2P共享的概念,发展的两个阶段,DHT的原理,DHT骨干节点。


基本概念

Peer to peer file sharing,字面意思就是用户互相分享。

分享的对象未必是文件,只是文件占了绝大多数应用场景。

这一分享方式与传统的 服务器-客户端 模式有本质不同: 分享的文件不来自于服务器


发展阶段

在P2P分享模式发展的第一阶段,仍然依赖于服务器提供索引功能。

比如电驴服务器,提供两种索引:文件名的关键字到文件hash的对应关系;文件hash到供档者 IP地址:端口 的对应关系。

BT服务器,只提供上述第二种索引。这是BT与电驴的根本区别。


在P2P分享模式发展的第二阶段,对中心化服务器的依赖被彻底移除,服务器的功能由全体用户分担。

这种模式学术上称为 Distributed Hash Table, 即 DHT.

电骡对这种模式的实现被取名为 Kademlia (论文链接: https://www.scs.stanford.edu/~dm/home/papers/kpos.pdf)。

BT就干脆直接借用了它的学术名 DHT,为避免概念混淆,下文称之为 BT-DHT.

电骡的Kad与BT-DHT原理相同,只是实现方式不同。


P2P分享模式现已发展到了第三阶段,即基于虚拟路由的匿名共享。例如: ipfs, freenet, kmule+i2p 等。

此类分享工具使用有一定门槛,用户基数太小。它们不在本社区关注范围内。


DHT基本原理

DHT是一张由全体用户组织成的网格,每个用户都是网格里的一个节点。

每个节点有独特的ID,并直接连接若干个节点。每个节点都分担了一部分索引工作。

基本的索引有三个:

  • 节点ID -> 节点IP:Port 的索引
  • 文件hash -> 供档节点ID 的索引
  • 关键字 -> 文件hash 的索引

当某个节点要查找某个文件hash的供档者时,它先检索自己的索引,如果没找到,就询问自己直连的节点,

被询问的节点也执行类似的操作,使检索行为在网格中逐渐扩散,直到得到结果(找到或失败)。

当文件hash与节点ID之间有固定的对应关系时,检索的扩散就具有明确方向了,

它会向 文件hash 与 节点ID 对应最紧密的方向递归检索,效率比广播式查找大大提高。

这一对应关系的最简单的形式,就是 hash = 节点ID。


DHT骨干节点

在DHT里,有固定IP地址并且长时间在线的节点是非常重要的,它们有求必应,是节点间联系的枢纽,是P2P分享中执行检索操作的桥梁。

即使是低配的云主机,512M内存加几个G的月流量,不共享任何文件,只需开着电骡和BT,就足够承担索引的任务,对DHT的生态起到关键作用。

家用电脑和宽带网络,即使容量高,带宽大,由于IP地址变动会导致索引的变化,它们对DHT的贡献并不大。





Report Page