Вкл dht для новых торрентов. Смотреть что такое "DHT" в других словарях. Разбиение пространства ключей

На многих так называемых «приватных» трекерах торренты раздаются с установленным флагом, не позволяющим использовать сеть DHT . Цель этого - не допускать раздачу материала клиентам, не зарегистрированным на данном трекере. Однако для пользователя это означает уменьшение количества сидеров, иногда - значительное.

Ниже мы рассмотрим, как отключить такое ограничение в популярных торрент-клиентах. Будет рассмотрен общий подход, а также практическое применение к актуальной версии uTorrent и qBitTorrent .

1. Вступление.

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

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

2. Подготовка.

Нам понадобятся:
  1. Актуальный дистрибутив торрент-клиента.
  2. Архиватор, способный распаковывать инсталляционные файлы, например в случае uTorrent и qBitTorrent - 7-zip .
  3. Распаковщик исполняемых файлов клиента, в случае uTorrent - UPX .
  4. IDA или любой другой дизассемблер.
Вначале, извлечём и распакуем исполняемые файлы. Для этого откроем скачанные инсталляторы и откроем их в 7-zip. Нам потребуются:
  • в случае uTorrent - файл Carrier.exe;
  • В случае qBitTorrent - файлы qbittorrent.exe и qbittorrent.pdb (либо их 64-разрядные аналоги, если будет изменяться 64-битный клиент).
Для uTorrent также необходимо распаковать UPX-упаковку, это можно сделать командой
upx.exe -d Carrier.exe

2. Поиск и изменение кода.

В общем, реализация блокировки DHT во всех клиентах на уровне Ассемблера выглядит одинаково, это вызов функции проверки флага, и если эта функция возвращает нулевое значение - переход на область кода, которая позволяет использовать DHT:

Call TestPrivate test eax, eax jz NotPrivate
по этой причине сам патч будет выражаться в простом изменении одного байта кода 74 => EB, превращающего условный переход jz в безусловный и таким образом игнорирующий проверку на «приватность».

Остаётся найти данную функцию.

На самом деле это совершенно не сложно, учитывая специфику данного кода и наличие ключевого слова «private». Откроем распакованный файл клиента uTorrent в IDA и выполним поиск по данному ключевому слову:

Видно, что с указанным ключом в uTorrent присутствует всего три участка кода. Вот как они выглядят:


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

Наша задача заключается в простом замене функции, как мы уже упоминали ранее:

По сути, это замена характерной последовательности
68 00 FF 69 00 E8 19 F1 FA FF 85 C0 74 07
на
68 00 FF 69 00 E8 19 F1 FA FF 85 C0 EB 07

В случае qBitTorrent задача упрощается ещё больше, поскольку разработчик вложил pdb-файл в установщик, так что названия функций будут более очевидными, и поиск по ключевому слову упрощается:

Так выглядит сам код проверки:

Как видите, по сути он неотличим от uTorrent. Патч будет аналогичным:


E8 20 CB FA FF 84 C0 74 59
на
E8 20 CB FA FF 84 C0 EB 59

QBitTorrent также предлагается в виде 64-разрядного клиента. Действия в отношении него буду совершенно аналогичными, за исключением того, что нам потребуется 64-разрядная версия IDA. Результат поиска по ключевому слову ожидаемо аналогичен:

Вид соответствующей функции несколько отличен, однако суть осталась та же:

Ну и соответствующий патч, здесь это будет три байта:

Это замена характерной последовательности
E8 8F 0E F8 FF 4C 8D 3D 54 E5 46 01 83 CB FF 84 C0 0F 84 DB 00 00 00
на
E8 8F 0E F8 FF 4C 8D 3D 54 E5 46 01 83 CB FF 84 C0 E9 DC 00 00 00 00

3. Итоги

Нами было последовательно изучена процедура поиска и отключения функции ограничения использования DHT для приватных торрентов в популярных клиентах uTorrent и qBitTorrent.
Думаю, что предложенный механизм будет аналогичен и для любых других клиентов - во всяком случае я проверил его и на ComboPlayer .

Для автоматизации процесса мной были созданы два патчера для актуальных версий uTorrent и qBitTorrent. Для uTorrent патчер также распаковывает исходный инсталлятор. Файлы можно скачать здесь:

