Vous êtes sur la page 1sur 61

Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 1

Programmation des Applications


Rparties
Introduction P2P
Overview des protocoles
Gnutella et Bittorrent
Luiz Angelo Steffenel
luiz-angelo.steffenel@univ-reims.fr
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 2
Programmation des Applications
Rparties
Le protocole Gnutella
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 3
Gnutella
!
Histoire

Gnutella est un protocole dcentralis de recherche et de


transfert de fichiers

crit par Tom Pepper et Justin Frankel en 2000

L'entreprise Nullsoft venait d'tre acht par AOL

Pepper et Frankel disponibilisent le logiciel pendant 1 jour


!
Tlchargement massif du client et interdiction d'AOL
!
Quelques jours plus tard, l'ingnierie reverse permet la
cration d'autres clients
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 4
Gnutella - caractristiques
!
Protocole P2P pur

totalement dcentralis
!
un noeud est appel servant - la fois client et serveur

dcouverte dynamique des peers et des ressources


!
utilise le principe de l'inondation de requtes

chaque noeud rpand les messages ses voisins (sauf la


source du message)

transfert de donnes directement entre deux peers


!
utilisation du protocole HTTP
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 5
Gnutella - limitations
!
Lors de son lancement en 2000, Gnutella a connu une trs forte
demande

peur des implications des services centraliss comme Napster


!
On a vite compris que le protocole avait certains problmes de
scalabilit

le modle par inondation de requtes fait augmente


exponentiellement le nombre de messages changs lors de
l'augmentation du nombre N de noeuds connects

plusieurs solutions viennent pallier ce problme, tout en restant


compatibles avec le protocole originale
!
Gnutella est aujourd'hui le troisime rseau P2P sur Internet
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 6
Les Bases du Protocole
!
Gnutella utilise 5 types de messages

Ping

Pong

Push

Query

Query-Hit
!
Additionnellement, Gnutella change deux autres commandes

connect

ok
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 7
Les Messages L'entte
!
Tous les messages partagent une entte commune de 23
octets
!
Structure

0-15 Identifiant de l'entte

16 type de payload (message)

17 TTL

18 nombre de sauts

19-22 taille du payload


0
22
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 8
Les Messages PING
!
PING sert dcouvrir les autres noeuds sur le rseau

son identifiant est le 0x00

PING n'a pas de payload


!
Lorsque PING est reu par un noeuds, celui-ci retransmet le
PING tous ses voisins (sauf celui qui a envoy le PING)

principe d'inondation du rseau


!
Permet de dcouvrir d'autres noeuds dans le rseau
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 9
Les Messages PONG
!
PONG Message mis en rponse au message PING
!
Identifiant : 0x01. Message avec un payload de 14 octets
!
Structure

0-1 le numro de port d'coute

2-5 l'adresse IP

6-9 le nombre de fichiers partags

10-13 le nombre de ko partags


0
13
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 10
Les Messages PUSH
!
PUSH Message mis pour demander une connexion
travers un firewall

un servant l'extrieur d'un firewall demande au servant


l'intrieur de commencer une connexion HTTP
!
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 numro de port


0
24
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 11
Les Messages QUERY
!
QUERY Message utilis pour rechercher un fichier

Identifiant 0x80, taille maximale de 256 octets


!
Structure :

0-1 la vitesse minimum de rponse ( en ko/s)

2- les critres de recherche. Se termine par NULL


0
\0
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 12
Les Messages QUERY-HIT
!
QUERY-HIT Rponse un message QUERY

Identifiant 0x81, pas de taille prdfinie


!
Structure :

0 nombre de sauts

1-2 numro de port

3-6 adresse IP

7-10 vitesse de rponse (ko/s)

11- rponse QUERY


0
\0
11-14 index du fichier
15-18 taille du fichier (octets)
19- nom du fichier (fini par
\0)
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 13
tapes de Connexion Gnutella
1. Connexion un premier servant

chaque processus doit tablir une connexion initiale avec un peer


connect sur le rseau 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 Rparties Master M1 - 2007-2008 14
Dcouverte d'autres Peers
!
Le processus envoie un PING son servant primaire

celui-ci rpond au PING et renvoie le PING d'autres servants


dans sa liste de voisins (recursivement)

les rponses PONG sont reues par le processus, qui peut ouvrir
des connexions TCP avec ces servants
PING
P
I
N
G
PING
P
IN
G
PONG
P
O
N
G
PONG
P
O
N
G
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 15
Algorithme pour la dcouverte
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
end procedure
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 16
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 dtient le fichier, une rponse QUERY-HIT est envoye


