BroadNet
SIGTRANTrasporto

SCTP: Stream Control Transmission Protocol

Aggiornato il 4 min di letturaBasato su standard
Risposta diretta

SCTP (RFC 4960) è un trasporto affidabile e orientato ai messaggi progettato per la segnalazione. A differenza del singolo stream di byte di TCP, consegna messaggi discreti su più stream indipendenti (evitando il head-of-line blocking) e supporta il multi-homing — più indirizzi IP per endpoint per il failover automatico di percorso. SIGTRAN lo usa per trasportare SS7 su IP.

§01

Perché SCTP invece di TCP

La segnalazione SS7 necessita di consegna affidabile, in sequenza e a bassa latenza con failover rapido — requisiti che TCP soddisfa solo parzialmente. TCP è un singolo stream di byte, quindi un segmento perso blocca ogni byte successivo finché non è ritrasmesso (head-of-line blocking), e una connessione TCP è legata a una sola coppia di indirizzi IP, quindi un guasto di percorso la interrompe. SCTP è stato progettato per risolvere entrambi: consegna messaggi indipendenti su più stream e lega un'associazione a più indirizzi per il failover trasparente. Resiste inoltre agli attacchi SYN-flood con un handshake a quattro vie.

SCTP vs TCP
ProprietàTCPSCTP
Modello datiFlusso di byteOrientato ai messaggi (preserva i confini)
StreamOneMolti flussi indipendenti per associazione
Blocco in testa alla filaAttraverso l'intera connessioneConfinato a un solo flusso
Indirizzamento degli endpointCoppia IP singolaMultihomed (indirizzi IP multipli per endpoint)
Handshake3 vie (esposto a SYN flood)4 vie con cookie firmato
Opzioni di consegnaSolo ordinatoOrdinato o non ordinato per messaggio
§02

Multi-streaming

Un'associazione SCTP trasporta più stream logici, numerati da uno Stream Identifier. Ogni stream è ordinato indipendentemente tramite uno Stream Sequence Number, mentre un unico Transmission Sequence Number (TSN) governa la consegna affidabile sull'intera associazione. L'effetto è che una perdita su uno stream non blocca gli altri — un messaggio bloccato per una destinazione non blocca la segnalazione per un'altra. Le applicazioni possono anche inviare messaggi non ordinati quando il sequenziamento non è richiesto, riducendo ulteriormente la latenza.

§03

Multi-homing e failover

Un endpoint SCTP può legare più indirizzi IP — di norma su percorsi di rete distinti. Un indirizzo è il percorso primario; gli altri sono alternativi. SCTP monitora di continuo ogni indirizzo di destinazione con chunk HEARTBEAT e, se il percorso primario si guasta, ritrasmette su uno alternativo senza abbattere l'associazione. Ciò conferisce ai collegamenti di segnalazione una resilienza di livello carrier su IP che una connessione TCP single-homed non può offrire, ed è un motivo di primo piano per cui SIGTRAN ha scelto SCTP.

§04

Il formato dei pacchetti basato su chunk

Un pacchetto SCTP ha un common header di 12 byte — porta di origine e destinazione, un Verification Tag a 32 bit che protegge l'associazione e un checksum CRC-32c — seguito da uno o più chunk. I chunk sono auto-descrittivi (tipo, flag, lunghezza, valore) e diversi possono essere raggruppati in un unico pacchetto. I control chunk instaurano e gestiscono l'associazione; i DATA chunk trasportano i messaggi utente. Questa struttura consente a SCTP di riscontrare, effettuare heartbeat e trasportare dati in modo efficiente nello stesso pacchetto.

Struttura del pacchetto SCTPtext
Common header (12 bytes):
  Source port (2)  Destination port (2)
  Verification Tag (4)   Checksum CRC-32c (4)
Then 1..n chunks, each:
  Type (1)  Flags (1)  Length (2)  Value (variable)
e.g.  [ DATA chunk (TSN, Stream ID, SSN, payload) ] [ SACK chunk ]
§05

Tipi di chunk e instaurazione dell'associazione

Un'associazione è instaurata con un handshake a quattro vie — INIT, INIT ACK (che trasporta un state cookie firmato), COOKIE ECHO, COOKIE ACK — che consente al server di restare stateless finché il cookie non viene restituito, vanificando gli attacchi SYN-flood. I dati fluiscono in DATA chunk riscontrati da SACK. HEARTBEAT/HEARTBEAT ACK sondano i percorsi inattivi. L'associazione è chiusa in modo ordinato con SHUTDOWN o bruscamente con ABORT.

Tipi di chunk SCTP comuni
TipoChunkScopo
0DATATrasporta un messaggio utente (TSN, ID flusso, SSN, payload)
1 / 2INIT / INIT ACKInizio dell'associazione; INIT ACK contiene il cookie di stato
3SACKConferma selettiva dei DATA ricevuti
4 / 5HEARTBEAT / HEARTBEAT ACKVerifica la raggiungibilità di un indirizzo di destinazione
6ABORTChiusura anomala e immediata dell'associazione
7 / 8SHUTDOWN / SHUTDOWN ACKChiusura ordinata
10 / 11COOKIE ECHO / COOKIE ACKCompleta l'handshake a 4 vie
FAQ

Domande frequenti

Qual è il principale vantaggio di SCTP rispetto a TCP?

Due cose: il multi-streaming, così un pacchetto perso su uno stream non blocca gli altri (nessun head-of-line blocking a livello di connessione), e il multi-homing, così un endpoint può usare più indirizzi IP ed effettuare il failover automatico quando un percorso cade. Entrambi contano molto per l'affidabilità della segnalazione.

Che cos'è il multi-homing SCTP?

Il multi-homing consente a una singola associazione SCTP di legare più indirizzi IP per endpoint. Uno è il percorso primario e gli altri sono alternativi, monitorati da heartbeat. Se il percorso primario si guasta, SCTP ritrasmette su uno alternativo senza abbattere l'associazione — ridondanza di percorso integrata nel trasporto.

Che cos'è un chunk SCTP?

Un chunk è un'unità auto-descrittiva all'interno di un pacchetto SCTP, con tipo, flag, lunghezza e valore. I DATA chunk trasportano i messaggi utente; i control chunk (INIT, SACK, HEARTBEAT, SHUTDOWN e altri) gestiscono l'associazione. Più chunk possono essere raggruppati in un unico pacchetto.

Perché SCTP usa un handshake a quattro vie?

Il passaggio aggiuntivo consente al rispondente di restare stateless finché non riceve indietro un state cookie firmato (nel COOKIE ECHO). Poiché nessuno stato di associazione è allocato finché il cookie non torna, SCTP resiste agli attacchi di esaurimento risorse in stile SYN-flood che colpiscono l'handshake a tre vie di TCP.

Che cos'è il Verification Tag in SCTP?

Un valore a 32 bit nel common header, scambiato durante l'instaurazione dell'associazione, che entrambi gli endpoint devono includere in ogni pacchetto. Valida che un pacchetto appartenga all'associazione corrente, proteggendo da pacchetti obsoleti e da attacchi di injection alla cieca.

Riferimenti

Specifiche della fonte

Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.

BNGestito dal team di ingegneri BroadNet·Servizi di messaggistica di livello carrier dal 2003
Mettilo sul filo

Realizzato con un vero binding SMPP e un'API REST.

Richiedi l'accesso di prova con chiavi di test reali: invia prima al tuo numero verificato, poi passa alla produzione in oltre 200 paesi una volta approvata l'identità del mittente e i percorsi.