Webentwicklung
TCP
TCP (Transmission Control Protocol) ist eines der beiden zentralen Transportprotokolle des Internets (neben UDP) und Grundlage für HTTP/HTTPS, E-Mail, SSH und nahezu alle verbindungsorientierten Protokolle. Spezifiziert 1981 in RFC 793 (aktuell RFC 9293, 2022), arbeitet TCP auf Layer 4 des OSI-Modells und garantiert, dass Datenpakete vollständig, in richtiger Reihenfolge und ohne Duplikate ankommen, auch wenn das Netzwerk Pakete verliert oder…
Was ist TCP?
TCP (Transmission Control Protocol) ist eines der beiden zentralen Transportprotokolle des Internets (neben UDP) und die Grundlage für HTTP/HTTPS, E-Mail (SMTP/IMAP/POP3), SSH und fast alle anderen verbindungsorientierten Protokolle. TCP garantiert, dass Datenpakete vollständig, in der richtigen Reihenfolge und ohne Duplikate beim Empfänger ankommen — auch wenn das Netzwerk dazwischen Pakete fallen lässt, neu anordnet oder verzögert.
Der Preis für diese Zuverlässigkeit ist Overhead: Verbindungsaufbau (Three-Way-Handshake), Acknowledgements, Retransmissions und Congestion Control fügen Latenz und Datenvolumen hinzu. HTTP/3 und QUIC wurden entwickelt, um genau diesen Overhead zu reduzieren.
Wie funktioniert TCP?
Vor der Datenübertragung wird eine Verbindung über den Three-Way-Handshake etabliert:
- SYN: Client sendet ein Segment mit gesetztem SYN-Flag und einer zufälligen Sequenznummer.
- SYN-ACK: Server antwortet mit SYN+ACK, bestätigt die Client-Sequenznummer und sendet eine eigene.
- ACK: Client bestätigt die Server-Sequenznummer. Die Verbindung ist offen.
Dieser Handshake kostet einen Round-Trip (RTT) — bei 50ms Latenz also 50ms bevor ein einziges Byte Nutzdaten übertragen wird. Bei HTTPS kommt der TLS-Handshake dazu (weiterer RTT bei TLS 1.2, halber RTT bei TLS 1.3).
Zuverlässigkeit erreicht TCP durch:
- Sequenznummern: Jedes Byte hat eine eindeutige Sequenznummer, sodass der Empfänger Lücken und Duplikate erkennt.
- Acknowledgements: Der Empfänger bestätigt empfangene Daten. Ausbleibende ACKs lösen Retransmission aus.
- Congestion Control: TCP reduziert die Senderate bei Paketverlusten (Slow Start, AIMD) — verhindert Netzüberlastung.
TCP in der Praxis
Für Webentwickler ist TCP meist unsichtbar — aber Performance-Probleme haben oft TCP-Ursachen:
Connection Reuse: HTTP/1.1 eingeführt Keep-Alive, um TCP-Verbindungen für mehrere Requests zu nutzen — statt pro Request einen neuen Three-Way-Handshake durchzuführen. HTTP/2 geht weiter mit Multiplexing (viele Requests über eine TCP-Verbindung gleichzeitig).
Head-of-Line Blocking bei HTTP/2: HTTP/2 überträgt mehrere Streams über eine TCP-Verbindung. Geht ein TCP-Paket verloren, blockiert TCP (das alle Pakete in Reihenfolge liefern muss) alle Streams — nicht nur den betroffenen. HTTP/3 löst das durch QUIC (UDP-basiert), das Streams unabhängig voneinander behandelt.
TCP Keepalive bei persistenten Verbindungen: Redis, MySQL, WebSocket-Verbindungen nutzen TCP-Keepalive, um zu erkennen ob die Verbindung noch lebt. Falsch konfigurierte Keepalive-Timeouts führen zu Ghost-Connections in Connection-Pools.
Ports: TCP-Ports identifizieren Dienste auf einem Host. Bekannte Ports: 80 (HTTP), 443 (HTTPS), 22 (SSH), 3306 (MySQL), 6379 (Redis). Ports über 1024 sind frei verfügbar — WordPress lokal auf Port 8765 nutzt auch TCP.
Was passiert bei TCP-Problemen?
TCP-Verbindungsprobleme äußern sich als Timeouts — der häufigste Fehler in WordPress-Logs. Wenn MySQL nicht erreichbar ist, wartet PHP auf den TCP-Connect, bis der connect_timeout abläuft. Wenn Redis hängt, warten alle WordPress-Anfragen. Firewall-Regeln die TCP-Verbindungen stillschweigend droppen (statt mit RST abzuweisen) sind besonders schwer zu debuggen, weil Retransmissions und Timeouts die eigentliche Ursache verschleiern.
Bei Hetzner-Servern mit WireGuard VPN: TCP-Verbindungen durch den VPN-Tunnel haben etwas höhere MTU-Overhead — tcp_mtu_probing auf dem Server aktivieren verhindert PMTUD-Blackhole-Probleme.
Häufige Fragen
Was ist der Unterschied zwischen TCP und UDP? TCP ist verbindungsorientiert und zuverlässig (Three-Way-Handshake, Acknowledgements, geordnete Lieferung). UDP ist verbindungslos und unzuverlässig — keine Handshakes, keine Bestätigungen, keine Reihenfolge-Garantie. UDP ist schneller für Anwendungen die Latenz über Zuverlässigkeit priorisieren (DNS-Abfragen, Video-Streaming, Online-Spiele, QUIC/HTTP/3).
Warum hat HTTP/3 TCP aufgegeben? TCP hat strukturelle Nachteile: Head-of-Line-Blocking (ein verlorenes Paket blockiert alle Streams), langsamer Verbindungsaufbau (Handshake + TLS), und schlechte Performance bei Netzwechseln (Mobile, WiFi → LTE). QUIC auf UDP implementiert alles was TCP kann, aber ohne diese Einschränkungen und mit eingebautem TLS 1.3.
Wie viele TCP-Verbindungen darf ein Browser gleichzeitig öffnen? Bei HTTP/1.1: 6 Verbindungen pro Host (Browser-Limit). Bei HTTP/2: 1 Verbindung pro Host (Multiplexing macht mehrere überflüssig). Das war einer der Hauptgründe für Domain-Sharding bei HTTP/1.1 — ein Optimierungs-Trick der bei HTTP/2 kontraproduktiv ist.
TCP in drei Sätzen
TCP (Transmission Control Protocol) ist eines der beiden zentralen Transportprotokolle des Internets (neben UDP) und Grundlage für HTTP/HTTPS, E-Mail, SSH und nahezu alle verbindungsorientierten Protokolle. Spezifiziert 1981 in RFC 793 (aktuell RFC 9293, 2022), arbeitet TCP auf Layer 4 des OSI-Modells und garantiert, dass Datenpakete vollständig, in richtiger Reihenfolge und ohne Duplikate ankommen, auch wenn das Netzwerk Pakete verliert oder…