9. Terminaison de l'association (Termination of Association)
SCTP fournit deux mécanismes de terminaison d'association : l'arrêt gracieux (Shutdown) et l'abandon forcé (Abort).
9.1. Abandon d'une association (Abort of an Association)
Le chunk ABORT est utilisé pour terminer immédiatement une association. Il s'agit d'une terminaison anormale sans garantie de livraison des données.
9.1.1. Envoi d'ABORT
Un point de terminaison PEUT (MAY) envoyer un chunk ABORT dans les situations suivantes :
- Détection d'une violation de protocole
- Réception d'une erreur irrécupérable
- La couche application demande une terminaison immédiate
- Épuisement des ressources
Format du chunk ABORT :
Le chunk ABORT contient :
- Chunk Type = 6
- Bit T : Indique l'utilisation du Verification Tag
- Causes d'erreur (optionnel) : Décrit la raison de l'abandon
9.1.2. Réception d'ABORT
Lors de la réception d'un chunk ABORT, un point de terminaison DOIT (MUST) :
1. Arrêter l'envoi de nouvelles données à cette association
2. Rejeter toutes les données non envoyées et non acquittées
3. Signaler l'abandon de l'association à la couche supérieure
4. Détruire le TCB
5. Ne pas envoyer de réponse
Important : ABORT est unidirectionnel ; le récepteur NE DOIT PAS (MUST NOT) envoyer de réponse.
9.1.3. Causes d'ABORT
Les causes d'ABORT courantes incluent :
| Code de cause | Nom | Description |
|---|---|---|
| 1 | Invalid Stream Identifier | Identifiant de flux invalide |
| 2 | Missing Mandatory Parameter | Paramètre obligatoire manquant |
| 3 | Stale Cookie Error | Cookie périmé |
| 4 | Out of Resource | Ressources insuffisantes |
| 5 | Unresolvable Address | Adresse non résolvable |
| 6 | Unrecognized Chunk Type | Type de chunk non reconnu |
| 7 | Invalid Mandatory Parameter | Paramètre obligatoire invalide |
| 8 | Unrecognized Parameters | Paramètres non reconnus |
| 9 | No User Data | Pas de données utilisateur |
| 10 | Cookie Received While Shutting Down | Cookie reçu pendant l'arrêt |
| 11 | Restart with New Addresses | Redémarrage avec de nouvelles adresses |
| 12 | User Initiated Abort | Abandon initié par l'utilisateur |
| 13 | Protocol Violation | Violation de protocole |
9.1.4. Utilisation du bit T
Le bit T contrôle la sélection du Verification Tag dans le chunk ABORT :
T=0 :
- Utiliser le Verification Tag normal
- Utilisé pour ABORT dans une association normale
T=1 :
- Utiliser le Verification Tag du paquet reçu
- Utilisé pour la réponse aux paquets "Out of the Blue"
- Ou lorsque le Tag correct est incertain
9.2. Arrêt d'une association (Shutdown of an Association)
SHUTDOWN est un processus de terminaison d'association normal et ordonné garantissant que toutes les données sont livrées de manière fiable.
9.2.1. Vue d'ensemble du processus d'arrêt
L'arrêt normal implique l'échange de trois chunks :
Point de terminaison A Point de terminaison Z
(Plus de données à envoyer)
--------[SHUTDOWN]--------->
(Transmettre les données restantes)
<------[SHUTDOWN ACK]-------
-----[SHUTDOWN COMPLETE]---->
Les deux côtés détruisent le TCB
9.2.2. Initiation du SHUTDOWN
Lorsque l'ULP demande la fermeture de l'association :
Comportement de l'expéditeur :
1. Arrêter l'acceptation de nouvelles données utilisateur
2. Terminer la transmission de toutes les données non envoyées
3. Attendre que toutes les données non acquittées soient acquittées
4. Envoyer un chunk SHUTDOWN avec le Cumulative TSN Ack
5. Démarrer le timer T2-shutdown
Format du chunk SHUTDOWN :
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 7 | Flags | Length = 8 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cumulative TSN Ack |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
9.2.3. Réception de SHUTDOWN
Lors de la réception d'un chunk SHUTDOWN, un point de terminaison DOIT (MUST) :
1. Arrêter l'acceptation de nouvelles données utilisateur
2. Vérifier que toutes les données jusqu'au Cumulative TSN Ack ont été envoyées
3. Si des données non envoyées existent, continuer la transmission
4. Une fois toutes les données acquittées, envoyer SHUTDOWN ACK
5. Démarrer le timer T2-shutdown
Transition d'état :
ESTABLISHED -> SHUTDOWN-RECEIVED
9.2.4. Envoi de SHUTDOWN ACK
Format du chunk SHUTDOWN ACK :
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 8 | Flags | Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Moment d'envoi :
- Toutes les données reçues livrées à l'ULP
- Toutes les données locales acquittées par le pair
9.2.5. Réception de SHUTDOWN ACK
Lors de la réception de SHUTDOWN ACK, un point de terminaison DOIT (MUST) :
1. Envoyer un chunk SHUTDOWN COMPLETE
2. Arrêter le timer T2-shutdown
3. Signaler la fermeture de l'association à l'ULP
4. Détruire le TCB
Transition d'état :
SHUTDOWN-SENT -> CLOSED
9.2.6. SHUTDOWN COMPLETE
Format du chunk SHUTDOWN COMPLETE :
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 14 |Reserved |T| Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Utilisation du bit T :
- T=0 : Cas normal, utiliser le Tag local
- T=1 : Utiliser lors de la réponse à un SHUTDOWN ACK inattendu
Réception de SHUTDOWN COMPLETE :
1. Arrêter le timer T2-shutdown
2. Signaler la fermeture de l'association à l'ULP
3. Détruire le TCB
Transition d'état :
SHUTDOWN-ACK-SENT -> CLOSED
9.2.7. Timer T2-shutdown
Objectif : Garantir que le processus SHUTDOWN n'attend pas indéfiniment.
Gestion du timeout :
Si dans l'état SHUTDOWN-SENT :
- Retransmettre le chunk SHUTDOWN
- Doubler le RTO
- Redémarrer le timer T2-shutdown
Si dans l'état SHUTDOWN-ACK-SENT :
- Retransmettre le chunk SHUTDOWN ACK
- Doubler le RTO
- Redémarrer le timer T2-shutdown
Si les retransmissions dépassent Association.Max.Retrans :
- Signaler l'erreur à l'ULP
- Détruire le TCB
9.2.8. Traitement des données pendant l'arrêt
Dans l'état SHUTDOWN-PENDING :
- Continuer la transmission et la réception normales des données
- Attendre que toutes les données non acquittées soient acquittées
Dans l'état SHUTDOWN-SENT :
- Ne pas accepter de nouvelles données utilisateur
- Peut recevoir les données du pair
- Envoyer SACK pour acquitter les données reçues
Dans l'état SHUTDOWN-RECEIVED :
- Ne pas accepter de nouvelles données utilisateur
- Continuer la transmission des données non envoyées
- Recevoir et acquitter les données du pair
Dans l'état SHUTDOWN-ACK-SENT :
- Ne pas accepter de nouvelles données utilisateur
- Ne pas transmettre de nouvelles données
- Retransmettre SHUTDOWN ACK en réponse à SHUTDOWN en double
9.2.9. Comparaison SHUTDOWN vs ABORT
| Caractéristique | SHUTDOWN | ABORT |
|---|---|---|
| Garantie de données | Toutes les données envoyées acquittées | Aucune garantie de données |
| Vitesse de terminaison | Plus lente (avec handshake) | Immédiate |
| Nettoyage des ressources | Nettoyage gracieux | Nettoyage immédiat |
| Cas d'utilisation | Fermeture normale | Erreur ou urgence |
| Réponse requise | Nécessite une réponse du pair | Unidirectionnel, pas de réponse |
Résumé
SCTP fournit des mécanismes flexibles de terminaison d'association :
- SHUTDOWN : Pour une fermeture normale, garantit l'intégrité des données
- ABORT : Pour des situations exceptionnelles, terminaison immédiate
Meilleures pratiques :
- Préférer SHUTDOWN pour une fermeture normale
- Utiliser ABORT uniquement pour les erreurs ou les problèmes de ressources
- Gérer correctement les timeouts du timer T2-shutdown
- Implémenter des mécanismes de retransmission appropriés