OSPFv3 est la déclinaison du protocole OSPF pour les réseaux IPv6, d’ailleurs, il reprend beaucoup de caractéristiques de son grand frère OSPFv2 conçu uniquement pour les réseaux IPv4, en effet :
- OSPFv3 est aussi un protocole de routage à état de liens (Link State Protocol) et s’appuie sur une base locale LSDB pour le calcul du meilleur chemin de routage (Dijkstra algorithme).
- OSPFv3 implémente aussi les mêmes mécanismes pour échanger les LSA (Link State Advertisements) ainsi que l’établissement et la maintenance des sessions de voisinage (paramètres area, hello-interval, dead-interval, authentification, MTU, Network-type, Stub-Flags).
- OSPFv3 s’appuie aussi dans son fonctionnement sur deux niveaux de hiérarchie : une aire centrale (aire backbone 0) et des aires périphériques : L’aire 0 est autonome dans son fonctionnement et centralise toutes les informations de routage, les aires périphériques doivent être connectés sur l’aire 0 pour recevoir les routes en provenance des autres aires. (à noter que cette hiérarchie par aire permet de fournir nativement un mécanisme anti-boucle du routage).
Cependant, un point différenciateur important existe dans OSPFv3 : contrairement à l’OSPFv2, les informations de topologie « topology » et d’accessibilité « reachability » sont séparées dans différents LSA.
Pour bien visualiser cette différence, commençons d’abords par quelques définitions, ensuite nous allons faire un petit Lab pour mieux comprendre.
- Une information de topologie permet aux routeurs de construire la topologie entière du réseau, elle contient la liste des routeurs, les types d’interfaces (Broadcast, NBMA,P2P et P2MP), les liens qui connectent les routeurs ainsi que leur coût. Avec ces informations, chaque routeur est capable de savoir que par exemple le routeur 1 est connecté avec le routeur 2 à travers une liaison point à point et un métrique (cost) égale à 10, il pourra ensuite exécuter l’algorithme SPF pour calculer les meilleurs chemin (best paths).
- Une information d’accessibilité permet de visualiser l’adressage et les préfixes implémentés dans l’architecture : exemple le routeur 1 connecte l’adressage 10.10.10.0/24 et utilise l’adresse IP 10.10.10.1 dans ce segment.
Cette séparation permet aussi de rapprocher OSPFv3 dans son fonctionnement du protocole IS-IS qui implémente nativement cette séparation avec les champs TLV, ce qui permet d’apporter plus de stabilité et de fiabilité dans l’architecture réseau que je vais détailler dans la suite.
La séparation des informations de topologie et d’accessibilité est réalisée dans le protocole OSPFv3 par l’introduction de nouveaux LSA :
- LSA Type 8 : Link LSA
- LSA Type 9 : Intra-Area Prefix LSA
Le premier avantage immédiat de cette séparation en OSPFv3 est qu’en cas d’évènement réseau (exemple nouvelle interface loopback, désactivation interface cliente, ..) qui n’introduit aucun changement de la topologie du réseau, alors les routeurs qui composent cette topologie n’auront pas à exécuter un SFP complet (Full SPF RUN) pour calculer tous les meilleurs chemins réseaux et ensuite les installer dans la FIB.
Ceci permet de conserver les ressources CPU limitées des équipements et d’apporter surtout plus de stabilité et de fiabilité de l’architecture dans sa globalité.
Imaginons que vous avez un backbone MPLS composé de 500 routeurs et déployé sur toute la France, l’underlay utilisé pour ce backbone est l’OSPFv2 en mono-area 0, dans la configuration par défaut, si on ajoute une interface loopback ou une interface cliente dans l’OSPFv2 sur un des routeurs alors les 499 autres routeurs restants vont tous exécuter l’algorithme SPF RUN pour le calcul du meilleur chemin, ce calcul est inutile et consomme les ressources des routeurs car la topologie du réseau n’a pas changé.
Pour mieux illustrer les différences entre OSPFv2 et OSPFv3, nous allons exécuter un petit Lab en IPv4 et IPv6, prenons le cas de deux routeurs (R1 et R2) connectés en OSPF en point à point :
La configuration OSPFv2 est assez simple et basique:
R1 : interface FastEthernet0/0 ip address 10.10.12.1 255.255.255.0 ip ospf network point-to-point ip ospf 1 area 0 ! router ospf 1 router-id 1.1.1.1 R2 : interface FastEthernet0/0 ip address 10.10.12.2 255.255.255.0 ip ospf network point-to-point ip ospf 1 area 0 ! router ospf 1 router-id 2.2.2.2 !
En OSPFv2, les informations de topologie et d’accessibilité sont mélangés au sein du LSA Type 1 (Router Link State) comme on peut le constater dans le contenu de la database OSPF (LSDB) :
R1#sh ip ospf database router 1.1.1.1 OSPF Router with ID (1.1.1.1) (Process ID 1) Router Link States (Area 0) LS age: 380 Options: (No TOS-capability, DC) LS Type: Router Links Link State ID: 1.1.1.1 Advertising Router: 1.1.1.1 LS Seq Number: 80000002 Checksum: 0x765A Length: 48 Number of Links: 2 Link connected to: another Router (point-to-point) (Link ID) Neighboring Router ID: 2.2.2.2 (Link Data) Router Interface address: 10.10.12.1 Number of MTID metrics: 0 TOS 0 Metrics: 1 Link connected to: a Stub Network (Link ID) Network/subnet number: 10.10.12.0 (Link Data) Network Mask: 255.255.255.0 Number of MTID metrics: 0 TOS 0 Metrics:
Maintenant, si on déclare une nouvelle interface cliente (exemple une loopback) sur un des routeurs, aucun changement topologique (best path) ne sera observé sur l’architecture cependant les routeurs vont quand même exécuter inutilement un calcul complet du chemin le plus court ce qui consommera inutilement les ressources CPU :
R1 : interface Loopback0 ip address 1.1.1.1 255.255.255.255 ip ospf 1 area 0 !
Un debug OSPF sur le routeur R2 permet de constater qu’il execute le SPF Run complet (de 8 ms) suite à l’ajout de l’interface loopback0 ainsi qu’une mise à jour de la table de routage (FIB)
2R : *Dec 30 16:09:04.062: OSPF-1 SPF : Detect change in LSA type 1, LSID 1.1.1.1 from 1.1.1.1 area 0 *Dec 30 16:09:04.062: OSPF-1 MON : Schedule Full SPF in area 0, change in LSID 1.1.1.1, LSA type R *Dec 30 16:09:04.062: OSPF-1 MON : reset throttling to 5000ms next wait-interval 10000ms *Dec 30 16:09:09.066: OSPF-1 INTRA: Running SPF for area 0, SPF-type Full *Dec 30 16:09:09.066: OSPF-1 INTRA: Initializing to run spf *Dec 30 16:09:09.066: OSPF-1 INTRA: spf_intra() - rebuilding the tree *Dec 30 16:09:09.066: OSPF-1 INTRA: It is a router LSA 2.2.2.2. Link Count 2 *Dec 30 16:09:09.066: OSPF-1 INTRA: Processing link 0, id 1.1.1.1, link data 10.10.12.2, type 1 *Dec 30 16:09:09.066: OSPF-1 SPF : Add better path to LSA ID 1.1.1.1, gateway 10.10.12.1, dist 1 *Dec 30 16:09:09.066: OSPF-1 INTRA: Putting LSA on the clist LSID 1.1.1.1, Type 1, Adv Rtr. 1.1.1.1 *Dec 30 16:09:09.066: OSPF-1 SPF : Add path: next-hop 10.10.12.1, interface FastEthernet0/0 *Dec 30 16:09:09.066: OSPF-1 INTRA: Processing link 1, id 10.10.12.0, link data 255.255.255.0, type 3 *Dec 30 16:09:09.066: OSPF-1 SPF : Add better path to LSA ID 10.10.12.255, gateway 10.10.12.0, dist 1 *Dec 30 16:09:09.066: OSPF-1 SPF : Add path: next-hop 10.10.12.2, interface FastEthernet0/0 *Dec 30 16:09:09.066: OSPF-1 INTRA: Downheap LSA ID 1.1.1.1, Type 1, Adv 1.1.1.1 on clist from index 1 to 1 *Dec 30 16:09:09.066: OSPF-1 INTRA: It is a router LSA 1.1.1.1. Link Count 3 *Dec 30 16:09:09.066: OSPF-1 INTRA: Processing link 0, id 1.1.1.1, link data 255.255.255.255, type 3 *Dec 30 16:09:09.066: OSPF-1 SPF : Add better path to LSA ID 1.1.1.1, gateway 1.1.1.1, dist 2 *Dec 30 16:09:09.066: OSPF-1 SPF : Add path: next-hop 10.10.12.1, interface FastEthernet0/0 *Dec 30 16:09:09.066: OSPF-1 INTRA: Processing link 1, id 2.2.2.2, link data 10.10.12.1, type 1 *Dec 30 16:09:09.066: OSPF-1 INTRA: Ignore newdist 2 olddist 0 *Dec 30 16:09:09.066: OSPF-1 INTRA: Processing link 2, id 10.10.12.0, link data 255.255.255.0, type 3 *Dec 30 16:09:09.066: OSPF-1 SPF : Add better path to LSA ID 10.10.12.255, gateway 10.10.12.0, dist 2 *Dec 30 16:09:09.066: OSPF-1 SPF : Add path: next-hop 10.10.12.1, interface FastEthernet0/0 *Dec 30 16:09:09.066: OSPF-1 INTRA: Adding Stub nets *Dec 30 16:09:09.066: OSPF-1 INTRA: Route update succeeded for 1.1.1.1/255.255.255.255, metric 2, Next Hop: FastEthernet0/0/10.10.12.1 area 0 *Dec 30 16:09:09.070: OSPF-1 INTRA: Route update succeeded for 10.10.12.0/255.255.255.0, metric 1, Next Hop: FastEthernet0/0/10.10.12.2 area 0 R2#show ip ospf statistics detail OSPF Router with ID (2.2.2.2) (Process ID 1) Area 0: SPF algorithm executed 2 times <snip> SPF 2 executed 00:04:43 ago, SPF type Full SPF calculation time (in msec): SPT Intra D-Intr Summ D-Summ Ext7 D-Ext7 Total 0 4 0 0 4 0 0 8 LSIDs processed R:2 N:0 Stub:3 SN:0 SA:0 X7:0 Change record 0x0 LSIDs changed 1 Changed LSAs. Recorded is LS ID and LS type: 1.1.1.1(R)
Cette nouvelle interface (Loopback0) est ainsi insérée dans la LSDB en LSA-1 « Router Link States » :
R1#show ip ospf database router 1.1.1.1 OSPF Router with ID (1.1.1.1) (Process ID 1) Router Link States (Area 0) LS age: 1676 Options: (No TOS-capability, DC) LS Type: Router Links Link State ID: 1.1.1.1 Advertising Router: 1.1.1.1 LS Seq Number: 80000003 Checksum: 0xAB0F Length: 60 Number of Links: 3 Link connected to: a Stub Network (Link ID) Network/subnet number: 1.1.1.1 (Link Data) Network Mask: 255.255.255.255 Number of MTID metrics: 0 TOS 0 Metrics: 1 Link connected to: another Router (point-to-point) (Link ID) Neighboring Router ID: 2.2.2.2 (Link Data) Router Interface address: 10.10.12.1 Number of MTID metrics: 0 TOS 0 Metrics: 1 Link connected to: a Stub Network (Link ID) Network/subnet number: 10.10.12.0 (Link Data) Network Mask: 255.255.255.0 Number of MTID metrics: 0 TOS 0 Metrics: 1
Par conséquent, pour des topologies OSPF plus complexes constituées de plusieurs centaines de routeurs et avec un nombre important de préfixes à gérer (exemple opérateur ou grande entreprise), l’exécution complète du SFP sera très intensive en ressources CPU et pourra impacter dans certains cas le fonctionnement de certains routeurs entrée de gamme disposant de ressources materielles limitées.
Pour des raisons historiques, ce fonctionnement par défaut du protocole OSPFv2 n’est pas optimale et s’avére très consommateur en ressources CPU, OSPFv3 permet de corriger ce point de faiblesse par la séparation des informations de topologie de d’accessibilité avec l’introduction des LSA Type 8 et 9 .
Nous allons maintenant refaire le même Lab mais avec un adressage en IPv6 only :
Comme en OSPFv2, la configuration OSPFv3 est assez basique et simple :
R1 : ipv6 unicast-routing ! interface FastEthernet0/0 no ip address ipv6 enable ipv6 ospf 1 area 0 ipv6 ospf network point-to-point ! router ospfv3 1 router-id 1.1.1.1 R2 : ipv6 unicast-routing ! interface FastEthernet0/0 no ip address ipv6 enable ipv6 ospf 1 area 0 ipv6 ospf network point-to-point ! router ospfv3 1 router-id 2.2.2.2 !
L’adressage IPv6 Link Local par défaut qui permet de configurer automatiquement les interfaces (à partir de leur adresse MAC) permet de simplifier la configuration du protocole OSPFv3, en effet, il n’est plus nécessaire de définir statiquement une adresse IP pour établir la session OSPF, ce qui est très pratique pour les architectures réseaux disposant de plusieurs liens d’interconnexions en point à point (exemple Leaf & Spines en DC) :
R1#show ipv6 interface fastEtherne0/0 FastEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE80::C801:5CFF:FE16:8
Comme on peut le constater, la session OSPF est établie entre les deux sans avoir à définir statiquement aucune adresse IP sur les interfaces :
R2#show ipv6 ospf neighbor OSPFv3 Router with ID (2.2.2.2) (Process ID 1) Neighbor ID Pri State Dead Time Interface ID Interface 1.1.1.1 0 FULL/ - 00:00:33 2 FastEthernet0/0C
Dans cette configuration, le contenu de la LSDB indique déja une séparation entre les informations de topologie (LSA-1) et d’accéssibilité LSA-8 « Link (Type-8) Link States » :
R1#show ipv6 ospf database OSPFv3 Router with ID (1.1.1.1) (Process ID 1) Router Link States (Area 0) ADV Router Age Seq# Fragment ID Link count Bits 1.1.1.1 430 0x80000002 0 1 None 2.2.2.2 431 0x80000001 0 1 None Link (Type-8) Link States (Area 0) ADV Router Age Seq# Link ID Interface 1.1.1.1 445 0x80000001 2 Fa0/0 2.2.2.2 431 0x80000001 2 Fa0/0
Les informations de topologie (routeurs voisins, point-to-point, metric, ..) sont toujours renseignés dans les LSA Type 1 (Routeur Link States) :
R1#show ipv6 ospf database router adv-router 1.1.1.1 OSPFv3 Router with ID (1.1.1.1) (Process ID 1) Router Link States (Area 0) LS age: 586 Options: (V6-Bit, E-Bit, R-bit, DC-Bit) LS Type: Router Links Link State ID: 0 Advertising Router: 1.1.1.1 LS Seq Number: 80000002 Checksum: 0xE40A Length: 40 Number of Links: 1 Link connected to: another Router (point-to-point) Link Metric: 1 Local Interface ID: 2 Neighbor Interface ID: 2 Neighbor Router ID: 2.2.2.2
Cependant, les informations d’accessibilité (adressage, préfixes) sont maintenant dissociées et renseignés dans un nouveau LSA Type 8 réservé pour l’adressage en Link Local (FE80 ::/10) qui sera utilisé uniquement par les routeurs d’un même segment (Link) :
R1#show ipv6 ospf database link adv-router 1.1.1.1 OSPFv3 Router with ID (1.1.1.1) (Process ID 1) Link (Type-8) Link States (Area 0) LS age: 758 Options: (V6-Bit, E-Bit, R-bit, DC-Bit) LS Type: Link-LSA (Interface: FastEthernet0/0) Link State ID: 2 (Interface ID) Advertising Router: 1.1.1.1 LS Seq Number: 80000001 Checksum: 0xB19B Length: 44 Router Priority: 1 Link Local Address: FE80::C801:5CFF:FE16:8 Number of Prefixes: 0
Si on déclare une nouvelle interface loopback sur un des routeurs et qui n’implique donc aucun changement topologique de l’architecture :
R1 : interface Loopback0 ipv6 address 2001:1:1:1::1/128 ipv6 ospf 1 area 0
Un debug OSPF sur le routeur R2 permet de confirmer qu’il exécute en 4 ms un SPF Partiel moins consommateur en ressources CPU.
R2# *Dec 30 17:05:10.826: OSPFv3-1-IPv6 INTRA: Running SPF for area 0, cause P *Dec 30 17:05:10.826: OSPFv3-1-IPv6 INTRA: Intra-Area SPF (Prefix), Area 0 *Dec 30 17:05:10.826: OSPFv3-1-IPv6 INTRA: Process Prefix LSAs *Dec 30 17:05:10.826: OSPFv3-1-IPv6 INTRA: Router 1.1.1.1/0, 1 prefix, ref 1.1.1.1/0 type 2001 *Dec 30 17:05:10.826: OSPFv3-1-IPv6 INTRA: install 2001:1:1:1::1/128 metric 1 *Dec 30 17:05:10.826: OSPFv3-1-IPv6 INTRA: adding path FastEthernet0/0/FE80::C801:5CFF:FE16:8 *Dec 30 17:05:10.826: OSPFv3-1-IPv6 INTRA: Adding deferred prefixes, area 0 *Dec 30 17:05:10.826: OSPFv3-1-IPv6 INTRA: prefix 2001:1:1:1::1/128 *Dec 30 17:05:10.826: OSPFv3-1-IPv6 SPF : Add Intra route to 2001:1:1:1::1/128 via FastEthernet0/0 FE80::C801:5CFF:FE16:8 succeeded
R2#show ipv6 ospf statistic detail OSPFv3 Router with ID (2.2.2.2) (Process ID 1) Area 0: SPF algorithm executed 1 times SPF 4 executed 00:00:32 ago, SPF type Incremental SPF calculation time (in msec): SPT Prefix D-Int Sum D-Sum Ext D-Ext Total 0 4 0 0 0 0 0 4 RIB manipulation time (in msec): RIB Update RIB Delete 0 0 LSIDs processed R:0 N:0 Prefix:1 SN:0 SA:0 X7:0 Change record P LSAs changed 1 Changed LSAs. Recorded is Advertising Router, LSID and LS type: 1.1.1.1/0(P)
Par ailleurs, cette nouvelle interface (Loopback0) est insérée dans la LSDB en LSA-9 « Intra Area Prefix Link States » :
R2#show ipv6 ospf database prefix adv-router 1.1.1.1 OSPFv3 Router with ID (2.2.2.2) (Process ID 1) Intra Area Prefix Link States (Area 0) Routing Bit Set on this LSA LS age: 228 LS Type: Intra-Area-Prefix-LSA Link State ID: 0 Advertising Router: 1.1.1.1 LS Seq Number: 80000001 Checksum: 0xCA84 Length: 52 Referenced LSA Type: 2001 Referenced Link State ID: 0 Referenced Advertising Router: 1.1.1.1 Number of Prefixes: 1 Prefix Address: 2001:1:1:1::1 Prefix Length: 128, Options: LA, Metric: 0
Ainsi, en OSPFv3, comme on peut le constater, le calcul complet de tous les meilleurs chemins (SPF Run Best Path) n’est pas exécuté si la topologie réseau ne change pas, ce fonctionnement permet d’apporter plus de fiabilité et de stabilité aux architectures réseaux.
Conclusion :
Bien que le protocole OSPFv3 partage beaucoup de choses avec le protocole OSPFv2, OSPFv3 se rapproche dans son fonctionnement du protocole IS-IS par la séparation dans la LSDB des informations de topologie et d’accessibilité, ce point permet d’améliorer le fonctionnement du protocole OSPF et de soulager la CPU des routeurs qui n’ont plus besoin d’exécuter un calcul complet de tous les chemins pour un changement mineur n’impliquant pas de changement de la topologie du réseau (exemple ajout ou suppression d’une interface loopback).
Certains constructeurs comme Cisco proposent iSPF (incremental SPF) qui permet d’exécuter un Full SPF uniquement en cas de changement topologique, cependant, aucun standard ne décrit cette fonctionnalité et elle n’est pas présente sur toutes les plateformes et chez tous les constructeurs.
Autre point important est qu’aujourd’hui la technologie a beaucoup évolué et les ressources matérielles (CPU/Mémoire) sur les équipements réseaux leur permettent de traiter facilement plusieurs opérations à la seconde, donc certains pourront argumenter qu’exécuter plusieurs fois un SFP Run n’est plus vraiment un problème pour une grande majorité d’équipements de nouvelle génération (ce qui est vrai), cependant, en tant qu’architecture réseau, il faut toujours penser à simplifier, optimiser et fiabiliser au maximum les opérations au sein des architectures réseaux.
Enfin, OSPFv3 prend aussi en charge l’adressage IPv4 par l’implémentation du concept des Adresses Family (AF), il est ainsi possible de couvrir les deux besoins (IPv4/IPv6) par un seul protocole OSPFv3 et donc consommer moins de ressources sur les équipements.
Comme d’habitude, Il ne faut pas oublier qu’en terme de design dans le réseau, il est souvent question de compromis (trade-offs), on peut améliorer un point au risque de pénaliser un autre (ex exploitation), dans certains cas, le déploiement d’OSPFv3 peut être compliqué pour plusieurs raisons (compatibilité materielle, mise à jour logicielle, maturité, outillage adequât, formation, coût, ..) ce qui pousse au final à rester en OSPFv2 en attendant une opportunité de remplacement (network refresh), c’est pour cette raison que le choix de la meilleure option va surtout dépendre du contexte ainsi que des contraintes associées (budget, exploitation, outillage, ..)
J’espère qu’avec cet article, vous savez mieux maintenant comment différencier entre les protocoles OSPFv2 et OSPFv3 et aussi lequel sélectionner dans vos choix de conception.
Si vous avez des questions, n’hésitez pas à me laisser un message en commentaire de la page ou nous contacter à l’adresse : contact@mhd-experts.com.