TCP - Transmission Control Protocol
Das Transmission Control Protocol, kurz TCP, ist Teil der Protokollfamilie TCP/IP. TCP übernimmt, als verbindungsorientiertes Protokoll, innerhalb von TCP/IP die Aufgabe der Datensicherheit, der Datenflusssteuerung und ergreift Maßnahmen bei einem Datenverlust. Die Funktionsweise von TCP besteht darin, den Datenstrom verschiedener Anwendungen aufzuteilen, mit einem Header zu versehen und an das Internet Protocol (IP) zu übergeben. Beim Empfänger werden die Datenpakete in die richtige Reihenfolge gebracht und an die adressierte Anwendung übergeben.
Das Transmission Control Protocol (TCP) im TCP/IP-Protokollstapel
| Schicht | Dienste / Protokolle / Anwendungen | |||
|---|---|---|---|---|
| Anwendung | HTTP | IMAP | DNS | SNMP |
| Transport | TCP | UDP | ||
| Internet | IP (IPv4 / IPv6) | |||
| Netzzugang | Ethernet, ... | |||
Eigenschaften von TCP
- Verbindungsmanagement
- Flusskontrolle
- Zeitüberwachung
- Fehlerbehandlung
Funktionsweise von TCP
Durch TCP stehen Sender und Empfänger ständig in Kontakt zueinander. Obwohl es sich eher um eine virtuelle Verbindung handelt, werden während der Datenübertragung ständig Kontrollmeldungen ausgetauscht. So werden zum Beispiel verloren gegangene Pakete von TCP erkannt und erneut angefordert.
TCP hat außerdem einen Algorithmus, der die Datenrate dynamisch an die Netzauslastung anpasst. TCP erhöht nach dem Verbindungsaufbau die Übertragungsrate kontinuierlich, bis irgendwo auf dem Weg zum Empfänger Pakete verloren gehen. TCP reagiert dann umgehend mit der Halbierung der Datenrate.
Zum einen nutzt TCP freie Kapazität aus. Zum anderen, wenn andere Nutzer die Kapazität ebenfalls beanspruchen, dann gibt TCP sie wieder frei. Diese Steuerung findet in den Endgeräten statt. Die IP-Router im Netz haben damit nichts zu tun.
Ein Problem ist das dann, wenn Anwendungen einfach mehrere TCP-Verbindungen öffnen. Das ist zum Beispiel bei P2P-Filesharing in der Regel der Fall. Das Problem dabei ist aber nicht das Filesharing, sondern die Zuteilungsregeln von TCP.
Der kleine Bruder: UDP - User Datagram Protocol
Neben dem verbindungsorientierten TCP gibt es auch das verbindungslose und unsichere UDP. Das User Datagram Protocol (UDP) ist auf der 4. Schicht, der Transportschicht, des OSI-Schichtenmodells angeordnet. Es hat die selbe Aufgabe wie TCP, nur das ihm nahezu alle Kontrollfunktionen fehlen und dadurch schlanker daher kommt und einfacher zu verarbeiten ist.
TCP-Port-Struktur

