%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%Zeichencodireung
%\usepackage[T1]{fontenc}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Tabellenzellen verbinden
\usepackage{multirow}
\usepackage{array}

%Hyperlinks
\usepackage{hyperref}

%Bilder
\usepackage{graphicx}
\usepackage{graphics}

%Farben
\usepackage{color}
\usepackage{colortbl}
\definecolor{rot}{rgb}{1,0.71,0.76}
\definecolor{gruen}{rgb}{0.4,1,0.4}
\definecolor{blau}{rgb}{0.678,0.847,0.902}
\definecolor{hellblau}{rgb}{0.25,0.88,0.82}
\definecolor{gelb}{rgb}{1,1,0.4}
\definecolor{weiss}{rgb}{1,1,1}
\definecolor{magenta}{rgb}{0.87,0.63,0.87}

% horizontale Linien in Tabellen
\usepackage{hhline}

%Kopfzeile
\ihead{Netzwerktechnik}
\chead{}
\ohead{http://kohnlehome.de/netz/datenkommunikation.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

%titel
\title{Datenkommunikation}
%\subtitle{Skript für ITQ-Kurse der Landeshauptstadt München}%
\author{Franz Kohnle}

\pagestyle{scrheadings}

\begin{document}

\maketitle
\thispagestyle{empty}

\newpage

% Überschrift 
%\begin{center}
%\LARGE % Schriftgröße
%\bfseries % Fettdruck
%\sffamily % Serifenlose Schrift
%Datenkommunikation
%\end{center}

\tableofcontents

\newpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% G R U N D L A G E N
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Grundlagen}

\subsection{Zahlensysteme}
\begin{tabular}{r|r|r}
Dezimal & Hexadezimal & Dual / Binär  \\ \hline \hline
\texttt{0} & \texttt{00} & \texttt{0000 0000} \\
\texttt{1} & \texttt{01} & \texttt{0000 0001} \\
\texttt{2} & \texttt{02} & \texttt{0000 0010} \\
\texttt{3} & \texttt{03} & \texttt{0000 0011} \\
\texttt{4} & \texttt{04} & \texttt{0000 0100} \\
\texttt{...} & \texttt{...} & \texttt{...} \\
\texttt{254} & \texttt{FE} & \texttt{1111 1110} \\
\texttt{255} & \texttt{FF} & \texttt{1111 1111} \\
\end{tabular}