avec les donnes sur le peer
QUERY
Q
U
E
R
Y
QUERY
Q
U
E
R
Y
QUERY-HIT
Q
U
E
R
Y
-
H
I
T
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 17
Transfert d'un Fichier
!
Le transfert de donnes est fait directement entre les peers
!
Lorsqu'un peer reoit 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 Rparties Master M1 - 2007-2008 18
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 partags sont disponibles
!
Algorithme de recherche dcentralis

Tolrant aux pannes

Rubuste
!
Facilit de connexion noeuds locaux/distants traits galement
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 19
Les MOINS de Gnutella
!
Transmission dans le rseau Gnutella dlai variable
!
Comment choisir un bon TTL ?
!
Possibilit de denial of service - retransmission slective
!
Limitations dues aux firewalls
!
Problmes de scalabilit
!
Problmes de Freeriding
!
Problmes d'authentification
!
Problmes de contenu impropre
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 20
La Scalabilit de Gnutella
!
Si on considre

P = nombre d'utilisateurs connects sur Gnutella

N = nombre de connexions gardes ouvertes par peer

T = TTL (7 par dfaut)

B = dbit

S = moyenne de donnes transportes par QUERY effectue


Enttes IP + TCP + Gnutella + vitesse + string + \0 =
20 + 20 + 23 + 1 + 18 + 1 = 83 octets
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 21
Nombre d'Utilisateurs en Contact
T=1 T=2 T=3 T=4 T=5 T=6 T=7
N=2 2 4 6 8 10 12 14
N=3 3 9 31 45 93 189 381
N=4 4 16 52 160 484 1456 4372
N=5 5 25 105 425 1705 6825 27305
N=6 6 36 186 936 4686 23436 117186
N=7 7 49 301 1813 10885 65317 391909
N=8 8 64 456 3200 22408 156864 1098056
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 22
Trafic Gnr en Octets (S=83)
T=1 T=2 T=3 T=4 T=5 T=6 T=7
N=2 166 332 498 664 830 996 1162
N=3 249 747 1743 3735 7719 15687 31623
N=4 332 1328 4316 13280 40172 120848 362876
N=5 415 2075 8715 35275 141515 566475 2266315
N=6 498 2988 15438 77688 388938 1945188 9726438
N=7 581 4067 24983 150479 903455 5421311 32528447
N=8 664 5312 37848 265600 1859864 13019712 91138646
Et a uniquement pour faire une requte,
sans le transfert du fichier!!!!
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 23
Solutions Certains Problmes
!
Plusieurs clients implmentent des solutions afin de palier
certains de ces problmes

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 obsolte, et le GDF
(Gnutella Developer Forum) considre intgrer la plupart de ces
solutions la version 0.6 qui doit sortir prochainement
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 24
Programmation des Applications
Rparties
Le protocole BitTorrent
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 25
BitTorrent - Origines
!
Le protocole BitTorrent a t cre par Bram Cohen en 2001

premire implmentation en Python


!
Son objectif diffre de celui des autres systmes P2P

P2P utilis pour rsoudre le problme de l'engorgement des


serveurs FTP

possibilit de distribuer des fichiers sans avoir ncessairement


une large bande passante
!
Donc, BitTorrent est plus similaire un service FTP qu' un
logiciel de partage P2P conventionnel
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 26
Pourquoi tudier BitTorrent
!
BitTorrent rponds par une partie importante du trafic internet
aujourd'hui

une tude de 2004 de la socit CacheLogic attribuait BitTorrent


autour de 30% de tout le trafic Internet (l'ensemble des P2P
correspondait 60%)
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 27
Les Principes de BitTorrent
!
Mcanisme de redistribution par swarming (essaim)

Chaque fichier est rparti en plusieurs morceaux

Les noeuds demandent des morceaux aux peers voisins

Les morceaux peuvent tre tlchargs en dsordre


!
Stratgies pour encourager la contribution de tous les
noeuds

on a plus de chance de tlcharger un morceau si


on a un taux d'upload lev

principe de la rciprocit
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 28
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 29
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 30
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 31
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 32
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 33
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 34
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 35
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 36
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 37
Dmonstration
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 38
Le Rseau BitTorrent
!
Contrairement d'autres P2P, BitTorrent ne donne pas une
vision globale de l'ensemble des noeuds connects

groupes de noeuds autour d'une ressource (fichier)


!
fichier .torrent, qui contient des mtainformations

interconnexion facilit par le tracker


!
point unique de dfaillance

sans outil de recherche de fichiers


