Content

Page tree


Viele Anwendungen benötigen eine zuverlässige Verbindung. Das wichtigste Protokoll für diese Fälle ist TCP (Transmission Control Protocol). TCP realisiert einen zuverlässigen, verbindungsorientierten Byte-Strom.
Anwendungen, die auf TCP aufsetzen, werden dadurch von vielen Implementierungsdetails entlastet.
Wesentliche Eigenschaften von TCP sind:

  • Verbindungsaufbau
  • zuverlässige Übertragung
  • Vollduplex-Byte-Strom
  • Flusskontrolle (Schutz des Empfängers vor zu vielen Daten)
  • Überlastkontrolle (Schutz des Netzes vor zu vielen Daten)

Die große Herausforderung für TCP ist, über einen unzuverlässigen Paketdienst und ein komplexes, sich ständig veränderndes Netz eine zuverlässige Verbindung mit möglichst hohem Datendurchsatz und geringer Verzögerung zu realisieren.


Segmentierung von TCP

Segmentierung

Aus Sicht der Anwendung stellt TCP einen Byte-Strom dar. Das heißt, die Anwendung kann einzelne Bytes schreiben oder lesen. Andererseits überträgt IP Pakete.
Es ist wenig effizient, jedes Byte stets in einem eigenen IP-Paket zu verschicken.
Das Verhältnis Nutzdaten zu Header-Daten ist dann sehr ungünstig. Daher setzt TCP den Byte-Strom in eine Folge von so genannten Segmenten um. Den gesamten Ablauf für eine Richtung zeigt die Folie.
Auf der Sendeseite sammelt TCP zunächst die geschriebenen Bytes in einem Puffer.
Aus dem Puffer werden dann Bytes zu Segmenten zusammengefasst. Im Sinne der Netzwerknutzung sind möglichst große Segmente wünschenswert, um ein gutes Verhältnis von Nutzdaten zu Header-Daten zu erzielen.
Andererseits führen große Segmente zu längeren Wartezeiten. Außerdem gibt es im zu Grunde liegenden Netz eine Beschränkung der Paketgröße. Insgesamt verwendet TCP folgende Kriterien für das Versenden des nächsten Segments:
Die maximale Segmentgröße ( Maximum Segment Size, MSS) ist erreicht.
Zweckmäßigerweise wird MSS so gewählt, dass IP das Segment nicht fragmentieren muss.
Die Anwendung wünscht explizit den sofortigen Versand ( Push-Operation).

Beispiel: Terminalanwendungen wie Telnet erfordern die wenig effiziente, sofortige Weitergabe jedes Tastendrucks.

Der Timer für die Zeit zum Aufsammeln ist abgelaufen.

TCP- Verbindungsaufbau



TCP ist ein verbindungsorientierter Dienst. Die Kommunikation beginnt mit einer Phase zum Aufbau einer virtuellen Verbindung. Diese existiert nur auf der Ebene von TCP und nicht im physikalischen Netz. Sie geht von einer Anwendung auf einem Rechner zu einer anderen Anwendung auf einem zweiten Rechner. Die beiden Endpunkte sind jeweils durch Portadresse und IP-Adresse gegeben. Insgesamt ist die Verbindung damit durch die vier Werte <IP-Adresse1, Portadresse1, IP-Adresse2, Portadresse2> definiert.
Eine wesentliche Aufgabe der beiden Partner ist es, sich über die Segmentnummern zu einigen. Die Designer von TCP hatten entschieden, dass für eine neue Verbindung zufällige Startwerte zu wählen sind. Damit soll verhindert werden, dass eventuelle Irrläufer aus einer vorherigen Verbindung der beiden Anwendungen die neue Verbindung stören. Durch die zufälligen Startwerte lassen sich diese alten Pakete mit großer Wahrscheinlichkeit an ihren nicht mehr passenden Segmentnummern erkennen. Zum Verbindungsaufbau dient ein Drei-Wege-Handshake.

  • Dabei werden die Flags im Header zum Informationsaustausch genutzt.

Der Ablauf ist wie folgt:

  • Anwendung A schickt ein Segment mit dem Flag SYN und seiner Segmentnummer NA.
  • Anwendung B bestätigt den Eingang durch ein Segment mit den Flags SYN und ACK. Gleichzeitig setzt B die Acknowledge Number auf NA+1, um anzugeben, welches Byte als Nächstes zu erwarten ist. Schließlich wird die eigene Segmentnummer NB zufällig ausgewählt und eingetragen.
  • Anwendung A erhält die Bestätigung und schickt daraufhin ebenfalls eine Bestätigung mit ACK und NB+1 als Acknowledge Number.