TCP - Transmission Control Protocol

Das TCP (Transmission Control Protocol) ist Teil der Protokollfamilie TCP/IP. Das TCP ist ein verbindungsorientiertes Protokoll, welches das Ziel hat, Datenverluste zu verhindern. Dateien und Datenströme werden aufgeteilt und die Datenpakete der zugehörigen Anwendung zugeordnet. Es wird auch der 4. Schicht des Osi-Schichtenmodell zugeordnet, die Transport-Schicht.

TCP im TCP/IP-Protokollstapel

Schicht Dienste / Protokolle / Anwendungen
Anwendung
HTTP IMAP DNS SNMP
Transport TCP
Internet IP (IPv4, IPv6)
Netzzugang Ethernet...

Für Anwendungen sind TCP-Pakete transparent. Das bedeutet, dass die Anwendungen ihren Datenstrom an den TCP/IP-Stack weitergeben und ihn ebenfalls von dort nehmen. Mit der TCP-Paketstruktur oder Parametern der Verbindung haben die Anwendungen rein gar nichts zu tun, dies geschieht einzig und alleine vom TCP selber.

Aufgaben und Funktion des TCP

  • Segmentierung (data segmenting): Die Dateien und Datenströme werden in Segmente eingeteilt und auch umgekehrt wieder zusammengesetzt.
  • Verbindungsmanagement (connection etablishment and termination): Verbindungsauf- und -abbau.
  • Fehlerbehandlung (error detection): Datenpakete autorisieren und Zeitüberwachung.
  • Flusssteuerung (flow control): Auslastung der Übertragungsstrecke.
  • Anwendungsunterstützung (application support): ansprechen der Anwendung über spezifische Port-Nummern.

Segmentierung (data segmentierung)

Eine der Aufgaben des TCP ist es, den Datenstrom in Pakete und Segmente einzuteilen und diesen wiederum beim Empfänger zusammenzusetzten. Dafür werden alle Segmente mit einem Header versehen. In diesem stehen alle wichtigen Informationen, die der Empfänger benötigt. Im Anschluss werden die Segmente an das IP (Internet Protocol) übergeben.

Das diese verschiedene Routen gehen können, kann es zu zeitlichen Verzögerungen kommen. Das hat zur Folge, dass Pakete in einer anderen Reihenfolge beim Empfänger ankommen, als wie sie losgeschickt wurden. Deshalb setzt das TCP die Segmente wieder in der richtigen Reihenfolge zusammen und übergibt sie dann erst der Anwendung. Dafür wird in jedem TCP-Paket eine Sequenznummer vergeben.

Verbindungsmanagement (connection establishment and termination)

Da das TCP ein verbindungsorientiertes Protokoll ist, ist es für den Verbindungsauf- und Verbindungsabbau verantwortlich. Der Sender und der Empfänger stehen jederzeit im Kontakt.

Fehlerbehandlung (error detection)

Durch den ständigen Austausch von Kontrollmeldungen zwischen Sender und Empfänger stehen die beiden ununterbrochen in Kontakt. Der Empfänger bestätigt dem Sender jedes empfangene Paket. Wenn dies mal nicht passieren sollte, also der Sender keine Empfangsbestätigung bekommen sollte, sendet dieser es einfach nochmal erneut los. Teilweise kann es bei Übertragungsproblemen zu Verlusten oder doppelter Datenpakete kommen, damit diese wieder zusammengeführt werden können, benutzt das TCP eine Sequenznummer, wo jedes TCP-Paket eine eindeutige Nummer hat. Dies ermöglicht es die TCP-Pakete wieder in der richtigen Reihenfolge zusammen zu setzten.

Flusssteuerung (flow control)

Das TCP hat keine feste zeitliche Zuordnung und ebenfalls über keine Kenntnis den Übertragungsweg geschweige denn über das Übertragungssystem, oder die Bandbreite. Deshalb lastet es diese Übertragungsstrecken dynamisch schnell oder langsam aus und reagiert auf unerwartete Verzögerungen oder Engpässe.

Anwendungsunterstützung (application support)

Die Ports von TCP und UDP sind eine Abstraktion von Software, um diese beiden Protokolle zu unterscheiden. Sie adressieren Ports, um der Anwendung dahinter eine Aufgabe zu erteilen.

Aufbau eines TCP-Headers

Quell-Port Ziel-Port
Sequenznummer
Acknowledgment-Nummer
Data Offset Reserviert Flags
Window-Größe
Checksumme Urgent-Pointer
Optionen/Füllbits
Daten

Jedem TCP-Paket wird auch ein TCP-Header vorrangestellt, der die folgenden wichtigen Daten enthält:

  • Sender-Port
  • Empfänger-Port
  • Sequenznummer
  • Prüfung
  • Flags

Ein TCP-Paket setzt sich also aus dem Header-Bereich und den Daten-Bereich zusammen. Im Header findet der Sender oder Empfänger alle wichtigen Daten, die für eine gesicherte TCP-Verbindungen nötig sind. Der TCP-Header ist in mehrere 32-Bit-Blöcke aufgeteilt und hat mindestens 5 solcher Header. Ein TCP-Header hat also mindestens eine Größe von 20 Byte

  • Quell-Port, 16Bit, hier steht der Quell-Port, den die Anwendung verwendet hat.Bei 16 Bit ist der höchste Port 65535.
  • Ziel-Port, 16 Bit, hier steht der Ziel-Port, den die Anwendung definiert hat. Bei 16 Bit ist der höchste Port 65535.
  • Sequenznummer, 32 Bit, die Sequenznummer lässt das TCP-Paket eindeutig identifizieren, was wichtig ist für die Zusammensetzung der Pakete in der richtigen Reihenfolge.
  • Acknowlegement-Nummer, 32Bit, die Acknowlegement-Nummer setzt sich aus der Sequenznummer und der Anzahl von empfangenen Bytes zusammen. Hiermit wird geprüft, ob die Daten beim Empfänger vollständig angekommen sind.
  • Data Offset, 4 Bit, hier steht die Information darüber, wie viele 32-Bit-Blöcke der TCP-Header hat.
  • Reserviert, 6 Bit, kann als Erweiterung des TCP-Headers genutzt werden.
  • Flags, 6 Bit, die Zustände der Daten zur Weiterverarbeitung werden hier gekennzeichnet (z.B URG, ACK, RST, SYN, FIN)
  • Window-Größe, 16 Bit, hier beschreibt der Empfänger dem Sender die Größe an Daten, die der Sender senden darf. Damit wird das Überlaufen des Puffers verhindert.
  • Checksumme, 16 Bit, Kontrolle von Header- und Datenbereich
  • Urgent-Pointer, 16 Bit, gibt mit der Sequenznummer die eindeutige Position der Daten im Datenstrom an, dieser Wert ist jedoch nur mit der URG-Flag gültig.