Verbindungsaufbau und -abbau
In dieser interaktiven Lerneinheit verstehst du, wie TCP-Verbindungen aufgebaut und wieder beendet werden, einschließlich des wichtigen Three-Way-Handshake Prozesses. Du lernst die einzelnen Schritte und Zustände einer TCP-Verbindung kennen und kannst typische Verbindungsprobleme erkennen. Diese Grundlagen sind entscheidend für die Analyse von Netzwerkverbindungen und die Fehlersuche in der täglichen Praxis.
Einführung
Stell dir vor: Du öffnest deine E-Mail-App und wartest… und wartest… Nichts passiert. Nach einer gefühlten Ewigkeit erscheint die Fehlermeldung: ‘Verbindung fehlgeschlagen’. Frustrierend, oder?

Hinter den Kulissen könnte der Grund dafür ein fehlgeschlagener TCP-Verbindungsaufbau sein. Denn bevor auch nur ein einziges Bit deiner E-Mails übertragen werden kann, müssen sich dein Gerät und der E-Mail-Server erst einmal ‘kennenlernen’ – durch einen ‘Handshake’.
Dieser Handshake ist wie ein streng formelles Protokoll: Beide Seiten müssen sich exakt an die vorgeschriebenen Schritte halten. Ein einziger Fehler, und die Verbindung kommt nicht zustande. Kein Handshake, keine E-Mails.
Wie dieser Handshake genau funktioniert, welche Schritte dabei wichtig sind und was passiert, wenn die Verbindung wieder beendet werden soll – das erfährst du in dieser Lerneinheit. Denn nur wer versteht, wie TCP Verbindungen auf- und abbaut, kann später auch Probleme in der Netzwerkkommunikation effektiv analysieren und beheben.
Lernziele
Nach dieser Lerneinheit kannst du:
-
den TCP-Verbindungsaufbau (Three-Way-Handshake) Schritt für Schritt erklären und die Bedeutung der einzelnen Flags (SYN, ACK) beschreiben
-
den Verbindungsabbau (Four-Way-Handshake) detailliert nachvollziehen und verstehen, warum dieser Prozess vier Schritte benötigt
-
die verschiedenen Verbindungszustände (LISTEN, SYN_SENT, ESTABLISHED etc.) identifizieren und ihre Bedeutung im Kontext des Verbindungsauf- und -abbaus erläutern
-
typische Probleme beim Verbindungsaufbau erkennen und mögliche Lösungsansätze entwickeln
Überleitung
Um zu verstehen, wie TCP eine zuverlässige Verbindung aufbaut und wieder beendet, schauen wir uns zunächst den Three-Way-Handshake genauer an. Dieser Prozess ist wie ein präzise choreografierter Tanz: Beide Kommunikationspartner müssen die richtigen Schritte in der richtigen Reihenfolge ausführen.
Dabei geht es nicht nur darum, dass zwei Systeme miteinander ‘sprechen’ können. Es geht um den Aufbau einer verlässlichen, bidirektionalen Kommunikation – also darum, dass beide Systeme Daten nicht nur senden, sondern auch empfangen und aufeinander reagieren können. Diese zuverlässige Datenübertragung bildet die Grundlage für alle TCP-basierten Anwendungen wie E-Mail, Web oder Dateitransfer.
Lass uns Schritt für Schritt durchgehen, wie dieser Handshake funktioniert und welche Rolle die verschiedenen TCP-Flags dabei spielen.
Der Three-Way-Handshake
Der TCP-Verbindungsaufbau, auch als Three-Way-Handshake bekannt, ist ein dreistufiger Prozess, bei dem Client und Server wichtige Verbindungsparameter aushandeln. Dieser Prozess stellt sicher, dass beide Seiten bereit für die Kommunikation sind und über die gleichen Erwartungen verfügen.

