Kademlia

Le Kademlia est une table de brouillage distribuée par pour que le pair décentralisé de scrute les réseaux informatiques de conçus par le Petar Maymounkov et le David Mazières . Il spécifie la structure du réseau et l'échange d'informations par des consultations du noeud . Les noeuds de Kademlia communiquent parmi eux-mêmes using UDP . Un réseau virtuel ou de de substitution est constitué par les noeuds de participant. Chaque noeud est identifié par une identification de noeud de nombre ou de . L'identification de noeud de sert non seulement d'identification, mais d'utilisations d'algorithme de Kademlia l'identification de noeud de de localiser des valeurs (habituellement le de dossier hache ou mots-clés). En fait, l'identification de noeud de fournit une carte directe au dossier hache et cette information de magasins de noeud sur où obtenir le dossier ou la ressource.

En recherchant une certaine valeur, l'algorithme doit savoir la clef associée et explore le réseau dans plusieurs étapes. Chaque étape trouvera les noeuds qui sont plus près de la clef jusqu'à ce que le noeud entré en contact renvoie la valeur ou plus de noeuds plus étroits ne sont trouvés. C'est très efficace : Comme des beaucoup l'autre DHTs Kademlia entre en contact avec seulement des noeuds du O (\ notation (n)) (voir la grande O notation du ) pendant la recherche hors d'un total de noeuds de n dans le système.

D'autres avantages sont trouvés en particulier dans la structure décentralisée, qui augmente clairement la résistance contre un déni de service de l'attaque . Même si toute une série de noeuds est inondée, ceci aura limité l'effet sur la disponibilité de réseau, qui se récupérera en tricotant le réseau autour des ces " ; holes" ;.

