TP Graphes : Simulation d’un réseau de routeurs suivant le protocole RIP
Revoir cette page au besoin pour se rafraîchir la mémoire.
On considère le petit réseau ci-contre pour lequel seuls les routeurs figurent ( et pas les machines qui y sont connectées ).
Le but est de simuler la mise à jour des tables de routage de chaque routeur selon le protocole RIP.
Ces tables de routage contiennent normalement les IP associées aux interfaces des routeurs de destination et passerelle, mais pour simplifier, on se contentera d'y faire figurer le nom des routeurs.
Chaque table de routage ne contiendra que les informations : nom routeur de destination, nom du routeur passerelle, nombre de sauts.
Pour cette application, une classe pour modéliser un routeur sera créée, et des fonctions manipuleront des objets instanciés à partir de cette classe pour simuler un réseau de routeurs.
Classe Routeur
Attributs
nom: str: le nom du routeurtable: dict: la table de routage sous forme d'un dictionnaire{destination: [passerelle, sauts]}.
Méthodes
- le constructeur associera un nom à chaque routeur, et créera pour lui une table de routage vide.
get_nom: renvoie le nom du routeurget_table: renvoie la table de routage complète du routeurmaj_table: met à jour la table de routage en fonction de la table de routage reçue depuis un routeur voisin
La méthode maj_table est la plus délicate : bien revoir le principe du protocole RIP pour identifier toutes les situations pour lesquels une mise à jour de la table est nécessaire.
Écrire le code de la classe Routeur
Le réseau de routeurs
Le réseau lui-même sera modélisé par un graphe, dont les sommets seront des objets instanciés à partir de la classe Routeur; les arêtes seront les liens qui existent entre les routeurs.
- instancier les 7 objets
Routeur. - dans un dictionnaire reseau qui modélisera le graphe du réseau de routeurs :
- créer les sommets du graphe, qui correspondent ici aux objets instanciés à partir de la classe
Routeur, - créer les arêtes entre les sommets du graphe, correspondant aux liens ( bidirectionnels ! ) entre les routeurs.
- créer les sommets du graphe, qui correspondent ici aux objets instanciés à partir de la classe
- écrire une fonction
ripqui met à jour les tables de routage des routeurs du réseau en suivant le protocole RIP. - écrire alors un programme qui simule les mises à jour successives des tables de routage des routeurs; combien de "passes" de ce protocole sont-elles nécessaires pour observer une stabilisation des tables de routage ?
Vous pourrez visualiser les tables de routage de chacun des routeurs à chaque "passe" de protocole; attention à l'identifiant à afficher pour chaque routeur, les sommets du graphe sont des objets !
Prolongement possible
Coder un moyen de simuler un serveur en panne, et voir le nouvel ajustement des tables de routage des autres routeurs.
Attention, il y a plusieurs choses à faire pour cela :
- supprimer les liens dans le réseau entre les routeurs et celui en défaut
- pour chaque routeur, mettre à jour les distances de toutes les destinations qui passent par le routeur en défaut à 16
Si tout fonctionne, vous pourrez utiliser ce script pour vérifier vos réponses aux exercices de Bac ! 😀...