Software Defined Networking – Was ist das?

Software Defined Networking (SDN) ist ein Konzept zum Netzwerkaufbau. Dabei wird die Kontrolle von der Hardware entkoppelt und an eine Software-Anwendung, dem Controller, übergeben. Das Ziel von SDN ist es, dass Netzwerktechniker und Administratoren schnell auf wechselnde Geschäftsanforderungen reagieren können. In einem Software-Defined-Netzwerk kann ein Netzwerk-Administrator den Datenverkehr über eine zentrale Steuerungskonsole komfortabel verwalten. Der Administrator kann bei Bedarf Netzwerk-Switch-Regeln priorisieren, entpriorisieren oder bestimmte Arten von Paketen blockieren. Ein Blockschaltbild zeigt den prinzipiellen Aufbau:

Application Layer

Zum Steuern und Konfigurieren der Netzwerk-Infrastruktur stehen dem Anwender (Admin) diverse Applikationen zur Verfügung. Eine der flexibelsten Möglichkeiten ist eine Skriptspache wie Python. Wichtige Punkte sind:

  • Traffic Engineering
  • Network Virtualization
  • QoS
  • Monitoring
  • Routing
Control Layer

Die Control-Software stellt im Software Defined Networking das Herz der Netzwerkinfrastruktur dar. Die Community stellt diverse Controller zur Verfügung, um die Infrastruktur zu definieren und zu konfigurieren. Eine der bekanntesten ist Open Daylight. Die Controller werden von den Applikationen aus dem Application Layer entsprechend simple über die sog. Northbridge gesteuert.

Infrastructure Layer

Dieser Layer beherbergt sämtliche Netzwerkgeräte. Das sind in erster Linie:

  • OpenFlow-Switche
  • Routers
  • Hosts (Server)
  • andere Netzwerkgeräte
Mininet

Mininet ist ein Netzwerkemulator, der es erlaubt, Netzwerke aus Hosts, Switches, Routers und Controller miteinander zu verbinden. Auf den Hosts laufen alle Linux-Netzwerkapplikationen und die Switche und Router unterstützen OpenFlow für skalierbare Software Defined Networks. Mininet

  • Unterstützt Testmöglichkeiten für die Entwicklung von OpenFlow-Applikationen
  • Ermöglicht das Testen komplexer Netzwerktopologien ohne phylikalische Netze
  • Beinhaltet ein CLI für Debug- und Testzwecke
  • Unterstütz eine sehr große Skalierbarkeit von Netzwerktopologien
  • Verfügbare Bandbreite kann skaliert werden
  • Paketverlust, doppelte Pakete und Paketverzögerung können skaliert werden
  • Python-API ermöglicht eine schnelle Erstellung der Netzwerktopologie

Eine Einordnung von Mininet ist in folgender Abbildung zu sehen:

Application Layer

Es steht eine leistungsfähige und sehr flexible Skriptsprache Python für die Konfiguration der Netzwerkinfrastruktur zur Verfügung. Programmieren muss man an dieser Stelle etwas können!

Control Layer

Mininet bietet die Möglichkeit, den internen Controller für die Konfiguration heranzuziehen. Der reicht i.d.R. für Standard-Konfigurationen aus.

Um Controller selbst aufzubauen, bietet sich das POX-Framework an. Mit dessen Hilfe ist es möglich, eigene Funktionalitäten wie Firewalls, NAT-Bridges, Portblocker, usw. herzustellen. Programmiert wird an dieser Stelle in Python!

Weitere Controller sind in der Community existent. OpenDaylight oder Flootlight sind an dieser Stelle zu nennen.

Infrastructure Layer

Ein Auszug an Netzwerk-Devices:

  • Hosts (Linux-OS)
  • Switche/Bridge (Spanning Tree, VLAN, NAT/PAT)
  • Routers (RIPv2, OSPF, BGP)
  • Layer-2/3/4-Firewalls (POX-Framework)
  • Server aller Art (abhängig vom OS): DHCP/SSH/Telnet/NTP/HTTP/…
  • Cloud-Anwendungen

Ich biete diverse Übungen an, um ein tiefgreifendes Verständnis in der Netzwerktechnik aufzubauen. Alle Übungen setzen Mininet voraus.

Netzwerktechnik

#ZweckAufgabePython-Skript/Tarball
1Einführung in MininetEinführung in MininetÜbung01
2L7 - SSH, TelnetSSH,TelnetÜbung02
3L7 - DHCP-ServiceDHCP-ServiceÜbung03
4L7 - PingPingÜbung04
5L7 - NTP-ServiceNTP-Service
6L4 - TCP- / UDP-PaketeTCP-UDP-PaketeÜbung06
7L4 - TCP Verbindungsauf- und abbauTCP Auf- und AbbauÜbung07
8L4 - UDP-PerformanceUDP-PerformanceÜbung08
9L4 - TCP-Performance 1 mit DelayTCP-Performance 1Übung09
10L4 - TCP-Performance 2 mit DelayTCP-Performance 2Übung10
11L4 - TCP-Performance 3 mit VerlustTCP-Performance 3Übung11
12L4 - TCP-Window-SizeTCP-Window-SizeÜbung12
13L4 - TCP-Congestion-ControlTCP Congestion ControlÜbung13
13-1L4 - TCP-Selective-Ack (SACK)Selective AckÜbung13-1
14L3 - Einfacher Linux-RouterEinfacher RouterÜbung14
15L3 - RIPv2-RouterRIPv2-RouterÜbung15
16L3 - OSPF-RouterOSPF-RouterÜbung16
17L2 - Spanning TreeSpanning TreeÜbung17
18L2 - VLANVLANÜbung18
19L2 - FirewallFirewallÜbung19
20Zusatz: L4 - Multipath-TCPZusatz: Multipath-TCPÜbung20
21Zusatz: L4 - IP-TTL-Analyse Linux RouterIP-TTL-AnalyseÜbung21
22Zusatz: L2 - Jumboframes 9000 BytesJumboframesÜbung22