搜索 社区服务 统计排行 帮助
  • 1335阅读
  • 18回复

[转贴]Kademlia原理介绍

楼层直达
级别: 精灵王
注册时间:
2002-08-07
在线时间:
0小时
发帖:
2741
Kademlia原理介绍


============================================================

参考资料:

Kademlia: A Peer To Peer Information Systems Based On The
XOR Metric, Petar Maymounkov and David Mazieres, 2002.
-------------------------------------------------------------

内容提要:

本文力求通俗地解释Kademlia的原理, 使广大电骡用户对神秘的Kad
有一个感性的认识. 原文(见参考资料)涉及很多技术性内容, 这部分
内容晦涩难懂, 本文就不详细介绍了.
-------------------------------------------------------------

Kad概述

首先, 读者要清楚的是, Kademlia是用于信息查询的, 而不是一个文
件传输工具. 如何实现信息查询的功能呢? 首先, 信息的发布者根据
某个规则将指定的信息发布到指定的位置; 然后, 信息查询者根据这
个规则和自己所需要的信息, 找到那个指定的位置, 并在那里找到信
息. 电骡的Kad里, 信息就是文件的源的信息, 信息查询就是找某文件
的源. 下面结合电骡的实际情况来讲解这个过程.
-------------------------------------------------------------

结点的ID

在电骡的Kad网络里, 每个用户都有一个ID号, 这个ID是128位的, 它
是在你第一次使用Kad时随机生成的. 出现两个相同ID的概率实在太
小了, 这几乎不可能发生. 我们可以认为, 在Kad网络里, 没有两个用
户具有相同的ID号, 除非你故意那样做.

每个用户都是Kad网络里的一个结点, 因此用户的ID就是结点的ID.
-------------------------------------------------------------

XOR

XOR即二进制的"异或"操作, 它是这样定义的:
1 XOR 1 = 0, 1 XOR 0 = 1, 0 XOR 1 = 1, 0 XOR 0 = 0.
两个二进制数相异或, 就是将这两个数的对应位做异或. 举例来说,
10110 XOR 11100 = 01010

异或有一个重要的性质: 设 a, b, c 为任意三个数. 则:
(a XOR b) = (a XOR c) 当且仅当 b = c
-------------------------------------------------------------

结点间距离

Kad网络上任意一个用户可用其结点ID来表示. 设 a, b 是两个结点,
则 a 与 b 之间的距离定义为 D(a,b) = a XOR b. 由上面介绍的异或
的性质可知: 给定一个结点 a 和距离 L, 有且仅有一个结点 b, 使得
D(a,b) = L
. 这个性质太优秀了, 它提供了在Kad网络上进行度量的可
靠方法. 因为, 假设你是Kad上的一个用户, 那么Kad上所有其他用户
都可按照与你间距离的远近而排成一条长队. 如果已知另一个结点的
ID, 那么你很容易判断出他在这条长队中的位置; 如果给定一个距离,
那么你很容易从这条长队里找出与你的距离最接近给定距离的结点.

-------------------------------------------------------------

结点查找

因为有了可度量的距离, 查找某个结点就比较容易了. Kad上用户很多,
而且加入和退出Kad是频繁发生的, 因此一个结点不可能记录下所有结
点的信息. 每个结点都维护着一个联系人列表, 这张表的结构大概为:
+--------+-----------+---------+
|联系人ID| IP地址 | 端口 |
+--------------------+---------+
| a| a的IP地址 | a的端口 |
+--------+-----------+---------+
| b| b的IP地址 | b的端口 |
+--------+-----------+---------+
| ... |...| ... |
+--------+-----------+---------+
| n| n的IP地址 | n的端口 |
+--------+-----------+---------+

联系人的选择不是完全随机的, 而是有倾向性的, 离自己越近的结点
越容易被选到联系人列表里. 也就是说, 每个结点都对自己附近的情
况非常了解, 而随着距离的增大, 了解的程度就降低了. 这很像交朋
友, 离自己越近的人群里, 朋友就越多. 联系人列表是不断更改的,
不在线的联系人将被删除, 被新找到的联系人所代替.

要查找某个结点a时, 如果a不在我的联系人列表里, 我就从联系人列
表里找到与a距离最近的结点b, 然后向b查询a. 如果b认识a, 就把a的
IP地址和端口告诉我; 如果b也不认识a, b就从自己的联系人列表里找
到与a距离更近的c, 然后我向c查询a. 这个递归过程不断重复, 直到
找到a为止.


结点查找是进行信息存储和查询的基础.
-------------------------------------------------------------

信息的存储

