Aller au contenu principal

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 causeNomDescription
1Invalid Stream IdentifierIdentifiant de flux invalide
2Missing Mandatory ParameterParamètre obligatoire manquant
3Stale Cookie ErrorCookie périmé
4Out of ResourceRessources insuffisantes
5Unresolvable AddressAdresse non résolvable
6Unrecognized Chunk TypeType de chunk non reconnu
7Invalid Mandatory ParameterParamètre obligatoire invalide
8Unrecognized ParametersParamètres non reconnus
9No User DataPas de données utilisateur
10Cookie Received While Shutting DownCookie reçu pendant l'arrêt
11Restart with New AddressesRedémarrage avec de nouvelles adresses
12User Initiated AbortAbandon initié par l'utilisateur
13Protocol ViolationViolation 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éristiqueSHUTDOWNABORT
Garantie de donnéesToutes les données envoyées acquittéesAucune garantie de données
Vitesse de terminaisonPlus lente (avec handshake)Immédiate
Nettoyage des ressourcesNettoyage gracieuxNettoyage immédiat
Cas d'utilisationFermeture normaleErreur ou urgence
Réponse requiseNécessite une réponse du pairUnidirectionnel, pas de réponse

Résumé

SCTP fournit des mécanismes flexibles de terminaison d'association :

  1. SHUTDOWN : Pour une fermeture normale, garantit l'intégrité des données
  2. 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