Archi RIP

Identification

Infoforall

20 - Routage dynamique RIP


Prérequis : l'activité sur les tables de routage et l'activité débranchée précédente sur RIP

Evaluation ✎ : questions -

Documents de cours : open document ou pdf

1 - Les Systèmes Autonomes

Nous avons vu dans les activités précédentes la structure globale d'Internet.

Visualisation du transit
Internet simplifié (image réalisée avec Filius)

Les machines des clients génèrent des paquets IP qui sont envoyés vers l'extérieur. Les clients individuels sont reliés à leur répartiteur (un batiment qui reçoit les communications des habitants aux alentours).

A partir de là, leurs communications sont envoyées jusqu'à leur FAI (Fournisseur d'Accès à Internet) : on atteint le premier vrai réseau.

Le premier routeur va alors être chargé de trouver à qui envoyer ce paquet IP. Comment ? En utilisant le protocole IP et la table de routage du routeur.

Différents opérateurs qui se partagent le trafic : les Fournisseurs d'Accès Internet (FAI) et d'autres opérateurs privés de réseaux traitant directement avec les FAI en leur permettant de faire passer les paquets IP par leurs réseaux.

Ces opérateurs possèdent leurs propres routeurs, configurés et programmés par leurs propres personnels. Aucun n'a envie de voir des personnes extérieures interagir directement sur leurs machines ou connaître les détails de leurs infrastructures.

En réalité, le "nuage" Internet est donc composé d'un ensemble de réseaux contrôlés par des sociétés acceptant d'être reliées aux autres.

Système Autonome

Un Système Autonome est le nom donné à un ensemble de routeurs gérés par un même opérateur et sur lequel on fait tourner un algorithme de routage. Chaque Système Autonome peut utiliser et configurer son routage comme il veut.

Il y a donc deux types de protocole de routage :

  1. Les protocoles internes à l'intérieur d'un système autonome : les routeurs appartiennent à la même entité, on peut considérer qu'ils sont sures et on peut imposer que toutes les machines fassent tourner le même protocole.
  2. Les protocoles externes qui permettent de relier les systèmes autonomes entre eux. Cette fois, il peut y avoir des contraintes commerciales ou de sécurité visant à faire passer certains paquets par une route particulière.
Connexion entre Systèmes autonomes
Des protocoles pour le routage à l'intérieur des systèmes autonomes et d'autres protocoles pour le routage entre les systèmes autonomes

Nous allons voir cette année deux protocoles de routages internes :

  • le protocole RIP (dont la métrique est liée au nombre de sauts)
  • le protocole OSPF (dont la métrique est liée au coût de la liaison).

Les systèmes autonomes ont besoin d'un routage dynamique : ils sont composés de trop de routeurs pour qu'on puisse les configurer à la main :

  1. Les risques de mauvaises configurations avec des paquets faisant des aller-retours entre deux routeurs est trop grand si les réglages sont fait à la route avec un routage statique
  2. Une panne sur le réseau voudrait dire que les routes ne changent pas : les routeurs continueraient d'envoyer les paquets sur des routes défectueuses, le temps que quelqu'un écrive de nouvelles routes valides.

Bref, ce ne serait pas sérieux.

2 - Principe du routage RIP

Nous allons commencer aujourd'hui par le protocole RIP pour Routing Information Protocol.

Protocole RIP : Routing Information Protocol

Avec ce protocole, la meilleure route à prendre est la route qui va demander le moins de sauts entre le routeur de départ et le routeur d'arrivée. On dira que la métrique utilisée est le nombre de sauts jusqu'au réseau voulu.

Il s'agit d'un protocole de routage dynamique et décentralisée car il n'y a aucun routeur jouant de rôle plus important que les autres.

Le principe général de RIP

  1. Toutes les 30 secondes, chaque routeur transmet les destinations qu'il connaît à ses voisins directs (les routeurs adjacents) :
    • les adresses des réseaux qu'il connaît et
    • le coût pour le joindre en utilisant la métrique "nombre de sauts".
  2. Lorsqu'un routeur reçoit alors les informations de ses propres voisins, il lui suffit d'augmenter les valeurs reçues de 1 pour connaître le nombre de sauts pour atteindre les réseaux proposés
  3. Chaque routeur va alors choisir la route la plus courte à garder pour sa propre table de routage en faisant la synthèse des indications reçues.
  4. Si un routeur voisin n'a pas rien envoyé depuis trois minutes, on considère qu'il n'est plus joignable pour le moment et on lui attribue une métrique de 16 pour dire non joignable.

3 - Initialisation

Lors de cette phase, le routeur va envoyer un message sur toutes ses cartes réseaux en précisant son adresse IP : les correspondants vont répondre s'ils appartiennent bien au même système RIP. Ils vont donner leurs propres noms et les routes (et les métriques associées) qu'ils connaissent.

Nous allons nous concentrer sur la table de routage d'un des routeurs du système autonome. Nous choisissons ici de ne lui donner qu'une seule adresse IP A100-1, mais il possède bien entendu autant d'adresses IP que de cartes réseaux. On considère donc qu'il s'agit d'une machine appartenant au réseau A et au sous-réseau 100. Sur le sous-réseau, son identifiant machine est le 1.

Le routeur A-100-1 initialement

Cette machine possède 4 cartes réseaux ou interface d'entrée/sortie, notées :

E/S1, E/S2, E/S3 et E/S4

Voici sa table de routage actuelle :

Destinataire Passerelle Interface (carte réseau) Métrique (nbr de sauts)
A100-1 Localhost Localhost 0
A100 A100-1 E/S 4 0

01° Ce routeur RIP A100-1 reçoit les messages suivants :

Reçu via l'interface E/S1

Message en provenance du routeur A300-1 qui peut joindre :

  • A300 en 0 saut
  • A100 en 1 saut

Reçu via l'interface E/S3

Message en provenance du routeur A400-1 qui peut joindre :

  • A400 en 0 saut
  • A500 en 1 saut
  • A100 en 1 saut

Reçu via l'interface E/S2

Message en provenance du routeur A200-1 qui peut joindre :

  • A200 en 0 saut
  • A700 en 1 saut
  • A100 en 1 saut

Question : remplir la nouvelle table de routage du routeur A100-1 après réception et traitement de ces données.

Le message est pour
IP Destinataire
Transmettre à la passerelle
(intermédiaire de communication)
Interface à utiliser
(carte réseau)
Métrique (nbr de sauts)
A100-1 Localhost Localhost 0
A100 A100-1 (via réseau local) E/S 4 0
A200 ... ... ...
... ... ... ...

...CORRECTION...

Il s'agit de prendre en compte les routes proposées en rajoutant 1 au nombre de sauts.

Le message est pour
IP Destinataire
Transmettre à la passerelle
(intermédiaire de communication)
Interface à utiliser
(carte réseau)
Métrique (nbr de sauts)
A100-1 Localhost Localhost 0
A100 A100-1 (via réseau local) E/S 4 0
A200 A200-1 E/S2 1
A300 A300-1 E/S1 1
A400 A400-1 E/S3 1
A500 A400-1 E/S3 2
A700 A200-1 E/S2 2

02° Lors de la prochaine transmission RIP, quel est le message que va envoyer le routeur A100-1 aux routeurs adjacents ?

...CORRECTION...

Message en provenance du routeur A100-1 qui peut joindre :

  • A100 en 0 saut
  • A200 en 1 saut
  • A300 en 1 saut
  • A400 en 1 saut
  • A500 en 2 sauts
  • A700 en 2 sauts

03° Le routeur A100-1 reçoit de nouveaux messages des routeurs adjacents :

Reçu via l'interface E/S1

Message en provenance du routeur A300-1 qui peut joindre :

  • A300 en 0 saut
  • A500 en 1 saut
  • A600 en 1 saut
  • A100 en 1 saut

Reçu via l'interface E/S3

Message en provenance du routeur A400-1 qui peut joindre :

  • A400 en 0 saut
  • A500 en 1 saut
  • A100 en 1 saut
  • A300 en 2 sauts

Reçu via l'interface E/S2

Message en provenance du routeur A200-1 qui peut joindre :

  • A200 en 0 saut
  • A700 en 1 saut
  • A600 en 2 sauts

Question : remplir la nouvelle table de routage du routeur A100-1 après réception et traitement de ces données.

Le message est pour
IP Destinataire
Transmettre à la passerelle
(intermédiaire de communication)
Interface à utiliser
(carte réseau)
Métrique (nbr de sauts)
A100-1 Localhost Localhost 0
A100 A100-1 (via réseau local) E/S 4 0
A200 ... ... ...
... ... ... ...

...CORRECTION...

Le message est pour
IP Destinataire
Transmettre à la passerelle
(intermédiaire de communication)
Interface à utiliser
(carte réseau)
Métrique (nbr de sauts)
A100-1 Localhost Localhost 0
A100 A100-1 E/S 4 0
A200 A200-1 E/S2 1
A300 A300-1 E/S1 1
A400 A400-1 E/S3 1
A500 A400-1 E/S3 2
A600 A300-1 E/S1 2
A700 A200-1 E/S2 2

04° Combien de routes vont indiquer les 7 routeurs où bout d'un certain temps ?

...CORRECTION...

Chaque routeur va envoyer 7 routes au moins. Sans compter les routes vers les réseaux externes qu'on pourrait joindre depuis l'un des routeurs du système autonome.

05° Dans le pire des cas, combien faut-il d'échange pour que chaque routeur connaisse une route vers tous les autres ? Quel est d'ailleurs ce pire des cas ?

...CORRECTION...

Visualisation du pire des cas : 7 routeurs en lignes
6 Sauts pour que les deux routes extrêmes connaissent une route vers l'autre

06° Combien de routes au bout d'un certain temps dans un système autonome de 200 routeurs si on applique juste ce principe basique de RIP ?

Comment évolue le nombre d'octets dans les messages RIP ?

...CORRECTION...

Chacun des 200 routeurs va envoyer toutes les 30 secondes un message contenant sa métrique pour joindre les 200 routeurs. Et ils vont les envoyer à tous leurs routeurs adjacents.

On voit qu'on a du 200*200. L'évolution des messages est donc quadratique.

4 - Métrique maximale

Métrique maximale

Pour limiter le nombre de routes inutiles et limiter la taille des messages RIP sur le réseau, on considère qu'une métrique de 16 correspond à une route impossible à atteindre.

Cette taille est un compromis entre le nombre de routes à envoyer aux autres routeurs toutes les 30s et la possibilité de joindre la destination.

Si un routeur apprend qu'un de ses voisins peut joindre un autre réseau en 15 sauts, il ne tiendra donc pas compte lui-même de cette route : en rajoutant 1, il faudra 16 sauts depuis ce routeur.

Cette métrique de 16 sert également à indiquer de l'un des voisins ne répond plus depuis 3 minutes. Le routeur place donc 16 pour toutes les routes dont la passerelle était ce voisin indisponible. De proche en proche, les autres routeurs apprendront donc également que ces routes ne sont plus disponibles, sans savoir pourquoi.

5 - Vision du réseau

RIP est donc un exemple d'algorithme réparti ou algorithme distribué : l'algorithme tourne sur plusieurs machines et on obtient au total un résultat exploitable.

Le routeur RIP ne connaît pas le chemin par lequel va passer le paquet. Il connaît juste la métrique pour joindre le réseau voulu et la prochaine passerelle. Avec RIP, on ne peut pas prédire la route empruntée et encore moins la choisir.

A l'aide de la table de routage, on ne peut imaginer que cela :

Visualisation du réseau avec les infos de la table
Le réseau connu par le routeur A100-1

Conséquence ?

Avec RIP, on ne contrôle pas le trajet : le routeur sait quelle est la passerelle suivante mais ne sait absolument pas quelle route prend REELLEMENT le paquet IP.

Pour des problèmes de sécurité, cela peut être gênant.

