Programmation des Applications Réparties Introduction P2P
Transcription
Programmation des Applications Réparties Introduction P2P
Programmation des Applications Réparties Introduction P2P Overview des protocoles Gnutella et Bittorrent Luiz Angelo Steffenel [email protected] Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 1 Programmation des Applications Réparties Le protocole Gnutella Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 2 Gnutella ● Histoire – Gnutella est un protocole décentralisé de recherche et de transfert de fichiers – Écrit par Tom Pepper et Justin Frankel en 2000 – L'entreprise Nullsoft venait d'être achété par AOL – Pepper et Frankel disponibilisent le logiciel pendant 1 jour ● ● Steffenel Téléchargement massif du client et interdiction d'AOL Quelques jours plus tard, l'ingénierie reverse permet la création d'autres clients Programmation des Applications Réparties – Master M1 - 2007-2008 3 Gnutella - caractéristiques ● Protocole P2P pur – totalement décentralisé ● – un noeud est appelé servant - à la fois client et serveur découverte dynamique des peers et des ressources ● utilise le principe de l'inondation de requêtes – – transfert de données directement entre deux peers ● Steffenel chaque noeud répand les messages à ses voisins (sauf à la source du message) utilisation du protocole HTTP Programmation des Applications Réparties – Master M1 - 2007-2008 4 Gnutella - limitations ● Lors de son lancement en 2000, Gnutella a connu une très forte demande – ● ● Steffenel peur des implications des services centralisés comme Napster On a vite compris que le protocole avait certains problèmes de scalabilité – le modèle par inondation de requêtes fait augmente exponentiellement le nombre de messages échangés lors de l'augmentation du nombre N de noeuds connectés – plusieurs solutions viennent pallier ce problème, tout en restant compatibles avec le protocole originale Gnutella est aujourd'hui le troisième réseau P2P sur Internet Programmation des Applications Réparties – Master M1 - 2007-2008 5 Les Bases du Protocole ● ● Steffenel Gnutella utilise 5 types de messages – Ping – Pong – Push – Query – Query-Hit Additionnellement, Gnutella échange deux autres commandes – connect – ok Programmation des Applications Réparties – Master M1 - 2007-2008 6 Les Messages – L'entête ● Tous les messages partagent une entête commune de 23 octets 22 0 ● Steffenel Structure – 0-15 Identifiant de l'entête – 16 type de payload (message) – 17 TTL – 18 nombre de sauts – 19-22 taille du payload Programmation des Applications Réparties – Master M1 - 2007-2008 7 Les Messages – PING ● ● PING – sert à découvrir les autres noeuds sur le réseau – son identifiant est le 0x00 – PING n'a pas de payload Lorsque PING est reçu par un noeuds, celui-ci retransmet le PING à tous ses voisins (sauf celui qui a envoyé le PING) – ● Steffenel principe d'inondation du réseau Permet de découvrir d'autres noeuds dans le réseau Programmation des Applications Réparties – Master M1 - 2007-2008 8 Les Messages – PONG ● PONG – Message émis en réponse au message PING ● Identifiant : 0x01. Message avec un payload de 14 octets 13 0 ● Steffenel Structure – 0-1 le numéro de port d'écoute – 2-5 l'adresse IP – 6-9 le nombre de fichiers partagés – 10-13 le nombre de ko partagés Programmation des Applications Réparties – Master M1 - 2007-2008 9 Les Messages – PUSH ● PUSH – Message émis pour demander une connexion à travers un firewall – un servant à l'extérieur d'un firewall demande au servant à l'intérieur de commencer une connexion HTTP 0 ● Steffenel 24 Identifiant : 0x40. Structure avec 25 octets – 0-15 l'identifiant du servant – 16-19 l'indexe du fichier – 20-23 l'adresse IP – 24-25 le numéro de port Programmation des Applications Réparties – Master M1 - 2007-2008 10 Les Messages – QUERY ● QUERY – Message utilisé pour rechercher un fichier – Identifiant 0x80, taille maximale de 256 octets 0 \0 ● Steffenel Structure : – 0-1 la vitesse minimum de réponse ( en ko/s) – 2- les critères de recherche. Se termine par NULL Programmation des Applications Réparties – Master M1 - 2007-2008 11 Les Messages – QUERY-HIT ● QUERY-HIT – Réponse à un message QUERY – Identifiant 0x81, pas de taille prédéfinie 0 \0 ● Steffenel Structure : – 0 nombre de sauts – 1-2 numéro de port – 3-6 adresse IP – 7-10 vitesse de réponse (ko/s) – 11- réponse à QUERY 11-14 15-18 19- index du fichier taille du fichier (octets) nom du fichier (fini par \0) Programmation des Applications Réparties – Master M1 - 2007-2008 12 Étapes de Connexion Gnutella 1. Connexion à un premier servant – chaque processus doit établir une connexion initiale avec un peer connecté sur le réseau Gnutella – utilisation d'un host cache (liste avec peers candidats) – connexion similaire à celle de TCP GNUTELLA CONNECT/0.4<cr><lf> GNUTELLA/0.4 200 OK<cr><lf> GNUTELLA/0.4 200 OK<cr><lf> Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 13 Découverte d'autres Peers ● Le processus envoie un PING à son servant primaire – celui-ci répond au PING et renvoie le PING à d'autres servants dans sa liste de voisins (recursivement) – les réponses PONG sont reçues par le processus, qui peut ouvrir des connexions TCP avec ces servants PING PONG Steffenel G PINNG PO PING PONG PING PON G Programmation des Applications Réparties – Master M1 - 2007-2008 14 Algorithme pour la découverte procedure buildTopology(List hosts, Graph map) startIndex = (size of hosts/numberOfProcs) *procID endIndex = startIndex + (size of hosts/numberOfProcs) – 1 List subset = hosts[startIndex..endIndex] for (all elements h in hosts) (connect to GW) connect to h if(connection established) then send PING message with TTL=2 (try for adj[h]) for(all PONG messages received) if (PONG host h2!= h) then (add all edges) add edge between h and h2 to map if (h2 is not in hosts) then (if new node add) add h2 to the end of hosts Steffenel end procedure Programmation des Applications Réparties – Master M1 - 2007-2008 15 Recherche d'un Fichier ● Lors de la recherche, le processus est similaire – un message QUERY est envoyé à tous les peers voisins, recursivement, jusqu'à un TTL maximum – si un peer détient le fichier, une réponse QUERY-HIT est envoyée avec les données sur le peer QUERY QUERY-HIT Steffenel RY IT E QURY-H E QU QUERY QUER Y Programmation des Applications Réparties – Master M1 - 2007-2008 16 Transfert d'un Fichier ● ● Le transfert de données est fait directement entre les peers Lorsqu'un peer reçoit un QUERY-HIT, il peut demander le transfert d'un fichier à l'aide du protocole HTTP : GET /get/<File Index>/<File Name>/ HTTP/1.0\r\n Connection: Keep-Alive\r\n Range: bytes=0-\r\n User-Agent: Gnutella\r\n3 Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 17 Les PLUS de Gnutella ● 100 % ouvert – jamais le service ne pourra être fermé ● Recherche par substrings ● Utilisation de HTTP – transfert de fichiers simplifié ● Tous les archives partagés sont disponibles ● Algorithme de recherche décentralisé ● Steffenel – Tolérant aux pannes – Rubuste Facilité de connexion – noeuds locaux/distants traités également Programmation des Applications Réparties – Master M1 - 2007-2008 18 Les MOINS de Gnutella Steffenel ● Transmission dans le réseau Gnutella – délai variable ● Comment choisir un bon TTL ? ● Possibilité de « denial of service » - retransmission sélective ● Limitations dues aux firewalls ● Problèmes de scalabilité ● Problèmes de Freeriding ● Problèmes d'authentification ● Problèmes de contenu impropre Programmation des Applications Réparties – Master M1 - 2007-2008 19 La Scalabilité de Gnutella ● Si on considère – P = nombre d'utilisateurs connectés sur Gnutella – N = nombre de connexions gardées ouvertes par peer – T = TTL (7 par défaut) – B = débit – S = moyenne de données transportées par QUERY effectuée Entêtes IP + TCP + Gnutella + vitesse + string + \0 = 20 Steffenel + 20 + 23 + 1 + 18 + 1 = 83 octets Programmation des Applications Réparties – Master M1 - 2007-2008 20 Nombre d'Utilisateurs en Contact N=2 N=3 N=4 N=5 N=6 N=7 N=8 Steffenel T=1 T=2 T=3 T=4 T=5 2 4 6 8 10 3 9 31 45 93 4 16 52 160 484 5 25 105 425 1705 6 36 186 936 4686 7 49 301 1813 10885 8 64 456 3200 22408 T=6 12 189 1456 6825 23436 65317 156864 T=7 14 381 4372 27305 117186 391909 1098056 Programmation des Applications Réparties – Master M1 - 2007-2008 21 Trafic Généré en Octets (S=83) N=2 N=3 N=4 N=5 N=6 N=7 N=8 T=1 166 249 332 415 498 581 664 T=2 T=3 T=4 T=5 T=6 332 498 664 830 996 747 1743 3735 7719 15687 1328 4316 13280 40172 120848 2075 8715 35275 141515 566475 2988 15438 77688 388938 1945188 4067 24983 150479 903455 5421311 5312 37848 265600 1859864 13019712 T=7 1162 31623 362876 2266315 9726438 32528447 91138646 Et ça uniquement pour faire une requête, sans le transfert du fichier!!!! Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 22 Solutions à Certains Problèmes ● ● Steffenel Plusieurs clients implémentent des solutions afin de palier certains de ces problèmes – structuration en « Ultrapeers » – signature SHA-1 – utilisation de UDP pour les querys, query-hits ou transfert – metadata en XML – download segmenté (comme dans Bittorrent) La version courante (0.4) est assez obsolète, et le GDF (Gnutella Developer Forum) considère intégrer la plupart de ces solutions à la version 0.6 qui doit sortir prochainement Programmation des Applications Réparties – Master M1 - 2007-2008 23 Programmation des Applications Réparties Le protocole BitTorrent Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 24 BitTorrent - Origines ● Le protocole BitTorrent a été crée par Bram Cohen en 2001 – ● ● Steffenel première implémentation en Python Son objectif diffère de celui des autres systèmes P2P – P2P utilisé pour résoudre le problème de l'engorgement des serveurs FTP – possibilité de distribuer des fichiers sans avoir nécessairement une large bande passante Donc, BitTorrent est plus similaire à un service FTP qu'à un logiciel de partage P2P conventionnel Programmation des Applications Réparties – Master M1 - 2007-2008 25 Pourquoi Étudier BitTorrent ● BitTorrent réponds par une partie importante du trafic internet aujourd'hui – Steffenel une étude de 2004 de la société CacheLogic attribuait à BitTorrent autour de 30% de tout le trafic Internet (l'ensemble des P2P correspondait à 60%) Programmation des Applications Réparties – Master M1 - 2007-2008 26 Les Principes de BitTorrent ● ● Steffenel Mécanisme de redistribution par “swarming” (essaim) – Chaque fichier est réparti en plusieurs morceaux – Les noeuds demandent des morceaux aux peers voisins – Les morceaux peuvent être téléchargés en désordre Stratégies pour encourager la contribution de tous les noeuds – on a plus de chance de télécharger un morceau si on a un taux d'upload élevé – principe de la réciprocité Programmation des Applications Réparties – Master M1 - 2007-2008 27 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 28 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 29 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 30 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 31 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 32 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 33 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 34 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 35 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 36 Démonstration Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 37 Le « Réseau » BitTorrent ● Contrairement à d'autres P2P, BitTorrent ne donne pas une vision globale de l'ensemble des noeuds connectés – groupes de noeuds autour d'une ressource (fichier) ● – interconnexion facilité par le tracker ● – point unique de défaillance sans outil de recherche de fichiers ● Steffenel fichier .torrent, qui contient des métainformations besoin d'utiliser d'autres moyens classiques (moteurs web) Programmation des Applications Réparties – Master M1 - 2007-2008 38 Le Tracker ● Le tracker n'est qu'une machine utilisé pour mettre en contact les différents peers intéressés par la distribution d'un fichier – le tracker se comporte comme un serveur HTTP – on obtient un annuaire de peers qui sont connectés – le tracker permet de distinguer ● ● ● les Leechers – peers qui ne possèdent aucun morceau ou juste une partie des morceaux du fichier Point unique de défaillance – Steffenel les Seeders – peers qui ont la totalité des morceaux si le tracker est hors ligne, la ressource ne peut pas être accédé Programmation des Applications Réparties – Master M1 - 2007-2008 39 Le fichier .torrent ● Le fichier .torrent contient entre autre : – ● l'adresse du tracker la date de création le nom du fichier la taille du fichier le hash du fichier (signature SHA-1) Les informations sont B-encodés sous la forme de listes et dictionnaires d8:announce45:http://stats.snowtigers.net:3399/announce.php18:azureus_properties d17:dht_backup_enablei0ee7:comment19:merci de seeder !! 10:created by15:Azureus/3.0.4.213:creation datei1201609689e8:encoding5:UTF84:infod6:lengthi374644792e4:name38:Harry Potter & the Sorcerers Stone.zip12:piece lengthi262144e6:pieces28600:»^@ò@Ç<89>æ ã©%øÜá¡ûÕ<83> Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 40 Le B-Encodage ● Le B-encodage est un langage de description de données autodescriptif (ça vous rappelle XML ou ASN-1 ?) – chaîne de caractères : <taille>:<chaîne> ● – entiers : i<entier>e ● – eg.: pour encoder la liste [hello, dog] on écrira l5:hello4:doge dictionnaire : d<chaîne><élément>e ● Steffenel eg.: pour encoder 5 on écrira i5e liste : l<liste>e ● – eg.: pour encoder la chaîne « hello » on écrira 5:hello pour écrire eg.: {hello=>world,hen=>eggs} on écrira d5:hello5:worldd3:hen4:eggse Programmation des Applications Réparties – Master M1 - 2007-2008 41 Les Messages ● ● Steffenel Tous les messages de BitTorrent sont de la forme <taille préfixée><identifiant du message><données> Il existe au total 11 messages, par exemple : – keep-alive – interested – not interested – have – piece – request – cancel Programmation des Applications Réparties – Master M1 - 2007-2008 42 Architecture Générale .torre nt Web page with link to .torrent Tracker Web Server C A Peer Peer [Leech] Downloader B [Seed] Peer [Leech] Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 43 Architecture Générale Web page with link to .torrent Tracker Web Server nt e c un .torre o t ge n an C A Peer Peer [Leech] Downloader B [Seed] Peer [Leech] Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 44 Architecture Générale Tracker Web Server nt Web page with link to .torrent .torre e e s n o pe st i r-l p s re C A Peer Peer [Leech] Downloader B [Seed] Peer [Leech] Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 45 Architecture Générale Tracker Web Server .torre nt Web page with link to .torrent shake hand A shak Peer [Leech] Downloader C e ha Peer nd B [Seed] Peer [Leech] Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 46 Architecture Générale Tracker Web Server .torre nt Web page with link to .torrent morceaux A mor Peer [Leech] Downloader C cea ux Peer B [Seed] Peer [Leech] Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 47 Architecture Générale Tracker Web Server Web page with link to .torrent .torre nt ce ist n u r-l o nn pee a t e ge ons sp e r morceaux A Peer mor mor ceaux cea ux [Leech] Downloader C Peer B [Seed] Peer [Leech] Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 48 Les Étapes – Contacter le Tracker ● Le tracker est contacté à l'aide d'une requête HTTP GET – ● http://url?info_hash=hash&peer_id=id&ip=ipdupeer&port=port On récupère un fichier avec une liste de peers – il contient au maximum 50 peers, choisis au hasard par le tracker – une intervalle minimum doit séparer deux requêtes de listes d 8:intervali1800e 5:peers l d2:ip 11:10.10.10.10 7:peer id 5:peer1 4:port i8080e e e Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 49 Les Étapes – Contacter le Tracker get http://url.com/announce? info_hash=xxxx& annuaire tracker ... ip 10.0.0.1 peer id peer1 port 8080 ip 10.0.0.2 peer id peer2 port 8080 ... Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 50 Les Étapes – Connexion à un Peer ● La connexion entre deux peers se fait par le protocole telnet – chaque partie envoie un message de handshake handshake <taille><protocol><8bits><info_hash><id_peer> – si la connexion est ok et le peer possède des morceaux du fichier, il est tenu d'envoyer un message bitfield handshake hadshake Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 51 Les Étapes – La Liste de Morceaux ● Le message bitfield indique les morceaux qu'un peer possède – composé d'une chaîne de bits, où chaque bit indique la possession ou non d'un tronçon du fichier – Exemple : un peer qui contient les morceaux 0 et 36-51 enverra un message sous la forme : ● 05 80 00 00 00 0f ff f0 00 00 00 00 00 – – – – – Steffenel 05 est l'identifiant du type de message (bitfield) 80 = 1000000, le premier morceau (0) est marqué « 1 », 0f = 00001111, le peer possède les morceaux 36 à 39, ff = 1111111, le peer possède les morceaux 40-47 f0 = 11110000, le peer possède les morceaux 48-51 Programmation des Applications Réparties – Master M1 - 2007-2008 52 Les Étapes – Démonstration d'Intérêt ● ● ● Steffenel Si le peer détient des morceaux intéressants, on s'annonce avec un message interested (ou not interested, dans le cas contraire) Le peer peut contrôler qui a le droit de demander des morceaux – si le peer est prêt, il envoie un message unchoke – s'il n'est pas prêt ou s'il ne veut pas, le peer envoie un choke Ce n'est qu'à ce moment que notre client peut demander des tranches du fichier – envoie un message request avec le numéro du morceau et une intervalle de bits – reçoit un message piece avec le numéro du morceau et les données demandées Programmation des Applications Réparties – Master M1 - 2007-2008 53 Les Étapes – Démonstration d'Intérêt bitfield interested unchoke request no Y du tronçon X du bit 0 à Z piece no Y de X bit de 0 à Z Steffenel Programmation des Applications Réparties – Master M1 - 2007-2008 54 Les Étapes – Vérification et Diffusion ● Une fois entièrement téléchargé, le client vérifie le morceau : – calcul du hash (SHA1) du morceau et vérification par rapport au hash indiqué dans le fichier .torrent – si tout correspond, le client ajoute les données au fichier – le client annonce à ses voisins qu'il possède le morceau X avec un message have have X have X have Steffenel X Programmation des Applications Réparties – Master M1 - 2007-2008 55 Algorithmes pour le Partage ● Lors d'un partage, BitTorrent cherche à – minimiser le freeriding ● – résister au phénomène des « flash mobs » ● ● Steffenel décourager ceux qui veulent seulement télécharger un fichier, sans contribuer en upload un flash-mob est l'intérêt brusque par un fichier, ce qui surcharge les seeders et augmente le temps moyen de D/L Pour cela, il implémente quelques algorithmes – Random First Piece – Rarest First – Optimistic Unchoking – Encoragement au Partage Programmation des Applications Réparties – Master M1 - 2007-2008 56 Algorithme Random First Piece ● Sert à éviter l'un des principaux problèmes des autres systèmes de partage P2P – ● Le choix au hasard du premier morceau permet de contribuer rapidement dans le réseau dès que le premier morceau est reçu – ● Steffenel tous les pairs ne détiennent que le début du fichier la probabilité d'avoir le même morceau est diluée, donc augmente la chance de devenir « source » Après le premier morceau, on passe à l'algorithme Rarest First Programmation des Applications Réparties – Master M1 - 2007-2008 57 Algorithme Rarest First ● ● ● L'un des problèmes avec la technique de partage par swarming est que certains morceaux peuvent devenir indisponibles, ce qui rend impossible le téléchargement complet La stratégie à suivre est de faire multiplier les sources pour les morceaux les plus rares Chaque client est mis au courant des pièces détenues par les autres clients. Il suffit de les compter pour savoir quel morceau est le plus rare et le demander – Steffenel avantages : ● évite les fichiers incomplets ● augmente la vitesse moyenne de téléchargement ● le détenteur d'un morceau rare gagnent de « bonus » upload Programmation des Applications Réparties – Master M1 - 2007-2008 58 Algorithme Optimistic Unchoking ● ● Pour avoir le droit de demander des morceaux, un peer doit être « unchoked » Si le fichier recherché est trop demandé, cela peut se traduire par des longues files d'attente – ● Lorsqu'un client vient de se connecter, on lui donne trois fois plus de chance d'être sélectionné (unchoked) que pour un client normal – Steffenel de plus, un peer qui vient de se connecter ne détient aucun morceau pour partage, ce qui n'améliore pas ses chances on augmente la chance d'obtenir un morceau complet, qui pourrait être partagé avec les autres peers Programmation des Applications Réparties – Master M1 - 2007-2008 59 Encouragement au Partage ● ● ● ● Mécanisme pour récompenser les clients qui envoient des données À chaque instant un client upload vers un maximum de 4 peers Le choix des clients en upload se fait de préférence entre les quatre de chez qui notre client télécharge le plus vite – 3 clients par rapport à leur vitesse de upload – 1 client choisi au hasard (optimistic unchoking) Principe de la réciprocité – Steffenel évalué à chaque 10 secondes Programmation des Applications Réparties – Master M1 - 2007-2008 60 Quelques Critiques sur BitTorrent ● Peu efficace pour des petits fichiers (< 30Mo) ● Absence de fonction de recherche – ● ● Tracker unique – goulot d'étranglement, point unique de défaillance – gestion des peers peu intelligente Faiblesse de la vitesse de téléchargement au début – ● Steffenel problème pour les vieux fichiers ou trackers inactifs rien à partager, donc peu de priorité pour télécharger Absence de mesures pour contourner les firewalls Programmation des Applications Réparties – Master M1 - 2007-2008 61