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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Flow-Tabelle | die Liste aller Flows eines Switches | |
| Match | die Bedingung, die ein Paket erfüllen muss | in_port=3 |
| Priorität | eine Zahl, die bestimmt, welcher passende Flow zählt | priority=30 |
| Aktion | das, was der Switch mit einem passenden Paket tut | output:4 |
| Table-Miss-Flow | ein Flow mit Priorität 0 ohne Match, der alles auffängt, was sonst nichts trifft | |
| Eingangsport | der Port, an dem ein Paket im Switch ankommt | in_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
| Port | Gerät | IP-Adresse |
|---|---|---|
| 1 | Dozentenrechner | 10.0.1.1 |
| 2 | Drucker | 10.0.1.2 |
| 3 | Gast-Laptop | 10.0.1.3 |
| 4 | Router ins Hochschulnetz | 10.0.1.4 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Flow, Teil für Teil gelesen
| Teil | So steht es da | Bedeutung |
|---|---|---|
| Priorität | priority=30 | Er zählt vor allen Flows mit kleinerer Zahl |
| Protokoll | ip | Nur IPv4-Pakete |
| Eingangsport | in_port=3 | Nur Pakete, die an Port 3 hereinkommen |
| Ziel | nw_dst=10.0.1.4 | Nur Pakete an diese IP-Adresse |
| Aktion | actions=output:4 | Das 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?
| Paket | Passende Flows (Priorität) | Gewinner | Ergebnis |
|---|---|---|---|
| Von Port 1 an 10.0.1.2 | 10 und 0 | 10 | output:2 |
| Von Port 3 an 10.0.1.4 | 30, 20 und 0 | 30 | output:4 |
| Von Port 3 an 10.0.1.2 | 20 und 0 | 20 | drop |
| Von Port 2 an 10.0.1.1 | nur 0 | 0 | drop |
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
sudo ovs-vsctl --may-exist add-br sw1 -- set bridge sw1 datapath_type=system protocols=OpenFlow13 fail-mode=secureHier 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
sudo ovs-vsctl --may-exist add-port sw1 p1 -- set interface p1 type=internal ofport_request=1Hier 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
sudo ovs-vsctl --may-exist add-port sw1 p2 -- set interface p2 type=internal ofport_request=2Hier 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
sudo ovs-vsctl --may-exist add-port sw1 p3 -- set interface p3 type=internal ofport_request=3Hier 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
sudo ovs-vsctl --may-exist add-port sw1 p4 -- set interface p4 type=internal ofport_request=4Hier 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
sudo ovs-ofctl -O OpenFlow13 del-flows sw1Hier 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
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
sudo ovs-ofctl -O OpenFlow13 --no-stats dump-flows sw1 | sortHier 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
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
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
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
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.