Я новичок в P2P-сетях и в настоящее время пытаюсь понять некоторые основные вещи, указанные в документах Kademlia. Главное, что я не могу понять, это метрика расстояния Кадемлии. Все документы определяют расстояние как XOR двух идентификаторов. Размер идентификатора составляет 160 бит, поэтому результат также имеет 160 бит. Вопрос: как удобно представить это расстояние целым числом? Некоторые реализации, которые я проверял, используют следующее: расстояние = 160 - длина префикса (где длина префикса - это количество начальных нулей). Это правильный подход?
Как представить метрику расстояния Kademlia в виде целого числа
Ответы (1)
Некоторые реализации, которые я проверял, используют следующее: расстояние = 160 - длина префикса (где длина префикса - это количество начальных нулей). Это правильный подход?
Этот подход основан на раннем пересмотре документа kademlia и недостаточно для реализации некоторых из более поздних глав окончательного документа.
Полноценная реализация должна использовать древовидную таблицу маршрутизации, в которой корзины упорядочиваются по их абсолютному положению в пространстве ключей, размер которого может быть изменен при разделении корзины.
Размер идентификатора составляет 160 бит, поэтому результат также имеет 160 бит. Вопрос: как удобно представить это расстояние целым числом?
Метрики расстояния представляют собой 160-битные целые числа. Вы можете использовать большой целочисленный класс или создать свой собственный на основе массивов. Чтобы получить количество битов общего префикса, вам просто нужно подсчитать начальные нули, которые масштабируются логарифмически с размером сети и обычно должны вписываться в гораздо меньшие целые числа, когда вы закончите.