Gestion des communications mobiles dans les réseaux P2PSIP hiérarchiques basée sur IPv6
Réseaux pair-à-pair et protocole SIP
Dans les premiers temps de l’internet, le partage de données se faisait suivant le mode Client/Serveur. Les ressources sont stockées au sein d’une entité centrale (serveur). Lorsqu’un client souhaite trouver une ressource, il envoie une requête vers le serveur qui, après un temps de recherche dans sa base de données lui envoie en retour la ressource demandée. Les internautes devenant de plus en plus nombreux, les serveurs commençaient à atteindre leurs limites notamment en termes de capacités de stockage, de vitesse de traitement, de temps d’accès à cause des accès concurrents, etc. Il faut ajouter à cela le risque de panne du serveur qui provoquerait l’arrêt de tout le processus et la non disponibilité des ressources. Pour éviter de tels scénarios, l’idée de répartir les tâches du serveur à plusieurs entités à été développée et mise en place. C’est le concept de systèmes distribués qui sont le soubassement des réseaux pair-à-pair. Ainsi, dans ce chapitre, il s’agit pour nous de donner un aperçu sur les systèmes distribués, et puis de détailler le fonctionnement des réseaux pair-à-pair, du protocole SIP et des réseaux pair-à-pair SIP sur lesquels se fonde notre travail.
Les systèmes distribués
Généralités sur les système distribués
Un système distribué est un ensemble d’entités (ordinateurs, mémoires, processus, …) indépendantes, communiquant entre elles et vues par les utilisateurs comme une seule entité [Tanen2007]. Le rôle essentiel d’un système distribué est d’éviter de tout centraliser au sein d’une entité appelée noeud et donc de répartir les tâches initialement réservées aux serveurs aux autres constituants du système. Ceci a comme avantages immédiats le dés-engorgement des serveurs centraux et ainsi permet d’améliorer le temps de réponse. Ces tâches sont entre autres le stockage et le traitement. En distribuant les ressources et les tâches à plusieurs noeuds, le système devient plus performant. Toutefois, dans les systèmes distribués, les tâches bien qu’étant réparties sont coordonnées. L’échec de l’exécution d’une d’entre elles bloque l’achèvement des autres dépendantes de cette dernière. Pour éviter cette situation, les noeuds doivent être autonomes et pouvoir fonctionner indépendamment des autres. En d’autres termes, un système distribué doit mettre en place des stratégies pour permettre la continuité du service même lorsqu’un de ses composants ne fonctionne plus. C’est la notion de tolérance aux pannes.
Tolérance aux pannes
Dans les systèmes distribués, plusieurs entités fonctionnent de manière coordonnée pour accomplir une tâche donnée. La panne d’un composant perturbe la bonne exécution de la tâche. Une entité est en panne lorsqu’elle se trouve dans un état qui l’empêche de remplir sa mission. Les composants n’ayant pas les mêmes performances techniques, encore moins la même durée de vie, il est important, voire indispensable de mettre en place des solutions pour éviter que tout un système soit bloqué, à cause d’une défaillance d’un de ses éléments constitutifs. Ces solutions constituent les algorithmes de tolérance aux pannes. D’après J. C. Laprie [Lap1988], la tolérance aux pannes est l’ensemble des techniques mises en oeuvre dans un système pour lui permettre de continuer à fonctionner même en présence d’une panne d’un de ses composants. 3 Les réseaux P2P L’acronyme peer to peer (P2P) vient du mot pair-à-pair qui traduit une relation d’égal à égal entre les noeuds (ordinateurs, processeurs, téléphones, etc.) du réseau. En d’autres termes, dans les réseaux pair-à-pair, il n’y a pas de rôles réservés à une catégorie de noeuds. Tous les noeuds peuvent exécuter les mêmes fonctions. Le principe du pair-à-pair est de mettre en relation des programmes, des ordinateurs pour partager des ressources directement sans intermédiaires [Fessa2006], ceci grâce à la construction d’un réseau virtuel au dessus du réseau physique. Ainsi, lorsque les liens virtuels 1 sont établis entre la source de la requête (demandeur de service) et le destinataire, les communications se passent directement entre les concernés. Les réseaux pair-à-pair étant des systèmes distribués, ils héritent de la robustesse 2 de ces derniers et de la haute disponibilité des ressources. Ils sont extensibles, c’està-dire qu’un noeud a juste besoin de se connecter à un autre pour, à son tour, faire partie du réseau. Ce sont donc des systèmes ouverts. A côté de ces nombreux avantages du pair-à-pair, il est cependant important de noter qu’ils sont souvent utilisés par des utilisateurs mal intentionnés pour véhiculer des virus, des logiciels espions, des vidéos non recommandées, etc. Le tout premier réseau pair-à-pair est Napster. Il a été créé en 1999 avec une structuration centralisée. Un serveur central est utilisé pour la recherche des ressources. Pour localiser une ressource, Napster fait une table de correspondance entre d’une part, le nom du fichier et celui du client et, d’autre part, celui du client et l’adresse IP de l’utilisateur. Ce qui d’ailleurs pose le problème de l’anonymat dans Napster. De par leur mode de fonctionnement, les réseaux pair-à-pair sont classés en réseaux non structurés et en réseaux structurés. 1. lien virtuel : est un lien qui met en relation directe deux noeuds qui peuvent être géographiquement très éloignés 2. robustesse : la panne d’un noeud n’empêche pas au système de continuer à fonctionner
RÉSEAUX PAIR-À-PAIR ET PROTOCOLE SIP
Les réseaux P2P non structurés
Un réseau P2P est non structuré si les liens entre les noeuds sont établis de façon arbitraire [Man2014]. Dans ce cas, pour faire partie du réseau, un nouveau pair doit connaître au moins un membre du réseau auquel se connecter ou à défaut envoyer sur le réseau un message de diffusion (broadcast) pour trouver les pairs déjà connectés. Dans ce type de cas, les requêtes et réponses se font par inondation. Chaque pair envoie la requête à ses voisins qui l’évaluent puis y répondent si toutefois ils disposent de la ressource demandée. Sinon ils l’acheminent à leurs voisins, ainsi de suite suivant un nombre maximal de sauts ou un temps de survie appelé time to live (TTL) . Parmi les réseaux pair-à-pair non structurés, nous pouvons citer quelques exemples comme Gnutella, BitTorrent, etc. Gnutella : proposé en 2000 par Tom Pepper et Justin Frankel [Mar2003], Gnutella est un système décentralisé qui assure l’anonymat de ses utilisateurs. Depuis sa version 0.6, il a apporté une grande amélioration dans la gestion de la bande passante notamment en introduisant les ultrapeers (ou superpeers) avec les protocoles GUESS et GWebCache [Bud2003]. Les serveurs sont répartis en deux catégories : les ultrapeers qui sont des serveurs stables ayant une bonne connectivité et les clients (ou noeuds feuilles). Les noeuds feuilles sont rattachés à trois (3) ultrapeers. Chaque ultrapeer peut prendre jusqu’à 30 autres ultrapeers et 30 à 45 clients. Les ultrapeers indexent le contenu des clients auxquels ils sont rattachés. Ainsi, lorsqu’un client interroge un ultrapeer la requête peut atteindre 30 autres clients. Si la requête est sans succès, l’ultrapeer la retransmet aux 30 autres ultrapeers éventuels auxquels il est connecté, et la recherche atteint le contenu de 900 clients. BitTorrent : c’est un réseau peer to peer créé dans le but d’avoir une bande passante plus grande pour les échanges et partages de fichiers. Il est basé sur le principe suivant : tout utilisateur qui télécharge une partie d’un fichier devient automatiquement serveur et peut partager la partie déjà téléchargée avec d’autres. Avec BitTorrent, l’utilisateur a la possibilité d’effectuer un téléchargement à partir de plusieurs sources à la fois[Fessa2006]. Il est également possible d’interrompre le téléchargement pour le reprendre plus tard. Son fonctionnement est régi par deux éléments essentiels : le fichier .torrent et le tracker 3 . Le premier est indispensable pour effectuer les téléchargements. Il contient en effet toutes les informations nécessaires au téléchargement (nom du fichier recherché, type de fichier, etc.). Pour en disposer, un client doit le rechercher sur internet ou l’obtenir d’un autre client. Quant au tracker, il permet d’identifier et de connecter les clients entre eux. Lorsqu’un client est démarré, il dialogue avec le tracker pour le renseigner sur l’état d’avancement du téléchargement. Le tracker en réponse lui envoie une liste d’autres clients ou sources (par HTTP ou HTTPS) qui sont sur le même fichier. A intervalle de temps régulier, le client met à jour le tracker en indiquant ce qu’il a déjà téléchargé, et en retour le tracker lui redonne une nouvelle liste de clients auprès desquels il peut télécharger les parties manquantes. De façon générale, les réseaux pair-à-pair non structurés sont caractérisés par la non garantie du succès de la recherche mais aussi par une surcharge de la bande 3. tracker : est un serveur qui aide à la communication entre pairs dans le logiciel BitTorrent passante à cause des time-to-live.
Les réseaux P2P structurés
Un problème fondamental des réseaux peer to peer est comment localiser efficacement un noeud stockant des données recherchées. Les réseaux P2P structurés ont la particularité d’organiser le réseau en une topologie routable, c’est-à-dire que chaque pair dispose d’un identifiant permettant de le localiser en suivant un chemin déterministe. Ils sont régis par l’utilisation d’une table de hachage distribuée. La connexion d’un noeud à ces types de réseaux est souvent plus longue [Fessa2006] car nécessite l’établissement de listes de contacts appelées tables de routages. Grâce à ces tables de routage et à l’existence d’un identifiant pour chaque pair, le succès de la recherche est garanti. En plus, les réseaux structurés ont l’avantage d’être moins pollueurs que les réseaux non structurés en raison du routage déterministe, contrairement au routage par inondation dans les non structurés. Il existe beaucoup de réseaux structurés. Ils se distinguent par la simplicité qu’un noeud a pour intégrer ou quitter le réseau mais aussi pour assurer un routage efficace. Tapestry : inspiré du maillage de Plaxton 4 , Tapestry [Ben2004] utilise un mécanisme de routage assez semblable à celui de Pastry [Ant2001]. Par contre, l’identifiant unique des noeuds est codé sur 160 bits contrairement à Pastry où il est sur 128 bits. Chaque noeud maintient une table de routage à plusieurs niveaux. Un niveau contient les adresses des noeuds qui possèdent le même préfixe que le noeud courant. Chaque noeud maintient un ensemble de pointeurs sur les noeuds voisins. Pour augmenter la robustesse et l’extensibilité du réseau, Tapestry utilise plusieurs procédés. Il s’agit entre autres de l’augmentation de la réplication afin d’accroître la décentralisation, de l’envoi de messages périodiques pour garder les caches à jour, de l’utilisation du surrogate routing 5 , etc. Tapestry a comme avantages le fait que son réseau recouvrant est proche de la topologie du réseau physique. Toutefois il a l’inconvénient de devoir gérer par noeud une quantité importante d’informations nécessitant une mise à jour. CAN : Content Adressable Network (CAN) est un réseau qui repose sur un espace cartésien de dimension d [Rat2001]. Chaque noeud occupe une portion de cet espace et possède un nombre de voisins en O(d). Plus la dimension est grande, plus le routage est rapide. En revanche, le coût de maintien des tables de routage est élevé. Chaque noeud est responsable d’un espace appelé zone. Le noeud responsable stocke toutes les paires (clé, identifiant) se trouvant dans sa zone selon la fonction de hachage utilisée. Chaque clé est représentée sous forme de points ayant d coordonnées c = (c1, c2, ..cd). Le routage d’une clé vers un noeud se fait en envoyant le message vers le voisin qui a les coordonnées les plus proches de celles du noeud recherché. Les avantages de CAN sont multiples. En effet, il offre la possibilité de choisir une route de remplacement en cas de panne de noeuds, la possibilité d’utiliser plusieurs 4. le maillage de Plaxton consiste à répartir de manière uniforme les noeuds sur le réseau. Il utilise pour cela un algorithme de hachage tel que SHA-1 pour les identifier 5. surrogate routing : consiste à doubler chaque entrée de la table de routage et à utiliser une route de remplacement en cas de défaillance de la route principale. 10 3. LES RÉSEAUX P2P CHAPITRE 1. RÉSEAUX PAIR-À-PAIR ET PROTOCOLE SIP fonctions de hachage, ce qui permet de retrouver un même objet sur plusieurs noeuds, etc. Il permet également de mettre en cache les objets les plus fréquemment sollicités afin d’accroître le temps de réponse. Toutefois, CAN surcharge beaucoup le réseau car avec son système de mise en cache, les fichiers réputés font l’objet de plusieurs sollicitations. Chord : c’est un réseau structuré avec une topologie en anneau. Il utilise la fonction cryptographique SHA − 1 [Stoic2001] pour la détermination des identifiants des noeuds avec un nombre maximal de bits d’adressage de m = 160 bits. Chaque pair dispose d’un identifiant obtenu par hachage sur son adresse IP. Les identifiants des ressources stockées sont générés par hachage sur le nom de la ressource. Les informations sont représentées sous forme de couple (id, valeur) avec id représentant l’identifiant du pair sur lequel se trouve la ressource valeur. Avec un nombre de bits d’adressage de m = 160, il est possible d’avoir jusqu’à 2 160 pairs dans l’anneau Chord. Or le plus souvent, il n’y en a pas autant dans le réseau. En d’autres termes, la plupart des identifiants obtenus ne correspondent pas à des noeuds réellement existants. C’est pourquoi Chord définit une fonction successeur() qui permet de déterminer les successeurs d’un noeud sur l’anneau. Pour un noeud dont l’identifiant est ID, l’ensemble {ID + 20 , ID + 21 , ID + 22 , …, ID + 2m−1} représente respectivement les identifiants de son 1 ier , 2 ieme , 3 ieme, etc., mieme successeur sur l’anneau orienté dans le sens des aiguilles d’une montre. Chaque pair de l’anneau maintient une table de successeurs de longueur log2(n) avec n = 2m étant le nombre de noeuds dans le réseau [Furn2013]. L’identifiant du k ieme successeur d’un pair dont l’identifiant est P est déterminé par : ID(k) = (P + 2k−1 ) modulo 2 m, avec (0 < k ≤ m). Lorsque [(P+2k−1 ) modulo 2 m] ne correspond pas à l’identifiant d’un noeud existant, le successeur est alors le premier noeud de l’anneau dont l’identifiant est ≥ [(P + 2 k−1 ) modulo 2 m]. La figure 1.1 montre la table de successeurs du noeud .
Remerciements |