Transmission Control Protocol – TCP

Neben dem bereits dargestellten User Datagram Protocol, das insbesondere für einen möglichst schnellen und effizienten Transport der zu übertragenden Daten ausgelegt ist und dafür auf Mechanismen verzichtet, die eine fehlerfreie und zuverlässige Übertragung garantieren, sind diese jedoch für zahlreiche Internetanwendungen eine notwendige Grundvoraussetzung. Der Sender muss sich darauf verlassen können, dass die von ihm versendeten Daten exakt so beim Empfänger angeliefert werden, wie er sie versendet hat. Übertragungsfehler und Datenverluste müssen von den Kommunikationspartnern auf beiden Seiten registriert und gemeinsam behoben werden können, um die Grundvoraussetzung für einen zuverlässigen Transportdienst zu gewährleisten. Das Transmission Control Protocol (TCP) baut auf dem unzuverlässigen und verbindungslosen Internet Protokoll einen zuverlässigen und verbindungsorientierten Transportdienst auf. Dazu bündelt TCP zahlreiche Verfahren für das Verbindungsmanagement, die Korrektur von Übertragungsfehlern, die Flusskontrolle und die Überlastkontrolle.

Historisch gesehen begann die Entwicklung am heutigen TCP bereits in den frühen 1970er Jahren, als das stetig wachsende ARPAnet als Vorläufer des heutigen Internets immer größer wurde und immer wieder neue Netzwerke mit daran angeschlossen werden sollten. Robert E. Kahn und Vinton G. Cerf begannen 1973 mit der Entwicklung des ersten ” Transmission Control Programs“ als Nachfolger für die damalige Netzwerkverwaltungssoftware, das Network Control Protocol (NCP), das mit der Verwaltung und dem operationellen Betrieb des wachsenden Internets zusehends überfordert war. Diese erste Version von TCP unterschied sich von der aktuell eingesetzten dadurch, dass sie sowohl für die verbindungslose Übertragung von Datagrammen und das Routing (Internetschicht-Funktionalität) als auch für das Management von Verbindungen und den zuverlässigen Datentransport (Transportschicht-Funktionalität) zuständig war.

Damit wurde gleichzeitig gegen die Prinzipien der Modularität als auch des strengen Schichtenaufbaus der Protokollfunktionalität verstoßen, da es nicht mehr möglich war, Internetschicht- Funktionalität und Transportschicht-Funktionalität getrennt voneinander bereitzustellen. Dadurch geriet TCP zu einem sehr unflexiblen und ineffizienten Protokoll, insbesondere für Anwendungen und Dienste, die lediglich eine einfache, verbindungslose und ungesicherte Kommunikation benötigen. Mit der vierten Version schließlich beschloss man 1981 in RFC 793, das Transmission Control Program in zwei separate Protokolle – das Internet Protokoll IPv4 und das Transmission Control Protokoll – aufzuteilen, die jeweils die für die Internetschicht bzw. die Transportschicht vorgesehene Funktionalität für Anwendungen und Dienste zur Verfügung stellen.

UDP Nachrichtenformat

Der Header eines UDP-Datenpakets ist sehr einfach aufgebaut (siehe Abbildung):

  • Source Port 16 Bits lange Portnummer für den Absender.
  • Destination Port 16 Bits lange Portnummer für den Empfänger.
  • Länge 16 Bits langes Feld, das die Länge des gesamten UDP-Datenpakets inklusive Header in Bytes angibt. Der Minimalwert für die Länge eines UDP-Datenpakets beträgt 8 Bytes, was der Länge des UDP-Headers entspricht.
  • Prüfsumme Die zur Fehlererkennung verwendete 16 Bits lange Prüfsumme ist optional. Ist sie mit Null angegeben, so wird keine Prüfsumme verwendet. Der Algorithmus zur Berechnung der Prüfsumme entspricht dem bei IP verwendeten Algorithmus. Allerdings erstreckt sich die IP-Prüfsummenberechnung nur auf den IP- Header, so dass es nicht ratsam ist, die Berechnung der UDP-Prüfsumme zu unterlassen. Die UDP-Prüfsummenberechnung schließt den UDP-Header, die UDP-Nutzdaten und den sogenannten Pseudoheader mit ein. Dieser Pseudoheader setzt sich zusammen aus den IP-Adressen von Sender und Empfänger und der Protokollangabe aus dem IP-Datagrammheader sowie der Längeninformation aus dem UDP-Datenpaketheader. Der Pseudoheader besitzt eine Länge von insgesamt 12 Bytes (siehe Abb. 8.7). Er wird lediglich zur Prüfsummenberechnung verwendet und dazu dem eigentlichen UDP-Datenpaketheader voran gestellt. Der Empfänger ist dadurch stets in der Lage, zu überprüfen, ob das Datenpaket auch tatsächlich an den korrekten Adressaten geliefert wurde.

