Kademlia Kademlia是一种通过分散式雜湊表实现的协议算法它是由Petar Maymounkov与David Mazières为非集中式PP计算机网络而设计的Kademlia规定了网络的结构也规定了通过节点查询进行信息交换的方式参与通讯的所有节点形成一张虚拟网或者叫做覆盖网这些节点通过一组数字或称为节点ID来进行身份标识节点ID不仅可以用来做身份标识还可以用来进行值定位值通常是文件的散列或者关键词其实节点ID与文件散列直接对应它所表示的那个节点存储着哪儿能够获取文件和资源的相关信息当我们在网络中搜索某些值即通常搜索存储文件散列或关键词的节点的时候Kademlia算法需要知道与这些值相关的键然后分步在网络中开始搜索每一步都会找到一些节点这些节点的ID与键更为接近如果有节点直接返回搜索的值或者再也无法找到与键更为接近的节点ID的时候搜索便会停止这种搜索值的方法是非常高效的与其他的分散式雜湊表的实现类似在一个包含n个节点的系统的值的搜索中Kademlia仅访问Ologn个节点非集中式网络结构还有更大的优势那就是它能够显著增强抵御拒绝服务攻击的能力即使网络中的一整批节点遭受泛洪攻击也不会对网络的可用性造成很大的影响通过绕过这些漏洞被攻击的节点来重新编织一张网络网络的可用性就可以得到恢复