1. Introduzione
Lo Stream Control Transmission Protocol (SCTP) è un protocollo di trasporto affidabile e orientato ai messaggi, progettato originariamente per trasportare messaggi di segnalazione della rete telefonica pubblica a commutazione di circuito (PSTN) su reti IP, ma applicabile ad applicazioni più ampie. Questo capitolo presenta la motivazione, l'architettura, i termini chiave, le abbreviazioni e le funzioni principali dell'SCTP.
1.1. Motivazione
I protocolmi di trasporto tradizionali (TCP e UDP) presentano limiti in alcuni scenari:
- TCP è orientato al flusso, con un ordine globale rigoroso, e non è adatto alla consegna indipendente di più flussi logici.
- UDP non garantisce né affidabilità né ordine, e non fornisce controllo della congestione.
- La segnalazione PSTN richiede una rete affidabile, multi-flusso, tollerante ai guasti e resistente agli attacchi.
L'SCTP soddisfa questi bisogni offrendo un trasporto affidabile orientato ai messaggi con multi-flusso, multi-homing e controllo della congestione.
1.2. Panoramica architetturale dell'SCTP
L'SCTP si colloca nello stack di protocolli tra il livello di rete (IP) e il livello applicativo. Utilizza un'associazione (connessione logica) tra due endpoint, ciascuno dei quali può possedere più indirizzi IP (multi-homing). I dati sono suddivisi in chunk trasportati nei pacchetti SCTP.
1.3. Termini chiave
- Associazione (Association) : relazione logica tra due endpoint SCTP, può utilizzare più indirizzi.
- Chunk : unità di dati o di controllo dell'SCTP, trasportata in un pacchetto SCTP.
- Flusso (Stream) : canale logico bidirezionale all'interno di un'associazione, identificato da uno Stream Identifier.
- TSN (Transmission Sequence Number) : numero di sequenza assegnato a ogni chunk DATA.
- VTag / Verification Tag : valore a 32 bit che identifica un'associazione, incluso in ogni pacchetto.
- Multi-homing : capacità di un'associazione di utilizzare più indirizzi IP per endpoint.
1.4. Abbreviazioni
| Abbreviazione | Significato |
|---|---|
| SCTP | Stream Control Transmission Protocol |
| TSN | Transmission Sequence Number |
| TCB | Transmission Control Block |
| ULP | Upper Layer Protocol |
| MTU | Maximum Transmission Unit |
| SACK | Selective ACKnowledgement |
| a_rwnd | Advertised Receiver Window |
| PMTU | Path MTU |
| RTO | Retransmission Timeout |
| RTT | Round-Trip Time |
| HMAC | Hash-based Message Authentication Code |
| CRC | Cyclic Redundancy Check |
| TCB per-association | Transmission Control Block per associazione |
1.5. Panoramica funzionale dell'SCTP
1.5.1. Avvio e chiusura dell'associazione
Un'associazione è stabilita tramite un handshake a quattro vie (INIT, INIT ACK, COOKIE ECHO, COOKIE ACK), quindi chiusa tramite SHUTDOWN / SHUTDOWN ACK / SHUTDOWN COMPLETE, o abbandonata tramite ABORT.
1.5.2. Consegna ordinata all'interno dei flussi
Ogni flusso possiede il proprio numero di sequenza. La consegna ordinata può essere attivata o disattivata per flusso, consentendo un ordine indipendente tra flussi.
1.5.3. Frammentazione dei dati utente
I messaggi utente troppo grandi per l'MTU del percorso sono frammentati in più chunk DATA e riassemblati alla ricezione.
1.5.4. Acknowledgement e avoidance della congestione
L'SCTP utilizza il SACK per confermare la ricezione e il controllo della congestione per limitare il rate in funzione della capacità di rete.
1.5.5. Raggruppamento dei chunk
Più chunk possono essere raggruppati in un singolo pacchetto SCTP per ridurre l'overhead.
1.5.6. Convalida dei pacchetti
Ogni pacchetto include un verification tag e un checksum CRC32c per scartare i pacchetti falsificati o errati.
1.5.7. Gestione dei percorsi
Il multi-homing consente di disporre di più percorsi; l'SCTP ne monitora la raggiungibilità tramite heartbeat e commuta in caso di guasto.
1.6. Aritmetica dei numeri di sequenza
I numeri di sequenza (TSN, numeri di flusso, RTO, ecc.) utilizzano un'aritmetica modulo 2^32 o 2^16 secondo il campo. I confronti rispettano le regole dell'aritmetica circolare in complemento a due.
1.7. Modifiche rispetto alla RFC 2960
La RFC 4960 rende obsoleti la RFC 2960 e la RFC 3309. Chiarisce alcuni punti implementativi, rafforza la sicurezza (cookie, verification tag) e corregge ambiguità senza modificare i principi fondamentali del protocollo.
Sintesi
L'SCTP è un protocollo di trasporto affidabile orientato ai messaggi che offre multi-flusso, multi-homing, frammentazione, controllo della congestione e resistenza agli attacchi. Colma le lacune di TCP e UDP per le applicazioni che richiedono una consegna affidabile e tollerante ai guasti.