Algoritmi per protocolli peer-to-peer Reti non strutturate: casi di studio Livio.torrero@polito (Livio.torrero@polito.it) 09/2009
Napster: introduzione Livio Torrero - Politecnico di Torino Nato come applicativo per lo scambio di file musicali Nel 1999 le major disocgrafiche fanno causa a Napster => il bacino di utenza decolla 13,6 milioni di utenti nel febbraio 2001 Nel settembre 2001 viene ordinata la chiusura di Napster Napster si converte in servizio a pagamento Nel 2002 chiude 2
Funzionamento di Napster Quando un nodo entra nell infrastruttura si registra presso il server Upload della lista delle risorse gestite Peer Upload Server centrale Quando un nodo cerca una risorsa fa un lookup sul server centralizzato Peer query answer Server centrale In base ai risultati ottenuti il peer si connette a un altro peer per scaricare la risorsa Peer Download Peer Server centrale 3
Gnutella introduzione Livio Torrero - Politecnico di Torino Gnutella è un client p2p sviluppato nel 2000 da Justin Frankel e Tom Pepper di Nullsoft, appena acquisita da AOL Pare sia stato scritto in 14 giorni In origine il codice sorgente doveva uscire in formato GPL Tuttavia attraverso tecniche di reverse-engineering sono stati sviluppati numerosi cloni open-source Limewire è software open-source che supporta la rete Gnutella 4
Gnutella: evoluzione Livio Torrero - Politecnico di Torino Originariamente tutti i nodi in Gnutella erano uguali I peer erano detti servent Tuttavia questo approccio non scalava Fare un flooding su tutti i nodi della rete non funziona Bisogna tenere conto del fatto che non tutti i nodi sono uguali Per meglio tenere conto delle caratteristiche della rete Gnutella è stato riorganizzato Il risultato è una rete gerarchica a 2 livelli 5
Gnutella(limewire): rete gerarchica (1/2) Ultrapeer Fa da proxy per i nodi Sono loro ad effettuare le ricerche Impediscono che i nodi siano investiti dal traffico ad alta banda che investe gli Un nodo deve avere una connessione Internet veloce non bloccata da firewall Deve accettare connessioni TCP da nodi esterni Deve essere possibile mandare pacchetti UDP entranti limewire => upload 10kB/s, download 20kB/s 6
Gnutella(limewire): rete gerarchica (2/2) Nodi Es: nodi con connessioni dialup Sono fuori dall overlay (si connettono agli come client) Non accettano connessioni Gnutella Cercano un a cui collegarsi il prima possibile Dipendono dall Se un nodo vuole diventare, prima si disconnette dalla rete per ripresentarsi tentando di diventare Un nodo dovrebbe restare per almeno un ora 7
Perché una rete a 2 livelli? La divisione tra e nodi normali permette solo ai nodi migliori entrare nell overlay Gli host lenti rallenterebbero le prestazioni dell intero sistema se posti nell overlay L overlay diventa più piccolo ma più funzionale Dal punto di vista dei nodi gli ultra-peer sono dei server 8
Gnutella: overlay discovery Un nodo per accedere all overlay Gnutella deve conoscere almeno un Le modalità con cui questo avviene non sono oggetto di Gnutella Cache, well known nodes Come scoprire altri nodi? Pong caching Messaggio Ping (richiesta): chi lo riceve risponde con un messaggio Pong Messaggio Pong (risposta): contiene le informazioni relative a un computer (IP + porta) Solo gli mandano i pong Quando un riceve dei messaggi pong li mette nella sua pong cache Solo gli hanno la pong cache Quando un riceve un messaggio ping risponde con tutti i pong nella sua cache 9
Gnutella handshake Livio Torrero - Politecnico di Torino Ogni connessione Gnutella comincia con un handshake Un nodo accede all overlay con un messaggio GNUTELLA CONNECT che apre un socket TCP I messaggi di handshake sono costituiti da gruppi di header di formato simile ad HTTP (testo ASCII) Ogni header è nella forma <nome>:<valore1>,<valore2> Ogni gruppo inizia con una greeting line che identifica il messaggio Handshake a 3 vie: Host che si connette CONNECT OK Host che riceve la connessione OK 10
Esempi di handshake Gnutella(1/3) Un nodo si connette a un UltraPeer (connessione generica) 0.6 è la versione corrente di Gnutella GNUTELLA connect/0.6 X-Ultrapeer=false GNUTELLA/0.6 200 OK Un nodo dietro un NAT si connette a un Listen-IP indirizzo del peer che manda messaggio Remote-IP indirizzo nodo visto da UltraPeer GNUTELLA connect/0.6 X-Ultrapeer=false NAT 217.254.98.153 GNUTELLA/0.6 200 OK Listen-IP:68.37.233.44:9376 Remote-IP: 217.254.98.153 11
Esempi di handashake Gnutella (2/3) Un si connette a un GNUTELLA connect/0.6 X-Ultrapeer=true GNUTELLA/0.6 200 OK Un nodo si connette a un che rifiuta la connessione L deve fornire peer alernativi GNUTELLA connect/0.6 Nodo Gnutella generico GNUTELLA/0.6 service unavailable X-Try-Ultrapeers:68.37.233.44:9376, 172.195.105.218:3988 12
Esempi di handshake Gnutella(3/3) Un nodo si connette a un che accetta e fornisce indirizzi alternativi È consigliato fornire altri a cui connettersi Limewire ne fornsice 10 GNUTELLA connect/0.6 Nodo Gnutella generico GNUTELLA/0.6 200 OK X-Try-Ultrapeers:68.37.233.44:9376, 172.195.105.218:3988 13
Da nodo a I nodi decidono da soli se connettersi alla rete come Ultra peer o nodi normali Un nodo DEVE restare per un ora 1h Poi può tentare di connettersi a un come? connect Se l lo rifiuta, torna per un altra ora? (!) Refuse connection Leaf for 1h connect 14
I Connection Slot: organizzazione delle connessioni in Gnutella Un connection slot rappresenta la necessità di un nodo di creare una connessione verso un altro o la disponibilità ad accettare le connessioni Un nodo ha 3 connection slot verso gli Ultrapeer Creerà fino a 3 connessioni verso diversi Un si connetterà con al più 32 altri questo valore è detto network degree Un ha 30 connection slot verso i nodi Un non permette a più di 30 nodi foglia di connettersi a lui 15
Lookup in Gnutella: introduzione L algoritmo di lookup è il dynamic querying Obiettivo: localizzare una risorsa con il minor numero di messaggi possibile Avvio mandando pochi messaggi Intensifica alle fine Se una risorsa è popolare la trovo subito Viene eseguito solo dagli Si articola in 3 fasi: Search our leaves Probe Query Controlled Broadcasting Il dynamic querying interagisce con il Query Routing Protocol (QRP) Obiettivo: impedire che siano inviati messaggi di lookup che non ritornerebbero risultati 16
Dynamic Querying: search our leaves L manda a tutti i suoi nodi foglia una query di lookup con TTL=1 Dopo l invio si attende per 2,4s I nodi foglia che hanno copia della risorsa risponderanno alla query TTL=1 17
Dynamic Querying: probe query L manda a tutti gli ad esso collegati una query di lookup con TTL=1 Gli Ultrapeer che hanno copia della risorsa risponderanno alla query Gli ulrapeer inoltrano la richiesta ai loro nodi Reimpostano TTL=1 Questa query serve a stimare la popolarità della risorsa Se si ottengono 150 risposte positive in tutto l algoritmo finisce TTL=1 Answer TTL=1 18
Dynamic Querying: controlled broadcasting Ogni 2.4s manda una query a uno solo degli connessi TTL=2 oppure TTL=3 a seconda del numero di risposte ottenute nella fase precedente Se si ottengono 150 risposte positive l algoritmo finisce Se trascorrono più di 200s dall inizio della ricerca l algoritmo è interrotto E una ricerca in profondità: La probe query stimava la popolarità della risorsa presso i soli vicini Il controlled broadcasting effettua una ricerca approfondita partendo da uno solo degli vicini A seconda del valore del TTL si parla di: Ricerca TTL2 Ricerca TTL3 19
Ricerca TTL2 e ricerca TTL3 Leaf 1 TTL=2 TTL=1 Ultrapeer A Ultrapeer B Ultrapeer C Leaf 2 A inizia la ricerca: manda query con TTL=2 SOLO a B B decrementa il TTL=> TTL=1 TTL<>0 => inoltra la query a TUTTI gli ad esso collegati (in figura, C è il solo connesso) C decrementa il TTL => TTL=0 TTL=0 => inoltra la query a TUTTI i ad esso collegati La TTL3 funziona nello stesso modo (TTL=3) la ricerca coinvolge un numero elevato di Limewire non usa MAI TTL>3 20
Gnutella: Query Routing Protocol Nel Dynamic Querying gli inoltravano le query ai nodi collegati Se il nodo non mantiene risorse, è inutile propagare la query Se l utente del nodo non vuole rispondere alle query, è inutile propagargli la query Il QRP a questo scopo permette al nodo di mandare all una descrizione delle risorse gestite Le informazioni sono contenute nella QRP table Inviata dopo la connessione Appositi messaggi permettono l aggiornamento delle informazioni della QRP table 21