Как сказал cHao, распределенная природа сети означает, что узлам необходимо публиковать свои идентификаторы и свои контактные данные на других узлах, с которыми они общаются. Не существует центрального места, где идентификаторы сопоставляются с контактной информацией, поэтому каждый узел должен хранить это сопоставление для подмножества узлов в сети в своей собственной таблице маршрутизации.
Таблицы маршрутизации Kademlia структурированы таким образом, что узлы будут детально знать близкую к ним сеть, и экспоненциально уменьшать знания дальше.
Использование побитового XOR в качестве меры условного расстояния между идентификаторами имеет то преимущество, что для данного идентификатора цели два идентификатора не могут иметь одинаковое расстояние до цели.
Представьте себе простой пример, где идентификаторы находятся в диапазоне от 00 до 63. Если Kademlia использовал, например, Чистая математическая разница как мера расстояния, 15 и 35 будет одинаковым расстоянием до 25 - у обоих будет расстояние 10. При использовании XOR расстояние между 15 и 25 составляет 22, а между 25 и 35 - 58.
Таким образом, группа из k ближайших идентификаторов к целевому идентификатору может быть вычислена однозначно.
Константа k имеет несколько применений в Kademlia, но это в первую очередь фактор репликации. Другими словами, часть данных хранится в k ближайших узлах с идентификатором данных.
Процесс поиска предназначен для возврата либо группы из k узлов (перед сохранением данных на каждом из них), либо для возврата одного фрагмента данных (от первого узла, удерживающего его во время итераций поиска).
Из-за этого чистый Kademlia не лучше всего подходит для поиска только одного узла, поэтому я не уверен, что часть вашего вопроса слишком актуальна. Если вы хотите использовать Kademlia для поиска одного узла, вероятно, стоит изменить процесс поиска так, чтобы он заканчивался как можно раньше, как только какой-либо узел возвращает контактные данные целевого узла (так же, как поиск заканчивается рано, если целевое значение находится в процессе).