Патчер qBitTorrent версии x32
Патчер qBitTorrent версии x64
Патчер распакованного файла uTorrent
Silent всё-в-одном патчер uTorrent : распаковывает, патчит и обратно упаковывает инсталлятор, а также распаковывает, патчит и упаковывает обратно уже установленный uTorrent (при условии, что установочная папка - по умолчанию, то есть "%userprofile%\AppData\Roaming\uTorrent\"

В связи с появлением новости от The Pirate Bay об отказе от трекерной раздачи торрентов.

Это моя ложка меда в чашу дегтя: что это, как это и насколько полезно. Для начала разберемся что такое сам файл *.torrent

*.torrent файл — файл метаданных, который содержит следующую информацию:

  • URL трекера;
  • общую информацию о закачиваемом файле (имя, длину и пр.);
  • Контрольные суммы (точнее, хеш-суммы) сегментов закачиваемого файла.

с этим вроде все понятно?

url трекера - это адресок, откуда utorrent получает ip адреса участников конкретного файлообмена. Но можно обойтись и без этого трекера. Но как получим адреса участников файлообмена? Для этого существует технология DHT и magnet ссылки.

В частовстречаемых версиях utorrent «функция», если её можно так назвать, «возможность», «технология» уже присутствует:

DHT (англ. Distributed Hash Table - «распределённая хеш-таблица») - помогает участникам файлообмена узнать друг о друге. В совокупности с РЕХ (Peer exchange - расширение BitTorrent-протокола для обмена списками участников), они могут:

  • Помочь участникам быстрее найти друг друга
    Например, на раздаче есть пир X с недоступным портом. К раздаче подключается пир Z, который сам начать соединение с X не может и вынужден ждать, пока Х о нём узнает сам. Х только что обращался к трекеру и в следующий раз собирается это сделать через час.
    Но вот пир Y в очередной раз обращается к трекеру и узнаёт про нового пира Z. При этом Y сам давно уже соединён и занимается файлообменом с X, поэтому он через PEX сообщает X адрес этого нового пира. Теперь X может начать соединение к Z.
  • Снизить нагрузку на трекер
    Получая адреса пиров через DHT или PEX, клиенты реже обращаются к трекеру, тем самым снижая нагрузку.
  • Поддержать раздачу в периоды недоступности трекера
    Если трекер является единственным источником информации о пирах, то при его неработоспособности раздача постепенно остановится. Используя PEX, клиенты могут обмениваться друг с другом информацией о пирах, с которыми у них были сеансы связи, тем самым замедляя процесс остановки раздачи. DHT же позволяет полностью заменить трекер.
  • DHT позволяет раздавать без трекера
    Такая раздача называется trackerless. Торрент для неё создаётся без адреса трекера и клиенты находят друг друга через DHT. При участии в trackerless-раздачах BitTorrent-клиенты приобретают определённое сходство с eMule, использующим сеть Kad.

Пробежимся по «галочкам»:

  • включить DHT сеть: вроде вопросов не должно возникнуть.
  • включить DHT для новых торрентов: вроде бы тоже всё понятно
  • поиск локальных пиров: если Вы находитесь в локальной сети провайдера, utorrent пытается найти участника конкретного файлообмена внутри адресного пространства локальной сети провайдера.
  • включить обмен пирами: эта фишка позволят Вашему utorrent обмениваться найденными пирами с другими участниками файлообмена

Как качать используя DHT и РЕХ

Все просто: достаточно знать хэш раздачи. Он вшит в файл *.torrent и/или находится в magnet ссылке.

Берем любую раздачу на руторрентах. Например http://torrents.ru/forum/viewtopic.php?t=2402314
Взял тупо самую популярную из новинок кина.

Жмем скачать, получаем окно

нас интересует кнопка «дополнительно»

удаляем адреса трекеров в окне трекеров; проверяем снизу галочки жмем ОК и ОК. Раздача понеслась. Все участники файлообмена найдуся с помощью DHT и РЕХ. Связи с трекером нет, а нет связи - нет и никакого движения рейтинга т.е. вообще без рейтинга

имеет вид magnet:?xt=urn:btih:

btih - обозначение принадлежности хеша BWJDXWBWYIMS6VG4FO5SSKCUEKFC44W3 к хешу bittorrent.
В других программах файлообмена (Kazza, EDonkey2000 и пр) - хеш свой. Спецификация хешей и магнит-ссылки .

BWJDXWBWYIMS6VG4FO5SSKCUEKFC44W3 - это и есть хэш раздачи. Он и вшит в *.torrent
Опубликованный выше магнитик опять же скачает тот же файл, что находится в раздаче http://torrents.ru/forum/viewtopic.php?t=2402314

Возможности DHT и РЕХ

На примере вечнозакрываемых раздач на руторрентах: если постить магнитики - раздачу закрыть не возможно. Только если удалить всю тему. А нам всего навсего достаточно знать ХЭШ. Знаем хеш - лепим сами магнитик и скармливаем utorrent.

magnet:?xt=urn:btih: + BWJDXWBWYIMS6VG4FO5SSKCUEKFC44W3

получаем

magnet:?xt=urn:btih:BWJDXWBWYIMS6VG4FO5SSKCUEKFC44W3

скармливаем

С помощью DHT и РЕХ можно и раздавать без торрент-трекера.

Создаем раздачу как обычно, только в окошке торрент-трекеров ничего не указываем. Сразу же встаем на раздачу и раздаем всем или хеш, или готовый магнитик

и радуемся от раздач и скачки.

Естественно все работает при правильной настройки utorrent. Если всё верно, то внизу программы Вы увидите

p.s. http://rghost.ru/464232 - «мод» utorrent, который игнорирует privat флаг на закрытых торрент-трекерах. Всем must have. Но это уже другая тема.

DHT в БитТорренте используется для нахождения новых участников файлообмена.

При подключении к DHT сети БТ клиент устанавливает соединения с несколькими другими клиентами (узлами сети) и сам становится очередным узлом этой сети.

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

DHT есть в клиентах BitTorrent (официальный), µTorrent, BitSpirit, BitComet, а также (несовместимо со всеми остальными) в Azureus.

В более общем смысле DHT означает децентрализованную распределенную систему для объединения большого количества постоянно исчезающих и появляющихся узлов и эффективной передачи сообщений между ними. На основе DHT структур можно строить более сложные системы, такие как P2P файлообмен, кооперативное веб кеширование, DNS сервисы и т.п.

Реализация DHT в БТ основана на варианте DHT, называемом Kademlia, и использует UDP протокол.

PEX

PEX (Peer exchange) - это обмен списками пиров между участниками одной и той же БТ раздачи.

В то время как DHT фактически образует независимую от БТ протокола сеть, PEX гораздо проще - это дополнительные сообщения между уже соединенными по БТ протоколу клиентами.

PEX может быть только вспомогательным средством получения пиров, хотя бы потому, что не может помочь подключиться к раздаче новым участникам.

PEX есть в клиентах Azureus, BitComet, µTorrent и BitTornado, причем в каждом клиенте по-своему, поэтому PEX между собой пользуются только одинаковые клиенты.

Функции

    И DHT и PEX фактически выполняют основную функцию трекера - помогают участникам файлообмена узнать друг о друге. Они:
  • снижают нагрузку на трекер: некоторые клиенты, получая пиров через DHT или PEX, реже обращаются за списком пиров на трекер
  • поддерживают участников вместе в периоды, когда трекер временно недоступен

Кроме того, DHT может использоваться и как единственный источник информации о других участниках - если торрент файл сразу создавался без трекера (trackerless)

DHT/PEX и закрытые трекеры

На открытых трекерах, где каждый может скачать торрент и участвовать в раздаче, функции DHT и PEX служат на благо всего участников.

Закрытым трекерам в первую очередь важно, чтобы в раздачах могли участвовать только зарегистрированные пользователи, и чтобы они соблюдали определенные правила.

При первом обращении клиента закрытый трекер имеет возможность не допустить его к раздаче, просто не сообщая ему адреса других клиентов-участников. Поэтому для закрытого трекера важно, чтобы клиенты не получали эти адреса через DHT/PEX.

Private key

DHT и PEX появились в клиентах Azureus и BitComet примерно летом 2005 года. Администраторы многие закрытых трекеров были недовольны такой новой функциональностью, и поэтому стали запрещать на трекере эти новые версии клиентов.

Тогда разработчики клиентов предложили новый ключ внутри торрент файла: private. Если он равен 1, то клиент обязан для этого торрента автоматически отключать DHT/PEX независимо от желания пользователя.

Правильно настроенные закрытые трекеры сами принудительно вставляют private:1 во все торренты, выкладываемые на трекере, а также запрещают несколько устаревших версий клиентов (имеющих DHT или PEX, но еще не знающих про private key).

Пользователи трекера просто не могут на раздачах использовать DHT/PEX, и проблемы нет.

Заблуждение про статистику

Иногда встречается мнение, что включенный в клиенте DHT как-то влияет на учет статистики клиента, например "раздавал через DHT, значит статистика шла мимо трекера". Это неверно:

  1. клиент рапортует статистику только на трекер , через DHT/PEX вообще никакого подсчета статистики не ведется
  2. клиент рапортует трекеру суммарные данные об объемах им скачанного и отданного всем пирам, с которыми общался , независимо от того, узнал клиент об отдельных пирах через трекер, DHT или PEX, или тот пир вообще начал соединение сам. То есть даже если из-за DHT/PEX на раздаче появятся левые пользователи, клиент все равно сообщит на трекер все, что у них скачал и отдал.

Правильный учет статистики зависит только от состояния трекера: работает трекер - статистика учитывается, не работает - не учитывается. Только в случае длительно неработающего трекера DHT/PEX может играть косвенную роль, не давая постепенно затухнуть файлообмену на такой "раздаче без учета статистики".

  1. Кроме того, часто пользователи просто забывают, что на их закрытом трекере все торренты private, и следовательно DHT/PEX в раздачах в принципе не используется.

Отключать ли DHT

Безусловно отключать DHT стоит в следующих двух случаях:

1) Вы качаете с закрытого трекера с системой passkey, на котором администраторы не хотят или не умеют делать все торренты private. Дело в том, что через DHT пользователи могут узнать passkey других пользователей, и нечестные пользователи могут использовать чужие passkey для скачивания под чужой учетной записью.

