Das Transmission Control Protocol (kurz TCP) ist ein standardisiertes Verfahren zur beiderseitigen Datenübertragung in Computernetzwerken. Es ist verantwortlich für die zuverlässige Zustellung von Datenpaketen zwischen zwei Punkten in einem Netzwerk. Ohne TCP wären viele der Online-Aktivitäten, die wir für selbstverständlich halten, von E-Mail über das Surfen im Web bis hin zum Streaming von Videos, nicht möglich. Dieser Blogbeitrag soll als Einführung in TCP zu einem besseren Verständnis von TCP und dessen Funktionsweise führen.
Was ist das Transmission Control Protocol (TCP)?
TCP lässt sich im OSI-Referenzmodell der Transportschicht (Schicht 4) zuordnen, wo es zwischen dem Internetprotokoll (IP) und der Anwendungsebene sitzt. Die Hauptaufgabe von TCP besteht darin, eine zuverlässige, geordnete und fehlerfreie Kommunikation zwischen Anwendungen zu gewährleisten, die auf den Hosts innerhalb eines IP-Netzwerks laufen.
Das zentrale Merkmal von TCP ist die Verwendung von „Verbindungen“, welche zu Beginn einer Kommunikation aufgebaut, während der Kommunikation aufrecht und nach deren Beendigung abgebaut werden. In dem Aufbauen von „Verbindungen“ liegt der wesentliche Unterschied zwischen anderen sitzungslosen Protokollen wie dem User Datagram Protocol (kurz UDP). Im Fall von TCP spricht man von einem sogenannten sitzungsbasierten Protokoll.
Während bei UDP die einzelnen Datagramme bzw. Pakete unabhängig voneinander durch das Netzwerk übertragen werden, sieht TCP nicht jedes Paket einzeln, sondern den Zusammenhang zwischen diesen. So wird während einer Verbindung mit TCP, jedem Paket eine eindeutige Sequenznummer vergeben, um zu prüfen, ob alle Pakete ihr Ziel erreichen, oder einzelne auf dem Weg verloren gegangen sind. In diesem Fall nutzt TCP einen Mechanismus, der gewährleistet, dass verloren gegangene Pakete beim Empfängereintreffen.
Ein weiteres zentrales Merkmal von TCP ist die Verwendung von Ports. Ports sind nummerierte „Kanäle“, die TCP nutzt, um Daten an spezifische Anwendungen auf einem Host zu senden. Zum Beispiel wird Port 80 oft für HTTP-Datenverkehr (Webbrowsing) verwendet, während Port 25 oft für SMTP (E-Mail-Versand) verwendet wird.
Wie funktioniert TCP?
TCP Verbindungsaufbau
TCP verwendet einen Mechanismus, den sogenannten „Drei-Wege-Handshake“, um eine Verbindung zwischen dem Sender und dem Empfänger herzustellen. Der Sender (Client) sendet ein SYN-Paket (synchronization) an den Empfänger (Server), um den Verbindungsaufbau zu beginnen. Der Server antwortet mit einem SYN-ACK-Paket (Synchronize-Acknowledge), und der Client sendet schließlich ein ACK-Paket (Acknowledge) zurück, um den Handshake abzuschließen und die Verbindung herzustellen.
TCP Datenübertragung
Sobald die Verbindung hergestellt ist, beginnt die Datenübertragung. TCP teilt die Daten, die von der Anwendung gesendet werden, in Segmente (Pakete) auf und fügt jedem Paket eine Sequenznummer hinzu. Auf der Empfängerseite stellt TCP sicher, dass die Daten in der richtigen Reihenfolge wieder zusammengesetzt werden und sendet eine Bestätigung (ACK) für jedes empfangene Paket zurück.
TCP Verbindungsabbau
Wenn die Kommunikation beendet ist, verwenden die Sender das FIN-Paket (Finish) um die Verbindung zu beenden. Der Empfänger antwortet seinerseits mit einem ACK und dem darauffolgenden FIN um die Verbindung zu schließen.
Fehlerbehandlung in TCP
Nicht immer werden alle Pakete korrekt übertragen und gehen auf dem Weg zum Empfänger verloren. TCP nutzt hier einen einfachen Mechanismus, um fehlende Pakete zu identifizieren. Während der Empfänger die Pakete entgegennimmt, sendet dieser für jedes empfangene Paket eine Empfangsbestätigung (ACK). Die gesendete Empfangsbestätigung erhält der ursprüngliche Absender und verifiziert diese anhand der mitgesendeten Paketnummer. Für jedes gesendete Paket, startet der Sender einen Timer, der beim Erhalt der Empfangsbestätigung verworfen wird. Sollte ein Timer nach einer festgelegten Zeit nicht zurückgesetzt werden, kommt es zu einem sog. Timeout. Beim Eintreten eines Timeouts, nimmt der ursprüngliche Sender an, dass das Paket nicht empfangen wurde und wiederholt den Sendevorgang des verloren gegangenen Pakets.
Flusskontrolle in TCP
Die Flusskontrolle in TCP sorgt dafür, dass der Sender nicht mehr Daten sendet, als der Empfänger verarbeiten kann. Jeder Empfänger hat einen „Empfangspuffer“, in dem die empfangenen Daten vor der Verbreitung gespeichert werden.
Der Empfänger teilt dem Sender während der Kommunikation mit, wie viel freier Speicherplatz noch in seinem Puffer vorhanden ist. Woraufhin der Sender bestimmen kann, wie viele Daten er sendet, ohne den Puffer des Empfängers zu überlasten.
Wenn der Puffer des Empfängers voll ist, stoppt der Sender die Datenübertragung und nimmt diese wieder auf, sobald der Puffer des Empfängers wieder frei ist.
Staukontrolle in TCP
Während die Flusskontrolle sicherstellt, dass der Sender den Empfänger nicht überlastet, dient die Staukontrolle dazu, die Überlastung des Netzwerks zu verhindern. Bei der Staukontrolle passt der Sender seine Datenübertragungsrate an die Netzwerkkapazität an.
Wenn der Sender feststellt, dass mehrere Pakete verloren gehen (Zeichen für potenzielle Netzwerküberlastung), reduziert dieser seine Übertragungsrate. Ist das Netzwerk weniger ausgelastet, erhöht der Sender diese wieder.
Möglichkeiten zur Verschlüsselung von TCP mittels TLS
Das Transmission Control Protocol bietet von Haus aus keine Möglichkeit zur Verschlüsselung der Datenübertragung. Es besteht jedoch die Möglichkeit, ein Verschlüsselungsprotokoll (z.B. TLS, umgangssprachlich SSL) zwischen TCP und dem Anwendungsprotokollen (z.B. HTTP/2) einzusetzen.
Vor- und Nachteile von TCP
Wie jedes Protokoll hat auch TCP seine Vor- und Nachteile.
Vorteile
- Zuverlässigkeit: TCP stellt sicher, dass alle übertragenen Daten korrekt und in der richtigen Reihenfolge beim Empfänger ankommen.
- Flusskontrolle: TCP implementiert Mechanismen zur Flusskontrolle, welche verhindern, dass der Sender den Empfänger mit Daten überflutet.
- Staukontrolle: TCP kann seine Datenübertragungsrate dynamisch an die Netzwerkbedingungen anpassen.
Nachteile
- Connection-Overhead: TCP, muss vor dem Senden von Daten eine Verbindung herstellen. Dieser Prozess erzeugt einen zusätzlichen Connection Overhead und erhöht dadurch die Latenz.
- Head-of-Line Blocking: Das „Head-of-Line“-Blocking tritt auf, wenn ein Paket während dem Senden verloren geht oder verzögert wird. Da TCP die Pakete in der richtigen Reihenfolge empfangen muss, blockiert das fehlende Paket alle nachfolgenden Pakete, selbst wenn sie bereits angekommen sind.
- Package-Overhead: Jedes TCP Paket enthält zusätzliche Informationen wie die Sequenznummern, um Mechanismen wie die Empfangsbestätigung und Flusskontrolle zu ermöglichen. Dieser zusätzliche Package-Overhead beeinträchtigt die Netzwerkleistung.
- Ungeeignet für Echtzeitanwendungen: TCP ist weniger geeignet für Echtzeitanwendungen wie Voice-over-IP, bei denen es wichtiger ist, Daten schnell zu liefern, als sicherzustellen, dass alle Daten in der richtigen Reihenfolge ankommen.
Abschließender Gedanke zu TCP
Das Transmission Control Protocol (TCP) spielt eine entscheidende Rolle in der modernen digitalen Kommunikation. Als verbindungsorientiertes, zuverlässiges Protokoll stellt es sicher, dass Daten korrekt zwischen Sender und Empfänger übertragen werden.
Obwohl neuere Protokolle wie QUIC entwickelt wurden, um einige der Herausforderungen von TCP zu überwinden, bleibt TCP dennoch ein grundlegender Baustein des Internets.
Sollten Sie bei der Umsetzung Ihrer App, klassischen oder WordPress Webseite Hilfe benötigen, wenden Sie sich gern an mich.