Passa al contenuto principale

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 causaNomeDescrizione
1Invalid Stream IdentifierIdentificatore di stream non valido
2Missing Mandatory ParameterParametro obbligatorio mancante
3Stale Cookie ErrorCookie scaduto
4Out of ResourceRisorse insufficienti
5Unresolvable AddressIndirizzo non risolvibile
6Unrecognized Chunk TypeTipo di chunk non riconosciuto
7Invalid Mandatory ParameterParametro obbligatorio non valido
8Unrecognized ParametersParametri non riconosciuti
9No User DataNessun dato utente
10Cookie Received While Shutting DownCookie ricevuto durante lo shutdown
11Restart with New AddressesRiavvio con nuovi indirizzi
12User Initiated AbortInterruzione avviata dall'utente
13Protocol ViolationViolazione 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

CaratteristicaSHUTDOWNABORT
Garanzia datiTutti i dati inviati riconosciutiNessuna garanzia dati
Velocità di terminazionePiù lenta (con handshake)Immediata
Pulizia risorsePulizia gracefulPulizia immediata
Caso d'usoChiusura normaleErrore o emergenza
Risposta richiestaRichiede risposta del peerUnidirezionale, nessuna risposta

SCTP fornisce meccanismi flessibili di terminazione dell'associazione:

  1. SHUTDOWN: Per chiusura normale, garantisce l'integrità dei dati
  2. 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