2) Вы качаете только с правильных закрытых трекеров. Если при этом в клиенте разрешить DHT, то получится, что клиент подключается к DHT сети, тратит на это трафик, но ни на одной раздаче DHT не использует.


В последнее время torrent-трекеры все сильнее раздражают правооболадателей.
В этой статье вы узнаете как качать торренты без трекеров.


Для начала разберемся что такое сам файл *.torrent
.torrent файл — файл метаданных, который содержит следующую информацию:

  • URL трекера;
  • общую информацию о закачиваемом файле (имя, длину и пр.);
  • Контрольные суммы (точнее, хеш-суммы) сегментов закачиваемого файла.
с этим вроде все понятно?


url трекера — это адрес сервера, откуда utorrent получает ip адреса участников конкретного файлообмена. Но можно обойтись и без этого сервера. Но как получим адреса участников файлообмена? Для этого существует технология DHT и magnet ссылки.

В частовстречаемых версиях utorrent "функция", если её можно так назвать, "возможность", "технология" уже присутствует:

DHT (англ. Distributed Hash Table — «распределённая хеш-таблица») — помогает участникам файлообмена узнать друг о друге. В совокупности с РЕХ (Peer exchange — расширение BitTorrent-протокола для обмена списками участников), они могут:

  • Помочь участникам быстрее найти друг друга