UDP Anwendungen

Im Gegensatz zum zuverlässigen, verbindungsorientierten TCP Protokoll stellt UDP lediglich einen ungesicherten Transportdienst zur Verfügung, der nahezu keine weitere Funktionalität bietet. Aus diesem Grund verwenden klassische Internet- Anwendungen, die auf eine zuverlässige Datenübertragung angewiesen sind, wie z.B. E-Mail oder WWW, auch nicht das einfache UDP Protokoll. Auf der anderen Seite gibt es aber auch zahlreiche Anwendungen, bei denen die Übertragungsleistung, d.h. der mengenmäßige Durchsatz gegenüber einem zuverlässigen und fehlerfreiem Transport im Vordergrund steht. Dazu zählt die Echtzeit-Übertragung von Multimediadaten, wie z.B. beim Video-Streaming oder bei der Internet- Telefonie. Würde bei diesen Anwendungen ebenfalls eine fehlerfreie Übertragung bevorzugt werden, würde es durch Neuübertragungen beim Transport beschädigter Daten zu ungewollten Übertragungsverzögerungen kommen, die einen spürbaren Effekt auf die in Echtzeit übertragenen Multimediadaten hätten und sich in Form von verzerrtem Ton oder hörbaren Pausen bzw. als ” Ruckeln“ im Videobild bemerkbar machen. Bis zu einer gewissen Schwelle dagegen kann der Verlust von Daten in einem Multimedia-Echtzeitdatenstrom verkraftet werden, ohne dass die menschliche Wahrnehmung dadurch allzusehr gestört wird. Eine weitere Kategorie von Anwendungen, die das UDP Protokoll verwenden, basiert auf der Übertragung relativ kurzer Nachrichten. Diese bevorzugen aus Gründen der Effizienz das UDP- Protokoll, da eine zuverlässige TCP-Verbindung in diesem Fall zu einem signifikanten Overhead bzgl. der Übertragungsdauer und der Menge an übertragenen Daten führt.

Zu den Diensten auf der Anwendungsschicht, die UDP als Transportprotokoll nutzen, zählen die in Tabelle 8.3 dargestellten Anwendungen.

Die für TCP und UDP jeweils festgelegten Portnummern können verschieden sein. Nutzt jedoch ein Dienst sowohl UDP als auch TCP, wie dies z.B. für den Domain Name Service (DNS) der Fall ist, dann werden einheitliche Portnummern verwendet. Eine spezielle Variante des UDP Protokolls ist das Lightweight User Datagram Protocol (UDP-Lite), das in RFC 3828 spezifiziert wurde. UDP-Lite ist speziell für die Übertragung von Daten vorgesehen, bei denen es auf eine möglichst geringe Verzögerung ankommt und kleinere Übertragungsfehler problemlos verkraftet werden können, wie es z.B. bei Liveübertragungen von Audio- oder Video- Datenströmen der Fall ist. UDP-Lite besitzt das gleiche Datenformat wie UDP. Lediglich ist die Längenbeschränkung von 65.535 Bytes (16 Bits Längenfeld) aufgehoben. Das Längenfeld gibt nur an, über welche Länge die Prüfsumme berechnet werden soll (Checksum Coverage). Die tatsächliche Länge eines UDP-Lite Datenpakets muss aus der Längenangabe im IP-Datagrammheader berechnet werden. Sind die beiden Längenangaben unterschiedlich, so enthält das UDP-Lite Datenpaket zusätzliche ungeprüfte Daten.

