Добавление новых узлов в Kademlia, построение таблиц маршрутизации Kademlia

Я никак не могу понять процесс присоединения к Kademlia DHT. Я видел несколько руководств и презентаций в Интернете, но все они, похоже, говорят одно и то же, и весь псевдокод и т. Д. В большинстве случаев одинаковы (фактическое копирование / вставка).

Может ли кто-нибудь рассказать об этом на высоком уровне?


person JSON    schedule 12.10.2013    source источник


Ответы (2)


Я предполагаю, что вы прочитали статью Kademlia. Вот выдержка из моей статьи Введение в Kademlia DHT и как это работает

Некоторая справочная информация:

  1. Когда у вас работает сеть Kademlia, всегда должен быть узел, о котором знает каждый другой узел, чтобы они могли присоединиться к сети; давайте назовем это узлом Bootstrap BN.

  2. K — это константа Kademlia, которая определяет размер сегментов в таблице маршрутизации узла, а также количество узлов, на которых должна храниться часть данных.

Процесс присоединения:

  1. Новый узел NN создается с NodeId (назначенным каким-либо методом) и IP-адресом (IP-адресом компьютера, на котором он размещен).

  2. NN отправляет LookupRequest(A.NodeId) пользователю BN. Запрос поиска в основном запрашивает у принимающего узла K-самых близких узлов, которые он знает для данного NodeId. В этом случае BN вернет K-самых близких узлов, которые он знает для NN.

  3. BN теперь добавит NN в свою таблицу маршрутизации, так что NN теперь находится в сети.

  4. NN получает список K-самых близких к себе узлов от BN. NN добавляет BN в свою таблицу маршрутизации.

  5. NN теперь пингует эти K узлов, полученные от BN, а те, которые отвечают, добавляются в его таблицу маршрутизации в необходимые сегменты в зависимости от расстояния. Пингуя эти узлы, они также узнают о существовании NN и добавляют NN в свои таблицы маршрутизации.

  6. NN теперь подключен к сети и известен узлам в сети.

  7. NN теперь зацикливается на каждом из своих K-бакетов.

    foreach(K-Buckets as KB)         
        1. NN generates a random NodeId `RNID` // A NodeId that will be in KB 
        2. NN sends LookupRequest(RNID) to the K-Closest nodes it knows to RNID. 
        3. The response will be K nodes closest to RNID.
        4. NN now fills KB. 
    

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

    Примечание. Этот шаг не является обязательным, однако я выполнил его в Моя реализация Kademlia чтобы каждый узел лучше знал сеть при присоединении.

Я написал полное введение в Kademlia по адресу Введение в Kademlia DHT и как это работает.

person Joshua Kissoon    schedule 30.03.2014
comment
Возможно ли это немного упростить? Шаг 2 может заключаться в том, что NN добавляет BN в свою собственную таблицу маршрутизации и выполняет операцию поиска на себе. Таким образом, k-соседи узнают о новом узле и добавят его в свои таблицы маршрутизации. Я думаю, что такой подход убережет нас от выполнения дополнительных пингов - person nz_21; 29.03.2021

Я предполагаю, что он использует некоторые суперузлы и геопространственную информацию для вычисления минимального остовного дерева. Он также может вычислить диаграмму Вороного или двойную триангуляцию Делоне из суперузлов и использовать ее для запуска поиска близости. Вот пример: http://www.mathworks.de/de/help/matlab/math/spatial-searching.html.

person Gigamegs    schedule 23.10.2013
comment
Спасибо за Ваш ответ. - person JSON; 24.10.2013
comment
Я отмечу ваш ответ правильно, так как вы единственный, кто ответил, а награда заканчивается через час, но больше информации было бы здорово. Мне нравится идея использования треугольного поиска по близости, можете ли вы предоставить ссылки с информацией об этом? - person JSON; 24.10.2013
comment
Увы, эта щедрость была потрачена впустую. Ответ неверный и ссылка 404s. - person the8472; 27.10.2017
comment
@the8472: Не стесняйтесь давать лучший ответ! - person Gigamegs; 28.10.2017