Vous êtes sur la page 1sur 5

Sujet : Routage multichemins intelligent dans les réseaux maillés

sans fil programmables

2) Créer un réseau maillé sans fil dans mininet-wifi avec une


connexion au controleur Ryu

a) Réseau maillé
Le réseau maillé (ou maillage en réseau) est une topologie de réseau (filaire et sans fil) où tous
les hôtes sont connectés pair à pair sans hiérarchie centrale, formant ainsi une structure en forme
de filet. Par conséquent, chaque nœud doit recevoir, envoyer et relayer les données. Ceci évite
d’avoir des points névralgiques qui, s’ils tombent en panne, isolent une partie du réseau. Si un
hôte est hors service, les données empruntent une route alternative. Un réseau en maille peut
relayer les données par << inondation >> (flood) ou en utilisant des routes (itinéraires)
prédéfinies ; dans le second cas, le réseau doit prévoir des connexions sans interruption ou
prévoir des déviations (routes alternatives). La technologie de réseau maillé est l’une des
architectures de réseaux clés dans lesquels appareils sont connectés par de nombreuses
interconnexions redondantes entre les nœuds du réseau tels que les routeurs et les
commutateurs. Dans une topologie de maillage, le cas échéant câble ou nœud échoue, il y’a
beaucoup d’autres façons pour les deux nœuds de communiquer. Alors que la facilité de
dépannage et une fiabilité accrue y’a des avantages précis, les réseaux maillés sont couteux à
installer, car ils utilisent beaucoup de câblage. Souvent, une topologie de maillage seront utilisés
conjointement avec d’autres.(tels que les topologies en étoile, en anneau et en bus) pour former
une topologie hybride.

b) Configuration sur Mininet et Ryu

Pour répondre à cette question, une connexion internet est requise, tout d’abord s’assurer que
mininet-wifi et ryu sont bien installé et ouvrir deux terminals :
Sur le premier terminal lancer ryu sur le protocole openflow13 via les commandes cd
ryu/ryu/app et puis ryu run simple_switch_13.py
Sur le second terminal créer un réseau sur mininet supervisé par le contrôleur Ryu par la
commande sudo mn -controller = remote switch = ovsk, protocols = Openflow13, -topo =
linear,8.
Ce réseau contient 8 switches et 8 hôtes supervisés par le contrôleur Ryu.
c) Tests
Maintenant que le réseau est créé on peut mettre les hôtes en réseau via la commande sudo h1
links h2. On peut aussi des à présent vérifier les informations sur le réseau via les
commandes sudo ovs-ofctl –O OpenFlow13 show <nom de l’équipement> et
sudo ovs-vsctl show

3) Expression d’une application dans Ryu pour identifier afficher


tous les chemins possibles entre 2 nœuds
Le processus de découverte de chemins est assuré par un mécanisme de retransmission des

messages de contrôle afin de propager l’information à l’ensemble des nœuds connectés. Les
messages de contrôle contiennent également la qualité du chemin annoncé afin que chaque
nœud puisse déterminer le chemin ayant la meilleure qualité.

La qualité d’un chemin est déterminée en fonction de deux informations : (i) la qualité des

liens qui composent le chemin et (ii) le nombre de sauts correspondant. Son évaluation impose