Например, на раздаче есть пир X с недоступным портом. К раздаче подключается пир Z, который сам начать соединение с X не может и вынужден ждать, пока Х о нём узнает сам. Х только что обращался к трекеру и в следующий раз собирается это сделать через час.
Но вот пир Y в очередной раз обращается к трекеру и узнаёт про нового пира Z. При этом Y сам давно уже соединён и занимается файлообменом с X, поэтому он через PEX сообщает X адрес этого нового пира. Теперь X может начать соединение к Z.

  • Снизить нагрузку на трекер
Получая адреса пиров через DHT или PEX, клиенты реже обращаются к трекеру, тем самым снижая нагрузку.


  • Поддержать раздачу в периоды недоступности трекера
Если трекер является единственным источником информации о пирах, то при его неработоспособности раздача постепенно остановится. Используя PEX, клиенты могут обмениваться друг с другом информацией о пирах, с которыми у них были сеансы связи, тем самым замедляя процесс остановки раздачи. DHT же позволяет полностью заменить трекер.

  • DHT позволяет раздавать без трекера
Такая раздача называется trackerless. Торрент для неё создаётся без адреса трекера и клиенты находят друг друга через DHT. При участии в trackerless-раздачах BitTorrent-клиенты приобретают определённое сходство с eMule, использующим сеть Kad.

Пробежимся по "галочкам":

  • включить DHT сеть: вроде вопросов не должно возникнуть.
  • включить DHT для новых торрентов: вроде бы тоже всё понятно
  • поиск локальных пиров: если Вы находитесь в локальной сети провайдера, utorrent пытается найти участника конкретного файлообмена внутри адресного пространства локальной сети провайдера.
  • включить обмен пирами: эта фишка позволят Вашему utorrent обмениваться найденными пирами с другими участниками файлообмена

Как качать используя DHT и РЕХ

Все просто: достаточно знать хэш раздачи. Он вшит в файл *.torrent и/или находится в magnet ссылке.

Берем любую раздачу на руторрентах.
Взял одну из самых популярных.

Жмем скачать, получаем окно

нас интересует кнопка "дополнительно"

удаляем адреса трекеров в окне трекеров; проверяем снизу галочки
жмем ОК и ОК. Раздача понеслась. Все участники файлообмена найдуся с помощью DHT и РЕХ. Связи с трекером нет, а нет связи — нет и никакого движения рейтинга т.е. вообще без рейтинга

имеет вид magnet:?xt=urn:btih:BWJDXWBWYIMS6VG4FO5SSKCUEKFC44W3

BWJDXWBWYIMS6VG4FO5SSKCUEKFC44W3 — это и есть хэш раздачи. Он и вшит в *.torrent
Опубликованный выше магнитик опять же скачает тот же файл, что находится в раздаче http://torrents.ru/forum/viewtopic.php?t=2402314

Возможности DHT и РЕХ

на примере вечнозакрываемых раздач на руторрентах: если постить магнитики — раздачу закрыть не возможно. Только если удалить всю тему. А нам всего навсего достаточно знать ХЭШ. Знаем хеш — лепим сами магнитик и скармливаем utorrent.

magnet:?xt=urn:btih: + BWJDXWBWYIMS6VG4FO5SSKCUEKFC44W3

») - это класс децентрализованных распределённых систем, которые обеспечивают поисковый сервис, похожий по принципу работы на таблицу хешей, и имеют структуру: (имя, значение), хранящиеся в DHT, а каждый участвующий узел может рационально искать значение, ассоциированное с данным именем. Ответственность за поддержку связи между именем и значением распределяется между узлами, таким образом изменение набора участников является причиной минимального количества разрывов. Это позволяет DHT легко масштабироваться и постоянно отслеживать добавление/удаление узлов и ошибки в их работе.

DHT - это инфраструктура, которая может быть использована для построения многих комплексных сервисов, таких как распределенные файловые системы, пиринговое распространение файлов и системы распространения контента, кооперативный web-кэш, многоадресная доставка (multicast), anycast, сервис доменных имен и система мгновенных сообщений. Основные распределенные сети, которые используют DHT, включают в себя BitTorrent , сеть eDonkey network , YaCy и Coral Content Distribution Network .

История