Drei zentrale TCP-Flags spielen dabei eine wichtige Rolle:
- SYN (Synchronize): Signalisiert den Wunsch, eine Verbindung aufzubauen
- ACK (Acknowledge): Bestätigt den Empfang eines Pakets
- FIN (Finish): Signalisiert den Wunsch, die Verbindung zu beenden
Die drei Schritte des Handshakes
Schritt 1: SYN
- Der Client sendet ein Paket mit gesetztem SYN-Flag
- Enthält eine zufällige Sequenznummer (Initial Sequence Number, ISN)
- Client geht in den Zustand SYN_SENT
Zusammengefasst:
Im ersten Schritt des TCP-Verbindungsaufbaus sendet der Client ein Paket mit gesetztem SYN-Flag, das den Wunsch signalisiert, eine Verbindung herzustellen. Dieses Paket enthält eine zufällige Initial Sequence Number (ISN), die als Startpunkt für die spätere Datenübertragung genutzt wird. Nach dem Absenden wechselt der Client in den Zustand SYN_SENT, was bedeutet, dass er die Verbindung angefordert hat und nun auf eine Bestätigung vom Server wartet.
Die drei Schritte des Handshakes
Schritt 2: SYN-ACK
- Der Server antwortet mit Paket, bei dem SYN- und ACK-Flags gesetzt sind
- Bestätigt die Sequenznummer des Clients (ACK = Client_ISN + 1)
- Sendet eigene Initial Sequence Number
- Server geht in den Zustand SYN_RECEIVED
Zusammengefasst:
Im zweiten Schritt des TCP-Verbindungsaufbaus antwortet der Server auf die Anfrage des Clients. Er verschickt ein Paket, bei dem sowohl das SYN-Flag als auch das ACK-Flag gesetzt sind. Mit dem ACK-Flag bestätigt der Server, dass er die Sequenznummer des Clients korrekt empfangen hat, indem er als Bestätigungsnummer die Initial Sequence Number (ISN) des Clients plus 1 angibt. Gleichzeitig sendet der Server seine eigene Initial Sequence Number (ISN), um ebenfalls seine Startposition für die spätere Datenübertragung festzulegen.
Nachdem dieses Paket versendet wurde, wechselt der Server in den Zustand SYN_RECEIVED, was bedeutet, dass er die Anfrage angenommen hat und nun auf die abschließende Bestätigung des Clients wartet.
Die drei Schritte des Handshakes
Schritt 3: ACK
- Der Client sendet ein Paket mit gesetztem ACK-Flag
- Bestätigt die Sequenznummer des Servers (ACK = Server_ISN + 1)
- Beide Seiten gehen in den Zustand ESTABLISHED
Zusammengefasst:
Im dritten und letzten Schritt des TCP-Verbindungsaufbaus bestätigt der Client den Erhalt der Verbindungsbestätigung des Servers. Dazu sendet er ein Paket, bei dem nur das ACK-Flag gesetzt ist. Die Bestätigungsnummer (ACK) entspricht der Initial Sequence Number (ISN) des Servers plus 1. Mit dem Eintreffen dieses Pakets wechseln sowohl der Client als auch der Server in den Zustand ESTABLISHED, was bedeutet, dass die Verbindung nun vollständig aufgebaut ist und die eigentliche Datenübertragung beginnen kann.
Praktisches Beispiel: Verbindungsaufbau
Nehmen wir an, ein Webbrowser möchte eine Verbindung zu einem Webserver aufbauen:

