Kademlia är en distribuerad hashtabellimplementering för peer-to-peer-datornätverk utvecklad av Piotr Maimunkov och David Mazières. Kademlia-protokollet definierar strukturen för nätverket som reglerar kommunikationen mellan noder och hur information utbyts i det. Nätverksnoder som använder Kademlia-protokollet kommunicerar med varandra med hjälp av UDP- transportlagerprotokollet . Kademlia-noder lagrar data med hjälp av distribuerade hashtabeller (DHT). Som ett resultat skapas ett nytt virtuellt eller överläggsnätverk över det befintliga LAN / WAN (som Internet ), där varje nod är betecknad med ett speciellt nummer ("Nod ID"). Detta nummer utför även andra funktioner.
En nod som vill ansluta sig till nätverket måste gå igenom bootstrap-processen. Vid denna tidpunkt måste noden känna till adressen till en annan nod (mottagen från användaren eller hämtad från listan) som redan är en del av överlagringsnätverket. Om den anslutna noden ännu inte har kommit in i detta nätverk, beräknas ett slumpmässigt ID-värde, som ännu inte tillhör någon nod. ID:t används tills du lämnar nätverket.
Kademlia-algoritmen är baserad på att beräkna "avståndet" mellan noder genom att XORing av nod-ID:n.
Detta "avstånd" har ingenting med geografisk plats att göra. Till exempel kan noder från Tyskland och Australien vara "grannar" i överläggsnätverket.
Information i Kademlia lagras i så kallade "värden" (värden). Varje "värde" är knutet till en " nyckel " (nyckel).
När man letar efter ett värde som matchar nyckeln, utforskar algoritmen nätverket i flera steg. Varje steg för oss närmare den önskade noden tills "värdet" är helt hittat eller tills det inte finns några sådana noder. Antalet kontaktade noder beror logaritmiskt på nätverkets storlek : om antalet deltagare fördubblas kommer antalet förfrågningar att öka med endast en.
Uppgiften att lagra filindex i Kad-nätverket är uppdelad i alla nätverksmedlemmar. Om en nod vill " dela " en fil, bearbetar den den genom att få en hash som identifierar den filen på nätverket. Därefter letar noden efter flera noder vars ID är nära hashen (storlekarna på hash och nod ID måste matcha), medan dessa noder får information om adressen till denna nod. Klienten letar efter ID:t för den nod som har det minsta avståndet till filens hash och extraherar från den adresserna till de noder som har denna fil. Kontakterna som är lagrade på nätverket är alltid i ständig förändring eftersom noder ständigt är anslutna och frånkopplade. För feltolerans replikeras dessa kontakter över flera noder.
I Kad-nätverket görs sökningen med nyckelord . Filnamnet är uppdelat i dess beståndsdelar. Varje nyckelord hashas och lagras i nätverket som en filhash, tillsammans med motsvarande fil- och filhash. Sökarnoden väljer ett av nyckelorden, ansluter till den nod vars ID ligger närmast nyckelns hash och ber den om en lista med filer för den nyckeln. Eftersom varje fil i listan har sin egen hash, är filnamnet lätt att beräkna.