Основной процесс начальной загрузки DHT

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

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

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

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

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

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

Я прав?

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


person Art Spasky    schedule 28.09.2011    source источник


Ответы (1)


Mainline DHT — это реализация kademlia, подробности см. в статье .

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

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

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

person Arvid    schedule 29.09.2011