10. Interface avec la couche supérieure (Interface with Upper Layer)
Ce chapitre définit les services d'interface entre SCTP et le protocole de couche supérieure (ULP). Il s'agit d'interfaces abstraites ; les implémentations réelles peuvent varier selon le système d'exploitation.
10.1. ULP vers SCTP (ULP-to-SCTP)
L'ULP utilise les primitives suivantes pour envoyer des commandes et des données à SCTP :
10.1.1. Initialize
Format : INITIALIZE([local port], [local eligible address list])
Objectif : Initialiser un point de terminaison SCTP.
Résultat : Handle de point de terminaison local ou code d'erreur.
10.1.2. Associate
Format : ASSOCIATE(local SCTP instance name, destination transport addr, outbound stream count)
Objectif : Demander l'établissement d'une nouvelle association avec un point de terminaison SCTP distant.
Résultat : COMMUNICATION UP (succès) ou COMMUNICATION LOST (échec).
10.1.3. Send
Format : SEND(association id, buffer address, byte count [,context] [,stream id] [,life time] [,destination transport address] [,unordered flag] [,no-bundle flag] [,payload protocol-id])
Objectif : Transmettre un message utilisateur à SCTP pour transmission.
Paramètres optionnels : context, stream id, life time, destination address, unordered flag, no-bundle flag, payload protocol-id.
10.1.4. Shutdown
Format : SHUTDOWN(association id)
Objectif : Fermer gracieusement l'association.
Résultat : SHUTDOWN COMPLETE ou COMMUNICATION LOST.
10.1.5. Abort
Format : ABORT(association id [,Upper Layer Abort Reason])
Objectif : Terminer immédiatement l'association.
Résultat : COMMUNICATION LOST.
10.1.6. Set Primary
Format : SET PRIMARY(association id, destination transport address)
Objectif : Définir l'adresse de destination principale.
10.1.7. Receive
Format : RECEIVE(association id, buffer address, buffer size)
Objectif : Recevoir des données de SCTP.
Valeurs de retour : byte count, stream id, stream sequence number, partial flag, delivery number, transport address.
10.1.8. Status
Format : STATUS(association id)
Objectif : Interroger l'état actuel de l'association.
Valeurs de retour : association connection state, destination transport address list, reachability states, receiver window size, congestion window sizes, outbound/inbound streams, primary path.
10.1.9. Change Heartbeat
Format : CHANGE HEARTBEAT(association id, destination transport address, new state [,interval])
Objectif : Activer ou désactiver le heartbeat pour une adresse de destination spécifique.
10.1.10. Request Heartbeat
Format : REQUEST HEARTBEAT(association id, destination transport address)
Objectif : Demander l'envoi d'un heartbeat à une adresse de destination spécifique.
10.1.11. Get SRTT Report
Format : GET SRTT REPORT(association id, destination transport address)
Objectif : Obtenir le SRTT (temps d'aller-retour lissé) pour une adresse de destination spécifique.
10.1.12. Set Failure Threshold
Format : SET FAILURE THRESHOLD(association id, destination transport address, failure threshold)
Objectif : Définir le seuil d'échec du chemin.
10.1.13. Set Protocol Parameters
Format : SET PROTOCOL PARAMETERS(association id, [,destination transport address,] protocol parameter list)
Objectif : Définir les paramètres du protocole SCTP.
Paramètres configurables : RTO.Initial, RTO.Min, RTO.Max, RTO.Alpha, RTO.Beta, Max.Burst, Association.Max.Retrans, Path.Max.Retrans, Valid.Cookie.Life, SACK.Delay.
10.1.14. Destroy SCTP Instance
Format : DESTROY(local SCTP instance name)
Objectif : Détruire l'instance SCTP.
10.2. SCTP vers ULP (SCTP-to-ULP)
SCTP utilise les primitives suivantes pour signaler des événements à l'ULP :
10.2.1. COMMUNICATION UP
Format : COMMUNICATION UP(association id, destination transport address list, outbound stream count, inbound stream count)
Conditions de déclenchement : Nouvelle association établie avec succès ou acceptée en tant que côté passif.
10.2.2. DATA ARRIVE
Format : DATA ARRIVE(association id, stream id, stream sequence number, flags, payload protocol identifier, user data)
Conditions de déclenchement : Données utilisateur reçues du pair.
10.2.3. COMMUNICATION LOST
Format : COMMUNICATION LOST(association id, status)
Conditions de déclenchement : Association échouée/abandonnée, échec du point de terminaison du pair détecté, chunk ABORT reçu, échec de SHUTDOWN.
Status possibles : Association exceeded maximum retransmissions, Peer sent ABORT, Peer unexpectedly closed, Resources unavailable.
10.2.4. COMMUNICATION ERROR
Format : COMMUNICATION ERROR(association id, error info)
Conditions de déclenchement : Erreur de communication récupérable détectée, chunk ERROR reçu, échec de chemin (mais association toujours active).
10.2.5. RESTART
Format : RESTART(association id, peer's new tag)
Conditions de déclenchement : Redémarrage du point de terminaison du pair détecté.
10.2.6. SHUTDOWN COMPLETE
Format : SHUTDOWN COMPLETE(association id)
Conditions de déclenchement : Processus d'arrêt gracieux terminé avec succès.
10.2.7. SEND FAILURE
Format : SEND FAILURE(association id, data retrieval id, cause code, context)
Conditions de déclenchement : Échec de transmission des données, nombre maximum de retransmissions atteint, durée de vie du message expirée.
Codes de cause : Message expired, Association aborted, Send failed.
10.2.8. NETWORK STATUS CHANGE
Format : NETWORK STATUS CHANGE(association id, destination transport address, new status)
Conditions de déclenchement : État de l'adresse de transport de destination modifié, chemin devenu actif/inactif.
Status possibles : Active, Inactive, Unconfirmed.
Résumé
L'interface ULP de SCTP fournit :
- Gestion complète des associations : Initialisation, établissement, fermeture, abandon
- Transmission de données flexible : Support multi-flux, ordonné/non ordonné, durée de vie
- Gestion des chemins : Heartbeat, détection d'échec, sélection du chemin principal
- Surveillance de l'état : Interrogation de l'état de l'association, notifications de changement d'état réseau
- Configuration des paramètres : Ajustement des paramètres de protocole à l'exécution
Meilleures pratiques :
- Gérer correctement toutes les notifications SCTP vers ULP
- Utiliser les ID de flux pour la séparation logique des données
- Définir des durées de vie de message raisonnables
- Surveiller les changements d'état réseau et réagir
- Préférer l'arrêt gracieux à l'abandon forcé