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

Grundlagen von Software-defined Networking

Die ganze Lektion steht hier zum Lesen. Erstellen Sie ein kostenloses Konto, um sie in einem Live-Lab auszuführen.

Ubuntu-VM-Lab10 Min. Lesezeit7 Befehle

Eine Regel, hundert Switches

Eine Schule beschließt, dass das Gast-WLAN nie die Rechner der Verwaltung erreichen darf. In einem gewöhnlichen Netz meldet sich jemand an jedem Switch an und ändert ihn von Hand. In einem Software-defined Network folgen die Switches nur einer Tabelle, und ein einziges Programm schreibt diese Tabelle für alle.

Am Ende dieser Lektion

Notiz

Ich kann sagen, was ein Flow tut und was ein Controller dazu beiträgt.

Schlüsselwörter

  • Flow: eine Regel in einem Switch, bestehend aus Match und Aktion.
  • Flow-Tabelle: die Liste der Flows, die der Switch für jedes Paket durchgeht.
  • Match: der Teil eines Flows, der sagt, für welche Pakete er gilt.
  • Aktion: was der Switch mit einem passenden Paket tut.
  • Controller: ein Programm, das die Flows eines Switches schreibt.
  • OpenFlow: die Sprache, die ein Switch und sein Controller sprechen.

Zum Start: Was du schon weißt

Notiz

Antworte im Kopf. 1. Was sagt dir ping? 2. Was ist eine MAC-Adresse? 3. Was tut ein gewöhnlicher Switch mit einem Frame, den er noch nie gesehen hat? Die dritte Antwort brauchst du gleich.

Bevor du anfängst

Notiz

Klicke oben in der Leiste dieser Lektion auf Lab starten. Dieses Lab ist eine ganze Ubuntu-Maschine nur für dich, mit einem kleinen Netz darin, und braucht deshalb etwas länger zum Starten als ein Container. Jede Schaltfläche Ausführen tippt ihren Befehl ins Terminal der Maschine, einen nach dem anderen in derselben Sitzung. Wenn eine meldet, dass die Maschine noch startet, warte ein paar Sekunden und klicke noch einmal. Um zuzusehen oder eigene Befehle zu tippen, klicke in der Leiste auf Terminal öffnen.

Ein Switch ist eine Tabelle, die man lesen kann

Hier ist der Switch br0, gebaut von Open vSwitch. Daran hängen drei Rechner: h1, h2 und h3, jeder in einem eigenen Netzwerk-Namespace mit eigener Adresse. sdnlab status listet den Switch, seine drei nummerierten Ports, die Rechner und die Flows auf. Der letzte Teil ist leer. Beachte, dass der Switch im fail-mode secure steht. Das heißt: nichts tun, was die Flows nicht erlauben.

Befehl
sudo sdnlab status

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

Eine leere Tabelle verwirft alles

Ein gewöhnlicher Switch lernt von selbst. Ein OpenFlow-Switch tut nur, was seine Flow-Tabelle sagt. ovs-ofctl dump-flows gibt diese Tabelle aus, und sie hat keinen Flow: Nur die Kopfzeile kommt zurück. Wenn also h1 h2 anpingt, findet das erste Paket keinen passenden Flow und wird verworfen. Der Ping zeigt 100% packet loss.

Befehl
sudo ovs-ofctl -O OpenFlow13 dump-flows br0

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

Befehl
sudo ip netns exec h1 ping -c 1 -W 1 10.0.0.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.

Prüfe dich

Tipp

Warum ist der Ping gescheitert, obwohl nichts kaputt ist? Antwort: Die Flow-Tabelle ist leer, kein Flow hat auf das Paket gepasst, und der Switch hat es verworfen.

Ein häufiger Fehler

Warnung

Viele glauben, jeder Switch lerne von selbst, wo die Rechner stehen. Ein gewöhnlicher Ethernet-Switch tut das. Ein OpenFlow-Switch tut nur, was seine Flows sagen, und ohne Flows leitet er nichts weiter. Egal, ob du oder ein Controller lernen soll: Jemand muss die Flows schreiben.

