DHT

DHT 全称 Distributed Hash Table,分布式哈希表,是一种分布式存储数据的方法,设计用来取代中心化的 Tracker。DHT 网络用来寻找在 swarm 中的 peers 的 IP 地址,用来取代了 Tracker 的功能。DHT 允许通过 info hash 来查询 peers,而不需要通过 Trackers.

DHT 是分布式系统的一种,它通过一个类似 hash table(key,value) 的查询服务。任何参与的节点都能迅速的获取到 key 关联的信息。维护从键到值的映射的责任分布在 DHT 网络的各个节点中,以这样一种方式,这样的更改将导致最小程度的中断。这使 DHT 网络可以扩展到非常多的节点,并处理连续的节点到达,离开和故障。

在原始的 BitTorrent 设计中,Tracker 是初始化时必须要经过的步骤,并且 Tracker 被部署在网络的单一节点上。这就意味着,BitTorrent 会有单点故障,这也是 BitTorrent swarm 的阿喀琉斯之踵,如果 Tracker 故障,那么 peers 就无法相互知道,结果就是 torrent 死掉。而在 DHT 网络中,这个问题就不存在。二者的差别在于,不像 Tracker,DHT 不依赖于一个单一机器来初始化 peers 的连接,而是将 DHT 网络中所有的节点都认为是潜在的节点,因此提供了容错机制。在 DHT 网络中初始化机制包括了一些冗余的机制:

  • 使用一些著名的或者广泛熟知的 DHT 节点
  • 使用一组 BitTorrent 客户端退出时缓存的节点
  • 使用一组 torrent 文件中的 bootstrap 节点
  • 从 swarm 中下载至少包含一个 peer 的 torrent,然后交换 UDP 端口

一旦获取到一个节点,客户端可以使用该节点在 DHT 网络中找到更多的节点,然后就可以用 DHT 节点来获取 peers 完成下载。

这种技术的好处非常明显,首先是去中心化,不再依赖于 Tracker,其次是容错性,不再依赖于单一节点,最后是更好的扩展性,可以扩展到非常多的节点,并处理连续的节点到达,离开和故障。用户之间可以更快创建通讯,特别是和 Tracker 服务器断开的情况下,DHT 可以保证用户之间的通讯。