现在, 来解决信息的存储问题, 即信息发布者根据某个规则将自己要
发布的信息存储于Kad上的某个位置. 如果每条信息也有一个128位的
ID, 那么只要将信息存储于对应的结点上, 这个问题就完美地解决了!
在电骡里, 这简直太方便了, 因为每个文件都有一个128位的Hash值!
电骡的Kad里, 每条文件发布信息有三个最重要参数:
文件的Hash值, 发布者IP地址, 发布者端口.
发布者将该条信息存储于 结点ID 恰等于 文件Hash值 的那个结点上.
所有发布相同文件的人, 都将自己的IP地址和端口存储在这个结点上
了. 反过来, 对于任意一个结点a, 他存储了 Hash值为a的文件 的全
体发布者的IP地址和端口.

-------------------------------------------------------------

信息的查询

如果前面的内容你都理解了, 那么这部分就很容易: 比如你要查找某
文件的源, 首先你要知道该文件的Hash值, 然后去结点ID等于此Hash
值的那个结点, 让他告诉你发布者(源)的IP地址和端口就行了.
-------------------------------------------------------------

一个小问题

通常, 并不能保证对应于某个 文件Hash值 的结点一定在Kad网络里.
也许此结点未上线, 也许此结点ID尚未分配. 这时候如何存储信息呢?
实际上在存储信息时, 并不只存储在那唯一的结点上, 而是存储在与
目标结点距离比较近的一群结点上. 越接近目标结点, 该信息的保存
时间就越久.
-------------------------------------------------------------

加入Kad网络

我如何进入Kad网络呢? 我必须事先知道某个已经位于Kad上的用户的
IP地址和端口, 然后通过该用户将自己介绍到Kad网络中. 进入Kad后,
通过一系列的结点查找, 来建立我的联系人列表.
-------------------------------------------------------------

错漏难免, 望广大驴友批评指正!
-------------------------------------------------------------


Shane.G
2004年11月02日

============================================================

原帖地址:http://bbs.edonkey2000.cn:18880/forum/viewthread.php?tid=58238

ed2k://|friend|[CHN]zhouwei_e@[中国驴][eDtoon][chners]||冬神之子|5B3FE40DEB0E62610825E4351D546F1A|/

欢迎加我为好友,呵呵~

If you want to make a friend with me,i will be your best friend!Your best friend----me!
级别: 风云使者
注册时间:
2002-09-11
在线时间:
0小时
发帖:
4791
只看该作者 1楼 发表于: 2004-11-12
那个显示EMU信息的签名图怎么弄得...
一直不会...

人間五十年 下天のうちをくらぶれば 夢幻の如くなり 一度生を得て 滅せぬ者のあるべきか
服务器 ftp://txxz.share.comic.cn 用户名:txxz 密码:share 1线50K可LIST以上服务器提供TX作品下载 有需要而上面没的请PM我 感谢漫网提供服务器
本社聊天催片OX群:10042749 欢迎插入 重口味满载!
级别: 精灵王
注册时间:
2002-08-07
在线时间:
0小时
发帖:
2741
只看该作者 2楼 发表于: 2004-11-12
哦,牛过的人写过教程的~

等我找一下,贴出来~

ed2k://|friend|[CHN]zhouwei_e@[中国驴][eDtoon][chners]||冬神之子|5B3FE40DEB0E62610825E4351D546F1A|/

欢迎加我为好友,呵呵~

If you want to make a friend with me,i will be your best friend!Your best friend----me!
级别: 精灵王
注册时间:
2002-08-07
在线时间:
0小时
发帖:
2741
只看该作者 3楼 发表于: 2004-11-12
常用代码

%time% 时间
%date% 日期
%gmt% 'GMT'时区
%emule% 显示eMule是否在线
%prog% 显示'Online Signature'
%version% - 显示'Online Signature' 的版本
%client% - 显示eMule 的版本

以下,是有跟eMule做连接之后才有的变量代码,或者是服务器有连接才会显示。

%server% 服务器名称
%port% 服务器的端口号
%ip% 服务器的IP
%dlrate% 平均下载率
%ulrate% 平均上传率
%wupload% 等待下载你的文件的人数


累计在线时间代码:

%eMuleOnShort%
%eMuleOnE%


更多详细内容请访问中国驴http://www.edonkey2000.cn/



[工具&教程][转贴]关于EM在线签名的简单介绍
http://bbs.edonkey2000.cn:18880/forum/viewthread.php?tid=2522

ed2k://|friend|[CHN]zhouwei_e@[中国驴][eDtoon][chners]||冬神之子|5B3FE40DEB0E62610825E4351D546F1A|/

欢迎加我为好友,呵呵~

If you want to make a friend with me,i will be your best friend!Your best friend----me!
级别: 精灵王
注册时间:
2002-08-07
在线时间:
0小时
发帖:
2741
只看该作者 4楼 发表于: 2004-11-12
上面那个链接要刷新一下才能进,防DDOS

ed2k://|friend|[CHN]zhouwei_e@[中国驴][eDtoon][chners]||冬神之子|5B3FE40DEB0E62610825E4351D546F1A|/

欢迎加我为好友,呵呵~

