SDN, vollständiger Name (Software Defined Network), ist eine neue innovative Netzwerkarchitektur im modernen Internet. Seine Kerntechnologie OpenFlow trennt die Steuerungsebene und die Datenebene von Netzwerkgeräten, um eine flexible Steuerung des Netzwerkverkehrs zu ermöglichen Netzwerke und Anwendungen. Mininet ist eine leichtgewichtige softwaredefinierte Netzwerk- und Testplattform. Sie nutzt eine leichtgewichtige Virtualisierungstechnologie, um ein einzelnes System wie ein vollständiges Netzwerk aussehen zu lassen, auf dem das Kernelsystem und der Benutzercode ausgeführt werden. Dies kann auch einfach als prozessbasierte Virtualisierungsplattform verstanden werden Das SDN-Netzwerksystem unterstützt verschiedene Protokolle wie OpenFlow und OpenvSwith, kann aber auch einen kompletten Netzwerk-Host simulieren, eine Verbindung herstellen und auf demselben Computer schalten und ermöglicht interaktive Entwicklung, Tests und Demonstrationen, insbesondere solche, die OpenFlow- und SDN-Technologien verwenden Es ist auch möglich, Code von dieser Prozessvirtualisierungsplattform in eine reale Umgebung zu migrieren.
Von Mininet implementierte FunktionenDie Installationsmethode von Mininet ist relativ einfach. Sie kann über den Git-Quellcode und das integrierte Installationsskript installiert werden. Hier verwende ich die Standardinstallation aller Mininet-bezogenen Pakete, wie zum Beispiel: OpenFlow. POX und andere Tools werden standardmäßig in der aktuellen Datei gespeichert.
<br>
# git clone git://github.com/mininet/mininet<br>
# cd mininet/util/<br>
# ./install.sh -a<br>
#ls<br>
Mininet of-dissector oflops oftest openflow pox<br>
Abbildung 1. Einfaches Netzwerk-Beispieldiagramm
Da Mininet benutzerdefinierte Netzwerke unterstützt, finden Sie hier ein einfaches Netzwerkbeispiel, wie in Abbildung 1 dargestellt. Geben Sie den Befehl mn direkt in das Mininet-Netzwerksystem ein, um in diesem System ein einschichtiges Topologienetzwerk zu erstellen, aus dem zwei Hosts und einer erstellt werden Standardschalter, und der Controller und der Schalter sind aktiviert. Gleichzeitig können Sie den Verbindungsstatus auch über das Befehlsnetz überprüfen. Zunächst wird ein einfaches Beispiel aufgeführt, z. B. das Aktivieren des Webservers und des Clients im Mininet-System.
<br>
#mn<br>
*** Netzwerk schaffen<br>
*** Controller hinzugefügt<br>
*** Hosts hinzufügen:<br>
h1 h2<br>
*** Schalter hinzufügen:<br>
s1<br>
*** Links hinzufügen:<br>
(h1, s1) (h2, s1)<br>
***Konfigurieren von Hosts<br>
h1 h2<br>
*** Controller wird gestartet<br>
*** Startet 1 Schalter<br>
s1<br>
*** CLI:<br> wird gestartet
mininet><br>
Webdienste aktivieren und deaktivieren
Es ist einfach, einen Webserver in der Mininet-Umgebung einzurichten. Aus dem Beispiel unten können Sie ersehen, dass ein Webserver von Host1 eingerichtet wird und HTTP-Anfragen von einem anderen Host an den Webserver erhält.
<br>
mininet> h1 python -m SimpleHTTPServer 80 & #Webdienst auf Host h1<br> aktivieren
mininet> h2 wget -O - h1 #Laden Sie den Inhalt der h1-Website auf Host h2<br> herunter
--2013-11-04 00:05:40-- http://10.0.0.1/<br>
Verbindung zu 10.0.0.1:80... verbunden.<br>
HTTP-Anfrage gesendet, wartet auf Antwort... 200 OK<br>
…………<br>
Länge: 760 [text/html<br>
<br>
<title>Verzeichniseintrag für /</title>
0K 100% 1,65M=0s
04.11.2013 00:05:40 (1,65 MB/s) – geschrieben auf stdout [760/760]
mininet> h1 kill %python # Töte den Webprozess
10.0.0.2 - - [04.11.2013 00:05:40] "GET / HTTP/1.1" 200 -
bash: Zeile 23: kill: python: mehrdeutige Jobspezifikation
Ping-Test
Führen Sie auf dem Mininet-System den Verbindungstest zwischen zwei Hosts durch.
<br>
mininet> h1 ping -c4 h2<br>
PING 10.0.0.2 (10.0.0.2) 56(84) Bytes Daten.<br>
64 Bytes von 10.0.0.2: icmp_req=1 ttl=64 time=1.55 ms<br>
64 Bytes von 10.0.0.2: icmp_req=2 ttl=64 time=0,094 ms<br>
64 Bytes von 10.0.0.2: icmp_req=3 ttl=64 time=0,075 ms<br>
64 Bytes von 10.0.0.2: icmp_req=4 ttl=64 time=0,071 ms
--- 10.0.0.2 Ping-Statistik ---
4 Pakete gesendet, 4 empfangen, 0 % Paketverlust, Zeit 3006 ms
RTT min/avg/max/mdev = 0,071/0,448/1,553/0,638 ms
Knoten und Links anzeigen
<br>
Mininet>-Knoten<br>
Verfügbare Knoten sind:<br>
c0 h1 h2 s1<br>
mininet> net<br>
h1 h1-eth0:s1-eth1<br>
h2 h2-eth0:s1-eth2<br>
s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0<br>
c0<br>
Mininet unterstützt eine benutzerdefinierte Topologie. Wenn in der Datei topo-2sw-2host.py ein Mytopo definiert ist, können Sie die Verwendung dieser Topologie über die Option --topo angeben:
Abbildung 2. Beispiel einer benutzerdefinierten Topologie
Da Mininet auch parametrisierte Topologie unterstützt, kann über Python-Code eine flexible Topologie erstellt werden, die auch gemäß übergebenen benutzerdefinierten Parametern konfiguriert und in mehreren Umgebungen wiederverwendet werden kann. Die allgemeine Struktur des Codes wird unten kurz aufgeführt .
<br>
#!/usr/bin/python
aus mininet.topo Topo importieren
von mininet.net Mininet importieren
aus mininet.util import dumpNodeConnections
aus mininet.log import setLogLevel
Klasse SingleSwitchTopo(Topo):
def __init__(self, n=2, **opts):
Topo.__init__(self, **opts)
switch = self.addSwitch('s1') #Einen Schalter zur Topologie hinzufügen
für h im Bereich(n):
host = self.addHost('h%s' % (h + 1)) #Host zur Topologie hinzufügen
self.addLink(host, switch) #Eine bidirektionale Verbindungstopologie hinzufügen
def simpleTest():
topo = SingleSwitchTopo(n=4)
net = Mininet(topo) #Hauptklasse zum Erstellen und Verwalten von Netzwerken
net.start() #Starten Sie Ihr Topologienetzwerk
Drucken Sie „Hostverbindungen löschen“
dumpNodeConnections(net.hosts) #Dump-Dateiverbindungen
Drucken Sie „Netzwerkkonnektivität testen“
net.pingAll() #Alle Knoten testen die Verbindung untereinander
net.stop() #Stoppen Sie Ihr Netzwerk
if __name__ == '__main__':
setLogLevel('info') #Mininet-Standardausgabepegel festlegen, Info festlegen, um einige nützliche Informationen bereitzustellen
simpleTest()
<br>
# python test-single.py<br>
*** Netzwerk schaffen<br>
*** Controller hinzugefügt<br>
*** Hosts hinzufügen:<br>
h1 h2 h3 h4<br>
*** Schalter hinzufügen:<br>
s1<br>
*** Links hinzufügen:<br>
(h1, s1) (h2, s1) (h3, s1) (h4, s1)<br>
***Konfigurieren von Hosts<br>
h1 h2 h3 h4<br>
*** Controller wird gestartet<br>
*** Startet 1 Schalter<br>
s1<br>
Host-Verbindungen werden gelöscht<br>
h1 h1-eth0:s1-eth1<br>
h2 h2-eth0:s1-eth2<br>
h3 h3-eth0:s1-eth3<br>
h4 h4-eth0:s1-eth4<br>
Netzwerkkonnektivität testen<br>
*** Ping: Ping-Erreichbarkeit testen<br>
h1 -> h2 h3 h4<br>
h2 -> h1 h3 h4<br>
h3 -> h1 h2 h4<br>
h4 -> h1 h2 h3<br>
*** Ergebnisse: 0 % gesunken (12/12 erhalten)
Normalerweise verfügt die Host-Schnittstelle über einen unabhängigen Namespace, und der Steuerknoten und der Switching-Knoten befinden sich beide im Root-Namespace. Wenn Sie möchten, dass alle Knoten ihren eigenen Namespace haben, müssen Sie den Parameter --innamespace hinzufügen, d. h. ausführen: mn --innamespace
<br>
# mn --innamespace --switch user<br>
*** Netzwerk schaffen<br>
*** Controller hinzugefügt<br>
*** Hosts hinzufügen:<br>
h1 h2<br>
*** Schalter hinzufügen:<br>
s1<br>
*** Links hinzufügen:<br>
(h1, s1) (h2, s1)<br>
c0 s1<br>
*** Kontrollnetzwerk testen<br>
s1 -> c0<br>
c0 -> s1<br>
*** Ergebnisse: 0 % gesunken (2/2 erhalten)
*** Hosts konfigurieren
h1 h2
*** Controller wird gestartet
*** Startet 1 Schalter
s1
*** CLI:
wird gestartet
Tabelle 1. Allgemeine Mininet-Befehle
Das obige ist der detaillierte Inhalt vonMininet des SDN-Netzwerksystems. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!