Zum Hauptinhalt springen

VII. Verbindungsstatus

Ein hervorragender Mechanismus zur Beschreibung der Ereignisfolge, die zum Aufbau und Abbau einer Verbindung erforderlich ist, ist ein Zustandsdiagramm. Wir können annehmen, dass jedem Socket ein Zustandsautomat zugeordnet werden kann und dass sich dieser Zustandsautomat jederzeit in einem von zehn möglichen Zuständen befinden kann. In jedem Zustand bewirken bestimmte Netzereignisse, dass der Verbindungsstatus in einen anderen Zustand übergeht; andere Ereignisse werden ignoriert; wieder andere sind Fehler. Ein Übergang kann auch damit verbunden sein, dass der lokale NCP eine Aktion ausführt. Abbildung 7.1 zeigt den Zustandsautomaten. Kreise [jetzt Kästen: Hrsg.] stellen Zustände dar (unten beschrieben); Pfeile zeigen zulässige Übergänge zwischen Zuständen. Die Beschriftungen an den Pfeilen bezeichnen das auslösende Ereignis (man beachte, dass CLOSE ein Systemaufruf und CLS ein Steuerbefehl ist). Ausdrücke nach Schrägstrichen bezeichnen die Aktion, die beim Durchlaufen dieses Pfeils ausgeführt werden soll. Der mit '[E]RFC' beschriftete Pfeil (zwischen den Zuständen 0 und 1) steht für die Bedingung, dass immer dann, wenn eine Verbindung in den Zustand CLOSED übergeht, die Warteschlange anstehender Anrufe dieser Verbindung geprüft wird. [Im Original war das „E“ spiegelverkehrt: Hrsg.]

Befinden sich anstehende Anrufe in der Warteschlange, geht die Verbindung in den Zustand PENDING über. Wird ein RFC für einen Socket im Zustand CLOSED empfangen, wird er ebenfalls auf diesem Pfad in den Zustand PENDING überführt. Ereignisse und die von ihnen ausgelösten Aktionen werden in den Abschnitten VIII und IX unten beschrieben. Es folgen die Beschreibungen der zehn Zustände:

(0) CLOSED​

Der lokale Socket ist mit keinem Port verbunden, und kein Benutzer hat eine Verbindung mit ihm angefordert. (Der Tabelleneintrag existiert nicht.)

(1) PENDING CALL​

Der Socket ist mit keinem Port verbunden, aber eine oder mehrere Verbindungsanforderungen wurden empfangen. Ein Systemaufruf LISTEN wird sofort durch den ersten Eintrag in der Warteschlange anstehender Anrufe erfüllt, der eine passende Anforderung darstellt; alle anderen anstehenden Anrufe werden gelöscht.

(2) LISTENING​

Der Socket ist mit einem Port verbunden. Wir warten darauf, dass ein Benutzer eine Verbindung mit diesem Socket anfordert.

(3) RFC-RCVD​

Wir lauschen, und ein RFC wurde empfangen. Der lokale Benutzer wurde über den anstehenden Anruf informiert. Er muss entweder mit CLOSE oder mit ACCEPT antworten.

(4) ABORT​

Wir haben den Benutzer benachrichtigt, dass sein LISTEN erfüllt wurde, er hat aber noch nicht geantwortet; bricht der fremde Benutzer in dieser Zeit die Verbindung durch Senden eines CLS ab, senden wir ein CLS zur Bestätigung des Abbruchs und halten diese Tatsache mit diesem Zustand fest. Wenn der Benutzer den Anruf annimmt oder ablehnt, können wir ihn darüber informieren, dass die Verbindung vorzeitig beendet wurde.

(5) RFC-SENT​

In diesen Zustand wird gewechselt, wenn:

  • a) Der lokale Benutzer diesen Socket durch Ausgabe eines CONNECT mit einem Port verbunden hat.
  • b) Ein RFC gesendet wurde, und
  • c) Keine Antwort empfangen wurde.

Wenn der Benutzer ein CONNECT ausgibt, wird die Warteschlange anstehender Anrufe durchsucht.

Wird kein passender RFC gefunden, wird die Warteschlange gelöscht und in diesen Zustand gewechselt. Wenn neue RFCs eintreffen, werden sie mit der Anforderung unseres Benutzers verglichen. Passen sie nicht, wird der RFC sofort abgelehnt. Passt der RFC, schließt er den Initialisierungsvorgang ab, und die Verbindung geht in den Zustand OPEN über.

(6) OPEN​

