9. Terminazione dell'associazione (Termination of Association)
SCTP fornisce due meccanismi per la terminazione dell'associazione: arresto graceful (Shutdown) e interruzione forzata (Abort).
9.1. Interruzione di un'associazione (Abort of an Association)
Il chunk ABORT viene utilizzato per terminare immediatamente un'associazione. Si tratta di una terminazione anomala senza garanzia di consegna dei dati.
9.1.1. Invio di ABORT
Un endpoint PUÒ (MAY) inviare un chunk ABORT nelle seguenti situazioni:
- Rilevamento di violazione del protocollo
- Ricezione di errore irreversibile
- Il livello applicativo richiede la terminazione immediata
- Esaurimento delle risorse
Formato chunk ABORT:
Il chunk ABORT contiene:
- Chunk Type = 6
- Bit T: Indica l'uso del Verification Tag
- Cause di errore (opzionale): Descrive il motivo dell'interruzione
9.1.2. Ricezione di ABORT
Alla ricezione di un chunk ABORT, un endpoint DEVE (MUST):
1. Interrompere l'invio di nuovi dati a questa associazione
2. Scartare tutti i dati non inviati e non riconosciuti
3. Segnalare l'interruzione dell'associazione al livello superiore
4. Distruggere il TCB
5. Non inviare alcuna risposta
Importante: ABORT è unidirezionale; il ricevente NON DEVE (MUST NOT) inviare alcuna risposta.
9.1.3. Cause di ABORT
Le cause comuni di ABORT includono:
| Codice causa | Nome | Descrizione |
|---|---|---|
| 1 | Invalid Stream Identifier | Identificatore di stream non valido |
| 2 | Missing Mandatory Parameter | Parametro obbligatorio mancante |
| 3 | Stale Cookie Error | Cookie scaduto |
| 4 | Out of Resource | Risorse insufficienti |
| 5 | Unresolvable Address | Indirizzo non risolvibile |
| 6 | Unrecognized Chunk Type | Tipo di chunk non riconosciuto |
| 7 | Invalid Mandatory Parameter | Parametro obbligatorio non valido |
| 8 | Unrecognized Parameters | Parametri non riconosciuti |
| 9 | No User Data | Nessun dato utente |
| 10 | Cookie Received While Shutting Down | Cookie ricevuto durante lo shutdown |
| 11 | Restart with New Addresses | Riavvio con nuovi indirizzi |
| 12 | User Initiated Abort | Interruzione avviata dall'utente |
| 13 | Protocol Violation | Violazione del protocollo |
9.1.4. Utilizzo del bit T
Il bit T controlla la selezione del Verification Tag nel chunk ABORT:
T=0:
- Utilizzare il Verification Tag normale
- Utilizzato per ABORT in associazione normale
T=1:
- Utilizzare il Verification Tag dal pacchetto ricevuto
- Utilizzato per risposta a pacchetti "Out of the Blue"
- O quando il Tag corretto è incerto
9.2. Arresto di un'associazione (Shutdown of an Association)
SHUTDOWN è un processo di terminazione dell'associazione normale e ordinato che garantisce la consegna affidabile di tutti i dati.
9.2.1. Panoramica del processo di arresto
L'arresto normale comporta lo scambio di tre chunk:
Endpoint A Endpoint Z
(Nessun dato da inviare)
--------[SHUTDOWN]--------->
(Trasmettere i dati rimanenti)
<------[SHUTDOWN ACK]-------
-----[SHUTDOWN COMPLETE]---->
Entrambi i lati distruggono il TCB
9.2.2. Avvio dello SHUTDOWN
Quando l'ULP richiede la chiusura dell'associazione:
Comportamento del mittente:
1. Interrompere l'accettazione di nuovi dati utente
2. Completare la trasmissione di tutti i dati non inviati
3. Attendere che tutti i dati non riconosciuti siano riconosciuti
4. Inviare chunk SHUTDOWN con Cumulative TSN Ack
5. Avviare il timer T2-shutdown
Formato 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. Ricezione di SHUTDOWN
Alla ricezione di un chunk SHUTDOWN, un endpoint DEVE (MUST):
1. Interrompere l'accettazione di nuovi dati utente
2. Verificare che tutti i dati fino al Cumulative TSN Ack siano stati inviati
3. Se esistono dati non inviati, continuare la trasmissione
4. Una volta riconosciuti tutti i dati, inviare SHUTDOWN ACK
5. Avviare il timer T2-shutdown
Transizione di stato:
ESTABLISHED -> SHUTDOWN-RECEIVED
9.2.4. Invio di SHUTDOWN ACK
Formato 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Momento di invio:
- Tutti i dati ricevuti consegnati all'ULP
- Tutti i dati locali riconosciuti dal peer
9.2.5. Ricezione di SHUTDOWN ACK
Alla ricezione di SHUTDOWN ACK, un endpoint DEVE (MUST):
1. Inviare chunk SHUTDOWN COMPLETE
2. Interrompere il timer T2-shutdown
3. Segnalare la chiusura dell'associazione all'ULP
4. Distruggere il TCB
Transizione di stato:
SHUTDOWN-SENT -> CLOSED
9.2.6. SHUTDOWN COMPLETE
Formato 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Utilizzo del bit T:
- T=0: Caso normale, utilizzare Tag locale
- T=1: Utilizzare quando si risponde a SHUTDOWN ACK inaspettato
Ricezione di SHUTDOWN COMPLETE:
1. Interrompere il timer T2-shutdown
2. Segnalare la chiusura dell'associazione all'ULP
3. Distruggere il TCB
Transizione di stato:
SHUTDOWN-ACK-SENT -> CLOSED
9.2.7. Timer T2-shutdown
Scopo: Garantire che il processo SHUTDOWN non attenda indefinitamente.
Gestione del timeout:
Se nello stato SHUTDOWN-SENT:
- Ritrasmettere il chunk SHUTDOWN
- Raddoppiare l'RTO
- Riavviare il timer T2-shutdown
Se nello stato SHUTDOWN-ACK-SENT:
- Ritrasmettere il chunk SHUTDOWN ACK
- Raddoppiare l'RTO
- Riavviare il timer T2-shutdown
Se le ritrasmissioni superano Association.Max.Retrans:
- Segnalare l'errore all'ULP
- Distruggere il TCB
9.2.8. Gestione dei dati durante l'arresto
Nello stato SHUTDOWN-PENDING:
- Continuare la trasmissione e la ricezione normali dei dati
- Attendere che tutti i dati non riconosciuti siano riconosciuti
Nello stato SHUTDOWN-SENT:
- Non accettare nuovi dati utente
- Può ricevere dati dal peer
- Inviare SACK per riconoscere i dati ricevuti
Nello stato SHUTDOWN-RECEIVED:
- Non accettare nuovi dati utente
- Continuare la trasmissione dei dati non inviati
- Ricevere e riconoscere i dati dal peer
Nello stato SHUTDOWN-ACK-SENT:
- Non accettare nuovi dati utente
- Non trasmettere nuovi dati
- Ritrasmettere SHUTDOWN ACK in risposta a SHUTDOWN duplicato
9.2.9. Confronto SHUTDOWN vs ABORT
| Caratteristica | SHUTDOWN | ABORT |
|---|---|---|
| Garanzia dati | Tutti i dati inviati riconosciuti | Nessuna garanzia dati |
| Velocità di terminazione | Più lenta (con handshake) | Immediata |
| Pulizia risorse | Pulizia graceful | Pulizia immediata |
| Caso d'uso | Chiusura normale | Errore o emergenza |
| Risposta richiesta | Richiede risposta del peer | Unidirezionale, nessuna risposta |
Riepilogo
SCTP fornisce meccanismi flessibili di terminazione dell'associazione:
- SHUTDOWN: Per chiusura normale, garantisce l'integrità dei dati
- ABORT: Per situazioni eccezionali, terminazione immediata
Best practice:
- Preferire SHUTDOWN per chiusura normale
- Utilizzare ABORT solo per errori o problemi di risorse
- Gestire correttamente i timeout del timer T2-shutdown
- Implementare meccanismi di ritrasmissione appropriati