Основная линия DHT

редактировать

Mainline DHT - это название распределенной хеш-таблицы (DHT) на основе Kademlia, используемой клиентами BitTorrent для поиска пиров по протоколу BitTorrent. Идея использования DHT для распределенного отслеживания была впервые реализована в Azureus 2.3.0.0 (теперь известная как Vuze ) в мае 2005 года, благодаря чему она приобрела значительную популярность. Не связанная с этим, но примерно в то же время BitTorrent, Inc. выпустила аналогичный DHT для своего клиента под названием Mainline DHT, и таким образом популяризировала использование распределенного отслеживания в протоколе BitTorrent. Измерения показывают, что количество пользователей Mainline DHT в 2013 году составляет от 10 до 25 миллионов при ежедневном оттоке не менее 10 миллионов.

СОДЕРЖАНИЕ

  • 1 Описание
    • 1.1 Эксплуатация
      • 1.1.1 Токен
    • 1.2 KRPC
      • 1.2.1 Запросы
      • 1.2.2 Ответы
      • 1.2.3 Ошибки
    • 1.3 Таблица маршрутизации
  • 2 Расширение протокола BitTorrent
    • 2.1 Торренты
  • 3 Реализации
  • 4 ссылки
  • 5 Внешние ссылки

Описание

Mainline DHT основан на популярном дизайне Kademlia DHT. До использования DHT для распределения пиров трекеры были единственным методом поиска пиров. Ключевой особенностью использования DHT вместо трекеров является то, что децентрализованный подход поддерживает характер протокола BitTorrent. DHT работает путем распределения списков одноранговых узлов, идентифицированных хешем SHA-1 торрента.

Операция

Хэш SHA-1 торрента, infohash, является синонимом ключа Kademlia, который используется для поиска пиров (значений) в оверлейной сети. Чтобы найти пиров в рое, узел отправляет запрос get_peers с infohash в качестве ключа (эквивалент Kademlia FIND_VALUE) ближайшим известным узлам (относительно расстояния между ключами). Как и в Kademlia, если узел не возвращает значение (одноранговые узлы), оно сохраняется в итеративной операции. Однако после того, как поиск исчерпан, клиент также вставляет свою контактную информацию однорангового узла на отвечающие узлы с идентификаторами, наиболее близкими к информационному хешу торрента.

Токен

Узлы используют дополнительную меру, известную как токен, чтобы гарантировать, что другие не подписывают другие хосты для торрентов. Возвращаемое значение запроса для одноранговых узлов включает это непрозрачное значение. Чтобы узел объявил, что его контролирующий одноранговый узел загружает торрент, он должен представить токен, полученный от того же запрошенного узла, в недавнем запросе одноранговых узлов. Когда узел пытается «анонсировать» торрент, запрашиваемый узел проверяет токен по IP-адресу запрашивающего узла.

Mainline DHT использует хэш SHA1 IP-адреса, объединенный в секрет, который меняется каждые пять минут для значения токена. Принимаются жетоны возрастом до десяти минут.

KRPC

Узел в Mainline DHT состоит из комбинации IP и порта. Узлы общаются по протоколу RPC - KRPC. KRPC - это простой протокол, который состоит из узлов, отправляющих сообщения (запросы, ответы и ошибки), содержащие словари в кодировке BEncoded по UDP.

Сообщение KRPC - это единый словарь с двумя ключами, общими для каждого сообщения, и дополнительными ключами в зависимости от типа сообщения. Каждое сообщение имеет ключ «t» со строковым значением, представляющим идентификатор транзакции. Этот идентификатор транзакции генерируется запрашивающим узлом и отражается в ответе, поэтому ответы могут быть коррелированы с несколькими запросами к одному и тому же узлу. Идентификатор транзакции должен быть закодирован как короткая строка двоичных чисел, обычно 2 октета достаточно, поскольку они покрывают 2 ^ 16 невыполненных запросов. Другой ключ, содержащийся в каждом сообщении KRPC, - это «y» с односимвольным значением, описывающим тип сообщения. Значение клавиши «y» - одно из «q» для запроса, «r» для ответа или «e» для ошибки.

