一个Bittorent客户端中的DHT是如何“引导”启动的?

91
如果我有一个没有任何跟踪器的torrent,并且我刚刚启动了bittorent客户端,所以我还没有任何peer,那么我如何知道在DHT中首先连接谁?看起来我至少需要知道DHT中的一个节点才能开始...
8个回答

53
主要的DHT引导节点是router.utorrent.com和指向它的CNAME router.bittorrent.com,端口为6881

13
谢谢!这可能是网络上唯一一个提供完整地址的纯文本的地方。 - Matt Joiner
2
如果您查看DNS,它们将解析为相同的位置,其中router.bittorent.com是router.utorrent.com的CNAME。它们是同一节点。 - anthonyryan1

46

当一个BitTorrent客户端连接到DHT时,有一个最初的位置它去寻找对等节点。使用原始的BitTorrent客户端,有一个指向bittorrent.com的URL来帮助启动下载。我试图查找参考资料但是没有找到。一旦你与其他客户端建立了连接,就可以在DHT网络上做一个announce来查找你要下载的种子的对等节点。

这里是讨论DHT的BitTorrent规范的链接。

无跟踪器的种子词典没有“announce”键。相反,无跟踪器的种子有一个“nodes”键。该键应设置为种子生成客户端路由表中K个最接近的节点。或者,可以将该键设置为已知的好节点,例如由生成种子的人操作的节点。请不要自动将“router.bittorrent.com”添加到种子文件中或自动将此节点添加到客户端的路由表中。


4
你在DHT网络上进行了“宣告”吗?我原以为你是使用get_peers()甚至抽象的get()方法来查找节点的。 - gsk

26

这个DHT监控项目网站底部的图表显示:

  • dht.transmissionbt.com
  • router.utorrent.com
  • router.bittorrent.com

作为引导节点。


3
BitTorrent已发布源代码,现在可以运行您自己的DHT引导程序:https://github.com/bittorrent/bootstrap-dht - Encombe
2
@stk,那个链接已经失效了(首先是SSL配置错误,然后是页面丢失)。 - ctrl-alt-delor
@ctrl-alt-del, 这个答案已经超过了七年,但是没关系...无论如何,在这种情况下,尝试在Wayback Machine上找到它:https://web.archive.org/web/20120508202413/https://dsn.tm.uni-karlsruhe.de/english/2936.php - stk
这就是为什么链接不好的原因(链接也有好处,但在这种情况下可能不好),增加一张图片或引用语以及链接可能是有益的。 - ctrl-alt-delor
1
不好意思,仅仅提供链接是不好的。你必须在答案中提供相关信息,而我已经清楚地做到了。那些项目符号就是引用内容。链接只是源的参考。 - stk

21
在BitTorrent中,你有三个主要选项:
  • Torrent 文件:一些 torrent 文件可以嵌入 节点,以便您与 DHT 连接(实际上在创建 torrent 文件时建议这样做)
  • 硬编码:一些 torrent 客户端会硬编码一些引导节点(如 stk 提到的那些节点)。这些通常由拥有长期运行服务器的公司和组织运行。
  • PEX / Peer Conversations:通常可以向您从其他 torrent 下载的人请求 DHT 节点(如果客户端理解彼此的语言。即某些版本不兼容)。

13

Transmission在没有其他方式获取对等节点时,会使用一个硬编码的引导节点用于dht:

bootstrap_from_name( "dht.transmissionbt.com", 6881, bootstrap_af(session) );

我猜每个种子客户端都会使用自己的引导节点。


8

值得一提的是,Deluge 也使用硬编码引导节点

dht_bootstraps = set(
    lt_bootstraps.split(',')
    + [
        'router.bittorrent.com:6881',
        'router.utorrent.com:6881',
        'router.bitcomet.com:6881',
        'dht.transmissionbt.com:6881',
        'dht.aelitis.com:6881',
    ]
)

4
客户端可以通过与其他支持DHT协议的节点交互来了解更多的DHT节点信息。一个节点是否支持DHT协议可以在握手(Handshake)阶段被广告化。一旦客户端发现至少一个可靠连接的DHT节点,它就可以遍历整个DHT网络以寻找更多接近自己的DHT节点,并在软件重启时记住这些节点,称之为“节点”(即在DHT术语中所指的)。客户端会在运行过程中不断维护和更新这个列表。当客户端无法找到可靠的DHT节点时,它需要下载基于tracker的种子文件,希望能够通过tracker了解好的DHT节点信息。
更新:对于初始的DHT节点列表,如@Seppo所提到的,Torrent客户端可以使用一个或多个硬编码的DNS名称来查找已知节点的地址,并且也可以包含一个硬编码的节点列表作为最后的备选项。然而, DNS 的一个限制是没有提供端口信息,因此通常默认使用6881端口,而其他方式则支持在不同端口上操作的节点。

1

这里是我遇到的主要节点。

dht.transmissionbt.com 6881
router.bittorrent.com  6881
router.bitcomet.com    6881
dht.aelitis.com        6881
bootstrap.jami.net     4222

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接