• Aucun résultat trouvé

temps-réel

2.1.2 Le routage dans les RCsF

Le but d’un protocole de routage est de construire (et éventuellement mainte-nir) des routes pour acheminer des paquets entre des sources et des destinations. Dans le cadre des RCsF, nous nous intéressons principalement au trafic qui a pour source n’importe quel nœud du réseau et pour destination le puits : ce type de trafic est nommé convergecast. Nous proposons de classer les protocoles de routage pour RCsF en quatre catégories : les protocoles hiérarchiques [IETF-ROLL, 2011], les protocoles à la demande [Perkins and Royer, 1999], les protocoles aléatoires [Servetto and Barrenechea, 2002] et les protocoles greedy [Karp and Kung, 2000].

Routage hiérarchique

Les protocoles de routages hiérarchiques organisent le réseau en une topologie lo-gique : des nœuds parmi les voisins physiques (nœuds à portée radio) sont choisis comme voisins logiques dans la structure de routage (topologie logique). Les struc-tures de routage regroupent les nœuds sous forme de clusters ou bien les organisent en arbres. Dans le premier cas, un nœud du cluster appelé cluster-head collecte les données de tous les membres du cluster, puis il transmet ces données au puits.

LEACH [Heinzelman et al., 2000] est un protocole qui organise le réseau en

clus-ters. Les cluster-heads agrègent le trafic de tous les nœuds appartenant au cluster,

ils consomment donc beaucoup plus d’énergie que les autres nœuds. LEACH pro-pose de répartir la consommation d’énergie en sélectionnant de façon aléatoire les

cluster-heads pour une période de temps prédéterminée (nommée cycle) : au début

de chaque cycle, les nœuds déterminent aléatoirement et localement s’ils sont

cluster-head ou non. Ils déclarent leur statut grâce à un message envoyé en broadcast. Les

nœuds non cluster-heads choisissent de se rattacher au cluster-head qui demande le moins de consommation énergie pour être joint. Chaque cluster-head produit ensuite un ordonnancement pour les communications des nœuds appartenant à son cluster. Il reçoit ensuite les paquets des membres du cluster, les agrège et les transmet direc-tement au puits. Le fait que tous les clusters doivent pouvoir atteindre le puits en un saut rend difficilement implémentable ce genre de protocoles pour les réseaux très larges échelles. De plus, le changement de cluster-head, même s’il permet de répartir la consommation d’énergie entre les nœuds, a un coût en trafic de signalisation qui se répercute en coût énergétique. Des améliorations ont été proposées, notamment TL-LEACH [Loscri et al., 2005] qui propose une organisation en deux niveaux de clusters. Les cluster-head secondaires transmettent leur trafic aux cluster-head primaires qui transmettent au puits. Cela réduit le nombre de nœuds qui doivent directement trans-mettre au puits et améliore donc le passage à l’échelle au prix d’une organisation plus complexe et donc plus coûteuse en énergie. Le protocole EECS [Ye et al., 2005b], re-prend l’organisation en clusters de LEACH, mais les clusters sont formés en fonction de l’énergie résiduelle de chaque nœud pour augmenter la durée de vie du réseau.

Dans le cas d’une organisation en arbre, le puits est la racine. Chaque nœud choisit un parent, qui est plus proche que lui du puits, et lui transmet son trafic. Le choix du parent dépend de la métrique de routage utilisée.

RPL [IETF-ROLL, 2011] est un protocole de routage pour les réseaux IPv6 basse consommation et non-fiables, standardisé par l’IETF. RPL utilise les graphes orientés acycliques (noté DAG pour Directed Acyclic Graphs) pour représenter la topologie de routage. Un DAG est enraciné à un point de collecte (puits). Il est construit de proche en proche : le puits annonce qu’il est la racine du DAG, ses voisins mettent à jour leurs tables de routage et diffusent l’information. Un nœud choisit ses parents dans le DAG en fonction de la métrique à optimiser (latence, fiabilité, énergie, etc.). Plusieurs instances de DAG optimisant plusieurs métriques peuvent coexister. Les paquets seront routés selon les besoins de l’application.

Les protocoles basés sur les clusters et les arbres permettent de maîtriser le nombre de sauts pour atteindre le puits et donc de maîtriser les délais de bout en bout. Ce-pendant l’énergie dépensée pour la maintenance de ces structures est très importante dans les réseaux large échelle [Amadou, 2012]. De plus, l’interfaçage avec les couches MAC peut poser problème car il faut pouvoir faire correspondre les structures topo-logiques de niveau MAC et de niveau routage (notamment, le cas de RPL et 802.15.4 est évoqué dans la section 2.1.3).