Изыскания в области DHT изначально были мотивированы в частности пиринговыми системами, такими, как Napster , Gnutella , Freenet , которые использовали распределенные в интернете ресурсы для создания одного единственного приложения. В частности они использовали расширенную пропускную способность и объем жесткого диска для предоставления сервиса распространения файлов. Эти системы различаются тем, как они находили данные пиров:

  • Napster имел центральный индексный сервер: каждый узел, после присоединения, должен отправить список локально хранящихся файлов на сервер, который должен произвести поиск и направить запрос к узлам, содержащий результаты. Этот центральный компонент делал систему уязвимой для атак и рисков.
  • Gnutella и похожие сети двинулись к модели лавинных запросов - в основном, каждый поиск привел бы к сообщению, передаваемому на любую машину в сети. Избегая централизованного отказа, этот метод был значительно менее эффективным чем Napster .
  • Наконец, Freenet был также полностью распределенным, но маршрутизация работает на базе эвристического ключа, в котором каждый файл имеет ассоциированный с ним ключ, а файлы с похожими ключами имели тенденцию к объединению в кластеры на похожем наборе узлов. Запрос, вероятно, направлялся таким кластерам без надобности опрашивать всех пиров. Однако, Freenet не мог гарантировать, что данные будут найдены.

DHT используют маршрутизацию на базе более структурированного ключа, чтобы достигнуть децентрализации Gnutella и Freenet , а также эффективности и гарантируемых результатов Napster . Один из недочетов в том, что, как Freenet , DHT поддерживает только поиск по точному совпадению, а не по ключевым словам, хотя эти возможности могут наслаиваться поверх DHT.

Свойства

DHT характеризуется следующими свойствами:

  • децентрализация: форма системы коллективных узлов без координации;
  • расширяемость: система будет одинаково эффективно функционировать при тысячах или миллионах узлов;
  • отказоустойчивость: система будет одинаково надежна (в некотором смысле) с узлами постоянно подключающимися, отключающимися и выдающими ошибки.

Ключевая методика достижения цели заключается в том, что любой узел должен скоординироваться только с несколькими узлами в системе - как правило, О (logn ), где n - количество участников (смотри ниже) - так, чтобы только ограниченный объем работы был сделан для каждого изменения количества участников.

Некоторые DHT-проекты стремятся обеспечить защиту от вредоносных пользователей и позволять участникам оставаться анонимными, хотя это меньше распространено, чем во многих других P2P-системах (особенно при распространении файлов); см. анонимные P2P.

Наконец, DHT приходится иметь дело с более традиционными распределенными системами, такими, как распределение нагрузки, целостность данных и производительность (в частности гарантируя, что операции, такие как маршрутизация и хранение данных или поиск завершаются быстро).

Структура

Структура DHT может быть разбита на несколько основных компонентов. Она основывается на абстрактном пространстве ключей (keyspace), таком как набор 160-битных строк (количество бит может варьироваться). Схема разбиения пространства ключей распределяет принадлежность ключей среди участвующих узлов. Затем оверлейная сеть соединяет узлы помогая найти владельца любого ключа в пространстве ключей.

Когда все компоненты на месте, типичное использование DHT для хранения и выдачи информации происходит следующим образом: Предположим keyspace составляет 160-битные строки. Чтобы сохранить файл с данным именем и информацией в DHT, находится SHA1 хеш от имени файла, из которого формируется 160-битный ключ k, после чего формируется сообщение put(k, data) и посылается любому участвующему узлу в DHT. Послание идёт от одного узла к другому через оверлейную сеть до тех пор, пока она не достигнет единственного узла, ответственного за ключ k, в соответствии со схемой разбиения keyspace, где хранится пара (k, data). Любой другой клиент может получить содержание файла сделав ключ (k), получив хеш имени файла, для того, чтобы найти данные, связанные с ключом, послав сообщение get(k) . Сообщение снова пройдёт через оверлей к узлу, ответственному за ключ, который ответит, что нужные данные есть в наличии.

Компоненты разбиения пространства ключей и оверлейной сети описаны ниже с целью представления основных идей обычных для большинства DHT систем. Многие разработки отличаются в деталях.

Разбиение пространства ключей

Многие DHT используют некоторые варианты постоянного хеширования для отображения ключей в узлы. Этот способ включает в себя функция δ(k 1 ,k 2) которая определяет абстрактное понятие расстояния между ключами k 1 и k 2 , что не относится к географическому расстоянию и сетевой задержке. Каждый узел представляет собой единичный ключ названный идентификатором(ID). Узел с ID j владеет всеми ключами для которых i самый ближайший ID, измеряемый с δ .

