OSPF par la pratiqueDans l’article précédent (à lire ou relire ici), nous avions vu que l’activation d’OSPF conduisait à la découverte automatique des routeurs voisins et de la topologie du réseau. Je vous propose dans le présent article de s’attarder un peu sur cette partie du protocole OPSF, le « protocole Hello ».

Pour illustrer de façon pratique cet article, nous allons utiliser une topologie GNS3 constituée de 3 routeurs raccordés sur le même réseau local. La configuration initiale consiste seulement à l’affectation d’une adresse IP sur l’interface Fa0/0 (celle qui est raccordée sur le switch SW1): 10.0.0.1/24 pour R1; 10.0.0.2/24 pour R2 et 10.0.0.3/24 pour R3.

3 routeurs OSPF sur le même réseau

 

 

Protocole Hello

Dans l’environnement OSPF, deux routeurs sont potentiellement voisins s’ils ont au moins une interface sur un réseau commun. Cette condition est nécessaire mais non suffisante: le voisinage n’est effectif que si les deux routeurs échangent des informations OSPF entre eux. Ces informations OSPF sont paquets OSPF Hello utilisés pour, dans un premier temps découvrir les voisins OSPF, puis dans un second temps pour vérifier l’état des voisins OSPF.

 

Le paquet OSPF Hello

Comme tous les paquets OSPF, il s’agit de paquets IP identifiés par le numéro de protocole de couche supérieure 89. Ce numéro est réservé pour l’échanges de paquets OSPF.

Ainsi, l’activation du processus OSPF sur une interface conduit à émettre, de façon périodique (tous les HelloInterval), des paquets Hello en utilisant des adresses multicast (224.0.0.5 ou 224.0.0.6) ou des adresses unicast suivant la configuration (notamment si la technologie support ne permet pas la diffusion).

Ces paquets Hello contiennent bon nombres d’attributs comme la valeur des temporisation, l’authentification, les options, la liste des routeurs sur le réseau qui émettent également des paquets Hello, etc.

 

Dans la capture ci-dessous, j’ai activé les commandes debug qui permettent de voir le fonctionnement interne du routeur; puis j’ai activé OSPF sur le routeur R1 (cf. commandes surlignées en vert). A partir de ce moment, on constate bien l’émission périodique des messages hello toutes les 10 secondes. 

Emission périodique de messages Hello après activation d'OSPF sur l'interface

Emission périodique de messages Hello après activation d’OSPF sur l’interface

 

Les différentes étapes dans la découverte des voisins

Différentes étapes sont clairement identifiés dans le standard OSPF:

  • État DOWN – Dans cet état, l’interface n’a pas reçu de paquets Hello OSPF ;
  • État INIT – J’ai reçu des paquets OSPF Hello sur cette interface en provenance d’un routeur, mais dans les attributs des paquets Hello, mon identifiant (router-id) n’est pas dans la liste des routeurs voisins: le routeur n’a donc pas encore reçu mes paquets Hello ;
  • État TWO-WAY – Je reçois des paquets OSPF et j’apparais bien dans la liste des voisins de ce routeur. Il a donc bien reçu (et traité) mes paquets OSPF Hello. Il y a donc bien communication bi-directionnelle entre les deux routeurs.

A la fin de cette étape, les routeurs sont donc voisins OSPF et certains routeurs vont aller plus loin pour établir une relation d’adjacence OSPF.  

 

Voisinage vs. Adjacence OSPF

Deux routeurs sont dits voisins OSPF (OSPF neighbors en anglais, utile lors des certifications 😉 ) si les paquets Hello sont échangés dans les deux sens entre les deux routeurs.  

Deux routeurs sont dits adjacents OSPF (OSPF adjacency en anglais) si les deux voisins échangent leurs bases de données topologiques et sont donc synchronisés de ce point de vue. La relation d’adjacence entre deux voisins dépend de la cohérence de certains attributs que l’on retrouve dans les paquets Hello échangés.

Attention:Si deux routeurs sont adjacents, alors ils sont forcément voisins. Par contre, deux routeurs voisins ne sont pas forcément adjacents.

 

Établissement de l’adjacence OSPF entre routeurs

Cette partie du protocole est celle qui peut poser le plus de problèmes et qui va nécessiter une phase de diagnostic pour répondre à la question: « pourquoi ces deux routeurs voisins n’arrivent pas à établir une relation d’adjacence ?« 

