我目前正在研究Kademlia对等协议,并且很好奇是否有人知道有效广播信息/消息的技术或方法吗?
有一篇论文介绍了结构化P2P网络中的有效广播,它描述了Chord中的一种广播方式。他们的想法是将网络分为两个部分,并将广播消息发送到每个分区中的第一个节点。被联系的节点再次划分其“子网”并执行相同的操作。使用此技术,您可以通过网络在生成树上广播消息。但是,由于难以可靠地划分Kademlia网络,因此在将其应用于Kademlia时遇到了问题。
是否有人知道如何实现这一目标或存在其他替代方法?
我不想大量泛洪网络,因为这会对网络负载产生严重影响,并导致大量冗余流量。
我试图了解 Kademlia 如何寻找资源。现在有很好的描述来构建最接近自身节点的节点树,如何找到节点之间的距离,如何启动该过程等。我不明白的是文件 infohash 如何适合这张图片。所有描述都告诉我们如何进入游戏并构建自己的分布式哈希表部分,但事实并非如此。我们这样做是为了实际查找资源,即具有特定信息哈希的文件。它是如何存储在这个节点树中的还是有一个单独的?如何找到具有此 infohash 的节点,从而获得该文件。
简要提到了这样一个事实,即节点 id 和 infohash 具有相同的 20 字节长度代码,并且节点 id XOR infohash 是节点和资源之间的距离,但我无法想象这是如何以及它如何帮助找到资源?毕竟,实际拥有该资源的节点id可以与该资源具有最大的异或距离。
谢谢你,亚历克斯
我在此处阅读了有关 Kademlia 的论文。
我不明白如何选择数字 k (对于 k 桶)。
我不明白这句话:“k 的选择使得任何给定的 k 个节点都不太可能在一小时内彼此失败。”
我不明白节点怎么会失败?
据我所知,Kademlia路由表由160个桶组成.
根据节点的前缀长度(本地节点密钥和节点的XOR中的前导未设置位数),将节点放入0-159个桶中.
为什么会这样,是否有任何性能优势(除了通过迭代160*20节点找到最接近的是不可行的事实)?
如果您创建使用分布式哈希表(DHT)的新应用程序,则需要引导p2p网络.我有一个想法,你可以加入现有的DHT(例如Bittorrent DHT).
这可行吗?当然,我们采用相同的技术.将Chord与Kademlia结合使用显然是不可行的.
如果是的话,这会被认为是寄生的还是共生的?寄生意味着它与某种原始用途发生冲突.共生,如果它们对两种应用都有好处,因为它们相互支持.
在我的新周末项目中,我决定从头开始编写一个 BitTorrent 客户端,根本没有准备好使用库。经过两天寻找文档后,我已经准备放弃了:smile:。我知道有BEP,但它们远远不足以理解所有规范。在阅读了更多内容之后,我认为跟踪器和对等协议似乎很旧并且易于理解/实现(是的,我知道,要编写具有平衡、对等选择、优化的良好代码,这并不容易,正如我刚才所说的,但我只想做基础知识来学习,而不是与那里的数十个优秀客户竞争。)
因此,我决定从 DHT 开始,这似乎是更复杂的部分,而且文档也更少。当您停止寻找 bittorrent DHT 或主线 DHT 并开始寻找 kademlia DHT 时,您会获得更多信息,但如何将它们组合在一起并不那么明显。
以下是我到目前为止的理解(还有一些我希望填补的空白):
find_nodes
在我的引导节点上使用find_nodes
向选定的人发出并将他们的回复添加到我的树中announce_peer
带有 an 的info_hash
信息,我应该将其信息保存在本地数据库上(发送者的 info_hash 和 ip/端口)get_peers
与info_hash
我数据库中的节点一起使用,那么我发送信息,否则我应该发送我自己的树中更接近的节点列表(最接近该 info_hash)get_peers
在其他节点上使用时,我将收到对等点或节点,在后一种情况下,我认为这些节点更接近,info_hash
而不是我自己的nodeId
,所以,我应该将这些节点添加到我的树中还是基于它们启动一个新树?info_hash
我应该在任何地方使用还是只在更接近目标的announce_peer
节点上使用?距离多少才算足够近?nodeId
info_hash
此时我有很多ID与我自己的ID更接近的节点,而有关info_hash的信息我并不真正感兴趣。
我担心我有一个巨大的愚蠢问题:我为什么这么做?
我的意思是:我做所有这些工作的自私原因是找到我感兴趣的 info_hash 的对等点。我知道一个 info_hash 的信息可能保存在 ID 更接近该 info_hash 的节点上。因此,如果我创建一棵更接近 info_hash 而不是更接近我自己的 ID 的节点树,我找到其信息的机会就会更大(此时,如果您知道主题,您已经注意到我有多么迷失)。
我应该创建多棵树吗?一棵适合我(保存人们发送给我的更接近我的nodeID的info_hashes信息),另一棵更接近我的目标info_hashes的信息,以便我可以检索他们的信息?
我是否应该创建一棵更接近我的节点 ID 的树,并在查询该树以获得我需要的 …
我正在考虑实现一个 DHT,其中通过将后继地址添加到存储的值中来链接数据项,如果每个节点可以具有以下三种有序状态之一:空 -> 数据 -> 数据,并且所有对等点都会获得后继地址一致且正确的顺序?或者这里有可能出现永久分叉吗?
我已经研究 DHT,尤其是 kademlia 一段时间了。我正在尝试实现一个在 Kademlia DHT 上运行的 p2p 网络。我希望能够向整个网络传播消息。根据我的研究,使用了八卦协议,但是当我已经使用 dht 来存储对等点时,添加另一个全新的协议来传播消息似乎很奇怪。是否有像 Kademlia 这样的可以在 DHT 拓扑上工作或与 DHT 拓扑一起工作的八卦协议?
为什么Kademlia Distributed Hash Table使用UDP作为其网络传输协议,即使它不可靠?
节点:DHT 网络上的客户端。
Peers:尝试下载特定资源的客户端。
假设 DHT 网络是一个连通图,但没有节点可以访问所有其他节点(这种消费与 DHT 网络覆盖的互联网是完全连接的普遍看法相反)。
叠加在 DHT-network 上的 Peer-network 还是连通图吗?为什么?