Пример." Chord DHT рассматривает ключи как точки на окружности и δ(k 1 ,k 2) есть расстояние, которое проходится по часовой стрелке окружности от ключа k 1 к k 2 . Таким образом круг пространства ключей разделён на смежные сегменты, чьи концы являются идентификаторами узлов. Если i 1 и i 2 смежные ID, то узел с ID i 2 содержит все ключи, которые находятся между i 1 и i 2 .

Согласованное хеширование имеет основное свойство: удаление или прибавление только одного набора ключей, принадлежащих узлам смежных ID, не влияет на другие узлы.

DHT и BitTorrent

И DHT и PEX фактически выполняют основную функцию BitTorrent-трекера - помогают участникам файлообмена узнать друг о друге. Они могут:

  • Помочь участникам быстрее найти друг друга
    Например, на раздаче есть пир X с недоступным портом. К раздаче подключается пир Z, который сам начать соединение с X не может и вынужден ждать, пока Х о нём узнает сам. Х только что обращался к трекеру и в следующий раз собирается это сделать через час.
    Но вот пир Y в очередной раз обращается к трекеру и узнаёт про нового пира Z. При этом Y сам давно уже соединён и занимается файлообменом с X, поэтому он через PEX сообщает X адрес этого нового пира. Теперь X может начать соединение к Z.
  • Снизить нагрузку на трекер
    Получая адреса пиров через DHT или PEX, клиенты реже обращаются к трекеру, тем самым снижая нагрузку.
  • Поддержать раздачу в периоды недоступности трекера
    Если трекер является единственным источником информации о пирах, то при его неработоспособности раздача постепенно остановится. Используя PEX , клиенты могут обмениваться друг с другом информацией о пирах, с которыми у них были сеансы связи, тем самым замедляя процесс остановки раздачи. DHT же позволяет полностью заменить трекер.
  • DHT позволяет раздавать без трекера
    Такая раздача называется trackerless . Торрент для неё создаётся без адреса трекера и клиенты находят друг друга через DHT. При участии в trackerless-раздачах BitTorrent-клиенты приобретают определённое сходство с eMule , использующим сеть Kad .

Private key

В публичных (открытых) трекерах, где каждый желающий может скачать торрент и участвовать в раздаче, DHT и PEX служат на благо всех участников.

Частным (закрытым) трекерам в первую очередь важно, чтобы в раздачах могли участвовать только зарегистрированные пользователи, и чтобы они соблюдали определённые правила. При первом обращении клиента частный трекер имеет возможность не допустить его к раздаче, просто не сообщая ему адреса других клиентов-участников. Поэтому для закрытого трекера важно, чтобы клиенты не получали эти адреса через DHT/PEX.

DHT и PEX появились в клиентах Azureus и BitComet примерно летом 2005 года. Администраторы многих частных трекеров были недовольны такой новой функциональностью, и поэтому стали запрещать на трекере эти новые версии клиентов.

Тогда разработчики клиентов предложили новый ключ внутри торрент файла: private . Если он равен 1, то клиент обязан для этого торрента автоматически отключать DHT/PEX независимо от желания пользователя. Такой торрент называют Secure Torrent.

Практически все современные частные трекеры сами принудительно вставляют private:1 во все торренты, выкладываемые на трекере, а также запрещают несколько устаревших версий клиентов, поддерживающих DHT или PEX, но ещё не знающих про private key . Пользователи трекера просто не могут на раздачах использовать DHT/PEX, и проблемы нет.

Отметим, что присутствие private key изменяет infohash торрента, поэтому выреза́ть его из торрент-файла бесполезно - другие клиенты изменённый торрент всё равно не признают.

Стоит так же отметить, что ранее, когда коммерческие трекеры так же активно отдавали свои торренты для скачивания, но авторизация анонса требовала PassKey, сеть DHT использовалась для воровства PassKey у пользователей. Данное явление нисколько не затрагивает уязвимости в DHT, просто результаты генератора пасскеев (атака перебором - brute force) проверялись трассированием через DHT. Непосредственное воровство пароля не осуществляется через DHT, а сегодня, когда на всех коммерческих трекерах требуются инвайты и прочее, доступа у сторонних лиц к файлу торрента нет, а на трекерах с обыкновенной регистрацией у каждого есть свой пасскей и он может выполнять валидацию запросами на трекер, средствами HTTP, а не DHT.