In jedem TCP-Datenpaket ist eine Nummer hinterlegt, die einen Port definiert, hinter dem sich eine Anwendung oder ein Dienst befindet, die diesen Port abhören und die Daten von TCP entgegennehmen. Datenpakete, die über IP ihr Ziel erreichen, werden von TCP zusammengesetzt und über die Port-Nummer an eine Anwendung übergeben. Dieser Port wird ständig von einem Prozess, Dienst oder einer Anwendung abgehört.
Die Port-Nummer 0 bis 1023 sind jeweils einer Anwendung oder einem Dienst fest zugeordnet. Die darüber liegenden Port-Nummern können frei belegt werden, sofern sie gerade von keinem anderen Dienst belegt sind. Zum Beispiel nehmen Programme einen freien Port, um damit Kontakt zu einem Server aufzunehmen. Der Server schickt dann die Daten an diesen Port zurück. Damit wird sichergestellt, dass die Daten nicht an die falsche Anwendung übergeben werden.
Durch die Port-Struktur ist es möglich, dass mehrere Anwendungen gleichzeitig über das Netzwerk Verbindungen zu Kommunikationspartnern aufbauen können.
Mit der Port-Struktur ist es möglich, dass mehrere Anwendungen gleichzeitig über das Netzwerk Verbindungen zu mehreren Kommunikationspartner aufbauen.
TCP-Port-Übersicht
| Well Known Ports | 0 - 1023 | Diese Ports sind fest einer Anwendung oder einem Protokoll zugeordnet. Die feste Zuordnung ermöglicht eine einfachere Konfiguration durch den Benutzern. Er kommt so mit dem Protokoll TCP in Kontakt. Die Verwaltung dieser Ports übernimmt die Internet Assigned Numbers Authority (IANA). |
|---|---|---|
| Registered Ports | 1024 - 49151 | Diese Ports sind für Dienste vorgesehen. |
| Dynamically Allocated Ports | 49152 - 65535 | Diese Ports werden dynamisch zugewiesen. Jeder Client kann diese Ports nutzen. Wenn ein Prozess einen Port benötigt, fordert er diesen bei seinem Host an. |
Beispiele für TCP-Ports
| Port-Nummer | Protokoll | Anwendung |
|---|---|---|
| 21 | FTP | Dateitransfer |
| 23 | Telnet | Konsole |
| 25 | SMTP | Postausgang |
| 80 | HTTP | World Wide Web |
| 110 | POP3 | Posteingang |
| 119 | NNTP | Usenet |
Aufbau des TCP-Headers
Jedem Datenpaket, das TCP verschickt, wird ein Header vorangestellt, der die folgenden Daten enthält:
- Sender-Port
- Empfänger-Port
- Paket-Reihenfolge (Nummer)
- Prüfsumme
- Quittierungsnummer
Aufbau des TCP-Headers TCP-Pakete setzen sich aus dem Header-Bereich und dem Daten-Bereich zusammen. Im Header sind alle Informationen enthalten, die für eine gesicherte TCP-Verbindung wichtig sind. Der TCP-Header ist in mehrere 32-Bit-Blöcke aufgeteilt. Mindestens enthält der Header 5 solcher Blöcke. Somit hat ein TCP-Header eine Länge von mindestens 20 Byte.
Bedeutung der Felder im TCP-Header
| Feldinhalt | Bit | Beschreibung |
|---|---|---|
| Quell-Port (Source-Port) | 16 | Hier steht der Quell-Port, von der die Anwendung das TCP-Paket verschickt. Bei einer Stellenanzahl von 16 Bit beträgt der höchste Port 65.535. |
| Ziel-Port (Destination-Port) | 16 | Hier steht der Ziel-Port, über welchen das TCP-Paket der Anwendung zugestellt wird. Bei einer Stellenanzahl von 16 Bit beträgt der höchste Port 65.535. |
| Sequenz-Nummer | 32 | Bei jeder TCP-Verbindung werden Nummern zwischen den Kommunikationspartner ausgehandelt. Während der Verbindung werden diese Nummern verwendet um die TCP-Pakete eindeutig zu identifizieren. |
| Acknowledgement-Nummer | 32 | Alle Datenpakete werden bestätigt. Dazu dient das ACK-Flag und die Acknowledgement-Nummer, die sich aus der Sequenz-Nummer und der Anzahl von empfangenen Bytes errechnet. Damit kann der Sender feststellen, ob die Daten beim Empfänger vollständig angekommen sind. |
| Data Offset | 4 | Hier steht die Anzahl der 32-Bit-Blöcke des TCP-Headers. Die Mindestmenge beträgt 5. |
| Reserviert | 6 | Dieser Bereich ist auf 000000 gesetzt und für Erweiterungen des TCP-Headers gedacht. |
| Flags | 6 | Kennzeichnung bestimmter für die Kommunikation und Weiterverarbeitung der Daten wichtiger Zustände (URG, ACK, PSH, RST, SYN, FIN). |
| Window-Größe | 16 | Der Empfänger sendet dem Sender in diesem Feld die Anzahl an Daten, die der Sender senden darf. Dadurch wird das Überlaufen des Empfangspuffers beim Empfänger verhindert. Den Vorgang nennt man Windowing und dient der Datenflusssteuerung. |
| Check-Summe | 16 | Dieses Feld dient der Kontrolle von Header- und Datenbereich. |
| Urgent-Pointer | 16 | Zusammen mit der Sequenz-Nummer gibt dieser Wert die genaue Position der Daten im Datenstrom an. Der Wert ist nur gültig, wenn das URG-Flag gesetzt ist. |
| Optionen/Füllbits (Options/Padding), jeweils 32 Bit lang |
Dieses Feld beinhaltet optionale Informationen. Um die 32-Bit-Grenze einzuhalten wird das Options-Feld mit Nullen aufgefüllt. | |
TCP-Flags zur Steuerung der Kommunikation
| TCP-Flag | Beschreibung |
|---|---|
| Urgent-Pointer-Flag (URG-Flag) |
Ist das URG-Flag gesetzt wird das Urgent-Pointer-Feld ausgewertet. Ein solches Datenpaket ist keiner Anwendung zugeordnet. Es hat eine besondere Priorität. |
| Acknowledgement-Flag (ACK-Flag) |
Da sich die Acknowledgement-Nummer nicht bei jedem Datenpaket ändert, kennzeichnet ein gesetztes ACK-Flag die Gültigkeit der Acknowledgement-Nummer. |
| Push-Flag (PSH-Flag) |
TCP puffert einzelne Datenpakete bis eine größere zusammenhängende Datenmenge vorhanden ist. Ist das PSH-Flag gesetzt, wird dieses Paket sofort an den TCP-Port weitergeleitet. |
| Reset-Flag (RST-Flag) |
Ist ein Abbruch der TCP-Verbindung notwendig, wird das RST-Flag gesetzt. Es kommt auch zum Einsatz, wenn eine TCP-Verbindung abgewiesen wird. |
| Syncronization-Flag (SYN-Flag) |
Das SYN-Flag wird gesetzt, wenn zwischen Sender und Empfänger eine Verbindung aufgebaut werden soll. |
| Final-Flag (FIN-Flag) |
Sind zwischen zwei Stationen alle Daten übertragen, senden beide Stationen ein TCP-Paket mit gesetztem FIN-Flag. Danach gilt die TCP-Verbindung als beendet. |
TCP-Verbindungsaufbau

