Kademlia XOR Расстояние как целое число

В газете Kademlia упоминается использование XOR из NodeID интерпретируется как целое число. Давай притворимся NodeID1 является aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d и мой NodeID2 является ab4d8d2a5f480a137067da17100271cd176607a1, Как правильно интерпретировать это как целое число для сравнения NodeID1 а также NodeID2? Буду ли я конвертировать их в BigInt а также XOR те два BigInts? Я видел это в одной реализации. Могу ли я просто конвертировать каждый NodeID в десятичную и XOR эти ценности?

Я нашел этот вопрос, но я пытаюсь лучше понять, как именно это работает.

Примечание: это не для реализации, я просто пытаюсь понять, как работает целочисленная интерпретация.

1 ответ

Решение

Для базовой реализации kademlia вам нужны только 2-битные арифметические операции с идентификаторами: xor и сравнение. В обоих случаях идентификатор концептуально представляет собой 160-битное целое число без знака с переполнением, то есть арифметика по модулю 2^160. Он может быть разложен на массив размером 20 байт или 5×u32, предполагая правильное преобразование порядка байтов в последнем случае. Наиболее распространенным порядком байтов для сетевых протоколов является байтовый порядок байтов, поэтому байт 0 будет содержать старшие 8 бит из 160.

Затем xor или сравнения могут быть применены на основе субъединицы. Т.е. xor - это просто xor для всех байтов, сравнение - это сравнение двоичного массива.

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

Для более полной реализации могут также потребоваться некоторые дополнительные арифметические и вспомогательные функции.

Могу ли я также просто преобразовать каждый NodeID в десятичное и XOR эти значения?

Учитывая размер чисел десятичное представление не особенно полезно. Для читателя более важны шестнадцатеричные или отдельные биты, а компьютеры работают с двоичными числами и практически не с десятичными.

Другие вопросы по тегам