问题标签 [dht]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - libtorrent dht 对等请求?
我一直在玩 libtorrent/rasterbar 的 python 绑定。我想做的是生成一个新的“node-id”并将其重新发布给其他节点。
我读到需要创建一个“编码字典”,我假设使用 force_dht_rennounce 之类的东西宣布,这是正确的吗?
c# - 分布式系统拓扑
试图将电子投票系统作为一个大学项目来实现,并且正朝着我的目标迈出最重要的一步<系统架构>
多服务器/多客户端,必须真正可靠到大约 8000 万客户端在线,它还必须允许新服务器加入以支持投票过程,它的输出将是统计数据和报告,因此它必须允许我收集随时获取信息,支持加密,散列,摘要确认,..等
我的目标只是在没有中心故障点的情况下支持大量客户端,然后让客户端找到合适的服务器进行身份验证和投票
合适的服务器取决于 2 个标准:
- 服务器距离优先
- 服务器负载优先级
最初仅使用的第一个标准,在投票过程中都使用了两者
在围绕我的项目搜索示例后,找到了 6 个解决方案:
- 服务器和客户端之间的动态 DNS 服务器
- 客户端和服务器之间的 Web 场负载平衡调度程序
- 无服务器 p2p 服务器云,客户端作为 p2p 服务器加入,使用 PNRP 获取服务器列表
- Serverless/State-Server p2p 服务器云,客户端连接到状态服务器以获取服务器列表
- 从主服务器向下的服务器树
- DHT网络和数据库系统
从我的角度来看,最后一个解决方案是合适的,因为没有任何瓶颈故障点,这导致我开始搜索一个开箱即用的 DHT 库或完整的分布式系统以集成到我的应用程序中,或者只是重新发明轮子并实施整个事情从头开始!
问题:
- 我选择了正确的解决方案吗?
如果是,请指点我正确的路线,通往开箱即用的 [.NET] 库或系统!
如果否,请指出合适的 [.NET] 解决方案,即使我在 6 个解决方案中没有提到它!
问候 ,
bittorrent - 洪流 DHT udp
我试图访问 Torrent DHT 网络,但我很难弄清楚如何访问 DHT 中的“入口”节点。
描述了几个标准入口节点可以用于在端口 6881 (UDP) 上运行的 router.bittorrent.com 和 router.utorrent.com。和http://www.bittorrent.org/beps/bep_0005.html描述了如何与 DHT 服务器交互的协议。
但是,如果我向 router.utorrent.com:6881 发送一个简单的 UDP 消息,我怎么知道哪些端口消息将被发回给我以响应我的请求?我尝试在发送到 6881 的同一端口上侦听消息,但我什么也没收到。
这些入口点是仅限于他们自己的客户端(uTorrent)还是任何第三方客户端都可以使用他们的“路由器”?
networking - Bittorrent MDHT 响应
Bittorrent Mainline DHT (MDHT) 响应中的'v'
键值对应什么?
这是一个示例 buncoded 响应:
我在任何地方都找不到这个密钥。
以下是我目前关于该协议的资料:
lookup - BitTorrent Mainline DHT 路由表在对等查找请求中的作用是什么?
据我了解,第一个查找请求被发送到路由表中最接近种子信息哈希的节点
在对等查找过程中,我可以接收到许多节点。当我执行下一个对等查找时,我可以从其中一个开始对等查找,还是必须从路由表中的对等开始?
udp - 主线 DHT 节点为 get_peers 查询发送的 udp 数据包的最大大小是多少?
主线 DHT 节点为 get_peers 查询发送的 udp 数据包的最大大小是多少?节点存储 3000 个对等点时如何响应?(在这种情况下,数据包非常大)。主线 DHT 客户端如何处理它的响应?
先感谢您。
implementation - 主线 DHT 引导过程
有人可以澄清一下主线 DHT 规范中的声明吗?
在将第一个节点插入其路由表以及此后启动时,该节点应尝试在 DHT 中找到离自身最近的节点。它通过向越来越近的节点发出 find_node 消息来做到这一点,直到找不到更近的节点。
“直到找不到更近的地方”是什么意思?
当我的程序开始发送 find_node 消息时,它有一组空节点。每个对 find_node 消息的响应都会返回大约 8 个 dht 节点。我的程序将它们收集在列表中。
我的程序何时必须停止发送查找节点消息?
我认为它必须在接收到所有元素都在已收集节点列表中的 dht 节点集时停止发送?
我对吗?
先感谢您。
dht - DHT 是如何工作的?
我从 wiki 中获得了关于 DHT 的基本概念:
存储数据:
在 DHT 网络中,每个节点负责特定范围的key-space
. 要将文件存储在 DHT 中,首先,hash the file's name to get the file's key
; 其次,send a message put(key, file-content) to any node of the DHT
消息将被转发到负责的节点,key
该节点将存储该对(key, file-content)
。
获取数据:
从 DHT 获取文件时,首先对文件名进行哈希处理以获取key
; 第二次向任何节点发送消息get(key)
,中继消息直到......
问题:
- 要存储文件,我们可以散列文件的名称以获取它
key
,但 wiki 说:
在现实世界中,密钥 k 可以是文件内容的散列而不是文件名的散列,以提供内容可寻址的存储,因此文件的重命名不会阻止用户找到它。
哈希文件的内容?我应该如何知道文件的内容?如果我已经知道文件的内容,那我为什么要在 DHT 中搜索它?
根据 wiki,每个参与节点都会腾出一些空间来存储文件。那么这是否意味着,如果我参与 DHT,我必须存储我负责的
spare 10G disk space
那些文件?key falls into the specific key-space
如果我确实应该腾出一些磁盘空间来存储这些文件,那么我应该如何将它们存储
(key, file-content)
在磁盘上?我的意思是,文件应该被安排到B-tree
我的磁盘上吗?当查询发生时,我的计算机如何响应?我假设首先检查
queried key
,如果在我的key-space
,然后corresponding file
在我的磁盘上找到 。正确的?
python - DHT:BitTorrent vs kademlia vs 克隆(python)
我正在为内部集群实施我自己的 dht。由于它将用于像bittorrent这样的文件共享程序,“Mainline DHT”是我看的第一件事。之后我发现了“纠缠”(python,使用扭曲矩阵的 dht),国会(python,使用 pyev + libev 的 dht),当然还有原始的“kademlia”。
他们在组织 k-buckets 上有不同的方法:
1) 国会,kademlia 使用固定的 160 个桶,范围为 2* i <= (每个 id 与我们的差异) < 2 *(i+1),对于 0 <= i < 160。
2)主线DHT和纠缠使用动态桶。开始时,他们只有 1 个桶覆盖整个空间。在它被 8 个存活节点填充后,桶将被拆分为 2 个新节点。但前提是我们自己的 id 在那个桶里。如果不是 - 存储桶将永远不会被拆分。因此,很快我们将拥有 160 个离我们最近的存储桶,而其他存储桶则很少。
两种变体都足够好。但是我发现逻辑上的巨大差异检测是否属于某个存储桶的某个 id。这是我的问题。
congress 和 kademlia 将桶边界视为“与我们的最小距离”和“与我们的最大距离”。因此,我们自己的 ID 将始终在 bucket0 中。bucket1 中最多 2 个其他 id(因为它覆盖 2* 1 <= x < 2 *2 距离)总是离我们最近。所以我的大脑没有坏掉,因为一切都好。
但是,如果您查看 Mainline DHT 或 entangled,您会看到哪些桶边界被视为绝对节点 id 边界,而不是异或距离!因此,理论上完整的表 ID 0、1、2、3、4、5、6、7 将在 1 个存储桶中。
所以。为什么有些实现将桶边界视为“与我们的最大/最小距离”,而另一些实现将桶边界视为“最大/最小 160 位整数值”?
networking - 是否可以创建没有任何静态 IP 的 DHT?
我想在应用程序中使用分布式哈希表,但我不想将中央服务器作为入口点。有没有办法实现这个?