Perché SCTP non è molto usato / conosciuto


190

Di recente ho controllato il libro "UNIX Network Programming, Vol. 1" di Richards Stevens e ho scoperto che esiste un terzo standard di livello di trasporto oltre a TCP e UDP: SCTP .

Riepilogo: SCTP è un protocollo a livello di trasporto basato su messaggi come UDP, ma affidabile come TCP. Ecco una breve introduzione da IBM DeveloperWorks .

Onestamente, non ho mai sentito parlare di SCTP prima. Non ricordo di averlo letto in nessun libro di rete o di averne sentito parlare durante le lezioni che avevo seguito. Leggere altre domande di StackOver che menzionano SCTP suggerisce che non sono solo con questa mancanza di conoscenza.

Perché SCTP è così sconosciuto? Perché non è molto usato?


4
+1 non ne ho mai sentito parlare - grazie.
Robert Venables,

1
Chiunque si preoccupi di confrontare SCTP con ZeroMQ (oltre a quello è un protocollo, l'altro una libreria - guardali come uno strumento per risolvere i problemi).
Emil Ivanov

Sono solo curioso: cosa c'è di sbagliato / diverso il 3/1/2013? Perché così tanti voti in questo giorno?
dmeister

8
@dmeister: Perché ti ho messo su Reddit . Saluti da Darmstadt.
Janus Troelsen,

32
Per favore, non scrivere il 01/03/2013. È preferibile qualsiasi tipo di "1 marzo 2013", "1-mar-2013", "1 ° marzo '13" .. Basta non scrivere mese e giorno del mese in un modo che può essere frainteso.
Zecc

Risposte:


94

Infatti, SCTP è utilizzato principalmente nell'area delle telecomunicazioni. Tradizionalmente, gli switch di telecomunicazione utilizzano SS7 ( Signaling System n. 7 ) per interconnettere diverse entità nella rete di telecomunicazione. Ad esempio: la base dati abbonati del provider di telecomunicazioni (HLR), con uno switch (MSC), anche l'abbonato è collegato (MSC).

L'area delle telecomunicazioni si sta spostando a velocità più elevate e in un ambiente più raggiungibile. Una di queste modifiche è quella di sostituire il protocollo SS7 con un protocollo basato su IP più elegante, veloce e flessibile.

L'area delle telecomunicazioni è molto conservatrice. La rete SS7 è stata utilizzata qui per decenni. È una rete molto affidabile e chiusa. Ciò significa che un utente normale non ha accesso ad esso.

La rete IP, al contrario, è aperta e non affidabile e le telecomunicazioni non si convertiranno ad essa se non gestirà almeno il carico che gestisce SS7. Ecco perché è stato sviluppato SCTP. Prova:

  • imitare tutti i vantaggi della rete SS7 accumulata nel corso dei decenni.
  • per creare un protocollo orientato alla connessione migliore di TCP in termini di velocità, sicurezza e ridondanza

Le ultime versioni di Linux dispongono già del supporto SCTP.


in particolare dovresti guardare l'output del gruppo di lavoro "SIGTRAN" dell'IETF che ha scritto la mappatura tra SS7 e SCTP.
Alnitak,

22
Probabilmente il motivo principale per cui SCTP non è molto utilizzato su Internet pubblico è che i gateway IPv4 / NAT residenziali devono essere consapevoli di SCTP per supportare le associazioni multiplexing tra più endpoint privati ​​simultanei e host esterni. Cerca SCTP per diventare più utile una volta che la transizione IPv6 inizia a raccogliere più vapore.
James Woodyatt,

@jameswoodyatt ci sono implementazioni di librerie di SCTP su UDP. Risolve alcuni dei problemi con i router di livello consumer.
user7610

1
Questo non risponde affatto alla domanda. La risposta di James contiene più informazioni di quelle effettivamente fornite dalla risposta.
Ken Sharp,

@jameswoodyatt I router di livello consumer con cui ho pasticciato hanno tutti supporto, anche per quelli piuttosto vecchi. Il problema è che non è esposto attraverso l'interfaccia utente normale, quindi devi fare alcune cose orribili al sistema per entrare dove puoi configurarlo. Qualcosa di una svista secondo me.
Perkins,

70

Abbiamo implementato SCTP in diverse applicazioni e abbiamo riscontrato problemi significativi con il supporto SCTP in vari router domestici. Semplicemente non gestiscono correttamente SCTP. Credo che questo sia principalmente un problema di prestazioni (le specifiche del protocollo SCTP richiedono che i checksum vengano ricalcolati per tutti i pacchetti e non solo per le intestazioni).

Come molti altri protocolli promettenti, SCTP è tristemente morto nell'acqua fino a quando D-link e Netgear riparano le loro scatole NAT rotte.


7
Wow, non ero a conoscenza di questa barriera all'ingresso. Hai perfettamente ragione: vedi tools.ietf.org/html/draft-ietf-behave-sctpnat-05 per un modo proposto per aggirare questo problema. Questo è il terzo set di Internet Draft sullo stesso argomento ...
Bwooce,

Sembri piuttosto pessimista, almeno per i router domestici. Supponendo che i router utilizzati negli ambienti di produzione professionali lo supportino, SCTP sembra ancora molto utile. Esistono molti casi d'uso in cui le topologie di rete non escono dai locali del data center, nel qual caso SCTP dovrebbe essere perfetto.
Eugene Beresovsky,

4
@EugeneBeresovksy: Sono passati alcuni anni da quando ho pubblicato quella risposta. La mia impressione è che SCTP non abbia fatto progressi significativi da allora. È ancora usato in alcune applicazioni specializzate in ambienti controllati, ma raramente visto in natura. Windows e Mac OS X non dispongono ancora del supporto SCTP predefinito. La mancanza di familiarità e la fragilità di un protocollo rotto dalla maggior parte dei firewall e delle scatole NAT rendono le persone riluttanti a usarlo.
pehrs,

@pehrs Mi piacerebbe usarlo all'interno di un data center, quindi nessun NAT coinvolto e nessun firewall, tranne quelli integrati nel sistema operativo. In un ambiente server Linux, spero che funzioni. Ma anche usando Windows, ci sono librerie SCTP - e credo senza dover armeggiare con il sistema operativo.
Eugene Beresovsky,

SCTP di solito non è abilitato in Linux a causa della sua mancanza di adozione, ma anche sul mio sistema Ubuntu Precise (vecchio) è disponibile come modulo caricabile. Fornire un'applicazione che desidera utilizzare SCTP ma tornerà a TCP (ad esempio) è un problema simile al dual-stacking, ma più doloroso.
Ken Sharp,

55

SCTP richiede una maggiore progettazione all'interno dell'applicazione per sfruttarla al meglio. Ci sono più opzioni di TCP, l'API simile a Socket è arrivata più tardi ed è giovane. Tuttavia, penso che la maggior parte delle persone che impiegano del tempo per capirlo (e che conoscono le carenze di TCP) lo apprezzino: è un protocollo ben progettato che si basa sui nostri ~ 30 anni di conoscenza di TCP e UDP.

Uno degli aspetti che richiede un pensiero è quello dei flussi. I flussi forniscono (di solito, penso che tu possa disattivarlo) una garanzia d'ordine al loro interno (molto simile a una connessione TCP) ma possono esserci più flussi per connessione SCTP. Se i dati dell'applicazione possono essere inviati su più flussi, si evita il blocco head-of-line in cui il ricevitore muore di fame a causa di un pacchetto smarrito. È possibile avere conversazioni effettivamente diverse sulla stessa connessione senza influire reciprocamente.

Un'altra utile aggiunta è quella del supporto multi-homing: una connessione può avvenire attraverso più interfacce su entrambe le estremità e può far fronte a guasti. Puoi emularlo in TCP, ma a livello di applicazione.

Il battito cardiaco corretto del collegamento, che è la prima cosa che qualsiasi applicazione che utilizza TCP per implementare connessioni non transitorie, è disponibile gratuitamente.

Il mio riepilogo personale di SCTP è che non fa nulla che tu non possa fare diversamente (in TCP o UDP) con un sostanziale supporto applicativo. La cosa che fornisce è la capacità di non dover implementare quel codice (male) da soli.

Cordiali saluti, SCTP è obbligatorio come supportato per Diametro (vedi RADIUS next gen). vedi RFC 3588

   I client di diametro DEVONO supportare TCP o SCTP, mentre agenti e
   i server DEVONO supportare entrambi. Versioni future di questa specifica MAGGIO
   mandato che i client supportano SCTP.

43

SCTP non è molto conosciuto e non utilizzato / distribuito molto perché:

  • Diffuso: non ampiamente integrato negli stack TCP / IP (nel 2013: ancora mancante in modo nativo negli ultimi Mac OSX e Windows)
  • Librerie: pochi collegamenti di alto livello in lingue facili da usare (Dichiarazione di non responsabilità: sono manutentore di pysctp , supporto dello stack facile SCTP per Python)
  • NAT: non attraversa NAT molto bene / affatto (meno dell'1% di router Internet domestici e aziendali fanno NAT su SCTP).
  • Popolarità: nessuna app pubblica lo usa
  • Paradigma di programmazione: è cambiato un po ': è ancora un socket, ma è possibile collegare molti host a molti host (multihoming), il datagramma è ordinato e affidabile, erc ...
  • Complessità: lo stack SCTP è complesso da implementare (a causa di quanto sopra)
  • Concorrenza: il multipath TCP sta arrivando e dovrebbe rispondere alle esigenze / capacità del multihoming in modo che le persone si astengano dall'implementare SCTP, se possibile, aspettando MTCP
  • Nicchia: i riempimenti SCTP necessari sono molto peculiari (datagrammi affidabili ordinati, multistream) e non necessari per molte applicazioni
  • Sicurezza: SCTP elude i controlli di sicurezza (alcuni firewall, la maggior parte degli IDS, tutti i DLP, non appare su netstat tranne CentOS / Redhat / Fedora ...)
  • Capacità di controllo: qualcosa come 3 aziende nel mondo eseguono regolarmente controlli di sicurezza SCTP (Dichiarazione di non responsabilità: lavoro in una di esse)
  • Curva di apprendimento: non molta toolchain per giocare con SCTP (controlla l'eccellente withsctp che si combina bene con netcat o usa socat)
  • Sotto il cofano: utilizzato principalmente nelle telecomunicazioni e ogni volta che invii SMS, inizi a navigare in rete sul tuo cellulare o fai chiamate telefoniche, stai spesso innescando messaggi che scorrono su SCTP (SIGTRAN / SS7 con GSM / UMTS, Diametro con LTE / IMS / RCS, S1AP / X2AP con LTE), quindi in realtà lo usi molto ma non lo sai mai ;-)

14
Ri: "Nicchia / non richiesta da molte applicazioni". I browser Web ne trarrebbero beneficio, vedi HTTP2 e i suoi tentativi di implementare, oltre a TCP, parte di ciò che SCTP offre gratuitamente. La maggior parte delle tecniche di ottimizzazione HTTP (sprite, sharding, inining, concatenazione) verrebbero rese (quasi completamente - le intestazioni dispendiose di HTTP1 rimaste irrisolte) ridondanti da SCTP. lo stesso vale per le applicazioni che dispongono di un pool di connessioni per consentire l'accesso simultaneo a un DB o qualsiasi altro servizio. In altre parole: molte app hanno bisogno di alcune delle funzionalità di SCTP.
Eugene Beresovsky,

4
"Nessuna app pubblica lo usa": non è più vero poiché SCTP è utilizzato da WebRTC. "Sicurezza: SCTP elude i controlli di sicurezza" - questo è più un problema di controlli di "sicurezza". Se evita questi controlli, sarebbe un protocollo meraviglioso per i malware rimanere sotto il radar.
Maciej Piechotka,

14

p1. SCTP mappato direttamente su IPv4 richiede il supporto nei gateway NAT, che non sono mai stati ampiamente implementati ovunque, e senza di esso il tipico gateway NAT consentirà a un solo host privato per indirizzo pubblico di utilizzare SCTP alla volta.

p2. SCTP mappato su UDP / IPv4 consente un numero maggiore di host privati ​​per indirizzo pubblico, ma i mapping UDP nei gateway IPv4 / NAT sono notoriamente difficili da stabilire e mantenere, poiché UDP è un trasporto senza connessione senza alcun stato esplicito per il tracciamento di un NAT .

p3. SCTP mappato direttamente su IPv6 richiede ... beh ... IPv6. Hai provato a distribuire IPv6? In tal caso, hai provato ad acquistare un firewall IPv6? Supporta SCTP? Che ne dici di un bilanciamento del carico? Un acceleratore SSL?

p4. Infine, gran parte di Internet è praticamente vincolata a ciò che può adattarsi attraverso la porta TCP 80 e la porta 443, quindi SCTP di qualsiasi sapore tende a perdere lì. Quindi, vedi sforzi come il gruppo di lavoro MPTCP nell'IETF .


"hai provato ad acquistare un firewall IPv6? Supporta SCTP" - il solito distribuito liberamente iptables li supporta bene . Non sono un ragazzo di rete, quindi non posso dire per il resto.
Ciao Angelo

12

Molti di noi useranno presto SCTP, poiché viene utilizzato dai canali di dati WebRTC per creare un livello affidabile simile a TCP sopra UDP - SCTP su DTLS su UDP: https://tools.ietf.org/html/draft-ietf -rtcweb-data-channel-13 # sezione-6


Hai dimenticato di menzionare che il focus principale di WebRTC è lo streaming audio e video combinato. Non è pensato per essere usato come relay di messaggi. I servizi turn / ice / stun sono un'altra parte della tecnologia WebRTC utilizzata. Ma queste sono tecnologie utilizzate da WebRTC. Tali tecnologie non sono WebRTC.
TamusJRoyce,

6

Leggendo la pagina Wikipedia di SCTP direi che il motivo principale è che SCTP è un protocollo molto giovane (proposto nel 2000) che attualmente non è supportato dai sistemi operativi tradizionali ( Windows , OS X , Linux ).

Se "molto giovane" ti sembra inappropriato, pensa a IPV6 : "nel dicembre 2008, nonostante abbia celebrato il suo decimo anniversario come protocollo Standards Track, IPv6 era solo agli inizi in termini di diffusione generale in tutto il mondo".


3
Secondo l'articolo di Wikipedia a cui ti sei collegato, SCTP è implementato in Linux, Solaris, FreeBSD, HP-UX e altri.
drrlvn,

L'articolo collegato ora dice anche che funziona su OS X e Windows.
dmeister,

3

SCTP è ampiamente utilizzato nella rete 4G LTE in cui il diametro è utilizzato per AAA.


2

Potrebbe non essere ben noto, ma non è inutilizzato. Poco tempo fa ci fu un progetto pubblicato alla IETF circa Utilizzando SCTP come strato di protocollo di trasporto per HTTP .


2
Quando hai detto "non inutilizzato" ho pensato all'utilizzo effettivo del protocollo. Ma poi hai fornito solo un esempio di bozza di documento , che potrebbe potenzialmente portare a un reale utilizzo in futuro.
Kissaki


-1

Sctp è nato troppo tardi e per molte situazioni il TCP è sufficiente.

Inoltre, come so la maggior parte del suo utilizzo è nell'area delle telecomunicazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.