WikiDer > Основная линия DHT
Эта статья слишком полагается на Рекомендации к основные источники. (Декабрь 2012 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
Основная линия DHT это имя, данное Кадемлия-основан Распределенная хеш-таблица (DHT) используется BitTorrent клиенты найти коллег через BitTorrent протокол. Впервые была реализована идея использования DHT для распределенного отслеживания.[1][2] в Azureus 2.3.0.0 (теперь известный как Вузе) в мае 2005 года, благодаря чему он приобрел значительную популярность. Несвязанный, но точно рассчитанный BitTorrent, Inc. выпустили аналогичный DHT в свои клиент, названный Mainline DHT, популяризировал использование распределенного отслеживания в BitTorrent протокол. Измерения показывают, что количество пользователей Mainline DHT в 2013 году составляет от 10 до 25 миллионов при ежедневном оттоке не менее 10 миллионов.[3]
Описание
Mainline DHT основан на популярных Кадемлия DHT дизайн.[4] До использования 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 - это единый словарь с двумя ключами, общими для каждого сообщения, и дополнительными ключами в зависимости от типа сообщения. У каждого сообщения есть ключ "т" со строковым значением, представляющим идентификатор транзакции. Этот идентификатор транзакции генерируется запрашивающим узлом и отражается в ответе, поэтому ответы могут быть коррелированы с несколькими запросами к одному и тому же узлу. Идентификатор транзакции должен быть закодирован как короткая строка двоичных чисел, обычно 2 октета достаточно, поскольку они покрывают 2 ^ 16 невыполненных запросов. Другой ключ, содержащийся в каждом сообщении KRPC, - "у" с односимвольным значением, описывающим тип сообщения. Значение клавиши «y» - одно из "q" для запроса, "р" для ответа, или "е" на ошибку.
Запросы
Запросы или словари сообщений KRPC со значением «y», равным «q», содержат два дополнительных ключа; «д» и «а». Ключ «q» имеет строковое значение, содержащее имя метода запроса. Ключ «a» имеет значение словаря, содержащее именованные аргументы запроса.
Ответы
Ответы или словари сообщений KRPC со значением «y» равным «r» содержат один дополнительный ключ «r». Значение «r» - это словарь, содержащий именованные возвращаемые значения. Ответные сообщения отправляются после успешного завершения запроса.
Ошибки
Ошибки или словари сообщений KRPC со значением «y», равным «e», содержат один дополнительный ключ «e». Значение «е» - это список. Первый элемент - это целое число, представляющее код ошибки. Второй элемент - это строка, содержащая сообщение об ошибке. Ошибки отправляются, когда запрос не может быть выполнен.
Таблица маршрутизации
Ковши устроены иначе, чем в Кадемлии. Вместо списка из 160 сегментов BitTorrent запускается только с одного сегмента. Когда ведро наполняется, может произойти одно из двух:
- Ведро разделено
- Пингуются старые узлы (как в Кадемлии)
Разделение - это операция, которая происходит только в том случае, если наш собственный идентификатор узла попадает в диапазон корзины. Разделенный сегмент заменяется двумя новыми сегментами, каждый с половиной диапазона старого сегмента, а узлы из старого сегмента распределяются между двумя новыми.
У этой реализации сегмента есть 2 преимущества:
- Для таблицы маршрутизации, содержащей менее 160 сегментов, используется меньше памяти.
- При поиске в сегментах нет необходимости извлекать дополнительные узлы из соседних сегментов, поскольку гарантируется, что их достаточно в текущем сегменте.
Расширение протокола BitTorrent
Протокол BitTorrent также был расширен для обмена номерами портов UDP узлов между одноранговыми узлами, которые вводятся трекером. Таким образом, клиенты могут автоматически заполнять свои таблицы маршрутизации путем загрузки обычных торрентов. Вновь установленные клиенты, которые пытаются загрузить торрент без трекера с первой попытки, не будут иметь никаких узлов в своей таблице маршрутизации, и им потребуются контакты, включенные в торрент-файл.
Одноранговые узлы, поддерживающие DHT, устанавливают последний бит 8-байтовых зарезервированных флагов, которыми обмениваются при рукопожатии протокола BitTorrent. Одноранговый узел, получивший подтверждение о том, что удаленный узел поддерживает DHT, должен отправить сообщение PORT. Он начинается с байта 0x09 и имеет двухбайтовую полезную нагрузку, содержащую UDP-порт узла DHT в сетевом порядке байтов. Одноранговые узлы, которые получают это сообщение, должны попытаться проверить связь с узлом на полученном порту и IP-адресе удаленного узла. Если получен ответ на эхо-запрос, узел должен попытаться вставить новую контактную информацию в свою таблицу маршрутизации в соответствии с обычными правилами.
Торренты
Торрент-словарь без трекера не имеет "объявить" ключ. Вместо этого торрент без трекера имеет "узлы" ключ, который функционирует как список Узлы начальной загрузки (на случай, если мы еще не присоединились к оверлейной сети). Этот ключ обычно установлен на K ближайшие узлы в таблице маршрутизации клиента, генерирующего торрент.
А "частный" flag также был неофициально введен, предлагая клиентам ограничить использование децентрализованного отслеживания независимо от желания пользователя. Флаг намеренно помещен в информационный раздел торрента, чтобы его нельзя было отключить или удалить без изменения идентификатора торрента. Цель флага - предотвратить передачу торрентов клиентам, у которых нет доступа к трекеру.
Реализации
Основной DHT был впервые включен в версию 4.2.0 BitTorrent (программное обеспечение) (Ноябрь 2005 г.). С тех пор он был реализован рядом других клиентов:
- μTorrent
- Передача инфекции
- rTorrent
- KTorrent
- BitComet
- Потоп[5]
- BitSpirit
- Вузе с плагином MlDHT
- Shareaza
- Тиксати
- qBittorrent
- BiglyBT
Рекомендации
- ^ Джонс, Бен (7 июня 2015 г.). «BitTorrent DHT исполняется 10 лет». TorrentFreak. Получено 2015-07-05.
- ^ "Журнал изменений Vuze". Azureus.sourceforge.net.
- ^ Ван, Лян; Кангашарью, Юсси. (2013). «Измерение крупномасштабных распределенных систем: пример BitTorrent Mainline DHT» (PDF). Одноранговая сеть IEEE. Получено 26 октября 2013.
- ^
, Андрей. "http://bittorrent.org/beps/bep_0005.html". bittorrent.org. Получено 2015-06-10. Внешняя ссылка в| название =
(помощь) - ^ http://dev.deluge-torrent.org/wiki/About#Whataboutfeatures