protocoles pair à pair - polytechnique€¦ · •problème de base : –récupérer la liste des...
TRANSCRIPT
Protocoles pair à pair
Laurent Viennot
http://gyroweb.inria.fr/
Plan
• Historique :– Systèmes par diffusion
• Tables de hachage distribuées :– Chord– Kademlia (prefix routing)– Broose (de Bruijn)
• Distribution grande échelle :– BitTorrent– Avalanche
Partage de fichier
Internet
A
Index central : Napster
A
AA?
IP
Requêtes pratiques
• Fichier tel que :– nom contient Brasens– type musique– codage mp3– taille > 200 Mo
• Fichier de md4 A’ ?
Brassens
Chacun indexe ses fichiers :Gnutella v0.4
A
A?
A?
A?
A?
A?
A?
A?
IP
Solution hybride : FastTrack / Kazaa(Ultrapeers / Supernodes)
A
A?
A?
A?
A?
A?
A?
A?
IP
IP A? A
Téléchargement multiple :eDonkey
A1
A3
A2
Anonymat total : Freenet
• Tout est crypté.• Les fichiers sont cachés.• On ne sait pas ce qu’on aide à chercher, ou
même ce que l’on cache.
Insertion d’un nouveau nœud
• Règle générale :– il existe un mécanisme pour demander à un pair
l’adresse d’autre pairs,– trouver un nœud du réseau,– contacter de proche en proche d’autres nœuds
jusqu’à en trouver acceptant une nouvelleconnexion.
Insertion dans Gnutella
• Trouver un point d’entrée dans unGwebcache
• Soit un nœud accepte la connexion, soit ildonne une liste d’adresses de pairs (contactsrécents ou voisins)
• Modèle de construction du réseau par desmarches aléatoires à partir d’un sous-ensemble des nœuds...
Pairs et Super-pairs (Gnutella v0.6)
Super-pairs seulement
Indexation : survol
• Réseau logique aléatoire (Gnutella) :inondation
• Réseau structuré (DHTs) : routage• Réseau petit monde : utiliser les sommets de
grand degré
Tables de hachage distribuées(DHT)
• Espace logique K• Hachage :
– Donnée A -> f(A) dans K– Nœud u -> identifiant g(u) dans K
• Stocker A sur le nœud u tel quedist(f(A), g(u)) soit minimale
DHT
• Routage par clé :– Un nœud u se connecte aux nœuds dont
l’identifiant ressemble à g(u).– De proche en proche, on sait trouver le nœud le
tel que dist(g(u), k) soit minimale.– Similaire au routage dans Internet mais sans les
contraintes.• Difficulté : degré faible, diamètre faible,
congestion faible
IDlog N voisins
Chord (Stoica et al., 2001)
0
A
f(A)
A
A(A, IP)
Routage enO(log n)
ID
Chord (Stoica et al., 2001)
0
A
(A, IP)
Routage enO(log n)
ID + 2k ?log N voisins
f(A)
Chord : Hypercube
• Contraintes fortes sur le choix des voisins.• Requêtes exactes.• Autres solutions :
– CAN (Ratnasamy et al., 2001) : tore– Pastry (Rowstron et Druschel 2001) : hypercube– Viceroy (Malkhi et al., 2002) : papillon– D2B (Fraigniaud et Gauron, 2003) : de Bruijn
Requêtes
• Nom exact de A --> f(A) --> IP :– problème similaire au DNS : nom de machine --> IP
• Requêtes plus souples, indexer :– hash(A), IP(s)– hash(m), hash(A) pour m mot du nom de A,– tags discrétisés : hash(taille=entre 1Mo et 10Mo),A
• Orthographe approchéé / préfixe de mots ?• Requêtes numériques (intervalles) ?
Indexation par mots clé
• Problème de base :– Récupérer la liste des fichiers dont le nom
contient à la fois les mots A et B.• Gérer les collisions :
– Beaucoup de fichiers peuvent contenir un motdonné.
Optimiser la diffusion
• Autorise les requêtes partielles.• Similaire au réseaux ad hoc :
– forte dynamicité– on connaît ses voisins– on peut facilement connaître les voisins de ses voisins (Hellos)
• Contrainte : optimiser la diffusion, chaque nœud neconnaissant que ses voisins et les voisins de ses voisins.
Multipoints relais (réseau logiqueou filaire)
12
Chaque multipoint relais mde x retransmet à sonsecteur S(x,m).
On retransmet ausecteur plus sesMPRs.
Règle de retransmission (filaire)
• On retransmet si :– pas déjà reçu– reçu avec nb sauts supérieur– reçu avec même nb sauts mais
d ’un nœud plus grand
Preuve d’exhaustivité• Tout sommet à distance d de la source est
atteint en d sauts.
Approche par spanner
• Construire un sous-graphe connexe avecpeu d’arêtes.
• Ne retransmettre que sur les arêtes de cesous-graphe.
Heuristique distribuée
3
1
4
6
7 8
9
10
2
5
Heuristique distribuée
3
1
4
6
7 8
9
10
2
5
Heuristique distribuée
3
1
4
6
7 8
9
10
2
5
Heuristique distribuée
3
1
4
6
7 8
9
10
2
5
Heuristique distribuée
3
1
4
6
7 8
9
10
2
5
Preuve
• Arêtes enlevées par une de leur extrémité :e1 < … < ek.
• Le graphe privé de {e1, … , ek} resteconnexe.
• Quand x décide d’enlever ei, il reste uncycle dans son graphe à deux sauts qui necontient que des arêtes >= ei.
Multipoints relais (ad hoc)
1
2
Sélectionner unminimum de relaispour atteindre tout lemonde à deux sauts.
Règle de retransmission (ad hoc)
d
12
ab
c
Si on n’a pas déjà reçu et
on reçoit d’un MPR alors
on retransmet.
f
Filtres de Bloom
• Coder un ensemble E de n éléments x1, …, xn.• Vecteur de m bits, fonction de hachage h.• Mettre à 1 les bits en positions h(x1), …,
h(xn).• Pour tester si x appartient à E :
– Si le bit h(x) vaut 0 alors non.– Si le bit h(x) vaut 1 alors oui avec une possibilité
de « faux positif ».
• Pour diminuer les faux positifs :– Augmenter m.– Utiliser plusieurs fonctions de hachage h1,…,hf:
• Tous les bits en positions h1(xi),…,hf(xi) sont mis à1 pour chaque xi.
• Pour tester l’appartenance de x à E : si l’un des bits en position h1(x),…,hf(x) est à 0 alors x n’est pas dans E.
Utilisation des filtres de Bloom
• Coder un ensemble quand l’espace doit êtreoptimisé au maximum.
• L’impact des faux positifs est faible quandils sont peu fréquents.
• Typiquement : m = 8n bits pour uneprobabilité de faux positif de 0,02.
Diffusion optimisée par filtre deBloom (Gnutella v0.6)
• Chaque super-pair code la liste des mots clédes fichiers qu’il indexe dans un filtre deBloom B0.
• Chaque super-pair échange son filtre avecses voisins.
• Une requête de TTL 1 n’est passée qu’auxvoisins dont le filtre indique la présence desmots de la requête.
Diffusion plus large
• Chaque super-pair calcule le filtre de Bloom B1de ses mots et de ceux de ses voisins etl’échange avec ses voisins.
• Une requête de TTL 2 n’est passée qu’auxvoisins dont le filtre B1 contient les mots de larequête.
• Ainsi de suite pour B2, B3, …• Calcul de l’union de filtres ? de l’intersection ?
Analyse
• Et pourquoi pas n hashs de m/n bits ?– Prob. faux positif ≤ (1/2)m/n x n ≤ cte pour m/n = O(log n) ≤ 1/n pour m/n = 2 log n
• Filtre de Bloom avec f fonctions :– Prob. bit i reste à 0 : p = (1 - 1/m)fn
≈ exp (-fn/m)– Prob. faux positif = (1 - p)f
– Optimal pour p=1/2, f=m/n ln 2 : prob. faux positif =(1/2)f=0,6185m/n
≤ cte pour m/n = O(1)
Variantes
• f filtres de m/f bits avec 1 fonction par filtre:– prob bit i à zéro p’=(1 - f/m)n ≈ exp (-fn/m)– prob. faux positif de tous les filtres = prob. bit i à zéro f fois = (1-p’)
• Filtre compressé de taille compressée m :– Filtre de taille m’ gzippé– p = 1/2 est le plus mauvais (pas compressible)– prendre une seule fonction de hachage avec m’
assez grand
Intégrité des données
• Pour vérifier l’intégrité des données,l’identifiant d’un fichier est construit parhachage du contenu du fichier par unefonction cryptographiquement sûre (md5 ousha1).
• Une fois le fichier récupéré, on vérifie quele hachage du contenu donne le bon résultat.
Téléchargement multiple
• Le fichier est décomposé en n blocs.• On calcule le hash hi de chaque bloc i.• L’identifiant du fichier est le hash de
h1…hn.• Si un pair donne un mauvais bloc, on le
« blacklist ».
Tiger tree
• Calculer les hashs de chaque paquet.• Les hashs sont calculés en arbre.• Si un hash est faux, on sait retrouver en
parcourant l’abre le paquet problématique.
• Hash de tous les paquets :– 16-20 octets de hash pour 1000 octets de
données,– soit 2 % d’overhead.
Some difficult points for DHTs
• Resilience to node failure• Load balancing:
– hotspots of requests (many requests for the same key)
– hotspots of collisions (many associations with the same key)
• Physical proximity:– overlay vs physical network
Kademlia: a loose DHT• Maymounkov & Mazières (IPTPS ’02)• Practical : used by Overnet and Emule.• The key space is split among nodes in a loose
manner.• A <key, value> association is stored on the k
closest nodes (for the xor metric) to the keywhen it is inserted.
• It is re-published every hour.• The probability that k nodes leave the network
within an hour is small.
Kademlia
• « Prefix routing » : find nodes with longerand longer common prefix with the searchedkey (hypercube topology as Pastry).
• Xor distance : u xor v gets smaller as u and vshare a longer common prefix.
• Redundancy:– a key, value association is stored on k nodes,– a bucket of k neighbors is maintained rather than
one contact.
Kademlia routing tables
10
0
0
1
1
u=0110…
0
k closest nodes to u
….….
0 1
1
Trie of node identifiers
1
1...
00...
000...
0111...
Routing table: - Bucket Bi(u) contains k nodes with prefix u[1,i-1] u[i] - log N + O(1) buckets
u=0110…
10
0
0
1
1
1
00...
000...
0111...
1...
Kademlia lookup: find the kclosest nodes to w
u=0110...w=1011...
B1(u)
u1=11...
B2(u1) 10...u2=1010...
B4(u2) 1011...
B1(u) U B2(u1) U B4(u2) … k closest nodes to w
Lookup bucket sorted by distance to w
The lookup succeedsif at least one nodeper bucket answers.
Buckets are lasily maintained.
Faster lookups
• Match b more bits at each step• (log N) / b steps• Routing tables of size k (2b - 1)/ b log N
(the ID trie is 2b-ary instead of binary)• b = log log N gives :
– log N / log log N steps lookups– k log2 N / log log N contacts per node
Can we do the same thing withDe Bruijn topology ?
• De Bruijn topology : logarithmic diameter withconstant degree.
• We would expect :– log N steps lookups with O(k) contacts per node– or log N / log log N steps with O(k log N) contacts
(a factor log N / log log N on routing tables sizecan be gained over hypercube)
• Asymetry problem :– asymetric directed topology– how to re-enforce bucket accuracy ?
Route from u=010 to w=011: u --> w[n] u[1,n-1]=1u[1,n-1] --> …
w=011
Route from u=010 to w=011: u --> 1u[1,n-1] --> 11u[1,n-2] --> 011
101
u=010
De Bruijn Graph
001
u
Nodes are n bits strings, N=2n nodes.
1u[1,n-1]
0u[1,n-1]
R1
R0
110
Route from u=010 to w=011: u --> 1u[1,n-1] --> 11u[1,n-2]
Right shifting arcs:
01
101
010
1
0
De Bruijn Graph
00
11
10
000
111
011 110
001 100N=2
N=22 N=23
Left or right shifting
• Reversing the arcs gives the similarly defined graph withleft shifting arcs.
• De Bruijn DHTs :– Abraham, Awerbuch, … IPDPS ’2003 (left)– Fraigniaud & Gauron 2003 (left)– Kaashoek & Karger IPTPS ’2003 (left)– Naor & Wieder SPAA ’2003 (right reversed)
• Strict topology control (a node must inform neighborsbefore leaving).
Broose topology
u
R1(u)={k closest nodes to 1u[1,n-1]}
R1
R0
Right buckets:
R0(u)={k closest nodes to 0u[1,n-1]}
0010...
0101...
0100...1011...
11100...
11101...
1101...
N=7, k=2
N nodes have random n bits IDs with n >> log N
A node u has identifier u[1,n]
Broose right lookup
• u looks for the k closest nodes to key w• Estimate the hop distance d from u to nodes
storing w• Contact nodes with same prefix as :
– u[1,n] (u itself)– w[d] u[1,n-1] (vd-1 found in Rw[d](u))– w[d-1,d] u[1,n-2] (vd-2 found in Rw[d-1](vd-1))– ….– w[1,d] u[1,n-d] (v0 found in Rw[1](v1))
Broose right lookup
u=0010...
0101...
0100...1011...
11100...
11101...
1101...
N=7, k=2
u=0010… looks for w=11000...
Lookup bucket :
R0(u)
0101… (2 hops)
0010… (2 hops)vd = u = 0010… (3 hops)
d=3 R1(v2)
v2=
1101… (1 hop)1011… (1 hop)
R1(v1)
v1=
11101… (0 hops)11100… (0 hops)v0=
v0 is among the k closest nodes to w[1,d]u[1,n-d] = v2
v1 =v0 =
Sketch of proof• l = log N / ck (c=7/2)• There exist almost surely k nodes with prefix
w[1,l] for any bit sequence w:– Let Nx be the number of nodes at xor distance less
than 2n-l = ck 2n / N from w.– E[Nx] = ck and P[Nx < k] = O(pc
k). (Chernoff)• vi begins with w[1+i,d] w.h.p. :
– vi+1 is among the k closest nodes to w[i]vi[1,n-1]which begin with w[i,d] by recurrence.
• v0 has prefix w[1,l] w.h.p. (or w[1,l+1]…)
End up with a brother lookup
0010...
0101...
0100...1011...
11100...
11101...
1101...
N=7, k=2
v0
B(u)={7k closest nodes to u}
If v0 is among the k closest nodes to wthen B(v0) contains the k closestnodes to w with high probability.
Brother bucket B(v0)
w=11000...
B(v0)
Broose left lookup• Left bucket
– L(u) = {v | u is among the k closest nodes. to u[1]v[1,n-1]}. = {v | u is in Ru[1](v)}
• Query only the k’’ < k closest nodes tou[d-i+1,d]w[1,n-i]
Symmetric Broose
• Shift by b bits instead of 1.• Right lookups re-enforce left buckets• Left lookups re-enforce right buckets• |R(u)| = 2b k’ (k/2 < k’ < k)• |L(u)| = 2b k’ on average• Probability of both lookups failure = O(pk)• b=4, k=20 and k’’ = 9 -> k’ = 15• Broose : 620 contacts• Kademlia : 1500 contacts
Simulations
Proof asumption:One of the k closest nodes (still alive) to some reference
ID answers (kind of bucket accuracy).Simulation model:
N nodes have initially accurate buckets.rN nodes die and rN new nodes enter the network.A node knows previously arrived nodes and a later node
v with probability (rN - a) / rN where a is the arrivalposition of v.
Simulations : right lookupfailures
r
Percentage of request failure
b = 4 r = 0.3 --> k’ = 10
Simulations : left lookup failuresPercentage ofrequest failure
r
b = 4 r = 0.3 et k’’ = 9 --> k’=15
Hotspots
• Request hotspots:– Cache on last unaware node.
• Key collision hotspots:– associations ares sorted by
value x.k closest nodes to wstore the A firstassociations with key w.
x[0]=0
x[0]=1
0w[1,l]
1w[1,l]
01w[1,l]
11w[1,l]
x[1]=0
x[1]=1
Conclusion
• What’s new :– De Bruijn topology adapted to give resilience to
node failure.– Symetric De Bruijn topology.– Key collision hotspot balancing.
• It can easily embed binary trees.
Simple left lookup
• L(u) = 7k closest nodes to u[2,n-1]0• Contact nodes with same prefix as :
– u[1,d] w[1,n-d] (u itself)– u[2,d] w[1,n-d-1] (vd-1 found in L(u))– ….– u[d] w[1,n-d-1] (v1 found in L(v2))– w[1,n] (v0 found in L(v1))
• Shifting b bits at a time : |L(u)| = 3.5 2b k .For N < 109 , log N / log log N = 4 or 5
Distribution de contenu
• Broadcast (streaming, délai court) :– Routage : arbre au niveau des routeurs.– Applicatif : arbre au niveau des clients.
• Optimisation : utiliser plusieurs arbres.– Routage : liens dans plusieurs arbres ->
network coding.– Applicatif : ex. SplitStream :
• Degré borné.• Un client est nœud interne dans au plus un arbre.
• Distribution d’un fichier :– Edonkey :
• Demander le bloc le plus rare.• Donner à ceux qui nous ont donné auparavant.
– BitTorrent :• Un seul fichier en jeu.• Tit-for-tat itératif (un prêté pour un rendu).
– Rateless Peer-to-peer (Digital Fountain) :• Turbo/Tornado code randomisé de blocs, une source
produit une séquence de blocs différents pourchaque nœud.
– Avalanche :• Chaque nœud donne une combinaison linéaire des
blocs qu’il possède.
Rateless/On-line codes• Message de n blocs.• Générer des blocs codés :
– Tirer un degré i selon une distribution p1,…,pF (F=O(1)).– Choisir i blocs aléatoirement uniformément.– Le bloc codé est le xor des i blocs.– Rajouter les numéros des blocs xorés.– Similaire codes Tornado (proportion fixe de blocs de degré i).
• Th: (1+e)n blocs codés permettent d’obtenir une fraction(1-d) du message en temps O(nf(d,e)) w.h.p.
• Preprocessing : n’>n/(1-d) blocs :– Th : (1+e)n blocs codés permettent d’obtenir le message en
temps O(n ln 1/e) w.h.p.
• Décodage :– Trouver un bloc codé dont tous les blocs dont il
est le xor sont connus sauf 1.– Le bloc inconnu est obtenu en xorant le bloc
codé avec les i-1 blocs connus.• Ordre de décodage : exploration du graphe
biparti blocs codés / blocs du message :– Trouver un bloc codé de degré 1, calculer le
bloc associé et retirer toutes les arêtes de cebloc associé.
– Travailler sur le sous-graphe des sommets à 2lsauts d’un bloc à décoder suffit (l = O(1)).
• Valeurs pratiques : F=2114, d=.005, e=.01,k=3 ((1+kd)n blocs au preprocessing).
Variante(avec homomorphic hashing)
• Les blocs sont des vecteurs de nombresentiers modulo q (log q = 256).
• On utilise l’addition modulo q plutôt que lexor (et la soustraction pour le décodage).
• Hash d’un bloc : h(B) = ΠgiBi mod p où les
gi sont des entiers modulo p (log p = 1024).• Remarque : h(xA+yB) = Πgi
xAi+yBi mod p =h(A)xh(B)y.
• Attaque possible : blocs codés valides maisredondants.
Rateless peer-to-peer
• Les sources initialisent le générateur denombres aléatoires en fonction del’identifiant du nœud à qui elles donnent.
• Les blocs donnés à deux nœuds différentsont donc peu de chances d’être redondants.
• Cependant, les non sources ne produisentpas de nouveaux blocs codés.
Avalanche
• Les blocs sont des vecteurs d’éléments d’uncorps fini à 216 éléments (GF(216)) :– Construit sur les entiers modulo 2.– a supposée racine de X16+X15+…+1=0.– L’ensemble des puissances de a plus 0 forme un
corps de 216 éléments.– a16+a15+…+1=0 implique que tout puissance de
a s’écrit comme une somme de puissances de ad’exposant < 16 qu’on peut coder sur 16 bits.
Protocole
• Chaque nœud donne une combinaisonlinéaire des blocs qu’il possède :– S’il possède B1,…,Bk, il tire x1,…,xk aléatoires
dans GF(216) et donne x1B1+…+xkBk.– Si B1,…,Bk sont des combinaisons linéaires des
blocs originaux, alors x1B1+…+xkBk aussi.• Une fois n blocs récupérés, il faut inverser
une matrice n x n pour retrouver les blocsoriginaux.
Voisins intéressants
• En connaissant les combinaisons linéairespossédées par les voisins, on peut déciderquels sont les voisins intéressants.
• Mieux :– un voisin génère une combinaison aléatoire de tous
ses blocs, calcule la combinaison des blocsoriginaux correspondante et la propose,
– si elle augmente le rang de la matrice en coursalors le nœud accepte le transfert,
– sinon le voisin est considéré comme inintéressantjusqu’à ce qu’il obtienne un nouveau bloc.
• Th ? : Si un nœud possède n-1combinaisons linéaires indépendantes, alorsune combinaison linéaire aléatoire permetd’obtenir une matrice inversible avecprobabilité constante > 0.
• Intuition : La nouvelle combinaison a unecomposante nulle sur la normale àl’hyperplan des n-1des combinaisons déjàprésentes avec probabilité 1/216.
• Conséquence : tout nœud a qui possède unbloc récupéré d’un nœud b intéressepresque tout les autres nœuds (excepté a etb).