You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
12 KiB
250 lines
12 KiB
\documentclass[12pt,a4paper]{article}
|
|
|
|
\usepackage[ngerman]{babel}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{geometry}
|
|
\usepackage{graphicx}
|
|
\usepackage{caption}
|
|
\usepackage{setspace}
|
|
\usepackage{float}
|
|
\usepackage{hyperref}
|
|
\usepackage{enumitem}
|
|
\usepackage{listings}
|
|
\lstset{
|
|
basicstyle=\ttfamily\fontsize{10}{10}\selectfont,
|
|
tabsize=1,
|
|
frame=single,
|
|
}
|
|
|
|
\onehalfspacing
|
|
|
|
\geometry{a4paper, top=20mm, left=30mm, right=20mm, bottom=20mm, headsep=10mm, footskip=12mm}
|
|
|
|
\hypersetup{
|
|
unicode=true,
|
|
pdftitle={ACN-LAB4},
|
|
pdfsubject={ACN-LAB4},
|
|
pdfauthor={Sebastian~Rieger,Christoph~Hardegen},
|
|
pdfkeywords={},
|
|
colorlinks=true,
|
|
urlcolor=black,
|
|
linkcolor=black,
|
|
breaklinks=true,
|
|
citecolor=black,
|
|
filecolor=black}
|
|
|
|
\begin{document}
|
|
|
|
\begin{figure}
|
|
\begin{center}
|
|
\includegraphics[scale=0.5]{figures/logo.pdf}
|
|
\end{center}
|
|
\end{figure}
|
|
|
|
\begin{center}
|
|
\begin{Huge}
|
|
\textsc{Advanced Computer Networks} \\
|
|
\end{Huge}
|
|
\vspace{.5cm}
|
|
\begin{large}
|
|
\textsc{Lab 4: Mininet \& SDN Introduction}
|
|
\end{large}
|
|
\end{center}
|
|
|
|
\section{Mininet}
|
|
|
|
\begin{itemize}[leftmargin=*]
|
|
\setlength\itemsep{.1em}
|
|
\item Verschaffen Sie sich einen Überblick zu Mininet und
|
|
klären Sie folgende Fragestellungen:
|
|
\begin{itemize}[leftmargin=*]
|
|
\setlength\itemsep{.1em}
|
|
\item Was ist Mininet und wo hat es seinen Ursprung?
|
|
\item Wie ist Mininet (grob) aufgebaut bzw. wie funktioniert es?
|
|
\item Was sind Einsatzszenarien für Mininet?
|
|
\end{itemize}
|
|
Relevante Informationen finden Sie z.B. unter \url{http://mininet.org/overview/}. \\
|
|
-----------------------------------------------------------------------------------------------------------------
|
|
\item[] Die folgenden Aufgabenstellungen/Inhalte orientieren sich am Mininet Walkthrough (\url{http://mininet.org/walkthrough/}).
|
|
Für deren Bearbeitung erhalten Sie Zugriff auf eine vorbereitete virtuelle Maschine.
|
|
%\item Bilden Sie Gruppen von 2 bis max. 4 Personen und erfragen Sie einen Gruppenzugang zu einer benötigten VM.
|
|
%Melden Sie sich mit den Zugangsdaten auf Ihrer VM an.
|
|
\item Unter \url{http://192.168.76.212:17000} haben Sie aus dem VPN Zugriff auf eine Ubuntu 18.04 VM in der mininet bereits installiert ist. Melden Sie sich dafür ihren Gruppen-Accounts an (User: acn-groupXY, Passwort: netlab). Starten Sie die Standard-Topologie von Mininet:
|
|
\begin{lstlisting}
|
|
sudo mn
|
|
\end{lstlisting}
|
|
Welche Komponenten können Sie anhand der Ausgabe des Skripts identifizieren?
|
|
Wie sind diese miteinander verbunden?
|
|
Welche Rolle nehmen die einzelnen Komponenten innerhalb der Mininet-Topologie ein?
|
|
\item Rufen Sie die Hilfe der Mininet-CLI auf.
|
|
Verschaffen Sie sich einen Überblick über die verfügbaren Kommandos.
|
|
Testen Sie diese und interpretieren Sie die Ausgaben.
|
|
\begin{lstlisting}
|
|
mininet> help
|
|
|
|
mininet> (dump | net | nodes | links | ports)
|
|
mininet> h1 (ifconfig | arp | route | tcpdump | ...)
|
|
mininet> pingall
|
|
mininet> h1 ping h2
|
|
mininet> iperf h1 h2
|
|
mininet> link s1 h1 (down | up)
|
|
mininet> xterm h1
|
|
\end{lstlisting}
|
|
\item Stoppen Sie die Standard-Topologie:
|
|
\begin{lstlisting}
|
|
mininet> exit
|
|
\end{lstlisting}
|
|
Erzeugte Ressourcen werden normalerweise beim Stoppen gelöscht.
|
|
Ressourcen können auch manuell beseitigt werden (Cleanup, z.B. im Fehlerfall):
|
|
\begin{lstlisting}
|
|
sudo mn -c
|
|
\end{lstlisting}
|
|
\item Machen Sie sich mit den Optionen des Mininet-Kommandos vertraut:
|
|
\begin{lstlisting}
|
|
sudo mn --help
|
|
\end{lstlisting}
|
|
%\item Führen Sie Ihre Experimente mit weiteren Beispiel-Topologien durch:
|
|
\item Starten Sie folgende in Mininet enthaltene Beispiel-Topologien:
|
|
\begin{lstlisting}
|
|
sudo mn --topo single,4
|
|
sudo mn --topo linear,4
|
|
sudo mn --topo tree,depth=2,fanout=4
|
|
\end{lstlisting}
|
|
Nutzen Sie die Ausgaben von Mininet-CLI-Kommandos, um die Topologien zu skizzieren.
|
|
Variieren Sie die Parameter und vollziehen Sie die Topologie-Änderungen nach.\\
|
|
----------------------------------------------------------------------------------------------------------------- \\
|
|
% Im Folgenden werden Sie eine eigene Topologie betrachten/entwickeln und dabei weitere Konzepte von bzw. die Programmierung mit Mininet kennenlernen.
|
|
% Die Implementierung der Custom-Topologie finden Sie in \texttt{customTopo.py}.
|
|
% \item Schauen Sie sich den Programmcode an und versuchen Sie diesen schrittweise nachzuvollziehen.
|
|
% Die folgenden Anmerkungen unterstützen Sie hierbei:
|
|
% \begin{itemize}[leftmargin=*]
|
|
% \setlength\itemsep{.1em}
|
|
% \item Der Import relevanter Mininet-Klassen erfolgt in den Zeilen 1 bis 5.
|
|
% \item Die Enumeration \texttt{NodeRoles} dient der Abbildung der Rollen verschiedener Komponenten in der Mininet-Topologie (Zeilen 9 bis 12).
|
|
% \item Die Klasse \texttt{Router} erweitert die Mininet-Klasse \texttt{Node} und bildet einen einfachen Router ab (Zeilen 15 bis 29).
|
|
% Die Methoden \texttt{config} und \texttt{terminate} werden implizit beim Erstellen/Starten bzw. dem Löschen/Stoppen aufgerufen.
|
|
% \item Die Klasse \texttt{CustomTopo} erweitert die Mininet-Klasse \texttt{Topo} und implementiert eine eigene Mininet-Topologie.
|
|
% \item In der \texttt{build}-Methode wird die Topologie konstruiert (Zeilen 39 bis 82).
|
|
% Die addNode-API wird für die Konstruktion des Routers (Zeilen 41 und 42), die addSwitch- bzw. addHost-API für die der Switches (Zeilen 44 und 45) bzw. Hosts (z.B. Zeilen 47 bis 50) verwendet, wobei die Erstellung durch die Übergabe einzelner Parameter bestimmt wird.
|
|
% Neben Standard-Parametern (siehe Mininet Python API Reference Manual) können weitere, eigene Parameter genutzt werden.
|
|
% In der Custom-Topologie wird dies anhand des Parameters \texttt{role} verdeutlicht (z.B. Zeile 42).
|
|
% Standardmäßig werden Mininet-Nodes in eigenen Linux Namespaces realisiert.
|
|
% Ein Mininet-Node kann jedoch auch im Standard-Namespace abgebildet werden (Zeile 48).
|
|
% Über die addLink-API werden die Links zwischen den einzelnen Komponenten der Mininet-Topologie erstellt (z.B. Zeilen 70 bis 75).
|
|
% \item Die \texttt{run}-Funktion definiert die Ausführung (Zeilen 85 bis 95).
|
|
% Hierbei wird zuerst eine Mininet-Topologie (Zeile 86) und basierend auf dieser im zweiten Schritt ein Mininet-Netz (Zeile 87) konstruiert.
|
|
% Daraufhin werden das Netzwerk und die Mininet-CLI gestartet (Zeilen 88 und 94).
|
|
% Der Zugriff auf erstellte Komponenten des Mininet-Netzes ist exemplarisch in den Zeilen 90 bis 92 gezeigt.
|
|
% Wird die Mininet-CLI verlassen, so werden alle Ressourcen der Topologie bzw. des Mininet-Netzes gelöscht (Zeile 95).
|
|
% \end{itemize}
|
|
% \item Starten Sie die Custom-Topologie und nutzen Sie die Mininet-CLI-Kommandos für verschiedene Experimente in dieser.
|
|
% Versuchen Sie die Konzepte, die in der Custom-Topologie angewandt werden, nachzuvollziehen.
|
|
% Verwenden Sie dabei z.B. die Kommandos \texttt{ping}, \texttt{tracepath}, \texttt{iperf}, \texttt{tcpdump}.
|
|
% \begin{lstlisting}
|
|
% sudo python customTopo.py
|
|
% \end{lstlisting}
|
|
% \item[] \textit{ANMERKUNG}: Die Custom-Topologie dient als einfaches Beispiel zur Einführung.
|
|
% In Ihren Topologien, die Sie im Rahmen der Programming Assignments implementieren, sollten Sie im Allgemeinen ähnliche Argumente parametrisieren (Konstanten) sowie zusammenhängende Elemente in Listen, Dictionaries oder ähnlichem organisieren.
|
|
% \item Stoppen und ergänzen Sie die Custom-Topologie um ein weiteres Netzwerk, bestehend aus einem Switch sowie zwei Hosts, und binden Sie dieses an den Router an.
|
|
% Starten Sie die Custom-Topologie und testen Sie Ihre Erweiterungen. \\
|
|
|
|
\section{Software-Defined Networking und OpenFlow}
|
|
|
|
\begin{itemize}[leftmargin=*]
|
|
\setlength\itemsep{.1em}
|
|
\item Was verstehen Sie unter Software-Defined Networking?
|
|
\item Welche wesentlichen Komponenten existieren in einer SDN-Architektur? Skizzieren Sie eine beispielhafte SDN-Infrastruktur.
|
|
\item Was ist OpenFlow? Beschreiben Sie den Standard kurz. Gibt es Alternativen?
|
|
\end{itemize}
|
|
|
|
\section{OpenFlow Switch}
|
|
|
|
\begin{itemize}[leftmargin=*]
|
|
\setlength\itemsep{.1em}
|
|
\item Recherchieren Sie, was \texttt{Open vSwitch} ist und welche Features unterstützt werden:
|
|
\begin{itemize}[leftmargin=*]
|
|
\setlength\itemsep{.1em}
|
|
\item \url{http://www.openvswitch.org/}
|
|
\item \url{http://www.openvswitch.org/features/}
|
|
\end{itemize}
|
|
\item Vollziehen Sie die Implementierung der Mininet-Topologie:
|
|
|
|
\url{https://mmnet.informatik.hs-fulda.de/OpenFlowTopo.py}
|
|
|
|
nach.
|
|
Starten Sie die Topologie und beschreiben Sie deren Architektur nach der Ausführung:
|
|
\begin{lstlisting}
|
|
sudo python OpenFlowTopo.py
|
|
\end{lstlisting}
|
|
\item Testen Sie die Kommunikation zwischen den Hosts in der Topologie, z.B. über das Kommando \texttt{ping}.
|
|
Beobachten Sie zudem mit dem Kommando \texttt{tcpdump} oder mit \texttt{sudo wireshark-gtk}, welche Nachrichten von einem Host gesendet (und empfangen) werden.
|
|
Ist eine Kommunikation möglich? Was vermuten Sie als Ursache und wie lässt sich das Problem lösen?
|
|
\item Nutzen Sie die Kommandos \texttt{ovs-vsctl} und \texttt{ovs-ofctl} (weiteres Terminal), um relevante Informationen zum Switch in der Topologie zu erhalten (Ports, Tabellen, Flows, etc.):
|
|
\begin{lstlisting}
|
|
sudo ovs-vsctl show
|
|
|
|
sudo ovs-ofctl [show | dump-ports | dump-flows] -O OpenFlow10 ofp-sw1
|
|
mininet> dpctl [show | dump-ports | dump-flows]
|
|
|
|
(ovs-vsctl | ovs-ofctl) --help
|
|
mininet> dpctl --help
|
|
\end{lstlisting}
|
|
\end{itemize}
|
|
|
|
%\newpage
|
|
\section{OpenFlow Controller}
|
|
|
|
\begin{itemize}[leftmargin=*]
|
|
\setlength\itemsep{.1em}
|
|
\item Recherchieren Sie, worum es sich bei \texttt{Ryu} handelt:
|
|
\begin{itemize}[leftmargin=*]
|
|
\setlength\itemsep{.1em}
|
|
\item \url{https://github.com/osrg/ryu#whats-ryu}
|
|
\item \url{https://ryu.readthedocs.io/en/latest/getting_started.html#what-s-ryu}
|
|
\end{itemize}
|
|
%\item Installieren Sie \texttt{Ryu} auf Ihrer virtuellen Maschine:
|
|
%\begin{lstlisting}
|
|
%pip install ryu
|
|
%\end{lstlisting}
|
|
\item Prüfen Sie den festgelegten Manager (Controller) für den Switch (weiteres Terminal):
|
|
\begin{lstlisting}
|
|
sudo ovs-vsctl get-manager
|
|
sudo netstat -tulpn | grep 6633
|
|
\end{lstlisting}
|
|
Läuft der Controller? Wie hängt dies mit der Kommunikation der Hosts zusammen?
|
|
\item Überlegen Sie sich, welche Flows auf dem Switch installiert werden müssen, damit eine ICMP-Kommunikation zwischen den Hosts möglich wird.
|
|
Welche Matching-Felder und Actions benötigen Sie? (Tipp: \texttt{Ethertype IPv4} = \texttt{0x0800} und \texttt{ARP} = \texttt{0x0806})
|
|
\item Ergänzen Sie die Ryu-Applikation:
|
|
|
|
\url{https://mmnet.informatik.hs-fulda.de/OpenFlowApp.py}
|
|
|
|
um die fehlenden Flows.
|
|
Mit Hilfe des Kommandos \texttt{ifconfig} können Sie die MAC- und IP-Adressen der Hosts ermitteln.
|
|
\item[] ANMERKUNG: Für das Löschen aller Flows auf dem Switch können Sie eines der folgenden Kommandos benutzen:
|
|
\begin{lstlisting}
|
|
sudo ovs-ofctl del-flows ofp-sw1
|
|
mininet> dpctl del-flows
|
|
\end{lstlisting}
|
|
\item Starten Sie den OpenFlow Controller (weiteres Terminal):
|
|
\begin{lstlisting}
|
|
sudo ryu-manager OpenFlowApp.py
|
|
\end{lstlisting}
|
|
\item Überprüfen Sie die korrekte Installation der Flows auf dem Switch.
|
|
\item Testen Sie die Kommunikation zwischen den Hosts in der Topologie.
|
|
\end{itemize}
|
|
|
|
\section{Wozu SDN?}
|
|
|
|
\begin{itemize}[leftmargin=*]
|
|
\setlength\itemsep{.1em}
|
|
\item Welche Vorteile bietet Software-Defined Networking?
|
|
\item Welche Nachteile (Herausforderungen) ergeben sich durch SDN?
|
|
\item Was sind mögliche Einsatzszenarien von SDN?
|
|
%\item Gibt es mögliche Alternativen zu SDN?
|
|
\end{itemize}
|
|
|
|
-----------------------------------------------------------------------------------------------------------------
|
|
\item Eine Vielzahl an Programmierbeispielen finden Sie im offiziellen GitHub-Repository von Mininet (\url{https://github.com/mininet/mininet/tree/master/examples}).
|
|
\item Die Dokumentation der Mininet Python API finden Sie im offiziellen Reference Manual (\url{http://mininet.org/api/index.html}).
|
|
\end{itemize}
|
|
\end{document}
|