Запросы

Запросы или словари сообщений KRPC со значением «y», равным «q», содержат два дополнительных ключа; «д» и «а». Ключ «q» имеет строковое значение, содержащее имя метода запроса. Ключ «a» имеет значение словаря, содержащее именованные аргументы запроса.

Ответы

Ответы или словари сообщений KRPC со значением «y», равным «r», содержат один дополнительный ключ «r». Значение «r» - это словарь, содержащий именованные возвращаемые значения. Ответные сообщения отправляются после успешного завершения запроса.

Ошибки

Ошибки или словари сообщений KRPC со значением «y», равным «e», содержат один дополнительный ключ «e». Значение «е» - это список. Первый элемент - это целое число, представляющее код ошибки. Второй элемент - это строка, содержащая сообщение об ошибке. Ошибки отправляются, когда запрос не может быть выполнен.

Таблица маршрутизации

Ковши устроены иначе, чем в Кадемлии. Вместо списка из 160 сегментов BitTorrent запускается только с одного сегмента. Когда ведро наполняется, может произойти одно из двух:

  1. Ведро разделено
  2. Пингуются старые узлы (как в Кадемлии)

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

У этой реализации ведра есть 2 преимущества:

  • Меньше памяти используется для таблицы маршрутизации менее 160 сегментов
  • При поиске в сегментах нет необходимости извлекать дополнительные узлы из соседних сегментов, поскольку гарантируется, что их достаточно в текущем сегменте.

Расширение протокола BitTorrent

Протокол BitTorrent также был расширен для обмена номерами портов UDP узлов между одноранговыми узлами, которые вводятся трекером. Таким образом, клиенты могут автоматически заполнять свои таблицы маршрутизации путем загрузки обычных торрентов. Вновь установленные клиенты, которые пытаются загрузить торрент без трекера с первой попытки, не будут иметь никаких узлов в своей таблице маршрутизации, и им потребуются контакты, включенные в торрент-файл.

Одноранговые узлы, поддерживающие DHT, устанавливают последний бит 8-байтовых зарезервированных флагов, которыми обмениваются при рукопожатии протокола BitTorrent. Одноранговый узел, получивший подтверждение о том, что удаленный узел поддерживает DHT, должен отправить сообщение PORT. Он начинается с байта 0x09 и имеет двухбайтовую полезную нагрузку, содержащую порт UDP узла DHT в сетевом порядке байтов. Одноранговые узлы, получившие это сообщение, должны попытаться проверить связь с узлом на полученном порту и IP-адресе удаленного однорангового узла. Если получен ответ на эхо-запрос, узел должен попытаться вставить новую контактную информацию в свою таблицу маршрутизации в соответствии с обычными правилами.

Торренты

Торрент-словарь без трекера не имеет кнопки «анонс». Вместо этого торрент без трекера имеет ключ «узлов», который функционирует как список узлов начальной загрузки (на случай, если мы еще не присоединились к оверлейной сети). Этот ключ обычно устанавливается на K ближайших узлов в таблице маршрутизации клиента, генерирующего торрент.

«Частный» флаг также неофициально представил, говоря клиентам ограничить использование децентрализованного отслеживания независимо от желания пользователя. Флаг намеренно помещен в информационный раздел торрента, чтобы его нельзя было отключить или удалить без изменения идентичности торрента. Цель флага - предотвратить передачу торрентов клиентам, не имеющим доступа к трекеру.

Реализации

Mainline DHT был впервые включен в версию 4.2.0 BitTorrent (программное обеспечение) (ноябрь 2005 г.). С тех пор он был реализован рядом других клиентов:

использованная литература

внешние ссылки

Последняя правка сделана 2023-12-31 02:16:06
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте