Bittorent 客户端中的 DHT 如何进行“引导”?

如果我有一个种子//在它的任何跟踪器,我刚刚开始一个比特的客户端,所以我还没有同行... 我如何知道谁第一次连接在 DHT?似乎我必须至少知道 DHT 中的一个节点才能开始... ..。

32951 次浏览

When a BitTorrent client connects to DHT, there is an initial place that it goes to find peers. With the original BitTorrent client, there was a url to bitorrent.com that would help get things started. I tried looking up the reference but I couldn't find it. Once you've established connections with other clients, then you can do an announce on the DHT network to find peers for the torrent you're looking for.

Here's a link to the BitTorrent specs that discuss DHT.

A trackerless torrent dictionary does not have an "announce" key. Instead, a trackerless torrent has a "nodes" key. This key should be set to the K closest nodes in the torrent generating client's routing table. Alternatively, the key could be set to a known good node such as one operated by the person generating the torrent. Please do not automatically add "router.bittorrent.com" to torrent files or automatically add this node to clients routing tables.

The mainline DHT bootstrap nodes are router.utorrent.com and a CNAME to it, router.bittorrent.com. Port 6881.

A client can learn about other DHT-capable peers through it's interactions with them. A peer's support for DHT is advertised in it's Handshake. Once a client discovers at least one good, well-connected DHT peer, it can navigate the DHT to find more and closer DHT peers. It will remember these peers, called nodes in DHT-speak, between restarts of the software and maintain/update the list continuously while it is running. In the worse case where a client knows of no good DHT-capable peers, it will require you to download a tracker-based torrent so it can hopefully contact a few good DHT-capable peers it learns about through the tracker.

Update: For it's initial list of DHT peers, as @Seppo points out, a torrent client can use one or more hard-coded DNS names to find the addresses for well-known peers, and it may also include a hard-coded list of peers as a final fallback as well. One limitation of DNS, however, it no port information is provided so a default port of 6881 is generally assumed whereas other means support peers operating on different ports.

the graph at the bottom of this DHT monitoring project site shows

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

as bootstrapping peers

In BiTTorrent, you have three main options:

  • Torrent File: some torrent files can embed nodes for you to link into the DHT with (in fact, it's recommended when making a torrent file)
  • Hardcoding: Some torrent clients hard code a few bootstrap nodes (like the ones mentioned by stk). These are usually run by companies and organizations with long-running servers.
  • PEX / Peer Conversations: You can usually ask for DHT nodes from the people you are downloading other torrents from (if your clients understand eachothers language. ie some versions are incompatible).

Transmission uses a hardcoded bootstrap node for dht if there is no other way to get peers:

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

I guess each torrent client uses their own bootstrap node.

For the record, Deluge also uses hardcoded boostrap nodes:

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',
]
)

Here are the primary nodes I've come across.

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