我正在编写一个P2P实现,希望使其去中心化。但是,我在理解像BitTorrent这样的协议中DHT如何工作方面遇到了一些困难。
如果没有tracker,客户端如何知道对等方在哪里? 对等方是否存储在实际的种子文件中?
如果没有tracker,客户端如何知道对等方在哪里? 对等方是否存储在实际的种子文件中?
在无追踪/DHT种子中,点对点的IP地址使用BitTorrent infohash作为密钥存储在DHT中。 因为追踪器唯一做的基本上就是响应put/get请求,所以这个功能完全对应了DHT(分布式哈希表)提供的接口:它允许您通过infohash在DHT中查找和存储IP地址。
因此,“get”请求将查找BT infohash并返回一组IP地址。“put”存储给定infohash的IP地址。这对应于您否则会向追踪器发出的“announce”请求,以接收对等方IP地址字典。
在DHT中,对等方被随机分配存储属于密钥空间小部分的值;哈希确保密钥在参与对等方之间随机分布。 DHT协议(用于BitTorrent的Kademlia)确保将put/get请求有效地路由到负责维护给定密钥的IP地址列表的对等方。
关于Kademlia协议的一般理论可以在维基百科的文章中找到:Kademlia。在BitTorrent中使用的具体协议规范在这里:http://wiki.theory.org/BitTorrentDraftDHTProtocol