EMULE中KADEMLIA协议具体实现.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * 需要说明的是,只有第一步查询的节点101,是节点0011 已经知道的,后面各步查询的 节点,都是由上一步查询返回的更接近目标的节点,这是一个递归操作的过程。由于各节点 路由信息的不确定性(节点动态加入和离开引起),图2 只是展示了多种可能搜索路径的一 个具体实现。 * * * * * * 查找其他节点 在Kademlia网络中,节点搜索的实现方式是迭代式的搜索。这种方式就是说当开始搜索某个ID时,在本地联系人信息列表中查找到距离最近的联系人,然后向它们发出搜索请求,这样通常都能够得到一些距离更近的联系人信息,然后再向它们发送搜索请求,通过不断得进行这样的搜索查询,就能够得到距离目标ID最近的那些联系人信息。这里对应的消息代码是KADEMLIA_REQ和KADEMLIA_RES。 由于每次查询都能从更接近目标节点的K 桶中获取信息,这样的机制保证了每一次递归操作都能够至少获得距离减半(或距离减少1bit)的效果,从而保证整个查询过程的收敛速度为O( logN),这里N 为网络全部节点的数量。 * 假如节点x 要查找ID 值为t 的节点,Kad按照如下递归操作步骤进行路由查找: 计算到t 的距离:d(x , y) = x ⊕ y 从x 的第[㏒ d]个K 桶中取出α 个节点的信息(“[ ]”是取整符号),同时进行FIND_NODE 操作。如果这个K 桶中的信息少于α个,则从附近多个桶中选择距离最接近d 的总共α个节点。 对接受到查询操作的每个节点,如果发现自己就是t,则回答自己是最接近t 的;否则测量自己和t 的距离,并从自己对应的K 桶中选择α 个节点的信息给x。 x 对新接收到的每个节点都再次执行FIND_NODE 操作,此过程不断重复执行,直到每一个分支都有节点响应自己是最接近t 的。没有迅速响应的节点将被迅速排除出候选列表,直到其响应。 通过上述查找操作,x 得到了k 个最接近t 的节点信息。 * 查找步骤 ALPHA=1时查询流程 * 查找文件 当用户使用Kademlia网络来进行搜索并且下载文件的时候,首先是对一个关键词进行搜索,由于使用的是同样的hash算法,这样它只要找到ID值和计算出来的hash值结果相近的联系人信息后,它就可以直接向它们发送搜索特定关键词的请求了。如果得到了返回信息,那么搜索者就知道了这个关键词对应了多少文件,然后把这些文件的信息都列出来。当用户决定下载某个文件的时候,针对这一特定文件的搜索过程就开始了,这一次如果搜索成功,那么返回的就是这个文件的文件源信息。这样emule接下来就只需要按照这些信息去连接相应的地址,并且使用传统的emule协议去和它们协商下载文件了。这里对应的消息是KADEMLIA_SEARCH_REQ和KADEMLIA_SEARCH_RES。 * 当节点x 要查询key,value对时,和查找节点的操作类似,x选择k个ID值最接近key值的节点,执行FIND_VALUE 操作,并对每一个返回的新节点重复执行FIND_VALUE 操作,直到某个节点返回value 值。 一旦FIND_VALUE 操作成功执行,则key,value对数据会缓存在没有返回value 值的最接近的节点上。这样下一次查询相同的key 时就会更加快速的得到结果。通过这样的方式,热门key,value对数据的缓存范围就逐步扩大,使系统具有极佳的响应速度 * * 二叉树中节点的查找 Kad 协议确保每个节点知道其各子树的至少一个节点,只要这些子树非空。在这个前提下,每个节点都可以通过ID值来找到任何一个节点。这个路由的过程是通过所谓的XOR(异或)距离得到的。 节点通过在逐步底层的子树间不断学习并查询最佳节点,获得了越来越接近的节点,最终收敛到目标节点上。 * * 需要说明的是,只有第一步查询的节点101,是节点0011 已经知道的,后面各步查询的节点,都是由上一步查询返回的更接近目标的节点,这是一个递归操作的过程。由于各节点路由信息的不确定性(节点动态加入和离开引起),图2 只是展示了多种可能搜索路径的一个具体实现。 怎么知道的呢?协议里规定的吗 * 路由信息的更新 节点有效性判断 更新k-bucket * 节点有效性判断 节点离开Kad 网络不需要发布任何信息,Kademlia 协议的目标之一就是能够弹性工作在任意节点随时失效的情况下。为此,Kad 要求每个节点必须周期性的发布全部自己存放的key , value对数据,并把这些数据缓存在自己的k 个最近邻居处,这样存放在失效节点的数据会很快被更新到其他新节点上。 通常节点会利用流经自己的节点查询操作来持续更新对应的K 桶信息。为了避免没有查询操作经过时而保存了错误信息,节点会对那些在过去一个小

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档