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.
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 |
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 |
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-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 |
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 angekommenEin 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) |
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)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 |
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 |
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 begrenzenEin 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.
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 PaketeTCP 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