我正在编码一个我想使其分散的p2p实现,但是在掌握像bittorrent这样的协议中DHT的工作方式时遇到了一些麻烦。如果没有跟踪器,客户端如何知道对等方在哪里?同行是否存储在实际的torrent文件中?
Answers:
对于无跟踪器/ DHT种子,对等IP地址使用BitTorrent infohash作为密钥存储在DHT中。由于基本上所有的跟踪器都响应放置/获取请求,因此此功能与DHT(分布式哈希表)提供的接口完全对应:它允许您通过infohash查找并在DHT中存储IP地址。
因此,“获取”请求将查找BT infohash并返回一组IP地址。“ put”存储给定信息哈希的IP地址。这对应于您向跟踪器发出的“通告”请求,以接收对等IP地址的字典。
在DHT中,对等点被随机分配以存储属于键空间的一小部分的值;散列确保密钥在参与对等方之间随机分布。DHT协议(BitTorrent的Kademlia)可确保将放置/获取请求有效地路由到负责维护给定密钥IP地址列表的对等方。
DHT节点具有唯一的标识符,称为节点ID。节点ID是从与BitTorrent信息哈希相同的160位空间中随机选择的。紧密度是通过比较Node ID的路由表来衡量的,Node越近,越详细,从而获得最佳
然后,使它们比使用简单的无符号整数的前身“ Kademlia”更好的是:distance(A,B)= | A xor B | 较小的值更接近。XOR。除了不安全之外,其逻辑也有缺陷。
如果您的客户端支持DHT,则保留8个字节,其中包含0x09,后跟2个字节的UDP端口和DHT节点负载。如果握手成功,上述操作将继续。