Как работает DHT в торрентах? - PullRequest
65 голосов
/ 26 августа 2009

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

Ответы [ 4 ]

56 голосов
/ 17 ноября 2009

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

Таким образом, запрос "get" будет искать информацию о BT-хэше и вернуть набор IP-адресов. «Put» хранит IP-адрес для данного информационного хэша. Это соответствует запросу «анонсировать», который вы в противном случае отправили бы трекеру для получения словаря IP-адресов одноранговых узлов.

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

17 голосов
/ 02 ноября 2009

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

12 голосов
/ 11 ноября 2009

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

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

1 голос
/ 16 декабря 2017

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

Что делает их более оптимальными, чем его предшественник "Kademlia", который использовал простые целые числа без знака: расстояние (A, B) = | A xor B | Меньшие значения ближе. XOR. Помимо ненадежности, его логика была ошибочной.

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

...