In diesem Beispiel:
- Der Client wählt 1000 als seine Initial Sequence Number
- Der Server wählt 2000 als seine Initial Sequence Number
- Die ACK-Nummern sind jeweils um 1 höher als die empfangene Sequenznummer
Zusammengefasst:
Zunächst sendet der Client ein Paket mit gesetztem SYN-Flag und wählt dabei die Sequenznummer 1000 als Startpunkt. Damit signalisiert er den Wunsch, eine Verbindung aufzubauen.
Der Server antwortet daraufhin mit einem Paket, bei dem sowohl das SYN- als auch das ACK-Flag gesetzt sind. Er bestätigt mit dem ACK-Teil die Sequenznummer des Clients, indem er die Bestätigungsnummer 1001 (also 1000 + 1) sendet. Gleichzeitig übermittelt der Server seine eigene Startsequenznummer 2000.
Abschließend bestätigt der Client die Sequenznummer des Servers, indem er ein Paket mit gesetztem ACK-Flag sendet. Hierbei gibt er als Bestätigungsnummer 2001 (also 2000 + 1) an.
Sobald dieser Austausch abgeschlossen ist, befinden sich beide Seiten im Zustand ESTABLISHED und die Verbindung ist erfolgreich aufgebaut. Nun können Daten in beide Richtungen übertragen werden.
Wichtige Aspekte des Handshakes
Sequenznummern
Die Initial Sequence Numbers (ISN) sind wichtig für:
- Erkennung verlorener oder doppelter Pakete
- Richtige Reihenfolge der Datenpakete
- Sicherheit gegen Verbindungshijacking
Timeouts und Wiederholungen
- Jeder Schritt hat einen Timeout
- Bei ausbleibender Antwort erfolgt eine Wiederholung
- Nach mehreren erfolglosen Versuchen wird der Verbindungsaufbau abgebrochen
Sicherheitsaspekte
- SYN-Cookies schützen vor SYN-Flood-Attacken
- TCP-Timestamps helfen bei der Erkennung alter oder duplizierter Pakete
- Maximum Segment Size (MSS) wird während des Handshakes ausgehandelt
Überblick: Zustandsübergänge
Nachfolgend findest du die Zustandsübergänge beim Aufbau einer TCP-Verbindung
Aktive Eröffnung (Initiator / Client)
| Von | Nach | Beschreibung |
|---|---|---|
| CLOSED | SYN_SENT | Client sendet SYN und wartet auf SYN+ACK |
| SYN_SENT | ESTABLISHED | Client erhält SYN+ACK, sendet ACK, Verbindung ist aufgebaut |
Passive Eröffnung (Empfänger / Server)
| Von | Nach | Beschreibung |
|---|---|---|
| CLOSED | LISTEN | Server öffnet einen Port und lauscht auf eingehende Verbindungsanfragen |
| LISTEN | SYN_RECEIVED | Server erhält SYN, sendet SYN+ACK und wartet auf ACK |
| SYN_RECEIVED | ESTABLISHED | Server erhält ACK vom Client, Verbindung ist aufgebaut |
Der TCP-Verbindungsabbau (Four-Way-Handshake)
Nachdem die Datenübertragung abgeschlossen ist, muss die TCP-Verbindung ordnungsgemäß beendet werden. Anders als beim Aufbau erfordert der Abbau einer TCP-Verbindung vier Schritte. Dies liegt daran, dass TCP eine vollständig duplexe (bidirektionale) Verbindung ist – das bedeutet, dass beide Kommunikationsrichtungen unabhängig voneinander Daten senden können.
Deshalb muss jede Seite die Verbindung separat schließen, damit sichergestellt ist, dass keine ausstehenden Daten verloren gehen.

