Zum Hauptinhalt springen

Anhang A. TCP-Verbindungszustandsdiagramm

Dieser Anhang bietet eine detaillierte Darstellung der TCP-Verbindungszustandsübergänge.

TCP-Zustandsübergangsdiagramm

                              +---------+
| CLOSED |
+---------+
|
(passive OPEN)
|
v
+---------+
| LISTEN |
+---------+
(rcv SYN) | ^ (CLOSE)
| |
v |
+---------+
|SYN RCVD|
+---------+
(rcv ACK)|
|
(active OPEN) v
+---------+ +---------+
|SYN SENT |<---->| ESTAB |
+---------+ +---------+
| |
| (CLOSE/FIN)
| |
| v
| +---------+
| |FIN WAIT1|
| +---------+
| (rcv ACK) |
| |
| v
| +---------+
| |FIN WAIT2|
| +---------+
| (rcv FIN) |
| |
| v
| +---------+
| |TIME WAIT|
| +---------+
| (timeout) |
| |
| v
| +---------+
+---------->| CLOSED |
+---------+

Simultaner Abschluss: Passiver Abschluss:
FIN WAIT1 --rcv FIN--> CLOSING ESTABLISHED --rcv FIN--> CLOSE WAIT
CLOSING --rcv ACK--> TIME WAIT CLOSE WAIT --CLOSE--> LAST ACK
LAST ACK --rcv ACK--> CLOSED

Zustandsbeschreibungen

CLOSED

  • Fiktiver Zustand, der keinen TCB (Transmission Control Block) darstellt, daher keine Verbindung
  • Dies ist der Start- und Endpunkt für alle Verbindungen

LISTEN

  • Server wartet auf Verbindungsanforderung von jedem entfernten TCP
  • Passiver Öffnungszustand

SYN-SENT

  • Client wartet auf übereinstimmende Verbindungsanforderung nach dem Senden von SYN
  • Aktiver Öffnungszustand

SYN-RECEIVED

  • Server wartet auf ACK nach dem Empfang von SYN und Senden von SYN-ACK
  • Zwischenzustand des Drei-Wege-Handshakes

ESTABLISHED

  • Verbindung ist hergestellt, Datenübertragung kann erfolgen
  • Dies ist der normale Zustand während der Datenübertragungsphase

FIN-WAIT-1

  • Aktiver Schließer wartet auf ACK oder FIN vom entfernten System
  • Erster Zustand des Verbindungsabschlusses

FIN-WAIT-2

  • Warten auf FIN vom entfernten System nach dem Empfang von ACK für gesendetes FIN
  • Zeigt an, dass die lokale Seite keine weiteren Daten senden wird, aber noch empfangen kann

CLOSE-WAIT

  • Passiver Schließer wartet auf Schließung der lokalen Anwendung nach dem Empfang von FIN
  • Kann an diesem Punkt noch Daten senden

CLOSING

  • Zustand während des simultanen Abschlusses
  • Warten auf ACK des FIN vom entfernten System

LAST-ACK

  • Passiver Schließer wartet auf ACK nach dem Senden von FIN
  • Wechselt direkt zu CLOSED nach Empfang von ACK

TIME-WAIT

  • Aktiver Schließer tritt in diesen Zustand ein, nachdem er FIN vom entfernten System empfangen und ACK gesendet hat
  • Wartet 2MSL (Maximum Segment Lifetime)
  • Zwecke:
    1. Sicherstellen, dass das finale ACK das entfernte System erreicht
    2. Verhindern, dass alte Segmente neue Verbindungen stören

Wichtige Zustandsübergänge

Verbindungsaufbau (Drei-Wege-Handshake)

CLOSED --> (active open) --> SYN-SENT
SYN-SENT --> (receive SYN-ACK) --> ESTABLISHED

CLOSED --> (passive open) --> LISTEN
LISTEN --> (receive SYN) --> SYN-RECEIVED
SYN-RECEIVED --> (receive ACK) --> ESTABLISHED

Verbindungsabbau (Vier-Wege-Handshake)

Aktiver Abschluss:
ESTABLISHED --> (send FIN) --> FIN-WAIT-1
FIN-WAIT-1 --> (receive ACK) --> FIN-WAIT-2
FIN-WAIT-2 --> (receive FIN) --> TIME-WAIT
TIME-WAIT --> (2MSL timeout) --> CLOSED

Passiver Abschluss:
ESTABLISHED --> (receive FIN) --> CLOSE-WAIT
CLOSE-WAIT --> (application close) --> LAST-ACK
LAST-ACK --> (receive ACK) --> CLOSED

Simultane Öffnung

CLOSED --> (send SYN) --> SYN-SENT
SYN-SENT --> (receive SYN) --> SYN-RECEIVED
SYN-RECEIVED --> (receive ACK) --> ESTABLISHED

Simultaner Abschluss

ESTABLISHED --> (send FIN) --> FIN-WAIT-1
FIN-WAIT-1 --> (receive FIN) --> CLOSING
CLOSING --> (receive ACK) --> TIME-WAIT
TIME-WAIT --> (2MSL timeout) --> CLOSED

Bedeutung des TIME-WAIT-Zustands

Warum ist TIME-WAIT Notwendig?

  1. Zuverlässigen Abschluss Gewährleisten:

    • Wenn das finale ACK verloren geht, wird das entfernte System FIN erneut senden
    • Der TIME-WAIT-Zustand gewährleistet die Fähigkeit, auf erneut gesendetes FIN zu antworten
  2. Störung durch Alte Verbindung Verhindern:

    • Verzögerte alte Segmente können im Netzwerk existieren
    • Warten von 2MSL stellt sicher, dass alte Segmente aus dem Netzwerk verschwinden
    • Verhindert, dass alte Segmente von neuen Verbindungen als gültige Daten fehlinterpretiert werden

2MSL-Zeit:

  • MSL (Maximum Segment Lifetime): Maximale Zeit, die ein Segment im Netzwerk leben kann
  • Typischerweise MSL = 2 Minuten
  • Daher TIME-WAIT = 2MSL = 4 Minuten
  • Einige Implementierungen verwenden kürzere Zeiten (z.B. 30 oder 60 Sekunden)

Hinweis: Für vollständige Zustandsübergangslogik und Grenzfallbehandlung beziehen Sie sich auf die vollständige Spezifikation in RFC 9293.