Как понять протокол Kademlia (KAD)

Недавно я прочитал документ о протоколе Kademlia, я пытался понять протокол, но у меня все еще есть вопрос: почему узел должен искать другой узел, когда он знает его идентификатор, но ip или порт? Почему у него есть ID, а он не знает ip или порт, откуда он взял ID? Я думаю, что «расстояние» между двумя разными узлами — это не расстояние маршрутизации или реальное расстояние, это всего лишь виртуальное расстояние, которое можно использовать в алгоритме для быстрого поиска узла, верно?

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


person rock_cloud    schedule 16.02.2012    source источник
comment
Оформить заказ gleamly.com/article/introduction-kademlia-dht-how-it -работает   -  person Joshua Kissoon    schedule 06.08.2015


Ответы (2)


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

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

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

Представьте себе простой пример, где идентификаторы находятся в диапазоне от 00 до 63. Если бы Kademlia использовала, например. чисто математическая разница как мера расстояния, 15 и 35 будут одинаковым расстоянием до 25 - оба будут иметь расстояние 10. Используя XOR, расстояние между 15 и 25 равно 22, а между 25 и 35 - 58.

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

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

Процесс поиска предназначен для возврата либо группы из k узлов (до сохранения данных на каждом из них), либо возврата одного фрагмента данных (из первого узла, содержащего его во время итераций поиска).

Из-за этого чистая Kademlia не подходит для поиска только одного узла, поэтому я не уверен, что часть вашего вопроса слишком актуальна. Если вы хотите использовать Kademlia для поиска одного узла, возможно, стоит изменить процесс поиска, чтобы он завершался раньше, как только какой-либо узел возвращает контактную информацию целевого узла (так же, как поиск завершается раньше, если целевое значение обнаруживается в процессе).

person Fraser    schedule 16.02.2012

Поскольку сеть распределена, по определению не существует единой главной таблицы сопоставлений идентификаторов и адресов. Узлы не должны (и обычно не знают) обо всех других узлах. Процесс «нахождения» узла в основном состоит в том, чтобы спросить известные узлы, «ближайшие» к цели, не столько непосредственно о целевом узле, сколько о том, какие узлы ближе к цели. Результат этого запроса дает вам следующую группу узлов для запроса, и процесс повторяется — и поскольку узел будет возвращать результаты, которые ближе, чем он есть, каждая итерация имеет тенденцию находить узлы все ближе и ближе к цели, пока вы, наконец, не достичь узла, который может сказать: «О, узел X? Он прямо там».

По крайней мере, я так это понимаю.

person cHao    schedule 16.02.2012
comment
Спасибо за ваши быстрые ответы, но я хочу знать, почему мне нужно найти узел X и откуда я взял идентификатор или имя X? И каково реальное значение расстояния между двумя узлами? Это потому, что у X есть файл, который мне нужен? - person rock_cloud; 16.02.2012
comment
Насколько я понимаю, расстояние между двумя узлами — это просто XOR их идентификаторов. Также кажется, что идентификаторы узлов и идентификаторы значений (например, содержимое, файлы, информация о поиске и т. д.) имеют одно и то же пространство ключей, и одна из точек поиска ближайших узлов к ключу — сообщить им, чтобы они сохраняли информацию. Поиск значения работает так же, как и поиск узла, за исключением того, что если узел имеет значение, соответствующее идентификатору, он отвечает им вместо списка узлов. - person cHao; 16.02.2012
comment
Таким образом, Distance — это только значение для использования алгоритма быстрого поиска. Ваш ответ полезен, спасибо! - person rock_cloud; 16.02.2012