Die vier Schritte im Detail:
Schritt 1: Initiierung der Schließung
- Aktion: Eine Seite (z. B. der Client) sendet ein FIN-Segment.
- Bedeutung: „Ich habe keine Daten mehr zu senden.“
- Zustand am Sender: ESTABLISHED → FIN_WAIT_1
Fachbegriff:
Ein FIN (Finish) ist ein TCP-Flag, das das Ende der Datenübertragung in eine Richtung markiert.
Die vier Schritte im Detail:
Schritt 2: Bestätigung der ersten Schließung
- Aktion: Die Gegenseite antwortet mit einem ACK auf das FIN.
- Bedeutung: „Ich habe dein FIN erhalten.“
- Zustände:
- Initiator: FIN_WAIT_1 → FIN_WAIT_2
- Gegenseite: ESTABLISHED → CLOSE_WAIT
Fachbegriff:
Ein ACK (Acknowledgment) bestätigt den Empfang eines Segments.
Die vier Schritte im Detail:
Schritt 3: Schließung der Gegenrichtung
- Aktion: Die Gegenseite sendet nun ein eigenes FIN-Segment.
- Bedeutung: „Auch ich habe keine Daten mehr zu senden.“
- Zustand der Gegenseite: CLOSE_WAIT → LAST_ACK
Die vier Schritte im Detail:
Schritt 4: Finale Bestätigung
- Aktion: Der ursprüngliche Initiator sendet ein ACK auf das zweite FIN.
- Bedeutung: „Ich habe dein FIN erhalten; Verbindung vollständig beendet.“
- Zustände:
- Initiator: FIN_WAIT_2 → TIME_WAIT → (nach 2×MSL) CLOSED
- Gegenseite: LAST_ACK → CLOSED
Fachbegriff:
TIME_WAIT schützt vor verspäteten oder erneut gesendeten Paketen aus alten Verbindungen.
Praktisches Beispiel: Verbindungsabbau
Angenommen, dein HTTP-Client hat eine Datei empfangen und möchte die TCP-Verbindung schließen. Startwerte:
- Client (A) letzte gesendete Daten bis Seq = 1000
- Server (B) letzte gesendete Daten bis Seq = 2000