\subsubsection*{Übung}
\href{http://kohnlehome.de/netz/Uebung\_Zahlensysteme.ods}{http://kohnlehome.de/netz/Uebung\_Zahlensysteme.ods}

\subsection{Datenmengen und Datenübertragungsraten}
\href{http://kohnlehome.de/netz/Datenmengen.pdf}{http://kohnlehome.de/netz/Datenmengen.pdf}

\subsubsection*{Einheiten von Datenmengen}
Mit Binärpräfixen: b (bit), B (Byte), KiB (Kibibyte), MiB (Mebibyte), GiB (Gibibyte), TiB (Tebibyte)
\subsubsection*{Einheiten von Datenübertragungsraten}
Mit SI-Präfixen: bps, bit/s, kbit/s, Mbit/s, Gbit/s, Tbit/s
\subsubsection*{Übung}
\href{http://kohnlehome.de/netz/uebung-datenmengen.pdf}{http://kohnlehome.de/netz/uebung-datenmengen.pdf}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% S C H I C H T E N M O D E L L E
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Schichtenmodelle der Datenkommunikation}

\subsection{Kommunikation zwischen Sender und Empfänger}
\begin{verbatim}
Sender       Zwischengerät        Zwischengerät           Empfänger
...................................................................
  ||                                                         /\  
  ||                                                         ||  
..||.........................................................||....  
  ||                                                         ||  
  ||                                 /\ => ||                ||  
..||.................................||....||................||....
  ||                                 ||    ||                ||  
  ||            /\ => ||             ||    ||                ||  
..||............||....||.............||....||................||....
  ||            ||    ||             ||    ||                ||  
  \/ =========> ||    \/ ==========> ||    \/ =============> ||  
...................................................................
\end{verbatim}
\begin{itemize}
\item \textbf{von oben nach unten:} einpacken, verpacken, encapsulation
\item \textbf{von unten nach oben:} auspacken, entpacken, decapsulation
\end{itemize}

\subsection{Netzwerkgeräte}
\begin{itemize}
\item \textbf{Endgeräte:} PC, Server, Tablet, Smartphone, Drucker, ...
\item \textbf{Zwischengeräte:} Switch, Router, Modem, ...
\end{itemize}

\subsection{OSI-Modell und TCP/IP-Referenzmodell}
\setlength\extrarowheight{3pt}
\begin{tabular}{ |c|c|m{8cm}|m{1.5cm}|m{2.8cm} |}\hline
\multicolumn{2}{|c|}{\textbf{OSI-Modell}} & Aufgabe, \textit{Adressen}, \textbf{Hardware} & \textbf{P}rotocol \textbf{D}ata \textbf{U}nit & \textbf{TCP/IP-Referenzmodell}\\ \hline \hline
\rowcolor{gelb} 7 & Application & Benutzerschnittstelle &  &  \\ \hhline{---~~}
\rowcolor{gelb} 6 & Presentation & Dateiformate, Verschlüsselung, Komprimierung &  & \\ \hhline{---~~}
\rowcolor{gelb} 5 & Session & Auf- und Abbau einer Sitzung, Login, Passwörter  & \multirow{-3}{*}{Daten} & \multirow{-3}{*}{Application}\\ \hline
\rowcolor{gruen} 4 & Transport & Zuweisung zu Anwendung (\textit{Portnummer}), \newline Segmentierung, Zuverlässigkeit, Flusskontrolle   & Segment & Transport \\ \hline
\rowcolor{blau} 3 & Network & logische Adressierung (\textit{IP}), Routing, \textbf{Router}  & Paket & Internet \\ \hline
\rowcolor{rot} 2 & Data Link & physikalische Adressierung (\textit{MAC}), \textbf{NIC}, \textbf{Switch}  & Frame &  \\ \hhline{----~}
\rowcolor{rot} 1 & Physical & physikalische Übertragung von Bits, \newline \textbf{Kabel}, \textbf{Stecker}, \textbf{Hub}  & Bits & \multirow{-2}{*}{Network Access} \\ \hline
\end{tabular}

\paragraph{Merksatz} \textbf{P}lease \textbf{D}o \textbf{N}ot \textbf{T}hrow \textbf{S}alami \textbf{P}izza \textbf{A}way

\subsection{Protokolle im TCP/IP-Referenzmodell}
{\includegraphics[scale=0.5]{protokolle-v6.png}}

\subsection{Kapselung: Daten - Segment - Paket - Frame}
\subsubsection*{Allgemein} 

\begin{tabular}{|c|c|c|c|}
\hline
\multicolumn{4}{|c|}{\cellcolor{rot}Frame} \\
\hline
\cellcolor{rot}  &  \multicolumn{3}{c|}{\cellcolor{blau}Paket} \\
\hhline{~---} 
\cellcolor{rot}  & \cellcolor{blau} & \multicolumn{2}{c|}{\cellcolor{gruen}Segment} \\ 
\hhline{~~--}
\multirow{-3}{*}{{\cellcolor{rot}}Layer-2-Header} & \multirow{-2}{*}{\cellcolor{blau}Layer-3-Header} & 
\cellcolor{gruen}Layer-4-Header & \cellcolor{gelb}Anwendungsdaten \\
\hline
\end{tabular}


\subsubsection*{HTTP}

\begin{tabular}{|c| c| c| c|}
\hline 
\multicolumn{4}{|c|}{\cellcolor{rot}Ethernet-Frame} \\ 
\hline
\cellcolor{rot}  &  \multicolumn{3}{c|}{\cellcolor{blau}IP-Paket} \\ 
\hhline{~---} 
\cellcolor{rot}  & \cellcolor{blau} & \multicolumn{2}{c|}{\cellcolor{gruen}TCP-Segment} \\ 
\hhline{~~--} 
\multirow{-3}{*}{{\cellcolor{rot}}Ethernet-Header} & \multirow{-2}{*}{\cellcolor{blau}IP-Header} & \cellcolor{gruen}TCP-Header & \cellcolor{gelb}HTTP-Daten \\ 
\hline
\end{tabular}


\subsubsection*{ICMP}

\begin{tabular}{|c |c |c|}
\hline
 \multicolumn{3}{|c|}{\cellcolor{rot}Ethernet-Frame} \\ 
\hline
\cellcolor{rot}  &  \multicolumn{2}{c|}{\cellcolor{blau}IP-Paket} \\
\hhline{~--}
\multirow{-2}{*}{{\cellcolor{rot}}Ethernet-Header} & {\cellcolor{blau}IP-Header} &  \cellcolor{hellblau}ICMP-Daten \\
\hline
\end{tabular}


\subsubsection*{ARP}

\begin{tabular}{|c | c|} 
\hline
\multicolumn{2}{|c|}{\cellcolor{rot}Ethernet-Frame} \\ 
\hline
\cellcolor{rot}Ethernet-Header &  \cellcolor{magenta}ARP-Daten \\ 
\hline
\end{tabular}


\subsection{Netzneutralität}
Jedes IP-Paket wird mit gleicher Priorität weitergeleitet, unabhängig davon, welche Quelle, welches Ziel und welchen Inhalt das Paket hat. Kein Paket wird bevorzugt. Der Inhalt eines Pakets wird nicht verändert.

\subsection{Tools}
\begin{itemize}
\item Sniffer: Wireshark - \href{http://www.wireshark.org/}{http://www.wireshark.org}
\item Simulation: Cisco Packet-Tracer (nur für Cisco Networking Academy Students)
\item Simulation: GNS3 - \href{http://www.gns3.net/}{http://www.gns3.net}
\item Simulation: Filius - \href{http://www.lernsoftware-filius.de/}{http://www.lernsoftware-filius.de}
\end{itemize}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% A N W E N D U N G S P R O T O K O L L E
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Anwendungsprotokolle (Layer 5,6,7)}
\subsection{Übersicht}

\begin{tabular}{ |m{1.2cm}|m{4.8cm}|m{3cm}|m{3cm}|m{2.5cm}|}\hline
\multicolumn{2}{|m{4cm}|}{Protokoll} & Clientanwendung & Serveranwendung & Serverport \\ \hline \hline

\multicolumn{5}{|c|}{Hilfsprotokolle}  \\ \hline
DHCP & Dynamic Host Configuration Protocol & & dhcpd & UDP 67 \\ \hline
DNS  & Domain Name System & & bind & TCP/UDP 53 \\ \hline \hline

\multicolumn{5}{|c|}{Web}  \\ \hline
HTTP & Hypertext Transfer Protocol & \multirow{2}{*}{Firefox, IE, Opera} & \multirow{2}{*}{Apache, IIS} & TCP 80 \\ \cline{1-2} \cline{5-5} 
HTTPS  & Hypertext Transfer Protocol Secure & &  & TCP 443 \\ \hline \hline

\multicolumn{5}{|c|}{Dateiübertragung}  \\ \hline
FTP & File Transfer Protocol & ftp, IE & ProFTPd, Filezilla & TCP 20,21 \\ \hline 
SMB & Server Message Block & Windows-Explorer & Windows-Freigabe, Samba & TCP/UDP 139, 445 \\ \hline \hline 

\multicolumn{5}{|c|}{Remote Access}  \\ \hline
Telnet &  & telnet & & TCP 23 \\ \hline 
SSH & Secure Shell & PuTTY & sshd & TCP 22 \\ \hline \hline 

\multicolumn{5}{|c|}{E-Mail}  \\ \hline
SMTP & Simple Mail Transfer Protocol & \multirow{3}{*}{Thunderbird} & \multirow{3}{*}{postfix, qmail} & TCP 25 \\ \cline{1-2} \cline{5-5} 
POP  & Post Office Protocol & &  & TCP 110 \\ \cline{1-2} \cline{5-5} 
IMAP  & Internet Message Access Protocol & &  & TCP 143 \\ \hline \hline
\end{tabular}

\subsection{DHCP (Dynamic Host Configuration Protocol)}
\subsubsection*{Funktionsweise}
Der DHCP-Server teilt dem DHCP-Client seine Konfigurationsdaten mit: IP-Adresse, Subnetmaske, Default-Gateway, Adresse des DNS-Servers
\begin{verbatim}
Client               Server
   |                    |
   |-- DHCP-Discover -->|
   |                    |
   |<--- DHCP-Offer ----|
   |                    |
   |--- DHCP-Request -->|
   |                    |
   |<---- DHCP-Ack -----|  
\end{verbatim}

\subsubsection*{Windows-Befehle}
\begin{tabular}{l l}
\texttt{ipconfig} & Netzwerkkonfiguration anzeigen\\
\texttt{ipconfig /all} & Netzwerkkonfiguration ausführlich anzeigen\\
\texttt{ipconfig /release} & Daten vom DHCP-Server freigeben\\
\texttt{ipconfig /renew} & neue Daten vom DHCP-Server anfordern
\end{tabular}

\subsubsection*{Übung}
DHCP-Vorgang mitsniffern


\subsection{DNS (Domain Name System)}
\href{http://kohnlehome.de/netz/DNS.pdf}{http://kohnlehome.de/netz/DNS.pdf}

\subsubsection*{Windows-Befehle}
\begin{tabular}{l l}
\texttt{nslookup} & IP-Adresse eines Domänennamens ermitteln\\
\texttt{ipconfig /displaydns} & DNS-Cache anzeigen\\
\texttt{ipconfig /flushdns} & DNS-Cache leeren
\end{tabular}

\subsubsection*{Übung}
DNS-Vorgang mitsniffern


\subsection{HTTP (Hypertext Transfer Protocol)}

\subsubsection*{Kommunikation zwischen Browser und Webserver}
\begin{verbatim}
Client                Server
   |                     |
   |--- HTTP-REQUEST --->|
   |                     |
   |<-- HTTP-RESPONSE ---|
\end{verbatim}

\subsubsection*{Datenformat}

\begin{tabular}{ l|l |l}
 & HTTP-Request & HTTP-Response\\ \hline \hline
\textbf{Line} &
\begin{minipage}{3in}
\begin{verbatim}

POST     /datei.php     HTTP/1.1
 |            |            |
Methode      URI     HTTP-Version

\end{verbatim}
\end{minipage} &
\begin{minipage}{2in}
\begin{verbatim}

HTTP/1.1     200 OK
 |              |
Version    Statuscode

\end{verbatim}
\end{minipage} \\ \hline

\textbf{Header} &
\begin{minipage}{3in}
\begin{verbatim}

Host: kohnlehome.de
User-Agent: Mozilla...
...

\end{verbatim}
\end{minipage}  &
\begin{minipage}{2in}
\begin{verbatim}

Date: ...
Server: Apache
Content-Type: text/html
...

\end{verbatim}
\end{minipage}\\ \hline

\textbf{Body} &
\begin{minipage}{3in}
\begin{verbatim}

var1=wert1&var2=wert2

\end{verbatim}
\end{minipage} &
\begin{minipage}{2in}
\begin{verbatim}

<html>
...
</html>

\end{verbatim}
\end{minipage}\\ \hline \hline

& \begin{minipage}{3in}
\begin{verbatim}

Request-Methoden:
GET   (kein Body)
POST
PUT
...

\end{verbatim}
\end{minipage}

& \begin{minipage}{2in}
\begin{verbatim}

Response-Statuscodes:
200 OK
403 Forbidden
404 Not Found
500 Internal Server Error
...
\end{verbatim}
\end{minipage}

\end{tabular}


\subsubsection*{Übungen}
\begin{itemize}
\item HTTP-Vorgang mitsniffern
\item Mit Cisco-Packet-Tracer ein Netz mit PC, Laptop, Webserver, DNS-Server und DHCP-Server aufbauen.
\end{itemize}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% T R A N S P O R T P R O T O K O L L E
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Transportprotokolle (Layer 4)}
\subsection{Portnummern}
Auf jedem Host können gleichzeitig mehrere Server- und Clientprozesse (Anwendungen) laufen. Anhand der Portnummer kann ein Netzwerkprozess innerhalb eines Hosts identifiziert werden. Eine Portnummer hat eine Länge von 16 Bit, d.h. es gibt $2^{16}=65536$ verschiedene Portnummern.

\subsubsection*{Bereiche}
\begin{tabular}{c|c|c}
0 - 1023 & System Ports (Well Known Ports, registriert von IETF)) & Server\\ \hline
1024 - 49151 & User Ports (registriert von IANA) & Server + Clients\\ \hline
49152 - 65535 & Dynamic / Private Ports (nicht registriert) & Clients\\
\end{tabular}
\paragraph{Offizielle Liste}
\href{http://www.iana.org/assignments/port-numbers}{http://www.iana.org/assignments/port-numbers}

\subsection{UDP (User Datagram Protocol)}
\subsubsection*{Eigenschaften}
\begin{itemize}
\item verbindungslos, kein Verbindungsaufbau
\item wenig Overhead
\item jedes Segment ist unabhängig
\end{itemize}
\subsubsection*{UDP-Header}
\href{http://tools.ietf.org/html/rfc768}{RFC 768}
\begin{verbatim}
 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|     Source      |   Destination   |
|      Port       |      Port       |
+--------+--------+--------+--------+
|                 |                 |
|     Length      |     Checksum    |
+--------+--------+--------+--------+ 
\end{verbatim}
\begin{itemize}
\item Length: Länge in Byte von Header + Daten
\item Checksum: Prüfsumme über Layer3-Adressen, Protocol, UDP-Length
\end{itemize}

\newpage
\subsection{TCP (Transmission Control Protocol)}
\subsubsection*{TCP-Header}
\href{http://tools.ietf.org/html/rfc793}{RFC 793}
\begin{verbatim}
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |
|       |           |G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\end{verbatim}

\subsubsection*{Eigenschaften}
\begin{itemize}
\item Segmente sind mit fortlaufenden Sequenznummern durchnummeriert
\item Zuverlässigkeit durch Acknowledgements vom Empfänger und evtl. Retransmission durch Sender
\item Window (Fenstergröße): Anzahl der empfangenen Bytes, nach denen der Empfänger ACK sendet
\item Flusskontrolle (Stauvermeidung) durch variable Fenstergröße
\end{itemize}

\subsubsection*{Verbindungsaufbau(3-way-handshake)}
Client und Server übermitteln sich gegenseitig ihre Anfangssequenznummern, bevor die eigentlichen Nutzdaten in beide Richtungen gesendet werden können.
\begin{verbatim}
Client                           Server
   |                                |
   |--- SYN, seq=x ---------------->|
   |                                |
   |<-- SYN, ACK, seq=y, ack=x+1 ---|
   |                                |
   |--- ACK, seq=x+1, ack=y+1 ----->|
   |                                |
   |<========= Nutzdaten ==========>|  
\end{verbatim}

\subsubsection*{Übungen}
\begin{itemize}
\item 3-way-handshake mitsniffern: \href{http://kohnlehome.de/netz/Sniffer\_tcp\_3way\_handshake.pdf}{http://kohnlehome.de/netz/Sniffer\_tcp\_3way\_handshake.pdf}
\item 3-way-handshake im Packet-Tracer
\end{itemize}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% IPv4
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{IPv4 (Layer 3)}
\subsection{IP-Adressen, Subnetmasken, Netze}
\subsubsection*{Definitionen}
\paragraph{IP-Adresse} Die Länge einer IP-Adresse ist 32 Bit, d.h. es gibt $2^{32}$ verschiedene IP-Adressen. Üblicherweise werden IP-Adressen in vier Oktette mit jeweils 8 Bit zerlegt, jedes Oktett als Dezimalzahl dargestellt und zwischen die einzelnen Oktette jeweils ein Punkt geschrieben. Die kleinste IP-Adresse lautet also 0.0.0.0, die größte 255.255.255.255.

\paragraph{Subnetmaske} Eine Subnetmaske ist wie die IP-Adresse 32 Bit lang. Es gibt für Subnetmasken zwei Schreibweisen:
\begin{itemize}
\item Wie eine IP-Adresse, z.B. 255.255.128.0
\item Kurzschreibweise, z.B. /17, d.h. die ersten 17 Bits haben den Wert 1, die restlichen Bits den Wert 0
\end{itemize}

\paragraph{Netzbits und Hostbits} Die IP-Adresse besteht aus zwei Teilen. Die Bits des ersten (linken) Teils werden Netzbits genannt, die Bits des zweiten (rechten) Teils Hostbits. Wo genau die IP-Adresse geteilt wird, bestimmt die Subnetmaske. Diejenigen Bits der IP-Adresse, deren korrespondierende Bits der Subnetmaske den Wert 1 haben, sind Netzbits. Diejenigen Bits der IP-Adresse, deren korrespondierende Bits der Subnetmaske den Wert 0 haben, sind Hostbits.

\paragraph{Netz} Alle IP-Adressen, die in den Netzbits übereinstimmen, bilden mit ihrer gemeinsamen Subnetmaske ein Netz.


\paragraph{Netzadresse} Die Netzadresse bzw. Netz-ID ist diejenige IP-Adresse eines Netzes, deren Hostbits alle den Wert 0 haben. Kein Host darf eine Netzadresse als IP-Adresse verwenden.

\paragraph{Broadcastadresse} Die Broadcastadresse ist diejenige IP-Adresse eines Netzes, deren Hostbits alle den Wert 1 haben. Kein Host darf eine Broadcastadresse als IP-Adresse verwenden.

\paragraph{Hostadressen} Alle IP-Adressen eines Netzes, die nicht Netzadresse und nicht Broadcastadresse sind, werden Hostadressen genannt und können Hosts zugewiesen werden.

\subsubsection*{Beispiel}
\begin{verbatim}
                   ||              Dual / Binär            ||     Dezimal
===================++======================================++================
                   ||<----- Netzbits ------>|<- Hostbits ->||
       IP-Adresse  || 01010000.01010100.0110|1011.10110011 ||  80. 84.107.179
      Subnetmaske  || 11111111.11111111.1111|0000.00000000 || 255.255.240.  0
===================++=======================|==============++================
      Netzadresse  || 01010000.01010100.0110|0000.00000000 ||  80. 84. 96.  0
   1. Hostadresse  ||                       |0000.00000001 ||  80. 84. 96.  1
   2. Hostadresse  ||                       |0000.00000010 ||  80. 84. 96.  2
   3. Hostadresse  ||                       |0000.00000011 ||  80. 84. 96.  3
         ...       ||          ...          |     ...      ||       ...
         ...       ||          ...          |     ...      ||       ...
letzte Hostadresse ||                       |1111.11111110 ||  80. 84.111.254
  Broadcastadresse || 01010000.01010100.0110|1111.11111111 ||  80. 84.111.255
                   ||<----- Netzbits ------>|<- Hostbits ->||
===================++======================================++================
\end{verbatim}

\subsubsection*{Subnetmasken und Netzgrößen}
Die Subnetmaske bestimmt die Größe (Anzahl der IP-Adressen) eines Netzes.

\begin{tabular}{r|r|l}
kurz & dezimal & Netzgröße \\ \hline \hline
\textbf{/0} & \textbf{0.0.0.0} & $2^{32}$ \\
/1 & 128.0.0.0 & $2^{31}$ \\
/2 & 192.0.0.0 & $2^{30}$ \\
/3 & 224.0.0.0 & $2^{29}$ \\
/4 & 240.0.0.0 & $2^{28}$ \\
/5 & 248.0.0.0 & $2^{27}$ \\
/6 & 252.0.0.0 & $2^{26}$ \\
/7 & 254.0.0.0 & $2^{25}$ \\
\textbf{/8} & \textbf{255.0.0.0} & $2^{24}$ \\
/9 & 255.128.0.0 & $2^{23}$ \\
/10 & 255.192.0.0 & $2^{22}$ \\
/11 & 255.224.0.0 & $2^{21}$ \\
/12 & 255.240.0.0 & $2^{20}$ \\
/13 & 255.248.0.0 & $2^{19}$ \\
/14 & 255.252.0.0 & $2^{18}$ \\
/15 & 255.254.0.0 & $2^{17}$ \\
\textbf{/16} & \textbf{255.255.0.0} & $2^{16}$ \\
/17 & 255.255.128.0 & $2^{15}$ \\
/18 & 255.255.192.0 & $2^{14}$ \\
/19 & 255.255.224.0 & $2^{13}$ \\
/20 & 255.255.240.0 & $2^{12}$ \\
/21 & 255.255.248.0 & $2^{11}$ \\
/22 & 255.255.252.0 & $2^{10} = 1024$ \\
/23 & 255.255.254.0 & $2^{9} = 512$ \\
\textbf{/24} & \textbf{255.255.255.0} & $2^{8} = 256$ \\
/25 & 255.255.255.128 & $2^7 = 128$ \\
/26 & 255.255.255.192 & $2^6 = 64$ \\
/27 & 255.255.255.224 & $2^5 = 32$ \\
/28 & 255.255.255.240 & $2^4 = 16$ \\
/29 & 255.255.255.248 & $2^3 = 8$ \\
/30 & 255.255.255.252 & $2^2 = 4$ \\ \hline
/31 & 255.255.255.254 & $2^1 = 2$ \\
/32 & 255.255.255.255 & $2^0 = 1$
\end{tabular}

\subsubsection*{Liste mit Subnetzen eines /24-Netzes}
\href{http://kohnlehome.de/netz/subnetting.pdf}{http://kohnlehome.de/netz/subnetting.pdf}


\subsubsection*{Übung}
\href{http://kohnlehome.de/netz/uebung-ip-adressen.pdf}{http://kohnlehome.de/netz/uebung-ip-adressen.pdf}

\subsubsection*{IP-Rechner}
\href{http://kohnlehome.de/java/IPRechner.jar}{http://kohnlehome.de/java/IPRechner.jar}

\subsection{VLSM (Variable Length Subnet Mask)}
Teilen eines Netzes in unterschiedlich große Teilnetze.
\subsubsection*{Beispiel}
Das Netz 21.22.32.0 /20 soll in folgende Subnetze geteilt werden:
\begin{itemize}
\item 5 Netze für je 20 Hosts
\item 1 Netz für 200 Hosts
\item 2 Netze für je 1000 Hosts
\item 3 Netze für P2P-Verbindungen
\end{itemize}

\begin{tabular}{r|r|r|r|r}
benötigte Hosts & Netzgröße &  \multicolumn{2}{c|}{Subnetmaske} & Netzadresse\\ \hline \hline
1000 & 1024 & /22 & 255.255.252.0 & 21.22.32.0 \\
1000 & 1024 & /22 & 255.255.252.0 & 21.22.36.0 \\
 200 &  256 & /24 & 255.255.255.0 & 21.22.40.0 \\
  20 &   32 & /27 & 255.255.255.224 & 21.22.41.0 \\
  20 &   32 & /27 & 255.255.255.224 & 21.22.41.32 \\
  20 &   32 & /27 & 255.255.255.224 & 21.22.41.64 \\
  20 &   32 & /27 & 255.255.255.224 & 21.22.41.96 \\
  20 &   32 & /27 & 255.255.255.224 & 21.22.41.128 \\
   2 &    4 & /30 & 255.255.255.252 & 21.22.41.160 \\
   2 &    4 & /30 & 255.255.255.252 & 21.22.41.164 \\
   2 &    4 & /30 & 255.255.255.252 & 21.22.41.168 \\ \hline
     &      &     &                 & 21.22.41.172
\end{tabular}

\subsection{Klassifizierung von IP-Adressen}

\subsubsection*{Private IP-Adressen}
Werden im Internet nicht weitergeroutet. Können in Verbindung mit NAT in privaten Netzen verwendet werden.
\begin{itemize}
\item 10.0.0.0 /8
\item 172.16.0.0 /12
\item 192.168.0.0 /16
\end{itemize}

\subsubsection*{Sonstige besondere IP-Bereiche nach \href{http://tools.ietf.org/html/rfc6890}{RFC6890}}
\begin{tabular}{l l}
0.0.0.0/8     &      "This host on this network"\\
100.64.0.0/10    &     Shared Address Space     \\
127.0.0.0/8    &     Loopback                   \\
169.254.0.0/16  &    Link Local                \\
192.0.0.0/24    &    IETF Protocol Assignments \\
192.0.2.0/24    &    TEST-NET-1                 \\
192.88.99.0/24  &    6to4 Relay Anycast        \\
198.18.0.0/15   &    Benchmarking             \\
198.51.100.0/24  &   TEST-NET-2                \\
203.0.113.0/24   &   TEST-NET-3                \\
224.0.0.0/4      &   Multicast                  \\
240.0.0.0/4      &   Reserved   \\
255.255.255.255/32 & Limited Broadcast    
\end{tabular}

\subsubsection*{IP-Klassen}
(obsolet, nur noch in wenigen Anwendungen relevant)\\
\begin{tabular}{c|l|r|c}
Klasse & binär & \multicolumn{1}{c|}{Bereich} & Standardsubnetmaske\\ \hline \hline
A & 0... & 0.0.0.0 - 127.255.255.255 & /8\\
B & 10... & 128.0.0.0 - 191.255.255.255 & /16\\
C & 110... & 192.0.0.0 - 223.255.255.255 & /24\\ \hline
D & 1110... & 224.0.0.0 - 239.255.255.255 & - (Multicast)\\
E & 1111... & 240.0.0.0 - 255.255.255.255 & - (Reserved for Future Use)\\
\end{tabular}

\subsection{IPv4-Header}
\href{http://tools.ietf.org/html/rfc791}{RFC791}
\begin{verbatim}
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\end{verbatim}

\begin{itemize}
\item TTL (Time to Live): Jeder Router vermindert diesen Wert um eins. Ist TTL=0, wird das Paket verworfen und der Absender per ICMP darüber informiert.
\item Protocol: Next Level Protocol (ICMP=1, TCP=6, UDP=17, ...)
\end{itemize}

\subsubsection*{Übung} 
Verifizieren Sie durch Sniffern die Protocol-Werte im IP-Header für ICMP, TCP und UDP.

\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ROUTING
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Routing (Layer 3)}
\subsection{Grundlagen}
\subsubsection*{Begriff} Jedes einzelne IP-Paket wird anhand seiner Ziel-IP-Adresse vom Sendergerät bis zum Empfängergerät weitergeleitet (geroutet).

\subsubsection*{Routing eines sendenden Endgeräts} Der Sender versucht, ein IP-Paket mit Hilfe der OSI-Schicht 2 direkt zum Empfängergerät zu schicken, falls sich die Ziel-IP-Adresse im eigenen Netz befindet. Befindet sich die Ziel-IP-Adresse nicht im eigenen Netz, schickt der Sender das IP-Paket mit Hilfe der OSI-Schicht 2 zum Gateway.

\subsubsection*{Routing eines Routers} Ein Router leitet Pakete, deren Ziel-IP-Adresse nicht mit der eigenen IP-Adresse übereinstimmen, weiter, d.h. er routet sie. Dazu sucht er in seiner Routingtabelle einen Eintrag (Route) zu einem Netz, in dem die Ziel-IP-Adresse enthalten ist und schickt das IP-Paket an der entsprechenden Schnittstelle raus.

\subsubsection*{Routingtabellen}
Eine Routingtabelle enthält im Allgemeinen mehrere Zeilen (Routen). Jede Zeile enthält folgende Informationen: Netzadresse, Subnetmaske und Name der Ausgangsschnittstelle oder Next-Hop-IP-Adresse.

\subsection{statische Routen}
Statische Routen werden vom Administrator konfiguriert. Eine spezielle statische Route ist die Default-Route. Sie gibt an, wo Pakete hingeschickt werden sollen, wenn kein zur Ziel-IP-Adresse des Pakets passender Eintrag in der Routingtabelle existiert.

\subsubsection*{Konfiguration statischer Routen im Packet-Tracer}
{\includegraphics[scale=0.5]{pt-konfig-statische-route.png}}

\subsubsection*{Übungen mit Packet-Tracer}
\begin{itemize}
\item Netz mit einem Router aufbauen und Routingtabellen anschauen.
\item Netz mit zwei Routern aufbauen und statische Routen konfigurieren.
\item Netz mit zwei Routern aufbauen und Default-Routen konfigurieren.
\item Netz mit mehreren Routern aufbauen und mit statischen Routen incl. Default-Routen unterschiedliche Hin- und Rückwege konfigurieren.
\end{itemize}


\subsection{dynamische Routen}
Dynamische Routen werden durch Routingprotokolle (z.B. RIP, OSPF, EIGRP) automatisch in die Routingtabellen eingetragen. Über Routingprotokolle tauschen Router untereinander Informationen über ihnen bekannte Netze aus.

\subsubsection*{Konfiguration von RIP im Packet-Tracer}
{\includegraphics[scale=0.5]{pt-konfig-rip.png}}
\paragraph*{Bedeutung des network-Befehls bei RIP}
\begin{itemize}
\item Alle Schnittstellen des Routers, deren IP-Adressen im angegebenenen Netz liegen, senden RIP-Updates
\item Alle Schnittstellen des Routers, deren IP-Adressen im angegebenenen Netz liegen, empfangen RIP-Updates
\item Alle anliegenden Netze des Routers, die vollständig im angegebenenen Netz liegen, werden in RIP-Updates integriert
\end{itemize}

\subsubsection*{Übungen mit Packet-Tracer}
\begin{itemize}
\item Netz mit zwei Routern aufbauen und mit RIP konfigurieren.
\item Netz mit mehreren Routern aufbauen und mit RIP konfigurieren.
\end{itemize}


\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ICMP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{ICMP - Internet Control Message Protocol (Layer 3)}
Hilfsprotokoll für das IP-Protokoll, mit dem Router Fehlermeldungen versenden können.

\subsubsection*{Aufbau eines ICMP-Pakets}
\begin{verbatim}
 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|   Typ  |  Code  |    Prüfsumme    |
+--------+--------+--------+--------+
|               Daten               |
                 ...
+--------+--------+--------+--------+ 
\end{verbatim}

\subsubsection*{Verschiedene Arten von ICMP-Meldungen}
\begin{tabular}{l|c}
Art & Typ  \\ \hline \hline
Echo & 8 \\
Echo Reply & 0  \\
Time Exceeded & 11  \\
Destination Unreachable & 3  \\
\end{tabular}

\subsubsection*{Windows-Befehle}
\begin{tabular}{l l}
\texttt{ping} & Verbindung auf Layer 3 prüfen\\
\texttt{tracert} & Alle Router aud dem Weg zum Ziel anzeigen\\
\texttt{pathping} & Alle Router aud dem Weg zum Ziel anzeigen
\end{tabular}

\subsubsection*{Übungen}

\begin{itemize}
\item ping mitsniffern: \href{http://kohnlehome.de/netz/Sniffer\_ping.pdf}{http://kohnlehome.de/netz/Sniffer\_ping.pdf}
\item tracert und pathping mitsniffern
\item ping und tracert im Packet-Tracer
\end{itemize}


\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% NAT und Portforwarding
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{NAT und Portforwarding (Layer 3,4)}
\subsection{NAT (Network Address Translation)}
IP-Pakete mit privaten Ziel-IP-Adressen werden im Internet nicht weitergeroutet. Damit Clientgeräte mit privaten IP-Adressen trotzdem mit öffentlichen Servern im Internet kommunizieren können, ersetzt ein NAT-Router (z.B. ein "DSL-Router") die private Quell-IP-Adresse im vom Clientgerät gesendeten Paket durch die öffentliche IP-Adresse seiner WAN-Schnittstelle. Außerdem ersetzt er eventuell den Quellport und merkt sich die Kombination aus Quell-IP-Adresse, originalem Quell-Port und neuem Quellport, damit er im IP-Paket, das der Server als Antwort schickt, die Ersetzungen wieder in der anderen Richtung durchführen kann. Die NAT-Funktionalität sorgt dafür, dass sich viele Rechner im LAN eine einzige öffentliche IP-Adresse teilen können und ist der Grund dafür, dass es weltweit immer noch (aber nicht mehr lang!) genug IPv4-Adressen gibt.

\subsubsection*{Flash-Animation}
\href{http://kohnlehome.de/netz/Masquerading.swf}{http://kohnlehome.de/netz/Masquerading.swf}

\subsubsection*{Übung mit Packet-Tracer}
\begin{itemize}
\item NAT-Vorgang mit linksys-Router simulieren
\end{itemize}

\subsection{Portforwarding}
Clientanwendungen in privaten Netzen hinter einem NAT-Router können auf Serveranwendungen im Internet zugreifen. Aber Server, die sich hinter einem NAT-Router im LAN befinden, sind von Clients aus dem Internet nur erreichbar, wenn auf dem NAT-Router Portforwarding konfiguriert ist.

\subsubsection*{Flash-Animation}
\href{http://kohnlehome.de/netz/PortForwarding.swf}{http://kohnlehome.de/netz/PortForwarding.swf}

\subsubsection*{Übungen mit Packet-Tracer}
\begin{itemize}
\item Portforwarding  mit linksys-Router konfigurieren
\item Umfangreiches Beispiel mit mehreren Routern, Routing, NAT, Portforwarding
\end{itemize}


\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ethernet
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Ethernet - IEEE 802.3 (Layer 1,2)}
\subsection{Ethernet-Verkabelung (Layer 1)}
\subsubsection*{Verschiedene Technologien}
\begin{tabular}{c||c|c}
 & Twisted-Pair-Kupferkabel  & Lichtwellenleiter aus Glasfaser\\
 & mit RJ-45 bzw. 8P8C & mit diversen Steckverbindern\\
 & Steckverbindern & Single-Mode / Multi-Mode\\ 
 & max. 100m & bis zu 40km \\ \hline\hline
 
10 Mbit/s & 10BASE-T, 4 Adern & \\
Ethernet & TIA-568 A/B & \\ \hline

100 Mbit/s & 100BASE-TX, 4 Adern  & 100BASE-FX\\
FastEthernet & TIA-568 A/B  & \\ \hline

1 Gbit/s & 1000BASE-T, 8 Adern & 1000BASE-SX\\
GigabitEthernet & &  1000BASE-LX\\\hline

10 Gbit/s & 10GBASE-T & 10GBASE-LX4\\
10 GbE & & \\
\end{tabular}

\subsubsection*{Strukturierte Verkabelung}
\begin{itemize}
\item Primärverkabelung: Gebäude - Gebäude
\item Sekundärverkabelung (vertikale Verkabelung): Hauptverteiler - Etagenverteiler
\item Tertiärverkabelung (horizontale Verkabelung): Patchfeld im Etagenverteiler - Wandanschlussdose 
\item Arbeitsplatzverkabelung: Wandanschlussdose - PC 
\end{itemize}

\subsubsection*{Straight-Through vs. Crossover}
Gleichartige Geräte werden mit einem Crossover-Kabel (X) verbunden, verschiedenartige Geräte mit einem Straight-Trough-Kabel ($||$). Moderne Geräte schalten automatisch um.
\begin{itemize}
\item Geräte mit Netzwerkkarte: PC, Server, Router
\item Geräte ohne Netzwerkkarte: Switch, Hub
\end{itemize}

\begin{tabular}{c|| c c | c c}
     & PC & Router & Hub & Switch\\ \hline \hline
 PC & X & X & $||$ & $||$ \\
 Router & X & X & $||$ & $||$ \\ \hline
 Hub & $||$ & $||$ & X & X \\
 Switch & $||$ & $||$ & X & X 
\end{tabular}


\subsubsection*{Pinbelegung der RJ45-Stecker}
\begin{minipage}[t]{0.3\textwidth}
\paragraph*{TIA-568-A}
\begin{tabular}{l l}
Pin 1 & Grün-Weiß\\
Pin 2 & Grün\\
Pin 3 & Orange-Weiß\\
Pin 4 & Blau\\
Pin 5 & Blau-Weiß\\
Pin 6 & Orange\\
Pin 7 & Braun-Weiß\\
Pin 8 & Braun
\end{tabular}
\end{minipage}
%second column
\begin{minipage}[t]{0.3\textwidth}
\paragraph*{TIA-568-B}
\begin{tabular}{l l}
Pin 1 & Orange-Weiß\\
Pin 2 & Orange\\
Pin 3 & Grün-Weiß\\
Pin 4 & Blau\\
Pin 5 & Blau-Weiß\\
Pin 6 & Grün\\
Pin 7 & Braun-Weiß\\
Pin 8 & Braun
\end{tabular}
\end{minipage}
%third column
\begin{minipage}[t]{0.3\textwidth}
\paragraph*{X-Over-Kabel}
\begin{tabular}{l l}
Ein Stecker mit & TIA-568-A,\\
der andere mit & TIA-568-B
\end{tabular}
\end{minipage}

\subsubsection*{Videos}
\begin{itemize}
\item RJ45 plug on UTP cable - Installing: \href{http://www.youtube.com/watch?v=v7H8OoKA4F8}{http://www.youtube.com/watch?v=v7H8OoKA4F8}
\item How to punch wires into patch panels: \href{http://www.youtube.com/watch?v=D8PnNuDbkAw}{http://www.youtube.com/watch?v=D8PnNuDbkAw}
\item Netzwerkdose selbst aufklemmen - Hausbau: \href{http://www.youtube.com/watch?v=6_zYIHcQeEs}{http://www.youtube.com/watch?v=6\_zYIHcQeEs}
\end{itemize}



\subsection{CSMA/CD (Carrier Sense Multiple Access / Collision Detection - Layer 1)}
\begin{itemize}
\item Carrier Sense: Sender sendet erst, wenn die Leitung frei ist.
\item Multiple Access: Mehrere Geräte teilen sich das selbe Medium.
\item Collision Detection: Wenn eine Kollision auftritt, d.h. wenn die Frames mehrerer Sender "'zusammenstoßen"', und der Sender diese Kollison erkennt, sendet er ein "'Jam-Signal"', damit alle anderen Geräte auch erkennen, dass eine Kollision aufgetreten ist und wartet eine zufällige Zeitspanne, bis er wieder versucht, das Frame zu senden. Gibt es im Netz keine Hubs mehr, sondern nur noch Switches im Vollduplexbetrieb, so treten keine Kollisionen auf.
\end{itemize}



\subsection{Ethernet-Switching (Layer 2)}
\subsubsection*{MAC-Adressen}
Jede Ethernet-NIC (Network Interface Card) hat eine weltweit einmalige 48 Bit lange MAC-Adresse. Die ersten 24 Bit der MAC-Adresse kennzeichnen den Hersteller (OUI – Organizationally Unique Identifier), die restlichen 24 Bit bilden die individuelle Kennung der NIC. MAC-Adressen werden üblicherweise mit Hexadezimalziffern dargestellt. Dabei sind verschiedene Schreibweisen geläufig:
\begin{itemize}
\item \texttt{00:1e:8c:86:4e:d3}
\item \texttt{00-1e-8c-86-4e-d3}
\item \texttt{001e.8c86.4ed3}
\end{itemize}

\subsubsection*{Windows-Kommando zum Ermitteln der MAC-Adresse}
\texttt{ipconfig /all}

\subsubsection*{spezielle MAC-Adressen}

\begin{tabular}{cl}
\texttt{ff:ff:ff:ff:ff:ff} & Broadcast\\ \hline

\texttt{01:00:5e:00:00:00}& IPv4-Multicast\\
 -  & die letzten 23 Bit entsprechen den letzen 23 Bit der IP-Adresse\\
\texttt{01:00:5e:7f:ff:ff} & Bsp: RIPv2-IPv4: 224.0.0.9 $\Rightarrow$ RIPv2-MAC: 01:00:5e:00:00:09\\ \hline

\texttt{33:33:00:00:00:00}  & IPv6-Multicast\\
- &die letzten 32 Bit entsprechen den letzen 32 Bit der IP-Adresse\\
\texttt{33:33:ff:ff:ff:ff} & Bsp: RIPng-IPv6: ff02::9 $\Rightarrow$ RIPng-MAC: 33:33:00:00:00:09
\end{tabular}

\subsubsection*{Ethernet II - Frame}

\begin{tabular}{|c|c|c|c|c|}
\hline
\multicolumn{3}{|c|}{\cellcolor{rot}Ethernet-Header} & \cellcolor{blau} & \cellcolor{rot}Ethernet-Trailer\\ \hhline{---~-}
\cellcolor{rot}Ziel-MAC & \cellcolor{rot}Quell-MAC & \cellcolor{rot}Typ & \multirow{-2}{*}{\cellcolor{blau}Daten} & \cellcolor{rot}FCS \\\hline
\end{tabular}

\begin{itemize}
\item Typ: Kennzeichnung des Inhalts des Frames (Daten), z.B. 0x0800 - IPv4, 0x0806 - ARP, 	0x86DD - IPv6, 0x8100 - mit VLAN-Tag
\item FCS (Frame Check Sequence): Der Sender berechnet die FCS, der Empfänger vergleicht die FCS mit seiner eigenen Berechnung. Falls die einen anderen Wert ergibt, wird das Frame verworfen.
\end{itemize}

\subsubsection*{Switching-Vorgang}
Jeder Switch hat eine MAC-Address-Table, in der die zu den Switchports zugehörigen MAC-Adressen gespeichert sind. Empfängt ein Switch ein Frame, speichert er dessen Quell-MAC zusammen mit dem Eingangsport in der MAC-Address-Table. Findet er die Ziel-MAC in der Tabelle, so sendet er das Frame nur am entsprechenden Port raus. Findet er die Ziel-MAC nicht in seiner Tabelle, so sendet er das Frame an allen Ports ausser dem Eingangsport raus.

\subsubsection*{Übungen}
\begin{itemize}
\item Simulation mit zwei Switches an der Tafel
\item MAC-Address-Tables im Packet-Tracer
\end{itemize}

\subsubsection*{Switching-Modi}
\begin{itemize}
\item Cut-Through / Fast-Forward: Frame wird nach dem Lesen der Ziel-MAC weitergeleitet
\item Cut-Through / Fragment-Free: Frame wird nach dem Lesen der ersten 64 Byte weitergeleitet
\item Store and Forward: Frame wird nach Berechnung der FCS weitergeleitet
\end{itemize}

\subsection{Kollisions- und Broadcastdomänen}
\begin{itemize}
\item Kollisionsdomäne: begrenzt durch Switch und Router
\item Broadcastdomäne: begrenzt durch Router
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ARP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{ARP - Address Resolution Protocol (Layer 2)}
Zu jeder Ethernet-NIC gehört eine arp-Tabelle, in der Paare aus MAC- und IP-Adressen anderer Hosts gespeichert sind. Möchte ein Gerät ein Paket an eine bestimmte IP-Adresse senden, so muss es dieses Paket in ein Frame verpacken. Dazu benötigt es die MAC-Adresse des Empfängergeräts bzw. des Routers. Diese MAC-Adresse wird als Ziel-MAC in den Ethernet-Header eingetragen. Fehlt der entsprechende Eintrag in der arp-Tabelle, wird ein arp-Request als Broadcast gesendet ("'Wer hat die IP ..."'). Der Host mit der entsprechenden IP-Adresse antwortet mit einem arp-Reply.

\begin{verbatim}
Host 1                                 Host 2
  |             ARP-Request              |
  |------------------------------------->|
  |  Welche MAC hat Rechner mit IP ...?  |
  |                                      |
  |                                      |
  |              ARP-Reply               |
  |<-------------------------------------|
  |           Ich habe MAC ...           |
 
\end{verbatim}

\subsubsection*{Windows-Befehle}
\begin{tabular}{l l}
\texttt{arp -a} & zeigt arp-Tabelle an\\
\texttt{arp -d} & löscht arp-Tabelle
\end{tabular}

\subsubsection*{Übungen}
\begin{itemize}
\item ARP-Vorgang im Packet-Tracer
\item ARP-Vorgang mitsniffern
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Spanning Tree Protocol
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{STP - Spanning Tree Protocol - IEEE 802.1D (Layer 2)}
\subsubsection*{Durch redundante Pfade (loops) erzeugte Probleme}
\begin{itemize}
\item Broadcast Storm
\item Mehrfache Übertragung von Frames
\item inkorrekte Einträge in MAC-Address-Tables
\end{itemize}

\subsubsection*{Lösung}
Aufbruch von Loops durch Blockieren einzelner Switchports mittels STP.

\subsubsection*{Vorgehensweise}
Alle Switches senden alle zwei Sekunden BPDUs (Bridge Protocol Data Units) und werten die empfangenen BPDUs aus:
\begin{enumerate}
\item eine \textbf{Root-Bridge} wählen (Switch mit kleinster Bridge-ID)
\item pro Switch einen \textbf{Root-Port} wählen (Port am nächsten zur Root-Bridge)
\item pro Segment (Leitung) einen \textbf{Designated-Port} wählen (Port am nächsten zur Root-Bridge)
\item alle restliche Ports \textbf{blockieren}
\end{enumerate}

\subsubsection*{Übungen}
\begin{itemize}
\item Simulation mit mehreren Switches an der Tafel
\item Spanning-Tree-Protocol im Packet-Tracer
\end{itemize}



\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% VLANS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{VLANS (Layer 2)}
Durch "virtuelles Zersägen" von Switches wird ein physikalisches Netz in mehrere virtuelle Teilnetze geteilt, zwischen denen die Switches keine Frames austauschen. Jedes VLAN hat eine eigene MAC-Address-Table. Üblicherweise erhalten unterschiedliche VLANs unterschiedliche IP-Netze zugewiesen, sodass zwischen den VLANs mit einem Router geroutet werden muss.

\subsection{Konfiguration von VLANS an Switches}
\begin{itemize}
\item VLANs erstellen
\item Switchports den VLANs zuweisen (Access-Ports)
\end{itemize}

\subsubsection*{Beispiele}
\begin{itemize}
\item mehrere VLANs an einem Switch
\item mehrere VLANs an zwei Switches
\item mehrere VLANs an zwei Switches mit Router
\end{itemize}

\subsection{Trunking - IEEE 802.1q}
Verbindungsleitungen zwischen zwei Switches können als Trunk-Leitungen konfiguriert werden. Über Trunk-Leitungen werden Frames aus verschiedenen VLANs transportiert. Damit der empfangende Switch ein Frame wieder zum richtigen VLAN zuordnen kann, werden Frames auf Trunk-Leitungen "getaggt", d.h. ihre VLAN-ID wird in den Frame-Header geschrieben. Der empfangende Switch entfernt das Tag wieder.

Auch eine Leitung zwischen einem Switch und einem Router kann als Trunk-Leitung konfiguriert werden. Dazu muss auf der physikalischen Schnittstelle des Routers für jedes VLAN eine eigene Subschnittstelle konfiguriert werden. Jede Subschnittstelle wird einem speziellen VLAN zugewiesen und erhält eine eigene IP-Adresse.

\subsubsection*{Format eines getaggten Frames}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
\multicolumn{5}{|c|}{\cellcolor{rot}Ethernet-Header} & \cellcolor{blau} & \cellcolor{rot}Ethernet-Trailer\\ \hhline{-----~-}
\cellcolor{rot}Ziel-MAC & \cellcolor{rot}Quell-MAC & \cellcolor{gelb}Typ1 & \cellcolor{gelb}TCI & \cellcolor{rot}Typ2 & \multirow{-2}{*}{\cellcolor{blau}Daten} & \cellcolor{rot}FCS \\\hline
\end{tabular}

\begin{itemize}
\item Typ1: 0x8100 (Kennzeichnung als getaggt)
\item TCI: 3 Bit Priority Code Point, 1 Bit Drop Eligible Indicator, 12 Bit VLAN-ID
\item Typ2: Kennzeichnung des Inhalts (Daten)
\end{itemize}

\subsubsection*{Beispiele}
\begin{itemize}
\item Trunk-Leitung zwischen zwei Switches
\item Trunk-Leitung zwischen Switch und Router
\end{itemize}


\subsection{Layer-3-Switch}
Ein Layer-3-Switch ist ein Switch mit Routingfunktionalität. Der interne Router kann zwischen den einzelnen VLANs des Switches routen. Dazu wird jedem VLAN eine IP-Adresse zugewiesen. Das ist die IP-Adresse der entsprechenden internen Routerschnittstelle.\\

{\includegraphics[scale=0.6]{layer-3-switch.png}}

\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% WLAN
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{WLAN - IEEE 802.11 (Layer 1,2)}
\subsection{Standards}
\begin{tabular}{l | r | r}
Standard & Bandbreite & Frequenzband\\ \hline \hline
IEEE 802.11a & 54 Mbit/s & 5 GHz\\
IEEE 802.11b & 11 Mbit/s & 2,4 GHz\\
IEEE 802.11g & 54 Mbit/s & 2,4 GHz\\
IEEE 802.11n & 600 Mbit/s & 2,4 GHz / 5 GHz\\
IEEE 802.11ac & 1,3 Gbit/s & 5 GHz\\
IEEE 802.11ad & 7 Gbit/s & 60 GHz
\end{tabular}


\subsection{Authentication + Encryption}
\begin{itemize}
\item Authentication: Beweisen, dass man derjenige ist, der man behauptet zu sein.
\item Encryption: Sender verschlüsselt Daten, damit sie auf dem Übertragungsweg nicht von Dritten gelesen werden können. Der Empfänger entschlüsselt die Daten wieder.
\end{itemize}

\begin{tabular}{l l c}
Authentication & Encryption & Sicherheit\\\hline
keine & keine & \texttt{|} \\
WEP & keine / WEP & \texttt{|} \\
WPA & TKIP & \texttt{|} \\
WPA2 & AES & \texttt{V} 
\end{tabular}

\subsection{WLAN-Geräte}
\begin{itemize}
\item NIC (PCI, PCMCIA, USB)
\item Access-Point: Schnittstelle zwischen 802.11 WLAN und 802.3 kabelgebundenem Ethernet
\item WLAN-Router: Kombinationsgerät enthält Access-Point, Switch, Router, DSL-Modem, ...
\end{itemize}

\subsection{WLAN-Topologien}
\begin{itemize}
\item Ad-hoc-Modus IBSS (Independent Basic Service Set): ohne Access-Point
\item Infrastrukturmodus BSS (Basic Service Set): mit zentralem Acces-Point
\item Infrastrukturmodus ESS (Extended Service Set): mehrere über ein DS (Distribution System) zusammenhängende BSS
\item WDS-Bridge (Point-to-Point): P2P-Verbindung zweier als "Bridge" fungierender Access-Points
\item WDS-Repeater (Point-to-Point): Erweiterung eines BSS durch einen als Repeater fungierenden Access-Point
\end{itemize}

\subsection{Übungen}
\begin{itemize}
\item Infrastrukturmodus im Packet-Tracer
\end{itemize}

\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% IPv6
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{IPv6 (Layer 3)}

\subsection{Anzahl}
Es gibt $2^{128}$ verschiedene Adressen. Das entspricht  $10^{17}$ Adressen pro $mm^{2}$ Erdoberfläche.
\subsection{Adressnotation}
\begin{itemize}
\item hexadezimal, 8 Blöcke: {\tt0011:2233:4455:6677:8899:AABB:CCDD:EEFF /64}
\item führende Nullen innerhalb eines Blocks können weggelassen werden
\item zusammenhängende Blöcke aus Nullen (0000) können durch :: ersetzt werden
\item URL-Notation: {\tt http://[1234::5]:80}
\item Subnetmasken: nur Slash-Schreibweise, meist {\tt /64}
\end{itemize}

\subsection{Adressbereiche}


\begin{tabular}{l l | r l}
\multicolumn{2}{c|}{ IPv6-Bereich}   & vergleichbarer IPv4-Bereich\\\hline \hline

unknown & {\tt ::}                   & {\tt 0.0.0.0} \\ \hline

localhost & {\tt ::1 /128}           & {\tt 127.0.0.1} \\ \hline

link-local & {\tt FE80:: /10}        & {\tt 169.254.0.0 /16} \\
\multicolumn{2}{c|}{ Verbindungslokale IPv6-Adresse}  & APIPA\\ \hline

             &                        & {\tt 10.0.0.0 /8} \\
unique local & {\tt FD00:: /8}        & {\tt 172.16.0.0 /12} \\
             &                        & {\tt 192.168.0.0 /16} \\
             &                        & private IP-Adressen\\ \hline
             
global unicast & {\tt 2000:: /3}      & öffentliche IP-Adressen \\ \hline \hline

multicast & {\tt FF00:: /8}        & {\tt 224.0.0.0 /4} \\ \hline

subnet broadcast & {\tt FF02::1}        & {\tt 255.255.255.255} \\ \hline

all routers      & {\tt FF02::2}        & {\tt 255.255.255.255} \\ \hline

ospf             & {\tt FF02::5}        & {\tt 224.0.0.5} \\ 
             & {\tt FF02::6}        & {\tt 224.0.0.6} \\ \hline

ripv2             & {\tt FF02::9}        & {\tt 224.0.0.9} \\ \hline

eigrp             & {\tt FF02::A}        & {\tt 224.0.0.10} \\ \hline
\end{tabular}



\subsection{ICMPv6}
\subsubsection*{ICMPv6 Error Messages}
\begin{itemize}
\item Destination Unreachable
\item Packet Too Big
\item Time Exceeded
\item Parameter Problem
\end{itemize}

\subsubsection*{ICMPv6 Informational Messages}
\begin{itemize}
\item Echo Request
\item Echo Reply
\end{itemize}

\subsubsection*{ICMPv6 Informational Messages NDP (Neighbor Discovery Protocol)}
\begin{itemize}
\item Router Solicitation
\item Router Advertisement
\item Neighbor Solicitation (vgl. IPv4 ARP-Request)
\item Neighbor Advertisement (vgl. IPv4 ARP-Reply)
\item Redirect Message
\end{itemize}

\subsection{SLAAC (Stateless Address Autoconfiguration)}
\begin{enumerate}
\item Client weist sich selbst link-local-Adresse zu (FE80:: /10)
\item Client schickt Router Solicitation an FF02::2 (alle Router)
\item Router schickt Router Advertisement incl. Präfix zurück an FF02::1 (Subnet Broadcast)
\item Client verwendet Präfix + Interface-ID nach EUI-64
\end{enumerate}

\paragraph{EUI-64}
Bsp. MAC 0123.4567.89AB\\
linke Hälfte der MAC + FFFE + rechte Hälfte der MAC = 0123:46FF:FE67:89AB\\
7.Bit invertieren = 0323:46FF:FE67:89AB\\

\subsection{DHCPv6}
M- und O-Flags stehen im Router-Advertisement\\
M = Managed Address Configuration\\
O = Other Configuration\\

\begin{tabular}[t]{c|c|c|c|c}
M-Flag & O-Flag & & Vom Router & Vom DHCP-Server \\ \hline\hline

1 & 1 & Stateful DHCPv6 & - & Netz, IP, ... mit DHCP-DISCOVER \\ \hline

0 & 1 & Stateless DHCPv6  & Netzpräfix, Gateway & DNS, ... \\ \hline

0 & 0 & Autoconfiguration & Netzpräfix, Gateway & - \\ \hline

\end{tabular}

\subsection{Übungen mit Cisco-Packet-Tracer}
\begin{itemize}
\item PC: Auto-Config $\Rightarrow$ link-local Adresse nach EUI-64
\item PC - Switch - PC: Auto-Config $\Rightarrow$ ping
\item Router: ipv6 enable $\Rightarrow$ link-local Adresse nach EUI-64
\item Router: ipv6 unicast-routing $\Rightarrow$ joined groups: FF02::2 (all routers)
\item Router mit global-unicast-Adresse $\Rightarrow$ PCs machen SLAAC
\item Routing mit statischen IPv6-Routen
\item Routing mit RIPng
\end{itemize}
 
\newpage
\appendix
\section{Konfiguration von Cisco-Geräten}
\subsection{Speicherelemente eines Cisco-Gerätes}
\begin{itemize}
\item ROM: Boot-Programm
\item RAM: IOS, running-config, Routingtabellen, Zwischenspeicher für Pakete, ...
\item Flash: IOS-Image
\item NVRAM: startup-config
\end{itemize}

\subsection{Konfigurationsmodi}

{\includegraphics[scale=0.175]{cisco-konfigurationsmodi.png}}



\subsection{Befehle}
\subsubsection*{Konfiguration speichern}
\texttt{ROUTER\# write}

\subsubsection*{Konfiguration anzeigen}
\texttt{ROUTER\# show running-config}

\subsubsection*{Hostname}
\texttt{ROUTER(config)\# hostname NAME}

\subsubsection*{Schnittstelle}
\texttt{ROUTER(config)\# interface Fa0/0}\\
\texttt{ROUTER(config-if)\# ip address 1.2.3.4 255.0.0.0}\\
\texttt{ROUTER(config-if)\# no shutdown}

\subsubsection*{Clockrate bei serieller DCE-Schnittstelle}
\texttt{ROUTER(config-if)\# clock rate 56000}

\subsubsection*{Schnittstelle eines Layer-3-Switches}
\texttt{SWITCH(config)\# interface vlan 100}\\
\texttt{SWITCH(config-if)\# ip address 1.2.3.4 255.0.0.0}

\subsubsection*{Layer-3-Switch}
\texttt{SWITCH(config)\# ip routing} (Routing aktivieren)

\subsubsection*{Subschnittstelle bei VLANs}
\texttt{ROUTER(config)\# interface Fa0/0}\\
\texttt{ROUTER(config-if)\# no shutdown}\\
\texttt{ROUTER(config-if)\# interface Fa0/0.100}\\
\texttt{ROUTER(config-subif)\# encapsulation dot1q 100}\\
\texttt{ROUTER(config-subif)\# ip address 1.0.0.1 255.0.0.0}\\
\texttt{ROUTER(config-subif)\# interface Fa0/0.200}\\
\texttt{ROUTER(config-subif)\# encapsulation dot1q 200}\\
\texttt{ROUTER(config-subif)\# ip address 2.0.0.1 255.0.0.0}

\subsubsection*{Statische Route}
\texttt{ROUTER(config)\# ip route 1.0.0.0  255.0.0.0  2.3.4.5    } (mit Next-Hop-Adresse)\\  
\texttt{ROUTER(config)\# ip route 1.0.0.0  255.0.0.0  S2/0       } (mit Exit-Interface)  

\subsubsection*{RIP}
\texttt{ROUTER(config)\# router rip}\\  
\texttt{ROUTER(config-router)\# network 1.0.0.0} (alle angeschlossenen Netze)  

\subsubsection*{IPv6: link-local-Adresse}
\texttt{ROUTER(config-if)\# ipv6 enable} (erstellt link-local-Adresse nach EUI-64)\\
\texttt{ROUTER(config-if)\# ipv6 address fe80::1 link-local} (link-local-Adresse manuell)  

\subsubsection*{IPv6: statische global-unicast-Adresse}
\texttt{ROUTER(config-if)\# ipv6 address 2000::1/64}  

\subsubsection*{IPv6: Routing einschalten}
\texttt{ROUTER(config)\# ipv6 unicast-routing}  

\subsubsection*{IPv6: statische Route}
\texttt{ROUTER(config)\# ipv6 route 3000::/64 2000::1} (Zielnetz, Next-Hop)

\subsubsection*{RIPng}
\texttt{ROUTER(config)\# ipv6 router rip PROZESSNAME} (RIPng-Prozess erstellen)\\
\texttt{ROUTER(config-if)\# ipv6 rip PROZESSNAME enable} (RIPng auf Schnittstelle aktivieren)

\subsubsection*{Diagnose}
\texttt{ROUTER\# show running-config}  (aktuelle Konfiguration) \\
\texttt{ROUTER\# show ip interface brief}  (IP-Adressen und Status aller Netzwerkschnittstellen) \\
\texttt{ROUTER\# show ipv6 interface brief} \\
\texttt{ROUTER\# show ip route} (Routingtabelle) \\
\texttt{ROUTER\# show ipv6 route}\\
\texttt{ROUTER\# show ip protocol} (Routingprotokolle)\\ 
\texttt{ROUTER\# show ipv6 protocol} 



\end{document}
