Kademlia

Actualmente, según David Mazières y Petar Maymounkov, la utilidad de Kademlia está en aplicaciones para compartir archivos, aunque esta podría no ser la única utilidad de Kademlia.

Overnet fue una variante del protocolo Kademlia y era la red nativa sin servidores del desaparecido programa eDonkey, mientras que Kad usa otra variante distinta y es la red nativa sin servidores de los clientes *Mule.

Aun así, ambas redes usan esencialmente el mismo protocolo (Kademlia), pero diferentes variantes, incompatibles entre sí.

Cada hoja por tanto contendrá el identificador del nodo, tal y como se muestra en la Figura 1.

En cada Bucket se van a almacenar aquellos contactos cuyo identificador de nodo difiere en 1 bit (en cada Bucket uno distinto y menos significativo), empezando por el bit más significativo, el de la izquierda.

El concepto de lejanía o cercanía se define mediante la métrica de distancia XOR de Kademlia, y es por el cual quedan los Buckets organizados ( los contactos con una distancia “ d ” respecto del identificador del nodo van en un Bucket, y los contactos con una distancia “ d’ ” respecto del nodo van en otro Bucket) Dada la imagen anterior, se ve claramente que la forma de organizar los contactos hace que la cantidad de contactos en los Buckets sea desproporcionada, ya que el Bucket más alejado contendrá muchos contactos y el Bucket que contiene los contactos más cercanos almacena solo uno.

En el almacenamiento de los contactos nos podemos encontrar frente a varias situaciones: 1.

El contacto que hemos descubierto no se encontraba en ningún Bucket, y se debe de introducir en uno que ya existen K contactos, por lo que se procede a investigar sobre la alcanzabilidad del primer contacto del Bucket (cuyo descubrimiento es más antiguo).

Por ejemplo, si quisiéramos ver cual de los dos nodos con identificadores 010 y 110 respectivamente está más cerca del identificador 100, realizaríamos el XOR dos veces y compararíamos (Figura 3) El XOR, tiene varias propiedades que deben de ser expuestas.

Los contactos devueltos por los nodos a los que se ha realizado las llamadas son almacenados en los K-Buckets correspondientes.

El nodo con ID 011, vería cuales de los existentes en su tabla están más cercanos a la clave que quiere posicionar, para ello utiliza la métrica XOR.

En este FIND_NODE, se deberá de incluir como identificador la clave, para buscar contactos más cercanos a esta.

A continuación, se pueden ver las tablas de encaminamiento que tendrán los nodos 011 y 111 respectivamente las referenciadas en la Figura 7.

En este momento enviará un STORE al nodo con identificador 100 que es del de los alfa más cercanos aquel que tiene un identificador más cercano a la clave, conjunto con la clave y el valor.

En este proceso de búsqueda del nodo con identificador más cercano a la clave, las tablas de rutas se han ido actualizando cuando se han ido recibiendo mensajes.

Para obtener un valor, necesitaremos conocer la clave a buscar, en este momento se procederá como en el apartado anterior en cuanto a la búsqueda de un nodo, pero las llamadas serán de tipo FIND_VALUE, y la búsqueda terminará cuando se devuelva un valor en vez de K contactos, o no haya más K contactos cercanos a la clave y no se haya devuelto un valor con anterioridad.

Figura 1.- Árbol binario red Kademlia
Figura 2 .- Tabla de encaminamiento nodo 011
Figura 3 .- Ejemplo XOR entre nodos
Figura 4 .- Ejemplo de red Kademlia en la búsqueda de un nodo
Figura 5 .- Nodo inicializador de almacenamiento
Figura 6 .- Ejemplo de operación XOR
Figura 7 .- Ejemplo: Tablas de rutas de encaminamiento en los nodos 001 y 111
Figura 8 .- Ejemplo: tabla de encaminamiento nodo 100