Основная линия DHT
Mainline DHT — это имя, данное Kademlia (DHT) на основе распределенной хеш-таблице , используемой клиентами BitTorrent для поиска узлов через протокол BitTorrent . Впервые была реализована идея использования DHT для распределенного отслеживания в BitTorrent. [1] [2] в Azureus 2.3.0.0 (теперь известном как Vuze ) в мае 2005 года, благодаря чему он приобрел значительную популярность. Не имеет отношения к делу, но примерно в то же время BitTorrent, Inc. выпустила аналогичный DHT для своего клиента под названием Mainline DHT и, таким образом, популяризировала использование распределенного отслеживания в протоколе BitTorrent. Измерения показали, что к 2013 году количество одновременных пользователей Mainline DHT составит от 16 до 28 миллионов, при этом внутридневные изменения составят не менее 10 миллионов. [3]
Описание
[ редактировать ]Mainline DHT основан на популярном дизайне Kademlia DHT. [4] До использования DHT для распространения пиров трекеры единственным методом поиска пиров были . Ключевой особенностью использования DHT вместо трекеров является то, что децентрализованный подход благоприятствует природе протокола BitTorrent. DHT работает путем распространения списков пиров, идентифицированных хешем SHA-1 торрента.
Операция
[ редактировать ]Хеш SHA-1 торрента, infohash , является синонимом ключа Kademlia, который используется для поиска пиров (значений) в оверлейной сети. Чтобы найти одноранговые узлы в множестве, узел отправляет запрос get_peers с информационным хешем в качестве ключа (эквивалент Kademlia FIND_VALUE ) ближайшим известным узлам (с учетом расстояния между ключами). Как и Kademlia, если узел не возвращает значение (одноранговые узлы), он продолжает выполнять итеративную операцию. Однако после того, как поиск исчерпан, клиент также вставляет контактную информацию однорангового узла в отвечающие узлы с идентификаторами, наиболее близкими к информационному хешу торрента.
Токен
[ редактировать ]Узлы используют дополнительную меру, известную как токен , чтобы гарантировать, что другие не подпишут другие хосты для торрентов. Возвращаемое значение запроса для одноранговых узлов включает это непрозрачное значение. Чтобы узел мог объявить, что его контролирующий узел загружает торрент, он должен представить токен, полученный от того же запрашиваемого узла, в недавнем запросе узлов. Когда узел пытается «объявить» о торренте, запрашиваемый узел сверяет токен с IP-адресом запрашивающего узла.
Mainline DHT использует хэш SHA-1 IP-адреса, объединенный в секрет, который меняется каждые пять минут для значения токена. Принимаются жетоны возрастом до десяти минут.
КРПК
[ редактировать ]Узел в Mainline DHT состоит из комбинации IP и порта. Узлы обмениваются данными через протокол RPC, называемый KRPC . KRPC — это простой протокол, который состоит из узлов, отправляющих сообщения (запросы, ответы и ошибки), содержащие закодированные словари по UDP .
Сообщение KRPC представляет собой единый словарь с двумя ключами, общими для каждого сообщения, и дополнительными ключами в зависимости от типа сообщения. Каждое сообщение имеет ключ «t» со строковым значением, представляющим идентификатор транзакции. Этот идентификатор транзакции генерируется запрашивающим узлом и отображается в ответе, поэтому ответы могут коррелировать с несколькими запросами к одному и тому же узлу. Идентификатор транзакции должен быть закодирован как короткая строка двоичных чисел, обычно двух октетов достаточно, поскольку они охватывают 2^16 невыполненных запросов. Другой ключ, содержащийся в каждом сообщении KRPC, — это «y» с односимвольным значением, описывающим тип сообщения. Значением ключа «y» является одно из «q» для запроса, «r» для ответа или «e» для ошибки.
Запросы
[ редактировать ]Запросы или словари сообщений KRPC со значением «y», равным «q», содержат два дополнительных ключа; «к» и «а». Ключ «q» имеет строковое значение, содержащее имя метода запроса. Ключ «a» имеет значение словаря, содержащее именованные аргументы запроса.
Ответы
[ редактировать ]Ответы или словари сообщений KRPC со значением «y» «r» содержат один дополнительный ключ «r». Значение «r» представляет собой словарь, содержащий именованные возвращаемые значения. Ответные сообщения отправляются после успешного завершения запроса.
Ошибки
[ редактировать ]Ошибки, или словари сообщений KRPC со значением «y», равным «e», содержат один дополнительный ключ «e». Значение «e» представляет собой список. Первый элемент — это целое число, представляющее код ошибки. Второй элемент — это строка, содержащая сообщение об ошибке. Ошибки отправляются, когда запрос не может быть выполнен.
Таблица маршрутизации
[ редактировать ]Ведра устроены иначе, чем в Кадемлии. Вместо списка из 160 сегментов BitTorrent начинается только с одного сегмента. Когда ведро наполняется, может произойти одно из двух:
- Ведро расколото.
- Старые узлы пингуются (как в Кадемлии).
Разделение — это операция, которая происходит только в том случае, если идентификатор нашего собственного узла попадает в диапазон сегмента. Разделяемый сегмент заменяется двумя новыми сегментами, каждый из которых имеет половину диапазона старого сегмента, а узлы из старого сегмента распределяются между двумя новыми.
У этой реализации корзины есть два преимущества:
- Меньше памяти используется для таблицы маршрутизации, содержащей менее 160 сегментов.
- При поиске в сегментах нет необходимости извлекать дополнительные узлы из соседних сегментов, поскольку гарантировано, что их достаточно в текущем сегменте.
Реализации
[ редактировать ]Mainline DHT впервые был включен в версию 4.2.0 программного обеспечения BitTorrent (ноябрь 2005 г.). С тех пор его внедрили ряд других клиентов:
- µТоррент
- Передача инфекции
- rТоррент
- КТоррент
- БитКомет
- Потоп [5]
- БитСпирит
- Vuze с плагином MlDHT
- Поделиться
- Тиксати
- qBittorrent
Ссылки
[ редактировать ]- ^ Джонс, Бен (7 июня 2015 г.). «DHT BitTorrent исполняется 10 лет» . ТоррентФрик . Проверено 5 июля 2015 г.
- ^ «Журнал изменений Вузе» . Azureus.sourceforge.net. Архивировано из оригинала 1 декабря 2006 г. Проверено 15 июля 2012 г.
- ^ Ван, Лян; Кангашарью, Юсси (2013). «Измерение крупномасштабных распределенных систем: пример основного DHT BitTorrent» (PDF) . Одноранговая связь IEEE . Проверено 26 октября 2013 г.
- ^ Левенстерн, Эндрю; Норберг, Арвид (22 марта 2013 г.). «Протокол DHT» . BitTorrent.org . Проверено 26 ноября 2021 г.
- ^ «О – Потоп» .