关于DHT已连接节点数的破事水

经过我一段时间的观察,DHT已连接节点数有以下特点:
1.刚连接上DHT大概有2500到3000;
2.随挂机时长增加而增加,增加过程大致为线性,每24小时增加3000左右。
(以上观点在连续做种72小时内有效,未做过超过72小时的测试所以不保证观点依然城里成立)

我认为,受网络限制,能连接上的节点是有限的,且很快达到上限,但是线性增加的DHT已连接节点数违反了我的直觉,因此提出合理化猜测:
1.所有的节点的PPP租约、临时IPV6地址的租约都充分离散或重新获取的频次充分离散。每有一个节点重新获取IP信息,就以一个新的节点登入DHT。导致挂的时间越长,DHT已连接节点数越大,但是实际连上的大多都是第一天那些节点。
2.登入DHT的时候在无限长的名单里抽取一定数量的节点(比如就是3000),并对能够访问的用户计入统计;随着挂机时间而以一定数额抽取名单里新增的节点,并对能够访问的用户计入统计,但是刚好1天大概3000;对于IP信息变更而掉线的用户能够正常地在统计里剔除,此时,实际连上的节点和数量都是真实有效的。

受ISP、网络硬件限制,我无法设置比较大的每秒udp发包数。假如设置的过小,DHT通信未结束,下一次通信就又开始了,进而导致队列的无限延长。但是,假如DHT已连接节点数会无限增大,无论怎么设置,挂机的结局永远是队列无限延长到宕机。因此我想了解一下相关信息,希望有大佬能够解决我的疑惑。

你想的没有错,这就是DHT超级中心节点服务器,由以下提供商运营这些超级服务器
router.bittorrent.comrouter.utorrent.comdht.transmissionbt.comrouter.silotis.usdht.libtorrent.org

如果没有这些超级服务器,DHT去中心化依旧可以使用,因为只要两个peer建立连接成功后就会交换DHT信息来实现扩散出去,这两个peer可以通过tracker服务器,手动添加做种者用户ip等多种方式来获得。
同时比特彗星还支持制作种子的时候把已有DHT信息写入torrent文件,他人通过torrent文件打开下载时候,会自动在下载之前就添加DHT信息到客户端中。

高级选项启用专业模式,可以看到详细的DHT数据,包括连接时长,超时失效节点等情况均会列举显示。

至于为什么刚启动客户端有2500-3000 DHT节点,因为这些信息存储在本地文件中,dhtnodes.dat(40KB)和dhtnodes6.dat(50KB),utorrent则是存储在dht.dat(10KB),从文件大小就可以观察到,比特彗星可以获取到更多的DHT节点。当然有中心化的tracker服务器在,效果是最好的,就不需要去整DHT了,除非未来网络运营商屏蔽了全世界所有的tracker服务器。

DHT更像是,你要找小李,然后你去问邻居小王小李在哪里,小王说他也不知道,他帮你去问问小张,然后小张说他不知道,小张他去帮你问小陈,最后小陈知道了小李在哪里,然后告知你
DHT这就是去中心化设计
dht节点=一个小李、小王 每个节点都是你认识的人

tracker等于说,大家都是学生加入到同一个班级微信群里,老师要求填写表格把你正在下载的资源上交给他记录登记,其他人和老师联系就可以直接找到你,此时你和对方可成功连接,tracker的效率最高

[比特彗星维基]也有dht的详细介绍:using_dht_tracker [BitComet Wiki]

1個讚

所以定期更新trackers List也就不用开DHT了,对不?

可以这么说,在tracker能工作的情况下,DHT基本就失去了作用,并且tracker寻找peer list的可靠性更高。
DHT的设计是当所有tracker都故障了也可以正常进行上传下载的一种去中心化设计,此时不需要有任何服务器支撑。