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).