Основной процесс начальной загрузки DHT - PullRequest
4 голосов
/ 29 сентября 2011

Может кто-нибудь прояснить мне утверждение из спецификации магистрального DHT?

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

Что значит "пока не может найти ближе"?

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

Когда моя программа должна прекратить отправку сообщений о поиске узла?

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

Я прав?

Заранее спасибо.

1 Ответ

6 голосов
/ 29 сентября 2011

Mainline DHT является реализацией kademlia, подробнее см. документ .

Из 8 полученных вами узлов отсортируйте их по близости их идентификатора узла к вашему собственному идентификатору, затемотправьте find_node на 3 лучших (3 ближайших к вам).Затем вы получите еще 8 х 3 узла, вставьте их в свой список узлов, все еще упорядочив их по тому, насколько близко узлы находятся к вам.Продолжайте отправлять find_node сообщений на 3 верхних узла (игнорируя те, на которые вы уже отправили сообщения), пока вернувшиеся узлы уже не появятся в вашем списке.то есть условие завершения - вы отправили сообщение всем 8 ближайшим к вам узлам (вверху списка).

Как поясняется в статье, метрика расстояния - XOR.Чтобы вычислить, как далеко ваш идентификатор узла находится от другого узла, вы XOR идентификаторы узла.Чем ниже результат, тем ближе узлы друг к другу.

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

...