jjzjj

kademlia

全部标签

go - 两个节点可以直接交换消息吗?

我正在研究基于Kademlia的去中心化网络。在启动一个新节点后,不是向最近的节点广播消息,而是可以将消息发送到由其ID标识的特定节点吗?(即使这意味着在到达目的地之前将消息中继到多个对等方)。 最佳答案 Kademlia是一种抽象路由算法,结合了构建分布式哈希表所需的一组操作。kademlia-as-algorithm中不存在广播的概念。但是具体的实现可以在此基础之上添加功能。由于kademlia提供迭代find_node过程(没有转发!),您可以找到一个节点,然后交换任何数量和类型的额外消息,它们相互支持。

Kademlia最近的好节点在两个请求之间不够相交

在BEP44实施方面,我使用定义的Kademlia算法来查找给定的HashID的最接近的良好节点。使用我的程序我做gorunmain.go-put"HelloWorld!"-knamemykey-saltfoobar2-bpublic并获取一个超过一百个节点的值(好)。现在,当我连续多次运行它时,由PUT请求差的IP集合相交。这是一个问题,就像我尝试执行GET请求时一样,IPS查询的集合不会与PUT集相交,因此找不到该值。在我的测试中,我使用公共DHTBootstrap节点"router.utorrent.com:6881","router.bittorrent.com:6881","dht.

python - 为什么 raw_input 提示不正确?

我正在尝试使用此处提供的kademlia库:https://github.com/bmuller/kademlia我的代码如下:fromtwisted.internetimportreactorfromtwisted.pythonimportlogfromkademlia.networkimportServerimportsyslog.startLogging(sys.stdout)defdone(result):reactor.stop()print"Keyresult:",resultdefget(result,server):key=raw_input("Key:")server

python - DHT:BitTorrent vs kademlia vs clones (python)

我正在为内部集群实现我自己的dht。由于它将用于像bittorrent这样的文件共享程序,“MainlineDHT”是我首先看到的。之后我发现了“纠缠”(python,使用扭曲矩阵的dht),congress(python,使用pyev+libev的dht),当然还有原始的“kademlia”。他们在组织k-buckets方面有不同的方法:1)congress,kademlia在2*i*(i+1)范围内使用固定的160个桶,对于02)主线DHT和entangled使用动态桶。一开始他们只有1个桶覆盖整个空间。当它充满8个存活节点后,bucket将被拆分为2个新节点。但前提是我们自己的i

python - 最容易实现的DHT

哪种分布式哈希表(DHT)最容易在Python中实现?有什么不臃肿的好例子吗?我不是在寻找DHT的定义,因为我更倾向于并专注于此类的设计和实现。 最佳答案 在我的工作中,我正在使用entagled.我不能说它是很棒的代码,但它似乎是唯一的KademliaPython的实现。我认为Kademlia已成为当今大多数应用程序的默认DHT,因为它非常简单并且查找速度很快。至少在我目前所见的学术界是这样。 关于python-最容易实现的DHT,我们在StackOverflow上找到一个类似的问题:

python - 最容易实现的DHT

哪种分布式哈希表(DHT)最容易在Python中实现?有什么不臃肿的好例子吗?我不是在寻找DHT的定义,因为我更倾向于并专注于此类的设计和实现。 最佳答案 在我的工作中,我正在使用entagled.我不能说它是很棒的代码,但它似乎是唯一的KademliaPython的实现。我认为Kademlia已成为当今大多数应用程序的默认DHT,因为它非常简单并且查找速度很快。至少在我目前所见的学术界是这样。 关于python-最容易实现的DHT,我们在StackOverflow上找到一个类似的问题:

go - Kadmelia K-Bucket 算法中的路由表,无需遍历节点 ID 中的每一位

上下文我正在尝试实现Kadmelia的K-Bucket算法来跟踪更近的节点。我在理论上理解算法是如何工作的添加新节点时如果桶大小没有超过k(桶大小)我们将它添加到当前桶否则我们拆分桶并通过遍历每个位来拆分父桶中的联系人并将它们拆分到两个桶中。这也意味着对于给定的节点,将有k*8个桶(或列表)问题问题引用本例中采用的方法http://blog.notdot.net/2009/11/Implementing-a-DHT-in-Go-part-1鉴于我们已经将节点定义为长度为20的字节数组constIdLength=20typeNodeID[IdLength]byte我试图了解PrefixL

go - Kadmelia K-Bucket 算法中的路由表,无需遍历节点 ID 中的每一位

上下文我正在尝试实现Kadmelia的K-Bucket算法来跟踪更近的节点。我在理论上理解算法是如何工作的添加新节点时如果桶大小没有超过k(桶大小)我们将它添加到当前桶否则我们拆分桶并通过遍历每个位来拆分父桶中的联系人并将它们拆分到两个桶中。这也意味着对于给定的节点,将有k*8个桶(或列表)问题问题引用本例中采用的方法http://blog.notdot.net/2009/11/Implementing-a-DHT-in-Go-part-1鉴于我们已经将节点定义为长度为20的字节数组constIdLength=20typeNodeID[IdLength]byte我试图了解PrefixL

go - 更好地理解 Kademlia 的 XOR Integer Metric

我试图更好地掌握Kademlia的XOR距离度量,因此我编写了一个小的虚拟程序来尝试更好地理解。我在这里也没有使用160位数字作为我的key,而是使用某个用户标识符的sha256哈希值。这是我的异或距离函数。这或多或少是正确的吗?我对每个字节进行异或运算——将其附加到缓冲区rawBytes并将该字节缓冲区转换为整数。funcXorDistance(nodestring,otherNodestring)uint64{varrawBytes[32]bytefori:=0;i 最佳答案 这是不正确的,因为binary.Uvarint()只