%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}

%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}

%Hyperlinks
\usepackage{hyperref}

%Sequenzdiagramme
\usepackage{pgf-umlsd}



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

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

\pagestyle{scrheadings}

\begin{document}

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

\renewcommand{\arraystretch}{1.2}
\section*{Portnummern}
\begin{tabular}{|r | l | l|}\hline
0 - 1023 & Well Known Ports & Server applications\\
& System Ports & \\ \hline
1024 - 49151 & Registered Ports & user processes or applications, clients\\
& User Ports & \\ \hline
49152 - 65535 & Dynamic Ports & client applications\\
 & Private Ports & \\ \hline
\end{tabular}

\paragraph{Offizielle Liste:} \href{http://www.iana.org/assignments/port-numbers}{iana.org/assignments/port-numbers}

\subsection*{Beispiele für Well Known Ports}
\begin{tabular}{l | l | l}
Portnummer & Protokoll & Anwendung\\ \hline\hline
20, 21 & TCP & FTP \\ \hline
22 & TCP & SSH \\ \hline
23 & TCP & Telnet \\ \hline
25 & TCP & SMTP \\ \hline
53 & UDP, TCP & DNS \\ \hline
67, 68 & UDP & DHCP \\ \hline
69 & UDP & TFTP \\ \hline
80 & TCP & HTTP \\ \hline
110 & TCP & POP3 \\ \hline
143 & TCP & IMAP \\ \hline
161, 162 & UDP & SNMP \\ \hline
443 & TCP & HTTPS \\ \hline
  & UDP & VoiceOverIP \\ \hline
  & UDP & Streaming Video \\ \hline
\end{tabular}

\section*{UDP}
\begin{itemize}
\item No connection establishment: connectionless
\item wenig Overhead: 8 Byte Header
\end{itemize}

\subsection*{UDP-Header}
\href{https://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}


\section*{TCP}
\subsection*{TCP-Header}
\href{https://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    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\end{verbatim}

\subsection*{Ordered Delivery (Segment Reassembly)}
Empfänger ordnet Segmente anhand der Sequence-Number

\subsection*{Connection Establishment (Three-Way-Handshake)}
Connection-oriented: Verbindungsaufbau: Austausch der initial sequence number\\

\begin{sequencediagram}
    \newinst{client}{: Client}
    \newinst[6]{server}{: Server}
    
    \mess{client}{ SYN, Seq = 23 }{server}
    \mess{server}{ SYN, ACK, Seq = 98, Ack = 24 }{client}
    \mess{client}{ ACK, Seq = 24, Ack = 99 }{server}
\end{sequencediagram}

\subsection*{Session Termination}
Beenden der Verbindung\\

\begin{sequencediagram}
    \newinst{a}{: A}
    \newinst[6]{b}{: B}
    
    \mess{a}{ FIN }{b}
    \mess{b}{ ACK }{a}
    \mess{b}{ FIN }{a}
    \mess{a}{ ACK }{b}
\end{sequencediagram}

\subsection*{Reliability (Zuverlässigkeit)}
Zuverlässigkeit: acknowledgements (receiver), timer + retransmission (sender)\\
Verlorengegangene Segmente werden nochmal gesendet.\\


\begin{sequencediagram}
    \newinst{sender}{: Sender}
    \newinst[5]{empfaenger}{: Empfänger}
    
    \mess{sender}{ Daten 1 }{empfaenger}
    \node[anchor=east] () at (mess  from) {Timer starten};
    \mess{sender}{ Daten 2 }{empfaenger}
    \mess{sender}{ Daten 3 }{empfaenger}
    
    \mess{empfaenger}{ ACK 4 }{sender}
    \node[anchor=east] () at (mess  to) {ACK rechtzeitig};
    
    \mess{sender}{ Daten 4 }{empfaenger}
     \node[anchor=east] () at (mess  from) {Timer neu starten};
    \mess{sender}{ Daten 5 }{empfaenger}
    \mess{sender}{ Daten 6 }{empfaenger}
    
    \mess{empfaenger}{ ACK 7 }{sender}
    \node[anchor=east] () at (mess  to) {ACK rechtzeitig};
    
    \mess{sender}{ Daten 7 }{empfaenger}
    \node[anchor=east] () at (mess  from) {Timer neu starten};
    \mess{sender}{ X X X Daten 8 X X X}{empfaenger}
    \node[anchor=west] () at (mess  to) {kommt nicht an};
    \mess{sender}{ Daten 9 }{empfaenger}
    
    \mess{empfaenger}{ X X X ACK 10 X X X }{sender}
    \node[anchor=east] () at (mess  to) {ACK kommt nicht an};
    \node[anchor=west] () at (mess  from) {ACK wird nicht gesendet};
    
    \mess{sender}{ Daten 7 }{empfaenger}
    \node[anchor=east] () at (mess  from) {Timer abgelaufen, Retransmission};
    \mess{sender}{ Daten 8 }{empfaenger}
    \mess{sender}{ Daten 9 }{empfaenger}
    
   \mess{empfaenger}{ ACK 10 }{sender}
\end{sequencediagram}


\subsection*{Flow Control}
Flusskontrolle, Stauvermeidung: sliding windows

\begin{itemize}
\item TCP-Window-Size: Anzahl der Bytes, die empfangen werden, bevor ACK geschickt werden muss.
\item MSS (Maximum Segment Size): Payload eines TCP-Segments maximal 1460 Byte
\item Ethernet MTU (Maximum Transmission Unit): Payload eines Ethernet-Frames maximal 1500 Byte
\end{itemize}

\subsection*{Error Checking}

\subsection*{Overhead}
20 Byte Header, Three-way-handshake, ACK



\end{document}
