跳转至

DHT 网络

BitTorrent 找到下载节点有两类入口:一种是先问中心化的 Tracker 服务器,另一种是加入去中心化的 DHT 网络。两者解决的是同一个问题:给定一个资源标识,找到正在持有或下载这个资源的节点。

Tracker 服务器

Tracker 服务器是 BitTorrent 协议中帮助客户端发现其他节点的服务器。

客户端下载一开始会连接到 Tracker,从 Tracker 获得其他客户端的 IP 地址后,才能连接到其他客户端下载。在传输过程中,客户端也会持续与 Tracker 通信,上传自己的信息,并获取其他客户端的信息。1

这种方式的好处是模型简单,但 Tracker 会成为中心节点:如果 Tracker 不可用,新的客户端就很难通过它找到其他节点。

分布式哈希表

分布式哈希表(Distributed Hash Table,DHT)把“资源标识到节点列表”的索引分散到网络里的许多客户端上。一个 BT 客户端连入 DHT 网络以后,也会充当一个节点,记录一部分资源的位置;它不需要真的下载这些资源,只需要维护索引信息。

客户端只要知道 DHT 网络中的任意一个节点,就可以继续发现更多节点并加入网络。索引和查询压力由多个节点分摊,所以 DHT 网络通常比只依赖 Tracker 的中心化网络更稳定。

DHT 常会用到 Consistent hashing(一致性哈希) 一类思想:将“存储节点”和“数据”都映射到一个首尾相连的哈希空间上,让节点数量变化时只迁移少量数据。相比普通 Hash Table 扩容后需要 rehash 并移动大量数据,这更适合节点频繁加入和离开的网络环境。

相关文章