Begriff
TCP (Transmission Control Protocol)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Das Internet ist unzuverlässig (Pakete gehen verloren). Deine Email darf aber keine Lücken haben. TCP ist der Buchhalter des Internets. Es nummeriert jedes Byte. "Ich sende Paket 1, 2, 3." Empfänger: "Habe 1 und 3. Wo ist 2?" TCP: "Oh, ich schicke 2 nochmal." (Retransmission). Erst wenn alles da und sortiert ist, gibt TCP die Daten an die App (Browser) weiter. Der Preis dafür: Es ist langsamer als UDP (wegen Warten auf Bestätigung).
Merksatz: Ein zuverlässiges, verbindungsorientiertes Transportprotokoll, das sicherstellt, dass Daten vollständig, fehlerfrei und in der richtigen Reihenfolge beim Empfänger ankommen.
Fast alles nutzt TCP: HTTP (Webseiten), SSH, FTP, Email (SMTP). Wenn du "Verbindung aufbauen" hörst, ist es TCP. Wenn du "Live Streaming" siehst, wo Artefakte okay sind, ist es oft UDP.
1. Flow Control (Sliding Window)
Wenn der Server (Sender) schneller sendet, als mein Handy (Empfänger) verarbeiten kann? Der Puffer läuft über -> Paketverlust. TCP verhindert das. Im ACK-Paket sendet der Empfänger ein "Window Size": "Ich habe noch 5kb Platz." Der Sender bremst sofort ab. Wenn Window=0, stoppt er komplett ("Zero Window Probe"), bis wieder Platz ist. Das verhindert Überlastung des Empfängers.
2. Congestion Control (Stau-Vermeidung)
Schwerer: Das Netzwerk dazwischen (Router) ist überlastet. TCP merkt das nicht direkt (kein Kabel zum Router). Es merkt nur: "Pakete gehen verloren" (Timeout). Algorithmen wie CUBIC oder BBR (von Google) raten: "Aha, Verlust! Ich halbiere meine Geschwindigkeit." (Slow Start -> Congestion Avoidance). Dann tastet TCP sich langsam wieder hoch. BBR ("Bottleneck Bandwidth and RTT") ist schlauer: Es misst die Latenz-Steigung, bevor Pakete verloren gehen, und bremst proaktiv.
3. Head-of-Line Blocking (HoL)
Das größte Problem von TCP. Paket 1 fehlt. Paket 2, 3, 4 sind da. TCP darf 2, 3, 4 nicht an den Browser geben, bevor 1 da ist (Order Guarantee). Der Browser wartet (Spinner). Bei HTTP/2 (alles über eine TCP-Verbindung) blockiert ein verlorenes Paket alle Bilder der Webseite. Lösung: HTTP/3 (QUIC). Basiert auf UDP. Wenn Paket 1 fehlt, werden 2, 3, 4 trotzdem ausgeliefert.
1. TCP Fast Open (TFO)
Der Standard-Handshake (SYN -> SYN-ACK -> ACK) braucht eine volle Runde (RTT), bevor die ersten echten Daten fließen dürfen. Das sorgt für Latenz. TCP Fast Open erlaubt es dem Client, beim zweiten Besuch eines Servers die Daten bereits direkt in das erste SYN-Paket zu packen. Der Server prüft ein beim ersten Mal vergebenes "Cookie" und akzeptiert die Daten sofort. Das spart eine komplette Rundenzeit ein, was besonders bei Webseiten mit vielen kleinen Verbindungen einen spürbaren Geschwindigkeitsvorteil bringt.
2. Selective Acknowledgments (SACK)
Klassisches TCP war dumm bei Lücken. Wenn Pakete 1, 2, 4, 5 ankamen, sagte der Empfänger nur: "Habe alles bis 2. Schick mir 3." Der Sender musste dann oft 3, 4 und 5 erneut schicken, obwohl 4 und 5 schon da waren. Mit SACK (RFC 2018) sagt der Empfänger präzise: "Habe 1 und 2. Paket 3 fehlt! Aber 4 und 5 habe ich auch schon." Der Sender schickt dann wirklich nur Paket 3 nach. Das spart in verlustreichen Netzwerken (WLAN/LTE) massiv Bandbreite und Zeit.
3. Retransmission Timeout (RTO) & Exponential Backoff
Wie lange wartet TCP, bevor es ein Paket als "verloren" glaubt und neu sendet? TCP misst ständig die RTT (Round Trip Time) – also wie lange ein Paket hin und zurück braucht. Wenn die Bestätigung nicht innerhalb von RTT plus Sicherheitspuffer kommt, schlägt der RTO-Timer zu. Bei jedem Fehlversuch verdoppelt TCP die Wartezeit (Exponential Backoff). Wenn dein Internet also sehr schlecht ist, wartet TCP erst 1s, dann 2s, 4s, 8s... Das schont das Netzwerk vor "Spamming", wenn die Leitung ohnehin gerade verstopft ist.
Quick-Check
Was ist ein Segment?
Die Dateneinheit von TCP (Layer 4). Ein IP-Paket (L3) enthält ein TCP-Segment. Es hat Header (Source Port, Dest Port, Seq Num) und Payload.Warum 3-Way-Handshake?
Um Sequence Numbers zu synchronisieren und sicherzustellen, dass die Gegenseite "wirklich" da ist (Anti-Spoofing). Siehe eigenen Artikel "TCP Handshake".Keep-Alive?
TCP-Verbindungen sterben leise, wenn das Kabel gezogen wird (ohne FIN). Keep-Alive sendet leere Pakete alle 2 Stunden (Default), um zu prüfen "Lebst du noch?". Viele Firewalls killen Idle-Connections aber schon nach 1 Stunde.