Passa al contenuto principale

10. Interfaccia con il livello superiore (Interface with Upper Layer)

Questo capitolo definisce i servizi di interfaccia tra SCTP e il protocollo del livello superiore (ULP). Si tratta di interfacce astratte; le implementazioni effettive possono variare in base al sistema operativo.

10.1. Da ULP a SCTP (ULP-to-SCTP)

L'ULP utilizza le seguenti primitive per inviare comandi e dati a SCTP:

10.1.1. Initialize

Formato: INITIALIZE([local port], [local eligible address list]) Scopo: Inizializzare un endpoint SCTP. Risultato: Handle dell'endpoint locale o codice di errore.

10.1.2. Associate

Formato: ASSOCIATE(local SCTP instance name, destination transport addr, outbound stream count) Scopo: Richiedere l'istituzione di una nuova associazione con un endpoint SCTP remoto. Risultato: COMMUNICATION UP (successo) o COMMUNICATION LOST (fallimento).

10.1.3. Send

Formato: SEND(association id, buffer address, byte count [,context] [,stream id] [,life time] [,destination transport address] [,unordered flag] [,no-bundle flag] [,payload protocol-id]) Scopo: Passare un messaggio utente a SCTP per la trasmissione. Parametri opzionali: context, stream id, life time, destination address, unordered flag, no-bundle flag, payload protocol-id.

10.1.4. Shutdown

Formato: SHUTDOWN(association id) Scopo: Chiudere l'associazione in modo graceful. Risultato: SHUTDOWN COMPLETE o COMMUNICATION LOST.

10.1.5. Abort

Formato: ABORT(association id [,Upper Layer Abort Reason]) Scopo: Terminare immediatamente l'associazione. Risultato: COMMUNICATION LOST.

10.1.6. Set Primary

Formato: SET PRIMARY(association id, destination transport address) Scopo: Impostare l'indirizzo di destinazione primario.

10.1.7. Receive

Formato: RECEIVE(association id, buffer address, buffer size) Scopo: Ricevere dati da SCTP. Valori di ritorno: byte count, stream id, stream sequence number, partial flag, delivery number, transport address.

10.1.8. Status

Formato: STATUS(association id) Scopo: Interrogare lo stato corrente dell'associazione. Valori di ritorno: 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

Formato: CHANGE HEARTBEAT(association id, destination transport address, new state [,interval]) Scopo: Abilitare o disabilitare l'heartbeat per un indirizzo di destinazione specifico.

10.1.10. Request Heartbeat

Formato: REQUEST HEARTBEAT(association id, destination transport address) Scopo: Richiedere l'invio di un heartbeat a un indirizzo di destinazione specifico.

10.1.11. Get SRTT Report

Formato: GET SRTT REPORT(association id, destination transport address) Scopo: Ottenere l'SRTT (tempo di andata e ritorno smoothed) per un indirizzo di destinazione specifico.

10.1.12. Set Failure Threshold

Formato: SET FAILURE THRESHOLD(association id, destination transport address, failure threshold) Scopo: Impostare la soglia di guasto del percorso.

10.1.13. Set Protocol Parameters

Formato: SET PROTOCOL PARAMETERS(association id, [,destination transport address,] protocol parameter list) Scopo: Impostare i parametri del protocollo SCTP. Parametri configurabili: 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

Formato: DESTROY(local SCTP instance name) Scopo: Distruggere l'istanza SCTP.

10.2. Da SCTP a ULP (SCTP-to-ULP)

SCTP utilizza le seguenti primitive per segnalare eventi all'ULP:

10.2.1. COMMUNICATION UP

Formato: COMMUNICATION UP(association id, destination transport address list, outbound stream count, inbound stream count) Condizioni di attivazione: Nuova associazione stabilita con successo o accettata come lato passivo.

10.2.2. DATA ARRIVE

Formato: DATA ARRIVE(association id, stream id, stream sequence number, flags, payload protocol identifier, user data) Condizioni di attivazione: Dati utente ricevuti dal peer.

10.2.3. COMMUNICATION LOST

Formato: COMMUNICATION LOST(association id, status) Condizioni di attivazione: Associazione fallita/interrotta, guasto dell'endpoint peer rilevato, chunk ABORT ricevuto, SHUTDOWN fallito. Status possibili: Association exceeded maximum retransmissions, Peer sent ABORT, Peer unexpectedly closed, Resources unavailable.

10.2.4. COMMUNICATION ERROR

Formato: COMMUNICATION ERROR(association id, error info) Condizioni di attivazione: Errore di comunicazione recuperabile rilevato, chunk ERROR ricevuto, guasto del percorso (ma associazione ancora attiva).

10.2.5. RESTART

Formato: RESTART(association id, peer's new tag) Condizioni di attivazione: Riavvio dell'endpoint peer rilevato.

10.2.6. SHUTDOWN COMPLETE

Formato: SHUTDOWN COMPLETE(association id) Condizioni di attivazione: Processo di arresto graceful completato con successo.

10.2.7. SEND FAILURE

Formato: SEND FAILURE(association id, data retrieval id, cause code, context) Condizioni di attivazione: Trasmissione dati fallita, numero massimo di ritrasmissioni raggiunto, durata di vita del messaggio scaduta. Codici di causa: Message expired, Association aborted, Send failed.

10.2.8. NETWORK STATUS CHANGE

Formato: NETWORK STATUS CHANGE(association id, destination transport address, new status) Condizioni di attivazione: Stato dell'indirizzo di trasporto di destinazione modificato, percorso diventato attivo/inattivo. Status possibili: Active, Inactive, Unconfirmed.


L'interfaccia ULP di SCTP fornisce:

  1. Gestione completa delle associazioni: Inizializzazione, stabilimento, chiusura, interruzione
  2. Trasmissione dati flessibile: Supporto multi-stream, ordinato/non ordinato, durata di vita
  3. Gestione dei percorsi: Heartbeat, rilevamento guasti, selezione percorso primario
  4. Monitoraggio dello stato: Interrogazione dello stato dell'associazione, notifiche di cambio stato della rete
  5. Configurazione dei parametri: Regolazione runtime dei parametri del protocollo

Best practice:

  • Gestire correttamente tutte le notifiche da SCTP a ULP
  • Utilizzare gli ID stream per la separazione logica dei dati
  • Impostare durate di vita dei messaggi ragionevoli
  • Monitorare i cambiamenti di stato della rete e rispondere
  • Preferire lo shutdown graceful all'interruzione forzata