!
besoin d'utiliser d'autres moyens classiques (moteurs web)
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 39
Le Tracker
!
Le tracker n'est qu'une machine utilis pour mettre en contact
les diffrents peers intresss par la distribution d'un fichier

le tracker se comporte comme un serveur HTTP

on obtient un annuaire de peers qui sont connects

le tracker permet de distinguer


!
les Seeders peers qui ont la totalit des morceaux
!
les Leechers peers qui ne possdent aucun morceau ou
juste une partie des morceaux du fichier
!
Point unique de dfaillance

si le tracker est hors ligne, la ressource ne peut pas tre accd


Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 40
Le fichier .torrent
!
Le fichier .torrent contient entre autre :

l'adresse du tracker
la date de cration
le nom du fichier
la taille du fichier
le hash du fichier (signature SHA-1)
!
Les informations sont B-encods 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:UTF-
84:infod6:lengthi374644792e4:name38:Harry Potter & the Sorcerers
Stone.zip12:piece lengthi262144e6:pieces28600:^@@<89> %<83>
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 41
Le B-Encodage
!
Le B-encodage est un langage de description de donnes auto-
descriptif (a vous rappelle XML ou ASN-1 ?)

chane de caractres : <taille>:<chane>


!
eg.: pour encoder la chane hello on crira 5:hello

entiers : i<entier>e
!
eg.: pour encoder 5 on crira i5e

liste : l<liste>e
!
eg.: pour encoder la liste [hello, dog] on crira l5:hello4:doge

dictionnaire : d<chane><lment>e
!
pour crire eg.: {hello=>world,hen=>eggs} on crira
d5:hello5:worldd3:hen4:eggse
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 42
Les Messages
!
Tous les messages de BitTorrent sont de la forme
<taille prfixe><identifiant du message><donnes>
!
Il existe au total 11 messages, par exemple :

keep-alive

interested

not interested

have

piece

request

cancel
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 43
Architecture Gnrale
Web page
with link
to .torrent
A
B
C
Peer
[Leech]
Downloader
Peer
[Seed]
Peer
[Leech]
Tracker
Web
Server
.
t
o
r
r
e
n
t
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 44
Architecture Gnrale
Web page
with link
to .torrent
A
B
C
Peer
[Leech]
Downloader
Peer
[Seed]
Peer
[Leech]
Tracker
Web
Server
.
t
o
r
r
e
n
t
g
e
t

a
n
n
o
u
n
c
e
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 45
Architecture Gnrale
Web page
with link
to .torrent
A
B
C
Peer
[Leech]
Downloader
Peer
[Seed]
Peer
[Leech]
Tracker
Web
Server
.
t
o
r
r
e
n
t
r
e
s
p
o
n
s
e

p
e
e
r
-
l
i
s
t
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 46
Architecture Gnrale
Web page
with link
to .torrent
A
B
C
Peer
[Leech]
Downloader
Peer
[Seed]
Peer
[Leech]
Tracker
Web
Server
.
t
o
r
r
e
n
t
shake hand
s
h
a
k
e
h
a
n
d
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 47
Architecture Gnrale
Web page
with link
to .torrent
A
B
C
Peer
[Leech]
Downloader
Peer
[Seed]
Peer
[Leech]
Tracker
Web
Server
.
t
o
r
r
e
n
t
morceaux
m
o
r
c
e
a
u
x
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 48
Architecture Gnrale
Web page
with link
to .torrent
A
B
C
Peer
[Leech]
Downloader
Peer
[Seed]
Peer
[Leech]
Tracker
Web
Server
.
t
o
r
r
e
n
t
morceaux
m
o
r
c
e
a
u
x
m
o
r
c
e
a
u
x
g
e
t

a
n
n
o
u
n
c
e
r
e
s
p
o
n
s
e

p
e
e
r
-
l
i
s
t
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 49
Les tapes Contacter le Tracker
!
Le tracker est contact l'aide d'une requte HTTP GET

http://url?info_hash=hash&peer_id=id&ip=ipdupeer&port=port
!
On rcupre un fichier avec une liste de peers

il contient au maximum 50 peers, choisis au hasard par le tracker

une intervalle minimum doit sparer deux requtes 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 Rparties Master M1 - 2007-2008 50
Les tapes Contacter le Tracker
tracker
get http://url.com/announce?
info_hash=xxxx&
annuaire
...
ip 10.0.0.1
peer id peer1
port 8080
ip 10.0.0.2
peer id peer2
port 8080
...
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 51
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 possde des morceaux du fichier,


