SCTP (Stream Control Transmission Protocol): il protocollo di trasporto affidabile e orientato ai messaggi
Questa famiglia di protocolli Internet costituisce la base per la comunicazione di sistemi in reti come Internet. Gli oltre 500 membri di questo gruppo hanno in gran parte ruoli molto diversi, ma ci sono anche protocolli che hanno più o meno la stessa funzione. Per esempio, sia il TCP (Transmission Control Protocol) che l'UDP (User Datagram Protocol) definiscono il modo in cui vengono scambiati i dati tra i partecipanti di una rete. Tuttavia, mentre il TCP richiede una connessione esistente, l'UDP consente il trasferimento di file senza connessione. Con l'SCTP (Stream Control Transmission Protocol), l'IETF (Internet Engineering Task Force) ha pubblicato nel 2000 un altro protocollo che combina le caratteristiche del TCP e dell'UDP.
Che cos'è l’SCTP (Stream Control Transmission Protocol)?
Lo Stream Control Transmission Protocol, in breve SCTP, è un protocollo di rete affidabile della famiglia dei protocolli Internet, sviluppato dal gruppo di lavoro IETF Signaling Transport (SIGTRAN). Una prima versione del protocollo è definita nell'RFC 2960, pubblicato nel 2000. Sette anni dopo, l'IETF ha pubblicato una versione rivista nell'RFC 4960. In questi standard l'SCTP è descritto principalmente come un protocollo utilizzato per le infrastrutture telefoniche nelle reti IP. Tuttavia, viene utilizzato anche in altre aree, ad esempio nel Reliable Server Pooling (gestione di pool di server per il bilanciamento della quantità di dati trasmessa).
L'SCTP (Stream Control Transmission Protocol) è un protocollo di trasporto affidabile della famiglia di protocolli Internet che consente la trasmissione di messaggi di telecomunicazione tramite reti IP. Esso combina diverse caratteristiche dei protocolli TCP (orientato alla connessione) e UDP (non orientato alla connessione), anch'essi utilizzati per il trasferimento dati, e include meccanismi per il controllo di congestione (Congestion Control) e il miglioramento della tolleranza ai guasti durante l'invio di pacchetti. Grazie alla sua elevata flessibilità, l'SCTP è utilizzato anche in altri modi (ad es. nella gestione e nell'amministrazione di pool di server).
Quali caratteristiche contraddistinguono SCTP?
L'SCTP utilizza tipicamente l'IP come base, ma può anche utilizzare qualsiasi altro servizio di trasmissione senza connessione. Il trasporto dei pacchetti è caratterizzato in particolare dalle seguenti caratteristiche:
- trasmissione confermata di dati utente (senza errori e senza duplicati)
- frammentazione dei dati per rispettare la dimensione massima dei pacchetti del rispettivo percorso di rete
- ricezione in sequenza di messaggi utente all'interno di più flussi di dati (multistreaming), compresa l'opzione per specificare l'ordine di questi messaggi
- raggruppamento (facoltativo) di più messaggi utente in un unico pacchetto SCTP (chunk bundling)
- tolleranza agli errori a livello di rete grazie al multihoming (host con più indirizzi di rete validi) di uno o entrambi i partner di comunicazione
Lo Stream Control Transmission Protocol punta pertanto sulla trasmissione sicura e affidabile dei dati. Un rigoroso regolamento della sequenza dei flussi di dati inviati non è necessario, ma in linea di principio è possibile in qualsiasi momento. In questo caso, se l'applicazione mittente lo richiede, la trasmissione dei pacchetti SCTP deve essere eseguita secondo una procedura fissa. I dati inviati, che possono essere suddivisi in più flussi, non sono registrati in byte, ma in pacchetti, il che è particolarmente utile per i servizi orientati ai messaggi.
La sicurezza viene assicurata dal four-way handshake (autenticazione reciproca, compresa la creazione di una connessione) tra il mittente e il destinatario, senza la quale il trasferimento dati tramite SCTP non sarebbe possibile. L'header contiene anche un tag di verifica e un campo opzionale checksum.
Come funzionano le singole caratteristiche del protocollo SCTP
Al fine di illustrare il funzionamento del trasporto dati tramite lo Stream Control Transmission Protocol, esamineremo più in dettaglio le funzioni principali dell’SCTP, dalla four-way handshake alla frammentazione e alla trasmissione dei pacchetti.
Attivazione e shutdown di una connessione SCTP
Come il TCP, anche l'SCTP è soprattutto un protocollo orientato alla connessione che richiede un collegamento esistente tra client e server in modo che questi possano scambiare pacchetti di dati. Per stabilire una tale connessione entrambe le parti eseguono un cosiddetto four-way handshake, che il client inizializza con una richiesta INIT. Il server risponde a questa richiesta con un messaggio INIT-ACK contenente una conferma e un cookie che identifica in modo univoco la connessione proposta. Il client invia nuovamente questo cookie al server, incorporato in una richiesta COOKIE-ECHO, al che il server termina l'attivazione della connessione con un messaggio COOKIE-ACK.
Le connessioni SCTP stabilite possono essere chiuse dall'applicazione o dall'utente non appena la trasmissione è terminata, se non vengono interrotte prematuramente a causa di un errore. Inoltre è possibile interrompere il collegamento in qualsiasi momento tramite una richiesta. In ogni caso il trasferimento di dati viene completamente interrotto non appena un utente si disconnette.
Trasmissione in sequenza in stream (flussi di dati)
Nello standard SCTP il termine stream si riferisce a una sequenza di dati utente che vengono scambiati tra server e client. Una singola connessione SCTP consente un numero indefinito di stream, che viene specificato dall'utente quando stabilisce la connessione. Mentre l'ordine dei dati all'interno di un flusso è rigorosamente rispettato, per la consegna dei vari flussi non esistono una gerarchia fissa e dipendenze. Se dunque ci sono problemi durante il trasferimento di un flusso di dati, ciò non ha alcun effetto sulla trasmissione degli altri flussi. Esiste inoltre un meccanismo che permette di bypassare la trasmissione in sequenza e di inviare pacchetti di messaggi con priorità.
Mentre gli stream SCTP identificano una sequenza di dati utente, uno stream nelle connessioni TCP rappresenta sempre una particolare sequenza di byte.
Frammentazione dei dati utente
L'SCTP offre la possibilità di frammentare i pacchetti per poter rispettare in ogni momento il PMTU (Path Maximum Transmission Unit) determinato, cioè la dimensione massima del pacchetto che può essere trasmessa sul rispettivo percorso di connessione. Al momento della ricezione i singoli frammenti vengono riassemblati e inviati all'utente come messaggio completo. Questa frammentazione a livello di trasporto offre alcuni vantaggi rispetto alla frammentazione eseguita a livello di rete dal protocollo IP: ad esempio riduce il carico di lavoro dei router responsabili della frammentazione dei pacchetti IP. Inoltre viene eliminato il problema dei messaggi completi che devono essere nuovamente inviati a causa della perdita in rete di un singolo frammento.
Conferma del pacchetto e controllo della congestione
Lo Stream Control Tansmission Protocol contrassegna tutti i frammenti di dati o messaggi non frammentati con un cosiddetto Transmission Sequence Number (numero di sequenza di trasmissione). Per ognuno di questi numeri di sequenza il mittente si aspetta un messaggio di conferma dal destinatario. Se questo messaggio non viene ricevuto entro un periodo di tempo specificato, il pacchetto corrispondente viene inviato nuovamente.
Per garantire questa affidabilità di trasmissione indipendentemente dalla trasmissione in sequenza, il destinatario conferma la ricezione di un Transmission Sequence Number anche se ci sono lacune nella sequenza di trasmissione. Per assicurare che la trasmissione non solo sia affidabile, ma anche il più veloce possibile, l'SCTP utilizza algoritmi di controllo della congestione simili a quelli del TCP, che regolano l'invio in modo che non si crei una congestione di pacchetti e, di conseguenza, un sovraccarico dell'host.
Chunk bundling (raggruppamento di più messaggi in un unico pacchetto SCTP)
L'SCTP consente di raggruppare più messaggi in un unico pacchetto. In questo modo è possibile inviare una serie di informazioni di controllo e/o dati utente, chiamate chunk (in italiano pezzo) nello standard SCTP, sotto un'intestazione comune. Il meccanismo di chunk bundling è responsabile sia del raggruppamento che della scomposizione del pacchetto completo sul lato destinatario.
Convalida del pacchetto
Durante l'instaurazione della connessione SCTP i due end point concordano un tag di verifica che deve essere specificato nelle intestazioni dei pacchetti inviati durante l'intero processo di trasmissione. Se uno dei partner di comunicazione riceve un pacchetto senza questo indicatore, il pacchetto corrispondente viene immediatamente rifiutato. In questo modo il protocollo fornisce protezione contro gli accessi non autorizzati e impedisce inoltre che i pacchetti di connessione precedenti continuino ad essere ricevuti.
Per proteggere ulteriormente i dati il mittente ha la possibilità di aggiungere all'intestazione un checksum CRC32C. Il protocollo fornisce un campo opzionale a 32 bit proprio a questo scopo.
Gestione dei percorsi
Dal momento che l'SCTP supporta il multihoming, gli utenti possono specificare un intero insieme di indirizzi di trasporto che possono essere utilizzati come destinazioni potenziali per i pacchetti inviati. Se vengono elencati più indirizzi, il protocollo utilizza di default il percorso dell'indirizzo primario. Se questo non è disponibile, vengono selezionati gli indirizzi alternativi per poter continuare la trasmissione senza interruzioni. Per fornire questo servizio lo Stream Control Transmission Protocol ha implementato una funzione di gestione dei percorsi che utilizza le istruzioni di indirizzo specificate. Questa funzione controlla inoltre la disponibilità di tutti i percorsi di indirizzo indicati, inviandovi regolarmente cosiddetti heartbeat (segnali di controllo).
La gestione dei percorsi e la validazione dei pacchetti sono sempre simultanei.
I vantaggi dello Stream Control Transmission Protocol
Come protocollo del livello di trasporto, l'SCTP compete soprattutto con i già citati protocolli TCP e UDP. Tuttavia, una panoramica delle sue funzioni e proprietà mostra che non sostituisce nessuno dei due protocolli, ma piuttosto li combina. La tabella seguente riassume in quali punti lo Stream Control Transmission Protocol è più simile al protocollo TCP e in quali punti è più simile al protocollo UDP:
Ci sono tre importanti somiglianze tra il TCP e l'SCTP: entrambi i protocolli richiedono una connessione tra le parti in comunicazione, forniscono un meccanismo per il controllo della congestione e rappresentano inoltre soluzioni affidabili; tutti e due assicurano quindi che i pacchetti arrivino al destinatario senza perdite. L'UDP non fornisce tale garanzia a causa della mancanza di messaggi di conferma, tuttavia evita all'applicazione utente di dover impostare i propri marcatori dei dati (per marcare i confini dei pacchetti), poiché non è orientato ai byte ma ai messaggi, un vantaggio offerto anche dall'SCTP.
Oltre a questa flessibilità, che rende l'SCTP la soluzione ideale per i servizi di trasmissione vocale come VoIP (Voice over IP), il protocollo si distingue anche per il supporto del multistreaming e multihoming (tolleranza ai guasti invece di host alternativi), che non offrono né l'UDP né il TCP. Lo Stream Control Transmission Protocol garantisce inoltre, con la four-way handshake (incluso il cookie di autenticazione) e il tag di verifica obbligatorio nell'intestazione di ogni pacchetto inviato, il livello più alto di sicurezza di tutti e tre i protocolli di trasporto.