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:
- Sicherstellen, dass das finale ACK das entfernte System erreicht
- 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?
-
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
-
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.