Kademlia
Материал из Википедии — свободной энциклопедии
Kademlia — это протокол оверлейной сети, созданный для обслуживания децентрализованных одноранговых сетей. Протокол Kademlia определяет структуру сети, регулирующей связь между узлами, и способ обмена информацией в ней. Узлы сети, работающей по протоколу Kademlia, сообщаются благодаря транспортному уровню UDP. Узлы Kademlia хранят данные посредством распределённых хеш-таблиц (DHT). В итоге над существующей LAN/WAN (как интернет) создаётся новая виртуальная или оверлейная сеть, в которой каждый узел обозначается специальным номером («Node ID»). Этот номер также выполняет и другие функции.
Узел, который хочет присоединиться к сети, обязан пройти «загрузочную» процедуру (bootstrap proccess). В этот момент узел должен знать адрес другого узла (полученный от пользователя или взятый из списка), который уже входит в сеть кад. Если подключаемый узел ещё не входил в эту сеть, то происходит расчет случайного значения ID, которое ещё не принадлежит никакому узлу. ID используется до момента выхода из сети.
Алгоритм Kademlia базируется на расчете дистанции между узлами, которая получается путем применения операции исключаещее ИЛИ к ID этих узлов.
Эта «дистанция» не имеет никакого отношения к географическому положению. К примеру, узлы из Германии и Австралии могут быть «соседними» в сети Kad.
Информация в Kademlia хранится в так называемых «значениях» (values). Каждое «значение» привязано к «ключу» (key).
При поиске ключа алгоритм исследует сеть в несколько шагов. Каждый шаг приближает к искомому узлу до полного нахождения «значения» либо до отсутствия таких узлов. Количество контактируемых узлов зависит от размера сети: при увеличении количества участников (number of participants) вдвое количество запросов увеличится всего на один.
[править] Использование в файлообменных сетях
Задача хранения индексов файлов в сети Kad раскладывается на всех участников сети. Если узел хочет расшарить файл, он обрабатывает его, получая хэш, который идентифицирует этот файл в сети. Затем узел ищет несколько узлов, ID которых близки к хэшу (размеры хешей и узлов должны совпадать), при этом на эти узлы отдается информация об адресе этого узла. Клиент при поиске ищет ID узла, который имеет наименьшую дистанцию к хэшу файла и извлекает из него адреса узлов, которые имеют этот файл. Контакты хранимые в сети всегда находтся в постоянном изменении, так как узлы постоянно подключаются и отключатся. Для отказоустойчивости эти контакты реплицируются по нескольким узлам.
Поиск осуществляется по ключевым словам. Имя файла разбивается на составные части. Каждое ключевое слово хэшируется и сохраняется в сети аналогично файловому хэшу, вместе с соответсвующим файлом и хэшем файла. Ищущий узел выбирает одно из ключевых слов, соединяется с узлом, чей ID самый близкий к хэшу ключа и запрашивает с него список файлов для этого ключа. Так как каждый файл в списке имеет свой хэш, имя файла легко вычисляется.
[править] Клиенты файлообменных сетей, использующие различные вариации протокола Kademlia
- Протокол Kad, используемый в клиентах eMule, aMule, MLDonkey и др.
- Azureus DHT — в клиенте Azureus сети BitTorrent
- Mainline DHT — в большинстве клиентов сети BitTorrent
- В клиенте RevConnect сети Direct Connect
- Протокол Overnet — в закрытом ныне клиенте eDonkey2000