Zusammenfassung:
Nachdem der Datentransfer abgeschlossen ist, sendet der Client ein TCP-Segment mit gesetztem FIN-Flag und der Sequenznummer 1000. Damit teilt er dem Server mit, dass er keine weiteren Daten mehr senden wird. Der Server bestätigt dies mit einem ACK, dessen Acknowledgment-Nummer auf 1001 gesetzt ist.
Etwas später sendet auch der Server ein FIN-Segment mit Sequenznummer 2000, um seinerseits den Verbindungsabbau einzuleiten. Der Client bestätigt dies mit einem letzten ACK mit der Nummer 2001.
Die Verbindung ist nun beidseitig geschlossen. Der Client verbleibt noch kurz im TIME_WAIT-Zustand, um eventuell verspätete Pakete abzufangen. Danach ist die Verbindung vollständig abgebaut.
Der TIME_WAIT-Zustand
Der TIME_WAIT-Zustand ist ein kritischer Teil des Verbindungsabbaus und verdient besondere Aufmerksamkeit:
Zweck des TIME_WAIT
- Verhindert, dass verspätete Pakete in neue Verbindungen eindringen
- Stellt sicher, dass alle Pakete ihre Ziele erreicht haben
- Ermöglicht das Verarbeiten von Paket-Retransmissions
Dauer des TIME_WAIT
- Standardmäßig 2 × MSL (Maximum Segment Lifetime)
- Typischerweise 2-4 Minuten
- Kann in manchen Systemen konfiguriert werden
Potenzielle Probleme
- Ressourcenverbrauch bei vielen gleichzeitigen Verbindungen
- Mögliche Port-Erschöpfung bei hoher Last
- Performance-Einbußen in bestimmten Szenarien
Überblick: Zustandsübergänge
Nachfolgend findest du die Zustandsübergänge beim Abbau einer TCP-Verbindung als übersichtliche Tabellen – getrennt nach aktiver Schließung (Initiator) und passiver Schließung (Empfänger).
Aktive Schließung (Initiator)
| Von | Nach | Beschreibung |
|---|---|---|
| ESTABLISHED | FIN_WAIT_1 | Initiator sendet FIN und wartet auf ACK |
| FIN_WAIT_1 | FIN_WAIT_2 | Initiator erhält ACK für sein FIN und wartet auf FIN der Gegenstelle |
| FIN_WAIT_2 | TIME_WAIT | Initiator erhält FIN der Gegenstelle und sendet abschließendes ACK |
| TIME_WAIT | CLOSED | Initiator wartet 2×MSL (Maximum Segment Lifetime) und schließt dann endgültig |
Passive Schließung (Empfänger)
| Von | Nach | Beschreibung |
|---|---|---|
| ESTABLISHED | CLOSE_WAIT | Empfänger erhält FIN und sendet ACK |
| CLOSE_WAIT | LAST_ACK | Empfänger sendet eigenes FIN und wartet auf finales ACK |
| LAST_ACK | CLOSED | Empfänger erhält finales ACK und schließt die Verbindung sofort |
Behandlung von Fehlerfällen
Der TCP-Verbindungsabbau muss robust gegen verschiedene Fehlerszenarien sein:
Verlorene FIN-Pakete
- Timeout-basierte Wiederholung des FIN
- Maximale Anzahl von Wiederholungsversuchen
- Eventueller Abbruch nach zu vielen Fehlversuchen
Verlorene ACK-Pakete
- Gegenseite wiederholt FIN
- Erneutes Senden des ACK
- Zustandsübergänge bleiben konsistent
Simultane Schließung
- Beide Seiten senden gleichzeitig FIN
- Spezielle Behandlung der Zustandsübergänge
- Beide Seiten durchlaufen TIME_WAIT
RST (Reset)
- Sofortige Verbindungsbeendigung
- Keine weiteren Handshake-Schritte
- Verwendung bei Fehlern oder Timeouts
Zusammenfassung und Ausblick
Zusammenfassung:
Verbindungsaufbau: Three-Way-Handshake
| Schritt | Sender | Inhalt | Zustand (Sender → Empfänger) |
|---|---|---|---|
| 1: SYN | Client | SYN, Initial Sequence Number (ISN) | CLOSED → SYN_SENT |
| 2: SYN-ACK | Server | SYN + ACK (ACK = Client_ISN + 1) | LISTEN → SYN_RECEIVED |
| 3: ACK | Client | ACK (ACK = Server_ISN + 1) | SYN_SENT → ESTABLISHED |
Zentrale Flags: SYN, ACK, FIN
Zweck der ISNs: Reihenfolge, Verlustprüfung, Hijacking-Schutz
Sicherheit: SYN-Cookies, Timestamps, MSS-Aushandlung
Timeouts: Jeder Schritt mit Wiederholungsmechanismus
Verbindungsabbau: Four-Way-Handshake
| Schritt | Aktion | Bedeutung | Zustandswechsel Initiator / Empfänger |
|---|---|---|---|
| 1: FIN | Initiator → | Ich habe nichts mehr zu senden | ESTABLISHED → FIN_WAIT_1 |
| 2: ACK | Empfänger → | FIN empfangen | FIN_WAIT_1 → FIN_WAIT_2 / CLOSE_WAIT |
| 3: FIN | Empfänger → | Auch ich habe nichts mehr | CLOSE_WAIT → LAST_ACK |
| 4: ACK | Initiator → | Verbindung beendet | FIN_WAIT_2 → TIME_WAIT → CLOSED |
TIME_WAIT (2 × MSL): Verhindert Störungen durch alte Pakete Probleme: Ressourcenverbrauch, Port-Erschöpfung
Sonderfälle beim Abbau
| Szenario | Beschreibung | Lösung |
|---|---|---|
| Verlorenes FIN | Wird nach Timeout wiederholt | Begrenzte Anzahl Wiederholungen |
| Verlorenes ACK | Gegenseite sendet FIN erneut | ACK wird erneut gesendet |
| Simultane Schließung | Beide senden FIN gleichzeitig | Beide durchlaufen TIME_WAIT |
| RST (Reset) | Sofortige Beendigung, keine Handshake-Schritte | Nutzung bei Fehlern oder Zeitüberschreitungen |
Ausblick:
In der nächsten Lerneinheit schauen wir uns an, wie TCP große Datenmengen in kleinere Segmente (Segmentierung) zerlegt und diese beim Empfänger wieder korrekt zusammensetzt (Reassemblierung). Dabei helfen die Sequenznummern, um Reihenfolge und Vollständigkeit sicherzustellen.