Mininet baut ein ganzes Netz

Mininet baut ein Testnetz auf einer Maschine: Hosts, einen Switch und einen Controller, die für dich gestartet und gestoppt werden. --test pingall pingt zwischen allen Paaren von Hosts und gibt aus, wie viele Pings verloren gingen. Hier lautet die Antwort 0% dropped (2/2 received). Sein Controller hat die Flows geschrieben, die der Switch brauchte. Wenn Mininet endet, räumt es alle Open-vSwitch-Switches weg, auch br0. Der nächste Schritt baut das Lab deshalb neu auf.

Befehl
sudo mn --mac --test pingall

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

Prüfe dich

Tipp

Wer hat in Mininet die Pings zum Laufen gebracht? Antwort: sein Controller, der dem Switch gesagt hat, was er mit den Paketen tun soll, die er nicht kannte.

Ein Controller schreibt die Flows

sdnlab controller baut das Lab neu auf und verbindet br0 mit einem Controller-Programm auf dieser Maschine. Es ist das unfertige aus deinem Lab und schickt, so wie es geliefert wird, jedes Paket aus allen anderen Ports, wie ein Hub. Jetzt klappt der Ping von h1 zu h3. Die Tabelle hat einen Flow: priority=0 actions=CONTROLLER. Er schickt jedes Paket ohne besseren Flow an den Controller, und n_packets steigt mit jedem Paket. Diesen Controller fertigzustellen ist Teil 3 des Labs.

Befehl
sudo sdnlab controller

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

Befehl
sudo ip netns exec h1 ping -c 2 -W 1 10.0.0.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.

Befehl
sudo ovs-ofctl -O OpenFlow13 dump-flows br0

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

Jetzt das Lab machen

Tipp

Du hast eine leere Tabelle gesehen, einen Controller und einen Switch, der ihn bei jedem Paket fragt. Dein Lab verlangt, die Tabelle von Hand zu schreiben und dann dem Controller das Lernen beizubringen, damit die meisten Pakete den Switch nie verlassen. Öffne die README.md in deinem Home-Ordner mit cat README.md im Terminal.

Abschlusscheck

Tipp

Antworte, ohne zurückzuschauen. 1. Aus welchen zwei Teilen besteht ein Flow? 2. Was tut ein OpenFlow-Switch mit einem Paket, wenn seine Tabelle leer ist? 3. Was schreibt ein Controller? 4. Welcher Befehl gibt die Flow-Tabelle aus? Antworten: Match und Aktion; er verwirft es; Flows; ovs-ofctl dump-flows.

Für Lehrkräfte

Tipp

Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab durchgeführt wird: Die Schritte und die Schaltflächen Ausführen sind die Lektion, und das Lab ist die Kopie jeder lernenden Person. Sie läuft in einem VM-Lab: Jede lernende Person hat eine eigene Ubuntu-Maschine mit einem Switch und drei Rechnern darin, und eine Schaltfläche Ausführen tippt in ihr Terminal und zeigt, was ausgegeben wurde. Wichtige Lernpunkte: 1. Ein Flow ist Match und Aktion. 2. Ein OpenFlow-Switch ohne Flows verwirft alles. 3. Ein Controller schreibt die Flows. Häufiger Fehler: glauben, jeder Switch lerne von selbst. Material: das Lab und ein Browser. Tipp: Fragen Sie die Klasse vor dem Ping, was passieren wird und warum. Das Lab selbst hat eine Prüfung, die die Flow-Tabelle und den Learning Switch bewertet. Kopieren Sie die Lektion in Ihr eigenes Modul und ändern Sie sie, oder bauen Sie mit dem Menü Lab im Lektions-Editor eine neue von Grund auf.

Ü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 Klasse? Weisen Sie diese Lektionen Ihren Lernenden zu, mit Bewertung und einem Lab für jede lernende Person.