2.3.5 Zustandsdiagramm einer TCP-Verbindung

Wie bei vielen Kommunikationsprotokollen läßt sich die Arbeitsweise des TCP sehr kompakt durch einen endlichen Automaten (Finite State Machine, kurz FSM) veranschaulichen. Eine derartige Darstellung finden wir z.B. bei Stevens und Comer sowie unter dem Begriff TCP Connection State Diagram auch im RFC 793, wobei sich die Details jeweils geringfügig unterscheiden. Die in allen drei Quellen erkennbaren wesentlichen Zusammenhänge können Sie der folgenden Abbildung entnehmen:

Die Ovale symbolisieren die möglichen Zustände. Jede Verbindung durchläuft während ihrer Existenz eine gewisse Teilmenge davon. Zustandsübergänge werden durch schwarze Pfeile repräsentiert, wobei die zugehörigen farbigen Beschriftungen die Ereignisse (blau und kursiv) sowie die dadurch bewirkten Aktionen (rot) angeben.

Die folgende Tabelle erläutert grob die Bedeutung der Zustände:

Zustand Bedeutung
LISTEN Ein Server wartet auf den Verbindungswunsch eines Klienten.
SYN-SENT Der Klient hat ein SYN-Segment zum Server abgeschickt und wartet auf dessen Antwort. Falls er vom Partner ein SYN ohne ACK erhält, so liegt ein Simultaneous Open vor.
SYN-RECEIVED Nachdem der Server ein SYN vom Klienten erhalten und darauf mit einem eigenen SYN geantwortet hat, wartet er nun auf das ACK des Klienten.
ESTABLISHED Die Verbindung ist offen und gestattet den bidirektionalen Datenaustausch. ESTABLISHED stellt den Normalzustand für die Datentransferphase einer Verbindung dar.
FIN-WAIT-1 Die Anwendung hat ihre Richtung der Verbindung durch eine CLOSE-Anweisung bereits geschlossen und dadurch das Versenden eines FIN bewirkt. TCP wartet nun entweder auf eine Bestätigung dieses FIN-Segments oder auf das FIN des Partners. Im letzteren Fall handelt es sich um ein Simultaneous Close.
FIN-WAIT-2 Die eigene Hälfte der Verbindung ist geschlossen, das ACK der Gegenseite wurde empfangen. Jetzt wartet TCP auf das FIN der Gegenseite, also das Schließen der noch offenen Hälfte.
CLOSE-WAIT TCP hat ein FIN der Gegenseite erhalten und wartet auf die CLOSE-Anweisung der lokalen Anwendung, um auch die noch offene Hälfte der Verbindung schließen zu können.
CLOSING Ein als Reaktion auf die CLOSE-Anweisung der Anwendung ausgesendetes FIN wurde mit dem FIN der Gegenseite beantwortet (Simultaneous Close). TCP wartet jetzt auf das zugehörige ACK des Partners.
LAST-ACK Nachdem von der Gegenseite deren Hälfte der Verbindung bereits vorher geschlossen worden war, hat mittlerweile die lokale Anwendung ihre noch offene Hälfte mit einer CLOSE-Anweisung beendet und so das Senden eines FIN-Segments bewirkt. TCP erwartet jetzt die zugehörige Bestätigung durch ein ACK des Partners.
TIME-WAIT Nach dem Schließen beider Hälften begibt sich die Verbindung in diesen Zustand und verbleibt hier bis zum Ablauf eines auf die doppelte maximale Segmentlebensdauer eingestellten Timers. Im Bild des Automaten wird dies durch die Angabe Timeout=2MSL ausgedrückt. MSL steht dabei als Abkürzung für Maximum Segment Lifetime. Die Bedeutung wird später erläutert.
CLOSED Hierbei handelt es sich um keinen echten Zustand, sondern um einen gedachten Start- und Endpunkt des TCP-Automaten.

TCP-Verbindungen beginnen immer im mit Start markierten Zustand CLOSED. Die bei den Ereignissen verwendete Abkürzung rcv steht für receive und beschreibt das Empfangen eines Pakets vom Netz. Analog beschreibt bei den Aktionen das Kürzel send das Versenden eines Pakets.

Mit Ausnahme von Timeout treten die nicht mit rcv gekennzeichneten Ereignisse nur als Folge bestimmter Aktionen einer Anwendung ein:

Aktion der Anwendung Ereignis
aktive Eröffnung einer TCP-Verbindung durch einen Klienten active OPEN
passive Eröffnung einer TCP-Verbindung durch einen Server passive OPEN
Schließen der eigenen Verbindungshälfte durch Klient oder Server CLOSE
Senden von Daten durch die Anwendung SEND

Aus dem TCP-Automaten ergibt sich beim Auf- und Abbau einer normalen TCP-Verbindung zwischen Klient und Server folgende Zustandsabfolge:

Da beide Partner das gleiche Recht haben, eine Verbindung zu schließen, kann das active CLOSE genauso gut vom Server kommen, worauf der Klient dann entsprechend mit einem passive CLOSE reagiert.

Wir hatten oben gesehen, daß jede Verbindung nach dem vollständigen Schließen in den Zustand TIME-WAIT wechselt und dort mindestens für die doppelte MSL verbleibt, weswegen auch der Name 2MSL Wait State gebräuchlich ist. Die MSL gibt an, wie lange ein Segment im Internet maximal am Leben bleiben kann (Maximum Segment Lifetime).

Da TCP-Segmente innerhalb von IP-Datagrammen im Netz transportiert werden, ist die MSL de facto von der im IP-Kopf angegebenen TTL abhängig, die in der Regel nicht als Zeitangabe in Sekunden, sondern einfach als Hop Count betrachtet wird und so die maximale Anzahl der Router angibt, die noch passiert werden dürfen. Jede TCP-Implementierung muß daher für sich eine geeignete MSL definieren. Im RFC 793 werden dafür willkürlich 2 Minuten festgesetzt. Gängige praktische Werte sind 30, 60 und 120 Sekunden.

Das Verweilen im Zustand TIME-WAIT hat zwei Gründe:

Abschließend noch zwei Bemerkungen:


© Holger Trapp, 26.5.1998