il est tenu d'envoyer un message bitfield
handshake
hadshake
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 52
Les tapes La Liste de Morceaux
!
Le message bitfield indique les morceaux qu'un peer possde

compos d'une chane de bits, o chaque bit indique la


possession ou non d'un tronon 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

05 est l'identifiant du type de message (bitfield)

80 = 1000000, le premier morceau (0) est marqu 1 ,

0f = 00001111, le peer possde les morceaux 36 39,

ff = 1111111, le peer possde les morceaux 40-47

f0 = 11110000, le peer possde les morceaux 48-51


Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 53
Les tapes Dmonstration d'Intrt
!
Si le peer dtient des morceaux intressants, on s'annonce
avec un message interested (ou not interested, dans le cas
contraire)
!
Le peer peut contrler qui a le droit de demander des morceaux

si le peer est prt, il envoie un message unchoke

s'il n'est pas prt 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 numro du morceau et une


intervalle de bits

reoit un message piece avec le numro du morceau et les


donnes demandes
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 54
Les tapes Dmonstration d'Intrt
bitfield
interested
unchoke
request no Y du tronon X
du bit 0 Z
piece no Y de X
bit de 0 Z
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 55
Les tapes Vrification et
Diffusion
!
Une fois entirement tlcharg, le client vrifie le morceau :

calcul du hash (SHA1) du morceau et vrification par rapport au


hash indiqu dans le fichier .torrent

si tout correspond, le client ajoute les donnes au fichier

le client annonce ses voisins qu'il possde le morceau X avec


un message have
h
a
v
e
X
h
a
v
e
X
have X
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 56
Algorithmes pour le Partage
!
Lors d'un partage, BitTorrent cherche

minimiser le freeriding
!
dcourager ceux qui veulent seulement tlcharger un fichier,
sans contribuer en upload

rsister au phnomne des flash mobs


!
un flash-mob est l'intrt brusque par un fichier, ce qui
surcharge les seeders et augmente le temps moyen de D/L
!
Pour cela, il implmente quelques algorithmes

Random First Piece

Rarest First

Optimistic Unchoking

Encoragement au Partage
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 57
Algorithme Random First Piece
!
Sert viter l'un des principaux problmes des autres systmes
de partage P2P

tous les pairs ne dtiennent que le dbut du fichier


!
Le choix au hasard du premier morceau permet de contribuer
rapidement dans le rseau ds que le premier morceau est
reu

la probabilit d'avoir le mme morceau est dilue, donc augmente


la chance de devenir source
!
Aprs le premier morceau, on passe l'algorithme Rarest First
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 58
Algorithme Rarest First
!
L'un des problmes avec la technique de partage par swarming
est que certains morceaux peuvent devenir indisponibles, ce
qui rend impossible le tlchargement complet
!
La stratgie suivre est de faire multiplier les sources pour les
morceaux les plus rares
!
Chaque client est mis au courant des pices dtenues par les
autres clients. Il suffit de les compter pour savoir quel morceau
est le plus rare et le demander

avantages :
!
vite les fichiers incomplets
!
augmente la vitesse moyenne de tlchargement
!
le dtenteur d'un morceau rare gagnent de bonus upload
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 59
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

de plus, un peer qui vient de se connecter ne dtient aucun


morceau pour partage, ce qui n'amliore pas ses chances
!
Lorsqu'un client vient de se connecter, on lui donne trois fois
plus de chance d'tre slectionn (unchoked) que pour un
client normal

on augmente la chance d'obtenir un morceau complet, qui


pourrait tre partag avec les autres peers
Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 60
Encouragement au Partage
!
Mcanisme pour rcompenser les clients qui envoient des
donnes
!
chaque instant un client upload vers un maximum de 4 peers
!
Le choix des clients en upload se fait de prfrence entre les
quatre de chez qui notre client tlcharge le plus vite

3 clients par rapport leur vitesse de upload

1 client choisi au hasard (optimistic unchoking)


!
Principe de la rciprocit

valu chaque 10 secondes


Steffenel Programmation des Applications Rparties Master M1 - 2007-2008 61
Quelques Critiques sur BitTorrent
!
Peu efficace pour des petits fichiers (< 30Mo)
!
Absence de fonction de recherche

problme pour les vieux fichiers ou trackers inactifs


!
Tracker unique

goulot d'tranglement, point unique de dfaillance

gestion des peers peu intelligente


!
Faiblesse de la vitesse de tlchargement au dbut

rien partager, donc peu de priorit pour tlcharger


!
Absence de mesures pour contourner les firewalls