Routage à la demande

Le routage à la demande consiste à créer une route depuis une source vers une destination, par un mécanisme de requête, lorsque cela est nécessaire. AODV [Perkins and Royer, 1999] est l’exemple classique de protocole à la demande. Les routes ne sont maintenues que si elles sont actives, c’est-à-dire qu’il y a du trafic échangé. Quand un nœud veut communiquer avec une nouvelle destination, il inonde le réseau avec un paquet RREQ (route request) et attend un message RREP (route reply). La destination ou bien un nœud qui a une route active vers la destination peut répondre au message RREQ par un RREP. Ce type de protocole est très coûteux en énergie du fait du mécanisme d’inondation. Cependant, il permet de pouvoir router des informations dans des environnements dynamiques, car une route qui devient obsolète du fait d’un changement dans l’environnement sera reconstruite. Ce type de protocole est donc plus adapté aux réseaux MANET qui sont sujets à des changements de topologie importants dus à la mobilité, et qui sont moins contraints en énergie.

Le protocole LOADng [IETF, 2013] en cours de standardisation à l’IETF étend AODV tout en allégeant certains mécanismes pour réduire la consommation d’énergie. Ce type de routage reste peu approprié aux RCsF [Lu et al., 2008] sauf dans le cas où l’environnement radio est très dynamique et le trafic est faible [IETF, 2013].

Ce type de routage peut permettre de respecter des bornes temporelles strictes si la longueur de la route produite la plus longue est connue. Il faut aussi que la construction de la route puisse se faire en temps borné, ce qui n’est pas garanti par AODV ou LOADng.

Routage aléatoire

Le routage aléatoire consiste à choisir le prochain saut d’un paquet de manière aléatoire dans la liste des voisins disponibles. Le paquet est réémis jusqu’à ce qu’il atteigne le puits (ou que le champ TTL - Time To Live - qui est décrémenté à chaque saut, atteigne la valeur 0).

Dans [Servetto and Barrenechea, 2002], les auteurs définissent un protocole de marche aléatoire. Le but est de router des paquets sur un réseau maillé large échelle en ayant le plus de partage de charge possible. L’environnement est dynamique, les nœuds s’endorment et se réveillent à des instants aléatoires. Les auteurs montrent que leur solution permet un partage de charge statistique au niveau global du réseau, en se basant uniquement sur des informations et des décisions locales.

Ce type de routage est résilient [Erdene-Ochir et al., 2010], c’est-à-dire qu’il per-met de s’adapter aux changements brusques et importants de la topologie du réseau. Cependant, la longueur des routes n’est pas du tout maîtrisée. Des phénomènes d’os-cillations peuvent apparaître (paquet qui est routé vers le nœud duquel il vient indé-finiment), cela augmente énormément le temps moyen pour atteindre la destination. Pour palier aux oscillations, des protocoles de marches aléatoires avec mémoire ont été proposés [Altisen et al., 2012]. Le paquet contient une liste de nœuds qui ne peuvent pas être choisis comme prochain saut, ce sont généralement les nœuds qui viennent d’être visités. Les auteurs de [Altisen et al., 2012] prouvent que le temps moyen pour atteindre la destination (le nombre de sauts en fait) est fini. Cette information n’est cependant pas suffisante pour garantir des délais de bout en bout, le pire cas étant infini.

Routage greedy

Les algorithmes de routage greedy prennent des décisions de routages qui sont les meilleures localement. C’est-à-dire que le meilleur voisin est choisi comme prochain saut vers le puits. Pour évaluer les différents choix possibles, une métrique locale de routage est utilisée. Une métrique classique et largement utilisée est la distance du prochain saut par rapport au puits, le nœud qui est le plus proche géographiquement du puits est choisi comme prochain saut : on parle alors, dans ce cas, de routage géographique.

GPSR [Karp and Kung, 2000] est un protocole de routage géographique. Les nœuds connaissent leur position GPS et l’envoient régulièrement, en broadcast à leurs voisins. Chaque nœud maintient une liste de ses voisins et de leurs coordonnées. Quand un nœud a un paquet à envoyer ou relayer vers le puits, il choisit le voisin qui permet d’avancer le plus possible dans la direction du puits. Cet algorithme a cependant un défaut, il est possible de tomber dans un minimum local : c’est-à-dire un nœud qui n’a pas de voisin géographiquement plus proche du puits que lui comme représenté sur la Figure 2.8. Ce problème est dû à l’existence de trous dans le réseau [Karp and Kung, 2000]. Dans ce cas, un autre algorithme est utilisé : le face routing. Les paquets sont routés sur une des faces du trou comme représenté sur la Figure 2.8. Le prochain saut est alors choisi en utilisant la règle de la main gauche (ou droite), le

