its-dokumentationen/08-Kittelberger_Carl_TCP.md

144 lines
4.4 KiB
Markdown

---
author: Carl Kittelberger
date: 2018-04-19
title: "ITS: Transmission Control Protocol"
institute: "Ferdinand-von-Steinbeis Berufsschule"
lang: de-DE
babel-lang: ngerman
babel-otherlangs:
- english
polyglossia-lang:
name: german
options:
- spelling=new
classoption: oneside
colorlinks: true
documentclass: report
fontsize: 12pt
logo: img/steinbeis.png
mainfont: Arial
papersize: a4
sansfont: Arial
tables: true
template: template.tex
toc: true
header-includes:
# For \pageref{LastPage}
- \usepackage{lastpage}
# For \textcolor
- \usepackage{xcolor}
# Long tables (used by pandoc latex template itself)
#- \usepackage{longtable}
# Localization to German for all package injections
#- \usepackage[ngerman]{babel}
# Fancy header!
- \usepackage{fancyhdr}
- \usepackage{graphicx}
- \pagestyle{fancy}
- \fancyhf{}
- \fancyhead[L]{\large{\textit{\textbf{ITS} \\ TCP}}}
- \fancyhead[R]{\raisebox{-0.1\height}{\includegraphics[height=32pt]{img/steinbeis.png}}}
- \fancyfoot[L]{\textcolor{gray}{Carl Kittelberger}}
- \fancyfoot[R]{\textcolor{gray}{\bfseries{Seite \thepage{}/\pageref*{LastPage}}}}
- \renewcommand{\headrulewidth}{0.4pt}
- \renewcommand{\footrulewidth}{0.4pt}
- \setlength\headheight{36pt}
- \fancypagestyle{plain}{}
# monospace
- \lstset{basicstyle=\footnotesize\ttfamily,breaklines=true}
- \lstset{framextopmargin=50pt}
---
\newpage
# Download einer Datei via FTP
![](img/08-tcp/ftp_advent_handshake.png)
## IP und Port des Rechners
Die IP des Rechners im Protokoll ist `192.168.217.128` und der verwendete
lokale Port ist `60176` in der ersten Verbindung.
## IP des Port des Servers
Die Daten, die vom Server gesendet werden, kommen von der IP `192.168.217.10`
und vom Port `21`.
## Sequence und Acknowledgement Numbers der ersten Pakete
![](img/08-tcp/ftp_advent_tcppakete.png)
### Sequence Numbers
1. Sequence Number: `3459893177` (relativ `0`)
2. Sequence Number: `2015123918` (relativ `0`)
3. Sequence Number: `3459893178` (relativ `1`)
### Acknowledgement Numbers
1. Acknowledgement Number: `0`
2. Acknowledgement Number: `3459893178` (relativ `1`)
3. Acknowledgement Number: `2015123919` (relativ `1`)
## Kennzeichen eines Acknowledgements
![](img/08-tcp/ftp_advent_ack.png)
Ein Acknowledgement lässt sich an den `Flags` in einem TCP-Paket erkennen. Jedes Bit des `Flags`-Feldes stellt eine Eigenschaft des TCP-Pakets da, von denen eines vorgibt, dass ein TCP-Paket ein Acknowledgement ist.
## Sequence und Acknowledgement Numbers im Datenstrom enthalten?
Im eigentlichen Datenstrom finden die Sequence und die Acknowledgement Numbers keine Erwähnung. Beide Zahlen sind TCP-Metadaten die alleine der Wiederzusammensetzung der einzelnen TCP-Pakete dienen, um den eigentlichen Inhalt daraus wieder zu lesen.
# Download einer größeren Datei via FTP
## Verbindungsaufbau und -abbau
### Verbindungsaufbau
![](img/08-tcp/ftp_linuxbuch_verbindungsaufbau.png)
### Verbindungsabbau
![](img/08-tcp/ftp_linuxbuch_verbindungsabbau.png)
## Größe des Dateninhalts der Pakete vom Server
![](img/08-tcp/ftp_linuxbuch_retrbytes.png)
Laut der Antwort zu der FTP-Anfrage (dem `RETR`), die Linux-Buch-PDF zu übertragen, werden `15144102 bytes` übertragen.
![](img/08-tcp/ftp_linuxbuch_1448.png)
Die Daten werden in jeweils 1448 Bytes großen TCP Paketen geliefert.
## Entwicklung der Sequence und Acknowledgement Numbers
Die Pakete, die wir vom Server erhalten, starten mit einer Sequence Number von `1`.
Von da an, steigt die Sequence Number von den Daten die wir erhalten immer um
die Anzahl der Bytes.
Die Pakete, die von uns kommen, mit denen wir jeweils die Übertragung der Pakete bestätigen, haben immer die Sequence Number `1`.
Die letzte Sequence Number die vom Server gemeldet wird ist `15144104` per Verbindungsabbau und wir bestätigen von unserer Seite mit der Sequence Number `2`.
## Zeitabstand zwischen Paketen vom Server
Die Zeitabstände zwischen den Paketen, die wir vom Server erhalten, variieren im Bereich von üblicherweise bis zu 100 Mikrosekunden.
## `Window Size Value`-Feld und Veränderungen
`Window Size Value` hat den Wert `91` bei allen Paketen die wir vom Server erhalten, die den Inhalt der Datei übertragen. Pakete von uns haben den Wert `52886`. Über die Übertragung hinweg ändert sich der Wert nicht.
## Datendurchsatz des Downloads und Berechnung
## Doppelte ACKs? Retransmitted Segments?