Der Verbindungsaufbau läuft nach dem Three-Way-Handshake ab. Zuerst schickt der Client an den Server einen Verbindungswunsch (SYN). Der Server bestätigt den Erhalt der Nachricht (ACK) und äußert ebenfalls seinen Verbindungswunsch (SYN). Der Client bestätigt den Erhalt der Nachricht (ACK). Danach erfolgt die Kommunikation zwischen Client und Server.
TCP-Kommunikation

Der Sender beginnt mit dem Senden des ersten Datenpakets (Send Paket 1). Der Empfänger nimmt das Paket entgegen (Receive Paket 1) und bestätigt den Empfang (Send ACK Paket 1). Der Sender nimmt die Bestätigung entgegen (Receive ACK Paket 1) und sendet das zweite Datenpaket (Send Paket 2). Der Empfänger nimmt das zweite Paket entgegen (Receive Paket 2) und bestätigt den Empfang (Send ACK Paket 2). Der Sender nimmt die zweite Bestätigung entgegen (Receive ACK Paket 2).
Und so läuft die Kommunikation weiter, bis alle Pakete übertragen wurden.
TCP-Kommunikation mit Timer

Um festzustellen, ob Datenpakete ankommen, wird ein Timer gesetzt. Läuft der Timer ab, dann muss der Sender das Datenpaket nochmal schicken.
Im Prinzip läuft die Kommunikation wie gewohnt. Der Sender beginnt mit dem Senden des ersten Datenpakets (Send Paket 1). Gleichzeitig setzt er einen Timer. Bekommt er die Bestätigung (Send ACK Paket 1) des Empfängers, dann sendet er das zweite Paket. Läuft der Timer jedoch ab, dann geht der Sender von einem Paketverlust aus und sendet das Datenpaket noch mal (Send Paket 1).
TCP-Verbindungsabbau

Der Verbindungsabbau kann sowohl vom Client als auch vom Server vorgenommen werden. Zuerst schickt einer der beiden der Gegenstelle einen Verbindungsabbauwunsch (FIN). Die Gegenstelle bestätigt den Erhalt der Nachricht (ACK) und schickt gleich darauf ebenfalls einen Verbindungsabbauwunsch (FIN). Danach bekommt die Gegenstelle noch mitgeteilt, dass die Verbindung abgebaut ist (ACK).
Flusskontrolle
Da es bei Übertragungsproblemen zu doppelten Datenpaketen und Quittierungen kommen kann, werden alle TCP-Pakete und TCP-Meldungen mit einer fortlaufenden Sequenznummer gekennzeichnet. So sind Sender und Empfänger in der Lage die Reihenfolge und Zuordnung der Datenpakete und Meldungen zu erkennen.
Ein weiteres Problem sind die Wartezeiten zwischen Datenpaket, Bestätigung und nächstes Datenpaket. Die Wartezeit kann manchmal sehr lange dauern. Insbesondere dann, wenn die Quittierung eines gesendeten Pakets nicht kommt. Deshalb können auch mehrere TCP-Pakete hintereinander verschickt werden (Sliding Window). Weitere Datenpakete folgen dann, wenn das erste ACK zurück kommt.
Weitere verwandte Themen:
- TCP/IP
- IPv4 - Internet Protocol Version 4
- IPv6 - Internet Protocol Version 6
- UDP - User Datagram Protocol
- OSI-Schichtenmodell in der Netzwerktechnik
- Ermittlung TCP-Ports und -Dienste
| Dieser Text ist mir was wert: | [ ? ] |






