Как работает DHT в торрентах?

я кодирую реализацию p2p, которую я хотел бы сделать децентрализованной, однако у меня возникли проблемы с пониманием того, как DHT в протоколах, таких как bittorrent. Как клиент знает, где находятся сверстники, если нет трекера? Хранятся ли peers в фактическом файле torrent?

4 ответов


с trackerless / DHT торренты, одноранговые IP-адреса хранятся в DHT с помощью BitTorrent infohash в качестве ключа. Поскольку все, что делает трекер, в основном, отвечает на запросы put/get, эта функциональность точно соответствует интерфейсу, который предоставляет DHT (распределенная хэш-таблица): он позволяет искать и хранить IP-адреса в DHT с помощью infohash.

таким образом, запрос" get " будет искать BT infohash и возвращать набор IP-адресов. A " put " хранит IP-адрес для данной мыши запустите расширение. Это соответствует запросу" объявить", который вы в противном случае сделали бы трекеру для получения словаря одноранговых IP-адресов.

в DHT одноранговые узлы случайным образом назначаются для хранения значений, принадлежащих небольшой части пространства ключей; хэширование гарантирует, что ключи распределяются случайным образом между участвующими одноранговыми узлами. Протокол DHT (адреса для BitTorrent) гарантирует, что запросы put/get эффективно маршрутизируются коллегам, ответственным за ведение списков IP-адресов данного ключа.


общую теорию можно найти в статье Википедии о адреса. Конкретная спецификация протокола, используемая в bittorrent, находится здесь:http://wiki.theory.org/BitTorrentDraftDHTProtocol


Что происходит с bittorrent и DHT, так это то, что в начале bittorrent использует информацию, встроенную в торрент-файл, чтобы перейти к трекеру или одному из набора узлов из DHT. Затем, как только он находит один узел, он может продолжать находить другие и продолжать использовать DHT без централизованного трекера для его обслуживания.

исходная информация загружает более позднее использование DHT.


узлы DHT имеют уникальные идентификаторы, называемые ID узла. Идентификаторы узлов выбираются случайным образом из того же 160-битного пространства, что и информационные хэши BitTorrent. Близость измеряется путем сравнения таблиц маршрутизации ID узла, чем ближе узел, тем более подробно, что приводит к оптимальному

Что делает их более оптимальными, чем предшественник "Kademlia", который использовал простые целые числа без знака: расстояние(A, B) = |A xor B| меньшие значения ближе. ИСКЛЮЧАЮЩЕЕ ИЛИ. Кроме того, что он не был безопасным, его логика была недостатки.

Если ваш клиент поддерживает DHT, зарезервировано 8 байтов, в которых содержится 0x09, а затем 2-байтовая полезная нагрузка с портом UDP и узлом DHT. Если рукопожатие будет успешным, то вышеуказанное будет продолжаться.