07° Puisqu'on n'a pas de connaissance globale du système, quel problème va apparaître si un paquet IP issu d'une machine du sous-réseau A100 veut atteindre le réseau final indiqué en haut à droite ?

Visualisation du réseau avec les infos de la table

Conclusion :

  1. Rôle : aucun routeur n'a de rôle prépondérant dans le système autonome (à part le fait que certains soient en liaison avec l'extérieur comme A300-1 et A700-1 sur l'exemple) : RIP utilise un algorithme totalement réparti
  2. Métrique : La métrique utilisée pour définir les distances est simplement le nombre de sauts
  3. Informations transmises : c'est un protocole à vecteur de distance : chaque routeur transmet à ses voisins directs les couples (réseau_destination;métrique_nécessaire) qu'il connait. Le routeur augmente les métriques reçues de 1 et met à jour sa table si les nouvelles routes sont meilleures ou ont disparu.
  4. Connaissance du réseau : RIP ne permet pas aux routeurs d'avoir une vision globale du réseau : chaque routeur connaît donc uniquement ses voisins directs.
  5. Taille : RIP ne permet pas de gérer des systèmes autonomes comportant des routeurs situés à plus de 15 sauts l'un de l'autre (sinon, le réseau serait encombré par les messages RIP et n'aurait plus le temps de gérer les vrais messages !)
  6. Mise en place : RIP met du temps à se mettre en place car la connaissance des nouvelles routes se fait de proche en proche, un nouveau saut uniquement toutes les 30s. Ici le routeur central va mettre 90s à apprendre l'existence des routeurs Gauche et Droite. Et le routeur Droite va donc devoir attendre encore 90s pour apprendre l'existence du routeur Gauche !

6 - Algorithme de Bellman-Ford

Pour finir, nous verrons l'algorithme qui permet de trouver le plus court chemin à partir de l'ensemble des tables reçues. Vous avez fait le travail en cherchant la route nécessitant le plus petit nombre de sauts. Mais le routeur ne sait pas faire cela !

RIP utilise l'algorithme de Bellman-Ford qui permet de trouver sur un graphe le plus court chemin entre un sommet et les autres, même si certaines arêtes ont un poids négatif.

Nous verrons cet algorithme lors de l'étude des graphes (partie Données).

08° Faire le lien entre la variable graph et la figure représentant le réseau du système autonome.

Visualisation du réseau avec les infos de la table
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
from math import inf # nombre de noeuds dans le graphe n = 7+1 # graph contient les liens (sommet, sommet_adjacent, distance_entre_les_deux) graph = [ (0, 0, 0), # un faux sommet 0 qui ne connaît personne (1, 3, 1), # le sommet 1 connaît le sommet 3 et peut le joindre en 1 coup (1, 4, 1), # le sommet 1 connaît le sommet 4 et peut le joindre en 1 coup (3, 1, 1), (3, 5, 1), (3, 6, 1), (4, 1, 1), (4, 5, 1), (5, 4, 1), (5, 3, 1), (2, 1, 1), (2, 7, 1), (7, 2, 1), (7, 6, 1), (6, 3, 1), (6, 7, 1) ] # nombre d'arêtes m = len(graph) def BellmanFord(src): # On initialise la distance du sommet source au sommet source à 0 et du sommet source aux autres sommets à l'infini dist = [float("inf") for i in range(n)] dist[src] = 0 # Relax all edges | V | - 1 times. A simple shortest path from src to any other vertex can have at-most |V| - 1 edges for i in range(n-1): # Update dist value and parent index of the adjacent vertices of the picked vertex. Consider only those vertices which are still in queue. for u, v, w in graph: if dist[u] != float("inf") and dist[u]+w < dist[v]: dist[v] = dist[u]+w # Etape 3 : on gère les arêtes de poids négatif et les cycles. cycle = 0 for u, v, w in graph: if dist[u] != float("Inf") and dist[u] + w < dist[v]: print("Le graphe contient un cycle de poids négatif") cycle = 1 break if cycle == 0: print('Distance depuis le sommet origine',src) print("Sommet \t Distance depuis l'origine") for i in range(len(dist)): print(i,'\t',dist[i]) BellmanFord(1)

09° Lancer le programme qui suppose une connaissance totale (puisqu'il faut taper les lignes 8 à 23) du système autonome et de la façon dont les routeurs sont reliées entre eux. Vérifier la correspondante entre résultat et schéma.

10° Lancer le programme qui suppose une connaissance partielle du système autonome et vérifier la correspondante entre résultat et schéma : les données ci-dessous ne proviennent que de ce qu'envoie le routeur 1 et les 3 routeurs adjacents.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
from math import inf # nombre de noeuds dans le graphe n = 7+1 # graph contient les liens (sommet, sommet_adjacent, distance_entre_les_deux) graph = [ (0, 0, 0), # un faux sommet isolé pour commencer à 1... (1, 2, 1), (1, 3, 1), (1, 4, 1), (2, 1, 1), (2, 7, 1), (2, 4, 2), (2, 3, 2), (2, 6, 2), (2, 5, 3), (3, 1, 1), (3, 6, 1), (3, 5, 1), (3, 4, 2), (3, 7, 2), (3, 2, 2), (4, 1, 1), (4, 5, 1), (4, 3, 2), (4, 2, 2), (4, 7, 3), (4, 6, 3), ] # nombre d'arêtes m = len(graph) def BellmanFord(src): # On initialise la distance du sommet source au sommet source à 0 et du sommet source aux autres sommets à l'infini dist = [float("inf") for i in range(n)] dist[src] = 0 # Relax all edges | V | - 1 times. A simple shortest path from src to any other vertex can have at-most |V| - 1 edges for i in range(n-1): # Update dist value and parent index of the adjacent vertices of the picked vertex. Consider only those vertices which are still in queue. for u, v, w in graph: if dist[u] != float("inf") and dist[u]+w < dist[v]: dist[v] = dist[u]+w # Etape 3 : on gère les arêtes de poids négatif et les cycles. cycle = 0 for u, v, w in graph: if dist[u] != float("Inf") and dist[u] + w < dist[v]: print("Le graphe contient un cycle de poids négatif") cycle = 1 break if cycle == 0: print('Distance depuis le sommet origine',src) print("Sommet \t Distance depuis l'origine") for i in range(len(dist)): print(i,'\t',dist[i]) BellmanFord(1)

11° Conclusion : RIP parvient-il à fonctionner simplement à partir des routes fournies par les voisins sans que le routeur ai besoin de connaître exactement la topologie du réseau ?

12° Créer un graphe linéaire de 7 routeurs dans le programme. Compter les arêtes. Visualiser le résultat.

13° Créer un graphe linéaire et cyclique de 7 routeurs dans le programme. Compter les arêtes. Visualiser le résultat.

14° Créer un graphe linéaire de 7 routeurs formant un arbre dans le programme. Compter les arêtes. Visualiser le résultat.

15° Créer un graphe de 7 routeurs en étoile, l'un des routeurs étant le routeur central. Compter les arêtes. Visualiser le résultat.

16° La forme du système autonome est-elle importante ?

Bilan sur RIP
  1. Rôle : Tous les routeurs tiennent le même rôle. Ils envoient des messages à leurs voisins directs toutes les 30 s et calculent leur propre table de routage.

  2. Métrique : La métrique utilisée pour définir les distances est le nombre de sauts.
  3. Informations transmises : c'est un protocole à vecteur de distance : chaque routeur transmet à ses voisins directs les couples (qui il connaît, avec quelle métrique).
  4. Connaissance du réseau : RIP ne donne aucune connaissance sur la structure du système aux routeurs.
  5. Taille : adapté à de petits systèmes autonomes.
  6. Mise en place : mise à jour lente (autant pour les nouvelles liaisons que pour les pannes).

7 - FAQ

Et pourquoi on dit Hop limit ?

Hop, c'est pour saut. Le Hop Limit correspond donc au nombre de sauts restants avant destruction. C'est pareil qu'un TTL.

Activité publiée le 26 10 2020
Dernière modification : 04 12 2020
Auteur : ows. h.