Figure 2.8 – Comportement de face routing

paquet est envoyé au premier voisin qui rencontre l’axe source-destination subissant une rotation centrée sur la source dans le sens inverse des aiguilles d’une montre (pour la règle de la main gauche). Ce type de protocole a l’avantage de nécessiter très peu d’informations sur la topologie globale du réseau. En effet, il suffit que les nœuds connaissent la position du puits, leur position ainsi que celles de leurs voisins. Cependant, le coût financier et la consommation énergétique des modules GPS est un frein au développement de ce type de routage. De plus, [Watteyne et al., 2007] montre qu’une imprécision dans la position des nœuds peut mener à des erreurs, lors de l’exécution de l’algorithme de face routing, qui empêchent la livraison des données.

Pour palier à ces problèmes, des systèmes de coordonnées virtuelles ont été pro-posés. Ces systèmes sont basés sur les relations de voisinage radio plutôt que sur les positions géographiques réelles. Un nœud obtient sa position logique dans le réseau en échangeant des messages avec ses voisins. Dans [Rao et al., 2003], les auteurs pro-posent un système de coordonnées cartésien. Les coordonnées sont calculées dans un espace à deux dimensions. Dans une première version, la position d’une par-tie des nœuds est connue. Ces nœuds sont sur le périmètre du réseau. Au départ, tous les nœuds (non nœuds périmètres) ont leur coordonnée initialisée à (0, 0). A chaque itération de l’algorithme proposé, les nœuds voisins échangent leurs coordon-nées. Ils calculent ensuite leurs nouvelles coordonnées comme étant le barycentre des coordonnées de leurs voisins. Les coordonnées vont donc se disperser sur l’espace entre (0, 0) et le périmètre où sont placés les nœuds dont la position est connue. Dans une deuxième version, les positions des nœuds périmètres ne sont pas connues. Elles sont données arbitrairement en mappant des nœuds sur un cercle virtuel qui contient le réseau. L’algorithme de mise à jour itératif est ensuite exécuté. Les auteurs de [Watteyne et al., 2009a] améliorent le mécanisme d’obtention des coordonnées de [Rao et al., 2003] en utilisant le trafic de données utiles pour initialiser et mettre à jour les coordonnées. Dans [Cao and Abdelzaher, 2004], des coordonnées basées sur le nombre de sauts sont présentées. Les nœuds prennent pour coordonnées le nombre

Figure 2.9 – Système de coordonnées avec ancres, avec (i, j, k, l) respectivement les distances aux ancres A1, A2, A3 et A4

de sauts qui les séparent de nœuds ancres. Les ancres inondent le réseau avec un message d’initialisation contenant un compteur initialisé à 0. Chaque nœud relaye ce message et incrémente le compteur. La valeur du compteur la plus petite est conservée comme coordonnée. Le nombre d’ancres détermine la dimension de l’espace des co-ordonnées. La Figure 2.9 montre un exemple de système de coordonnées avec quatre ancres (nœuds noirs) dans un réseau grille. Les nœuds sont donc placés dans un espace à quatre dimensions (d’entiers naturels). Un routage de type greedy pourra ensuite utiliser ces coordonnées.

GRAB [Ye et al., 2005a] est un protocole de routage par gradient qui tire parti de la nature broadcast des transmissions radios. À l’initialisation du réseau, chaque nœud récupère le nombre de sauts qui le sépare du puits par un mécanisme d’inondation (il est d’usage d’appeler cette valeur “gradient” du nœud, nous utilisons cette appellation dans la suite de ce document). C’est un cas particulier des coordonnées basées sur les ancres avec une seule ancre : le puits. Un routage de type greedy opportuniste est ensuite utilisé : un nœud qui veut envoyer un paquet au puits, transmet ce paquet en broadcast à ces voisins, un des voisins qui reçoit le paquet est ensuite élu pour le retransmettre. Cette élection est basée sur le gradient : un nœud qui est plus proche du puits (en nombre de sauts) que l’émetteur pourra relayer le paquet. Plusieurs nœuds peuvent avoir le même gradient, une métrique est donc utilisée pour choisir le relayeur (force du signal, niveau d’énergie, aléatoire, ...). Un ou plusieurs relayeurs peuvent être sélectionnés en fonction de la fiabilité désirée. On peut noter que le fonctionnement en broadcast nommé routage opportuniste (décrit en détails dans la section suivante) permet d’augmenter la fiabilité car il faut que seulement un nœud sur l’ensemble des voisins reçoive le paquet pour qu’il ne soit pas perdu. La Figure 2.10 représente un exemple de fonctionnement de GRAB, seuls les nœuds plus proches du

Figure 2.10 – Fonctionnement de GRAB

puits relayent le paquet. Il est dupliqué une fois, puis les deux instances sont routées vers le puits (les chiffres représentent le gradient).

Le routage greedy est intéressant pour les RCsF car il ne nécessite pas de connais-sance globale du réseau et ne se base que sur des informations sur le voisinage. Ce-pendant, pour le cas du routage géographique, il est difficile de borner la longueur d’une route. En effet, les trous dans le réseau vont rallonger la route. En revanche, les approches avec des coordonnées virtuelles basées sur les ancres, permettent de connaître à l’avance le nombre de sauts qu’un paquet va effectuer depuis n’importe quelle source et donc de contraindre la longueur des chemins. Ce point sera abordé dans la section 2.2. Avant d’aborder les solutions cross-layer qui définissent à la fois des mécanismes aux niveaux MAC et routage, nous regardons les protocoles de rou-tage sous un autre angle : nous distinguons les protocoles de rourou-tage dits classiques des protocoles de routage opportunistes.

Routage classique et routage opportuniste

La nature broadcast des transmissions radios peut être vue comme un inconvé-nient : elle génère des collisions et des paquets adressés à un nœud en particulier sont reçus par d’autres nœuds qui consomment donc inutilement de l’énergie. Cependant, comme nous l’avons vu dans la description de GRAB, on peut tirer parti de cet as-pect pour augmenter la fiabilité du routage, c’est le but des protocoles opportunistes [Biswas and Morris, 2005] [Lampin et al., 2012] [Ye et al., 2005a]. Avec les protocoles de routage opportunistes, le prochain saut est choisi après l’émission du paquet par un ensemble de relayeurs potentiels. Cela crée une diversité spatiale : des routes al-ternatives peuvent être utilisées, et donc cela augmente la probabilité de succès du saut. Dans le cas du routage classique, où le prochain saut est choisi avant l’émission du paquet, il n’y a qu’une seule alternative : si le nœud choisi ne reçoit pas le paquet, le saut échoue.

Les auteurs [Biswas and Morris, 2005] introduisent la notion de routage opportu-niste avec le protocole ExOR : un nœud émetteur indique dans le paquet, une liste de relayeurs potentiels classés par ordre de priorité pour relayer le paquet et le transmet en broadcast. Sur réception du paquet, un nœud vérifie s’il est dans la liste. Si c’est le

cas il déclenche une temporisation dont la durée dépend de la place du nœud dans la liste (plus il est loin dans la liste, plus la temporisation est longue). Après écoulement de la temporisation, le nœud émet le paquet s’il n’a pas déjà été émis. Si le nœud n’est pas dans la liste, il ne participe pas au relayage du paquet. Les auteurs montrent que ce type de routage permet de réduire le nombre de retransmissions, car il aug-mente la fiabilité des transmissions. En revanche, ce protocole souffre du problème de réplication de paquets : plusieurs relayeurs potentiels relayent le paquet, cela induit une consommation d’énergie inutile.

Dans [Lampin et al., 2012], les auteurs adaptent la notion de routage opportuniste au routage sur une structure DAG. Comme pour RPL [IETF-ROLL, 2011], un DAG enraciné au puits est créé et maintenu par les nœuds, chaque nœud reçoit de son parent dans le DAG une adresse et un domaine d’adresses qu’il peut partager entre ses fils. Les nœuds émettent leurs paquets en broadcast. Sur réception d’un paquet, un nœud vérifie si l’adresse de l’émetteur est dans son sous-domaine (si le nœud est un ancêtre de l’émetteur dans le DAG). Si c’est le cas, il participe à une phase de contention découpée en slots de temps : le nœud choisi un slot en fonction de la taille de son sous-domaine : plus il est grand, moins il attend (plus le sous-domaine d’un nœud est grand, plus il est proche du puits dans le DAG). Les auteurs montrent que leur solution a de meilleures performances que RPL en termes d’énergie et de délai, tout en aillant un taux de livraison similaire.

On remarque que le routage opportuniste nécessite un mécanisme distribué d’élec-tion du/des nœuds relayeurs qui consomme de l’énergie [Lampin et al., 2012] et qui peut mener à des réplications de paquets (qui conduit aussi à une surconsommation d’énergie). La fiabilité a donc un coût énergétique, nous commentons cet aspect dans la section 5.7 du Chapitre 5.

Dans le Chapitre 3 nous évaluons et comparons, à l’aide d’un modèle théorique, la fiabilité du routage classique et celle du routage opportuniste.