Implémentation d`une infrastructure P2P eDonkey

Transcription

Implémentation d`une infrastructure P2P eDonkey
AUBERT Cédric
DI GIACOMO Marion
JAZZA Lahoucine
MAX Mathieu
Implémentation d'une infrastructure P2P
eDonkey
Automne 2008
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
TABLE DES MATIERES
Introduction
I.
Etude de l’infrastructure peer to peer générale ............................................................................. 4
A.
Le modèle du réseau Peer 2 Peer ............................................................................................ 4
1.
Principe ................................................................................................................................ 4
2.
Avantages et inconvénients ................................................................................................. 4
3.
Domaines d'application ....................................................................................................... 6
4.
Les différentes architectures ............................................................................................... 6
B.
II.
Le protocole eDonkey .................................................................................................................. 8
Implémentation de l’infrastructure P2P edonkey........................................................................... 9
A.
Architecture et logiciels utilisés dans notre étude .................................................................. 9
1.
Architecture matérielle........................................................................................................ 9
2.
Logiciels utilisant le réseau edonkey ................................................................................. 10
B.
Installation et configuration d’eserver Lugdunum .................................................................... 10
C.
Utilisation de Wireshark, détection des trames EDONKEY ................................................... 13
III.
Etude du protocole edonkey......................................................................................................... 15
A.
Communication entre un client et un serveur ...................................................................... 15
1.
Connexion d’un client à un serveur (HighID, LowID) ......................................................... 15
2.
Mise à jour des différentes informations (listes de serveurs…)......................................... 19
3.
Recherche et obtention d'une liste d'ID de téléchargement............................................. 23
B.
Communication entre deux clients............................................................................................ 25
1.
Mécanisme de call-back dans le cas d’un client LowID ..................................................... 25
2.
Téléchargement d’un fichier entre deux clients ................................................................ 27
3.
Gestion des files d’attente ................................................................................................. 35
Conclusion
ANNEXE : Compte-rendu de la réunion organisée avec M.ABDELOUAHAB Mahdi Amine et M.HATAHET
Sinan.
Page 2
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Introduction
Notre projet consiste à mettre en place une infrastructure peer to peer se basant sur le
protocole edonkey et étudier ce protocole. Pour cela nous avons utilisé plusieurs machines reliés par
un routeur. Les analyses de traces sous Wireshark nous ont permis d’identifier les principales
caractéristiques du protocole edonkey.
Tout d’abord nous présenterons l'infrastructure P2P en général. Nous expliquerons le modèle
du réseau P2P en précisant son principe, ses avantages et inconvénients, ses domaines d'application
et les différentes architectures du P2P. Ceci est une première vue général de ce qui existe aujourd’hui
dans le P2P. Puis nous expliquerons le contexte dans lequel nous avons travaillé c'est-à-dire la
architecture matérielle et logicielle qui nous a permis d’effectuer une étude minutieuse sur certains
points du protocole edonkey, ceux-ci seront expliqués dans une dernière partie. Nous tenons à
préciser que la recherche documentaire a été difficile car il existe peu de ressources concernant le
protocole edonkey. En effet pour comparer les différents résultats que nous avons obtenus, nous
nous sommes basés sur un seul et unique document qui est la référence sur le protocole edonkey :
Nous tenons à remercier M.ABDELOUAHAB Mahdi Amine et M.HATAHET Sinan qui nous ont
accueillis dans leur bureau afin de répondre à nos questions et qui nous ont permis d’étudier d’autres
points du protocole edonkey. Vous trouverez en annexe le compte rendu de cette réunion.
Page 3
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
I.
ETUDE DE L’INFRASTRUCTURE PEER TO PEER GENERALE
A. Le modèle du réseau Peer 2 Peer
1. Principe
Le terme « Peer-to-Peer » (traduit « poste à poste » ou « pair à pair » en français) désigne un
modèle de réseau informatique dont les éléments, appelés « nœuds » ou « peer », sont à la fois
clients et serveurs lors des échanges.
Ce modèle s'oppose strictement au modèle client-serveur. En effet, dans ce type d'architecture, la
ressource demandée n'est disponible qu'en un point central du réseau et les clients ne sont que des
demandeurs de cette ressource.
Au contraire, dans le modèle P2P, cette séparation est levée : on ne parle ni de client, ni de serveur. Il
n'existe que des pairs. Tous les pairs ont la ressource et tous les pairs la demandent. On peut aussi
considérer les pairs du réseau comme étant à la fois client et serveur.
Comme leur nom l’indique, les Peer-to-Peer permettent d’établir des communications directes, d’égal
à égal, entre les différents nœuds du réseau, qui peuvent alors échanger différents types
d’informations sans passer par un serveur central.
Ce modèle a permis une décentralisation des réseaux en offrant une alternative aux traditionnelles
architectures client-serveur ou aux architectures N-tiers.
Voici un schéma mettant en évidence la différence de topologie entre les deux modèles :
Napster, apparu en juin 1999, est considéré comme le premier P2P, même s'il possédait une
architecture centralisée. C'est en effet le premier logiciel d'échange à avoir connu un succès mondial.
2. Avantages et inconvénients
Dès leur apparition, les P2P se sont distingués des architectures traditionnelles grâce à leurs
nombreux avantages :
Page 4
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
•
La répartition de la charge :
Les échanges sont gérés directement par les pairs, ce qui élimine un des principaux
problèmes des architectures clients-serveurs, c'est-à-dire la répartition de la charge. On n'a
pas ici le problème de congestion des réseaux qui peuvent se produire autour d'un serveur
central devant répondre à de très nombreuses demandes.
Chaque pair gère ses propres données et répond aux requêtes des autres pairs.
•
La capacité de stockage :
Chaque nœud ne possède qu'un ensemble très restreint des données du réseau. L'ensemble
des nœuds partage leurs données avec les autres ordinateurs.
La capacité de stockage est ainsi infiniment supérieure à celle d'un serveur traditionnel,
suivant le modèle client-serveur, qui ne pourrait pas supporter une quantité
d'informations aussi importante.
•
La puissance de calcul :
L'ordinateur d'un utilisateur utilise moins de 20% de sa puissance de calcul.
Une application répartie basée sur la technologie Peer-to-Peer peut donc permettre de
mutualiser cette puissance non utilisée pour des recherches demandant des capacités
considérables, qu'un serveur isolé ne peut posséder.
•
Résistance aux pannes :
Les données sont présentes sur de nombreux postes différents.
Il est donc possible d'effectuer facilement des sauvegardes réparties à travers le réseau.
Cela évite de perdre des informations et de mettre en place de lourds systèmes de
sauvegardes.
•
Extensibilité :
Les pairs se configurent automatiquement.
Il est très facile de rajouter de nouveaux pairs et ceux-ci sont gérés dynamiquement.
Le P2P a aussi quelques inconvénients :
•
Pas de centralisation des données :
Dans l'architecture client-serveur, on sait que c'est le serveur qui possède la ressource. En
P2P, on sait que plusieurs éléments du réseau ont la ressource, mais on ne sait pas lesquels.
•
Difficulté de conception :
D'une façon générale, les applications P2P sont beaucoup plus difficiles à concevoir qu'une
application de type client-serveur.
Page 5
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
3. Domaines d'application
Le P2P a de nombreux usages. Il est principalement utilisé par le grand public, dans des
usages techniques, ou dans la recherche.
On distingue particulièrement :
•
Le partage de fichiers :
Chaque internaute est un pair du réseau et les ressources sont des fichiers. Chacun peut donc
partager ses fichiers et télécharger les fichiers des autres. Ces systèmes s'avèrent très
efficaces y compris quand il s'agit d'échanger des données de gros volumes.
Parmi les applications les plus utilisées, on peut distinguer Bittorrent et eMule, que l'on a
étudié plus loin.
•
Le calcul distribué :
Les ordinateurs d'aujourd'hui sont tellement puissants que la majeure partie du temps, une
grande partie de leur processeur est disponible pour effectuer des calculs. Le projet BOINC a
saisi cette opportunité pour créer un gigantesque parc informatique réparti dans le monde
afin d'utiliser cette immense puissance de calcul total pour effectuer des calculs trop
complexes pour être réalisé dans un laboratoire.
•
Autres applications :
D’autres applications telles que la messagerie instantanée (ICQ, AIM) ou encore la
visioconférence profitent des avantages techniques du P2P. Il y a aussi une application dans
le domaine de la voix sur IP. En effet, certaines sociétés de télécommunications commencent
à s’intéresser au P2P pour désengorger leurs serveurs téléphoniques.
4. Les différentes architectures
•
Les Peer-to-Peer structurés :
Ils sont basés sur l'établissement d'une DHT (Distributed Hash Table) permettant d'ajouter
les nouveaux nœuds dans le réseau. Chaque nœud reçoit une liste des voisins avec lesquels il
pourra communiquer. La liste des voisins est dite logique, car ceux-ci peuvent se trouver à
l'autre bout du monde. Chaque pair est responsable d'une partie spécifique du contenu du
réseau. Il est possible de faire des recherches avec un nombre de messages croissant de
façon logarithmique.
•
Les Peer-to-Peer non structurés :
Ils possèdent des liens entre les nœuds qui sont établis de manière arbitraire. Le protocole
eDonkey, que nous allons ensuite étudier, est basé sur ce type d'architecture.
Il est possible de classifier ces réseaux P2P d'une autre manière.
•
Les Peer-to-Peer centralisés :
Dans ce type d'architecture, il y a un serveur central, gérant l'identité des utilisateurs,
l'indexation des partages, les recherches et la mise en relation des pairs : le serveur donne à
chaque client l'adresse des pairs possédant le fichier recherché. Le client se connecte alors à
ce pair pour échanger directement les données. Les fichiers ne passent donc pas par le
serveur.
L'index est donc centralisé, mais les fichiers sont décentralisés.
Page 6
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
•
Les Peer-to-Peer hybrides :
Dans cette architecture, il y a des nœuds spéciaux appelés « super-peer ». Ces nœuds
indexent les fichiers partagés et servent d'intermédiaire pour les nœuds qui leur sont
rattachés. Les serveurs utilisés dans eDonkey2000 peuvent être vus comme des super-peers.
En effet, eDonkey2000 est constitué de très nombreux serveurs spécialisés communiquant
entre eux et servant d'intermédiaire pour les clients.
•
Les Peer-to-Peer « purs » :
Ce sont les réseaux totalement décentralisés. L'ensemble des nœuds sont égaux et jouent le
même rôle.
Chaque pair gère donc les recherches et le partage, sans passer par un serveur central
ou des super-peers, en utilisant en général des techniques des algorithmes spécifiques.
En classifiant les architectures de cette manière, on peut se rendre compte de certaines
lacunes. En effet, si on utilise par exemple une architecture de type centralisé, il suffit de bloquer le
serveur central pour bloquer le réseau dans son intégralité.
Page 7
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
B. Le protocole eDonkey
Le protocole eDonkey se situe dans l'architecture hybride. On a donc un ensemble de
serveurs (super-peers) et de clients (peers) communiquant entre eux.
Les serveurs permettent de gérer l'indexation des données, les recherches et la mise en
relation des utilisateurs pour commencer les échanges.
eDonkey permet uniquement l'échange de fichiers. Son principal atout est de pouvoir
partager les parties de fichiers dont on dispose tout en continuant de le télécharger.
•
Les serveurs ED2K :
Ils sont les points d'entrée du réseau. Ils permettent de se faire connaître sur le réseau et
d'en connaître d'autres. Il est alors possible d'indexer l'ensemble des fichiers des clients
connectés et ainsi de leur proposer un moteur de recherche.
•
Les clients :
Ce sont les éléments les plus importants dans le réseau eDonkey. Le rôle du client est de :
se connecter à un serveur pour indiquer ce qu'il partage
émettre des requêtes de recherche de fichiers
demander les sources possibles pour un fichier demandé
télécharger les fichiers demandés sur les sources
vérifier l'intégrité et la corruption des fichiers
envoyer les fichiers demandés par les autres clients
gérer une file d'attente des clients
proposer une interface graphique efficace
Nous utiliserons eMule et Shareaza dans notre phase expérimentale.
Nous avons abordé dans cette partie le principe des réseaux P2P et ses caractéristiques, les
différentes technologies qui ont été développés dans ce domaine, et tout ce qui se fait aujourd’hui à
l’aide de cette technologie. Nous allons maintenant nous intéresser plus concrètement au protocole
edonkey dans une partie expérimentale.
Page 8
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
II.
IMPLEMENTATION DE L’INFRASTRUCTURE P2P EDONKEY
Notre étude porte sur le protocole edonkey. Afin de l’étudier nous avons défini au début de
notre étude une architecture qui nous a permis d’effectuer diverses analyses à partir de scénarii.
Dans un premier temps nous allons présenter l’architecture matérielle que nous avons mise en place
pour les analyses de traces du protocole, puis nous détaillerons l’installation et la configuration du
serveur edonkey eserver Lugdunum et enfin nous préciserons le logiciel utilisé pour nos analyses et
sa configuration pour une bonne compréhension des trames du protocole edonkey.
A. Architecture et logiciels utilisés dans notre étude
1. Architecture matérielle
Afin d’étudier les caractéristiques du protocole edonkey, nous avons mis en place une
architecture contenant 3 PC relié à un routeur. Nous avons utilisé aussi une machine virtuelle à l’aide
de virtualBox, cette machine est considéré comme une 4ème machine dans notre réseau, elle possède
une adresse IP différente de celle de la machine hôte. Sur cette machine est installé le système
d’exploitation Linux Debian Etch 4.0. Elle nous est utile dans le sens où notre serveur edonkey plus
précisément eserver Lugdunum fonctionne sur cette machine.
Voici le schéma de notre architecture :
Page 9
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
2. Logiciels utilisant le réseau edonkey
Il existait deux principaux serveurs pour le réseau peer-to-peer eDonkey2000. Le premier était
le serveur original de la société MetaMachine à l’origine du réseau eD2k. Il s’agissait d’un serveur
propriétaire écrit en C++ dont les sources sont restées privées. Le second était eserver que l’on doit à
une personne connue sous le pseudonyme « Lugdunum ». Écrit en C à partir de rien, il était
également propriétaire et ses sources sont restées privées, bien qu’il était disponible gratuitement
sur le site http://lugdunum2k.free.fr/ (qui n’existe plus). Actuellement, ces deux logiciels ne sont plus
maintenus et la plupart des serveurs eD2k encore en activité utilisent eserver.
Le réseau eD2k est rapidement devenu très populaire à ses débuts est l’est encore à l’heure
actuelle. Ainsi, il existe toujours de nombreux clients pouvant exploiter le réseau eD2k.
Le client original, gratuit mais propriétaire et aux sources privées, était le logiciel eDonkey2000 de la
société MetaMachine. Il n’est plus maintenu aujourd’hui mais sa dernière version (1.4.5 officielle ou
1.4.6 en août 2006) peut encore être trouvée, quoique difficilement.
Le client eDonkey le plus populaire est néanmoins le client libre eMule pour Windows. Le
projet eMule a débuté en 2002 à l’initiative de Hendrik Breitkreuz (« Merkur ») qui était mécontent
du client officiel. Merkur s’est par la suite retiré du projet, mais ce dernier est toujours bien actif.
eMule a largement contribué au succès du réseau eD2k créé par la société MetaMachine, même s’il
faut savoir qu’il s’agissait d’un concurrent d’eDonkey2000 et que ses utilisateurs n’étaient donc pas
des clients de MetaMachine (95% de clients eMule contre 5% de clients eDonkey). De nombreux
autres clients basés sur eMule existent.
Le logiciel Shareaza, que nous avons aussi utilisé avec eMule, est un client multi-protocole qui
prend en charge le réseau eD2k (en plus de Gnutella 1 et 2, et BitTorrent).
Avec le nombre important de clients non officiels pour le réseau eD2k et l’importante
considérable de certains d’entre eux (eMule), des extensions au protocole eD2k original de la société
MetaMachine sont apparues. En fait, l’ensemble des clients communiquent entre eux et avec les
serveurs en utilisant le protocole eD2k de base : c’est leur langage commun. Mais lorsque deux clients
identiques rentrent en contact - par exemple des clients eMule - ils peuvent s’échanger des messages
spécifiques car ils se comprennent mutuellement ; le protocole eD2k original est ainsi « étendu ». En
revanche, si un client eMule rencontre un client Shareaza, ils devront communiquer selon le
protocole original. C’est pour cette raison que nous avons utilisé Shareaza. A noter que certains
clients sont compatibles avec les extensions protocolaires d’eMule tellement celui-ci est répandu.
Nous aurions bien voulu utiliser le client original eDonkey2000 pour notre expérimentation mais nous
n’avons pas réussi à le faire fonctionner.
B. Installation et configuration d’eserver Lugdunum
Pour notre étude expérimentale, nous avons choisi d’utiliser le serveur Lugdunum dans sa
dernière version 17.15 que nous avons récupérée via le réseau eD2k avec le client eMule. Nous avons
fait tourner ce serveur sous le système d’exploitation GNU/Linux (Debian Etch) installé sur une
machine virtuelle (créée avec VirtualBox). Le système hôte de la machine réelle était Windows XP.
N.B. : Il existe également un serveur nommé Donkey Control pour Windows que l’on peut trouver
facilement sur le web, mais il ne s’agit en fait que d’une interface graphique au serveur Lugdunum
(consulter le fichier readme.txt).
Page 10
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Le serveur Lugdunum se présente sous la forme d’un simple fichier exécutable que nous
placé dans un répertoire nommé Ludgunum. Il est accompagné de quelques autres fichiers :
• donkey.ini : un fichier de configuration lu au lancement du serveur ;
• ipfilter.dat
• ip-to-country.csv
• serverList.met : un fichier contenant les adresses d’autres serveurs eDonkey.
[server]
name=Le serveur eDonkey à Mathieu
desc=A little server for the donkey network
maxClients=1000
public=true
#
console=true
logFile=false
verbose=false
vverbose=false
bverbose=false
#
welcome[1]=> Welcome on my server
welcome[2]=> You are now connected.
welcome[3]=> Coucou
welcome[4]=> Lugdunum esever v17.15 running on Debian Etch
#
# replace this ip by a valid one if need.
# (this is donkey server 2 ip, online in june 2007)
#seedIP=62.241.53.16
#seedPort=4242
#
type=key
############# YOUR PUBLIC IP HERE
thisIP=192.168.1.4
port=4242
#
LOWIDenable=1
LOWIDpercent=15
maxservers=512
hardLimit=5000
softLimit=4000
trackemule=0
warnfakes=1
autoservlist=/home/mathieu/Lugdunum/serverList.met
max_clients_per_ip=10
maxSearchCount=250
#
On y trouve quelques paramètres immédiatement utiles :
• name : le nom du serveur qui apparaît dans le logiciel client ;
• desc : la description du serveur (qui apparaît également dans le logiciel client) ;
• maxClients : le nombre maximal de clients que le serveur peut accepter simultanément ;
• welcome[x] : le message de bienvenue envoyé par le serveur à un client qui se connecte ;
• thisIP : l’adresse IP du serveur ;
• port : le port sur lequel le serveur écoute et accepte les connexions des clients ;
• LOWIDenable : un booléen (0 ou 1) indiquant si le serveur accepte des clients en LowID ;
• autoservlist : le chemin du fichier contenant la liste des autres serveurs connus ;
• max_clients_per_ip : le nombre maximal de clients ayant la même adresse IP.
Page 11
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Le serveur Lugdunum possède une interface en ligne de commande (permet par exemple de voir
le nombre de clients connectés, etc.) :
Page 12
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
C. Utilisation de Wireshark, détection des trames EDONKEY
Pour étudier le protocole Edonkey, nous avons analysé les trames à l’aide de l’outil d’analyse
de protocoles réseaux Wireshark.
Lorsqu’on effectue une capture sous ce logiciel, on obtient toutes les trames du trafic réseau.
On a donc besoin de sélectionner les trames qui nous intéressent afin de pouvoir les étudier. En effet
lors de l’utilisation du client Emule effectuant une requête vers le serveur, nous obtenions par
exemple la capture suivante :
On remarque ici que Wireshark
détecte le paquet sélectionné
comme un paquet TCP contenant
des données. Or ces données
commencent par e3. Ce qui
correspond à l’ID du protocole
Edonkey.
Page 13
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Afin de faciliter l’analyse de telles trames, Wireshark permet de les décoder et de retrouver
alors la vraie nature du paquet transmis.
Il suffit de cliquer sur le bouton droit de la souris sur le type de trame que l’on veut décoder,
on sélectionne ensuite l’Item « Decode As », dans l’onglet « Transport », on choisit alors le protocole
correspondant aux trames (ici EDONKEY), on valide et applique un filtre sur les trames « edonkey »,
nous obtenons alors toutes les échanges qui ont été effectué par le protocole Edonkey :
Page 14
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
III.
ETUDE DU PROTOCOLE EDONKEY
Nous avons étudié de nombreux points importants sur le protocole edonkey, d’autres par
contre non pas été traités, ceux-ci étaient moins important et plus difficile à mettre en œuvre d’un
point de vue expérimental, le manque de ressource documentaire a beaucoup joué aussi sur notre
étude. Néanmoins nous pouvons dire que notre étude est très étoffée.
A. Communication entre un client et un serveur
1. Connexion d’un client à un serveur (HighID, LowID)
•
Cas d’attribution d’un HighID
Ayant effectué notre étude expérimentale dans un réseau local, nous n’avons jamais eu de
problème pour que notre client obtienne un HighID, en effet pas de NAT, et les firewalls ont été
configurés afin de ne pas bloquer les ports du client.
Nous avions vu lors de la recherche documentaire que la connexion entre un client et un
serveur s’effectuait ainsi dans le cas d’une obtention d’un HighID :
Nous allons maintenant montré que cela représente bien une connexion entre un client et un
serveur. Dans notre capture, 192.168.1.4 représente le client et 192.168.1.13 le serveur.
Page 15
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Frame 6 – 9 : Ces trois paquets correspondent à une connexion standard établie vers le serveur. Cette
conversation a été coloriée en vert. La connexion établie, le client envoie alors un message
Login/Hello de type 0x01.
Frame 10 – 15 : C’est alors au tour du serveur d’instancier une connexion vers le client afin de
déterminer si le client accepte les connexions entrantes, c'est-à-dire il détermine si de futurs clients
vont pouvoir se connecter directement à ce client. Si cela est possible, il attribuera alors un HighID
qui correspond à l’adresse IP du client ayant subi des décalages comme expliqué dans la deuxième
partie de ce présent rapport. Lorsque la connexion avec le client est établie, il envoie lui aussi un
message de type HELLO, le client répond par un message de type HELLO ANSWER. Tout va bien, le
serveur va pouvoir attribuer un HighID au client, il ferme alors la connexion qu’il a ouverte avec le
client. La suite des échanges se déroule sur la connexion établie par le client.
Frame 16 : Le serveur envoie un message de type ID_CHANGE au client qui contient le HighID
attribué.
•
Cas d’attribution d’un LowID
Le cas où le serveur attribue un LowID à un client se produit lorsque le serveur ne peut
instancier une connexion TCP vers ce client. Nous avons reproduit ce scénario en appliquant la règle
IPTABLES suivante :
iptables –t filter –A OUTPUT –p tcp --dport 4662 –j DROP
On interdit ainsi les paquets sortant au niveau du serveur de type TCP avec le port de destination
4662 qui est le port sur lequel écoute le client. La tentative de connexion échouera donc et le serveur
attribuera un LowID au client.
Page 16
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Dans un tel cas, les échanges ont été déduits ainsi :
Les analyses de traces que nous avons effectuées confirment ces échanges :
Frame 1 – 3 : Connexion TCP standard du client au serveur.
Frame 4 : envoi du message Hello par le client.
Ici on ne voit pas la tentative de connexion de la part du serveur, car on l’a interdit au niveau système
d’exploitation Debian Etch grâce à la règle IPTABLES vu ci-dessous.
Frame 8 : La connexion entrante avec le client étant impossible, il renvoie par le biais de la connexion
instanciée par le client un message de type SERVER MESSAGE indiquant au client qu’il aura un LowID :
Frame 10 : Le serveur fait parvenir ce LowID de la même façon que pour le HighID, c'est-à-dire par le
message de type ID CHANGE.
Page 17
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Le LowID attribué ici au client est 2.
•
Cas d’un serveur plein
Il se peut qu’un serveur soit limité en nombre de connexion. Dans ce cas lorsque le client
fournit son login, le serveur envoie un message expliquant la raison de son refus et ferme alors la
connexion TCP.
Nous avons pour cela mis en place un scénario assez simple. Nous avons configuré notre serveur pour
qu’il n’accepte aucune connexion. Pour cela nous modifions le fichier de configuration donkey.ini en
mettant maxClients=0. Ainsi tout client sera rejeté.
Frame 3 – 5 : Connexion TCP standard
Frame 6 : message Login/Hello du client vers le serveur.
Frame 7 : Le serveur n’accepte aucune connexion, c’est le même cas lorsqu’il atteint le nombre
maximale de connexions autorisées. Il envoie un message de type SERVER MESSAGE avec la raison de
se son refus.
Page 18
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
La raison évoquée est : « Le serveur est plein ».
Dans ce paquet TCP nous trouvons alors le flag FIN à 1. Le serveur se déconnecte du client.
2. Mise à jour des différentes informations (listes de serveurs…)
Suite à la connexion du client, celui-ci va envoyer divers messages afin de transmettre au
serveur les fichiers qu’il veut partager avec d’autres clients, recevoir de la part du client une liste de
serveurs pour qu’il puisse mettre la sienne à jour, et des informations sur le serveur même. Ces
messages s’effectuent de la manière suivante :
Nous avons trouvé une petite différence avec ce modèle, nous allons l’expliquer grâce aux analyses
de traces que nous avons effectuées.
Page 19
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Nous pouvons déjà remarquer que deux clients sont connectés au serveur : les machines 192.168.1.4
et 192.168.1.2.
Frame 13 : Nous pouvons voir que le serveur envoie le message SERVEUR STATUS dans le même
paquet que celui d’ID_CHANGE et non pas après une demande de la liste des serveurs de la part du
client. Le message SERVEUR_STATUS renseigne le client sur le nombre de connectés au serveur et le
nombre de fichiers disponible :
Frame 16 : le client va envoyer au serveur la liste des fichiers qu’il veut partager avec d’autres clients.
Ce message est de type OFFER FILE. Ici notre client possède 4 fichiers à partager.
Page 20
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Frame 18 : Le client va ensuite demander au serveur de lui transmettre la liste de serveurs qu’il
contient afin de mettre à jour sa propre liste. Le message est de type GET SERVER LIST.
Ici nous pouvons voir que nous n’avons pas de réponse de la part du serveur, en effet nous avons
pourtant fourni un fichier serverList.met et server.met non vide mais aucun message SERVER LIST de
la part du serveur. En se connectant directement avec le serveur edonkeyServer No1, nous avons pu
voir cette réponse, elle fournit les adresses IP des différents serveurs ainsi que les numéros de port
sur lesquels ils écoutent.
Frame 20 : Le serveur envoie ensuite des informations le concernant, ce sont de simples chaînes de
caractères, le message est de type SERVER INFO DATA ou encore SERVER IDENTIFICATION comme
marqué plus haut dans le schéma :
Page 21
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Frame 25 : Dans le cas où des téléchargements sont en cours mais non pas été terminés, lorsque le
client se reconnecte à un serveur, il va tout de suite redemander des sources pour le fichier
incomplet, si aucun téléchargement n’était en cours, alors nous n’aurions pas les deux paquets
suivants. Ce message est de type GET SOURCES, il comporte simplement le hash du fichier dont on
veut connaître les sources pour pouvoir reprendre le téléchargement. Dans certaines captures que
nous avons effectué, nous avons remarqué deux types de messages ayant le même rôle : GET
SOURCES avec pour ID 0x19 et GET SOURCES OBFUSCATION avec pour ID 0x23. Nous n’avons pas
compris la différence entre ces deux messages.
Frame 26 : La réponse du serveur est un message de type FOUND SOURCES d’ID 0x42, comme
précédemment nous avons trouvé un autre message FOUND SOURCES OBFUSCATION d’ID 0x44. Ce
message contient les adresses IP où le fichier demandé est disponible. Le client récupérera ces
adresses et pourra se connecter directement au client possédant le fichier. Ici le serveur nous indique
que le fichier n’est disponible que chez l’adresse IP 192.168.1.2 sur le port 6346.
Ces échanges terminés, nous pouvons dire que le client s’est connecté correctement au serveur et a
reçu toutes les informations nécessaires pour effectuer une recherche et télécharger divers fichiers.
Nous allons détailler maintenant les échanges permettant cette recherche.
Page 22
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
3. Recherche et obtention d'une liste d'ID de téléchargement
Les documents que nous avons pu trouvés nous indiquent que la recherche à partir d’un
client d’un fichier se fait selon les échanges suivants :
Nos analyses de traces permettent de mieux comprendre ces échanges. A partir d’un client,
nous voulons télécharger par exemple la musique « machin.mp3 ». Celle-ci se trouve sur un autre
client connecté aussi sur le serveur. Notre recherche s’effectue par le mot clé « machin ».
Notre capture se présente ainsi :
Frame 29 : Nous pouvons voir un message de type SEARCH FILES, le client envoie tout simplement au
serveur le mot clé avec ce type de message.
Page 23
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Frame 30 : le serveur recherche alors dans la liste de fichiers que tous les clients partagent si un ou
plusieurs fichiers contiennent le mot « machin », il trouve la musique « machin.mp3 ». Il renvoie alors
un message au client de type SEARCH FILE RESULTS contenant les adresses IP et ports des clients qui
possèdent un fichier dont le nom matche le mot clé envoyé précédemment. Le message présente
aussi toutes les caractéristiques utiles sur le fichier (hash, nom, taille, disponibilité). L’obtention du
hash par le client est ici très importante, en effet il se peut que le contenu demandé se trouve chez
un autre client mais sous un autre nom. Cette source supplémentaire n’est pas mentionnée dans ce
message, c’est une capacité de téléchargement en moins pour le client. Nous allons voir comment
récupérer cette source dans la frame suivante. En effet dans notre scénario nous avons un client
possédant cette musique sous le nom « viva la vida ». Nous voyons bien que cette source n’est pas
répertoriée lors de la recherche.
Nous voyons bien ici qu’une seule source est transmise au client.
Frame 53 : Afin de récupérer toutes les sources sur un fichier, le client va envoyer au serveur un
message de type GET SOURCES, il transmet juste ici le hash du fichier et non le nom, ainsi si sur
plusieurs clients il existe le même contenu mais dont le nom diffère, le hash permettra d’identifier
tous les fichiers qui ont le même contenu. Le client veut télécharger la musique « machin.mp3 », il
demande au serveur tous les fichiers ayant pour HASH : 501F8738BD02426E0EB9B38B04739A.
Page 24
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Frame 54 : Le serveur renvoie alors une liste de clients qui possèdent le fichier ayant le même hash
par un message de type FOUND SOURCES. Le client a alors en sa possession toutes les adresses IP sur
lesquels il va pouvoir faire une requête de téléchargement, le client va pouvoir télécharger des
parties de fichier chez le client possédant le fichier « viva la vida.mp3 », le téléchargement de
« machin.mp3 » sera donc plus rapide. Grâce au hash, toutes les sources sont utilisées.
Conclusion : Cette première partie nous a permis de comprendre comment un client pouvait se
connecter avec un serveur et récupérer les adresses IP et port des clients qui possèdent le fichier que
le client veut télécharger, il a maintenant toutes les informations nécessaires pour pouvoir se
connecter directement à un autre client et demander le téléchargement du fichier voulu. Nous allons
voir maintenant comment s’effectue les échanges entre deux clients lors du transfert de fichiers.
B. Communication entre deux clients
1. Mécanisme de call-back dans le cas d’un client LowID
Avant d étudier minutieusement les échanges entre deux clients lors d’une demande de
téléchargement de l’un à l’autre, nous allons nous intéresser au mécanisme de call-back.
Comme nous avons pu le voir précédemment, le serveur attribue un LowID à un client s’il est
impossible pour lui d’établir une connexion entrante vers ce client. Ainsi deux clients possédant un
LowID ne pourront jamais s’échanger de données (cela pourrait se faire en faisant passer tout le
trafic par l’intermédiaire du serveur, mais cela demande trop de ressources pour que les serveurs les
autorisent). Si, par contre, un client possédant un HighID veut télécharger une source d’un client
Page 25
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
LowID, il va demander à ce dernier d’établir une connexion vers lui par l’intermédiaire du serveur. Le
serveur fera office de relai, et le LowID va alors se connecter au HighID et une communication pourra
alors être effectuée.
Pour observer ce mécanisme nous avons utilisé 3 machines, 192.168.1.4 représente le
HighID, 192.168.1.2 le LowID et 192.168.1.13 représente le serveur. Les deux clients sont connectés
au serveur et le HighID veut télécharger un fichier chez le LowID. La capture sous Wireshark nous
fournit ceci :
Frame 47 : Le HighID envoie un message de type CLIENT CALLBACK REQUEST au serveur pour lui
demandé au LowID d’établir une connexion vers lui. Le message contient le LowID du client. Ici 2.
Frame 60 : Le serveur fait suivre cette demande. Il envoie un message de type SERVER CALLBACK
REQUEST au LowID. Ce message contient l’adresse IP et le port du HighID. Le client va alors pouvoir
établir une connexion vers le HighID.
Frame 63 - 65 : le LowID instancie une connexion vers le HighID. Suit ensuite les messages
traditionnels de connexion. Le HighID pourra alors demander de télécharger un des fichiers du LowID.
Page 26
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
2. Téléchargement d’un fichier entre deux clients
•
Requête de téléchargement et échange du fichier
Nous allons étudier ici comme se passe l’échange d’un fichier entre deux clients. Pour que
cette procédure se déroule bien selon le protocole eDonkey original, nous avons choisi de mettre en
relation un client eMule 0.49b avec un client Shareaza 2.4.00 (deux clients eMule utiliseraient les
extensions protocolaires propres à eMule). Le client Shareaza est connecté à notre serveur et partage
un fichier. Le client eMule se connecte à son tour au serveur, recherche ce fichier et obtient donc une
source auprès du serveur. C’est un scénario où « tout se passe bien » donc. Le client eMule se
connecte au client Shareaza pour télécharger le fichier. Rappelons comment se déroule cette relation
selon le document « The eMule Protocol Specification » :
Le client A établit une connexion TCP vers le client B et lui envoie un message HELLO et
obtient en retour une réponse HELLO ANSWER.
Le client A demande alors le fichier au client B en envoyant un message FILE REQUEST et un autre
contenant uniquement l’identifiant unique du fichier, ce à quoi le client B réponds par les messages
FILE REQUEST ANSWER et FILE STATUS.
Dans le cas où le fichier est découpé en plusieurs parties de 9.28 Mo (c’est-à-dire que le fichier a une
taille supérieure à 9.28), il y a également échange de la liste des hash des différentes parties
(messages de type HASHSET REQUEST et HASHSET ANSWER) :
Page 27
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Le client A envoie ensuite un message START UPLOAD REQUEST et reçoit de la part de B un message
ACCEPT UPLOAD REQUEST. Le client A demande ensuite des parties du fichier avec un message
REQUEST FILE PARTS, auquel B réponds en envoyant des messages SENDING FILE PART.
Nous allons maintenant confronter ce schéma avec ce que nous avons pu observer avec Wireshark.
Dans cette capture, l’adresse IP du client qui veut télécharger le fichier (eMule) est 192.168.1.4 tandis
que celle du client qui détient le fichier (Sharezaza) est 192.168.1.5.
Page 28
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Comme attendu, le client eMule commence par établir une connexion TCP vers le client Shareaza :
Après l’établissement de la connexion, le client eMule envoie un message HELLO et reçoit en réponse
un message HELLO ANSWER :
Le client eMule continue ensuite en questionnant le client Shareaza avec un message FILE
REQUEST, et reçoit une réponse FILE REQUEST ANSWER. Puis le client souhaite connaître l’état du
fichier chez le client Shareaza : il envoie donc un message FILE STATUS REQUEST et reçoit comme
réponse un message FILE STATUS. Notons qu’à ce moment eMule envoie également un message
SOURCES REQUEST faisant partie de l’extension du protocole. Il cherche ainsi à obtenir plus de
sources auprès du client Shareaza. Ce dernier ne répond pas, mais la présence de ce message semble
indiquer que Shareaza est en mesure de le comprendre. L’absence de réponse est peut-être due au
fait que le client Shareaza est la seule source pour ce fichier : il ne connaît donc pas d’autres sources
que lui-même. Ce point reste néanmoins à vérifier, mais ce n’est pas notre propos car nous cherchons
à étudier le protocole eDonkey original (ID du protocole : 0xe3).
Le client eMule demande ensuite par un message HASHSET REQUEST la liste complète des
hash de toutes les parties de 9.28 Mo du fichier qu’il souhaite télécharger. Il obtient en réponse un
message HASHSET ANSWER. Ces deux messages sont présents car le fichier en question ici a une
taille supérieure à 9.28 Mo : il est donc constitué de plusieurs parties. Pour un fichier de taille
inférieure à 9.28 Mo, ces deux messages ne sont pas échangés, car dans ce cas le seul identifiant
unique du fichier est suffisant puisqu’il n’y a qu’une seule partie.
Page 29
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Le client eMule demande ensuite explicitement le début du téléchargement du fichier par un
message START UPLOAD REQUEST, ce à quoi il obtient une réponse ACCEPT UPLOAD REQUEST de la
part du client Shareaza. Remarquer que Wireshark nomme ces messages SLOT REQUEST et SLOT
GIVEN :
Le client eMule envoie ensuite une requête pour télécharger des parties du fichier avec un
message REQUEST FILE PART. Le client Shareaza y répond ensuite en envoyant les données du fichier
dans des messages de type SENDING FILE PART :
Nous allons nous intéresser de plus près à la structure du message REQUEST FILE PARTS. Voici
le contenu de celui contenu dans le paquet n°42 de la capture ci-dessus :
Premier bloc de
180 Ko
Dans un tel message, le client demande jusqu’à trois blocs maximum du fichier à télécharger.
Les blocs demandés sont déterminés par leurs positions de début (Start Offset) et de fin (End Offset)
par rapport au début du fichier. Nous remarquons ici que les blocs ont une taille fixe de 180 Ko (par
exemple pour le premier bloc : (9912320 – 9728000)/1024 = 184320/1024 = 180). Une fois que ces
trois blocs seront complétés, le client enverra un nouveau message REQUEST FILE PARTS pour
télécharger d’autres blocs et ainsi de suite.
Dans la pratique, le transfert d’un bloc de 180 Ko est effectué par l’envoi de plusieurs messages
SENDING FILE PART qui contiennent chacun une petite partie de ces 180 Ko. Voici un exemple :
Page 30
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Comme on le voit ci-dessus, un message SENDING FILE PART (e3 – 0x46) contient les positions
de début et de fin des données qu’il transporte par rapport au début du fichier. Ceci permet de savoir
à quel bloc il appartient (ici en l’occurrence ces données sont contenues au début du premier bloc
dont nous parlons ci-dessus).
Le client Shareaza était configuré pour envoyer exactement 10 Ko de données dans chacun de
ces messages (d’où Trailing/Undecoded data : 10240 bytes). Le réglage avancé de Shareaza pour cela
était eDonkey.FrameSize = 10 KB. Pour compléter un bloc de 180 Ko, le client eMule doit donc
attendre de recevoir 18 messages SENDING FILE PART de 10 Ko. Ces messages sont envoyés dans
l’ordre des données du fichier. Notons enfin qu’avec le protocole eDonkey, les données envoyées ne
sont pas compressées contrairement au protocole étendu d’eMule.
Erratum : Nous écrivions dans la partie II. B. 7. du rapport intermédiaire que l’en-tête du
message SENDING FILE PART contenait la taille du dernier paquet de données (dans le cas où tous les
paquets de données font la même taille sauf la taille du dernier qui est un reste dans une division
entière). Ceci n’est aucunement le cas ici ; c’est peut-être le cas dans la version étendue du protocole
par eMule (qui envoie des données compressées).
Nous nous rendons ici compte que le découpage d’un fichier en parties de 9.28 Mo est un
découpage logique opéré par le protocole eDonkey dans le but de favoriser la diffusion rapide des
fichiers et de permettre de minimiser les conséquences de la présence éventuelle d’erreurs. Ainsi,
lorsqu’un client télécharge une partie de 9.28 Mo, il envoie en fait successivement de nombreux
messages REQUEST FILE PART pour obtenir les blocs de 180 Ko qui recouvrent la partie en question.
Et lorsqu’il récupère un bloc, le client qui détient le fichier lui envoie successivement de nombreux
messages SENDING FILE PART qui recouvrent le bloc en question.
Page 31
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Le client A commence le téléchargement
d’une partie de 9.28 Mo du fichier.
Cela se traduit par de nombreux
messages REQUEST FILE PARTS portant
sur des blocs de 180 Ko qui sont envoyés
dans de nombreux messages SENDING
FILE PART.
Le téléchargement de la partie de 9.28
Mo est enfin terminé. Le client pourra
recommencer avec une autre partie.
Une question intéressante à étudier ici est la suivante : si la récupération d’un bloc de 180 Ko
est interrompue avant son terme, est-il possible de reprendre sa récupération à la position où le
téléchargement s’est arrêté ? Le cas échéant, cela doit-il se faire chez le même client ou bien la
reprise peut-elle se faire chez un autre client ?
Pour répondre à ces questions, nous avons lancé le téléchargement d’un fichier par le client
eMule chez le client Shareaza et nous l’avons interrompu immédiatement. Nous avons ensuite fermé
les deux logiciels et installé Shareaza sur un autre poste afin d’avoir un autre client partageant le
même fichier. Nous avons ensuite relancé le téléchargement dans le client eMule et observé les
messages qu’il a envoyés au nouveau client Shareaza.
Page 32
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Au début du téléchargement du fichier (chez le premier client Shareaza), le premier message
REQUEST FILE PARTS était le suivant :
Le téléchargement du premier bloc n’a pas été mené à son terme lorsque nous avons
interrompu le téléchargement. Le dernier message SENDING FILE PART pris en compte par eMule
était le suivant (il s’agissait du 3ème message de ce type car eMule indiquait « 30 Ko complété »,
même si nous avons vu passer 6 messages de ce type sur la capture Wireshark) :
Lorsque nous avons relancé le téléchargement avec le second client Shareaza, le premier
message REQUEST FILE PARTS envoyé par eMule était le suivant :
Nous observons alors que le premier bloc demandé est le même que lors de la première
tentative, à la différence que sa position de début (9758720) a été « avancée » à la position de fin
(9758720) du dernier message SENDING FILE PART qui avait été pris en compte. Le téléchargement
reprend donc exactement là où il a été interrompu. Remarquons que la position de fin de ce premier
bloc est toujours la même, ce qui signifie que le découpage des parties de 9.28 Mo du fichier en blocs
de 180 Ko est déterminée de façon définitive.
Page 33
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Nous en concluons donc que le téléchargement d’un bloc peut donc tout à fait être
interrompu et repris chez un autre client, grâce au fait que les messages SENDING FILE PART
contiennent les positions de début et de fin des données qu’ils transportent.
•
Fin ou pause/annulation du téléchargement :
Sur toutes les captures de trames que nous avons faites avec Wireshark, nous avons toujours
observé la transmission du même message lorsqu’un client terminait, mettait en pause ou annulait le
téléchargement d’un fichier. Il s’agit de celui-ci :
Ce message eDonkey de type 0x56 est nommé CANCEL TRANSFER dans le document « The
eMule Protocol Specification ». Il est dit dans ce document que ce message est envoyé dans le cas où
un client annule un téléchargement, ou bien lorsqu’il atteint le haut d’une file d’attente alors qu’il a
déjà récupéré le fichier chez un autre client. Ce document mentionne l’existence d’un autre message
de type END OF DOWNLOAD (0x49) que nous n’avons jamais observé dans la mesure où nous avons
toujours achevé les téléchargements avec eMule. Pour en revenir au message 0x56, il est à noter que
le nom donné par Wireshark est SLOT RELEASE, ce qui correspond à la libération d’une place de
téléchargement active chez un client (et recouvre donc tous les cas : fin, annulation).
•
Cas ou le fichier demandé n’existe pas
Que se passe-t-il lorsqu’un client se connecte à un autre client pour demander un fichier que
ce dernier ne possède pas ? Selon le document « The eMule Protocol Specification », le scénario
d’échange de messages est le suivant :
Et voici ce que nous avons observé avec Wireshark :
Page 34
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Cette capture a été faite avec un client eMule se connectant à un client Shareaza. L’adresse IP
du client eMule est 192.168.1.120 et celle du client Shareaza est 192.168.1.14 ; Nous observons le
client eMule envoyer son message de type FILE REQUEST, ce après quoi le client Shareaza renvoie un
message de type NO SUCH FILE. Nous observons ensuite après un certain temps (environ 40
secondes) la déconnexion TCP initiée par le client eMule.
3. Gestion des files d’attente
•
Mise en file d’attente/Reprise de téléchargement
Lorsqu’un client partage un fichier sur le réseau, il arrive que de nombreux clients veuillent le
télécharger en même temps. Le client sollicité ne peut alors pas répondre favorablement à toutes les
requêtes et place donc les demandes en trop dans une file d’attente.
Nous étudions ci-dessous le scénario suivant : un client Shareaza partage un fichier qui est
déjà en train d’être téléchargé par un client eMule. Nous avons fait en sorte que Shareaza ne puisse
accepter qu’une connexion à la fois (un seul « slot » de téléchargement) en donnant la valeur 100 %
au paramètre Uploads.FreeBandwithFactor (il faut 100 % de la bande passante maximale disponible
pour pouvoir ouvrir un nouveau slot, ainsi un seul slot maximum peut être ouvert). Un second client
eMule demande ensuite ce fichier et est donc mis en file d’attente. Le premier client eMule
interrompt son téléchargement, ce qui a pour effet de libérer le slot. Le second client eMule atteint
alors le haut de la file d’attente.
N.B. : Nous n’avons pas étudié le cas où le second client eMule aurait téléchargé le fichier entre
temps chez une autre source avant d’atteindre le haut de la file.
Selon le document « The eMule Protocol Specification », voici ce qu’il se passe :
Le client A est mis en file d’attente :
Page 35
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Le client A atteint le haut de la file d’attente :
Voici ce que nous avons pu observer avec Wireshark (l’adresse IP du client eMule est
192.168.1.4 et celle du client Shareaza est 192.168.1.2) :
Et lorsque l’autre client eMule libère le slot unique qu’il occupait :
Au début, le client eMule se connecte au client Shareaza et les deux clients s’échangent les
différents messages que nous avons vus précédemment. Lorsque le client eMule envoie le message
START UPLOAD REQUEST (ou SLOT REQUEST sur la capture), il n’obtient pas de réponse ACCEPT
UPLOAD REQUEST (ou SLOT GIVEN) mais il reçoit un message de type QUEUE RANKING. C’est un
message spécifique au protocole étendu d’eMule contenant la position du client dans la file d’attente.
Voici son contenu dans notre scénarion (le client eMule obtient le numéro 1 dans la file d’attente) :
Nous n’observons pas ensuite de déconnexion TCP immédiate entre les deux clients (mais elle
a en fait bien lieue au bout d’un certain temps). Par conséquent, nous n’avons pas observé par la
suite de reconnexion TCP ni de poignée de main (HELLO / HELLO ANSWER) entre les deux clients ().
Ainsi, lorsque l’autre client eMule qui occupait le seul slot disponible se retire, le client
Shareaza envoie directement à notre client eMule un message de type ACCEPT UPLOAD REQUEST (ou
Page 36
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
SLOT GIVEN) lui permettant de commencer à télécharger le fichier (message de type REQUEST FILE
PARTS, etc).
•
Combien de files d’attente
Nous cherchons à savoir comment un client gère les demandes de connexions des autres
clients et plus particulièrement s’il existe une file d’attente pour chaque fichier partagé, ou bien une
seule file d’attente globale pour l’ensemble des fichiers partagés.
Pour cela, nous avons connecté au serveur un client Shareaza partageant deux fichiers
différents. Nous avons fait en sorte que Shareaza ne puisse accepter qu’une connexion à la fois (un
seul « slot » de téléchargement) en donnant la valeur 100 % au paramètre
Uploads.FreeBandwithFactor (il faut 100 % de la bande passante maximale disponible pour pouvoir
ouvrir un nouveau slot, ainsi un seul slot maximum peut être ouvert).
Un client eMule se connecte alors pour télécharger le fichier 1 et obtient le slot : il télécharge le
fichier. Un deuxième client eMule se connecte à son tour pour télécharger le fichier 1 : il obtient en
réponse un numéro de file d’attente égal à 1. Un troisième client eMule se connecte enfin pour
télécharger cette fois-ci le fichier 2 : il obtient en réponse un numéro de file d’attente égal à 2.
(2) QR =
1
(1) Un
client
obtient le
slot unique
(3) QR =
2
S’il y avait une file d’attente différente pour chaque fichier, le troisième client aurait du être
mis en attente pour ce fichier avec un numéro de file d’attente égal à 1 (puisqu’aucun autre client n’a
réclamé ce fichier avant lui). Pourtant il obtient le numéro 2. Nous pensons donc qu’il n’y aurait
qu’une seule file d’attente pour accéder à l’ensemble des fichiers partagés, en tout cas en ce qui
concerne Shareaza. Il nous faudrait faire des tests plus poussés avec différents clients partageurs pour
pouvoir répondre. Le document « The eMule Protocol Specification » indique par exemple au
contraire qu’il y a une file d’attente pour chaque fichier partagé : eMule gère donc peut être quant à
lui plusieurs files d’attentes. Cela reste à vérifier. Il est ainsi possible que le nombre de files d’attentes
diffère selon les clients eDonkey utilisés.
Page 37
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
Conclusion
Ce projet nous a passionné, en effet il comportait tous les ingrédients pour susciter notre
curiosité et notre intérêt. Nous nous sommes posés beaucoup de questions autour du protocole
edonkey et nous avons essayé au mieux de les résoudre expérimentalement, découvrir par nousmêmes comment les échanges s’effectuaient entre les divers clients et serveurs. Nous avons pu grâce
à ce projet étudier minutieusement un protocole de communication, cela nous servira
obligatoirement dans notre avenir professionnel. Nous n’avons pas pu étudier l’ensemble du
protocole edonkey parfois par manque de ressources mais aussi par le temps imparti. Nous n’avons
pas étudié la priorité des serveurs (gérée par Shareaza) ni la manière dont sont gérés les nouveaux
serveurs envoyés par un serveur lorsqu’on se connecte à celui-ci. Nous aurions pu aussi étudié les
échanges entre communication entre les serveurs. D’autres questions intéressantes avaient été
soulevées avec les deux doctorants qui n’ont pas été traités Nous avons préféré nous concentrer sur
les parties les plus importantes du protocole edonkey et nous pensons que cet objectif est réussi.
Page 38
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
SR04 – Réseaux informatiques
COMPTE RENDU
03/12/2008
17H15
CENTRE DE RECHERCHE ROYALLIEU
REUNION ORGANISEE PAR
Equipe projet SR04
TYPE DE REUNION
Réunion de présentation du projet « Implémentation d’une infrastructure eDonkey »
ANIMATEURS
Mahdi Amine ABDELOUAHAB et Sinan HATAHET
PARTICIPANTS
Cédric Aubert
Lahoucine Jazza
Mathieu Max
Mahdi Amine ABDELOUAHAB
Sinan HATAHET
ORDRE DU JOUR
Présentation de notre projet et discussion des pistes de réflexion
envisageables.
TEMPS DE LA REUNION
01H00
DISCUSSION
Les discussions que nous avons tenues avec les deux doctorants étaient principalement axées sur le(s)
mécanisme(s) du protocole eDonkey et nous sommes arrivés au fait que peu de références bibliographiques
existent principalement « The Emule Protocol Specification » écrit par Yorm Kulbak et Danny Bickson de « The
Hebrew University of Jerusalem ».
Nous citerons une liste de pistes de réflexion non exhaustive :
1. Est-ce qu’un client peut télécharger deux fichiers en parallèle de chez le même client ?
2. Est-ce que les clients tiennent une file d’attente par fichier ou une liste d’attente globale pour l’ensemble de
fichiers partagés ?
3. Si le client reçoit une liste de serveurs, comment agit-il c.à.d. les ajoute t-il à la fin d fichier server.met ou les gère
autrement ?
4. Pdonkey API écrite en Perl destinée à manipuler le protocole eDonkey.
5. Ranking binaire : les crédits sont gérés de façon binaire entre chaque deux clients.
6. Le serveur le plus populaire en l’occurrence Lugdunum est open source, néanmoins difficilement trouvable sur
internet !
CONCLUSIONS
Il a été convenu d’inviter les deux doctorants (i.e.: Mahdi Amine ABDELOUAHAB et Sinan HATAHET) à notre présentation
en amphithéâtre et de les informer des résultats auxquels l’on est arrivé à la fin de notre étude.
MESURES A PRENDRE
PERSONNE RESPONSABLE
Page 39
DELAI A RESPECTER
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
COMMUNICATION ENTRE LA
A MACHINE HOTE ET UNE
UN MACHINE « VIRTUALISEE » SUR VIRTUALBOX
« VirtualBox est une machine virtuelle créée par InnoTek sur les hôtes Windows,
Windows GNU/Linux
32 et 64 bits et Mac OS X supportant Windows (dont Vista), Linux 2.x, OS/2 Warp, OpenBSD et
FreeBSD commee systèmes invité. Après plusieurs années de développement, VirtualBox a été publié
sous la licence GNU GPL en janvier 2007.»
2007 (source Wikipédia).
Après avoir virtualisé notre système d’exploitation (GNU/Linux Ubuntu dans notre cas),
cas au
moins une interface réseau est installée
installé par défaut (on peut le vérifier avec la commande ifconfig
ifc
ou
/sbin/ifconfig ).. Au plus quatre interfaces réseaux peuvent être définies (nommées Adaptateur 1,
Adaptatur 2 , Adaptatur 3, Adaptatur 4) cf. la photo ci-dessous.
Par défaut la machine hôte et la machine virtuelle ne communiquent pas (le Ping entre
e
les
deux machines n’aboutit pas), or dans notre projet nous avons voulu travailler sur la machine
virtuelle comme serveur eDonkey et donc il fallait que cette machine soit accessible aux les autres
clients eDonkey.
Afin de répondre à cette contrainte,
contrainte VirtualBox a prévu une solution quii se résume à ceci :
Dans le menu Machine : Préférences > Réseau :
Page 40
AUBERT Cédric - DI GIACOMO Marion - JAZZA Lahoucine – MAX Mathieu
1) Cocher la case « Activer l’adaptateur réseau » s’il n’est pas déjà coché.
2) Dans l’option Attaché à, choisir « adaptateur réseau hôte » et vérifier que la case « Câble
relié » est cochée.
A ce stade, nous avons relié la machine virtuelle à notre réseau.
3) Maintenant on va créer un réseau entre votre ordinateur virtuel et votre ordinateur réel, il
suffit d’appuyer sur le bouton :
puis une boite de dialogue s’ouvre dans laquelle l’on va
choisir le nom de l’interface (exemple : VirtualBox Interface hôte 1).
Maintenant il faut définir sur la machine hôte un pont entre l’interface crée précédemment
et l’interface de connexion par défaut sur la machine hôte (dans la cas exemple c’est la Connexion
réseau sans fil).
Sous Microsoft Windows Vista, aller dans Panneau de configuration > Centre Réseau et
partage > (dans le panneau gauche) Gérer les connexions réseau. Ici, il suffit de sélectionner les deux
interfaces comme dans l’image ci-dessous puis clique droit « Connexions de pont ». C’est le même
principe sous Windows XP.
Enfin, il suffit le redémarrer la machine hôte pour que nos deux machines puissent
communiquer.
Pour vérifier que nos deux machines communiquent, il suffit le taper sur la ligne de
commande: ping @IP( la machine émulée).
Page 41

Documents pareils