RFCs wurden ausgetauscht, und die Verbindung ist sicher hergestellt. Die Übertragung kann nach Empfang eines ALL-Befehls von der Empfangsseite beginnen und verläuft dann gemäß der Flusskontrolle.

(7) CLS-WAIT​

Nachdem der lokale Benutzer ein CLOSE ausgeführt und wir ein CLS ausgegeben haben, müssen wir auf ein bestätigendes CLS warten, bevor die Verbindung vollständig geschlossen werden kann. Wurde das entsprechende CLS noch nicht empfangen, wird in diesen Zustand gewechselt.

(8) DATA-WAIT​

Befinden wir uns auf der Sendeseite und führt der lokale Benutzer einen Systemaufruf CLOSE aus, kann kein CLS ausgegeben werden, wenn unser Datenpuffer nicht leer ist oder ein RFNM für die letzte Datennachricht noch aussteht. Die Verbindung geht in diesen Zustand über, um auf die Erfüllung dieser Bedingungen zu warten. Nach Abschluss und Bestätigung der Ausgabe kann ein CLS ausgegeben werden, und die Verbindung geht in den Zustand CLS-WAIT über, wo sie auf das bestätigende CLS wartet. Trifft im Zustand DATA-WAIT ein CLS ein, leeren wir unseren Puffer (das CLS kam von einem Empfangs-Socket und zeigt an, dass dieser nicht mehr an unseren Daten interessiert ist) und gehen in den Zustand RFNM-WAIT über, um zu warten, bis das Netz frei ist.

(9) RFNM-WAIT​

Befinden wir uns auf der Sendeseite und trifft ein CLS-Befehl ein, können wir kein bestätigendes CLS ausgeben, solange wir das RFNM für unsere letzte Datennachricht nicht empfangen haben. Wir gehen in diesen Zustand über, um auf das RFNM zu warten, und stellen jede weitere Datenübertragung ein. Trifft das RFNM ein, kann ein CLS ausgegeben werden, und die Verbindung wird geschlossen.

                      ______________
                     |              |       CLOSE
      CONN/          |    CLOSED    |<---------------------------+
      send RFC       |     (0)      |       LISTEN               |
    +----------------|              |-----------------------+    |
    |                |______________|                       |    |
    |                     |    ^                            |    |
    |              [E]RFC |    |  CLS/send CLS              |    |
    |                  ___V____|____                     ___V____|____
    |  non-matching   |             |                   |             |
    |  CONN/send RFC  |   PENDING   | LISTEN        RFC |  LISTENING  |
    |   +-------------|    (1)      |----------+   +----|     (2)     |
    |   |             |_____________|          |   |    |_____________|
    |   |       matching     |                 |   |
 ___V___V_____  CONN/send RFC|               __V___V______
|             |              |     ACCEPT/  |             | CLS/
|   RFC-SENT  | RFC          |     send RFC |   RFC-RECD  | send CLS
|     (5)     |----------+   |   +----------|     (3)     |---------+
|_____________|          |   |   |          |_____________|         |
   |   |                 |   |   |               |                  |
   |   |              ___V___V___V___  SND&CLOSE |   ____________   |
   |   |    RCV&CLS/ |               |-----------)->|            |  |
   |   |    send CLS |      OPEN     | SND&CLS   |  |  DATA-WAIT |  |
   |   |   +---------|      (6)      |--------+  |  |    (8)     |  |
   |   |   |         |_______________|        |  |  |____________|  |
   |   |   |      RCV&CLOSE/ |                |  |   |              |
   |   |   |       send CLS  |                |  |   |              |
   |   |   |                 |                |  |   | CLS          |
   |   |   |           ______V______          |  |   |              |
   |   |   |   CLOSE/ |             |CLOSE/   |  |   |              |
   |   |   |  send CLS|   CLS-WAIT  |send CLS |  |   |              |
   |   +---)--------->|     (8)     |<--------)--+   |              |
   |       |          |_____________|         |      |              |
   |       |                 |             ___V______V_       ______V___
   |       |                 |            |            |     |          |
   |       |                 |            |  RFNM-WAIT |     |   ABORT  |
   |       |             CLS |            |     (9)    |     |    (4)   |
   |       |                 |            |____________|     |__________|
   |       |                 |                   |                 |
   |       |           ______V_______  RFNM/     |                 |
   |       |          |              | send CLS  |                 |
   |  CLS/ +--------->|    CLOSED    |<----------+                 |
   | send CLS         |     (0)      |                ACCEPT|CLOSE |
   +----------------->|              |<----------------------------+
                      |______________|

Abbildung 7.1: Verbindungszustandsdiagramm