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

Lire une table de flux OpenFlow

Après cette leçon: Je peux lire une règle de flux et dire laquelle s’applique à un paquet.

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

Pourquoi ce paquet passe-t-il, et pas celui-là ?

Une table de flux est la liste de règles qu’un commutateur OpenFlow consulte pour chaque paquet. La lire permet de prédire ce que le commutateur fera d’un paquet sans en envoyer un seul.

Dans un lycée, le trafic web d’une salle ne sort plus, alors que le reste marche. La réponse est toujours dans la table : une règle plus prioritaire jette ces paquets.

À la fin de cette leçon

Remarque

Je peux lire une règle de flux et dire laquelle s’applique à un paquet.

Mots-clés

MotCe que ça veut direExemple
Table de fluxla liste des règles d’un commutateur
Correspondancela partie d’une règle qui dit quels paquets elle visetcp,tp_dst=80
Prioritéun nombre : la plus haute règle qui correspond gagnepriority=30
Actionce que le commutateur fait du paquetoutput:2
Règle par défautla règle de priorité 0 qui correspond à tout paquet
Portune prise numérotée du commutateur

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

Une règle de flux a trois parties

Une règle dit : pour les paquets qui ressemblent à ceci, faire cela, avec cette importance. Ses trois parties sont la correspondance, la priorité et l’action.

Prenons priority=20,tcp,tp_dst=80 actions=output:2. La correspondance est « un paquet TCP vers le port 80 », c’est-à-dire du web. La priorité est 20. L’action envoie le paquet sur le port 2 du commutateur.

La plus haute priorité gagne

Plusieurs règles peuvent correspondre au même paquet. Le commutateur retient celle dont la priorité est la plus haute. L’ordre dans lequel on les a écrites ne compte pas.

La règle par défaut a la priorité 0 et ne demande rien au paquet. Elle attrape donc tout ce que les autres laissent passer. Sans règle du tout, un commutateur OpenFlow 1.3 jette le paquet.

Exemple travaillé : quelle règle choisit-on ?

PaquetRègles qui correspondentRègle retenueRésultat
TCP vers le port 80Priorité 20 et priorité 0Priorité 20Sortie sur le port 2
TCP vers le port 22Priorité 30 et priorité 0Priorité 30Jeté
TCP vers le port 443Priorité 0 seulementPriorité 0Jeté

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

Un commutateur d’essai pour regarder sans risque

Pour ne pas toucher à br0, on construit un second commutateur, demo, avec trois ports numérotés 1, 2 et 3. La commande qui le crée peut être relancée sans erreur. Rien n’y est branché : on y pose des règles et on demande ce qui arriverait.

ofproto/trace simule un paquet et dit quelle règle il rencontre. Sur une table vide, la réponse est No match. puis drop.

Créer le commutateur demo

Commande
sudo ovs-vsctl --may-exist add-br demo -- set bridge demo datapath_type=system protocols=OpenFlow13 fail-mode=secure -- --may-exist add-port demo p1 -- set interface p1 type=internal ofport_request=1 -- --may-exist add-port demo p2 -- set interface p2 type=internal ofport_request=2 -- --may-exist add-port demo p3 -- set interface p3 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.

Un paquet web sur une table vide

Commande
sudo ovs-appctl ofproto/trace demo in_port=1,tcp,tp_dst=80 | 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.

Poser trois règles d’un coup

Commande
printf 'priority=0,actions=drop\npriority=20,tcp,tp_dst=80,actions=output:2\npriority=30,tcp,tp_dst=22,actions=drop\n' | sudo ovs-ofctl -O OpenFlow13 add-flows demo -

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 la table de flux

Commande
sudo ovs-ofctl -O OpenFlow13 --no-stats --rsort=priority dump-flows demo

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.

Où va un paquet web ?

Commande
sudo ovs-appctl ofproto/trace demo in_port=1,tcp,tp_dst=80 | 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.

Où va un paquet SSH ?

Commande
sudo ovs-appctl ofproto/trace demo in_port=1,tcp,tp_dst=22 | 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.

Où va un paquet sur le port 443 ?

Commande
sudo ovs-appctl ofproto/trace demo in_port=1,tcp,tp_dst=443 | 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 lit les règles de haut en bas et s’arrête à la première qui correspond. Ce n’est pas le cas : c’est la priorité qui décide. Une règle peut être écrite en dernier et gagner, si sa priorité est la plus haute.

À 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.