< ! -- Le texte suivant est utile, mais je l'ai trouvé confondre dans l'introduction. Il y a probablement trop de concepts abstraits dans l'article déjà, ainsi ajoutant le " de nom de noeud ; A" ; , " ; B" ; , " ; C" ; , etc. ne semble pas aider un nouveau lecteur à comprendre ceci. Je pense que l'information est répétée encore dans l'article. --> < ! -- La connaissance qu'un noeud de participant a du réseau varie avec le " ; distance" ;. Un concept de la distance est défini et mis en application dans le réseau, de sorte qu'un " de noeud ; A" ; peut toujours dire lequel de l'autre " de deux noeuds ; B" ; et " ; C" ; est plus près de se (au " ; A" ;). N'importe quel noeud a une connaissance très détaillée des noeuds qui sont " ; très close" ; à se (c. saura l'identification de tous les noeuds étroits), à une connaissance très clairsemée des noeuds très éloignés (c. saura l'identification très de peu de eux), et aux divers niveaux de la connaissance des parties du réseau qui sont aux distances intermédiaires, plus la distance à se est courte, plus la connaissance est plus détaillée.

Le but de Kademlia est de stocker, et rechercher, un certain " ; Values" ; , qui peut être n'importe quelles données, habituellement des indicateurs aux dossiers. Des valeurs sont indiquées par le " ; Keys" ;. L'identification de noeuds et les clefs peuvent avoir son " ; distance" ; calculé juste comme entre deux identifications de noeud. Par conséquent tout " de noeud ; A" ; peut calculer la distance au " de deux clefs ; K1" ; et " ; K2" ; et décider lesquels est plus près de se (au " ; A" ;) que l'autre clef. De la même manière, un " de noeud ; A" ; peut décider lequel du " de deux clefs ; K1" ; et " ; K2" ; est plus près d'un autre " connu de noeud ; B" ; que l'autre clef. " ; A" ; et " ; B" ; conviendra dans ce calcul.

Pour stocker une valeur, l'entreposeur que le noeud calculera la clef correspondante (habituellement un gâchis calculé à partir de la valeur elle-même), recherchent le réseau dans plusieurs étapes, chaque étape trouvant les noeuds qui sont plus près de la clef désirée que dans des étapes précédentes, jusqu'aux noeuds les plus étroits à cette clef peut être déterminé. Alors elle stockera la valeur en tout de ces noeuds. -->

Détails de système

Les réseaux peer-to-peer de partage de fichiers de première génération, tels que Napster, se sont fondés sur un fichier central pour coordonner recherchent sur le réseau. Les réseaux p2p de deuxième génération, tels que Gnutella, ont employé l'inondation pour localiser des dossiers, recherchant chaque noeud sur le réseau. Le d'utilisation de réseaux p2p de troisième génération a distribué les tables de brouillage pour rechercher des dossiers dans le réseau. Le a distribué les endroits de ressource de magasin des tables de brouillage dans tout le réseau. Un critère important pour ces protocoles localise les noeuds désirés rapidement.

L'algorithme de Kademlia est basé sur le calcul du " ; distance" ; entre deux noeuds. Cette distance est calculée comme exclusivité de ou des deux IDs de noeud, prenant le résultat comme nombre de nombre entier de . Les clefs et les identifications de noeud ont le mêmes format et longueur, ainsi la distance peut être calculée parmi eux exactement de la même manière.

Ce " ; distance" ; n'a rien faire dans des conditions géographiques, mais indique la distance dans la marge d'identification. Ainsi elle peut et se produit que, par exemple, un noeud d'Allemagne et un d'Australie sont " ; neighbours" ;.

Chaque itération de recherche de Kademlia vient un bit plus près de la cible. Un réseau de base du Kademlia avec les noeuds 2n prendra seulement des mesures du n pour trouver ce noeud.

Tableaux de cheminement

Les tables de cheminement de Kademlia se composent d'une liste de pour chaque peu de l'identification de noeud (par exemple si une identification de noeud se composent de 128 bits, un noeud gardera 128 telles listes de .) Une liste a beaucoup d'entrées. Chaque entrée dans une liste de contient les données nécessaires pour localiser un autre noeud. Les données dans chaque entrée de la liste de sont typiquement l'IP address de , le gauche, et l'identification de noeud de d'un autre noeud. Chaque liste de correspond à une distance spécifique du noeud. Les noeuds qui peuvent entrer dans la liste nth doivent avoir un peu différent de nth de l'identification du noeud ; le premier peu n-1 de l'identification de candidat doit assortir ceux de l'identification du noeud que ceci signifie qu'il est très facile de remplir la première liste de car 1/2 des noeuds dans le réseau sont les candidats lointains. La prochaine liste de peut employer seulement 1/4 des noeuds dans le réseau (un bit plus étroit que le premier), etc.

Avec une identification de 128 bits, chaque noeud dans le réseau classifiera d'autres noeuds dans une de 128 distances différentes, une distance spécifique par peu.

Pendant que des noeuds sont produits sur le réseau, ils sont ajoutés aux listes de . Ceci inclut le magasin et les opérations de récupération et même lorsqu'aidant d'autres noeuds à trouver une clef. Chaque noeud produit sera considéré pour l'inclusion dans les listes de . Par conséquent la connaissance qu'un noeud a du réseau est très dynamique. Ceci maintient le réseau constamment mis à jour et ajoute la résilience aux accidents ou aux attaques.

À la littérature de Kademlia, les listes de sont mentionnées comme les k-seaux de . le k est un nombre large de système, comme 20. Chaque k-seau est une liste de ayant jusqu'aux entrées de k à l'intérieur. tous les noeuds sur le réseau auront les listes de contenir jusqu'à 20 noeuds pour un peu particulier (une distance particulière de se).

Puisque les noeuds possibles pour chaque k-seau de diminue rapidement (parce qu'il y aura très peu de noeuds qui sont cette fin), les k-seaux inférieurs peu traceront entièrement tous les noeuds dans cette section du réseau. Puisque la quantité d'identification possible est beaucoup plus grande que n'importe quelle population de noeud peut jamais être, certains des k-seaux correspondant aux distances très courtes resteront vides.

Considérer le réseau simple vers la droite. Il y a sept noeuds ; les petits cercles au fond. Le noeud est à l'étude le noeud six (binaire 110) dans le noir. Il y a trois k-seaux de dans ce réseau. Les noeuds mettent à zéro, on et deux (binaire 000, 001, et 010) sont des candidats pour le premier k-seau de . Le noeud trois (binaire 011) ne participe pas au réseau. Dans le deuxième k-seau de , des noeuds quatre et cinq (binaire 100 et 101) sont placés. En conclusion, le troisième k-seau de peut seulement contenir le noeud sept (binaire 111). Chacun des trois k-seaux de est enfermé dans un cercle gris. Si la taille du k-seau de était deux, alors le premier seau du 2 pourrait seulement contenir deux des trois noeuds.

On le sait que les noeuds qui ont été reliés pendant longtemps dans un réseau demeureront probablement reliés pendant longtemps à l'avenir. En raison de cette distribution statistique, Kademlia choisit des noeuds longtemps reliés pour demeurer entreposés dans les k-seaux. Ceci augmente le nombre de noeuds valides connus à un moment donné à l'avenir et prévoit un réseau plus stable.

Quand un k-seau de est plein et un nouveau noeud est découvert pour ce k-seau de , le noeud moins récemment vu dans le k-seau de est cinglé. Si le noeud s'avère encore vivant, le nouveau noeud est endroit dans une liste secondaire ; une cachette de rechange. La cachette de rechange est employée seulement si un noeud dans le k-seau de cesse la réponse. En d'autres termes : de nouveaux noeuds sont employés seulement quand des noeuds plus anciens disparaissent.

Messages de gestion de protocole

Kademlia a quatre messages.

PING - employé pour vérifier qu'un noeud est encore vivant.
MAGASIN - paires des magasins a (clef, valeur) dans un noeud.
FIND_NODE - Le destinataire de la demande renverra les noeuds de k dans des ses propres seaux qui sont les plus étroits à la clef demandée.
FIND_VALUE - comme FIND_NODE, mais si le destinataire de la demande a la clef priée dans son magasin, lui renverra la valeur correspondante.

Chaque message de RPC inclut une valeur aléatoire de l'initiateur. Ceci s'assure que quand la réponse est reçue il correspond à la demande précédemment envoyée.

Localiser des noeuds

Les consultations de noeud peuvent procéder asynchrone. La quantité de consultations simultanées est dénotée par le α et est en général trois. Un noeud lance une demande de FIND_NODE par la question aux noeuds de k dans des ses propres k-seaux de qui sont les plus étroits à la clef désirée. Quand ces noeuds réceptifs reçoivent la demande, ils regarderont dans des leurs k-seaux de et renverront les noeuds les plus étroits du k à la clef désirée qu'ils savent. Le demandeur mettra à jour des résultats énumèrent avec les résultats (identification de noeud) qu'il reçoit, gardant le k le meilleur (les noeuds de k qui sont plus près de la clef recherchée) qui répondent aux questions. Alors le demandeur choisira ces meilleurs résultats de k et fournira la demande à eux, et réitèrent ce processus à plusieurs reprises. Puisque chaque noeud a une meilleure connaissance de ses propres environnements que n'importe quel autre noeud a, les résultats reçus seront d'autres noeuds qui sont chaque fois de plus en plus près de la clef recherchée. Les itérations continuent jusqu'à ce qu'on ne retourne aucun noeud qui sont plus étroit que les meilleurs résultats précédents. Quand les itérations s'arrêtent, les meilleurs noeuds de k dans la liste de résultats sont ceux dans le réseau entier qui sont les plus proches de la clef désirée.

L'information de noeud peut être augmentée avec des temps de voyage aller-retour de , ou le RTT . Cette information sera employée pour choisir un détail de temps mort pour chaque noeud consultant. Quand une question chronomètre dehors, une autre question peut être lancée, des questions jamais surpassing de α en même temps.

Localiser des ressources

L'information est située près de le tracer à une clef. Un gâchis est typiquement employé pour la carte. Les noeuds d'entreposeur auront l'information due à un message précédent de MAGASIN. Localiser une valeur suit le même procédé que localisant les noeuds les plus étroits à une clef, à moins que la recherche termine quand un noeud a la valeur demandée dans son magasin et renvoie cette valeur.

Les valeurs sont stockées à plusieurs noeuds (k de eux) pour tenir compte pour que des noeuds viennent et pour disparaissent et pour avoir toujours la valeur disponible dans un certain noeud. fournir la redondance. Chaque certaine heure, un noeud qui stocke une valeur explorera le réseau pour trouver les noeuds de k qui sont proches de la valeur principale et pour replier la valeur sur eux. Ceci compensent des noeuds disparus. En outre, pour les valeurs populaires qui pourraient avoir beaucoup de demandes, la charge dans les noeuds d'entreposeur est diminuée en ayant un magasin de chien d'arrêt cette valeur dans un certain noeud près, mais dehors de, le k le plus étroit. Ce nouveau stockage s'appelle une cachette. De cette façon la valeur est plus lointaine stocké et plus loin à partir de la clef, selon la quantité de demandes. Ceci permet à des recherches populaires de trouver un entreposeur plus rapide. Puisque la valeur est retournée des noeuds plus loin à partir de la clef, ceci allège le " possible ; spots" chaud ;. La mise en antémémoire des noeuds laissera tomber la valeur après un certain temps selon leur distance de la clef. Quelques réalisations (par exemple Kad) n'ont pas la réplique ni la mise en antémémoire. Le but de ceci est d'enlever la vieille information rapidement du système. Le noeud qui fournit le dossier régénérera périodiquement l'information sur le réseau (exécuter NODE-LOOKUP et STOCKER les messages). Quand tous les noeuds ayant le dossier vont en différé, personne ne régénérera ses (sources et mots-clés) de valeurs et l'information disparaîtra par la suite du réseau.

Jointure du réseau

Un noeud qui voudrait joindre le filet doit d'abord passer par un processus du circuit fermé . Dans cette phase, le noeud doit connaître l'IP address et le port d'un autre noeud (obtenu à partir de l'utilisateur, ou à partir d'une liste stockée) qui participe déjà au réseau de Kademlia. Si le noeud de amorçage n'a pas encore participé au réseau, il calcule un numéro d'identité Aléatoire du qui est censé ne pas être déjà assigné à n'importe quel autre noeud. Il emploie cette identification jusqu'à laisser le réseau.

Le noeud de jointure insère le noeud de circuit fermé dans un de ses k-seaux de . Le nouveau noeud fait alors un NODE_LOOKUP de sa propre identification contre le seul l'autre noeud qu'il sait. Le " ; individu-lookup" ; peuplera les k-seaux du d'autres noeuds avec la nouvelle identification de noeud, et peuplera les nouveaux k-seaux de noeud avec les noeuds dans le chemin entre lui et le noeud de circuit fermé. Après ceci, le nouveau noeud régénère tous les k-seaux de plus loin loin que le k-seau où le noeud de circuit fermé tombe dedans. Ceci régénèrent est juste une consultation d'une clef aléatoire qui est dans cette marge du k-seau de .

Au commencement, les noeuds ont un k-seau de . Quand le k-seau vient complètement, il peut être dédoublé. La fente se produit si la gamme des noeuds dans le k-seau de enjambe les noeuds possèdent l'identification (valeurs aux left and right dans un arbre binaire). Kademlia détend même cette règle pour l'un " ; le nodes" le plus étroit ; le k-seau de , parce qu'en général un seau simple correspondra à la distance où tous les noeuds qui sont les plus proches de ce noeud sont, ils peut être plus que k, et nous voulons qu'il les sache tous. Il peut s'avérer qu'un sous-arbre binaire fortement non équilibré existe près du noeud. Si le k est 20, et il y a les noeuds 21+ avec un " de préfixe ; . " xxx0011 ; et le nouveau noeud est " ; xxx0000 11001 ", le nouveau noeud peut contenir les k-seaux multiples de pour les autres noeuds 21+. C'est de garantir que le réseau sait tous les noeuds dans la région la plus étroite.

Consultations accélérées

Kademlia emploie un XOR métrique de pour définir la distance. Deux identifications de noeud ou une identification de noeud et une clef sont XORed et le résultat est la distance entre elles. Pour chaque peu, la fonction de XOR renvoie zéro si les deux bits sont égale et une si les deux bits sont différents. Les distances métriques de XOR tiennent la propriété triangulaire : La distance du " ; A" ; au " ; B" ; est plus court que (ou égale) la distance du " ; A" ; au " ; C" ; plus la distance du " ; C" ; au " ; B" ;.

Le XOR métrique permet à Kademlia de prolonger des tables de cheminement au delà de peu simple. Les groupes de peu peuvent être endroit dans des k-seaux de . Le groupe de peu se nomment un préfixe. Pour un préfixe du m-peu de , il y aura les k-seaux du 2m-1. Le k-seau absent de est une autre prolongation de l'arbre de cheminement qui contient l'identification de noeud. Un préfixe du m-peu de ramène le nombre maximum des consultations du log2 n au log2b n . Ce sont des valeurs maximum du et la valeur moyenne sera loin moins, augmentant la possibilité de trouver un noeud dans pour posséder le k-seau de qui partagent plus de peu que juste le préfixe avec la clef de cible.

Les noeuds peuvent employer des mélanges des préfixes dans leur table de cheminement, telle que le réseau de Kad de employé par le EMule . Le réseau de Kademlia a pu même être hétérogène dans des réalisations de table de cheminement. Ceci compliquerait juste l'analyse des consultations.

Signification scolaire

Tandis que le XOR métrique n'est pas nécessaire pour comprendre Kademlia, il est critique dans l'analyse du protocole. L'arithmétique de XOR constitue un groupe et l'algèbre abstraite permet l'analyse fermée. D'autres protocoles et algorithmes de DHT ont exigé la simulation ou ont compliqué l'analyse formelle afin de prévoir le comportement et l'exactitude de réseau. Using des groupes de peu comme information de cheminement simplifie également les algorithmes.

Utilisation dans des réseaux de partage de fichiers

Kademlia est employé dans des réseaux du partage de fichiers . En faisant des recherches par mot-clé de Kademlia, on peut trouver des informations dans le réseau de dossier-partage ainsi il peut être téléchargé. Puisqu'il n'y a aucun exemple central pour stocker un index des dossiers existants, cette tâche est divisée même parmi tous les clients : Si un noeud veut partager un dossier, il traite le contenu du dossier, calculant à partir de lui un nombre (gâchis ) qui identifiera ce dossier dans le réseau de dossier-partage. Hache et les IDs de noeud doivent être de la même longueur. Elle recherche alors plusieurs noeuds dont l'identification est proche du gâchis, et fait stocker son propre IP address à ces noeuds. elle s'édite comme source pour ce dossier. Un client de recherche emploiera Kademlia pour rechercher le réseau le noeud dont l'identification a la plus petite distance au gâchis de dossier, puis recherchera la liste de sources qui est stockée dans ce noeud.

Puisqu'une clef peut correspondre à beaucoup de valeurs, par exemple beaucoup de sources du même dossier, chaque noeud de stockage peuvent avoir l'information différente. Puis, les sources sont demandées à tous les noeuds de k près de la clef.

Le gâchis de dossier est habituellement obtenu à partir d'un lien particulièrement formé d'Internet trouvé ailleurs, ou inclus dans un dossier d'indexation obtenu à partir d'autres sources.

Des recherches de nom de fichier sont mises en application using les mots-clés que le nom de fichier est divisé en ses mots constitutifs. Chacun de ces mots-clés est haché et stocké dans le réseau, ainsi que le gâchis correspondant de nom de fichier et de dossier. Une recherche implique de choisir un des mots-clés, d'entrer en contact avec le noeud d'une identification la plus proche de ce gâchis de mot-clé, et de rechercher la liste de noms de fichier qui contiennent le mot-clé. Puisque chaque nom de fichier dans la liste a son gâchis joint, le dossier choisi peut alors être obtenu de la manière normale.

Réalisations

Clients publics employant l'algorithme de Kademlia (ces réseaux sont incompatibles entre eux) :
Réseau d'Overnet : Overnet (intégré dans eDonkey (plus disponible) et MLDonkey ). Avec la bibliothèque de C. de KadC pour manipuler son Kademlia est disponible.
Réseau de Kad de : EMule v0.
RevConnect - v0.
BitTorrent DHT Mainline : BitTorrent v4.59+, KTorrent et beaucoup Libtorrent - basé : Ils tous partagent un DHT basé sur une exécution de l'algorithme de Kademlia, pour les torrents trackerless.
Azureus DHT v 2.0 + : utilisé pour le décentralisé BitTorrent cheminement de et divers autres dispositifs ; différent du BitTorrent DHT Mainline.
Mojito - une bibliothèque de Java Kademlia écrite pour le projet de LimeWire . Mojito est employé dans LimeWire pour fournir l'appui de DHT pour BitTorrent aussi bien que pour augmenter le protocole de Gnutella . Voir la classe connecter la documentation pour plus d'information.
Khashmir - exécution de python de Kademlia
Plan-x - exécution de Java.
SharkyPy - une exécution d'une table de brouillage distribuée par Kademlia.

Voir également

Réseau associatif
Corde de (DHT)
Tapisserie de (DHT)
Pâtisserie de (DHT)

.

Random links:Emathion | Bridgewater (village), New York | 1709 au Canada | Gledhow | Ostara (bande) | Kademlia