Aufgaben und Protokolle der Transportschicht

Auf dem verbindungslosen Datagrammdienst IP, der auf der Netzwerkschicht des TCP/IP-Referenzmodells angesiedelt ist, setzen die Protokolle der Transportschicht auf. Die TCP/IP-Protokollfamilie sieht für den Datentransfer zwei sehr unterschiedliche Transportprotokolle vor, die beide auf dem unzuverlässigen Datagrammdienst IP basieren:

  • User Datagram Protocol (UDP) Einfaches Transportprotokoll, das eine ungesicherte, verbindungslose Kommunikation zwischen zwei Endsystemen abwickelt.
  • Transmission Control Protocol (TCP) Realisiert einen gesicherten, verbindungsorientierten Vollduplex-Datenstrom zwischen zwei Endsystemen.

Während UDP aufgrund seines einfach gehaltenen Funktionsumfangs kaum Veränderungen unterworfen war, ist TCP stetig weiterentwickelt und in seinen Kontrollmechanismen zunehmend verfeinert worden, so dass inzwischen ein sehr komplexes Protokoll herangereift ist.
Die Transportschicht stellt der im TCP/IP-Referenzmodell über ihr liegenden Anwendungsschicht eine Reihe von sogenannten Dienst-Primitiven zur Verfügung, über die Anwendungsprogramme ihre Datenverbindungen auf einfache Art und Weise abwickeln und verwalten können, ohne dass diese dabei Eigenheiten der Internetschicht oder der darunterliegenden Technologien kennen zu müssen. Dies vereinfacht den Verwaltungsaufwand und ermöglicht eine von der Netzwerktechnologie unabhängige Anwendungsentwicklung. Desweiteren wird auf der Transportschicht sichergestellt, dass alle übertragenen Daten fehlerfrei, vollständig und in der richtigen Reihenfolge beim Empfänger eintreffen. Diese zuverlässige Datenübertragung wird durch die Verwendung von Sequenznummern, Timern, Flusskontrolle und einen Quittierungsmechanismus für die empfangenen Daten erreicht, über den korrekt empfangene Daten bestätigt bzw. fehlerhaft und unvollständig übertragene Daten neu angefordert werden können. Im Gegensatz zur Internetschicht können in der Transportschicht annähernd beliebig lange Nachrichten, sogenannte ” Streams“, versendet werden, die zur Übertragung in Segmente unterteilt werden. Zusätzlich ist in der Transportschicht auch eine Überlastkontrolle vorgesehen, die über eine lastabhängige Regulierung des Sendeaufkommens dafür sorgt, dass Verbindungen innerhalb eines Netzwerks nicht übermäßig belastet werden.

User Datagram Protocol – UDP

Das Transport Control Protocol (TCP) ist eines der beiden namensgebenden Protokolle des TCP/IP-Referenzmodells. Es stellt einen zuverlässigen, verbindungsorientierten Transportdienst zur Verfügung. Daneben existiert auf der Transportschicht noch ein zweites, wesentlich einfacheres Transportprotokoll, das User Datagram Protocol (UDP). Während für eine Datenübertragung via TCP zuerst eine Verbindung zum gewünschten Kommunikationspartner aufgebaut werden muss, die nach erfolgreicher Datenübertragung explizit auch wieder abzubauen ist, stellt UDP einen einfacheren, verbindungslosen, allerdings unzuverlässigen Transportdienst zur Verfügung, der gegenüber TCP effizienter arbeitet, einfacher implementiert werden kann und wesentlich weniger Mehraufwand mit sich bringt.

Aufgaben des UDP Protokolls
Das einfache UDP Protokoll umfasst folgende drei Basisaufgaben:

  • Higher-Layer Data Transfer
    Mittels eines Protokolls der Anwendungsschicht übergibt ein Anwendungsprogramm bzw. Dienst eine Nachricht an das UDP Protokoll zur Übertragung.
  • UDP Message Encapsulation
    Die zu sendende Nachricht wird im Nutzdatenteil des UDP-Datenpakets gekapselt. Im Header des UDP-Datenpakets werden Quell- und Zielport angegeben. Gegebenenfalls wird noch eine Prüfsumme für die zu übertragenden Daten berechnet.
  • Data Transfer to IP
    Das UDP-Datenpaket wird an das Internet Protokoll zur Übertragung übergeben. Auf der Empfängerseite laufen diese Operationen in umgekehrter Reihenfolge und Richtung ab.

