Zum Hauptinhalt springen

TCP (Transmission Control Protocol)

Überblick​

TCP ist ein verbindungsorientiertes Transportprotokoll auf Schicht 4 des OSI-Modells, spezifiziert in RFC 9293. Es macht aus der unzuverlässigen Paketauslieferung von IP einen zuverlässigen, geordneten Bytestrom zwischen zwei Anwendungen: Was auf der einen Seite geschrieben wird, kommt auf der anderen Seite vollständig, in der richtigen Reihenfolge und ohne Duplikate an, andernfalls meldet die Verbindung einen Fehler. Ein TCP-Endpunkt wird über die Kombination aus IP-Adresse und Portnummer angesprochen.


Eigenschaften​

EigenschaftVerhalten bei TCP
VerbindungVerbindungsorientiert, vor den ersten Nutzdaten wird eine Verbindung aufgebaut
AuslieferungZuverlässig, verlorene Segmente werden erneut gesendet
ReihenfolgeGarantiert, Segmente werden vor der Auslieferung nach Sequenznummer sortiert
DuplikateWerden erkannt und verworfen
DatenmodellDurchgehender Bytestrom, Nachrichtengrenzen bleiben nicht erhalten
RichtungVollduplex, beide Seiten dürfen gleichzeitig senden
FlusskontrolleJa, über das Empfangsfenster
StaukontrolleJa, die Senderate passt sich der Last im Netz an
HeadergrößeMindestens 20 Byte, mit Optionen bis 60 Byte
Broadcast / MulticastNicht möglich, eine Verbindung hat immer genau zwei Endpunkte

Der Overhead dieser Garantien besteht aus einem größeren Header, einem zusätzlichen Round Trip für den Verbindungsaufbau und Verzögerung, sobald ein verlorenes Segment wiederholt werden muss.


Segment-Header​

FeldZweck
QuellportPort der sendenden Anwendung
ZielportPort der empfangenden Anwendung
SequenznummerPosition des ersten Nutzdatenbytes dieses Segments im Bytestrom
BestätigungsnummerNächstes Byte, das der Absender dieses Segments erwartet
FlagsSteuerbits, siehe unten
WindowAnzahl Bytes, die der Absender dieses Segments aktuell aufnehmen kann
PrüfsummeFehlererkennung über Header und Nutzdaten
OptionenMaximum Segment Size, Window Scaling, Selective Acknowledgement

Steuerflags​

FlagBedeutung
SYN (Synchronize)Fordert eine Verbindung an und synchronisiert die Sequenznummern
ACK (Acknowledgement)Die Bestätigungsnummer ist gültig
FIN (Finish)In dieser Richtung werden keine Daten mehr gesendet
RST (Reset)Bricht die Verbindung sofort und ohne geordneten Abbau ab
PSH (Push)Fordert den Empfänger auf, die Daten ohne Verzögerung an die Anwendung weiterzugeben
URG (Urgent)Kennzeichnet dringende Daten (in der Praxis veraltet)

Verbindungsaufbau (Drei-Wege-Handshake)​

Beide Seiten geben ihre eigene Anfangssequenznummer bekannt (x und y im Diagramm) und bestätigen die der Gegenseite mit ack = x + 1 bzw. ack = y + 1.

Client Server

| ---- SYN, seq = x -------------------------> | wartet auf Verbindungen
| |
| <--- SYN, ACK, seq = y, ack = x + 1 -------- | Verbindung angenommen
| |
| ---- ACK, ack = y + 1 ---------------------> | Verbindung aufgebaut
| |
| ==== Nutzdaten ============================> |
  • Der Client weiß nach dem zweiten Segment und der Server nach dem dritten Segment, dass die Verbindung in beide Richtungen funktioniert.
  • Der Handshake kostet einen Round Trip, bevor das erste Nutzdatenbyte gesendet werden kann.
  • Ein SYN an einen geschlossenen Port wird mit RST beantwortet. Daran unterscheidet ein Portscan einen geschlossenen von einem gefilterten Port.

Verbindungsabbau​

Ein geordneter Abbau schließt jede Richtung einzeln und benötigt daher vier Segmente. FIN bedeutet nur diese Seite hat mit dem Senden abgeschlossen. Die andere Richtung darf weiterhin Daten übertragen (Half-Close).

Client Server

| ---- FIN ----------------------------------> |
| <--- ACK ----------------------------------- |
| <--- FIN ----------------------------------- |
| ---- ACK ----------------------------------> |
| |
| (TIME_WAIT, danach wird die Verbindung frei) |

Die Seite, die zuerst schließt, verbleibt kurze Zeit im Zustand TIME_WAIT, damit verspätete Segmente der alten Verbindung nicht für Segmente einer neuen Verbindung mit demselben Portpaar gehalten werden. Ein RST überspringt dieses Verfahren und verwirft alles, was noch unterwegs ist.


Zuverlässigkeit​

  • Sequenznummern: Jedes Nutzdatenbyte hat eine Position im Strom, was Sortierung und Duplikaterkennung ermöglicht.
  • Bestätigungen: Der Empfänger bestätigt das nächste erwartete Byte und damit kumulativ alles bisher Empfangene.
  • Retransmission Timeout: Ein Segment, das nicht innerhalb der Wartezeit bestätigt wird, wird erneut gesendet. Die Wartezeit ergibt sich aus der gemessenen Round Trip Time.
  • Fast Retransmit: Mehrere doppelte Bestätigungen für dasselbe Byte deuten auf ein einzelnes verlorenes Segment hin und lösen eine Wiederholung aus, bevor die Wartezeit abläuft.
  • Prüfsumme: Ein beschädigtes Segment wird verworfen und damit nie bestätigt. Die fehlende Bestätigung löst eine Wiederholung aus.
  • Selective Acknowledgement (SACK): Eine Option, mit der der Empfänger genau melden kann, welche Bytebereiche angekommen sind, sodass nur die fehlenden Bereiche wiederholt werden.

Flusskontrolle​

Die Flusskontrolle schützt den Empfänger vor Überlastung. Jedes Segment meldet im Window-Feld, wie viele Bytes sein Absender aktuell puffern kann. Die Gegenseite darf niemals mehr unbestätigte Daten unterwegs haben, als dieses Fenster erlaubt.

Ein Empfänger mit vollem Puffer meldet ein Fenster von null. Der Sender pausiert dann, bis ein späteres Segment ein größeres Fenster meldet.

Staukontrolle​

Die Staukontrolle schützt das Netz vor Überlastung und arbeitet unabhängig vom Empfangsfenster. Die effektive Sendegrenze ist der kleinere Wert aus Empfangsfenster und Staufenster.

PhaseVerhalten
Slow StartDas Staufenster startet klein und wächst exponentiell
Congestion AvoidanceOberhalb eines Schwellwerts wächst das Fenster nur noch linear
Verlust erkanntDas Fenster wird verkleinert, weil Paketverlust auf Stau hindeutet
Fast RecoveryNach einem Fast Retransmit läuft die Übertragung mit verkleinertem Fenster weiter

Typische Einsatzgebiete​

TCP vs. UDP​

TCPUDP
KriteriumVollständigkeit ist wichtiger als LatenzEin verspätetes Paket ist wertlos, oder der Aufwand einer Verbindung übersteigt die Nutzdaten
BeispieleDateiübertragung, Webseiten, E-Mail, Fernadministration, DatenbankverbindungenLive-Audio und -Video, Online-Spiele, einfache Frage-Antwort-Protokolle

Bekannte TCP-Ports​

PortDienst
20/21FTP-Daten / FTP-Steuerung
22SSH
25SMTP
53DNS-Zonentransfers und Antworten oberhalb der UDP-Größengrenze
80HTTP
110/995POP3 / POP3S
143/993IMAP / IMAPS
443HTTPS
3306MySQL / MariaDB

Siehe auch​

  • UDP: das verbindungslose Gegenstück ohne Verbindungsaufbau, Zuverlässigkeit oder Flusskontrolle
  • OSI-Modell: wo die Transportschicht zwischen Netzwerk- und Sitzungsschicht sitzt