Как представить метрику расстояния Kademlia в виде целого числа

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


person bw_dev    schedule 03.02.2018    source источник
comment
Это уже целое число (160-битное целое число). Вы пытаетесь вписать 160-битное число в целое число, как это определено конкретным языком программирования?   -  person David Soroko    schedule 04.02.2018
comment
Да (пишу на java). Поскольку расстояние используется как индекс k-bucket   -  person bw_dev    schedule 04.02.2018
comment
Ну, если вы ничего не знаете об этих идентификаторах, например, у них есть общий префикс/суффикс или какая-то другая структура, которая позволит вам сжимать их, нет никакого способа уместить произвольное 160-битное число в 32 бита.   -  person David Soroko    schedule 04.02.2018


Ответы (1)


Некоторые реализации, которые я проверял, используют следующее: расстояние = 160 - длина префикса (где длина префикса - это количество начальных нулей). Это правильный подход?

Этот подход основан на раннем пересмотре документа kademlia и недостаточно для реализации некоторых из более поздних глав окончательного документа.

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

Размер идентификатора составляет 160 бит, поэтому результат также имеет 160 бит. Вопрос: как удобно представить это расстояние целым числом?

Метрики расстояния представляют собой 160-битные целые числа. Вы можете использовать большой целочисленный класс или создать свой собственный на основе массивов. Чтобы получить количество битов общего префикса, вам просто нужно подсчитать начальные нули, которые масштабируются логарифмически с размером сети и обычно должны вписываться в гораздо меньшие целые числа, когда вы закончите.

person the8472    schedule 04.02.2018