摘要
详情
分布式哈希表(DHT):
Kademlia二叉状态树:
- 每个网络节点从根节点出发,沿着他的最短唯一前缀到达
- 每个网络节点是叶子节点
节点路由表K-Bucket:
用于保存每一个节点与自己一定距离范围内其他结点的连接信息,每一条路由信息由以下3个部分组成:IP Address, UDP Port, Node ID。KAD路由表将距离分成160个K桶(存放K个数据的桶),分开存储。对于一个有N个节点的KAD网络,最多只需要经过logN步查询:
1.计算自己和发送者的ID距离: d(x, y)=x+y。
2.通过距离d选择对应的K桶进行更新操作
3.如果y的IP地址已经存在于这个k桶中,则把对应项移到该K桶的尾部;如果y的IP地址没有记录在该K桶中,则:
- 如果该K桶的记录项小于K个,则直接把y的(IP address, UDP port, Node ID)信息插入队列尾部。
- 如果该K桶的记录项大于K个,则选择头部的记录项(假如是节点z)进行RPC_PING操作:
1.如果z没有响应,则从K桶中移除z的信息,并把y的信息插入队列尾部
2.如果z有响应,则把z的信息移到队列尾部,同时忽略y的信息