9个不稳定版本
使用旧的Rust 2015
0.6.0 | 2017年7月15日 |
---|---|
0.5.1 | 2016年5月28日 |
0.4.0 | 2016年4月1日 |
0.2.3 | 2016年1月11日 |
0.1.0 | 2015年12月18日 |
#4 in #mainline
每月31次下载
460KB
9K SLoC
bittorrent主线DHT (bip_dht)
bittorrent主线dht的实现。
术语
查找:指在DHT中迭代查询对等节点,以查看它们是否有其他对等节点的联系信息,这些节点已宣布自己具有给定的info hash。
宣布:指在DHT中对对等节点进行查询,并告诉最接近的几个节点,你正在寻找特定info hash的对等节点,并且该节点应存储你的联系信息供稍后到达的节点使用。
重要使用信息
-
启动前:如果你知道你将在应用程序的后续部分需要它,那么提前启动DHT总是一个好主意。这是因为DHT在引导完成之前将无法立即为我们使用,你可以自由地发出请求,但它们将在引导完成后执行(可能需要长达30秒)。
-
宣布过期:DHT中的节点将过期宣布中过时的联系信息(有一段时间没有再次收到)。这意味着如果你仍在寻找对等节点,你将希望定期宣布。所有节点都有不同的过期时间,规范中提到了24小时的过期周期,然而,你可能需要更频繁地宣布,因为对等节点不断地离开和加入DHT,所以如果你宣布的节点都离开了DHT,你将无法成功。幸运的是,对于每个宣布,我们都会将你的联系信息复制到多个最接近的节点。
-
只读节点:默认情况下,创建的所有节点都是只读的;这意味着节点不会响应对请求。从理论上讲这听起来很好,但在实践中这意味着维护一个健康的路由表将更加困难(但仍然可能),特别是对于希望长时间运行的节点。我强烈建议长时间运行节点的用户设置某种类型的NAT穿越/端口转发到DHT的源地址,并将只读设置为false(默认为true)。
-
源端口与连接端口:需要注意的一点是,由于实现错误或故意为之,如果DHT绑定的端口与我们希望节点连接到我们的端口(我们的公告/连接端口)不同,一些节点会错误地存储我们发送公告消息时使用的源端口,而不是消息中指定的端口。这不是什么大问题,因为大多数节点都能正确处理这种情况(我只见过少数几个搞砸了)。如果您在错误的端口(DHT源端口)上接收TCP连接请求,这很可能是原因。
-
DHT垃圾邮件:DHT中的许多节点会禁止他们认为恶意的节点。这包括向同一节点发送大量请求,很可能是为了相同的info hash。作为用户,您无法控制我们在查找/公告时联系哪些节点。随着时间的推移,我们将更好地确保我们的客户端不会被禁止,但为了您的部分工作,请不要在短时间内为同一info hash发送过多的查找/公告。被禁止的症状包括在搜索info hash时收到的联系越来越少。如果您觉得您已被禁止,您始终可以重新启动DHT,因为所有节点(应该)将(节点ID,源地址)视为节点的唯一标识符,并且在启动时我们总是获得一个新的节点ID。
-
马虎的DHT:kademlia DHT也被称为马虎的DHT。这意味着您将能够找到大多数(如果不是所有)为特定info hash宣布的节点。为了使您的应用程序更加健壮(这就是BT客户端所做的),您应该开发一种机制,从其他对等方接收其他对等方的联系信息。这意味着,如果您有两个分割的对等方群体,只需要一个群体中的一人知道另一个群体中的一人,就可以使两个群体连接起来,这样每个人都知道其他人。
依赖关系
~12MB
~216K SLoC