Das TCP-Protokoll

TCP ist ein Protokoll, das die Übertragung von Daten zwischen verschiedenen Netzwerkkomponenten steuert. Es hat viele Vorteile und wird deshalb als fast ausschließliches Transportprotokoll für das Internet, für E-Mails und andere Webdienste verwendet.

Eigenschaften des TCP-Protokolls

TCP (Transmission Control Protocol, zu Deutsch Protokoll zur Übertragungskontrolle) ist eins der wichtigsten Protokolle in der Transportschicht des Modells TCP/IP.

Auf der Ebene der der Anwendungen erlaubt es die Verwaltung der Daten von (und zu) der unteren Schicht im Modell (das heißt das [/contents/28-das-ip-protokoll IP-Protokoll). Die ans IP Protokoll gelieferten Daten werden in IP-Datagramme verkapselt und versehen das Protokollfeld mit einer 6 (was besagt, dass das Protokoll oberhalb von TCP angesiedelt ist).

TCP ist ein verbindungsorientiertes Protokoll, das heißt es gibt zwei kommunizierenden Rechnern die Möglichkeit, den Stand der Übertragung zu überwachen.

Die wichtigsten Merkmale vom TCP-Protokoll sind:

TCP kann von IP stammende Datagramme bereinigen;

TCP kann den Datenstrom überwachen und Stauungen vermeiden;

TCP kann Daten in Segmente unterschiedlichster Länge formatieren, bevor sie dem IP-Protokoll übergeben werden;

TCP kann Daten "multiplexen", das heißt Daten aus verschiedenen Quellen (zum Beispiel Applikationen) gleichzeitig auf derselben Leitung vermitteln;

TCP kann Kommunikationen auf höfliche Art und Weise einleiten und schließen.

Ziel von TCP

Dank des TCP-Protokolls können Applikationen sicher und unabhängig von den unteren Schichten miteinander kommunizieren (mit dem Verfahren der Empfangsbestätigungen). Dies bedeutet, Router (die auf der Internet-Schicht liegen) haben lediglich die Aufgabe der Datenübertragung in Datagramm-Form und müssen sich nicht um die Datenkontrolle kümmern, da diese von der Transportschicht erledigt wird (insbesondere vom TCP-Protokoll).

Während der Kommunikation durch das TCP-Protokoll werden zwei Rechner miteinander verbunden. Der Senderechner (der Antragsteller) heißt Client und der Empfangsrechner heißt Server. Es handelt sich also um eine Client-Server-Umgebung. Die Rechner in einer solchen Umgebung befinden sich im Modus connected, das heißt sie kommunizieren in beiden Richtungen.

Zum Zwecke eines besseren Kommunikationsablaufs samt all seiner Kontrollinstanzen werden die Daten verkapselt, das heißt man gibt deren Datenpaket einen Header, der das Synchronisieren der Übertragung und den Empfang sichert.

Eine sonstige Besonderheit von TCP ist die Möglichkeit zum Regeln des Datendurchsatzes dank seiner Fähigkeit, Meldungen variabler Grösse zu senden. Diese Meldungen werden segments genannt.

Das Multiplexing

TCP kann multiplexen bzw. demultiplexen, das heißt von diversen Applikationen stammende Daten gleichzeitig auf ein und derselben Leitung verarbeiten oder mit anderen Worten eine Reihe von Informationen parallel strömen lassen.


Diese Operationen werden realisiert durch das Konzept der Ports (sockets), also die einer Applikationsart zugewiesene Nummer, die zusammen mit der IP Adresse den Rechner und die laufende Applikation eindeutig identifizert.

Datenformat unter TCP

Ein TCP-Segment wird gebildet durch:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Quellport Zielport
Sequenznummer
Quittierungsnummer
Daten-Offset / Verschiebung
Daten
reserviert URG ACK PSH RST SYN FIN Window / Fenster
Prüfsumme Urgent Pointer / Dringlichkeitsfaktor
Optionen Füllvektor
Daten

Im Folgenden wird die Bedeutung der einzelnen Felder erklärt.

Quellport (16 bits): Port der auf dem Quellrechner laufenden Applikation.

Zielport (16 bits): Port der auf dem Zielrechner laufenden Applikation.

Sequenznummer (32 bits): Wenn Flag SYN auf 0 geht, ist die Zuordnungnummer die Nummer des ersten Worts im vorliegenden Segment. Wenn SYN auf 1 geht, ist die Sequenznummer gleich der ursprünglichen Sequenznummer zwecks Synchronisierung (ISN).

Quittierungsnummer (32 bits): Das ist die Nummer der Empfangsbestätigung, also des nächsterwarteten Segments und nicht die vom zuletzt empfangenen.

Datenverschiebung (4 bits): Zeigt den Datenanfang im Paket an. Die Verschiebung ist hier sehr wichtig, da das Optionenfeld eine variable Länge hat.

reserviert (6 bits): Unbenutztes Feld, eventuell für zukünftige Verwendungen.

Flaggen (flags) (6 x 1 bit): Flags sind zusätzliche Informationen.
Dazu gehören:
URG: Eine 1 zeigt eine Dringlichkeit an.
ACK: Eine 1 zeigt eine Empfangsbestätigung an.
PSH (PUSH): Eine 1 bedeutet, das Paket ist nach dem PUSH-Verfahren aufgebaut.
RST: Eine 1 bedeutet, die Verbindung ist neu aufgebaut.
SYN: Die Flag TCP SYN bedeutet eine Verbindungsanfrage.
FIN: Eine 1 bedeutet eine Unterbrechung der Verbindung.

Fenster (16 bits): Das Feld zeigt die vom Sender erwünschte Byte-Anzahl ohne Bestätigung an.

Kontrollsumme (checksum oder CRC): Die Kontrollsumme wird aus den Datenfeldern des Headers gewonnen und sichert die Header-Integrität.

Urgent Pointer (Dringlichkeitsfaktor) (16 bits): Zeigt die Sequenznummer an, bei der die Dringlichkeitsstufe ansetzt.

Optionen (unterschiedliche Größe): Diverse Optionen.

Füllvektor: Wird mit Nullen gefüllt bis auf ein Vielfaches von 32 bits.

Transferzuverlässigkeit

Das TCP-Protokoll erlaubt ein hohes Maß an Zuverlässigkeit bei der Übermittlung von Daten, obwohl das IP-Protokoll, das es benutzt, keinerlei Sicherheitkontrolle für seine Datagramme vorsieht. TCP besitzt ein System von Empfangsbestätigungen, mit denen Server und Client ihre Daten sicher empfangen können.

Bei der Segmentübertragung, wird eine Ordnungsnummer (auch Sequenznummer) angehängt. Nach dem Empfang des Datensegments sendet der Empfangsrechner ein Datensegment, dessen ACK-Flag auf 1 steht (Meldung für eine Empfangsbestätigung) begleitet von einer Empfangsbestätigungsnummer, die gleich der vorherigen Sequenznummer ist.


Zusätzlich wird beim Empfang des Segments ein Zähler von der Sender-Stelle gesetzt und das Segment wird, nachdem der Zähler abgelaufen ist, zurückgesendet, weil davon ausgegangen wird, dass das Segment unterwegs verloren gegangen ist.


Wenn es jedoch nicht verloren gegangen ist und doch ankommt, erfährt der Empfänger anhand der Sequenznummer, dass es sich um ein Doppel handelt, und wird das zeitlich zuletzt angekommene Segment aufheben.

Verbindungsaufbau

Wenn der Kommunikationsprozess, der mittels einer Datenübertragung und einer Empfangsbestätigung abläuft, auf einer Ordnungsnummer basiert, dann müssen sowohl Sender als auch Empfänger (Client und Server) die Anfangssequenznummer der jeweils anderen Seite auch kennen.

Die Verbindung zweier Applikationen kommt wie folgt zustande:

Die TCP-Ports müssen offen sein.

Die Server-Applikation bleibt passiv, das heißt die Applikation horcht auf eine Verbindung.

Die Client-Applikation setzt einen Antrag an die horchende Server-Applikation ab. Die Client-Applikation heißt dann "aktiv offen".

Beide Rechner werden dann sequenz-synchron gestellt durch einen Prozess, der three ways handshake genannt wird und auch beim Verbindungsabbau angewendet wird. Dieser einführende Kommunikationsdialog läuft, wie sein Name schon sagt, in drei Etappen ab:

In der ersten Etappe sendet der Client ein Segment, dessen SYN-Flag auf 1 steht (Synchronsegment) mit einer Sequenznummer N, genannt Client-Initialisierung-Sequenznummer.

In der zweiten Etappe erhält der Server (der Empfangsrechner) das Initialisierungssegment vom Client, sendet eine Quittierung, das heißt ein Segment mit ACK und SYN auf 1 gesetzt (es geht immer noch um die Synchronisierung). Das Segment enhält die Sequenznummer dieses Rechners (vom Server), das heißt die Client-Initialisierungs-Sequenznummer. Das wichtigste Feld in diesem Segment ist das Quittierungsfeld mit der um 1 erhöhte Client-Initialisierung-Sequenznummer.

Zum Schluss überträgt der Client an den Server eine Quittierung in Form von einem Segment, dessen ACK-Flag auf 1 und dessen SYN-Flag auf 0 stehen (es dient nicht mehr der Synchronisierung). Seine Sequenznummer wird erhöht und die Quittierungsnummer ist dann die um 1 erhöhte Server-Initialisierungs-Sequenznummer.

three ways handshake - poignée de mains en trois temps
Direkt nach dieser Dreifachaustausch-Sequenz laufen beide Rechner synchron und die Übertragung kann beginnen.

Das Sliding-Window oder Schiebefensterverfahren

Oft ist es notwendig, die Anzahl der Quittierungen zu verringern, um das Netz zu entlasten. Dabei wird die Anzahl der Sequenzen auf einem festen Wert gehalten. Danach wird unverzüglich eine Quittierung erwartet. Diese Zahl wird im TCP/IP-Header-Feld Window / Fenster gespeichert.

Man nennt diese Methode Sliding-Window oder Schiebefensterverfahren, weil dabei sozusagen eine quittierungslose Sequenzenspanne festgelegt wird, die mit jeder neuen Quittierung verschoben wird.


Im übrigen ist die Fenstergröße nicht festgelegt. Tatsächlich kann der Server zusätzliche Quittierungen erzeugen und dann die für ihn richtig erscheinende Fenstergröße in das Fensterfeld eintragen. Auf diese Weise wird bei jeder Quittierung mit einem Antrag zur Fensterausdehnung der Client veranlasst, die rechte Fensterkante zu verschieben.


Im Falle einer Verringerung wird der Client dagegen nicht die rechte Fensterkante wieder nach links verschieben, sondern abwarten, dass das linke Fenster mit jeder Quittierung fortbewegt wird.

Verbindungsabbau

Der Client kann selbst, genau wie der Server, ein Ende der Verbindung beantragen. Der Verbindungsabbau läuft folgendermaßen ab:

Einer der Rechner sendet ein Segment mit FIN-Flag auf 1. Die Applikation geht in die passive End-Wartestellung, in der sie die laufenden Segmente zu Ende abfertigt und die nächsten ignoriert.

Nach Empfang dieses Segments sendet der angesprochene Rechner eine Quittierung mit FIN-Flag auf 1. Er bringt die laufenden Segmente auf den Weg, setzt die Applikation in Kenntnis, dass ein Segment FIN angekommen ist und erwidert es anschließend mit einem Segment FIN an den anderen Rechner. Die Verbindung wird so abgeschlossen.

Foto: © Pixabay.

Unsere Inhalte werden in Zusammenarbeit mit IT-Experten erstellt, unter der Leitung von Jean-François Pillou, Gründer von CCM.net. CCM ist eine führende internationale Technologie-Webseite und in elf Sprachen verfügbar.
Das Dokument mit dem Titel « Das TCP-Protokoll » wird auf CCM (de.ccm.net) unter den Bedingungen der Creative Commons-Lizenz zur Verfügung gestellt. Unter Berücksichtigung der Lizenzvereinbarungen dürfen Sie das Dokument verwenden, verändern und kopieren, wenn Sie dabei CCM deutlich als Urheber kennzeichnen.
Treten Sie der Community bei