参考链接:https://blog.ipfs.io/2020-07-20-dht-deep-dive/
- 担保对等节点处于处事器模式,而且广播DHT协议的ID切合尺度(好比对WAN DHT是/ipfs/kad/1.0.0,对LAN DHT是/ipfs/lan/kad/1.0.0)。
- 留意:每次刷新后,我们都要遍历整个路由表并向最近没有通信过的节点发出咨询请求以查抄它们是否仍然在线、可被毗连。一旦发明某节点掉线不再可被毗连,则把它从表中删除。
另外,为了担保路由表的精确,我们会每隔一段时间刷新它。对路由表刷新频率的计较基于一系列参数如“桶”的巨细等。
但假如用户不恰内地设置了他们的网络,则他们利用的非果真网络有大概混为一团。
1. 当我们毗连一个对等节点时,要查抄这个节点是否切合条件被插手到我们的路由表中。
路由表:
4. 假如我们向路由表中的节点发出咨询请求但得不到回应,则把该节点从表中拿走。
在这种环境下,我们设计了另一种DHT表,这种DHT表包罗了一些不在果真网络(好比VPN、CJDNS、Yggdrasil)中的节点。
我们可以增加刷新的频率,但它有个下限。对IPFS而言,其下限频率为每10分钟刷新一次。
早前我们分享过:Kademlia网络中的每个对等节点都维系着与网络中其它若干节点的毗连。它们的事情方法如下:
- 担保对点节点的IP地点是民众地点(好比民众DHT表中的每个成员至少有一个民众的IP地点而不是只有雷同192.168.X.Y这样的地点)。
3. 将该节点放入路由表
WAN DHT和LAN DHT在实现细节上的差异主要表示在DHT表对对等节点接管尺度的差异,即什么节点能被纳入路由表中,什么不能。WAN DHT的尺度是“节点看上去是在果真网络中”,而LAN DHT的尺度是“节点看上去不在果真网络中”。
- 假如该桶已经满了则我们要查抄这些节点中是否有可被替换出来的。假如有,就将可替换的节点拿出来,把新节点插手。假如没有,,就放弃这个桶。
WAN DHT表中的节点可以按照它们的事情状况从客户模式切换为处事器模式,但LAN DHT中的节点则永远只能是处事器模式(除非“dhtclient”选项被配置)。
当许多用户利用果真共享的DHT表去发明和广播内容时,它们中有一些是在被支解的网络中运作(好比在当地网络或孤独的VPN)的。
2. 假如一个节点满意条件可以被加进路由表,接下来就要抉择该节点在Kademlia地点空间中应该放在哪个“桶”(“bucket”)里(好比节点在2^7和2^8之间,其地点空间为2^256,则节点在路由表中就应该放在界说为256-8的桶里)。
IPFS的DHT表有两种:民众(Public)和当地(Local)。
我们将这种DHT表称为LAN DHT,而将果真网络的DHT表称为WAN DHT。这两种DHT表利用差异定名的DHT协议(好比 WAN DHT为/ipfs/kad/1.0.0,LAN DHT为/ipfs/lan/kad/1.0.0)以防备两种网络混在一起。
对这些用户而言,假如DHL表中的非果真节点只是客户模式就会很贫苦,因为这些节点无法被毗连,用户无法与它们通信。
- 假如路由表中节点应该被安排的“桶”没有满(即该“桶”中放入的节点少于20个)则将该节点放入此桶中。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。