Première rédaction de cet article le 30 septembre 2012
Pour tester des équipements réseaux ayant IP, tout le monde utilise les classiques ping et traceroute. Mais pour la couche 2, pour du simple Ethernet, peut-on faire l'équivalent, même si la machine n'a pas d'adresse IP ? Depuis quelques années, oui, une norme existe pour cela, 802.1ag. Elle est surtout mise en œuvre dans les équipements de haut de gamme. On peut l'utiliser depuis une simple machine Unix.
Si vous voulez apprendre 802.1ag, un bon document d'explication et de synthèse a été produit par Fujitsu : « Ethernet Service OAM: Overview, Applications, Deployment, and Issues » (OAM voulant dire Operations, Administration, and Management). Normalisé en 2007, 802.1ag est relativement récent dans l'histoire d'Ethernet. Autrefois, il n'existait pas d'outils de couche 2 pour tester Ethernet, il n'y avait que ceux de couche 3 comme ping et ceux de couche 1 comme les réflectomètres.
802.1ag fournit des services de test classiques, CFM LB (Connectivity Fault Management - Loop Back), équivalent des échos d'ICMP qu'utilise ping, CFM LT (Link Trace), équivalent de ce qu'utilise traceroute, etc.
Il existe une mise en œuvre de cette norme sur
Unix, dot1ag. Une bonne
introduction à ces outils a été faite dans un
exposé de leur auteur (attention, l'outil était loin d'être
fini lors de cet exposé). Voici un exemple typique, avec la
commande ethping
, de ces outils :
# ethping -i eth1 00:23:8b:c9:48:f2 Sending CFM LBM to 00:23:8b:c9:48:f2 64 bytes from 00:23:8b:c9:48:f2, sequence 663084168, 0.014 ms 64 bytes from 00:23:8b:c9:48:f2, sequence 663084169, 0.015 ms 64 bytes from 00:23:8b:c9:48:f2, sequence 663084170, 0.016 ms 64 bytes from 00:23:8b:c9:48:f2, sequence 663084171, 0.014 ms 64 bytes from 00:23:8b:c9:48:f2, sequence 663084172, 0.010 ms
Et voilà, on sait que la machine d'adresse MAC
00:23:8b:c9:48:f2
est bien vivante et
joignable. Vous noterez qu'il a fallu indiquer l'interface Ethernet de
sortie puisqu'Ethernet ne fait pas de routage.
tcpdump sait décoder ces paquets 802.1ag et on voit passer :
16:26:28.789571 CFMv0 Loopback Message, MD Level 0, length 50 16:26:28.789997 CFMv0 Loopback Reply, MD Level 0, length 50
(Je vous laisse consulter l'article de Wikipédia pour découvrir ce qu'est un MD.) Notez que Wireshark sait également décoder ce protocole.
Si on augmente la bavartitude de tcpdump avec l'option
-v
, on a :
16:28:38.533399 CFMv0 Loopback Message, MD Level 0, length 50 First TLV offset 4 0x0000: 1716 defa 0100 0100 0000 0000 0000 0000 0x0010: 0000 0000 0000 0000 0000 0000 0000 0000 0x0020: 0000 0000 0000 0000 0000 Sender ID TLV (0x01), length 1 End TLV (0x00), length 0 16:28:38.538023 CFMv0 Loopback Reply, MD Level 0, length 50 First TLV offset 4 0x0000: 1716 defa 0100 0100 0000 0000 0000 0000 0x0010: 0000 0000 0000 0000 0000 0000 0000 0000 0x0020: 0000 0000 0000 0000 0000 Sender ID TLV (0x01), length 1 End TLV (0x00), length 0
Là, pour décoder, il faudrait avoir accès à la norme mais l'IEEE étant un dinosaure très conservateur, cette organisation ne permet pas l'accès libre et gratuit à ses textes, hélas. (Le groupe de travail IEEE a un site Web mais qui contient très peu de choses.) Si vous êtes prêt à remplir un questionnaire (où on vous demande à quel titre vous voulez ce texte...), à indiquer votre adresse de courrier, etc, alors, cette norme fait apparemment partie du petit nombre des normes IEEE qu'on peut obtenir sans frais, en ligne.
Bon, maintenant, on a un client qui marche mais peut-on s'en servir à la maison ou dans une petite entreprise ? Non, les équipements Ethernet bas de gamme (commutateur acheté au supermarché, adaptateur CPL, Freebox) n'ont pas 802.1ag et ne répondent donc pas. Ici, on essaie de tester le commutateur d'une Freebox v6 :
# ethping -i eth1 f4:ca:e5:4d:1f:41 Sending CFM LBM to f4:ca:e5:4d:1f:41 Request timeout for 1340526005 Request timeout for 1340526006 Request timeout for 1340526007 Request timeout for 1340526008
À noter que les outils dot1ag comprennent un démon qu'on peut faire tourner sur ses machines Unix pour les tester. L'intérêt pratique est limité, bien sûr car, si la machine a suffisamment démarré pour lancer ledit démon, elle a probablement aussi acquis une adresse IP.
Et la fonction de trace (l'analogue de traceroute) ? Ici, on voit une machine située à un saut de distance :
# ethtrace -i eth1 00:23:8b:c9:48:f2 Sending CFM LTM probe to 00:23:8b:c9:48:f2 ttl 1: LTM with id 1207397526 reply from 00:23:8b:c9:48:f2, id=1207397526, ttl=0, RlyHit
En fait, ce n'est pas tout à fait exact. Il y avait un commutateur Netgear bon marché entre les deux machines. Mais comme ce dernier ne parle pas 802.1ag, il a simplement relayé les trames, comme s'il était transparent.
Merci à Ronald van der Pol pour sa relecture.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)