我这好久没有学术性的文章出现了。。翻看了下日志,最早的是07年发表的做PCB电路板的日志,之后是08年PHP网页制作,之后是09年C# 的GPS定位软件(虽然自己都没怎么用过。。。)
今天就通俗介绍一下一个最常用,最简洁,最实用P2P的索引算法---Kademlia协议(简称 Kad)。 使用BT 的同学经常会发现DHT这个缩写,使用电驴的同学就会发现KAD缩写。 DHT的全称叫哈希表(Distributed Hash Table),KAD就是Kademlia的缩写。 Kademlia是DHT的一种,其实BT和电驴都是使用Kademlia 协议,只是电驴中加密方式不同。
好了,前面只是简单引入一下基本问题。 下面我将非常非常非常非常通俗俗俗俗的给大家介绍Kademlia协议的知识。目的只是在于让使用p2p软件的非专业同学对此协议有一个了解,主要针对对p2p好奇的同学。因为网上关于Kademlia的资源不是很多,而且都是给专业人准备的,很抽象笼统。 所以一般同学理解会有困难。 专业同学直接按(http://emule-fans.com/emule-kademlia-protocol-document/)连接参考Kademlia 协议原文。
在进入正题之前,先请看下面的一张图片。(我不是很懂的,感谢张junyuan同学提供精彩图片,这里只用来作为讲解工具,没有其他意思)熟悉的同学可能很容易看出这张图片是某国比较出名的影星集合照。 让我们的思绪回到纯真的高中或大学年代。。。。

首先,什么是P2P(peer to peer,点对点)? 简而言之,班上某个同学(假设班长)有上面某位明星影视作品一部。 你知道了,你找到该班长,复制一份。。。这就是P2P。
最早的P2P是使用索引服务器的。 什么是索引服务器? -- 班级很多同学有不同影视作品N部。但是你想找到某人的某部,这么多同学你怎么去找了拷贝呢? 这时候班上有个同学站起来了(还假设班长,班长嘛!),我来给大家登记信息。于是班长打开Excel,同学们过来,大家资源到我这登记一下,要找资源的同学可以直接来我这边来索引。这时候,班长所作的工作就是索引服务器。 由班长的好处是什么呢? 简单,方便,查询次数是O(1),也就是你唯一查询就可以找到目标。 但是坏处也是显而易见的,首先,班长很忙,其次,班长很脆弱,万一班长为班级出头被人家K了。。。不过最受不了的是,班主任发现班长的电脑里面文件,然后给delete了(04年电骡最大服务器Razorback2 由于侵权被关闭)。
所以需要一个更好的解决方案来处理。这时候就是Kademlia协议出现了(还有CAN,CHORD等),其实他不能算一个协议,就是一个查询方法吧。 班长不帮你查了,你总要自己找资源吧!

首先,班上每个同学有学号,这是入学的时候就给你唯一的ID。其次,对资源用key代替学号和key都是数值,在上面的途中就可以看出,个人的资源所代的key(eMule用160bits,号码多好记,又安全,你在班上问8号在哪不会有人管你,你要是问松岛枫在哪。。。嘿嘿,等着进办公室吧)。 我们假设班级有100个人。那每个人都有号码,我们就从1-100编号。这样的话学号和资源号是重复的。 Kademlia的思想就是把某一个资源的信息,给和资源key相同id的人保管。 举个例子,比如上面8号(石川XX), 有8号资源的人不知一个,比如班上1号,2号,10号等等。 但是8号石川(key)的号码,和班级8号同学(假设文艺委员)的号码是一样的,于是文艺委员就记下了所有有8号资源的人的信息(座位IP,资源在哪个盘port,学号ID)。 如果你想要找8号资源的时候就去找

8号同学文艺委员。 然后8号同学文艺委员就告诉资源在1号同学那,他坐在2组三排外面一个。直接去他座位上拷就行了。。。。。
不过问题又来了,你怎么知道8号文艺委员坐在哪呢?(现在为了防止不良竞争,学号都不公开的,你知道他名字但不晓得学号)。 怎么办? 好办,你自己不是也有张表嘛!假设你是60号, 你有资源60号(xx美子)的资源表。 你从你的表中找出靠8号最近的人的位置。比如你表中记录有 10号,坐在3组2排外面, 还有6号,坐在1组9排里面一个。你跑过去问他们:知道8号在哪不?!(这时候是2个人并行查询,也可以三个,或更多)他们就翻自己的档案,再返回他们最靠近8号的那个人给你。比如7号,9号,或7号,11号。 这里就有些难理解了。。。。那你就先认为他们返回8号坐的位置给你,你可以直接去拷了。 Ok,搞定,考到片子了。。。。
 
现在为什么找7号和10号的时候他们返回的是两个最相近的人的资料,而不是确切的资料。 因为你要考虑到万一有人没来呢(实际情况是ID没有分配给节点)。 比如8号今天生病没来,你又想拷。那不是找不到下文了?不用着急,其实8号的信息还在附近的人那备份了。 比如在7号那。当6号,和10号返回相同的7号的时候,就说明7号那边存有相关资料了。
 
下面一个问题就是如何自己记录信息(路由表)。 Kademlia 使用k 桶(buckets)。 在Kademlia里面使用 160bits ID,所以每个点维160个list。 比如k=2,就是你的一张list里面最多存两个数据。 数据范围是按指数增加。比如,你是25号,跟你距离是1(24,26,)记录在第一行, 2-4(22,23,27,28)的只记录两个,4-8(。。。。),可以看出,距离越近,其实记录的数据越多,这样一来,就可以方便其他人来找啦。这段还是有些抽象。。。更新列队的时候,如果新访问的那个人不在你k桶,那就塞到尾部。如果k桶满了,看看问问这个k桶的第一个人还在不在,如果不在的话就删掉,要是在的话,把第一个人移到最后,新来的不要。 这个意思是约是经常在线的人就越会经常在线。。。宅男也废电的。。。。
原理基本就讲完了。 Kademlia 有一个特别之处就是使用异或测算距离。
 
 
下面是我从我们学校偷出来的例子。。。嘿嘿。网上没有什么好的例子,更本就没有例子。。。把下面ID改为01110 ,打印错误

csdn http://hi.csdn.net/mpanxiao

通俗讲解 Kademlia 原理相关推荐

  1. 人工智能算法通俗讲解系列(二):逻辑回归

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...

  2. Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解

        Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解 在Hadoop分布式环境下实现K-Means聚类算法的伪代码如下: 输入:参数0--存储样本数据的文本文件inpu ...

  3. 冲突域、广播域的通俗讲解

    冲突域.广播域的通俗讲解 1.冲突域(物理分段)         连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合.这个域代表了冲突在其中发生并 ...

  4. 二维小波变换_小波变换完美通俗讲解系列之 (一)

    声明:该篇文章转自csdn,原始博主已经找不到了,在这里给出转载博主地址,如有侵权,请私信我删除. https://blog.csdn.net/liusandian/article/details/5 ...

  5. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

    1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...

  6. 蓝牙聊天App设计3:Android Studio制作蓝牙聊天通讯软件(完结,蓝牙连接聊天,结合生活情景进行蓝牙通信的通俗讲解,以及代码功能实现,内容详细,讲解通俗易懂)

    前言:蓝牙聊天App设计全部有三篇文章(一.UI界面设计,二.蓝牙搜索配对连接实现,三.蓝牙连接聊天),这篇文章是:三.蓝牙连接聊天. 课程1:Android Studio小白安装教程,以及第一个An ...

  7. 网络编程之通俗讲解,有了IP地址,为何还要用MAC地址?

    网络编程之通俗讲解,有了IP地址,为何还要用MAC地址? 前言 书上说的 基本概念: 什么是MAC地址? 什么是IP地址? 为什么要用到MAC地址? IP地址与MAC地址的区别是什么? MAC地址涉及 ...

  8. 漫画讲解HDFS原理

    HDFS简介 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式 ...

  9. 通俗讲解:图像傅里叶变换

    转自某乎:通俗讲解:图像傅里叶变换 - 知乎 这里我们主要要讲的是二维图像傅里叶变换,但是我们首先来看一张很厉害的一维傅里叶变换动图. 妈耶~厉害哇!它把时域和频域解释的很清楚! 什么!你看不懂! 简 ...

最新文章

  1. python 自定义模块_Python 自定义模块路径
  2. 「Smile」一下,轻松用Java玩转机器学习
  3. golang中的strings.HasPrefix
  4. c语言产生cl.exe错误,vc++6.0执行cl.exe时出错
  5. 6、mysqldump备份数据库(附带实例)
  6. html中dir标签的作用是什么意思,htmldir标签是干啥的?dir标签的具体定义和属性介绍...
  7. tomcat关闭后线程依然运行解决办法
  8. 微软职位内部推荐-Principal Group Program Manager
  9. 深入jvm虚拟机第三版源码_深入JVM虚拟机,阿里架构师直言,这份文档真的是JVM最深解读...
  10. 有没有一个永久储存数据的地方?
  11. 插件架构的原理及实现探讨
  12. SpringBoot 计划任务
  13. 【Java】从键盘中任意输入一个字符,判断该字符的类别
  14. 【机器学习技术】高斯过程初探
  15. java消费者生产者设计模式_java 多线程并发设计模式之四: 生产者消费者模式
  16. 数据结构与算法--递归(Recursion Algorithm)
  17. (36)Verilog HDL关系运算:大于、小于、等于
  18. 2021年中国超大容量耐磨喷油器市场趋势报告、技术动态创新及2027年市场预测
  19. Windows Security Center注册分析
  20. 1436:数列分段II

热门文章

  1. 2022年油猴(tampermonkey)超简单安装
  2. 复合型人才八种能力_刚毕业在设计院做结构设计,感觉自己对很多东西都没有判断的能力,工作之外如何提升自己在结构方面的知识?...
  3. 快速填充表格中的空单元格
  4. 《用于自动越野导航的实时语义映射》论文笔记
  5. python 图像语义分割mIOU代码详解
  6. 前缀和以及哈希表优化
  7. Windows及Linux 下tftp 服务器安装及使用
  8. 支付宝,微信付款码正则表
  9. 微信小程序全局配置分享指定标题、图片、路径
  10. php仿京东幸运大转盘抽奖,原生js vue 抽奖插件 仿京东大转盘抽京豆(原创)...