Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

OpenFlow-Flows und Flow-Tabellen lesen

Nach dieser Lektion: Ich kann einen Flow lesen und sagen, wann er greift und was er tut.

Lektion, 50 Min.12 BefehleLab für Software-defined Networking: Open vSwitch, Mininet und ein OpenFlow-Controller in einer VM

Was ein Flow sagt

Ein Flow ist eine Regel in der Flow-Tabelle eines OpenFlow-Switches. Er legt fest, welche Pakete gemeint sind und was mit ihnen geschieht.

Wer Flows lesen kann, versteht, warum ein Paket ankommt oder verschwindet. Das ist das wichtigste Werkzeug, wenn in einem SDN-Netz etwas nicht funktioniert.

Am Ende dieser Lektion

Notiz

Ich kann einen Flow lesen und sagen, wann er greift und was er tut.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Flow-Tabelledie Liste aller Flows eines Switches
Matchdie Bedingung, die ein Paket erfüllen mussin_port=3
Prioritäteine Zahl, die bestimmt, welcher passende Flow zähltpriority=30
Aktiondas, was der Switch mit einem passenden Paket tutoutput:4
Table-Miss-Flowein Flow mit Priorität 0 ohne Match, der alles auffängt, was sonst nichts trifft
Eingangsportder Port, an dem ein Paket im Switch ankommtin_port

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Flow besteht aus Match, Priorität und Aktion

Das Match nennt Eigenschaften eines Pakets, etwa den Eingangsport in_port=3 oder die Zieladresse nw_dst=10.0.1.4. Eine Eigenschaft, die nicht genannt wird, ist egal.

Die Priorität ist eine Zahl. Die Aktion sagt, was geschieht: output:4 schickt das Paket an Port 4, drop verwirft es.

Der Seminarraum, an dem wir üben

PortGerätIP-Adresse
1Dozentenrechner10.0.1.1
2Drucker10.0.1.2
3Gast-Laptop10.0.1.3
4Router ins Hochschulnetz10.0.1.4

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Flow, Teil für Teil gelesen

TeilSo steht es daBedeutung
Prioritätpriority=30Er zählt vor allen Flows mit kleinerer Zahl
ProtokollipNur IPv4-Pakete
Eingangsportin_port=3Nur Pakete, die an Port 3 hereinkommen
Zielnw_dst=10.0.1.4Nur Pakete an diese IP-Adresse
Aktionactions=output:4Das Paket an Port 4 hinausschicken

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Der Flow mit der höchsten Priorität gewinnt

Passen mehrere Flows auf ein Paket, gilt nur der mit der höchsten Priorität. Die anderen werden ignoriert.

Ein Flow ganz ohne Match passt auf jedes Paket. Hat er Priorität 0, heißt er Table-Miss-Flow: Er fängt alles auf, was sonst nichts trifft. Gibt es ihn nicht, verwirft ein Switch im Modus secure das Paket.

Beispiel: Welcher Flow trifft welches Paket?

PaketPassende Flows (Priorität)GewinnerErgebnis
Von Port 1 an 10.0.1.210 und 010output:2
Von Port 3 an 10.0.1.430, 20 und 030output:4
Von Port 3 an 10.0.1.220 und 020drop
Von Port 2 an 10.0.1.1nur 00drop

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Im Lab legen Sie den Seminarraum an

Sie legen den Switch sw1 mit vier Ports an. Die Ports sind interne Ports von Open vSwitch, die Pakete tragen können, ohne dass Hosts nötig sind.

Dann schreiben Sie vier Flows in die Tabelle. Zum Prüfen spielt ofproto/trace ein erfundenes Paket durch die Tabelle, ohne ein echtes zu senden.

Den Switch sw1 anlegen

Befehl
sudo ovs-vsctl --may-exist add-br sw1 -- set bridge sw1 datapath_type=system protocols=OpenFlow13 fail-mode=secure

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Port 1 anlegen

Befehl
sudo ovs-vsctl --may-exist add-port sw1 p1 -- set interface p1 type=internal ofport_request=1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Port 2 anlegen

Befehl
sudo ovs-vsctl --may-exist add-port sw1 p2 -- set interface p2 type=internal ofport_request=2

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Port 3 anlegen

Befehl
sudo ovs-vsctl --may-exist add-port sw1 p3 -- set interface p3 type=internal ofport_request=3

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Port 4 anlegen

Befehl
sudo ovs-vsctl --may-exist add-port sw1 p4 -- set interface p4 type=internal ofport_request=4

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Alle alten Flows von sw1 löschen

Befehl
sudo ovs-ofctl -O OpenFlow13 del-flows sw1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Vier Flows auf einmal schreiben

Befehl
printf 'priority=0,actions=drop\npriority=10,in_port=1,ip,nw_dst=10.0.1.2,actions=output:2\npriority=20,in_port=3,actions=drop\npriority=30,in_port=3,ip,nw_dst=10.0.1.4,actions=output:4\n' | sudo ovs-ofctl -O OpenFlow13 add-flows sw1 -

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Flow-Tabelle lesen

Befehl
sudo ovs-ofctl -O OpenFlow13 --no-stats dump-flows sw1 | sort

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Dozentenrechner an Drucker

Befehl
sudo ovs-appctl ofproto/trace sw1 in_port=1,ip,nw_src=10.0.1.1,nw_dst=10.0.1.2 | grep -A1 "^ 0\."

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Gast-Laptop an den Router

Befehl
sudo ovs-appctl ofproto/trace sw1 ip,in_port=3,nw_dst=10.0.1.4 | grep -A1 "^ 0\."

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Gast-Laptop an den Drucker

Befehl
sudo ovs-appctl ofproto/trace sw1 ip,in_port=3,nw_dst=10.0.1.2 | grep -A1 "^ 0\."

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Drucker an den Dozentenrechner

Befehl
sudo ovs-appctl ofproto/trace sw1 ip,in_port=2,nw_dst=10.0.1.1 | grep -A1 "^ 0\."

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, der Flow, der in der Liste oben steht, gewinne. Die Liste von dump-flows ist aber nicht nach Priorität geordnet. Es zählt nur die Zahl bei priority. Deshalb sortiert der Befehl oben die Zeilen mit sort selbst.

Über dieses Lab und seinen Quellcode: Lab für Software-defined Networking: Open vSwitch, Mininet und ein OpenFlow-Controller in einer VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.