Ein Switch, der selbst lernt
Ein Learning Switch lernt selbst, an welchem Port welches Gerät hängt, indem er die Absenderadresse jedes Frames mitliest. Dadurch muss niemand eine Tabelle von Hand pflegen.
Kennt er ein Ziel noch nicht, schickt er den Frame an alle anderen Ports, bis eine Antwort zurückkommt. Diese Lektion zeigt, wie das Lernen Schritt für Schritt abläuft.
Am Ende dieser Lektion
Notiz
Ich kann erklären, wie ein Switch lernt, an welchem Port eine MAC-Adresse hängt.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| MAC-Adresse | die feste Hardware-Adresse einer Netzwerkkarte | 02:00:00:00:00:0a |
| Frame | ein Datenpaket auf der Ebene der MAC-Adressen | |
| Lerntabelle | eine Tabelle, die jeder MAC-Adresse einen Port zuordnet | |
| Eingangsport | der Port, an dem ein Frame im Switch ankommt | |
| Flooding | einen Frame an alle Ports außer dem Eingangsport schicken | |
| Broadcast | ein Frame an alle Geräte, mit dem Ziel ff:ff:ff:ff:ff:ff |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Der Switch lernt aus den Absendern
Jeder Frame trägt zwei MAC-Adressen: die des Absenders und die des Ziels. Kommt ein Frame an Port 1 an, weiß der Switch: Der Absender hängt an Port 1. Das trägt er in seine Lerntabelle ein.
Dann sucht er das Ziel in der Tabelle. Findet er es, schickt er den Frame nur dorthin. Findet er es nicht, schickt er ihn an alle anderen Ports. Das ist Flooding.
Beispiel: vier Frames nacheinander
| Schritt | Frame | Eingangsport | Tabelle danach | Was der Switch tut |
|---|---|---|---|---|
| 1 | A an B | 1 | A: 1 | B ist unbekannt, also fluten |
| 2 | B an A | 2 | A: 1, B: 2 | A ist bekannt, nur an Port 1 |
| 3 | A an B | 1 | A: 1, B: 2 | B ist bekannt, nur an Port 2 |
| 4 | B an C | 2 | A: 1, B: 2 | C ist unbekannt, also fluten |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Drei Sonderfälle, die jeder Switch kennt
Ein Broadcast hat kein einzelnes Ziel. Er wird immer geflutet, und die Adresse ff:ff:ff:ff:ff:ff wird nie gelernt. Wird ein Gerät an einen anderen Port umgesteckt, überschreibt sein nächster Frame den alten Eintrag.
Hängt das Ziel am selben Port, an dem der Frame ankam, verwirft der Switch ihn. Dort hört das Ziel ihn ohnehin.
Die Sonderfälle auf einen Blick
| Lage | Was der Switch tut | Warum |
|---|---|---|
| Ziel unbekannt | Fluten | Er weiß nicht, wo es hängt |
| Ziel ist der Broadcast | Fluten, nie lernen | Alle sollen den Frame bekommen |
| Absender an neuem Port | Eintrag überschreiben | Das Gerät wurde umgesteckt |
| Ziel am Eingangsport | Verwerfen | Das Ziel hört den Frame schon |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Im Lab sehen Sie einen echten Lernschalter
Open vSwitch kann selbst ein Learning Switch sein: Die Aktion NORMAL schaltet das ein. Sie legen dazu einen eigenen Switch sw2 mit drei Ports an. In Teil 3 des Labs schreiben Sie das Lernen selbst. Hier schauen Sie nur zu.
Der Befehl fdb/show zeigt die Lerntabelle. Mit fdb/add legen wir einen Eintrag von Hand an, damit der Unterschied zu sehen ist.
Den Switch sw2 anlegen
sudo ovs-vsctl --may-exist add-br sw2 -- set bridge sw2 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.
Drei Ports anlegen
sudo ovs-vsctl --may-exist add-port sw2 q1 -- set interface q1 type=internal ofport_request=1 -- --may-exist add-port sw2 q2 -- set interface q2 type=internal ofport_request=2 -- --may-exist add-port sw2 q3 -- set interface q3 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.
Den eingebauten Lernschalter einschalten
sudo ovs-ofctl -O OpenFlow13 add-flow sw2 actions=NORMALHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Frame an eine unbekannte Adresse
sudo ovs-appctl ofproto/trace sw2 in_port=1,dl_src=02:00:00:00:00:01,dl_dst=02:00:00:00:00:02 | grep learnedHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einen Eintrag von Hand in die Lerntabelle legen
sudo ovs-appctl fdb/add sw2 q2 0 02:00:00:00:00:02Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Lerntabelle lesen
sudo ovs-appctl fdb/show sw2Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Derselbe Frame mit bekanntem Ziel
sudo ovs-appctl ofproto/trace sw2 in_port=1,dl_src=02:00:00:00:00:01,dl_dst=02:00:00:00:00:02 | grep learnedHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Aus der Tabelle wird ein Flow
Ein klassischer Switch schaut für jeden Frame in seine Lerntabelle. In einem SDN lernt der Controller. Hat er ein Ziel gelernt, schreibt er einen Flow in den Switch, und die folgenden Frames laufen ohne ihn.
Das ist der Schritt, den Sie in der nächsten Lektion lesen. Den Lernschritt selbst schreiben Sie jetzt in Python.
Ein häufiger Fehler
Warnung
Viele denken, ein Switch lerne das Ziel eines Frames. Er lernt aber nur den Absender. Das Ziel schlägt er in der Tabelle nur nach. Ein Gerät, das noch nie gesendet hat, bleibt unbekannt, und Frames an es werden geflutet.