En effet, l’adjacence ne peut se faire que si certains attributs entre deux voisins sont uniques (identifiant de noeud OSPF) alors que d’autres doivent être identiques (comme par exemple, les temporisations du protocole Hello) .

Notons tout d’abord que tous les routeurs voisins n’ont pas besoin d’établir cette relation particulière. 

 

Un paramètre unique: le Router-Id

Le protocole OSPF s’appuie sur l’algorithme SPF chargé de déterminer le plus court chemin entre les noeuds du réseau. Il est donc important d’identifier de façon distincte chaque noeud du réseau. Cet identifiant, en environnement OSPF, s’appelle le router-id.

Cet attribut est une valeur codée sur 32 bits. Ainsi, elle est rentrée sous la même notation qu’une adresse IP mais rien n’impose qu’il s’agisse d’une adresse IP valide ou rouable dans le réseau. L’identifiant du routeur dans le graphe OSPF peut être configuré en ligne de commande. Il est recommandé de configurer manuellement cet identifiant pour s’assurer qu’il soit bien unique et éviter les erreurs dans l’application du protocole SPF.

S’il n’est pas configuré, le routeur Cisco va automatiquement prendre une valeur à partir d’une adresse IP affectée à une de ses interfaces:

  • s’il y a une ou plusieurs adresses de loopback (interface logicielle de l’IOS), alors le routeur choisira l’adresse la plus élevée parmi les adresses disponibles sur les interfaces de loopback actives;
  • sinon, l’adresse la plus élevée attribuée à une interface physique active sera choisie comme router-id pour le routeur.

 

Les paramètres identiques

Lorsque deux routeurs doivent établir une adjacence, il faut au préalable s’assurer que les paramètres suivants soient bien identiques:

  • l’identifiant de l’aire OSPF associée à l’interface,
  • les temporisations du protocole Hello (hello interval et dead interval),
  • l’adresse du réseau IP,
  • la taille de la MTU (taille maximale de PDU supportée),
  • le type de réseau,
  • l’authentification, 
  • etc.

 

Étapes dans l’établissement de l’adjacence 

Seulement deux routeurs voisins peuvent devenir adjacents: ils doivent donc être dans l’état « two-wal« . Ensuite, les routeurs vont devoir échanger et synchroniser leurs bases de données topologiques en traversant plusieurs étapes:

  • État EXSTART – Ici, les deux routeurs vont négocier leur rôle dans l’échange, les numéros de séquence des messages à venir, etc.
  • État EXCHANGE – dans cette phase, la description des bases de données sont échangées (uniquement les entêtes, pas le contenu détaillé).
  • État LOADING – après avoir reçu la description du contenu de la base topologique, le routeur peut éventuellement (s’il ne l’a pas déjà) demander le contenu détaillé d’une partie de la base. Note: Cette synchronisation en deux temps est une optimisation du protocole.
  • État FULL – dans cette étape, les deux routeurs ont des bases de données topologiques identiques (synchronisées). 

Adjacence OSPF entre deux routeurs voisins

Normalement, un routeur ne devrait être que dans l’état FULL (ou éventuellement TWO-WAY). Tous les autres états ne sont que transitoires (sinon, c’est un signe d’un dysfonctionnement ou d’une erreur de configuration).

 

Vérifications (commandes show)

Il est possible de vérifier la présence des routeurs voisins et l’état de l’adjacence avec deux commandes:

  • show ip ospf neighbor
1 voisin à l'état FULL/DR

le routeur R1 est un voisin adjacent (état FULL/DR)

Les bases de données sont synchronisées entre R2 et R1. Nous discuterons dans un prochain article de la fonction DR (Designated Router) que l’on retrouve sur les réseaux de broadcast pour optimiser le fonctionnement d’OSPF…

  • show ip ospf interface

show ip ospf interface

Cette dernière commande est une de mes préférées pour le diagnostic en cas de dysfonctionnement sur le voisinage ou l’adjacence car elle permet de vérifier la valeur du Router-ID (qui doit être unique), le type de réseau, les temporisations, l’aire, etc.  D’ailleurs, nous avons observé dans une capture précédente que les messages hello étaient envoyés toutes les 10 secondes: retrouvez-vous cette valeur dans la capture ?

 

En attendant le prochain article sur le blog IP Logos, laissez-nous un commentaire ou vos questions dans la fenêtre ci-dessous prévue à cet effet!