Das ISO/OSI – Referenzmodell: Teil 1 – Das Transportsystem


Mehr zum Thema von
Prof. Dr. Christoph Meinel

Für die Entwicklung von Netzwerkprotokoll-Familien wurde ab 1977 von der International Standards Organisation (ISO) das ISO/OSI Referenzmodell für die Kommunikation in offenen Netzwerken (Open Systems Interconnection) bereitgestellt. Es untergliedert den Gesamtprozess der Netzwerkkommunikation in sieben einzelne Schichten und ist konzipiert als gedankliches Werkzeug zur Entwicklung von Protokollfamilien (siehe Abbildung).

Das ISO/OSI-Referenzmodell trägt den Namen Open Systems Interconnection, weil es zur Verbindung offener Systeme bestimmt war, d.h. Systeme, die für die Kommunikation mit anderen Systemen offen stehen. Als Grundgedanke beim Design des ISO/OSI-Referenzmodells sollte jede einzelne Schicht eine genau definierte Funktion implementieren und eine neue, höhere Schicht stets dann eingefügt werden, wenn ein neuer Abstraktionsgrad zur Erledigung der zu bewältigenden Aufgaben notwendig war. Das ISO/OSI-Modell selbst bietet keine Netzwerkarchitektur, es werden lediglich die Aufgaben der einzelnen Schichten festgelegt und keine Aussage über die zur Realisierung der dort definierten Funktionalität notwendigen Dienste und Protokolle getroffen.
ISO/OSI Referenzmodell
Die die vier Schichten des ISO/OSI-Referenzmodells, die im Allgemeinen als Transportsystem bezeichnet werden, sind mit den folgenden Aufgaben befasst:

  • Schicht 1: Bitübertragungsschicht (Physical Layer)
    Die Bitübertragungsschicht definiert physikalische und technische Eigenschaften des Übertragungsmediums (Übertragungskanals). Speziell werden darin die Beziehungen zwischen der Netzwerk-Hardware und dem physikalischenÜbertragungsmedium geregelt, wie z.B. Layout und Belegung von Steckverbindungen mit ihren optisch oder elektrischen Parametern, Kabelspezifikationen, Verstärkerelemente, Netzwerkadapter, verwendeteÜbertragungsverfahren usw.Zu den wichtigsten Aufgaben der Bitübertragungsschicht zählen:

    • Aufbau und Beendigung einer Verbindung zu einem Übertragungsmedium und
    • Modulation, d.h. Konvertierung binärer Daten (Bitstrom) in (elektrische, optische oder Funk-) Signale, die über einen Kommunikationskanal übertragen werden können.
  • Schicht 2: Sicherungsschicht (Data Link Layer)
    Im Gegensatz zur Bitübertragungsschicht, deren Hauptanliegen in der Regelung der Kommunikation zwischen einer einzelnen Netzwerkkomponente und dem Übertragungsmedium besteht, befasst sich die Sicherungsschicht mit der Interaktion mehrerer (d.h. mindestens zwei) Netzwerkkomponenten. Die Sicherungsschicht gewährleistet, dass entlang einer Punkt-zu-Punkt Verbindung trotz gelegentlicher Fehler, die in der Bitübertragungsschicht auftreten können, eine zuverlässige Übertragung stattfinden kann. Diese Punkt-zu-Punkt Verbindung kann dabei entweder als direkte Verbindung ausgeführt sein oder auch über ein im Broadcastverfahren arbeitendes Diffussionsnetzwerkrealisiert werden, wie z.B. bei Ethernet oder WLAN. In einem Diffusionsnetzwerk können alle angeschlossenen Rechner die übertragenen Daten aller anderen angeschlossenen Rechner empfangen, ohne dass dazu irgendwelche Zwischensysteme nötig wären.Zu den auf der Sicherungsschicht zu bewältigenden Aufgaben zählen
  • die Organisation von Daten in logische Einheiten, die auf der Sicherungsschicht als Rahmen (Frames) bezeichnet werden,
    • die Übertragung von Rahmen zwischen Netzwerkkomponenten,
    • das Bitstopfen, d.h. das Ergänzen nicht vollständig gefüllter Rahmen mit speziellen Fülldaten und
    • die zuverlässige Übertragung von Rahmen durch einfache Fehlererkennungsverfahren, wie z.B. die Prüfsummenberechnung.
  • Schicht 3: Vermittlungsschicht (Network Layer)
    Die Vermittlungsschicht stellt funktionale und prozedurale Mittel zur Verfügung, die den Transfer von Datensequenzen variabler Länge (Datenpakete) von einem Sender zu einem Empfänger über ein oder mehrere Netzwerke hinweg ermöglichen.
    Zu den Aufgaben der Vermittlungsschicht zählen:

    • die Zuweisung von Adressen zu End- und Zwischensystemen,
    • die zielgerichtete Weiterleitung von Datenpaketen von einem Ende des Netzwerks zum anderen (Routing) und damit
    • die Verknüpfung einzelner Netzwerke (Internetworking),
    • die Fragmentierung und Reassemblierung von Datenpaketen, da unterschiedliche Netzwerke von unterschiedlichen Transportparameter bestimmt werden, und
    • die Weiterleitung von Fehler- und Statusmeldungen bzgl. erfolgter Zustellung von Datenpaketen
  • Schicht 4: Transportschicht (Transport Layer)
    Die Transportschicht ermöglicht einen transparenten Datentransfer zwischen Endanwendern und stellt den darüberliegenden Schichten einen zuverlässigen Transportdienst zur Verfügung. Die Transportschicht definiert dabei die Einzelheiten, die für eine zuverlässige und sichere Datenübertragung notwendig sind. Hier wird sichergestellt, dass eine Folge von Datenpaketen fehlerfrei, vollständig und in der richtigen Reihenfolge vom Sender zum Empfänger gelangt. Auf der Transportschicht erfolgt ebenfalls die Abbildung von Netzwerkadressen auf logische Namen. Damit stellt die Transportschicht den beteiligten Endsystemen eine Ende-zu-Ende Verbindung zur Verfügung, die die Einzelheiten der dazwischenliegenden Netzwerkinfrastruktur verbirgt und daher als transparent bezeichnet wird. Die Protokolle auf dieser Schichte zählen zu den komplexesten Protokollen in der Netzwerk-Kommunikation.

