- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的新周末项目中,我决定从头开始编写一个 bittorrent 客户端,根本没有准备好使用库。经过两天寻找文档,我已经准备放弃 :smile:。我知道有 BEPs , 但他们还远远不足以理解所有规范。在阅读了更多之后,我认为跟踪器和对等协议(protocol)似乎很旧并且易于理解/实现(是的,我知道,要编写具有平衡、对等选择、优化的好代码,这并不像我刚才说的那样容易,但我只想做一些基础知识来学习,而不是与那里的数十个好客户竞争。)
所以,我决定从 DHT 开始,它似乎是更复杂的部分,而且文档也更少。当您停止寻找 bittorrent DHT 或主线 DHT 并开始寻找 kademlia DHT 时,您将获得更多信息,但如何将它们放在一起并不那么明显。
这是我目前的理解(还有我希望填补的空白):
find_nodes
find_nodes
并将他们的响应添加到我的树info_hash
的 announce_peer
,我应该将其信息保存在本地数据库中(发送者的 info_hash 和 ip/端口)get_peers
和我在我的数据库中的 info_hash
然后我发送信息否则我应该发送我自己的树中更近的节点列表(最接近那个 info_hash)get_peers
时,我将收到对等节点或节点,在后一种情况下,我认为节点更接近 info_hash
而不是我自己的 nodeId
那么,我应该将这些节点添加到我的树中还是基于它们开始一棵新树?info_hash
感兴趣时,我应该在所有地方使用 announce_peer
还是只在靠近 nodeId
的节点上使用 announce_peer
目标 info_hash
?距离足够近多少?此时我有很多节点的 ID 更接近我自己的 ID,关于 info_hash 的信息我不是很感兴趣。
恐怕我有一个巨大的愚蠢问题:我为什么要那样做?
我的意思是:我做所有这些工作的自私原因是为了找到我感兴趣的 info_hash 的同行。我理解一个 info_hash 的信息很可能保存在 ID 更接近该 info_hash 的节点上.因此,如果我创建一个更接近 info_hash 而不是更接近我自己的 ID 的节点树,我找到它的信息的机会就更大(在这一点上,如果你知道这个主题,你已经注意到我是多么迷茫)。
我应该创建多棵树吗?一个给我(用来保存 info_hashes 的信息更接近人们发送给我的 nodeID),另一个树更接近我的每个目标 info_hashes 以便我可以检索它们的信息?
我是否应该创建一个更接近我的节点 ID 的树,并希望在查询这棵树以获取我需要的 info_hashes 时最好?
我是否应该放弃,因为我完全误解了 DHT 背后的想法?
好吧,任何真实的文档、流程图,任何东西都会受到欢迎!
最佳答案
So, I have decided to start by the DHT which seems to the the more complex part and also the less documented.
需要阅读由 Peter Maymounkov 和 David Mazieres 撰写的原始 kademlia 论文“Kademlia:基于 XOR 度量的点对点信息系统”。它在 BEP-5 中很早就被引用
if I receive an announce_peer with an info_hash than I should save its information on a local DB (the info_hash and ip/port of the sender)
您只接受包含先前通过 get_peers
分发的 token 的公告。
when I use get_peers on other nodes I will receive peers or nodes, in the later case I think the nodes are closer to the info_hash and not to my own nodeId so, should I add these nodes to my tree or start a new tree based on them?
您使用临时树 - 或按相对于目标 ID 的联系人 ID 排序的列表 - 进行迭代查找,因为它们与您的节点 ID 不平衡。
when I want to announce I am interested on an info_hash should I use announce_peer everywhere or just to the nodes with nodeId closer to the target info_hash? How much is closer enough?
您执行 get_peers
查找,完成后您向 𝑲 最接近的节点集宣布返回写入 token 并验证响应以确保您确实获得 𝑲。在 bittorrent 𝑲 = 8 的情况下。
my selfish reason to do all this work is to locate peers to the info_hash I'm interested in. I understand that the information of one info_hash is likely to be saved on a node which ID is closer to that info_hash. So my chances to find its information is bigger if I create a tree of nodes closer to the info_hash and not closer to my own ID (at this point, if you know the subject, you already noticed how lost I am).
在进行查找时,您不仅会访问路由表中的节点,还会访问响应中包含的节点。这使它们具有迭代性。每个节点的路由表都偏向于它们自己的 ID,确保响应包括越来越接近目标的邻居。
所以交易是您负责接近您的节点 ID 的信息,而其他节点将提供接近您感兴趣的节点 ID 的信息。因此您的路由表布局为他人服务,他们的路由表布局为您服务。
请注意,此答案中包含的所有信息都可以在 BEP 或 Kademlia 论文中找到。
关于bittorrent DHT 详细规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44104242/
请像我在您的 vps 中所做的那样,然后可能会重现该问题,请替换变量 $vps_ip在以下步骤中使用您的真实 vps ip。 wget https://saimei.ftp.acc.umu.se/d
好的,假设我有一个运行有 10 个客户端的 DHT,其中包含一堆数据。 恶意客户端运行我的程序的替代版本不是相对容易吗,这可能会对我的数据进行潜在的破坏性操作(例如替换 key 、删除 key 、更改
是否允许在 Mainline DHT 中的同一 ip:port 对后面运行多个不同的 DHT 节点? 哪个节点应该回复 DHT 查询消息? 全部还是其中之一? 先感谢您。 最佳答案 简短的回答是:其中
假设我只实现了 DHT(分布式哈希表)(在 Python 中),并且我想通过 P2P 网络构建身份验证服务,但没有引入具有此类服务的集中式身份验证服务器。可以做到吗,如果可以,我该如何实现? 我熟悉
在我的新周末项目中,我决定从头开始编写一个 bittorrent 客户端,根本没有准备好使用库。经过两天寻找文档,我已经准备放弃 :smile:。我知道有 BEPs , 但他们还远远不足以理解所有规范
我正在编写一个 P2P 实现,我希望将其去中心化。然而,我在掌握如何DHT时遇到了一些困难。在像 BitTorrent 这样的协议(protocol)中是有效的。 如果没有跟踪器,客户端如何知道对等点
我想(通过 PHP)收集当前正在下载的 info_hashes 或搜索 DHT。 我见过 BTDigg 将 DHT 用于搜索引擎,我想做类似的事情。 此外,在获得哈希后,如何将哈希转换为种子文件以便获
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试了解 Distributed Hash Table (DHT)范式,因为它适合 P2P 或完全分布式的计算架构。从理论的角度来看,一旦集群建立起来,它如何管理集群数据和分配工作就很有意义了。
我目前正在使用免费糕点 DHT 进行一些性能测试。 Freepastry 是一个用 Java 完成的开源 DHT。 目标是在一定数量的节点宕机时监控对 DHT 的影响。我的问题是我不确定消除节点的最佳
kademlia paper抽象地讨论桶的组织、拆分、合并和找到要插入的正确桶,concise和 confusing条款。 §2.2 讨论了一组固定的 160 个桶,每个桶覆盖键空间的一个固定子集。但
谁能解释一下 DHT 的工作原理吗? 没有什么太重的,只是基础知识。 最佳答案 好吧,它们本质上是一个非常简单的想法。 DHT 为您提供了类似字典的界面,但节点分布在整个网络中。 DHT 的技巧在于,
我正在尝试访问 Torrent DHT 网络,但我很难弄清楚如何访问 DHT 中的“入口”节点。 How does a DHT in a Bittorent client get "bootstrap
如果您创建使用分布式哈希表 (DHT) 的新应用程序,则需要引导 p2p 网络。我的想法是您可以加入现有的 DHT(例如 Bittorrent DHT)。 这可行吗?当然,我们假设技术相同。将 Cho
我从 wiki 中获得了关于 DHT 的基本概念: 存储数据: 在 DHT 网络中,每个节点负责 key-space 的特定范围。 .要将文件存储在 DHT 中,首先,hash the file's
我试图了解 DHT可用于解决我正在处理的问题: 我有一个交易环境,专业期权交易者可以通过要求其他交易者借给他们一些风险限额来提高他们的风险限额。借贷交易者可以搜索具有某些风险参数的交易者,这些参数是每
我一直在研究 libtorrent/rasterbar 的 python 绑定(bind)。我想做的是生成一个新的“node-id”并将其重新通知给其他节点。 我读到需要创建一个“编码词典”,并且我假
我最近正在学习 Bit-torrent 协议(protocol),并且我已经使我的脚本成功通过 DHT 协议(protocol)获取大量对等地址,具体取决于文档 bep_0005: http://ww
我正在阅读有关 DHT 的资料,但很难找到有关节点发生故障时 DHT 值的后果的信息。 据我所知,如果没有数据冗余(哈希表值),单个节点的故障只会使存储在该节点中的值不可用。但是,如果我想使用 DHT
我正在尝试让 monotorrent 的 dht 实现工作,但我似乎找不到任何同行。 我已经尝试了网络上可用的大部分示例代码,例如 testclient 和 dhttest。 我尝试了几种不同的信息哈
我是一名优秀的程序员,十分优秀!