2.3. TCP - Transmission Control Protocol

2.3.1 Eigenschaften von TCP

TCP und UDP nutzen zwar dieselbe Netzwerkschicht, nämlich IP, stellen allerdings den Anwendungen völlig verschiedene Leistungen zur Verfügung. Mit UDP haben wir bisher einen unzuverlässigen Datagramm-Dienst kennengelernt. Im Unterschied dazu arbeitet TCP verbindungsorientiert (connection-oriented) und bietet den Anwendungen die Möglichkeit, jeweils im Duplexbetrieb über einen zuverlässigen, unstrukturierten Bytestrom (reliable, unstructured byte stream) miteinander zu kommunizieren. Die Unterscheidung mehrerer Anwendungen bzw. Dienste erfolgt wie bei UDP über Portnummern.

Mit dem Attribut verbindungsorientiert wird ausgedrückt, daß zwei Partner, in der Regel ein Klient und ein Server, erst nach dem Aufbau einer TCP-Verbindung miteinander Daten austauschen können. Eine solche TCP-Verbindung hat auch immer genau zwei Endpunkte, durch die sie eindeutig identifiziert wird. Broadcast und Multicast sind demnach hierbei nicht anwendbar, sondern nur mit UDP zu realisieren (Protokolle, die ein TCP-ähnliches Verhalten auch bei Multicast realisieren, sind Gegenstand der Forschung).

Unter einem Endpunkt versteht TCP ein geordnetes Paar aus IP-Adresse und Portnummer. Comer weist explizit darauf hin, daß bei TCP die durch ein Endpunkte-Paar identifizierte Verbindung und nicht der Protokoll-Port die zentrale Abstraktion darstellt.

Mitunter bezeichnet man TCP-Verbindungen auch als Virtual Circuits, da die Anwendungen den Eindruck haben, es existiere jeweils im Netz ein speziell für sie geschalteter Kanal, obwohl es sich in Wirklichkeit um ein reines Konstrukt der Transportschicht handelt und konkrete Verbindungen lediglich den beiden Endsystemen bekannt sind.

Eine interessante Frage ist, durch welche Maßnahmen es gelingt, eine zuverlässige Verbindung auf der Basis des vom Prinzip her unzuverlässig arbeitenden IP zu organisieren. Bevor wir ins Detail gehen, schauen wir uns am besten zuerst überblicksartig an, wie TCP diese Aufgabe löst:

Wir hatten bereits früher darauf hingewiesen, daß eine TCP-Verbindung als unstrukturierter Bytestrom zu betrachten ist. Das bedeutet, der Empfänger erhält exakt dieselbe Folge beliebiger 8-Bit-Bytes, die der Sender abschickt. Auf der Ebene der Transportschicht findet weder eine Interpretation noch eine Modifikation der übertragenen Daten statt.

Daraus folgt, daß der Empfänger nicht erkennen kann, welche Bytes der Sender jeweils pro Ausgabeoperation an TCP übergeben hat. Damit entfällt die sehr einfache und bequeme Möglichkeit der impliziten Kennzeichnung zusammengehörender Dateneinheiten, die bei UDP dadurch gegeben ist, daß jede Ausgabe das Versenden eines separaten Datagramms bewirkt. Wird eine solche Markierung bei TCP benötigt, so ist sie von der Anwendung selbst geeignet zu organisieren.

Das Konzept, die Interpretation der Daten vollständig der Anwendung zu überlassen, finden wir nicht nur bei TCP-Verbindungen, sondern z.B. auch bei der Behandlung von Dateien unter UNIX, DOS oder Windows. Die Systemkerne betrachten Files als zusammengehörige Bytefolgen ohne innere Struktur.


© Holger Trapp, 22.5.1998