DHT и статистика

Этот раздел касается только закрытых трекеров, на которых private key в торренты принудительно не вставляется , и на некоторых раздачах (в зависимости от того, вставил ли раздающий сам в торрент private key ) можно использовать DHT и PEX.

Часто встречается мнение, что включённый в клиенте DHT влияет на учёт статистики клиента трекером, например «раздавал через DHT, значит статистика шла мимо трекера». Это неверно.

Во-первых, DHT/PEX используется только для получения адресов пиров. Ни файлообмена, ни какого-либо учёта статистики по ним не ведётся. Клиент рапортует статистику скачанного и отданного только на трекер.

То есть «раздавал через DHT» фактически означает «о некоторых (или о всех) пирах получил информацию по DHT, и вероятно некоторые пиры тоже нашли меня через DHT»

Во-вторых, хотя клиенты обычно и знают, откуда ими получены адреса пиров, ни один клиент не разделяет трафик на «полученный/отданный DHT пирам» и «полученный/отданный пирам, полученным от трекера». Даже при желании это было бы клиенту сделать затруднительно - некоторые пиры могут быть получены и от трекера и через DHT или PEX, и часто клиент не знает, как его адрес получил пир, сам начинающий к нему соединение.

Клиент рапортует трекеру суммарные данные об объёмах им скачанного и отданного всем пирам, с которыми он общался , независимо от того, узнал клиент об отдельных пирах через трекер, DHT или PEX, или тот пир вообще начал соединение сам. То есть даже если из-за DHT/PEX на раздаче появятся «левые» пользователи (не обращающиеся к трекеру), клиент всё равно сообщит на трекер всё, что у них скачал и отдал.

Правильный учёт статистики зависит только от состояния трекера: работает трекер - статистика учитывается, не работает - не учитывается. Только в случае длительно неработающего трекера DHT/PEX может играть косвенную роль, не давая постепенно затухнуть файлообмену на такой «раздаче без учёта статистики».

Механизм работы DHT

Реализация распределенной сети в BitTorrent-клиентах основана на варианте DHT, называемом Kademlia . А вообще говоря, DHT (Distributed hash table) означает децентрализованную распределенную систему для объединения большого количества постоянно исчезающих и появляющихся узлов и эффективной передачи сообщений между ними. На основе структур DHT строят разные более сложные системы, такие как файлообмен P2P, кооперативное веб-кеширование, службы DNS и т. п.

DHT использует протокол UDP . Клиенты BitTorrent «слушают» тот же номер порта UDP, который они используют для входящих TCP -соединений. Если вы активно используете DHT, то открытие этого UDP-порта для доступа снаружи желательнo, но не обязательно - DHT будет работать и так.

Каждый подключённый клиент является в сети DHT отдельным узлом. У него есть свой уникальный ID (идентификатор), случайно выбираемый из того же 160-битного пространства, что и infohash’и торрентов.

Каждый узел хранит таблицу маршрутизации, содержащую контактную информацию о многих «ближайших» к нему узлах, и о нескольких более далёких. «Близость» двух узлов вычисляется из «сходства» их ID, и не имеет никакого отношения к их географической близости.

Когда узел хочет найти пиров для раздачи, он сравнивает infohash этой раздачи с ID известных ему узлов, и затем посылает запрос тому узлу, чей ID наиболее похож на этот infohash. Тот узел возвращает ему адрес узла, чей ID ещё ближе к infohash торрента.

Тогда наш узел посылает запрос тому новому узлу, и получает от него адрес следующего узла, чей ID ещё более похож на infohash торрента.

Таким образом, запросы от клиентов, участвующих в раздаче торрента с определённым infohash, постепенно стекаются к узлам, чьи ID наиболее похожи на этот infohash. Эти узлы помнят предыдущие запросы, и всем следующим запрашивающим узлам вернут адреса предыдущих пиров с той же раздачи.

Недостатки

  1. Существует несколько не совместимых между собой протоколов которые обслуживают различные сети.
  2. Работа клиента как DHT узла создает большую нагрузку на роутер .

Ссылки

  • Описание DHT протокола (Перевод)(рус.)
  • Описание DHT протокола на сайте Bittorrent.org(англ.)


Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: