TCP

Was ist TCP?

Wenn du eine E-Mail sendest, eine Datei herunterlädst oder eine Website aufrufst, willst du sicher sein dass alle Daten vollständig und in der richtigen Reihenfolge ankommen. Genau das garantiert das Transmission Control Protocol (TCP).

TCP ist ein verbindungsorientiertes Transportprotokoll auf Schicht 4 des OSI-Modells. Es stellt vor der eigentlichen Datenübertragung eine Verbindung her, überwacht die Übertragung, bestätigt den Empfang jedes Datenpakets und sorgt bei Verlust für eine erneute Übertragung.

TCP vs. UDP – Der grundlegende Unterschied

Merkmal

TCP

UDP

Verbindung

Verbindungsorientiert

Verbindungslos

Zuverlässigkeit

Garantierte Zustellung

Keine Garantie

Reihenfolge

Garantiert

Nicht garantiert

Geschwindigkeit

Langsamer (Overhead)

Schneller

Verwendung

HTTP, FTP, SMTP, SSH

DNS, VoIP, Streaming

Der TCP 3-Way-Handshake

Bevor TCP Daten überträgt wird eine Verbindung aufgebaut – der sogenannte 3-Way-Handshake. Er besteht aus drei Schritten:

Client                          Server
  │                               │
  │──── SYN ─────────────────────▶│  Schritt 1: Client möchte Verbindung
  │     "Ich möchte verbinden"    │
  │                               │
  │◀─── SYN-ACK ─────────────────│  Schritt 2: Server bestätigt und antwortet
  │     "OK, ich bin bereit"      │
  │                               │
  │──── ACK ─────────────────────▶│  Schritt 3: Client bestätigt
  │     "Verstanden, los geht's"  │
  │                               │
  │════ Datenübertragung ═════════│  Verbindung aufgebaut
  │                               │

Schritt

Flag

Bedeutung

1

SYN

Client sendet Synchronisierungsanfrage mit zufälliger Sequenznummer

2

SYN-ACK

Server bestätigt (ACK) und sendet eigene Sequenznummer (SYN)

3

ACK

Client bestätigt die Sequenznummer des Servers

Verbindungsabbau – Der 4-Way-Handshake

Das Beenden einer TCP-Verbindung erfolgt mit vier Schritten da beide Seiten ihre Verbindung unabhängig voneinander schließen:

Client                          Server
  │                               │
  │──── FIN ─────────────────────▶│  Client: Ich bin fertig
  │                               │
  │◀─── ACK ─────────────────────│  Server: Verstanden
  │                               │
  │◀─── FIN ─────────────────────│  Server: Ich bin auch fertig
  │                               │
  │──── ACK ─────────────────────▶│  Client: Verstanden
  │                               │
  │         Verbindung getrennt   │

TCP-Flags

TCP-Pakete enthalten verschiedene Steuer-Flags im Header:

Flag

Name

Bedeutung

SYN

Synchronize

Verbindungsaufbau initiieren

ACK

Acknowledge

Empfang bestätigen

FIN

Finish

Verbindung beenden

RST

Reset

Verbindung sofort abbrechen (Fehler)

PSH

Push

Daten sofort an Anwendung weiterleiten

URG

Urgent

Dringende Daten vorrangig behandeln

Sequenznummern und Bestätigungen

TCP nummeriert jeden gesendeten Byte mit einer Sequenznummer. Der Empfänger bestätigt den Empfang mit einer Acknowledgement-Nummer die angibt welches Byte als nächstes erwartet wird:

Sender                          Empfänger
  │                               │
  │── Segment 1 (Seq 1-1000) ────▶│
  │                               │
  │◀─ ACK 1001 ──────────────────│  "Ich habe bis Byte 1000 – sende ab 1001"
  │                               │
  │── Segment 2 (Seq 1001-2000) ─▶│
  │                               │
  │◀─ ACK 2001 ──────────────────│  "Ich habe bis Byte 2000 – sende ab 2001"
  │                               │

Was passiert bei Verlust?
  │── Segment 3 (Seq 2001-3000) ─▶│  Paket geht verloren!
  │                               │
  │   (Timeout)                   │
  │── Segment 3 (Seq 2001-3000) ─▶│  Automatische Wiederholung
  │                               │
  │◀─ ACK 3001 ──────────────────│  Jetzt angekommen

TCP-Paketaufbau (Header)

Ein TCP-Segment besteht aus einem Header (mindestens 20 Byte) und den eigentlichen Nutzdaten:

Feld

Größe

Bedeutung

Source Port

16 Bit

Quell-Port (z.B. 54321 – zufällig gewählt)

Destination Port

16 Bit

Ziel-Port (z.B. 443 für HTTPS)

Sequence Number

32 Bit

Sequenznummer des ersten Bytes

Acknowledgment Number

32 Bit

Nächste erwartete Sequenznummer

Data Offset

4 Bit

Länge des Headers

Flags

9 Bit

SYN, ACK, FIN, RST, PSH, URG

Window Size

16 Bit

Empfangspuffer – wie viele Bytes auf einmal gesendet werden dürfen

Checksum

16 Bit

Fehlererkennung

Urgent Pointer

16 Bit

Position dringender Daten (nur bei URG-Flag)

Flusskontrolle – Window Size

TCP verhindert dass ein schneller Sender einen langsamen Empfänger überflutet – durch die Window Size. Sie gibt an wie viele Bytes der Empfänger auf einmal verarbeiten kann:

Empfänger hat 8.000 Byte Puffer frei:
→ Window Size = 8.000

Sender darf maximal 8.000 Byte senden ohne auf ACK zu warten.

Empfänger ist überlastet, Puffer fast voll:
→ Window Size = 500  (Sender muss bremsen)

Empfänger kann nichts mehr annehmen:
→ Window Size = 0    (Sender muss stoppen)

Staukontrolle – Congestion Control

Neben der Flusskontrolle hat TCP auch eine Staukontrolle um das Netzwerk nicht zu überlasten:

Phase

Verhalten

Slow Start

Verbindung beginnt langsam – Übertragungsrate verdoppelt sich pro RTT

Congestion Avoidance

Nach Schwellwert wächst Rate langsamer (linear statt exponentiell)

Fast Retransmit

Bei 3 doppelten ACKs wird sofort ohne Timeout erneut gesendet

Fast Recovery

Nach Paketverlust Rate halbieren statt auf 1 zurücksetzen

Wichtige TCP-Ports

Port

Protokoll

Verwendung

20

FTP-Data

FTP Datenübertragung

21

FTP-Control

FTP Steuerverbindung

22

SSH

Verschlüsselte Remote-Verbindung

23

Telnet

Unverschlüsselte Remote-Verbindung

25

SMTP

E-Mail senden

80

HTTP

Webseiten unverschlüsselt

110

POP3

E-Mail abrufen

143

IMAP

E-Mail synchronisieren

443

HTTPS

Webseiten verschlüsselt

3389

RDP

Windows Remote Desktop

Sicherheitsaspekte

SYN-Flood-Angriff

Ein Angreifer sendet massenhaft SYN-Pakete ohne den dritten Handshake-Schritt (ACK) abzuschließen. Der Server hält für jede halboffene Verbindung Ressourcen vor bis der Speicher erschöpft ist – eine Form des Denial of Service (DoS).

Schutzmaßnahmen:
- SYN-Cookies: Server speichert keinen Zustand bis ACK empfangen
- Firewall-Regeln: Maximale halboffene Verbindungen begrenzen
- Rate-Limiting: SYN-Pakete pro IP-Adresse begrenzen

TCP-Session-Hijacking

Ein Angreifer der Sequenznummern errät kann sich in eine bestehende TCP-Verbindung einklinken. Schutz: Verschlüsselung durch TLS/SSL (HTTPS, SSH) macht abgefangene Pakete nutzlos.

TCP in der Praxis – Wireshark

Mit Wireshark lässt sich der TCP-Handshake direkt beobachten. Typische Filterausdrücke:

tcp                          → Alle TCP-Pakete anzeigen
tcp.flags.syn == 1           → Nur SYN-Pakete
tcp.flags.syn == 1 and
tcp.flags.ack == 0           → Nur erste Handshake-Pakete
tcp.port == 443              → Nur HTTPS-Traffic
tcp.analysis.retransmission → Verlorene und neu gesendete Pakete

Zusammenfassung

  • TCP ist ein verbindungsorientiertes Transportprotokoll auf OSI-Schicht 4

  • Der 3-Way-Handshake (SYN → SYN-ACK → ACK) baut die Verbindung auf

  • Sequenznummern und ACKs garantieren vollständige und geordnete Übertragung

  • Bei Paketverlust wird automatisch erneut übertragen

  • Die Window Size steuert die Flusskontrolle

  • Congestion Control verhindert Netzwerküberlastung

  • SYN-Flood ist ein häufiger DoS-Angriff auf TCP

  • TCP wird von HTTP, HTTPS, FTP, SMTP, SSH und vielen anderen Protokollen verwendet