Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Comment un commutateur apprend les adresses MAC

Après cette leçon: Je peux expliquer comment un commutateur apprend sur quel port se trouve une adresse MAC.

Leçon de 60 min8 commandesLab de réseaux définis par logiciel : Open vSwitch, Mininet et un contrôleur OpenFlow dans une VM

Comment un commutateur sait-il où envoyer une trame ?

Un commutateur qui apprend retient, pour chaque adresse MAC, le port par lequel elle est arrivée. Il peut ainsi envoyer chaque trame vers le bon port, au lieu de l’envoyer partout.

Quand une salle de TP branche 30 postes sur un commutateur neuf, personne ne le configure. Au bout de quelques trames, il connaît chaque poste et le réseau devient plus calme.

À la fin de cette leçon

Remarque

Je peux expliquer comment un commutateur apprend sur quel port se trouve une adresse MAC.

Mots-clés

MotCe que ça veut direExemple
Adresse MACle numéro unique d’une carte réseau00:00:00:00:00:01
Trameun paquet de la couche Ethernet, avec adresses source et destination
Table d’apprentissagela liste adresse MAC et port que le commutateur construit
Inondationenvoyer la trame sur tous les ports sauf celui d’entrée
Adresse sourcel’adresse de la machine qui envoie la trame
Adresse destinationl’adresse de la machine à qui la trame est destinée

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Il apprend en lisant l’adresse source

Chaque trame porte l’adresse de celui qui l’envoie. Quand une trame arrive par un port, le commutateur sait que cette machine est derrière ce port.

Il l’écrit dans sa table d’apprentissage : adresse MAC, puis port. Si la même machine arrive plus tard par un autre port, il remplace l’entrée.

Il décide en lisant l’adresse destination

Pour choisir où envoyer la trame, le commutateur cherche l’adresse destination dans sa table. S’il la trouve, il envoie la trame sur ce seul port.

S’il ne la connaît pas encore, il fait une inondation : il l’envoie sur tous les ports sauf celui d’entrée. La réponse de la cible lui apprendra où elle est.

Exemple travaillé : quatre trames, une table qui grandit

TrameIl apprendIl chercheIl fait
A vers B, entrée par le port 1A est au port 1B : inconnueInondation
B vers A, entrée par le port 2B est au port 2A : port 1Envoi au port 1
C vers A, entrée par le port 3C est au port 3A : port 1Envoi au port 1
A vers C, entrée par le port 1A est toujours au port 1C : port 3Envoi au port 3

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un commutateur ordinaire montre sa table

Un commutateur Open vSwitch dont l’action est NORMAL se comporte comme un commutateur ordinaire : il apprend tout seul. On construit un commutateur d’essai, appr, pour regarder sa table sans toucher au reste.

fdb/show affiche la table d’apprentissage. Une trace ne reçoit aucune trame réelle : elle n’apprend donc rien. Pour simuler l’apprentissage, on ajoute une entrée à la main, marquée static.

Créer le commutateur appr

Commande
sudo ovs-vsctl --if-exists del-br appr -- add-br appr -- set bridge appr datapath_type=system protocols=OpenFlow13 fail-mode=secure -- add-port appr a1 -- set interface a1 type=internal ofport_request=1 -- add-port appr a2 -- set interface a2 type=internal ofport_request=2 -- add-port appr a3 -- set interface a3 type=internal ofport_request=3

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le rendre ordinaire

Commande
printf 'priority=1,actions=NORMAL\n' | sudo ovs-ofctl -O OpenFlow13 replace-flows appr -

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire sa table d’apprentissage

Commande
sudo ovs-appctl fdb/show appr

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une trame vers une adresse inconnue

Commande
sudo ovs-appctl ofproto/trace appr in_port=1,dl_src=aa:00:00:00:00:01,dl_dst=aa:00:00:00:00:02 | grep -A 2 "^ 0\."

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Simuler : la machine 02 est au port 2

Commande
sudo ovs-appctl fdb/add appr a2 0 aa:00:00:00:00:02

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Relire la table

Commande
sudo ovs-appctl fdb/show appr

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

La même trame, destination connue

Commande
sudo ovs-appctl ofproto/trace appr in_port=1,dl_src=aa:00:00:00:00:01,dl_dst=aa:00:00:00:00:02 | grep -A 2 "^ 0\."

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Et la trame de retour ?

Commande
sudo ovs-appctl ofproto/trace appr in_port=2,dl_src=aa:00:00:00:00:02,dl_dst=aa:00:00:00:00:01 | grep -A 2 "^ 0\."

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Erreur fréquente

Attention

Beaucoup de gens pensent que le commutateur apprend l’adresse destination. Il ne peut pas : il ne sait pas encore où elle est. Il apprend l’adresse source, car il sait par quel port la trame vient d’arriver. Il cherche ensuite la destination dans ce qu’il a appris.

À propos de ce labo et de sa source: Lab de réseaux définis par logiciel : Open vSwitch, Mininet et un contrôleur OpenFlow dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.