Prolog

Teil 3 von 3

In der über der Internetschicht angesiedelten Transportschicht werden Protokollfunktionen zur Verfügung gestellt, mit denen es möglich wird, auf der Basis des einfachen verbindungslosen und unzuverlässigen IP einen verbindungsorientierten und zuverlässigen Transportdienst bereitzustellen. Diese Aufgabe übernimmt das TCP Protokoll, das eine gesicherte Ende-zu-Ende Kommunikation zwischen zwei Kommunikationspartnern bzw. -diensten im Internet ermöglicht, und das zusammen mit weiteren Protokollen der Transportschicht in Kapitel 8 vorgestellt wird.

Die zahlreichen unterschiedlichen Netzwerkdienste, die heute zu unserem täglichen Kommunikationsrepertoire gehören, und die auf dem TCP/IP-Referenzmodell basieren, folgen meist dem sogenannten Client/Server Kommunikationsschema: Ein Client fordert von einem Server eine Information bzw. einen Dienst an. Der Server stellt diese Information bzw. diesen Dienst bereit und liefert sie/ihn dem anfragenden Client aus, sofern dieser bezugsberechtigt ist. Entsprechend ihren Aufgaben werden Namens- und Verzeichnisdienste, Elektronische Post, Dateitransferdienste, Netzwerkmanagement und echtzeitfähige Transportdienste unterschieden, die alle diesem Schema folgen und deren Protokolle in der Anwendungsschicht des TCP/IP-Referenzmodells angesiedelt sind. Sie werden in Kapitel 9 detailliert behandelt.