4. Diagramme d'état de l'association SCTP (SCTP Association State Diagram)
Au cours de la durée de vie d'une association SCTP, l'association du point de terminaison SCTP progresse d'un état à un autre en réponse à divers événements. Les événements susceptibles de faire progresser l'état d'une association incluent :
- Appels de primitives utilisateur SCTP, par exemple [ASSOCIATE], [SHUTDOWN], [ABORT]
- Réception de chunks de contrôle INIT, COOKIE ECHO, ABORT, SHUTDOWN, etc.
- Certains événements de délai d'attente
Le diagramme d'état dans les figures ci-dessous illustre les changements d'état, ainsi que les événements déclencheurs et les actions résultantes. Notez que certaines conditions d'erreur ne sont pas affichées dans le diagramme d'état. Des descriptions complètes de tous les cas particuliers se trouvent dans le texte.
Note : Les noms de chunks sont donnés en majuscules, tandis que les noms de paramètres ont la première lettre en majuscule, par exemple, type de chunk COOKIE ECHO vs. paramètre State Cookie.
Si plus d'un événement/message peut se produire provoquant une transition d'état, il est étiqueté (A), (B), etc.
Voici une illustration détaillée du diagramme d'état de l'association SCTP :
----- -------- (depuis n'importe quel état)
/ \ / \
/ rcv ABORT [ABORT] rcv INIT | |
| ---------- ou ---------- --------------- |
| v v v
\ supprimer TCB snd ABORT générer Cookie \
+---------+ supprimer TCB snd INIT ACK ---| CLOSED |
+---------+ / \
[ASSOCIATE] / \
--------------- | |
créer TCB | |
snd INIT | |
démarrer timer init rcv valid |
v | COOKIE ECHO |
+------------+ | (1) ----------------
| COOKIE-WAIT| | créer TCB (2)
+------------+ | snd COOKIE ACK
| |
| rcv INIT ACK |
| ----------------- |
| snd COOKIE ECHO |
| arrêter timer init |
| démarrer timer cookie |
v |
+--------------+ |
| COOKIE-ECHOED| (3) |
+--------------+ |
| |
| rcv COOKIE ACK |
| ----------------- |
| arrêter timer cookie v
v v
+---------------+
| ESTABLISHED |
+---------------+
(depuis l'état ESTABLISHED uniquement)
| /--------+--------\
| [SHUTDOWN] / \
| -------------------| |
| vérifier les | |
| chunks DATA en cours| |
| v |
| +---------+ |
| |SHUTDOWN-| | rcv SHUTDOWN
| |PENDING | |------------------
| +---------+ | vérifier les
| | | chunks DATA en cours
| Plus de données en cours |
| --------------------- |
| snd SHUTDOWN | |
| démarrer timer shutdown | |
| v v
| +---------+ +-----------+
| |SHUTDOWN-| (4) | SHUTDOWN- | (5,6)
| |SENT | | RECEIVED |
| +---------+ +-----------+
| | \
| (A) rcv SHUTDOWN ACK | \
| ---------------------- | \rcv:SHUTDOWN
| arrêter timer shutdown | \ (B)rcv SHUTDOWN
| envoyer SHUTDOWN COMPLETE| \----------------------
| supprimer TCB | | envoyer SHUTDOWN ACK
| | | démarrer timer shutdown
| | | passer à SHUTDOWN-
| | | ACK-SENT
| | |
| v v
| +-----------+ |
| | SHUTDOWN- | (7) |
| | ACK-SENT | |
| +-----------+ |
| | |
| (C)rcv SHUTDOWN COMPLETE |
| |----------------- | |
| | arrêter timer shutdown |
| | supprimer TCB | |
| | |
| | (D)rcv SHUTDOWN ACK |
| |-------------- | |
| | arrêter timer shutdown |
| | envoyer SHUTDOWN COMPLETE |
| | supprimer TCB | |
| | |
| \ +---------+ /
| \-------------->| CLOSED |<-----------------/
| +---------+
Notes
Note 1) Si le State Cookie dans le COOKIE ECHO reçu est invalide (c'est-à-dire qu'il n'a pas passé le contrôle d'intégrité), le récepteur DOIT (MUST) rejeter silencieusement le paquet. Ou, si le State Cookie reçu est expiré (voir Section 5.1.5), le récepteur DOIT (MUST) renvoyer un chunk ERROR. Dans les deux cas, le récepteur reste dans l'état CLOSED.
Note 2) Si le temporisateur T1-init expire, le point de terminaison DOIT (MUST) retransmettre INIT et redémarrer le temporisateur T1-init sans changer d'état. Cela DOIT (MUST) être répété jusqu'à 'Max.Init.Retransmits' fois. Après cela, le point de terminaison DOIT (MUST) interrompre le processus d'initialisation et signaler l'erreur à l'utilisateur SCTP.
Note 3) Si le temporisateur T1-cookie expire, le point de terminaison DOIT (MUST) retransmettre COOKIE ECHO et redémarrer le temporisateur T1-cookie sans changer d'état. Cela DOIT (MUST) être répété jusqu'à 'Max.Init.Retransmits' fois. Après cela, le point de terminaison DOIT (MUST) interrompre le processus d'initialisation et signaler l'erreur à l'utilisateur SCTP.
Note 4) Dans l'état SHUTDOWN-SENT, le point de terminaison DOIT (MUST) accuser réception de tous les chunks DATA reçus sans délai.
Note 5) Dans l'état SHUTDOWN-RECEIVED, le point de terminaison NE DOIT PAS (MUST NOT) accepter de nouvelles demandes d'envoi de son utilisateur SCTP.
Note 6) Dans l'état SHUTDOWN-RECEIVED, le point de terminaison DOIT (MUST) transmettre ou retransmettre des données et quitter cet état lorsque toutes les données en file d'attente sont transmises.
Note 7) Dans l'état SHUTDOWN-ACK-SENT, le point de terminaison NE DOIT PAS (MUST NOT) accepter de nouvelles demandes d'envoi de son utilisateur SCTP.
L'état CLOSED est utilisé pour indiquer qu'une association n'est pas créée (c'est-à-dire qu'elle n'existe pas).