donc un compromis entre ces deux grandeurs. Lorsqu’un nœud reçoit un message de contrôle ,
il calcule la qualité du chemin associée (Qc) en fonction de la qualité du chemin annoncée dans
le message (Qca, de la qualité du lien local (Qlocal) et d’une pénalité en relation avec le nombre
de sauts effectué par le message (Ps) :

Qc = Qca * Qlocal * Ps (1)

La qualité d’un chemin donnée ci-dessus est normalisée entre [0,1]. En pratique, la qualité

d’un chemin est normalisée dans [0,255] (codée sur huit bits). Elle s’exprime alors par
l’équation

(2) :

𝑄𝑐𝑎 × 𝑄𝑙𝑜𝑐𝑎𝑙 × 𝑃𝑆
Qc = (𝑄𝑚𝑎𝑥 )2

Avec Qmax la valeur maximale que peut prendre une estimation (255). Lorsqu’un chemin est

annoncé, la valeur Qca est fixée au départ à 255. Cette valeur décroît par la suite en fonction de
la

qualité des liens que traverse le message et en fonction de la pénalité de saut. Celle-ci sanctionne
la qualité d’un chemin à chaque retransmission du message selon une pénalité, P, telle que :

PS = Qmax – P (3)

Si l’on considère que Qmax = 255 alors nous fixons la valeur de la pénalité P à dix, valeur
également utilisée dans le protocole BATMAN. La figure 1 montre les tables de routage
associées aux nœuds qui contiennent les évaluations de la qualité des chemins. Si l’on considère
uniquement le nœud A, il estime la qualité du chemin menant vers le nœud D avec une qualité
de 255 puisque

Qca = Qlocal = 255 et que les nœuds A et D sont des voisins directs, donc PS = 255. Concernant
le chemin entre les nœuds A et B, ils évaluent la qualité du chemin à 178 puisque la qualité du
lien local est de 70% telle que Qlocal = (70 * 255)/100 = 178 et que Qca = 255 et PS = 255.
Concernant le chemin entre les nœuds A et C, en considérant la qualité du chemin annoncé par
B telle que Qca = 255 et que la qualité du lien local Qlocal est de 178 et qu’une pénalité de saut
est appliquée, la qualité du chemin, QC, est égale à 171.

Figure 1 : Evaluation de la qualité d’un chemin


La prise en compte du nombre de sauts dans le processus d’évaluation de la qualité du chemin
permet d’éviter la propagation infinie d’un message. En effet, si la pénalité P > 0 la qualité du
chemin annoncée (Qca) est réduite à chaque retransmission du message et ce quel que soit la
qualité du lien local (Qlocal) . Lorsque la qualité du chemin annoncée atteint zéro, le message est
automatiquement supprimé.
La sélection d’un chemin se traduit dans la table de routage par la mémorisation de l’adresse

du nœud voisin qui l’a annoncé. La topologie du réseau peut changer au cours du temps ce qui

amène un nœud à sélectionner un autre voisin associé à un meilleur chemin. Bien que la
métrique F-ETX permet de détecter la disparition d’un lien local, cette information n’est pas
propagée dans le réseau. La sélection d’un chemin en fonction de sa qualité ne permet pas de
garantir la sélection d’un chemin existant, comme le montre la figure 2.

Le déplacement du nœud D amène la topologie du réseau à changer. Lorsque le nœud D se

déclare auprès du nœud C, celui-ci détecte qu’il devient un voisin direct et met à jour sa table
de routage. En parallèle, le nœud B détecte que le nœud D ne fait plus partie de son voisinage
direct et supprime l’entrée associée dans sa table de routage. Lorsque le nœud C annonce le
chemin vers D, le nœud A compare la qualité du chemin, B ↔D qui est supérieure à celle du
chemin C↔ D. De ce fait, le nœud A garde dans sa table de routage le chemin B ↔D et supprime
le chemin annoncé par C. Par conséquent, le nœud B ne reçoit pas l’annonce du chemin qui
mène vers D. Ce processus de sélection est donc insuffisant pour garantir la sélection d’un
chemin valide.

Figure 2 : Problème de sélection d’un chemin


Nous proposons trois mécanismes afin d’améliorer le processus de sélection d’un chemin
lorsqu’un événement topologique survient. (i) Lorsqu’un chemin n’est plus annoncé, tous les
nœuds stockant ce chemin dans leur table de routage font décroitre sa qualité. (ii) Lorsqu’un
chemin n’es plus annoncé au bout de deux périodes, l’entrée associée est supprimée de la table.
(iii) Lorsqu’aucun chemin n’est disponible, les messages qui cherchent à l’emprunter sont
sauvegardés au sein d’une file d’attente et traités par le protocole de routage DTN décrit dans
la section suivante.

Pour conclure sur le routage MANET, nous présentons dans l’algorithme le processus effectué
par un nœud pour évaluer la qualité d’un chemin.
Algorithme : Calcul de la qualité d’un lien local
INPUT : paquet : paquet réceptionné
INPUT : adrr : adresse du nœud
1 : If (paquet.AddrOrig = paquet.AddrPrec) ∨ (paquet.AddrOrig = addr) then
2 : CalculQualiteLienLocal() # Calcul de la qualité du lien local
3 : else
4: if ( !table.CheminExist(addrOrign) ∨ table.Chemin(addrOrign) . Qualité <
paquet.qualité )
then
5 : table.MajEntrée() # Met à jour l’entrée dans la table
de routage
𝑝𝑎𝑞𝑢𝑒𝑡.𝑞𝑢𝑎𝑙𝑖𝑡é ×𝐺𝑒𝑡𝑄𝑢𝑎𝑙𝑖𝑡é𝐿𝑖𝑒𝑛𝐿𝑜𝑐𝑎𝑙()
6 : paquet.qualité ← # Qualité du lien local
255
𝑝𝑎𝑞𝑢𝑒𝑡.𝑞𝑢𝑎𝑙𝑖𝑡é ×245
7 : paquet.qualité ← # Pénalité du saut
255

8 : paquet.AddrPrec ← addr
9 : Envoi(paquet) # Annonce le chemin
10 : else
11 : Supprimer(paquet) # Le chemin n’est plus annoncé
12 : end if
13 : end if

Vous aimerez peut-être aussi