Ce document décrit l'interaction des paquets OSPF (Open Shortest Path First), MTU (Maximum Transition Unit), LSA (Link State Advertisements) et LS (Link State Update) dans le contexte de l'ID de bogue Cisco CSCse01519.
Les liaisons sur les routeurs ont un MTU. Les paquets sortants, tels que les paquets OSPF, ne peuvent pas être plus grands que le MTU de l'interface.
Request for Comments (RFC) 2328 documente la version 2 du protocole OSPF. L'annexe A.1 de la RFC 2328 décrit l'encapsulation des paquets OSPF de cette manière :
Le protocole OSPF s'exécute directement sur la couche réseau du protocole Internet. Les paquets OSPF sont donc encapsulés uniquement par des en-têtes IP et de liaison de données locale.
Le protocole OSPF ne définit pas de manière à fragmenter ses paquets de protocole et dépend de la fragmentation IP lors de la transmission de paquets plus importants que le MTU du réseau. Si nécessaire, la longueur des paquets OSPF peut atteindre 65 535 octets (y compris l'en-tête IP). Les types de paquets OSPF qui sont susceptibles d'être volumineux (paquets de description de base de données, requête d'état de liaison, mise à jour d'état de liaison et paquets d'accusé de réception d'état de liaison) peuvent généralement être divisés en plusieurs paquets de protocole distincts, sans perte de fonctionnalité. Il est recommandé de le faire ; La fragmentation IP doit être évitée autant que possible.
Il peut y avoir une ou plusieurs LSA dans un paquet de mise à jour LS. De nombreuses LSA d'un paquet de mise à jour LS sont connues sous le nom de lot de LSA dans un paquet de mise à jour LS.
Le paquet DBD (Database Description), également spécifié dans la RFC 2328, décrit le contenu de la base de données d'état des liaisons OSPF :
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version # | 2 | Packet length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Area ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | AuType |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Interface MTU | Options |0|0|0|0|0|I|M|MS
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DD sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+- -+
| |
+- An LSA Header -+
| |
+- -+
| |
+- -+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
Appendice A.3.3 de RFC 2328 décrit le MTU de l'interface comme suit :
Taille en octets du datagramme IP le plus grand qui peut être envoyé à l'interface associée, sans fragmentation.
Les routeurs connectés à une liaison échangent leur valeur MTU d'interface dans des paquets DBD lorsque la contiguïté OSPF est initialisée.
La section 10.6 de la RFC 2328 stipule :
Si le champ MTU de l'interface dans le paquet Description de la base de données indique une taille de datagramme IP supérieure à ce que le routeur peut accepter sur l'interface de réception sans fragmentation, le paquet Description de la base de données est rejeté.
Lorsque la commande debug ip ospf adj est utilisée, vous pouvez voir l'arrivée de ces paquets DBD.
Dans cet exemple, les valeurs MTU ne correspondent pas entre deux voisins OSPF. Ce routeur a MTU 1600 :
OSPF: Rcv DBD from 10.100.1.2 on GigabitEthernet0/1 seq 0x2124 opt 0x52 flag 0x2
len 1452 mtu 2000 state EXSTART
OSPF: Nbr 10.100.1.2 has larger interface MTU
L’autre routeur OSPF possède l’interface MTU 2000 :
OSPF: Rcv DBD from 10.100.100.1 on GigabitEthernet0/1 seq 0x89E opt 0x52 flag 0x7
len 32 mtu 1600 state EXCHANGE
OSPF: Nbr 10.100.100.1 has smaller interface MTU
Les paquets DBD sont retransmis en continu jusqu'à ce que la contiguïté OSPF soit finalement désactivée.
OSPF: Send DBD to 10.100.1.2 on GigabitEthernet0/1 seq 0x9E6 opt 0x52 flag 0x7
len 32
OSPF: Retransmitting DBD to 10.100.1.2 on GigabitEthernet0/1 [10]
OSPF: Send DBD to 10.100.1.2 on GigabitEthernet0/1 seq 0x9E6 opt 0x52 flag 0x7
len 32
OSPF: Retransmitting DBD to 10.100.1.2 on GigabitEthernet0/1 [11]
%OSPF-5-ADJCHG: Process 1, Nbr 10.100.1.2 on GigabitEthernet0/1 from EXSTART to
DOWN, Neighbor Down: Too many retransmissions
Avant l'ID de bogue Cisco CSCse01519, OSPF dans le logiciel Cisco IOS® a construit des paquets OSPF ne dépassant pas 1 500 octets, quelle que soit la MTU de l'interface. Ainsi, si la MTU de l'interface était supérieure à 1 500 octets, OSPF ne contenait que jusqu'à 1 500 octets dans un paquet OSPF. Cela était quelque peu inefficace car le protocole OSPF pouvait envoyer des paquets plus importants sur la liaison et obtenir un débit plus important.
De même, si la MTU de l'interface sortante était inférieure à 1 500 octets, le processus OSPF a toujours généré ou empaqueté des paquets OSPF jusqu'à 1 500 octets, et la pile IP du routeur a fragmenté le paquet en paquets IP plus petits afin de tenir compte de la MTU de la liaison sortante. Cela se produit généralement avec un tunnel IPSec entre deux routeurs qui exécutaient OSPF. La surcharge ajoutée des octets d'encapsulation du tunnel a conduit à un MTU inférieur à 1 500 octets. OSPF a généré des paquets OSPF pouvant atteindre 1 500 octets et les paquets ont été fragmentés avant que le routeur ne les transmette. C'était une inefficacité supplémentaire.
Après l'ID de bogue Cisco CSCse01519, OSPF dans IOS peut emballer des paquets OSPF de plus de 1 500 octets. Cela se produit si la MTU de l'interface sortante est supérieure à 1 500 octets. Les transmissions sont plus efficaces car plus d'informations peuvent être regroupées dans un paquet plus grand. En d’autres termes, si un routeur OSPF doit transmettre de nombreuses LSA externes à un voisin OSPF, il peut regrouper davantage de LSA externes dans un paquet de mise à jour LS si ce routeur exécute IOS avec l’ID de bogue Cisco CSCse01519 implémenté.
L'ID de bogue Cisco CSCse01519 permet également au protocole OSPF de générer des paquets de moins de 1 500 octets. Dans certains scénarios, la MTU entre deux voisins OSPF est inférieure à 1 500 octets. Dans l'exemple précédent avec un tunnel IPSec, OSPF transmet des paquets OSPF de moins de 1 500 octets et évite la fragmentation IP ; encore une fois, l'exception est le cas d'une LSA qui est plus grande que la MTU de l'interface.
Lorsque vous mettez à niveau un routeur OSPF, vous pouvez découvrir un problème de MTU OSPF causé par l'ID de bogue Cisco CSCse01519.
De nombreux réseaux ont des voisins OSPF qui sont connectés via un réseau commuté de couche 2 (L2), ou réseau de transport, composé d'un service VPN de couche 2 ou d'un réseau SDH/SONET (Synchronous Digital Hierarchy/Synchronous Optical Network). Ces réseaux de transport peuvent avoir des paramètres MTU différents des routeurs qui exécutent OSPF.
Bien que le paramètre MTU doive être correct sur tous les routeurs et refléter le vrai MTU, il y a souvent des erreurs qui passent inaperçues.
Voici un exemple de réseau avec deux routeurs qui exécutent le protocole OSPF. Les routeurs 1 (R1) et 2 (R2) sont connectés via un commutateur L2.
Dans cet exemple, les routeurs ont des interfaces GigabitEthernet avec un MTU défini sur 2000. Le MTU du commutateur L2 est de seulement 1 500 octets.
Si la taille du trafic de données n'est jamais supérieure à 1 500 octets, vous pouvez utiliser IOS sans l'ID de bogue Cisco CSCse01519 parce que les paquets OSPF ne sont jamais supérieurs à 1 500 octets. Cependant, s’il existe une LSA de 1 800 octets, par exemple, le processus OSPF sur R1 ou R2 crée un paquet LS Update de plus de 1 500 octets et le transmet, mais le paquet est abandonné par le commutateur L2 entre les routeurs.
Si la base de données OSPF sur R2 dispose de suffisamment de réseaux, les LSA d’origine locale sont si grandes qu’un paquet de mise à jour LS peut être plus grand que le MTU de l’interface.
Supposons que les deux routeurs exécutent une version IOS sans l'ID de bogue Cisco CSCse01519.
Lorsque la contiguïté OSFP se crée, notez que R1 ne reçoit jamais un paquet OSPF de plus de 1 500 octets, bien que la MTU des interfaces soit 2 000.
Activez la commande debug ip ospf packets.
OSPF: rcv. v:2 t:1 l:48 rid:10.100.1.2
aid:0.0.0.0 chk:72CF aut:0 auk: from GigabitEthernet0/1
...
OSPF: rcv. v:2 t:4 l:1468 rid:10.100.1.2
aid:0.0.0.0 chk:8389 aut:0 auk: from GigabitEthernet0/1
OSPF: rcv. v:2 t:4 l:136 rid:10.100.1.2
...
Dans cette sortie de débogage, 'l:1468' est la longueur du paquet OSPF, vous pouvez donc voir que le plus grand paquet OSPF était de 1468 octets. 't:4' indique que le paquet OSPF est de type 4, qui est un paquet de mise à jour d'état de liens. Ce tableau de la section 4.3 de la RFC 2328 définit les différents types de paquets OSPF :
Type | Nom du paquet | Fonction de protocole |
1 | hello | Détecter/gérer les voisins |
2 | Description de la base de données | Résumer le contenu de la base de données |
3 | Demande d'état de liaison | Téléchargement de base de données |
4 | Mise à jour de l'état des liaisons | Mise à jour de base de données |
5 | Accusé de réception d'état de liaison | Accusé de réception d'inondation |
La contiguïté OSPF atteint l'état FULL.
R1#show ip ospf neighbor gigabitEthernet 0/1
Neighbor ID Pri State Dead Time Address Interface
10.100.1.2 0 FULL/ - 00:00:34 10.1.1.2 GigabitEthernet0/1
R2#show ip ospf neighbor gigabitEthernet 0/1
Neighbor ID Pri State Dead Time Address Interface
10.100.100.1 0 FULL/ - 00:00:34 10.1.1.1 GigabitEthernet0/1
Ensuite, mettez à niveau IOS sur R2 vers une version IOS avec l'ID de bogue Cisco CSCse01519.
R2#show ip ospf neighbor gigabitEthernet 0/1
Neighbor ID Pri State Dead Time Address Interface
10.100.100.1 0 LOADING/ - 00:00:33 10.1.1.1 GigabitEthernet0/1
R2#show ip ospf neighbor gigabitEthernet 0/1 detail
Neighbor 10.100.100.1, interface address 10.1.1.1
In the area 0 via interface GigabitEthernet0/1
Neighbor priority is 0, State is LOADING, 5 state changes
DR is 0.0.0.0 BDR is 0.0.0.0
Options is 0x12 in Hello (E-bit L-bit )
Options is 0x52 in DBD (E-bit L-bit O-bit)
LLS Options is 0x1 (LR)
Dead timer due in 00:00:39
Neighbor is up for 00:00:49
Index 1/1, retransmission queue length 0, number of retransmission 0
First 0x0(0)/0x0(0) Next 0x0(0)/0x0(0)
Last retransmission scan length is 0, maximum is 0
Last retransmission scan time is 0 msec, maximum is 0 msec
Number of retransmissions for last link state request packet 9
Poll due in 00:00:00
R2#show ip ospf neighbor gigabitEthernet 0/1 detail
Neighbor 10.100.100.1, interface address 10.1.1.1
In the area 0 via interface GigabitEthernet0/1
Neighbor priority is 0, State is LOADING, 5 state changes
DR is 0.0.0.0 BDR is 0.0.0.0
Options is 0x12 in Hello (E-bit L-bit )
Options is 0x52 in DBD (E-bit L-bit O-bit)
LLS Options is 0x1 (LR)
Dead timer due in 00:00:33
Neighbor is up for 00:02:06
Index 1/1, retransmission queue length 0, number of retransmission 0
First 0x0(0)/0x0(0) Next 0x0(0)/0x0(0)
Last retransmission scan length is 0, maximum is 0
Last retransmission scan time is 0 msec, maximum is 0 msec
Number of retransmissions for last link state request packet 25
Poll due in 00:00:03
%OSPF-5-ADJCHG: Process 1, Nbr 10.100.100.1 on GigabitEthernet0/1 from LOADING
to DOWN, Neighbor Down: Too many retransmissions
La contiguïté OSPF est bloquée dans l'état 'LOADING' et n'atteint pas l'état 'FULL'. Les retransmissions se produisent jusqu’à ce que le protocole OSPF atteigne sa limite de 25 retransmissions. Le protocole OSPF tente de rétablir la contiguïté, le même problème se reproduit et la boucle se poursuit sans fin.
Ainsi, la mise à niveau sur R2 détecte un problème précédemment masqué : la MTU sous-jacente est plus petite que celle utilisée par les routeurs OSPF.
Lorsque le commutateur change la MTU en 2000, un paquet OSPF de plus de 1 500 octets ('l:1980') est transmis sans problème.
R1#
OSPF: rcv. v:2 t:3 l:1980 rid:10.100.1.2
aid:0.0.0.0 chk:AC5B aut:0 auk: from GigabitEthernet0/1
Afin de vérifier les problèmes de MTU sous-jacents, envoyez toujours une requête ping à l'adresse IP du voisin OSPF avec une taille égale au MTU et au bit DF (ne pas fragmenter) défini.
Afin de découvrir la valeur du MTU sous-jacent, exécutez une requête ping et balayez la taille. Comptez le nombre de points d'exclamation (!) dans le résultat afin de déterminer la MTU correcte. Dans cet exemple, la dernière réponse d'écho de la commande ping a une taille de 1 500 octets.
R2#ping
Protocol [ip]:
Target IP address: 10.1.1.1
Repeat count [5]: 1
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: yes
Source address or interface:
Type of service [0]:
Set DF bit in IP header? [no]: yes
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp, Verbose[none]:
Sweep range of sizes [n]: yes
Sweep min size [36]: 1460
Sweep max size [18024]: 1540
Sweep interval [1]:
Type escape sequence to abort.
Sending 81, [1460..1540]-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
Packet sent with the DF bit set
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.............................
...........
Success rate is 49 percent (40/81), round-trip min/avg/max = 1/1/4 ms