Kademlia este o implementare de tabel hash distribuit pentru rețele de computere peer-to-peer dezvoltate de Piotr Maimunkov și David Mazières. Protocolul Kademlia definește structura rețelei care reglementează comunicarea între noduri și modul în care este schimbată informația în ea. Nodurile de rețea care utilizează protocolul Kademlia comunică între ele folosind protocolul stratului de transport UDP . Nodurile Kademlia stochează date folosind tabele hash distribuite (DHT). Ca rezultat , o nouă rețea virtuală sau suprapusă este creată peste LAN / WAN existent (cum ar fi Internetul ), în care fiecare nod este desemnat printr-un număr special ("Node ID"). Acest număr îndeplinește și alte funcții.
Un nod care dorește să se alăture rețelei trebuie să treacă prin procesul de bootstrap. În acest moment, nodul trebuie să cunoască adresa altui nod (primit de la utilizator sau preluat din listă) care face deja parte din rețeaua de suprapunere. Dacă nodul conectat nu a intrat încă în această rețea, atunci se calculează o valoare ID aleatorie, care nu aparține încă niciunui nod. ID-ul este folosit până când părăsiți rețeaua.
Algoritmul Kademlia se bazează pe calcularea „distanței” dintre noduri prin XOR -ul ID-urilor nodurilor.
Această „distanță” nu are nimic de-a face cu localizarea geografică. De exemplu, nodurile din Germania și Australia pot fi „vecini” în rețeaua de suprapunere.
Informațiile din Kademlia sunt stocate în așa-numitele „valori” (valori). Fiecare „valoare” este legată de o „ cheie ” (cheie).
Când caută o valoare care se potrivește cu cheia, algoritmul explorează rețeaua în mai mulți pași. Fiecare pas ne aduce mai aproape de nodul dorit până când „valoarea” este complet găsită sau până când nu există astfel de noduri. Numărul de noduri contactate depinde de dimensiunea rețelei din punct de vedere logaritmic : dacă numărul de participanți se dublează, numărul de solicitări va crește doar cu una.
Sarcina de stocare a indicilor de fișiere în rețeaua Kad este descompusă în toți membrii rețelei. Dacă un nod dorește să „ partajeze ” un fișier, îl procesează obținând un hash care identifică acel fișier în rețea. Apoi nodul caută mai multe noduri ale căror ID-uri sunt apropiate de hash (dimensiunile hashurilor și ID-urile nodurilor trebuie să se potrivească), în timp ce acestor noduri li se oferă informații despre adresa acestui nod. Clientul, la cautare, cauta ID-ul nodului care are cea mai mica distanta fata de hash-ul fisierului si extrage din acesta adresele nodurilor care au acest fisier. Contactele stocate în rețea sunt mereu în schimbare, deoarece nodurile sunt conectate și deconectate în mod constant. Pentru toleranța la erori, aceste contacte sunt replicate pe mai multe noduri.
În rețeaua Kad, căutarea este efectuată prin cuvinte cheie . Numele fișierului este împărțit în părțile sale componente. Fiecare cuvânt cheie este indexat și stocat în rețea ca un hash de fișier, împreună cu fișierul și hash-ul fișierului corespunzător. Nodul căutător selectează unul dintre cuvintele cheie, se conectează la nodul al cărui ID este cel mai apropiat de hash-ul cheii și îi cere o listă de fișiere pentru acea cheie. Deoarece fiecare fișier din listă are propriul hash, numele fișierului este ușor de calculat.