10. Schnittstelle zur oberen Schicht (Interface with Upper Layer)
Dieses Kapitel definiert die Schnittstellendienste zwischen SCTP und dem Upper Layer Protocol (ULP). Dies sind abstrakte Schnittstellen; tatsächliche Implementierungen können je nach Betriebssystem variieren.
10.1. ULP zu SCTP (ULP-to-SCTP)
ULP verwendet die folgenden Primitive, um Befehle und Daten an SCTP zu senden:
10.1.1. Initialize
Format: INITIALIZE([local port], [local eligible address list])
Zweck: SCTP-Endpunkt initialisieren.
Ergebnis: Lokales Endpunkt-Handle oder Fehlercode.
10.1.2. Associate
Format: ASSOCIATE(local SCTP instance name, destination transport addr, outbound stream count)
Zweck: Aufbau einer neuen Assoziation mit einem entfernten SCTP-Endpunkt anfordern.
Ergebnis: COMMUNICATION UP (Erfolg) oder COMMUNICATION LOST (Fehler).
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])
Zweck: Benutzernachricht an SCTP zur Übertragung übergeben.
Optionale Parameter: context, stream id, life time, destination address, unordered flag, no-bundle flag, payload protocol-id.
10.1.4. Shutdown
Format: SHUTDOWN(association id)
Zweck: Assoziation graceful schließen.
Ergebnis: SHUTDOWN COMPLETE oder COMMUNICATION LOST.
10.1.5. Abort
Format: ABORT(association id [,Upper Layer Abort Reason])
Zweck: Assoziation sofort beenden.
Ergebnis: COMMUNICATION LOST.
10.1.6. Set Primary
Format: SET PRIMARY(association id, destination transport address)
Zweck: Primäre Zieladresse festlegen.
10.1.7. Receive
Format: RECEIVE(association id, buffer address, buffer size)
Zweck: Daten von SCTP empfangen.
Rückgabewerte: byte count, stream id, stream sequence number, partial flag, delivery number, transport address.
10.1.8. Status
Format: STATUS(association id)
Zweck: Aktuellen Assoziationsstatus abfragen.
Rückgabewerte: 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])
Zweck: Heartbeat für bestimmte Zieladresse aktivieren oder deaktivieren.
10.1.10. Request Heartbeat
Format: REQUEST HEARTBEAT(association id, destination transport address)
Zweck: Heartbeat an bestimmte Zieladresse senden anfordern.
10.1.11. Get SRTT Report
Format: GET SRTT REPORT(association id, destination transport address)
Zweck: SRTT (geglättete Rundlaufzeit) für bestimmte Zieladresse abrufen.
10.1.12. Set Failure Threshold
Format: SET FAILURE THRESHOLD(association id, destination transport address, failure threshold)
Zweck: Pfad-Fehlerschwelle festlegen.
10.1.13. Set Protocol Parameters
Format: SET PROTOCOL PARAMETERS(association id, [,destination transport address,] protocol parameter list)
Zweck: SCTP-Protokollparameter festlegen.
Konfigurierbare Parameter: 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)
Zweck: SCTP-Instanz zerstören.
10.2. SCTP zu ULP (SCTP-to-ULP)
SCTP verwendet die folgenden Primitive, um Ereignisse an ULP zu melden:
10.2.1. COMMUNICATION UP
Format: COMMUNICATION UP(association id, destination transport address list, outbound stream count, inbound stream count)
Auslösebedingungen: Neue Assoziation erfolgreich aufgebaut oder als passive Seite akzeptiert.
10.2.2. DATA ARRIVE
Format: DATA ARRIVE(association id, stream id, stream sequence number, flags, payload protocol identifier, user data)
Auslösebedingungen: Benutzerdaten vom Peer empfangen.
10.2.3. COMMUNICATION LOST
Format: COMMUNICATION LOST(association id, status)
Auslösebedingungen: Assoziation fehlgeschlagen/abgebrochen, Peer-Endpunkt-Fehler erkannt, ABORT-Chunk empfangen, SHUTDOWN fehlgeschlagen.
Mögliche Status: Association exceeded maximum retransmissions, Peer sent ABORT, Peer unexpectedly closed, Resources unavailable.
10.2.4. COMMUNICATION ERROR
Format: COMMUNICATION ERROR(association id, error info)
Auslösebedingungen: Behebbarer Kommunikationsfehler erkannt, ERROR-Chunk empfangen, Pfadfehler (aber Assoziation noch aktiv).
10.2.5. RESTART
Format: RESTART(association id, peer's new tag)
Auslösebedingungen: Neustart des Peer-Endpunkts erkannt.
10.2.6. SHUTDOWN COMPLETE
Format: SHUTDOWN COMPLETE(association id)
Auslösebedingungen: Graceful-Shutdown-Prozess erfolgreich abgeschlossen.
10.2.7. SEND FAILURE
Format: SEND FAILURE(association id, data retrieval id, cause code, context)
Auslösebedingungen: Datenübertragung fehlgeschlagen, maximale Neuübertragungen erreicht, Nachrichtenlebensdauer abgelaufen.
Ursachencodes: Message expired, Association aborted, Send failed.
10.2.8. NETWORK STATUS CHANGE
Format: NETWORK STATUS CHANGE(association id, destination transport address, new status)
Auslösebedingungen: Ziel-Transportadressstatus geändert, Pfad aktiv/inaktiv geworden.
Mögliche Status: Active, Inactive, Unconfirmed.
Zusammenfassung
Die ULP-Schnittstelle von SCTP bietet:
- Vollständige Assoziationsverwaltung: Initialisierung, Aufbau, Schließen, Abbruch
- Flexible Datenübertragung: Unterstützung für Multi-Stream, geordnet/ungeordnet, Lebensdauer
- Pfadverwaltung: Heartbeat, Fehlererkennung, Auswahl des primären Pfads
- Statusüberwachung: Assoziationsstatus-Abfrage, Netzwerkstatus-Änderungsbenachrichtigungen
- Parameterkonfiguration: Laufzeitanpassung von Protokollparametern
Best Practices:
- Alle SCTP-zu-ULP-Benachrichtigungen ordnungsgemäß behandeln
- Stream-IDs für logische Datentrennung verwenden
- Angemessene Nachrichtenlebensdauern festlegen
- Netzwerkstatusänderungen überwachen und reagieren
- Graceful Shutdown gegenüber erzwungenem Abbruch bevorzugen