Le switch ou commutateur est un équipement réseau largement déployé dans les réseaux locaux des entreprises et chez les citoyens.
Dansq le modèle OSI, le switch n’a besoin que des couches 1 et 2 pour fonctionner. En fait, lorsque le switch reçoit des données d’un PC, il va analyser le contenu de l’entête de la couche 2, qui dans un réseau local est l’entête du protocole Ethernet.
Si on prend l’exemple ci dessous ou quatre PC sont branchés physiquement sur les switchs SW1 et SW2:
| Switch 1 | Switch 2 | |||
|---|---|---|---|---|
| Interface | MAC | Interface | MAC | |
| E0 | E0 | |||
| E1 | E1 | |||
| E2 | E2 | |||
Dans chaque switch se trouve une base de données appelée “table MAC” pour Medium-Access-Control ou “table CAM” pour Content-Addressable-Memory.
Cette table fait le lien entre les ports physiques du switch (E0, E1, E2) et les adresses MAC sources qui arrivent sur ces ports. Forcément, lorsqu’on démarre un switch, ce dernier ne peut pas savoir quel PC est connecté sur tel ou tel port, la table est donc logiquement vide.
| Switch 1 | Switch 2 | |||
|---|---|---|---|---|
| Interface | MAC | Interface | MAC | |
| E0 | AAAA.AAAA.AAAA | E0 | ||
| E1 | E1 | |||
| E2 | E2 | AAAA.AAAA.AAAA | ||
| Switch 1 | Switch 2 | |||
|---|---|---|---|---|
| Interface | MAC | Interface | MAC | |
| E0 | AAAA.AAAA.AAAA | E0 | ||
| E1 | E1 | DDDD.DDDD.DDDD | ||
| E2 | DDDD.DDDD.DDDD | E2 | AAAA.AAAA.AAAA | |
Le fonctionnement est le même que précédemment. On note que lorsque la trame arrive sur les switchs, ils insèrent l’adresse MAC source DDDD.DDDD.DDDD dans leur table.
Puis ils extraient l’adresse MAC destination (AAAA.AAAA.AAAA) et la compare à leur table et là ils savent où se situe cette adresse MAC; port E2 pour le switch SW2 et port E0 pour le switch SW1. Ils n’ont plus qu’à commuter la trame UNIQUEMENT sur le port en question.
| Switch 1 | Switch 2 | |||
|---|---|---|---|---|
| Interface | MAC | Interface | MAC | |
| E0 | AAAA.AAAA.AAAA | E0 | ||
| E1 | BBBB.BBBB.BBBB | E1 | DDDD.DDDD.DDDD | |
| E2 | DDDD.DDDD.DDDD | E2 | AAAA.AAAA.AAAA BBBB.BBBB.BBBB |
|
En générant petit à petit du trafic entre les différents PC, les tables MAC des switchs sont se remplir. L’objectif est de ne plus diffuser les trames vers tous les ports mais uniquement vers un seul port, celui où se situe le PC de destination.
| Switch 1 | Switch 2 | |||
|---|---|---|---|---|
| Interface | MAC | Interface | MAC | |
| E0 | AAAA.AAAA.AAAA | E0 | ||
| E1 | BBBB.BBBB.BBBB | E1 | DDDD.DDDD.DDDD | |
| E2 | DDDD.DDDD.DDDD | E2 | AAAA.AAAA.AAAA BBBB.BBBB.BBBB |
|
Les switchs remplissent très rapidement leur table MAC.
| Switch 1 | Switch 2 | |||
|---|---|---|---|---|
| Interface | MAC | Interface | MAC | |
| E0 | AAAA.AAAA.AAAA | E0 | CCCC.CCCC.CCCC | |
| E1 | BBBB.BBBB.BBBB | E1 | DDDD.DDDD.DDDD | |
| E2 | DDDD.DDDD.DDDD CCCC.CCCC.CCCC | E2 | AAAA.AAAA.AAAA BBBB.BBBB.BBBB |
|
On dit que le switch a convergé quand sa table MAC contient toutes les adresses MAC se trouvant dans le réseau (des PC, des imprimantes, des bornes Widi, des serveurs,…).
Dans le schéma ci dessus, on voit bien que les adresses des 4 PC sont bien dans chacune des tables de SW1 et SW2.
Au final, lorsqu’une trame arrive sur SW1 ou SW2, ils sauront exactement où commuter cette trame.
* la table MAC est effacée à chaque reboot du switch
* la table MAC a une taille finie. Par exemple, sur un Cisco 2950, c’est 8000 entrées.
* ce fonctionnement d’apprentissage des adresses MAC est vulnérable à certaines attaques comme par exemple la saturation de table MAC
Pour visualiser le contenu de la table sur un switch Cisco, il faut faire
show mac-address-table