Switching fundamentals – Table d’adresses MAC & Content-Addressable Memory (CAM Table)
Il y avait longtemps que je n’avais plus abordé un sujet faisant partie des fondements d’un réseau moderne. Voici donc une révision des principes du fonctionnement de base d’un switch Ethernet et de sa table d’adresses MAC.
Qu’est-ce qu’un switch Ethernet ?
Un switch (ou commutateur) Ethernet est un équipement qui relie plusieurs segments (entendez câble ou liaison physiques) d’un réseau. Il s’agit d’un dispositif de niveau 2 (couche Liaison de données du modèle OSI), ce qui signifie qu’il ne se contente pas de propager un signal à l’instar du HUB (ou concentrateur), mais, au contraire qu’il interprète ce signal et utilise les informations contenues dans l’entête de la trame Ethernet pour prendre ses décisions.
La décision principale qu’un switch doit prendre est « filtrer ou propager » (« Filter or Forward ») une trame. En quelque mots, le switch analyse l’adresse MAC destination contenue dans l’entête de la trame Ethernet et doit choisir par quel(s) port(s) (ou interface) il doit la transmettre. Pour cela il consulte sa table d’adresses MAC à la recherche d’une entrée correspondant à l’adresse MAC destination concernée et où une interface de sortie est renseignée.
Cependant avant de prendre cette décision, le switch doit d’abord connaître l’interface à laquelle est reliée la machine pour l’adresse MAC donnée. Pour ce faire, il analyse l’adresse MAC source des trames qu’il reçoit. Pour chaque trame entrant sur une de ses interface, le switch analyse l’adresse MAC source. Si celle-ci n’est pas encore connue, il l’associe à l’interface par laquelle la trame est entrée. Si elle est déjà connue et associée à la même interface, l’information est rafraîchie. Enfin si l’adresse MAC est déjà connue mais associée à une autre interface, le switch crée une nouvelle entrée et supprime l’ancienne.
Il reste à savoir ce que fait un switch quand il ne connaît pas l’adresse MAC destination. La réponse est simple: lorsque l’adresse MAC destination n’est pas présente dans sa table d’adresses MAC, le switch propagera la trame par toutes les interfaces, sauf celle d’où elle provient, c’est ce qui est généralement appelé « unicast flooding ».
Deux autres cas restent à déterminer: les trames de diffusion (ou de broadcast) et les trames de multi-diffusion (ou multicast). Ces trames ont la particularité d’avoir une adresse MAC destination spéciale, qu’aucune machine ne peut avoir. Ces adresses MAC particulières ( FFFF.FFFF.FFFF pour le broadcast, 0001.5Exx.xxxx pour le multicast IPV4 et 3333.xxxx.xxxx pour le multicast IPv6) seront par défaut toutes traitées de la même manière; le switch propagera la trame par toutes les interfaces sauf celle d’où elle provient.
Remarque: Certains switches sont capables de traiter les trames multicast intelligemment grâce à des fonctionnalités comme le protocole CGMP (Cisco Group Management Protocol) ou encore l’IGMP Snooping, mais cela sort du cadre du fonctionnement fondamental du switch.
En dehors de l’analyse des adresses MAC, le switch a aussi pour tâche, comme n’importe quelle machine capable d’analyser le contenu de la trame Ethernet, de vérifier l’intégrité de celle-ci. Pour ce faire, la trame Ethernet est munie d’un champ spécifique, le FCS (Frame Check Sequence). Il s’agit d’une valeur numérique calculée sur base de l’entête et du contenu de la trame, de telle sorte qu’une trame qui aurait le moindre bit de différent ait un FCS différent.
A l’arrivée de la trame, le switch calcule la valeur du FCS et la compare à celle fournie en fin de trame. Si les deux valeurs correspondent, la trame est considérée comme intègre et peut donc être traitée. Par contre, si le switch calcule une valeur différente du FCS, la trame est considérée comme altérée et est tout simplement détruite, ni plus, ni moins. Il n’y a a ce niveau pas de mécanisme de correction ou récupération d’erreur … c’est entre autre le rôle de la couche Transport.
Remettons cela dans l’ordre…
- Le switch reçoit une trame Ethernet
- Il vérifie la validité de celle-ci grâce au FCS contenu en fin de trame, si elle est valide on passe au n°3, sinon il la détruit.
- Le switch analyse l’adresse MAC source de la trame.
- Si elle n’est pas présente dans sa table d’adresse MAC il rajoute une nouvelle entrée en l’associant à l’interface par laquelle elle est entrée (ainsi qu’au vlan associé) et lui attribue une durée de vie (300 secondes par défaut sur un switch Cisco).
- Si elle est présente et associée à la même interface, le switch rafraîchit la durée de vie.
- Si elle est présente mais associée à une autre interface, le switch crée une nouvelle entrée comme si il s’agissait d’une nouvelle adresse MAC et ensuite supprime l’ancienne entrée.
- Le switch analyse l’adresse MAC destination.
- Si l’adresse MAC existe dans la table d’adresse MAC et associée à une interface dans le même vlan que celle d’entrée, le switch propage la trame uniquement par cette interface.
- Si l’adresse MAC n’est pas présente dans la table d’adresse MAC, le switch propage la trame par toutes les interfaces du même vlan sauf celle d’où elle provient.
- Si l’adresse MAC est soit l’adresse broadcast soit une adresse multicast, le switch propage la trame par toutes les interfaces du même vlan sauf celle d’où elle provient.
Avantages du switch
Un switch disposant d’une table d’adresse MAC complète n’enverra les trames qu’à la machine concernée, ce qui en plus d’éviter d’occuper une partie du réseau pour rien, évite que n’importe quelle machine ne reçoive n’importe quelle trame et améliore donc la sécurité du réseau (par rapport à un HUB par exemple qui se contente de propager un signal propre et fort par tous ses ports sauf celui d’où il vient).
Autre fait important, le switch permet de créer une micro-segmentation du réseau. C’est à dire réduire les domaines de collisions à leur plus strict minimum. Si (et seulement si) à chaque interface d’un switch est connecté un et un seul autre équipement (sauf un HUB qui se comporte comme une multiprise en quelque sorte), alors le domaine de collision de chacune de ses interface ne comporte que deux machines (le switch et celle à laquelle il est connecté). L’émission et la réception ne sont plus partagés. Dés lors il n’y a plus de collision possible. Le switch et l’autre machine peuvent alors dialoguer en Full-Duplex (envoyer et recevoir simultanément). Réduisant à zéro les risques de collision (et donc de retransmission etc) et doublant potentiellement la bande passante ( ex: 100Mbits/s en émission + 100Mbits/s en réception).
Mais ce n’est pas tout…
Pour que le switch puisse accomplir ses tâches sans impact sur les performances du réseau (principalement la latence), celui-ci dispose de circuits électroniques spécialisés et dédiés (ASICs) lui permettant de traiter une multitude d’informations en parallèle. C’est en quelque sorte le même principe que la carte graphique d’un PC. Celle-ci permet de délester l’unité centrale (le CPU) de certaines tâches. Les fonctionnalités d’une carte graphique sont plus limitées mais beaucoup plus spécialisées.
Parmi les éléments spécialisés du switch, il y a la « Content Addressable Memory Table » (CAM Table) qui n’est rien d’autre que l’endroit où il stocke les informations nécessaires au switching des trames. Toute la logique expliquée précédemment reste bien entendu vraie. La CAM table est une zone de mémoire spécialisée dédiée au stockage de ces informations et donc plus performante dans son fonctionnement.
Grossièrement dit… afficher le contenu de la table d’adresse MAC ou de la CAM table, c’est la même chose.
Un peu de pratique ?
Commençons par afficher la table d’adresse MAC d’un switch auquel rien n’est connecté…
3750-1#show mac address-table Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- All 0100.0ccc.cccc STATIC CPU All 0100.0ccc.cccd STATIC CPU All 0180.c200.0000 STATIC CPU All 0180.c200.0001 STATIC CPU All 0180.c200.0002 STATIC CPU All 0180.c200.0003 STATIC CPU All 0180.c200.0004 STATIC CPU All 0180.c200.0005 STATIC CPU All 0180.c200.0006 STATIC CPU All 0180.c200.0007 STATIC CPU All 0180.c200.0008 STATIC CPU All 0180.c200.0009 STATIC CPU All 0180.c200.000a STATIC CPU All 0180.c200.000b STATIC CPU All 0180.c200.000c STATIC CPU All 0180.c200.000d STATIC CPU All 0180.c200.000e STATIC CPU All 0180.c200.000f STATIC CPU All 0180.c200.0010 STATIC CPU All ffff.ffff.ffff STATIC CPU Total Mac Addresses for this criterion: 20 3750-1#
Rien de connecté mais quand même 20 entrées? En effet, mais tout ceci a une explication logique. Il s’agit des adresses MAC utilisées par le switch pour certains protocoles comme CDP (Cisco Discovery Protocol), DTP (Dynamic Trunking Protocol) ou encore STP (Spanning-Tree). Donc pour l’analyse vous pouvez omettre ces informations, vous les retrouverez à chaque fois.
Ce serait déjà mieux si on ne pouvait afficher que les entrées apprises dynamiquement par le switch…
3750-1#show mac address-table dynamic Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 3750-1#
Nous y voilà, à part ce qui est « hard-codé » le switch ne connait encore aucune adresse MAC. Branchons maintenant une machine à une des interface et voyons ce qui se passe…
3750-1# *Mar 1 00:19:45.259: %LINK-3-UPDOWN: Interface FastEthernet1/0/1, changed state to up *Mar 1 00:19:46.266: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet1/0/1, changed state to up 3750-1#show mac address-table dynamic Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 0015.5d01.0e08 DYNAMIC Fa1/0/1 Total Mac Addresses for this criterion: 1 3750-1#
On voit ici que le switch a ajouté l’adresse MAC de la machine connectée à son interface Fa1/0/1 comme prévu. Et donc désormais quand il recevra une trame adressée à 0015.5d01.0e08, il la transmettra uniquement par l’interface Fa1/0/1.
Que se passe-t-il quand la machine est déconnectée du switch ? (On éteint la machine ou on débranche le câble).
3750-1# *Mar 1 00:25:29.520: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet1/0/1, changed state to down *Mar 1 00:25:30.526: %LINK-3-UPDOWN: Interface FastEthernet1/0/1, changed state to down 3750-1#show mac address-table dynamic Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 3750-1#
L’interface du switch est passée de UP/UP à DOWN/DOWN(not connected), de ce fait, il supprime toutes les entrées de la table d’adresses MAC associées à cette interface.
Que se passe-t-il si l’adresse MAC passe d’ine interface à une autre sans que celle-ci ne passe down/down ? Ce serait le cas si par exemple vous avez une machine connectée au réseau en WiFi et que celle-ci passe d’un point d’accès à un autre. Pour simuler cela, je vais simplement intercaler d’autres switches mais ne me concentrer que sur le changement de la table d’adresse MAC de clui qui nous concerne.
Au départ nous avons par exemple ceci:
3750-1#show mac address-table dynamic
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 0015.5d01.0e00 DYNAMIC Fa1/0/2
1 0015.5d01.0e02 DYNAMIC Fa1/0/5
1 0015.5d01.0e03 DYNAMIC Fa1/0/4
1 0015.5d01.0e08 DYNAMIC Fa1/0/3
Total Mac Addresses for this criterion: 4
3750-1#
Si la machine 0015.5d01.0e00 passe sur une autre interface, voici le résultat immédiat…
3750-1#show mac address-table dynamic Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 0015.5d01.0e00 DYNAMIC Fa1/0/1 1 0015.5d01.0e02 DYNAMIC Fa1/0/5 1 0015.5d01.0e03 DYNAMIC Fa1/0/4 1 0015.5d01.0e08 DYNAMIC Fa1/0/3 Total Mac Addresses for this criterion: 4 3750-1#
Comme expliqué plus tôt, le switch a détecté qu’une adresse MAC connue est maintenant associée à une autre interface, il crée donc une nouvelle entrée associée à sa Fa1/0/2 et supprime l’ancienne. On ne peut donc pas avoir la même adresse MAC associée à plusieurs interfaces. C’est toujours l’entrée la plus récente qui reste.
Si ce passage a lieu trop fréquemment, cela peut être un symptôme d’une boucle entre les switches, vous verrez alors apparaître un message d’alerte de « flapping » d’une adresse MAC entre plusieurs interfaces.
Il est également possible de rechercher une adresse MAC dans la table:
3750-1#show mac address-table address 0015.5d01.0e00 Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 0015.5d01.0e00 DYNAMIC Fa1/0/2 Total Mac Addresses for this criterion: 1 3750-1#
Ou encore d’afficher les adresses MAC associées à une interface donnée:
3750-1#show mac address-table interface fastEthernet 1/0/2 Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 0015.5d01.0e00 DYNAMIC Fa1/0/2 1 001b.d59e.3103 DYNAMIC Fa1/0/2 Total Mac Addresses for this criterion: 2 3750-1#
Ou aussi d’afficher les adresses MAC apprises dynamiquement dans un VLAN donné:
3750-1#show mac address-table dynamic vlan 1 Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 0015.5d01.0e00 DYNAMIC Fa1/0/2 1 0015.5d01.0e02 DYNAMIC Fa1/0/5 1 0015.5d01.0e08 DYNAMIC Fa1/0/3 1 001b.d59e.3103 DYNAMIC Fa1/0/2 1 001b.d59e.5583 DYNAMIC Fa1/0/1 Total Mac Addresses for this criterion: 5 3750-1#
Enfin, dans de rares cas, vous pourriez souhaiter ajouter manuellement une adresse MAC dans la table..
Par exemple pour ajouter l’adresse MAC 1234.5678.abcd à l’interface Fa1/0/2 dans le vlan 1:
3750-1(config)#mac address-table static 1234.5678.abcd vlan 1 interface fastEthernet 1/0/2
Ce qui donnera le résultat suivant:
3750-1#show mac address-table static | exclude CPU Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 1234.5678.abcd STATIC Fa1/0/2 Total Mac Addresses for this criterion: 21 3750-1#
Remarque: j’ai ici profité des astuces de la ligne de commande pour filtrer la sortie du show et n’afficher que les lignes qui ne contiennent pas le mot clé « CPU ».
Et si maintenant vous voulez que les trames émises depuis une machine dont vous connaissez l’adresse MAC soient automatiquement détruites dans un VLAN donné (par exemple, les trames provenant de 1234.1234.1234 dans le VLAN1):
3750-1(config)#mac address-table static 1234.1234.1234 vlan 1 drop
Petite vérification d’usage…
3750-1#show mac address-table static | exclude CPU Mac Address Table ------------------------------------------- Vlan Mac Address Type Ports ---- ----------- -------- ----- 1 1234.1234.1234 STATIC Drop 1 1234.5678.abcd STATIC Fa1/0/2 Total Mac Addresses for this criterion: 22 3750-1#
Pour terminer, vous pouvez également afficher « l’aging-time » des entrées dans la table des adresses MAC (le temps au delà duquel l’entrée est supprimée si elle n’a pas été rafraîchie, par défaut 300 secondes).
3750-1#show mac address-table aging-time Global Aging Time: 300 Vlan Aging Time ---- ---------- 3750-1#
Cette valeur peut également être ajustée globalement…
3750-1(config)#mac address-table aging-time 150
… ou encore vlan par vlan …
3750-1(config)#mac address-table aging-time 100 vlan 1
Le résultat:
3750-1#show mac address-table aging-time Global Aging Time: 150 Vlan Aging Time ---- ---------- 1 100 3750-1#
On a donc bien un aging-time global de 150 secondes, et de 100 secondes pour les entrées relatives au vlan 1.
Bonsoir
Je voulais une explication sur flags=0x00056248 et admin-state=1 affiché de la commande shwo controllers ethernet-controllers fa0/1 phy| include auto-mdix
Bonjour,
Merci pour votre article, très riche 🙂
j’aimerai savoir est ce que la table d’adresse mac a un espace precis ? (elle peut contenir combien d’adresse mac) ?
Merci d’avance
La t’able d’adresse MAC est stockée en RAM. Sa taille maximale dépend de la plateforme utilisée mais aussi de sa configuration. C’est le genre d’infos à aller chercher dans le descriptif technique du matériel.
Bonjour,
Je suis étudiante en informatique et je débute l’apprentissage de Cisco par la configuration d’un switch. Pourriez-vous m’en dire plus sur le mot clé 《CAM》,je vous prie,je ne comprend pas ce que cela signifie et son importance
La « CAM » est un type de mémoire particulière utilisé sur les switches Cisco pour stocker les tables d’informations comme la table d’adresse MAC.
Bonjour
Merci pour l’article très intéressant.
J’ai seulement une petite remarque quand vous afficher la capture d’écran avec la commande show mac adresse table interface fa1/0/2 on trouve 2 adresses mac différentes hors que si j’ai bien compris il ne devera garder que la plus récentes ?
Merci infiniment
Article très intéressant, je travaille sur la mise en place de VMware NSX et voulais me replonger dans les fondamentaux. Parfait !
Merci
Axel
Bonjour,
Super article qui m’a beaucoup éclairé.
Je suis en étude Réseau & System (En 4ème année pour être précis).
Je travail sur du cisco depuis 4 ans bientot (alternance) mais j’ai des lacunes sur la partie théorique du réseau.
En effet mes cours sont beaucoup plus orienté pratique.
Auriez-vous un article complet concernant le cycle de vie d’un paquet ?
Une requete ICMP du PC A vers le PC B par exemple :
PC A Switch A Routeur Switch B PC B
Cet article m’a permis de mieux comprendre pour la partie switching, mais il me reste encore la partie routing (table ARP etc..) pour avoir une vue d’ensemble.
Pourriez-vous m’aiguiller s’il vous plait ?
Merci d’avance,
Mathieu
Je vous remercie, je comprends mieux !
J’ai encore beaucoup à apprendre sur le matériel Cisco et les réseaux en général mais cela est vraiment intéressant.
Merci pour vos articles 🙂
Guillaume.
Bonjour,
Article très intéressant ! Je suis étudiant en informatique et je débute l’apprentissage de CISCO par la configuration d’un switch. Pourriez-vous m’en dire plus sur le mot clé « CPU » que l’on trouve dans la console je vous prie, je ne comprends pas ce que cela vient faire ici, cela me fait penser au processeur d’un ordinateur, mais celui-ci est dit « static » ?
Merci 🙂
Guillaume.
Le mot clé CPU indique ici que c’est en gros le switch lui-même qui a créé ces entrées dans la table d’adresses MAC. (A noter qu’il y a bien un CPU au même sens que dans un PC dans ces switches, certes pas la même architecture etc mais il existe bel et bien).
L’entrée est dite « Static » parce qu’elle est figée, elle n’est pas apprise à la volée en fonction du trafic qui passe etc. On peut comparer ça à une valeur qui serait « hardcodée » dans un software.