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.

TCP-Verbindungsaufbau: Einfach (Bildrechte: Ausbildung in der IT)

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:

TCP-Verbindungsaufbau: Beispiel (Bildrechte: Ausbildung in der IT)

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)

VonNachBeschreibung
CLOSEDSYN_SENTClient sendet SYN und wartet auf SYN+ACK
SYN_SENTESTABLISHEDClient erhält SYN+ACK, sendet ACK, Verbindung ist aufgebaut

Passive Eröffnung (Empfänger / Server)

VonNachBeschreibung
CLOSEDLISTENServer öffnet einen Port und lauscht auf eingehende Verbindungsanfragen
LISTENSYN_RECEIVEDServer erhält SYN, sendet SYN+ACK und wartet auf ACK
SYN_RECEIVEDESTABLISHEDServer erhält ACK vom Client, Verbindung ist aufgebaut
⏳ Lädt Dataview-Inhalt...

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.

TCP-Verbindungsabbau: Einfach (Bildrechte: Ausbildung in der IT)

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: ESTABLISHEDFIN_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_1FIN_WAIT_2
    • Gegenseite: ESTABLISHEDCLOSE_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_WAITLAST_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_2TIME_WAIT → (nach 2×MSL) CLOSED
    • Gegenseite: LAST_ACKCLOSED

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
TCP-Verbindungsabbau: Beispiel (Bildrechte: Ausbildung in der IT)

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)

VonNachBeschreibung
ESTABLISHEDFIN_WAIT_1Initiator sendet FIN und wartet auf ACK
FIN_WAIT_1FIN_WAIT_2Initiator erhält ACK für sein FIN und wartet auf FIN der Gegenstelle
FIN_WAIT_2TIME_WAITInitiator erhält FIN der Gegenstelle und sendet abschließendes ACK
TIME_WAITCLOSEDInitiator wartet 2×MSL (Maximum Segment Lifetime) und schließt dann endgültig

Passive Schließung (Empfänger)

VonNachBeschreibung
ESTABLISHEDCLOSE_WAITEmpfänger erhält FIN und sendet ACK
CLOSE_WAITLAST_ACKEmpfänger sendet eigenes FIN und wartet auf finales ACK
LAST_ACKCLOSEDEmpfä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
⏳ Lädt Dataview-Inhalt...

Zusammenfassung und Ausblick

Zusammenfassung:

Verbindungsaufbau: Three-Way-Handshake

SchrittSenderInhaltZustand (Sender → Empfänger)
1: SYNClientSYN, Initial Sequence Number (ISN)CLOSEDSYN_SENT
2: SYN-ACKServerSYN + ACK (ACK = Client_ISN + 1)LISTENSYN_RECEIVED
3: ACKClientACK (ACK = Server_ISN + 1)SYN_SENTESTABLISHED

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

SchrittAktionBedeutungZustandswechsel Initiator / Empfänger
1: FINInitiator →Ich habe nichts mehr zu sendenESTABLISHEDFIN_WAIT_1
2: ACKEmpfänger →FIN empfangenFIN_WAIT_1FIN_WAIT_2 / CLOSE_WAIT
3: FINEmpfänger →Auch ich habe nichts mehrCLOSE_WAITLAST_ACK
4: ACKInitiator →Verbindung beendetFIN_WAIT_2TIME_WAITCLOSED

TIME_WAIT (2 × MSL): Verhindert Störungen durch alte Pakete Probleme: Ressourcenverbrauch, Port-Erschöpfung

Sonderfälle beim Abbau

SzenarioBeschreibungLösung
Verlorenes FINWird nach Timeout wiederholtBegrenzte Anzahl Wiederholungen
Verlorenes ACKGegenseite sendet FIN erneutACK wird erneut gesendet
Simultane SchließungBeide senden FIN gleichzeitigBeide durchlaufen TIME_WAIT
RST (Reset)Sofortige Beendigung, keine Handshake-SchritteNutzung 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.