Académique Documents
Professionnel Documents
Culture Documents
Département Informatique
Thème
Réalisé par :
CHEKKAL Kamel
HAMIDOUCHE Salim
Juin 2008
A nos chers parents
A nos frères et sœurs
A tous nos proches, familles et amis.
Remerciements
Nous remercions les jurys, Monsieur Moumen de nous avoir fait l’honneur de
présider le jury de notre soutenance, Mesdemoiselles Yessaad et Boulefkhar d’avoir
accepté d’examiner et de juger notre travail.
III
Résumé
Résumé : Dans ce mémoire, nous décrivons le contexte actuel des réseaux en donnant une
synthèse des protocoles de routage dans les réseaux Client/Serveur, ad hoc et pair à pair. Dans
le modèle P2P, les participants jouent le même rôle. L’absence d’une autorité centrale suppose
qu’un pair est capable de trouver un autre pair pour pouvoir communiquer avec lui, c’est la
fonction de recherche et localisation. Celle-ci doit être assurée par chaque pair. Une recherche
efficace dépend directement de la politique de routage des informations entre les participants
au système P2P. Depuis les débuts de ce modèle, on tente continuellement d’optimiser le
routage dans l’objectif d’utiliser parfaitement les ressources disponibles sur le réseau. Ceci a
constitué l’objet de notre étude.
Nous avons proposé une nouvelle approche de routage basée sur le principe des algorithmes à
permissions d’arbitres qui est une famille des algorithmes à quorums, nous visons
essentiellement à minimiser le nombre de messages utilisés pour garantir un routage efficace et
assurer un parcours exhaustif du réseau. Enfin, nous avons réalisé une application
communicante sous Corba qui implante les fonctionnalités du protocole proposé.
Abstract : In this repport, we describe the current networks context by providing a synthesis of
routing protocols in Client / Server, ad hoc and peer to peer networks. In the P2P model,
participants play the same role. The absence of a central authority requires that a peer is able to
find another peer in order to communicate with him, this is called search and location function.
It must be ensured by each peer. An efficient search depends directly on routing policy of the
information between participants to the P2P system. Since its beginning, we try continually to
optimize routing in order to fully utilize the available resources on the network. This
represented the subject of our study.
We proposed a new routing approach based on the principle of quorum algorithms, we are
aiming primarily to minimize the number of messages used to guarantee an efficient routing
and ensure an exhaustive search on the network. Finally, we realised a communicating
application with Corba, in which we implemented features of the proposed protocol.
IV
Table des Matières
Dédicace ........................................................................................................................... II
Résumé ........................................................................................................................... IV
PARTIE I
PARTIE II
4 Problématique ............................................................................................................ 26
5 Proposition ................................................................................................................. 28
VII
Table des Matières
Bibliographie .............................................................................................................. 59
Annexe A .................................................................................................................. 63
Annexe B .................................................................................................................. 72
VIII
Table des Figures
IX
Table des Figures
X
Table des Algorithmes
XI
Liste des Abréviations
AS =Autonomous System.
BGP = Border Gateway Protocol.
CAN = Content Addressed Network.
XII
Introduction Générale
Un système construit suivant le modèle P2P est constitué d’un ensemble de pairs
interconnectés en réseau d’une façon complètement décentralisée. Chaque pair met ses
ressources à disposition des autres pairs et joue par là le rôle d’un serveur. En même
temps, chacun contacte les autres pairs pour obtenir les ressources dont il a besoin et joue
1
Introduction Générale
par cela le rôle d’un client. Ce type de systèmes a pour objectif de mutualiser les
ressources disponibles sur les pairs participants au système. Ajouté à cela le caractère
dynamique des participants qui peuvent à n’importe quel instant se déconnecter du
réseau. Les systèmes peer to peer sont classifiés en : centralisés, hybrides et purs.
Notre rapport est organisé en deux parties, chacune comprenant trois chapitres :
Le premier chapitre, portant sur les réseaux ordinaires suivant le modèle Client/Serveur,
présente les notions inhérentes au routage dans ces réseaux et les protocoles pour le
routage direct intra-domaine et le routage indirect inter-domaines.
Le deuxième chapitre, traitera des réseaux ad hoc, expose les principaux protocoles et
leurs principes de fonctionnement. Ils sont classés en deux grandes familles : proactifs et
réactifs.
2
Introduction Générale
Le troisième chapitre est le dernier de la première partie, il est consacré aux réseaux peer
to peer. Dans ce chapitre, nous avons présenté ce type de réseau, ses caractéristiques, une
classification possible de ses protocoles de routage et les domaines d’application.
Nous avons entamé la deuxième partie du rapport avec le quatrième chapitre qui annonce
la problématique du routage dans les systèmes peer to peer.
Le cinquième chapitre expose le détail de notre proposition. Nous avons commencé par
présenter le principe des algorithmes à permissions d’arbitres, suivi par la description du
protocole et terminé par une évaluation de ses fonctionnalités.
Le dernier chapitre comprend une modélisation dans le langage UML d’une application
communicante qui utilise le principe du protocole pour s’échanger les messages et la
description de la réalisation et de son implantation sous le bus JacORB de la norme
Corba.
3
Partie I
Nous utiliserons les termes : pair à pair, P2P, égale à égale ou encore peer to peer pour
désigner un système ou un réseau pair à pair, et les mots : nœud, pair, utilisateur ou
participant pour désigner une machine qui participe au réseau. Une machine désigne un
ordinateur dans son ensemble matériel et logiciel lui permettant de rejoindre le réseau et
d’interagir avec les autres nœuds.
Chapitre Premier
1.1 Définitions
Les protocoles de routage se scindent en deux grandes familles, une est basée sur
le principe de vecteur de distance et l’autre sur le principe d’état de lien. Ci-après, on
précisera la nature de l’information de routage utilisée par chacune des familles et le
mécanisme d’échange de ces informations et de mise à jour des tables de routage.
Quelques autres notions utilisées généralement par les protocoles de routage sont aussi
définies.
1.1.1 Le routage
La table de routage est une base d’informations qui contient des informations
sur les nœuds qui forment le réseau, ces informations vont de l’adresse IP d’un voisin au
débit du lien, et bien d’autres informations plus ou moins complexe selon les cas et les
4
Chapitre Premier Routage dans les Réseaux Ordinaires
besoins de chaque protocole. Ces tables sont évidemment gérées par les protocoles de
routage qui les utilisent à cette fin.
Les protocoles qui utilisent ce critère sont itératifs : car ils continuent de
transmettre les informations de routage tant qu’elles sont disponibles, asynchrone :
chaque envoi se fait indépendamment de l’état du récepteur.
Algorithme de mise à jour des tables de routage: Les routeurs diffusent leurs tables de
routage régulièrement (entre 10 et 90 seconds) à tous leurs voisins directs. Ces derniers
peuvent, si nécessaire, mettre à jour leurs tables en respectant les règles qui vont suivre.
Pour chaque nœud :
Si le coût contenu dans la table reçue plus le coût pour aller au routeur
émetteur de cette table est inférieur au coût indiqué dans l’ancienne table,
alors cette entrée est remplacée par la nouvelle qui est plus courte.
La mise à jour d’une entrée au niveau d’un routeur engendre l’émission de cette nouvelle
table aux nœuds et routeurs voisins.
Les échanges entre les routeurs continuent jusqu’à convergence de l’algorithme (jusqu'à
ce que toutes les tables soient identiques).
Les protocoles qui sont implémentés sur ce critère nécessitent des tables de
routages plus volumineuses que leurs semblables basés sur le vecteur distance, cela se
justifie par la nature de l’information de routage utilisée par ces derniers.
L’information de routage : l’état d’un lien peut être décrit par différentes informations,
citons par exemple : le délai de transmission, la fiabilité du lien, sa charge ou encore son
débit.
5
Chapitre Premier Routage dans les Réseaux Ordinaires
Si une entrée n’existe pas dans la table alors l’ajouter, et diffuser le LSP à
tous les nœuds excepté l’émetteur.
Les systèmes autonomes sont des ensembles de sous réseaux et de routeurs sous
une administration commune, toutes les parties d’un AS doivent être connexes, chaque
AS a un numéro propre à lui. Au sein d’un même système autonome, on utilise les
protocoles internes à l’exemple de RIP (Routing Information Protocol), OSPF (Open
Shortest Path First Protocol), etc. A l’extérieur d’un system autonome (Interconnexion
de plusieurs AS), on utilise les protocoles externes (Exterior Protocols ou Interdomain
Routing Protocols) à l’exemple de BGP (Border Gateway Protocol).
6
Chapitre Premier Routage dans les Réseaux Ordinaires
Les protocoles les plus utilisés sont les suivants: RIP (Routing Information
Protocol), IGRP (Internet Gateway Routing Protocol), OSPF (Open Shortest Path First
protocol), IS-IS (Intermediate System to Intermediate System protocol) (SISCO).
RIP (Routing Information Protocol) [2]: ce protocole est utilisé dans les
réseaux ne dépassant pas 15 routeurs, basé sur l’algorithme de Belleman-
Ford qui utilise la notion de vecteur de distance. A chaque route est associée
une métrique M qui représente le coût de cette route en nombre de routeur à
traverser (sauts). Chaque routeur envoie systématiquement sa table de
routage à ses voisins (toute les 30 secondes). A la réception des informations
7
Chapitre Premier Routage dans les Réseaux Ordinaires
OSPF (Open Shortest Path First protocol) [2]: ce protocole est venu combler
les lacunes de RIP en introduisant la possibilité de gérer des domaines de
diamètre supérieur à 16 routeurs. Il utilise une métrique M plus sophistiquée
consistant en la prise en compte des débits et enfin la segmentation du
domaine en aires (morceaux du réseau physique). C’est un protocole basé sur
l’algorithme du plus court chemin (Shortest Path First) de Dijkstra qui utilise
la notion d’état de lien, chaque routeur construit un arbre de coût minimum à
partir d’une table d’information de routage commune à tous les routeurs.
Cependant ces performances ne sont pas sans prix, car il faut des routeurs
plus puissants et sa configuration est plus difficile que RIP.
Le plus connu est BGP, il s’occupe du routage entre les systèmes autonomes.
1.4 Conclusion
Tout au long de ce chapitre, nous avons relaté les algorithmes de routage les plus
utilisés dans les réseaux conventionnels client/serveur, qui sont les plus utilisés dans le
web et par la plupart des applications. Cependant, l’évolution des besoins en termes de
réseaux et de télécommunication a engendré l’avènement de nouveaux types de réseaux,
et par la même, de nouveaux algorithmes de routages adaptés à ces nouvelles topologies
de réseaux.
8
Chapitre Premier Routage dans les Réseaux Ordinaires
Dans le deuxième chapitre, nous allons présenter les protocoles de routage pour les
réseaux ad hoc. Ce type de réseau est utilisé dans de nombreuses applications, parmi
lesquelles nous pouvons citer les télécommunications (téléphone sans fil, réseaux Wifi)
et aussi les réseaux de capteurs.
9
Chapitre Deuxième
On distingue deux types de protocoles de routage dans les réseaux ad hoc selon
la philosophie de recherche des routes : les protocoles proactifs et les protocoles réactifs.
Les protocoles de routage proactifs essaient de maintenir les meilleurs chemins existants
vers toutes les destinations possibles éventuellement vers l'ensemble des nœuds du
réseau, au niveau de chaque nœud. Les routes sont sauvegardées mêmes si elles ne sont
pas utilisées. La sauvegarde permanente des chemins de routage, est assurée par un
échange continu des messages de mise à jour des chemins entre les nœuds qui constituent
le réseau, ce qui induit une surcharge du réseau surtout dans le cas des réseaux de grande
taille.
10
Chapitre Deuxième Routage dans les Réseaux Ad hoc
L'adresse de la destination.
Le nombre de noeuds (ou de sauts) séparant le noeud de la
destination.
Le numéro de séquence (des données reçues depuis la destination)
tel qu'il a été estampillé par la destination.
11
Chapitre Deuxième Routage dans les Réseaux Ad hoc
Les protocoles de routage réactifs, représentent les protocoles les plus récents
proposés dans le but d'assurer le service de routage dans les réseaux sans fil. A l'inverse
des protocoles proactifs, ils créent et maintiennent les routes selon les besoins. Lorsqu’un
12
Chapitre Deuxième Routage dans les Réseaux Ad hoc
pair a besoin d'une route, une procédure de découverte globale de routes est lancée, et
cela dans le but d'obtenir une information spécifique, inconnue au préalable.
C’est un protocole qui se base sur la notion de groupe tel que à chaque
groupe est associé un représentant qui dispose d’une table de groupes adjacents, où
chaque entrée est de la forme <ID groupe, Nœud de liaison, Nœud
représentant>, et une table des membres du groupe. Cette dernière contient
l’ensemble des nœuds membres du groupe. Les membres, quant à eux, disposent
d’une table de voisins qui contient ; pour chaque voisin ; le statut (membre ou
représentant de groupe) et l’état du lien (uni ou bidirectionnel). L’échange des
informations de routage se fait par inondation.
13
Chapitre Deuxième Routage dans les Réseaux Ad hoc
les liens soient orientés du nœud de plus grande taille vers celui de plus petite
taille. Les messages de mise à jour sont limités aux nœuds les plus proches de
l’occurrence du changement de la topologie (où s’est produit le changement).
Son but étant de trouver des routes de longues durées de vie, ce protocole
définit une nouvelle métrique appelé le degré de stabilité d’association, dont une
valeur est associé à chaque entrée de la table de routage et qui est incrémentée à
chaque fois que le nœud reçoit un signal du nœud auquel correspond l’entrée.
Plus le degré de stabilité d’association est grand plus la connexion entre les deux
nœuds est stable. De plus, une grande stabilité de la connexion entre deux nœuds
veut dire, dans le cas des réseaux ad hoc, un état bas de mobilité des nœuds
correspondants ; et le contraire engendre un petit degré de stabilité du réseau.
Ce protocole procède d’une manière très similaire à DSR sauf qu’il utilise
les informations de localisation fournies par le système de positionnement global
appelé GPS (Global Positioning System). A cela viennent s’ajouter deux
approches possibles.
14
Chapitre Deuxième Routage dans les Réseaux Ad hoc
15
Chapitre Deuxième Routage dans les Réseaux Ad hoc
2.3 Conclusion
On remarque que les protocoles utilisés dans les réseaux ad hoc, utilisent des
philosophies différentes de celles utilisées dans les réseaux conventionnels. Cela est dû
aux différences de topologies du point de vue du dynamisme des nœuds, de leur
autonomie et du type des connexions qui les relient (filaires et sans fil).
16
Chapitre Troisième
Les systèmes pair à pair sont des systèmes distribués formés par
l’interconnexion d’ordinateurs qu’on désigne par nœuds, n’obéissant à aucune autorité
centrale, ces nœuds sont capables de s’auto-organiser en réseau dans l’objectif de
partager des ressources comme les contenus (fichiers de tout type), la puissance de
calcul, l’espace de stockage et la bande passante. Ces systèmes présentent des capacités
intéressantes de tolérance aux fautes et une aptitude à gérer le caractère dynamique des
nœuds participant au réseau, offrant ainsi un niveau de performance et de connectivité
acceptables.
3.2.1 Décentralisation
17
Chapitre Troisième Routage dans les Réseaux Pair à Pair
rôle de client et de serveur. Chaque nœud partageant ses ressources sera considéré
comme serveur. Des mécanismes de dissémination et de duplication permettent
ainsi aux nœuds du réseau d’obtenir une ressource particulière sur une multitude de
serveurs. L’avantage de la décentralisation est qu’elle permet un niveau important
de tolérance aux fautes du fait de la duplication du serveur traditionnel.
3.2.2 Auto-organisation
Les nœuds dans les réseaux pair à pair présentent une connectivité de
nature intermittente et cela est dû principalement à deux phénomènes qui sont le
comportement imprévisible des clients et la mobilité des nœuds.
De nature très dynamique et d’une existence très contestée, les réseaux P2P se
sont diversifiés surtout du coté de l’échange et de la recherche de contenus et de
ressources. Les systèmes pair à pair se scindent en trois grandes familles si on considère
18
Chapitre Troisième Routage dans les Réseaux Pair à Pair
le niveau d’autonomie des nœuds composant le réseau vis-à-vis de toute autorité centrale
si elle existe.
Les systèmes centralisés étaient les premiers à apparaitre. Nés en 1999, ils se
composent d’un serveur centralisé qui indexe les objets disponibles sur le réseau
(répertoire central), et de nœuds qui peuvent demander ou\et proposer ces objets par le
biais de ce serveur. Seule la récupération de ces objets se fait en mode pair à pair pur.
Les systèmes purs n’utilisent aucun serveur, du fait que tous les nœuds sont
égaux, puisque ils jouent tous le même rôle de serveur et de client en même temps.
La section qui va suivre présentera les cinq paradigmes qui en découlent. La figure 3.1
présente les différentes topologies existantes avec des exemples de systèmes pour chaque
type.
19
Chapitre Troisième Routage dans les Réseaux Pair à Pair
Systèmes
Distribués
« Napster
Annuaire » eDonkey
De serveurs Kazaa
De serveurs CAN GNUTella
Structurée
Chord
Groove eMule GNUTella 2 Freenet
Pastry
Magi
Figure 3.1. Classification des systèmes pair à pair
La recherche, quand à elle, se fera par l’envoi d’un message de requête par le nœud
demandeur qui va contenir le nom du fichier recherché. Le serveur répondra par un
message contenant les adresses et les numéros de port des nœuds qui disposent de l’objet
en question. Ainsi, la récupération du fichier (objet) se fera, elle, en mode pair à pair, en
créant une connexion entre les deux nœuds (source et demandeur).
20
Chapitre Troisième Routage dans les Réseaux Pair à Pair
Les applications les plus célèbres, qui utilisent ce type de protocoles sont bien eMule et
eDonkey.
21
Chapitre Troisième Routage dans les Réseaux Pair à Pair
Les exemples d’applications, les plus populaires, qui implémentent ce genre de protocole
sont entre autre KaZaA, FastTrack et GNUTella 2.
22
Chapitre Troisième Routage dans les Réseaux Pair à Pair
Applications
P2P
Calcul par
Calcul Projet
Composant
Intensif Jxta
Applications
Filtrage
Partagées Systèmes
Messages Extraction
de Fichiers
Instantanés Jeux
Echange
de
Contenu
23
Chapitre Troisième Routage dans les Réseaux Pair à Pair
3.5.2 Collaboration
Le succès grandissant réalisé par les systèmes P2P, est dû en partie à l’échange
grand public de fichiers de musique ou vidéo. Ce domaine rassemble plusieurs
applications dont les plus connues GNUTella, Kazaa, eDonkey, eMule, Bittorent, et
d’autres moins connues comme iMesh, Morpheus.
Comme avec l’échange, un autre type d’application relatif aux fichiers et à leur accès par
le biais du modèle P2P concerne le stockage de fichiers. On trouve plusieurs applications
telles que CFS, PAST ou OceanStore qui sont toutes construites sur base de tables de
hachage distribuées et qui proposent de construire un système de fichiers de type
distribué parmi une communauté de pairs. L’objectif est de fournir un service similaire à
NFS (Network File System) qui ne nécessite aucune architecture centralisée [26].
24
Chapitre Troisième Routage dans les Réseaux Pair à Pair
Jxta une initiative de Sun, étant une des premières propositions de plate-forme générique
et est actuellement une des plus complètes et des plus déployées [26]. Microsoft, de son
côté propose deux infrastructures pour le développement des applications P2P. La
première est une extension de la plate-forme de développement de services web .NET.
Nous citerons aussi le middleware Corba qui offre tout un éventail de bus dont JacORB
avec lequel nous allons travailler.
3.6 Conclusion
Nous avons pu constater que le modèle P2P est adéquat à plusieurs situations
nécessitant la mise en relation de machines en vue d’échanger des contenus ou
d’effectuer des calculs répartis ou encore de la sauvegarde, autrement il offre des
fonctionnalités très intéressantes pour les applications distribuées nécessitant une
puissance de calcul importante. Il constitue une alternative aux systèmes client serveur
pour résoudre des problèmes dont ces derniers sont incapables de faire.
Nous avons vu au cours de ces trois chapitres différentes architectures des réseaux
existants et les techniques de routages utilisées dans chacune. Dans la partie suivante
nous donnerons une nouvelle approche de routage dans les réseaux P2P.
25
Partie II
Dans cette deuxième partie nous utiliserons fréquemment le terme "servent" pour
signifier que les nœuds du réseau jouent tous un rôle identique.
Chapitre Quatrième
Problématique
Des observateurs d’industrie disent des systèmes peer to peer qu’ils deviennent
une technologie réseau de plus en plus importante [34]. Ce type de réseaux offre des
capacités accrues pour répondre aux besoins croissants des organisations en ressources
de traitement et de stockage.
Des plateformes récentes pour exécuter des applications réparties utilisent la technologie
du peer to peer pour interconnecter les machines qui les composent. Comme nous l’avons
expliqué dans les précédents chapitres, les nœuds du réseau dans le modèle pur se
comportent à la fois comme client et serveur. Ainsi n’importe quel nœud est susceptible
d’envoyer et de recevoir des requêtes vers et en provenance des autres nœuds. Cela exige
de concevoir une politique de routage des messages entre les pairs sans pour autant
recourir à un serveur central permanent.
Pour le routage des messages échangés sur le réseau, chaque protocole tente d’optimiser
le nombre de messages qui traversent d’un pair à un autre et garantir ainsi une stabilité du
système [33]. La recherche de chemins et surtout du plus court chemin reste un critère de
performance très important. Tout protocole de routage essaie de réduire les délais
d’attente et pallier aux problèmes de défaillance des nœuds et leur caractère dynamique.
26
Chapitre Quatrième Problématique
Si la réponse à une requête n’existe pas sur le réseau, on devrait interroger tous les nœuds
du réseau pour pouvoir le confirmer. Cela suppose un parcours exhaustif qu’il faut
réaliser sans pour autant générer des surcharges inutiles sur le réseau.
27
Chapitre Cinquième
Proposition
5.1 Introduction
Plusieurs protocoles de routage, des structurés aux non structurés, dédiés aux
systèmes peer to peer ont été conçus et chacun implante sa propre politique de routage.
Nous citons à titre de rappel CHORD ou PASTRY qui utilisent les tables de hachage
distribuées pour structurer le réseau, ou encore Gnutella qui suit le modèle non structuré
pur et qui utilise l’inondation pour propager les messages en désignant aléatoirement ses
voisins dans le réseau, ce qui est un inconvénient vue la charge induite [32]. Dans cette
section, nous présentons un nouveau protocole de routage dans un système peer to peer
qui utilise le principe des algorithmes à quorums et plus exactement le principe de
permissions d’arbitres proposé dans [35] pour optimiser le nombre de messages émis sur
le réseau. Nous allons d’abord présenter ce principe puis nous décrirons le
fonctionnement du protocole. Dans la présentation du principe, nous décrirons les
critères de construction d’ensembles d’arbitres, sans toutefois proposer de mécanisme
pour sa réalisation, ce problème sort de notre champ d’étude. Nous ne traiterons que de
l’utilisation de ces ensembles pour réaliser le routage, et nous montrerons les avantages
de l’utilisation de notre proposition.
28
Chapitre Cinquième Proposition
29
Chapitre Cinquième Proposition
B veut s-c
A veut s-c
Arbitre
commun
(c1) :
(c2) :
La contrainte (c1) exprime que tous les sites doivent demander et obtenir le même
nombre de permissions pour pouvoir entrer en section critique ; la contrainte (c2) indique
que chaque site joue un rôle d’arbitre pour le même nombre de sites. La première garantit
la règle du même effort et la deuxième celle de la même responsabilité. Ce principe
devient très intéressant surtout pour des valeurs de K et D raisonnablement petites
permettant de construire des ensembles Ri petits.
30
Chapitre Cinquième Proposition
ces ensembles d’arbitres. Dans la suite de notre travail, on ne va pas donner de méthodes
de construction mais uniquement quelques unes de leurs propriétés. Par ailleurs, notre
travail va concerner le routage des messages entre les nœuds en utilisant ces ensembles
pour contrôler leur propagation à travers le réseau.
Les contraintes (c1) et (c2) lient les valeurs K et D. On obtient n=K*n/D avec n est le
nombre de nœuds dans le réseau. On a divisé le nombre total (union de tous les
ensembles) des nœuds sur le nombre de fois qu’ils sont répétés. Le cas optimal où la
répétition est réalisée exactement D fois permet de déduire que K=D. Ainsi on déduit que
le nombre maximum d’ensemble est 1+K(D-1) = 1+K(K-1) = n, on a autant d’ensembles
d’arbitres que de nœuds. Cette dernière formule est équivalente à , cela veut
dire que le cardinal des ensembles d’arbitres est proportionnel à , la racine carrée du
nombre de nœuds.
Pour réaliser la répartition des nœuds dans les ensembles d’arbitres en respectant
les contraintes su-citées on utilise les plans projectifs finis (Annexe A). Ces plans sont
très utiles pour certains nombres dont on sait construire les plans correspondants, car ils
permettent une construction rapide et optimale des ensembles. Cependant ils sont
difficiles à réaliser pour des nombres importants.
Il existe des plans projectifs finis d’ordre k lorsque k=p m tel que : m un entier positif et p
un nombre premier. Un tel plan possède k(k+1)+1 points et autant de lignes. Les
propriétés des plans projectifs finis sont telles que chaque point est sur k+1 lignes et que
chaque ligne contient k+1 points, deux points distincts ont une seule ligne en commun et
deux lignes distinctes ne se rencontrent qu’en un point. Donc deux lignes Ri et Rj n’ont
31
Chapitre Cinquième Proposition
R1 = {1,2,4} 2
R2 = {2,6,7} 3
6
R3 = {1,3,7}
R4 = {3,4,6}
R5 = {2,3,5} 4 7
R6 = {1,5,6} 4 5
R7 = {4,5,7}
Cette approche est très intéressante du fait que même si on ne dispose pas d’un
nombre de nœuds satisfaisant la condition définie pour un plan projectif fini, on peut
quand même construire des ensembles d’arbitres, appelés des ensembles presque
optimaux. Ainsi, dans le cas où il n’existe pas de plans projectifs finis deux attitudes sont
possibles :
32
Chapitre Cinquième Proposition
R1 = {1,2,4}
R2 = {2,5}
R3 = {1,3,5}
R4 = {2,3,4}
R5 = {2,3,5}
12 8 5 9
R5={12,8,5,9,13,10}
6 2 13 1
4 3 10 7
11 14 / /
Notre protocole de routage suit le modèle des systèmes peer to peer pur. Il est
fondé sur le principe des permissions d’arbitres. Suivant ce principe, le réseau est
structuré virtuellement en des ensembles d’arbitres. On suppose que les nœuds formant le
réseau sont regroupés dans des ensembles en respectant les contraintes de construction c1
et c2 énoncées ci-avant. Lors de la construction on essaie de réaliser la répartition la plus
optimale mais cela a trait au nombre de nœuds présents. Ainsi, si ce nombre vérifie la
condition d’optimalité alors un minimum de messages sera généré par notre protocole.
Nous rappelons que notre protocole de routage ne se préoccupe pas de la construction de
ces ensembles.
33
Chapitre Cinquième Proposition
Un message « Abort » : ce message est généré par un servent pour ordonner à ses
arbitres (sauf celui qui a envoyé ACK) d’abandonner la dernière requête qu’il leur avait
adressé. Ce message inclut aussi le numéro de séquence pour pouvoir identifier cette
requête.
Pour faire parvenir le message à sa destination, il sera routé d’arbitre en arbitre. Un nœud
émetteur d’une requête va l’envoyer uniquement à son ensemble d’arbitres qui vont
l’acheminer vers sa destination si elle existe.
Avant d’envoyer sa requête, le nœud vérifie si le destinataire n’est pas un de ses arbitres
puis il envoie un message requête vers chacun. A la réception de la requête, un arbitre
vérifie s’il ne l’a pas déjà traité en comparant son numéro de séquence. Si ce n’est pas
déjà traité il consulte son ensemble d’arbitres ; à lui ; pour voir si le destinataire en fait
partie et cela en comparant leurs adresses. S’il trouve que le destinataire est
effectivement un de ses arbitres alors il renvoie un message d’acquittement ACK au
34
Chapitre Cinquième Proposition
nœud qui lui a transmis la requête (nœud arbitré). Le message ACK comporte
l’identificateur de l’arbitre qui connait le destinataire et le numéro de séquence de la
requête. A partir de ce message un servent déterminera les autres arbitres auxquels il
enverra un message d’annulation (abort) et la requête concernée par cette annulation. Le
message d’annulation doit aussi véhiculer le numéro de séquence de la requête à
abandonner. Cela empêche une génération de messages inutiles. En effet, à partir du
moment où on a trouvé le nœud recherché tout message propagé est considéré superflu.
Un arbitre qui a reçu une requête dont il ne connait pas le destinataire doit soit la
propager soit la détruire. Cependant, avant de propager une requête un arbitre doit
attendre un délai « d » déterminé et puis décider de ce qu’il va faire. Ce délai peut être
estimé au maximum de la période que met un message pour aller d’un nœud arbitre vers
un nœud arbitré et revenir. Autrement dit, si le temps nécessaire à un message de passer
d’un nœud vers ses arbitres et Ti tel que alors on
obtient : .
Pendant ce délai un arbitre peut recevoir un message d’annulation lui indiquant
d’abandonner une requête en attente de propagation. Si ce n’était pas le cas alors il
propage la requête à ses arbitres. L’organigramme de la page suivante illustre le
fonctionnement du protocole sur chaque noeud.
35
Chapitre Cinquième Proposition
Début
Msg
Non
Envoyer Abort aux
Dans ce cas arbitres
Msg=abort
Non Destination Oui
connue ? Renvoyer réponse à
Détruire la requête en l’émetteur
attente de propagation
reçu ?
Propager la requête Détruire la requête
vers les arbitres
Fin
36
Chapitre Cinquième Proposition
Algorithme de la proposition
ensemble m=ensemble_des_arbitres_du_noeud ;
Si (Recevoir_Requête) alors
Sinon Si (destination_connue)
Renvoyer_ACK à l’arbitré;}
Sinon (Attendre(d) ;)
Sinon { Envoyer_Requête à m ;}
37
Chapitre Cinquième Proposition
Un protocole allégé
Nous nous sommes proposé d’implanter le protocole sous corba mais pour son
implantation nous avons choisi de l’alléger, et réaliser un premier incrément qu’on
complètera par la suite pour atteindre toutes les fonctionnalités du premier protocole.
Nous allons décrire cette deuxième version. C’est cette version qui fera l’objet de notre
première application.
Dans cette version, on utilise deux messages uniquement pour établir les
communications entre les servents. On ne va pas tenir compte des messages générés
après avoir trouver la destination. Cela va nous éviter de générer les messages
d’acquittement et les messages d’annulation ainsi que le temps d’attente accompagnant
leur utilisation. Le protocole se résume à envoyer des requêtes et des réponses. Un
servent intermédiaire (un arbitre) se contente de vérifier s’il connait la destination pour
n’acheminer le message que vers celle-ci ou bien il va le propager vers tous ses arbitres.
On utilise le terme propager pour expliciter que l’opération d’envoi d’un message est
réalisée par un arbitre. Une fois le message est parvenu à sa destination celle-ci renvoie
directement la réponse à l’émetteur. L’organigramme sur la page suivante montre le
fonctionnement du protocole sur chaque servent.
38
Chapitre Cinquième Proposition
Début
Déstination
Oui = moi Non
Renvoyer réponse
Fin
39
Chapitre Cinquième Proposition
Cet organigramme nous fournit une version plus simple de l’algorithme de routage.
ensemble m=ensemble_des_arbitres_du_noeud ;
Si (Recevoir_Requête) alors
Sinon Si (destination_est_moi)
alors {Renvoyer_Réponse ;}
Sinon Si (destination_connue)
Sinon { Envoyer_Requête à m ;}
5.4 Comparaison
Les arbitres dans notre protocole peuvent être comparés aux serveurs ou super-nœuds
dans les systèmes pair à pair hybrides qui sont les premiers nœuds contactés lors de la
recherche d’information sur le réseau. Ces super-nœuds ont la responsabilité de propager
les requêtes vers leurs destinataires ou vers d’autres super-nœuds afin de trouver
l’information recherchée. Dans les systèmes pair à pair hybrides, cette tâche est assurée
40
Chapitre Cinquième Proposition
Chaque fois qu’un nœud propage une requête, il le fait vers le même nombre d’arbitres
donc il génère le même nombre de messages. Les ensembles d’arbitres sont construits de
façon à avoir le même nombre de nœuds dans chacun. Un nœud quelconque qui ne
connait pas la destination recherchée, contactera uniquement ses nœuds ‘arbitres’ pour
leur envoyer la requête. On trouve un principe similaire dans les réseaux P2P structurés à
contenu adressable (CAN), où un nœud maintient une table de routage qui contient les
identificateurs des nœuds adjacents et leurs adresses IP [33]. Dans les réseaux ad hoc, le
protocole FSR (Annexe A) utilise l’approche à plusieurs niveaux dans le but de réduire le
nombre de messages dans le réseau. Plus on s’éloigne du premier niveau (nœuds voisins)
moins de messages sont générés sur le réseau, c'est-à-dire un nœud génère plus de
messages vers ses voisins.
Dans le but de réduire encore le nombre de messages, nous avons intégré dans le
fonctionnement du protocole un temps d’attente « d ». Un nœud qui ne possède pas
d’informations sur la destination doit attendre ce délai avant de propager la requête à ses
arbitres. Cela permet d’éviter la génération de messages superflus après avoir trouver la
destination. Un mécanisme semblable est utilisé dans le protocole FSR pour minimiser le
nombre de message d’information générés suite aux fréquentes déconnexions entre les
nœuds du réseau. Ainsi, au lieu d’envoyer un message d’information au voisin à chaque
déconnexion, un nœud maintient une entrée pour chacun de ses voisins dans sa liste de
voisins. Si un nœud ne reçoit pas de son voisin un message de mise à jour dans un délai
déterminé il supprime de ses tables toutes les informations le concernant et considère que
le lien qui les relie est corrompu.
Nous utilisons dans les messages échangés entre les nœuds un champ numéro de
séquence pour identifier de manière unique un message dans le réseau et éviter de le
traiter plus d’une fois. Ce champ est utilisé aussi dans le protocole Gnutella pour
identifier ses descripteurs.
41
Chapitre Cinquième Proposition
5.5 Conclusion
Nous avons présenté, dans cette partie, notre proposition pour améliorer la
fonction de routage dans les systèmes et réseaux peer to peer. Cette proposition s’inscrit
dans le modèle pur de ces systèmes. Elle présente l’avantage d’être légère, elle utilise un
algorithme simple pour ses échanges. Elle minimise la charge du réseau en termes de
nombre de messages. Elle utilise le principe des arbitres et par conséquent chaque nœud
a la même responsabilité et fournit le même effort.
42
Chapitre Sixième
Conception et Réalisation
Dans cette section, nous allons concevoir notre application suivant le langage UML.
Nous utiliserons pour cela les diagrammes du langage pour décrire son fonctionnement.
Les diagrammes de classes, d’objets, de communication, d’états-transition et le
diagramme de séquence seront utilisés.
6.1 Modélisation
Les nœuds du système constituent les objets de notre application. Comme nous
traitons le cas d’un système peer to peer pur où tous les nœuds jouent le même rôle, les
objets qu’on va utiliser seront tous du même type. En effet, ils effectuent les mêmes
opérations sur le même type et même structure de données. Ces opérations sont l’envoi
et la réception de messages. Pour modéliser cela, on n’a besoin que d’une seule classe
43
Chapitre Sixième Conception et Réalisation
Un identifiant de type chaine de caractères, une adresse de type entier et une variable qui
contiendra l’ensemble des identifiants de ses arbitres.
Envoyer (msg) : cette méthode réalise l’envoi d’un message d’un nœud servent vers un
autre.
Recevoir (msg) : une fois un message est reçu par un servent, cette opération détermine
les traitements à réaliser.
servent
Id : char
Adr :long
Figure 6.1. Représentation de la classe « servent » Arb : {id1,…}
Envoyer(msg)
Recevoir(msg)
Ce diagramme va nous permettre d’expliciter les associations entre les objets au niveau
des classes. On va désigner cette association par le nom « communiquer » qui englobe
dans son sens l’envoi et la réception de messages. Cette association peut exister entre
tous couple d’objets de l’application. Sur un diagramme de classes, cette association sera
représentée par un lien entre les deux classes dont les objets sont des instances. Or dans
notre cas, tous les objets instancient la même classe Servent, donc cette association sera
44
Chapitre Sixième Conception et Réalisation
réflexive sur la classe Servent. Toutefois, au niveau concret des objets, les liens associent
des instances différentes de la classe. On obtient le diagramme de classe suivant :
Communiquer
1..*
Servent
Figure 6.2. Diagramme de classes
1..*
Le diagramme d’objets suivant illustre les associations au niveau des objets ou des
nœuds du système. Le degré de multiplicité est clairement montré du fait que toutes les
relations sont explicitées par des liens d’association. On utilise le même nom que la
classe pour désigner un objet et on le précède de deux points ainsi qu’un soulignement
pour signifier que c’est un objet quelconque. Le diagramme suivant montre des relations
d’un degré de multiplicité égal à 1, 2 et 3. En général, si notre système serait composé de
n nœuds alors un nœud est susceptible d’avoir (n-1) relations avec le reste des nœuds.
: Servent
Communiquer
Communiquer : Servent
Communiquer
: Servent
: Servent
Communiquer
45
Chapitre Sixième Conception et Réalisation
Un état est une situation dans laquelle peuvent se trouver les objets d’une classe pendant
une période de temps. Durant sa participation au réseau, un nœud se trouve parfois dans
un état client et d’autres fois dans celui de serveur selon qu’il demande ou bien satisfait
les demandes des autres nœuds en ressources. Un nœud initiateur d’une requête est
considéré client vis-à-vis des destinataires qui la recevront et donc ceux-ci sont des
serveurs. A son tour, il est considéré serveur vis-à-vis des autres nœuds lui adressant
leurs requêtes.
Le diagramme d’états associé à la classe servent gère les deux états client et serveur qui
sont explicites sur la figure. Les deux rectangles représentent chacun des deux états. Les
deux flèches expriment les événements qui font transiter un nœud de l’état client vers
celui de serveur et vice versa. Comme illustré sur la figure, la réception d’un message
requête met le servent dans l’état serveur. L’événement d’envoi d’une requête le met
dans l’état client.
Recevoir requête ()
Client Serveur
Envoyer requête ()
Ce diagramme montre les interactions entre des objets et les messages qu’ils s’échangent.
Un objet servent émet un message requête vers un autre servent le sollicitant pour des
informations que ce dernier enverra dans un message réponse. Ces interactions seront
montrées plus clairement sur le diagramme de séquence.
46
Chapitre Sixième Conception et Réalisation
Requête
: Servent : Servent
Réponse
Le diagramme montre un servent envoyant une requête vers un autre servent, le servent
récepteur de la requête n’est pas nécessairement son destinataire. Si le nœud qui a reçu le
message peut le satisfaire alors il renvoie directement la réponse à son initiateur sinon il
le propage à son ensemble d’arbitres. Cela est indiqué sur le diagramme par un cadre
scindé latéralement en deux sous-cadres, par une ligne discontinue. Chaque sous-cadre
contient une alternative à exécuter par le servent à sa réception d’une requête. Cette
alternative est indiquée par l’opérateur « Alt » placé en haut du cadre. La condition sur le
choix d’une alternative est indiquée entre crochet.
47
Chapitre Sixième Conception et Réalisation
L’opération de propagation est répétée par chaque servent qui ne peut pas satisfaire une
requête. Pour montrer cela sur le diagramme, nous avons utilisé un cadre qui englobe
l’opération de propagation de la requête. Cette répétition est indiquée par l’opérateur
« Loop » exprimant l’itération et il est placé en haut du cadre. Cette opération de
propagation sera répétée par chaque servent récepteur jusqu’à l’obtention de la réponse
ou que le message soit détruit.
Requête
alt loop
Réponse [succès]
Il reste à expliciter le cas où un servent initie une requête sur le réseau et un servent
destinataire capable de satisfaire cette requête va répondre en lui envoyant directement la
réponse sans passer par d’autres servents. Le diagramme de séquence suivant illustre ce
cas.
48
Chapitre Sixième Conception et Réalisation
Requête
alt loop
[succès] Réponse
[échec]
Requête propagée
Réponse
6.2 Réalisation
Dans cette section, nous allons présenter les concepts du bus utilisées pour
réaliser notre application et nous décrirons son fonctionnement.
Jacorb est l’une des implantations du bus corba écrite dans le langage de
programmation Java. Ce bus comme les autres fonctionne selon le modèle client/serveur
et utilise la notion d’objet : les applications clientes accèdent aux objets instanciés par les
applications serveurs via leurs méthodes. Les concepts de ce modèle objet sont données
dans l’annexe B de ce rapport sous le titre "les notions utilisées par le bus", et nous y
avons donné aussi des indications sur la configuration du bus et son installation.
49
Chapitre Sixième Conception et Réalisation
Interface IDL
Parmi les concepts de corba, les interfaces constituent l’élément clé de son
modèle objet. Ces interfaces définissent un type abstrait d’objets CORBA, c'est-à-
dire l’ensemble des opérations et des attributs de ses instances. Elles précisent la
signature de chaque opération : la liste de paramètres, les types de données
autorisés pour ceux-ci et leur mode de passage entre l’application cliente et
l’objet. Les opérations peuvent avoir des paramètres en entrée et/ou en sortie. De
plus, une signature peut contenir la liste des exceptions que l’opération
déclenchera en cas de problème. Les attributs permettant d’exprimer des
fonctions d’accès à une propriété d’objet.
Pour décrire ces interfaces, l’OMG fournit un langage standard de définition
appelé « Interface Definition Language » ou IDL. Ce langage est indépendant de
tout langage de programmation et les objets corba peuvent être implantés dans
n’importe quel langage. Pour pouvoir exploiter les définitions IDL,
l’environnement CORBA fournit des précompilateurs IDL qui transforment ces
définitions en constructions utilisables depuis des langages de programmation.
Le service nommage
50
Chapitre Sixième Conception et Réalisation
Nous avons défini deux interfaces, une interface «Servent » et une interface
« Superviseur ».
Ces deux méthodes utilisent les mêmes paramètres que les méthodes receive et answer,
tout en ajoutant le champ numcli qui indique le numéro du prochain destinataire de la
requête (arbitres).
51
Chapitre Sixième Conception et Réalisation
hops : ce champ sert de compteur pour le nombre de sauts effectués par une requête.
Comme décrit en haut, notre système se compose de sept servents que nous
nommons "Server", ils sont numérotés de 1 à 7. Ils jouent le rôle de nœuds du système.
Le schéma de la figure 6.8 illustre la communication entre les sept servents.
Début
S2 S7
S1 S6 S5
S4 S3
Superviseur
Message Requête
Si Servent i
Message Info
Message Info1
52
Chapitre Sixième Conception et Réalisation
Les servents "Server" de 1 à 7 instancient tous l’objet Servent qui implante l’interface
servent et qui dispose des trois méthodes receive, send et answer. L’invocation de la
méthode receive est équivalent à l’envoi d’une requête, ceci provoque aussi l’invocation
de la méthode info du Superviseur et l’invocation de receive et send au niveau des
arbitres du nœud concerné, dans le cas où ce dernier n’est pas la cible de la recherche, ce
cas est illustré dans la figure 6.10. Dans le cas contraire, c'est-à-dire que c’est le nœud
cible, il se contentera d’invoquer la méthode answer au niveau du Server1 (initiateur de
la recherche), figure 6.11. Remarquons qu’à chaque invocation de la méthode receive au
niveau d’un nœud, ce dernier vérifie si elle n’a pas déjà été invoquée avec les mêmes
paramètres en entrée (même numéro de séquence). Les "Server" affichent, chacun, les
requêtes qu’ils reçoivent et qu’ils émettent. A l’exception du "Server1" qui en plus de ça
affiche la réponse qu’il reçoit du Server visé par la recherche, voir figure 6.12.
53
Chapitre Sixième Conception et Réalisation
54
Chapitre Sixième Conception et Réalisation
Le "Server 0" instancie l’objet Superviseur qui implante l’interface du même nom et qui
implémente les deux méthodes info et info1déjà définies dans l’interface. La méthode
info est invoquée à chaque fois que la méthode receive est invoquée. Cela permet au
superviseur d’avoir une vue globale sur le trafic du réseau. La méthode info1est invoquée
seulement par le Server ciblé par la recherche. Son rôle est d’afficher les messages qui
transitent dans le réseau. La figure suivante montre les messages affichés par le
superviseur.
55
Chapitre Sixième Conception et Réalisation
6.3 Conclusion
Nous avons implémenté notre application sous jacorb pour le cas particulier de sept
nœuds. Ce dernier ayant la particularité d’avoir un plan projectif fini, ce qui nous a
permis de construire des ensembles d’arbitre optimaux pour mettre en évidence le
fonctionnement du protocole dans des conditions idéales, par conséquent avoir un aperçu
des possibilités qu’offre ce protocole pour minimiser le trafic du réseau sans altérer le
rendement (fonctionnement) initial.
Nous remarquons que notre proposition reprend les points forts du modèle pair à pair pur
(Gnutella), qui sont une auto-organisation du réseau donc pas besoin d’une
administration centralisé, une grande tolérance aux pannes et une grande mobilité des
nœuds, en y ajoutant un parcours exhaustif du réseau et un allégement du trafic du réseau
engendrant une meilleure exploitation des ressources du réseau sous-jacent.
56
Conclusion Générale
Nous arrivons donc au terme de notre travail et pour conclure nous allons
d’abord rappeler le contexte de notre étude. La première partie de ce mémoire présente
l’état de l’art sur les protocoles dans les réseaux ordinaires, ad hoc et les réseaux pair à
pair. Les protocoles de routage sont d’une importance capitale du fait qu’ils regroupent
l’ensemble des règles nécessaires à la communication dans les applications réparties ou
les systèmes en réseau. Dans les deux premiers types de réseaux on parle de routage au
niveau physique du réseau et dans le troisième d’un routage logique. Ce dernier utilise
des mécanismes de nommage et d’identification dédiés, ces mécanismes sont spécifiés
dans les protocoles de routage pair à pair.
Dans ce mémoire, nous avons proposé une nouvelle approche de routage dans
un système P2P. L’idée de notre étude est d’appliquer le principe des algorithmes fondés
sur les permissions d’arbitres pour essayer d’améliorer le routage dans les réseaux pair à
pair. Le but est de diminuer le nombre de messages nécessaires pour réaliser les
communications sur le réseau tout en gardant un principe de fonctionnement simple à
mettre en œuvre. Pour router une requête, notre protocole offre la possibilité de limiter le
nombre des pairs contactés aux seuls nœuds "arbitres" et évite ainsi l’inondation. La
manière dont sont construits les ensembles d’arbitres nous assure un parcours exhaustif
57
Conclusion Générale
du réseau. Ainsi si la réponse à une recherche existe alors elle sera trouvée. Toutefois
notre proposition reste à ce stade simpliste. Nous avons modélisé une application
fonctionnant selon les règles du protocole (nous avons commencé par le protocole allégé)
et nous l’avons implanté sous le bus jacorb de corba. Cette application est composée de
sept nœuds communicants. Nous voulions implanter l’application sous jacorb dans
l’objectif de construire un module de routage qu’on pourrait intégrer au bus pour étendre
ses possibilités et permettre le développement d’applications pair à pair.
58
Bibliographie
[2] Eric Fleury. Protocoles de routage RIP, OSPF et BGP. INRIA/INSA Lyon.2005.
http://tc-net2.insa-lyon.fr/lutece/download/LMW_02_ROUTAGE.pdf
[5] Shree Murthy and J. J. G.L. Aceves, A routing protocol for packet radio networks,
Proceeding of the IEEE Mobicom, pp 86-95, Berkeley, California, United States,
1995.
[6] S. Murthy and J.J. G.L. Aceves, An efficient routing protocol for wireless networks,
ACM Mobile Networks and Application Journal, Special issue on routing in mobile
communication networks, pp 183-97, 1996.
[7] Tsu-Wei Chen and M. Gerla, Global State Routing: A new routing scheme for sd-hoc
wireless networks, Proceeding IEEE ICC'98, 1998.
59
Bibliographie
[8] Iwata, C. C. Chiang, G. Pei, M. Gerla, and T.-W. Chen, Scalable routing strategies
for ad hoc wireless networks, IEEE Journal on Selected Areas in Communications,
Special Issue on Ad-Hoc Networks, pp.1369-79, 1999.
[9] M. Gerla and J. Tsai, Multicluster, mobile, multimedia radio network, ACM-Baltaz
Journal of Wireless Networks, pp 255-265, 1995.
[10] C. C. Chiang, H-K Wu, Winston Liu, and M. Gerla, Routing in clustered multihop,
mobile wireless networks, The IEEE Singapore International Conference on
Networks, pp 197-211, 1997.
[11] M. Joa-Ng and I.-T. Lu, A Peer-to-Peer zone-based two-level link state routing for
mobile ad hoc networks, IEEE Journal on Selected Areas in Communications,
Special Issue on Ad-Hoc Networks, pp 1415-1425, 1999.
[13] Mingliang Jiang, Jinyang Li, Y.C. Tay, Cluster Based Routing Protocol.
http://www.ietf.org/internet- drafts/draft-ietf-manet-cbrp-spec-01.txt. August 1999.
[14] J. Broch, D. Johnson and D. Maltz, The dynamic source routing protocol for mobile
ad hoc network. http://citeseer.ist.psu.edu/johnson96dynamic.html
[15] J. Broch, D. Johnson and D. Maltz, The dynamic source routing protocol for
mobile ad hoc network, 1998. http://citeseer.ist.psu.edu/johnson96dynamic.html
[16] C. E. Perkins and Elizabeth M. Royer, Ad hoc on demand distance vector (AODV)
algorithm, In Proceeding of the 2nd IEEE Workshop on Mobile Computing
Systems and Applications (WMCSA'99), New Orleans, Louisiana, USA, 1999.
[17] C. E. Perkins and Elizabeth M. Royer and S.R. Das, Ad hoc on demand distance
Vector (AODV) routing, 2000. http://www.ietf.org/internetdrafts /draft-ietf-manet-
aodv-05.txt
[18] V. D. Park and M. S. Corson, A highly adaptive distributed routing algorithm for
mobile wireless networks, Proceeding INFOCOM ’97, pp 1405-1413, 1997.
[20] Chai-Keong Toh, A novel distributed routing protocol to support ad hoc mobile
computing, Proceeding 1996 IEEE 15th Annual Int'l. Phoenix Conf. Comp. and
Commun. pp 480-86, 1996.
60
Bibliographie
[21] K. Toh, Long-lived ad-hoc routing based on the concept of associativity, IETF
Draft, 1999. http://tools.ietf.org/id/draft-ietf-manet-longlived-adhoc-routing-00.txt
[22] R. Dube et al. Signal stability based adaptive routing for ad hoc mobile networks, pp
36-45, 1997, http://pdos.csail.mit.edu/decouto/papers/dube97.pdf.
[23] Y.-B. Ko and N.H. Vaidya, Location-aided routing (LAR) in mobile ad hoc
networks, In Proceedings of ACM/IEEE MOBICOM'98, Dallas, Texas, pp 66-75,
1998.
[26] Guillaume Doyen, Supervision des réseaux Pair à Pair, Laboratoire Lorrain de
Recherche en Informatique et ses Applications, Thèse Doctorat, université Nancy1
2005.
[28] Antony Rowstron and Peter Druschel, Pastry: scalable, distributed object location
and routing for large-scale peer-to-peer systems, In proceedings of the 18th
IFIP/ACM International Conference on Distributed Systems Platforms (Middel-
ware), 2001. http://www.cs.cornell.edu/People/egs/615/pastry.pdf
[29] Dahlia Malkhi, Moni Naor, and David Ratajezak, Viceroy : a scalable and dynamic
lookup network, In proceeding of the 21st ACM symp. On Principles of Distributed
Computing (PODC), pages 183-192, 2002. California, USA.
[32] Elizabeth Daly, Alan Gray et Mads Haahr, On Using Peer Profiles to Create Self-
Organizing P2P Networks, In Proceedings of the First International IEEE
WoWMoM Workshop on Trust, Security and Privacy for Ubiquitous Computing -
Volume 03, Washington, DC, USA. 2005
61
Bibliographie
[34] David Clark, Face-to-Face with Peer-to-Peer Networking, IEEE internet computing,
vol. 34, no. 1, pp. 18-21, 2001.
[35] Michel Raynal, Synchronisation et état global dans les systèmes répartis, Eyrolls,
Paris, 1992.
[36] P.A. Muller et N.Gaertner, Modélisation objet avec UML, Eyrolls, Deuxième
édition. Paris, 2000.
[38] J.M. Geib, C. Gransart et P. Merle, Corba : des concepts à la pratique, deuxième
édition, Dunod , Paris, 1999.
62
Annexe A
Cette annexe contient des éléments complémentaires aux chapitres présentés dans
notre rapport. L’algorithme de Dijkstra et celui de Bellman Ford Distribué sont donnés.
Ces deux algorithmes sont utilisés par plusieurs protocoles de routage dans les réseaux
ordinaires et ad hoc, présentés dans la première partie de ce mémoire. Nous avons repris
les protocoles SFR et Gnutella, dans le détail utile, pour comprendre les mécanismes et
les critères de conception de chacun. Cela nous a permis de mieux appréhender la
fonction de routage.
2. Mettre X0 = (∞,∞,…..,∞).
4. Si le routeur I reçoit un coût moins élevé que celui qu’il garde dans sa table de
routage pour une destination donnée il met à jour cette valeur avec la nouvelle. D’où
XN+1 = ƒ(XN).
63
Annexe Annexe A
6. Fin.
Algorithme de Dijkstra
Soits : N l’ensemble des nœuds du réseau (graphe).
L(i,j) le coût du lien entre les nœuds i et j, s’il n y a aucun lien entre i et j alors l(i,l) = ∞.
1. Mettre M = {s}.
M = M U {w} tel que C(w) est le minimum pour tout w dans (N-M).
Le protocole FSR pour les réseaux ad hoc utilise l’approche à plusieurs niveaux
du réseau pour minimiser le coût des mises à jour et réduire la quantité d’information
échangée entre les nœuds, ie la charge du réseau. Pour ce faire, il utilise la
technique « fisheye » proposée par Kleinrok et Stevens. Cette technique est inspirée de la
nature de l’œil du poisson qui capture avec précision les points proches de son point
focal et plus on s’éloigne plus cette précision diminue. La projection de cette technique
dans le contexte des réseaux ad hoc concerne la précision sur les données de routage
échangées entre les nœuds du réseau et particulièrement entre un nœud et ses voisins.
Ces derniers bénéficieront d’informations plus précises sur la distance et la qualité du
64
Annexe Annexe A
chemin les reliant. Il va de même pour la fréquence de mise à jour des informations des
tables de routage, ainsi les entrées qui correspondent aux nœuds les plus proches sont
envoyées à des fréquences plus élevées.
Cependant, un nœud enregistre l’état de lien vers chaque destination dans le réseau.
La technique du « fisheye »
En outre, pour réaliser ses opérations le protocole se sert d’une liste de voisins,
d’une table de topologie et d’une table de routage. Un nœud enregistre l’ensemble de ses
voisins dans sa liste de voisins où il maintient pour chacun son identificateur et une
information sur la dernière fois qu’il a reçu un paquet de sa part.
65
Annexe Annexe A
Le routage des paquets vers la destination s’effectue saut par saut. Le nœud source ou le
nœud intermédiaire retrouve l’adresse de la destination à partir du paquet et consultent
leurs tables pour vérifier si une entrée vers cette destination existe déjà. Si la route est
connue alors le paquet est envoyé au prochain nœud. Cette procédure est répétée jusqu’à
ce que le paquet atteigne sa destination.
Utilisation des routes les plus courtes et les routes sont le plus souvent
récentes.
Il échange des mises à jour plus précises avec ses voisins uniquement.
66
Annexe Annexe A
Le reproche qu’on peut faire à ce protocole réside dans le fait qu’il ne propage
pas de paquets contenant des informations précises vers les nœuds distants du réseau,
mais néanmoins plus le paquet s’approche de la destination il transite via des nœuds
possédants l’information précise sur cette destination. Aussi, l’utilisation de plusieurs
tables engendre une consommation importante en terme de ressources de mémoire et de
calcul.
2.2 Le protocole Gnutella pour le routage dans les réseaux pair à pair purs
Le protocole Gnutella définit la manière suivant laquelle communiquent les servents sur
le réseau. Il définit cinq types de messages ou descripteurs pour échanger des
informations entre les servents et un ensemble de règles pour l’échange de ses
descripteurs. Le tableau suivant décrit l’utilité de chaque descripteur.
Descripteur Description
67
Annexe Annexe A
Une fois le nœud a réussi à accéder au réseau, il communique avec les autres servents
avec les différents descripteurs. Chaque descripteur est précédé par l’entête de
descripteur qui a la forme suivante :
Descripteur Longueur
ID descripteur TTL Hops
payload payload
ID descripteur : c’est une chaîne de caractère sur 16 bits qui identifie de façon
unique le descripteur dans le réseau.
0x00 = Ping
0x01 = Pong
0x40 = Push
0x80 = Query
0x81 = QueryHit
68
Annexe Annexe A
TTL : Time To Live, il indique le nombre de fois que le descripteur sera transmis
entre les servents du réseau. Chaque servent décrémente le TTL avant de le
renvoyer jusqu’à ce qu’il s’annule et donc sera détruit.
Hops : le nombre de fois que le descripteur a été transmis entre les servents. Les
champs TTL et Hops de l’entête doivent vérifier, durant la vie du descripteur, la
condition : TTL (0) = TTL(i) + Hops(i) pour i>=0 (au ieme saut).
Le mécanisme TTL est le seul moyen de contrôler la propagation des messages dans le
réseau. Ainsi les servents doivent décrémenter ce champ à chaque réception d’un
descripteur, et détruire le descripteur à son expiration, c'est-à-dire une fois son compteur
atteint zéro. Une trop grande valeur de ce champ augmente inutilement la charge du
réseau et dégrade ses performances. La figure suivante illustre l’utilisation de ce
mécanisme. Dans ce scénario le champ TTL est mis à 3, il est décrémenté à chaque saut
et sera détruit au bout du troisième saut.
69
Annexe Annexe A
1) Un descripteur pong peut être renvoyé seulement suivant le même chemin qu’a
parcouru le ping correspondant. Cela assure qu’il n’y a que les servents qui ont
routé le ping qui vont voir le pong en réponse. Un servent qui reçoit un pong avec
un identificateur n doit le supprimer s’il n’a pas reçu au préalable le ping de
même identificateur.
3) La même règle est appliquée concernant la paire Push et QueryHit, sauf que dans
ce cas on considère le champ Servent Identifier et non pas le descripteur ID.
4) Un servent transmet tous les Query et les Ping qu’il reçoit à tous ses voisins
directs sauf à celui qui les a envoyés. La figure suivante explicite
70
Annexe Annexe A
o Une très bonne disponibilité du réseau car il est presque impossible de causer des
disfonctionnement par déni de service.
o Il consomme trop de bande passante à cause des broadcasts générés pour chaque
envoi.
Bibliographie
- Mario GERLA, Xiaoyan HONG and Guangyu PEI, Fisheye State Routing Protocol
(FSR) for Ad Hoc Networks, <draft-ietf-manet-fsr-03.txt>, Rockwell Scientific Company
June 17, 2002.
71
Annexe B
1 PRESENTATION DE CORBA
1.1 Présentation de l’OMG
72
Annexe Annexe B
en charge les communications entre les composants logiciels formant les applications
réparties hétérogènes.
Static Dynamic
IDL Skeleton
Dynamic IDL Stubs ORB Skeleton
Invocation Interface
ORB Core
L’application cliente est un programme qui invoque les méthodes des objets à
travers le bus CORBA.
La référence d’objet est une structure désignant l’objet CORBA et contenant
l’information nécessaire pour le localiser sur le bus.
73
Annexe Annexe B
74
Annexe Annexe B
Un système auto-descriptif : les interfaces des objets sont connues du bus et sont
aussi accessibles par les programmes par l’intermédiaire du référentiel des
interfaces.
L’activation automatique et transparente des objets : les objets sont en mémoire
uniquement s’ils sont utilisés par des applications clientes.
L’interopérabilité entre bus : à partir de la norme CORBA 2.0, un protocole
générique de transport des requêtes (GIOP pour General Inter-ORB Protocol) a
été défini permettant l’interconnexion de bus CORBA provenant de fournisseurs
distincts, une de ses instanciations est l’Internet Inter-ORB Protocol (IIOP)
fonctionnant au dessus de TCP/IP.
ORB (Object Request Broker) est le noyau de transport des requêtes aux objets. Il
intègre au minimum les protocoles GIOP et IIOP. L’interface au bus fournit les
primitives de base comme l’initialisation de l’ORB.
SII (Static Invocation Interface) est l’interface d’invocations statiques permettant
de soumettre des requêtes contrôlées à la compilation des programmes. Cette
interface est générée à partir de définitions OMG-IDL.
DII (Dynamic Invocation Interface) est l’interface d’invocations dynamiques
permettant de construire dynamiquement des requêtes vers n’importe quel objet
CORBA sans générer et ou utiliser une interface SII.
IFR (Interface Repository) est le référentiel des interfaces contenant une
représentation des interfaces OMGIDL.
75
Annexe Annexe B
SSI (Skeleton Static Interface) est l’interface de squelettes statiques qui permet à
l’implantation des objets de recevoir les requêtes leur étant destinées. Cette
interface est générée comme l’interface SII.
DSI (Dynamic Skeleton Interface) est l’interface de squelettes dynamiques qui
permet d’intercepter dynamiquement toute requête sans générer une interface SSI.
C’est le pendant de DII pour un serveur.
OA (Object Adapter) est l’adaptateur d’objets qui s’occupe de créer les objets
CORBA, de maintenir les associations entre objets CORBA et implantations et de
réaliser l’activation automatique si nécessaire.
ImplR (Implementation Repository) est le référentiel des implantations qui
contient l’information nécessaire à l’activation. Ce référentiel est spécifique à
chaque produit CORBA.
Les services objet communs ont pour objectif de standardiser les interfaces des
fonctions système indispensables à la construction et l’exécution de la plupart des
applications réparties. Cette section décrit sommairement ces services selon leur rôle
dans une application répartie. Elle se base sur l’actuelle spécification CORBA services et
les travaux en cours à l’OMG.
La recherche d’objets
Cette catégorie de services offre les mécanismes pour rechercher/retrouver
dynamiquement sur le bus les objets nécessaires aux applications. Ce sont les
équivalents des annuaires téléphoniques.
Le service Nommage (Naming Service) est l’équivalent des « pages blanches »
: les objets sont désignés par des noms symboliques. Cet annuaire est
matérialisé par un graphe de répertoires de désignation.
Le service Vendeur (Trader Service) est l’équivalent des « pages jaunes » : les
objets peuvent être recherchés en fonction de leurs caractéristiques.
76
Annexe Annexe B
Le service Cycle de Vie (Life Cycle Service) décrit des interfaces pour la
création, la copie, le déplacement et la destruction des objets sur le bus. Il
définit pour cela la notion de fabriques d’objets («Object Factory»).
Le service Propriétés (Property Service) permet aux utilisateurs d’associer
dynamiquement des valeurs nommées à des objets. Ces propriétés ne modifient
pas l’interface IDL, mais représentent des besoins spécifiques du client.
Le service Relations (Relationship Service) sert à gérer des associations
dynamiques (appartenance, inclusion, référence, auteur, emploi,...) reliant des
objets sur le bus. Il permet aussi de manipuler des graphes d’objets.
Le service Externalisation (Externalization Service) apporte un mécanisme
standard pour fixer ou extraire des objets du bus. La migration, le passage par
valeur, et la sauvegarde des objets doivent reposer sur ce service.
Le service Persistance (Persistent Object Service) offre des interfaces
communes à un mécanisme permettant de stocker des objets sur un support
persistant. Quel que soit le support utilisé, ce service s’utilise de la même
manière via un «Persistent Object Manager». Un objet persistant doit hériter de
l’interface «Persistent Object» et d’un mécanisme d’externalisation.
Le service Interrogations (Query Service) permet d’interroger les attributs des
objets. Il repose sur les langages standards d’interrogation comme SQL3 ou
OQL. L’interface Query permet de manipuler les requêtes comme des objets
CORBA. Les objets résultats sont mis dans une collection. Le service peut
fédérer des espaces d’objets hétérogènes.
Le service Collections (Collection Service) permet de manipuler d’une
manière uniforme des objets sous la forme de collections et d’itérateurs. Les
structures de données classiques (listes, piles, tas,..) sont construites par sous-
classement. Ce service est aussi conçu pour être utilisé avec le service
d’interrogations pour stocker les résultats de requêtes.
Le service Changements (Versionning Service) permet de gérer et de suivre
l’évolution des différentes versions des objets. Ce service maintient des
informations sur les évolutions des interfaces et des implantations. Cependant,
il n’est pas encore spécifié officiellement.
La sûreté de fonctionnement
77
Annexe Annexe B
78
Annexe Annexe B
simultanément sur le bus. Cela permet d’avoir des fonctionnalités proches des
MOMs (Message Oriented Middleware).
Il existe plusieurs types de bus CORBA, nous citerons seulement quelques uns
qui sont les plus commercialisés.
ORBacus : bus CORBA implémenté en C++ et en Java sur les deux systèmes
Windows et Unix. Il est conçu par OOC (Object Oriented Concepts), il a
l’avantage d’être rapide et léger.
VisiBroker : bus CORBA utilisable en C++, en Java et en Delphi sur les deux
systèmes Windows et Unix. Il est conçu par Inprise. Il a l’avantage d’être facile a
utiliser et performant.
Orbix : bus CORBA implémenté en C++ et en Java sur les deux systèmes
Windows et Unix. Il est conçu par Iona.
Mico : bus CORBA implémenté en C++ sur les deux systèmes Windows et Unix.
Il est conçu par Gnu.
Java ORB : bus CORBA implémenté en Java sur les deux systèmes Windows et
Unix. Il est conçu par Sun. Il a l’avantage d’être Complet.
JacORB : bus CORBA implémenté en Java sur les deux systèmes Windows et
Unix et compatible avec le JDK1.1. Il est conçu par Gnu.
79
Annexe Annexe B
Pour que le bus puisse fonctionner correctement sans générer d’erreurs il faut
apporter dans certains fichiers les changements suivants. Ces fichiers sont des fichiers de
propriétés utilisés par le bus pour gérer parmi d’autres les références aux objets
manipulés.
Aller dans le répertoire d’installation de JacORB, dans le répertoire
" C:\JacORB-2.2.3/etc" apporter les modifications suivantes :
Renommer le fichier "jacorb_properties.template" par "jacorb.properties".
80
Annexe Annexe B
La variable d’environnement "path" est utilisée pour stocker les chemins vers les
répertoires « bin » des logiciels et outils utilisés. Dans l’environnement Java, la variable
"classpath" stocke les chemins vers les dossiers contenant des fichiers ".class" ou ".jar".
Bibliographie
Common Object Request Broker Architecture - for embedded, May 2006 Draft
Adopted Specification ptc/06-05-01.CORBA, OMG.
J.M. GEIB, C. GRANSART et P. MERLE, Corba : des concepts à la
pratique, deuxième édition, Dunod 1999.
JacORB 2.2.3 Programming Guide, The JacORB Team, December 10, 2005.
81