Passa al contenuto principale

4. Diagramma degli Stati dell'Associazione SCTP (SCTP Association State Diagram)

Durante il ciclo di vita di un'associazione SCTP, l'associazione dell'endpoint SCTP progredisce da uno stato all'altro in risposta a vari eventi. Gli eventi che possono potenzialmente far avanzare lo stato di un'associazione includono:

  • Chiamate a primitive utente SCTP, ad esempio [ASSOCIATE], [SHUTDOWN], [ABORT]
  • Ricezione di chunk di controllo INIT, COOKIE ECHO, ABORT, SHUTDOWN, ecc.
  • Alcuni eventi di timeout

Il diagramma degli stati nelle figure seguenti illustra i cambiamenti di stato, insieme agli eventi causali e alle azioni risultanti. Si noti che alcune delle condizioni di errore non sono mostrate nel diagramma degli stati. Le descrizioni complete di tutti i casi speciali si trovano nel testo.

Nota: I nomi dei chunk sono indicati in lettere maiuscole, mentre i nomi dei parametri hanno la prima lettera maiuscola, ad esempio tipo di chunk COOKIE ECHO vs. parametro State Cookie.

Se più di un evento/messaggio può verificarsi causando una transizione di stato, è etichettato (A), (B), ecc.

Quello che segue è un'illustrazione dettagliata del diagramma degli stati dell'associazione SCTP:

-----        --------              (da qualsiasi stato)
/ \ / \
/ rcv ABORT [ABORT] rcv INIT | |
| ---------- o ---------- --------------- |
| v v v
\ eliminare TCB snd ABORT generare Cookie \
+---------+ eliminare TCB snd INIT ACK ---| CLOSED |
+---------+ / \

[ASSOCIATE] / \
--------------- | |
creare TCB | |
snd INIT | |
avviare timer init rcv valid |
v | COOKIE ECHO |
+------------+ | (1) ----------------
| COOKIE-WAIT| | creare TCB (2)
+------------+ | snd COOKIE ACK
| |
| rcv INIT ACK |
| ----------------- |
| snd COOKIE ECHO |
| fermare timer init |
| avviare timer cookie |
v |
+--------------+ |
| COOKIE-ECHOED| (3) |
+--------------+ |
| |
| rcv COOKIE ACK |
| ----------------- |
| fermare timer cookie v
v v
+---------------+
| ESTABLISHED |
+---------------+

(solo dallo stato ESTABLISHED)

|                         /--------+--------\
| [SHUTDOWN] / \
| -------------------| |
| verificare i | |
| chunk DATA in sospeso| |
| v |
| +---------+ |
| |SHUTDOWN-| | rcv SHUTDOWN
| |PENDING | |------------------
| +---------+ | verificare i
| | | chunk DATA in sospeso
| Nessun altro in sospeso |
| --------------------- |
| snd SHUTDOWN | |
| avviare timer shutdown | |
| v v
| +---------+ +-----------+
| |SHUTDOWN-| (4) | SHUTDOWN- | (5,6)
| |SENT | | RECEIVED |
| +---------+ +-----------+
| | \
| (A) rcv SHUTDOWN ACK | \
| ---------------------- | \rcv:SHUTDOWN
| fermare timer shutdown | \ (B)rcv SHUTDOWN
| inviare SHUTDOWN COMPLETE| \----------------------
| eliminare TCB | | inviare SHUTDOWN ACK
| | | avviare timer shutdown
| | | passare a SHUTDOWN-
| | | ACK-SENT
| | |
| v v
| +-----------+ |
| | SHUTDOWN- | (7) |
| | ACK-SENT | |
| +-----------+ |
| | |
| (C)rcv SHUTDOWN COMPLETE |
| |----------------- | |
| | fermare timer shutdown |
| | eliminare TCB | |
| | |
| | (D)rcv SHUTDOWN ACK |
| |-------------- | |
| | fermare timer shutdown |
| | inviare SHUTDOWN COMPLETE |
| | eliminare TCB | |
| | |
| \ +---------+ /
| \-------------->| CLOSED |<-----------------/
| +---------+

Note

Nota 1) Se lo State Cookie nel COOKIE ECHO ricevuto è invalido (cioè, non ha superato il controllo di integrità), il ricevitore DEVE (MUST) scartare silenziosamente il pacchetto. Oppure, se lo State Cookie ricevuto è scaduto (vedi Sezione 5.1.5), il ricevitore DEVE (MUST) inviare indietro un chunk ERROR. In entrambi i casi, il ricevitore rimane nello stato CLOSED.

Nota 2) Se il timer T1-init scade, l'endpoint DEVE (MUST) ritrasmettere INIT e riavviare il timer T1-init senza cambiare stato. Questo DEVE (MUST) essere ripetuto fino a 'Max.Init.Retransmits' volte. Dopo di che, l'endpoint DEVE (MUST) interrompere il processo di inizializzazione e segnalare l'errore all'utente SCTP.

Nota 3) Se il timer T1-cookie scade, l'endpoint DEVE (MUST) ritrasmettere COOKIE ECHO e riavviare il timer T1-cookie senza cambiare stato. Questo DEVE (MUST) essere ripetuto fino a 'Max.Init.Retransmits' volte. Dopo di che, l'endpoint DEVE (MUST) interrompere il processo di inizializzazione e segnalare l'errore all'utente SCTP.

Nota 4) Nello stato SHUTDOWN-SENT, l'endpoint DEVE (MUST) riconoscere qualsiasi chunk DATA ricevuto senza ritardo.

Nota 5) Nello stato SHUTDOWN-RECEIVED, l'endpoint NON DEVE (MUST NOT) accettare nuove richieste di invio dal suo utente SCTP.

Nota 6) Nello stato SHUTDOWN-RECEIVED, l'endpoint DEVE (MUST) trasmettere o ritrasmettere dati e lasciare questo stato quando tutti i dati in coda sono stati trasmessi.

Nota 7) Nello stato SHUTDOWN-ACK-SENT, l'endpoint NON DEVE (MUST NOT) accettare nuove richieste di invio dal suo utente SCTP.

Lo stato CLOSED viene utilizzato per indicare che un'associazione non è stata creata (cioè, non esiste).