If you want to make a friend with me,i will be your best friend!Your best friend----me!
级别: 新手上路
注册时间:
2003-11-07
在线时间:
0小时
发帖:
1626
只看该作者 5楼 发表于: 2004-11-12
不了了...太複雜了...

只要能用就好, 呵呵, 其它的不是偶這個小人物能理的@@;

╭⊙-⊙╮ Tim
级别: 精灵王
注册时间:
2002-08-07
在线时间:
0小时
发帖:
2741
只看该作者 6楼 发表于: 2004-11-12
打PP100下,什么叫做小人物~

ed2k://|friend|[CHN]zhouwei_e@[中国驴][eDtoon][chners]||冬神之子|5B3FE40DEB0E62610825E4351D546F1A|/

欢迎加我为好友,呵呵~

If you want to make a friend with me,i will be your best friend!Your best friend----me!
级别: 风云使者
注册时间:
2004-05-07
在线时间:
0小时
发帖:
5974
只看该作者 7楼 发表于: 2004-11-12
引用
最初由 zhouwei_e 发布
常用代码

%time% 时间
%date% 日期
%gmt% 'GMT'时区
%emule% 显示eMule是否在线
%prog% 显示'Online Signature'
%version% - 显示'Online Signature' 的版本
%client% - 显示eMule 的版本

以下,是有跟eMule做连接之后才有的变量代码,或者是服务器有连接才会显示。

%server% 服务器名称
%port% 服务器的端口号
%ip% 服务器的IP
%dlrate% 平均下载率
%ulrate% 平均上传率
%wupload% 等待下载你的文件的人数


累计在线时间代码:

%eMuleOnShort%
%eMuleOnE%


更多详细内容请访问中国驴http://www.edonkey2000.cn/



[工具&教程][转贴]关于EM在线签名的简单介绍
http://bbs.edonkey2000.cn:18880/forum/viewthread.php?tid=2522

不过你的状态怎么会显示“也许在线”的?

EM昵称:★eDtoon☆ComicDeathman[CHN]naLmhCtaYeD

You were chosen fatally...
to "Avater",the first quadrant.

穿什么都合身的東葉月様^^

级别: 精灵王
注册时间:
2002-08-07
在线时间:
0小时
发帖:
2741
只看该作者 8楼 发表于: 2004-11-12
Comments
为什么说也许在线呢,因为我也不知道我是不是在线........
已将EM设为系统进程,所以onlinesig无法侦测到我的EM的在线时间~~

ed2k://|friend|[CHN]zhouwei_e@[中国驴][eDtoon][chners]||冬神之子|5B3FE40DEB0E62610825E4351D546F1A|/

欢迎加我为好友,呵呵~

If you want to make a friend with me,i will be your best friend!Your best friend----me!
级别: 风云使者
注册时间:
2004-05-07
在线时间:
0小时
发帖:
5974
只看该作者 9楼 发表于: 2004-11-12
引用
最初由 zhouwei_e 发布
Comments
为什么说也许在线呢,因为我也不知道我是不是在线........
已将EM设为系统进程,所以onlinesig无法侦测到我的EM的在线时间~~

o…………这样的啊…………也是,你的是整天开着机子的,要设置为系统进程才不怕EM突然出错之类的……

EM昵称:★eDtoon☆ComicDeathman[CHN]naLmhCtaYeD

You were chosen fatally...
to "Avater",the first quadrant.

穿什么都合身的東葉月様^^

级别: 精灵王
注册时间:
2002-08-07
在线时间:
0小时
发帖:
2741
只看该作者 10楼 发表于: 2004-11-13
.....
真的没什么人看呢.....

ed2k://|friend|[CHN]zhouwei_e@[中国驴][eDtoon][chners]||冬神之子|5B3FE40DEB0E62610825E4351D546F1A|/

欢迎加我为好友,呵呵~

If you want to make a friend with me,i will be your best friend!Your best friend----me!
级别: 侠客
注册时间:
2004-01-23
在线时间:
0小时
发帖:
769
只看该作者 11楼 发表于: 2004-11-13
来晚了^^;
该加精华的帖子!

ThinkPad T40 72U
http://www.worldcybergames.com/tournament/images_game/ic_game_121.gif[/img]
级别: 精灵王
注册时间:
2003-04-24
在线时间:
1小时
发帖:
3269
只看该作者 12楼 发表于: 2004-11-13
这个支持下

雁渡寒潭 雁去潭不留影 惊鸿一瞥
潮来潮去 洗去多少足迹 一切都是缘
gdz
级别: 骑士
注册时间:
2002-07-26
在线时间:
0小时
发帖:
1309
只看该作者 13楼 发表于: 2004-11-13
我这里kad最近总是说我有防火墙-0-

级别: 新手上路
注册时间:
2003-06-10
在线时间:
2小时
发帖:
154
只看该作者 14楼 发表于: 2004-11-13
Do you know where I can find the original English text, for some reason I am getting very confuse reading this........
快速回复

限150 字节
上一个 下一个