Chapitre 08
L'anneau MRP
Objectifs du chapitre
- Comprendre la redondance média MRP (IEC 62439-2) : pourquoi cùbler les switches en boucle, et pourquoi le trafic ne tourne pourtant jamais en rond.
- Repérer et lire les trames de test MRP sur le fil (Ethertype
0x88E3) avectshark. - DĂ©tecter un anneau ouvert â une faute critique mais silencieuse cĂŽtĂ© procĂ©dĂ© â et distinguer un anneau sain d'un anneau qui « flappe ».
- Mesurer le temps de reconvergence réel en corrélant la coupure MRP au trou dans le cyclique Profinet.
1. Pourquoi un anneau
Une ligne cĂąblĂ©e « en Ă©toile » a un talon d'Achille : chaque cĂąble est un point unique de dĂ©faillance. Coupe le lien entre deux switches et tout ce qui est derriĂšre tombe. En automatisme, oĂč un arrĂȘt de production coĂ»te cher, on prĂ©fĂšre cĂąbler les switches en boucle : chaque switch a deux chemins vers le reste du rĂ©seau. Si un cĂąble lĂąche, le trafic emprunte l'autre sens. C'est la redondance mĂ©dia.
Mais une boucle physique de commutateurs, laissĂ©e telle quelle, est une catastrophe : une trame broadcast tourne indĂ©finiment et sature le rĂ©seau en quelques millisecondes â la fameuse tempĂȘte de boucle. Il faut donc un protocole qui garde la boucle physiquement fermĂ©e (pour la redondance) tout en la maintenant logiquement ouverte (pour Ă©viter la tempĂȘte). CĂŽtĂ© Siemens, ce protocole est MRP â Media Redundancy Protocol, normalisĂ© IEC 62439-2.
Dans un anneau MRP, un switch joue le rĂŽle de MRM (Media Redundancy Manager) â
ici SW-A (192.168.0.240) â et tous les autres sont des MRC
(Media Redundancy Clients) â SW-B (.241) et SW-C
(.242). Chaque switch dédie deux ports à l'anneau, ses ring ports. L'astuce
est lĂ : en fonctionnement normal, le MRM bloque logiquement l'un de ses deux ring ports.
L'anneau est bien un cercle de cĂąbles, mais du point de vue du trafic c'est une ligne ouverte Ă un
endroit â chez le manager. Aucune trame ne fait le tour.
Retiens l'image d'un anneau MRP sain : le manager garde toujours un port fermĂ©. Le trafic ne tourne jamais en rond. Un anneau oĂč « tout passe partout » n'est pas un anneau redondant, c'est une boucle non protĂ©gĂ©e â et tu le sentiras vite passer.
2. Les trames de test MRP
Comment le MRM sait-il que sa boucle est intacte ? Il ne fait pas confiance à l'état des liens
vu port par port : il teste le tour complet. Périodiquement, le MRM émet une trame
MRP_Test par chacun de ses deux ring ports â donc dans les deux sens de
l'anneau. Ces trames portent l'Ethertype 0x88E3 et sont envoyées en
multicast ; les MRC les relaient de proche en proche sans les traiter.
- Si le MRM reçoit ses propres MRP_Test en retour sur le port opposĂ© â le tour est complet â anneau FERMĂ (sain, redondance disponible). Il maintient son port secondaire bloquĂ©.
- Si les MRP_Test cessent de revenir (plusieurs manquĂ©s d'affilĂ©e) â le tour est rompu â anneau OUVERT â le MRM dĂ©bloque son port secondaire pour rĂ©tablir le passage, puis prĂ©vient tout le monde.
Ce « prĂ©venir tout le monde » se fait avec des trames MRP_TopologyChange : le MRM ordonne aux MRC de vider leur table d'adresses MAC, sans quoi les switches continueraient Ă envoyer le trafic vers l'ancien chemin, dĂ©sormais mort. On croise aussi des MRP_LinkChange (LinkUp/LinkDown), qu'un MRC Ă©met vers le MRM pour signaler qu'un de ses ring ports vient de changer d'Ă©tat â c'est souvent ce qui dĂ©clenche la reconfiguration avant mĂȘme que les MRP_Test ne manquent.
Les ordres de grandeur Ă avoir en tĂȘte :
| ParamĂštre | Valeur typique | Remarque |
|---|---|---|
| Période des MRP_Test | ~20 ms | par ring port ; configurable |
| Reconfiguration MRP standard | < 200 ms | classe par défaut IEC 62439-2 |
| MRP « rapide » (Siemens) | ~10â30 ms | pĂ©riode de test rĂ©duite, matĂ©riel compatible |
| Ethertype | 0x88E3 | toutes trames MRP |
Le nombre de switches dans l'anneau compte : plus l'anneau est grand, plus une trame MRP_Test met de temps Ă faire le tour, et plus la reconvergence sera lente. La classe MRP (200 ms vs rapide) et le nombre de nĆuds sont deux paramĂštres que l'on confronte Ă la mesure au §6.
3. Observer MRP avec tshark
Tout se joue sur l'Ethertype 0x88E3. On filtre Ă la capture (filtre BPF
ether proto) et on affiche le dissecteur mrp :
# Capturer uniquement les trames MRP sur l'interface machine
sudo tshark -i eth0 -f 'ether proto 0x88E3' -Y mrp
Sur un anneau sain, on obtient un flux régulier de MRP_Test, deux « pistes » qui alternent (une par ring port du MRM), espacées d'environ 20 ms :
# Anneau FERMà : MRP_Test réguliers, rien d'autre
$ sudo tshark -i eth0 -f 'ether proto 0x88E3' -Y mrp
1 0.000000 Siemens_A0:24:0a â MRP-Test MRP 60 MRP_Test, Prio 40960, Ring closed
2 0.019987 Siemens_A0:24:0a â MRP-Test MRP 60 MRP_Test, Prio 40960, Ring closed
3 0.040012 Siemens_A0:24:0a â MRP-Test MRP 60 MRP_Test, Prio 40960, Ring closed
4 0.059998 Siemens_A0:24:0a â MRP-Test MRP 60 MRP_Test, Prio 40960, Ring closed
5 0.080003 Siemens_A0:24:0a â MRP-Test MRP 60 MRP_Test, Prio 40960, Ring closed
Une seule MAC source (celle du MRM, SW-A), un intervalle stable, l'état Ring closed :
c'est exactement ce qu'on veut voir. Maintenant, débranchons un cùble d'anneau et regardons la
coupure :
# Instant de la coupure : rafale de LinkChange puis TopologyChange
$ sudo tshark -i eth0 -f 'ether proto 0x88E3' -Y mrp
42 0.840010 Siemens_A0:24:0a â MRP-Test MRP 60 MRP_Test, Ring closed
43 0.851203 Siemens_B1:07:c2 â MRP-Ctrl MRP 60 MRP_LinkChange, LinkDown
44 0.851560 Siemens_A0:24:0a â MRP-Ctrl MRP 60 MRP_TopologyChange, Interval 20
45 0.853102 Siemens_A0:24:0a â MRP-Ctrl MRP 60 MRP_TopologyChange, Interval 20
46 0.856050 Siemens_A0:24:0a â MRP-Ctrl MRP 60 MRP_TopologyChange, Interval 20
47 0.860018 Siemens_A0:24:0a â MRP-Test MRP 60 MRP_Test, Ring open
48 0.880004 Siemens_A0:24:0a â MRP-Test MRP 60 MRP_Test, Ring open
La séquence est lisible : un MRC (SW-B) signale un LinkDown, le MRM émet
aussitÎt une salve de MRP_TopologyChange (pour purger les tables MAC), débloque son
port, et ses MRP_Test repartent en Ring open. AprÚs la réparation physique du cùble, on verrait
la séquence miroir : LinkUp, nouvelle salve de TopologyChange, retour en Ring closed.
Un flot continu de MRP_TopologyChange â pas une salve isolĂ©e, mais des rafales qui
reviennent toutes les quelques secondes â n'est pas une coupure franche : c'est un anneau qui
« flappe ». Un cùble à moitié enfiché, un connecteur RJ45 oxydé, un SFP fatigué :
le lien monte et tombe sans arrĂȘt, et le MRM reconfigure en boucle. Ă corrĂ©ler avec les
compteurs d'erreurs de port du chapitre 2 (ethtool -S, CRC/carrier).
4. DĂ©tecter l'anneau ouvert â la faute silencieuse
Voici le point le plus important du chapitre. Quand une coupure survient, MRP fait son travail : en moins de 200 ms (souvent bien moins), le passage est rĂ©tabli et le procĂ©dĂ© continue de tourner. Aucun voyant rouge sur la machine, aucun arrĂȘt, aucune alarme process Ă©vidente. Tout va bien⊠en apparence.
Sauf que la redondance a Ă©tĂ© consommĂ©e. L'anneau est dĂ©sormais ouvert : il ne reste qu'un seul chemin. Une seconde faute â un autre cĂąble, un autre switch qui redĂ©marre â et cette fois il n'y a plus de secours : c'est l'arrĂȘt de production. L'anneau ouvert est donc une faute silencieuse mais critique : elle ne fait pas de bruit, mais elle a mis l'installation Ă un pas du gouffre.
« Le procĂ©dĂ© tourne » ne veut pas dire « l'anneau est sain ». Un anneau ouvert produit exactement le mĂȘme comportement machine qu'un anneau fermĂ© â jusqu'Ă la deuxiĂšme panne. Ne te fie jamais Ă l'absence d'alarme process pour juger de l'Ă©tat de la redondance : il faut aller la lire explicitement.
Deux façons de la débusquer :
- Sur le fil â les MRP_Test qui restent en Ring open (au lieu de
Ring closed) sont le signe direct que le manager n'a pas retrouvé son tour complet. Un
tshark -Y mrpde quelques secondes suffit Ă trancher. - Sur le switch â l'Ă©tat de l'anneau est exposĂ© en SNMP par le
manager. La MRP-MIB publie notamment
mrpRingState(valeurs open(1) / closed(2)), le rĂŽle du nĆud (manager / client) et les numĂ©ros des deux ring ports. On peut donc surveiller l'Ă©tat d'anneau sans mĂȘme capturer, et l'intĂ©grer Ă une supervision.
La lecture SNMP de la MRP-MIB (snmpget/snmpwalk sur mrpRingState)
est détaillée au chapitre 10. Retiens ici l'idée : interroger le MRM
(192.168.0.240) pour obtenir open/closed est la façon la plus fiable et la moins
intrusive de surveiller la redondance en continu.
Dans TIA Portal, le rĂŽle (MRP Manager / Client), le domaine MRP et les deux ring ports de chaque switch sont configurĂ©s dans les propriĂ©tĂ©s « Media redundancy » de l'appareil. Le CPU peut aussi remonter une alarme de diagnostic « redondance perdue » quand l'anneau s'ouvre : si elle existe et qu'elle est cĂąblĂ©e vers la supervision, c'est le meilleur signal. Le shell reste utile pour vĂ©rifier la rĂ©alitĂ© quand cette alarme n'a pas Ă©tĂ© configurĂ©e â ce qui est frĂ©quent.
5. Reconstituer la topologie de l'anneau
Pour raisonner sur l'anneau, il faut connaĂźtre son ordre physique : quel switch est voisin de quel switch, et par quels ports. On ne le devine pas depuis le plan d'adressage IP (l'ordre des adresses ne dit rien du cĂąblage). On le lit avec LLDP (chapitre 3), qui expose chaque voisinage physique port par port.
$ lldpctl SW-A | grep -A2 -E 'Interface|SysName'
Interface: port-1, via: LLDP
Chassis: SysName: SW-B
Interface: port-2, via: LLDP
Chassis: SysName: SW-C
En croisant les voisinages des trois switches, on reconstitue la boucle :
# Voisinage LLDP consolidé (qui parle à qui, par quel port)
SW-A port-1 âââ port-2 SW-B â ring port
SW-B port-1 âââ port-2 SW-C â ring port
SW-C port-1 âââ port-2 SW-A â ring port â la boucle se referme
La boucle se referme sur elle-mĂȘme : A â B â C â A. Les deux ports par lesquels chaque
switch participe Ă cette boucle sont ses ring ports ; tous les autres ports mĂšnent Ă des
équipements terminaux (CPU, ET 200SP, poste de diagnostic .71) et ne comptent pas dans
l'anneau. Avec ce schéma en main, une trame LinkDown vue au §3 se localise immédiatement :
« SW-B a perdu son port-2 » dĂ©signe prĂ©cisĂ©ment le cĂąble SW-B â SW-C.
Dessine l'anneau une fois, à froid, quand tout va bien, et garde-le. Le jour d'un incident, tu ne veux pas reconstruire la topologie sous pression : tu veux juste pointer le lien mort sur un schéma déjà connu. La sortie LLDP consolidée fait un excellent document de référence d'armoire.
6. Mesurer la reconvergence
La thĂ©orie annonce « < 200 ms » ou « ~20 ms en rapide ». Mais ce qui compte vraiment, c'est le trou vu par le procĂ©dĂ© : pendant combien de temps le cyclique Profinet (chapitre 7) s'est-il rĂ©ellement interrompu ? On le mesure en capturant en parallĂšle les trames Profinet RT et l'Ă©vĂ©nement MRP, sur le mĂȘme horodatage.
# Capturer cÎté cyclique : trames Profinet RT (0x8892) + MRP (0x88E3)
sudo tshark -i eth0 -f 'ether proto 0x8892 or ether proto 0x88E3' \
-T fields -e frame.time_relative -e eth.type -e _ws.col.Info
On dĂ©branche un cĂąble d'anneau (sur banc !), on laisse tourner quelques secondes, on rebranche, puis on cherche le plus grand Ă©cart entre deux trames RT consĂ©cutives â c'est le trou :
# Extrait autour de la coupure â on isole le cyclique (0x8892)
1.203 0x8892 RT_CLASS_1 ... # dernier échange avant la coupure
1.204 0x88e3 MRP_LinkChange, LinkDown
1.205 0x88e3 MRP_TopologyChange
... trou : plus aucune 0x8892 ...
1.271 0x8892 RT_CLASS_1 ... # reprise du cyclique
Ici, derniÚre trame RT à 1.203 s, reprise à 1.271 s : le procédé a
subi un trou de ~67 ms. On compare cette valeur à deux références : la
classe MRP configurée (67 ms est cohérent avec une classe 200 ms, largement dans
les clous), et le temps de surveillance du device Profinet (le watchdog, typiquement
3 à la période cyclique). Tant que le trou reste sous le watchdog, le device ne déclare pas de défaut
de communication et le procĂ©dĂ© ne bronche pas. S'il le dĂ©passe, on verrait une coupure Profinet franche â
et là , la reconvergence MRP est trop lente pour la période cyclique choisie.
Couper un cĂąble d'anneau, c'est consommer la redondance volontairement : pendant tout l'essai, l'installation n'a plus de secours. Sur un banc de test, aucun souci â c'est mĂȘme l'essai Ă faire pour valider la classe MRP. En production, on ne dĂ©branche pas un ring port pour « voir » : on lit l'Ă©tat par SNMP et on planifie ce test pendant un arrĂȘt.
Pour trouver le trou automatiquement plutĂŽt qu'Ă l'Ćil, filtre le seul cyclique et calcule les deltas
inter-trames avec awk :
$ sudo tshark -i eth0 -f 'ether proto 0x8892' -T fields -e frame.time_relative \
| awk 'NR>1{d=$1-p; if(d>max){max=d}} {p=$1} END{printf "trou max = %.1f ms\n", max*1000}'
trou max = 67.4 ms
Récapitulatif
- MRP (IEC 62439-2) donne la redondance mĂ©dia : la boucle est physiquement fermĂ©e, mais le MRM (ici SW-A) bloque un ring port pour Ă©viter la tempĂȘte â le trafic ne tourne jamais en rond.
- Le MRM émet des MRP_Test (Ethertype
0x88E3, ~20 ms) dans les deux sens : s'ils reviennent â Ring closed ; sinon il dĂ©bloque son port secondaire et passe en Ring open, avec une salve de MRP_TopologyChange. - On observe tout ça avec
sudo tshark -i eth0 -f 'ether proto 0x88E3' -Y mrp. Un flot continu de TopologyChange = anneau qui flappe (défaut L1). - Anneau ouvert = faute silencieuse : le procédé tourne, mais la redondance est
consommĂ©e ; une 2á” faute = arrĂȘt. Le dĂ©tecter par les MRP_Test en Ring open ou par
SNMP (
mrpRingState, ch. 10). - La topologie de l'anneau se reconstruit avec LLDP (ch. 3) â voisinages et ring ports.
- On mesure la reconvergence réelle = le trou dans le cyclique Profinet (ch. 7), à comparer à la classe MRP et au watchdog du device.
Exercices
Exercice 1 â PĂ©riode des MRP_Test et Ă©tat de l'anneau
On te fournit une capture filtrée sur 0x88E3. Voici les premiÚres lignes :
1 0.000000 Siemens_A0:24:0a MRP_Test, Ring closed
2 0.020015 Siemens_A0:24:0a MRP_Test, Ring closed
3 0.039992 Siemens_A0:24:0a MRP_Test, Ring closed
4 0.060008 Siemens_A0:24:0a MRP_Test, Ring closed
Détermine la période des MRP_Test et l'état de l'anneau. Comment distinguerais-tu, dans une telle capture, un anneau stable d'un anneau en cours de reconfiguration ?
Voir la solution
Les horodatages sont espacĂ©s d'environ 20 ms (0.020, 0.040, 0.060âŠ) : c'est la pĂ©riode de test. Toutes les trames portent Ring closed et une seule MAC source (le MRM) : l'anneau est fermĂ© et stable, la redondance est disponible.
Un anneau en cours de reconfiguration se trahirait par : (a) l'apparition de
MRP_TopologyChange et/ou MRP_LinkChange au milieu des MRP_Test, et (b) le
basculement de l'état de test en Ring open. Si l'état reste durablement
Ring open aprÚs la salve, l'anneau est resté ouvert (redondance consommée,
cf. §4) â Ă corrĂ©ler avec l'Ă©tat SNMP du switch.
Exercice 2 â Anneau sain ou anneau qui flappe ?
Deux captures de 30 s, comptées par type de trame MRP :
# Capture X
MRP_Test 1500
MRP_TopologyChange 0
# Capture Y
MRP_Test 1490
MRP_TopologyChange 84
Laquelle correspond à un anneau sain ? Que se passe-t-il dans l'autre, et par quoi le confirmes-tu cÎté couche 1 ?
Voir la solution
Capture X est saine : uniquement des MRP_Test rĂ©guliers, zĂ©ro TopologyChange sur 30 s â l'anneau n'a pas bougĂ©.
Capture Y montre 84 TopologyChange en 30 s, soit des rafales récurrentes : l'anneau flappe. Un lien monte et tombe sans cesse, et le MRM reconfigure en boucle. Cause probable cÎté L1 : cùble mal enfiché ou endommagé, RJ45/connecteur oxydé, SFP défaillant, ou perturbation CEM. On le confirme avec les compteurs de port du chapitre 2 :
$ ethtool -S eth0 | grep -iE 'crc|carrier|error'
rx_crc_errors: 2417
carrier_changes: 168
Des carrier_changes qui grimpent et des erreurs CRC en hausse pointent le port fautif ;
LLDP (§5) permet de nommer le cĂąble exact (ex. SW-B port-2 â SW-C) Ă remplacer.
Exercice 3 â Mesurer le temps de reconvergence
Sur un banc, tu captures en parallĂšle le Profinet cyclique (0x8892) et le MRP
(0x88E3), puis tu débranches un cùble d'anneau. Propose la commande de capture, et explique
comment tu obtiens le temps réel d'interruption vu par le procédé.
Voir la solution
Capturer les deux Ethertypes avec horodatage :
sudo tshark -i eth0 -f 'ether proto 0x8892 or ether proto 0x88E3' \
-T fields -e frame.time_relative -e eth.type -e _ws.col.Info
Le trou = le plus grand écart entre deux trames RT (0x8892) consécutives, encadrant la salve MRP. On l'extrait automatiquement en ne gardant que le cyclique :
$ sudo tshark -i eth0 -f 'ether proto 0x8892' -T fields -e frame.time_relative \
| awk 'NR>1{d=$1-p; if(d>max)max=d} {p=$1} END{printf "trou = %.1f ms\n", max*1000}'
trou = 67.4 ms
On compare ce ~67 ms à : (1) la classe MRP configurée (ici cohérent avec 200 ms, marge confortable) ; (2) le watchdog Profinet du device (souvent 3 à la période cyclique). Tant que le trou < watchdog, le device ne déclare aucun défaut et le procédé ne s'en aperçoit pas. Si le trou dépassait le watchdog, la reconvergence MRP serait trop lente pour cette période cyclique : il faudrait passer en MRP rapide ou allonger le watchdog.