Warum wird SCTP nicht oft verwendet / ist bekannt?


190

Ich habe kürzlich das Buch "UNIX Network Programming, Vol. 1" von Richards Stevens gelesen und festgestellt, dass es neben TCP und UDP einen dritten Standard für die Transportschicht gibt: SCTP .

Zusammenfassung: SCTP ist ein Protokoll auf Transportebene, das wie UDP nachrichtengesteuert, aber wie TCP zuverlässig ist. Hier ist eine kurze Einführung von IBM DeveloperWorks .

Ehrlich gesagt habe ich noch nie von SCTP gehört. Ich kann mich nicht erinnern, in Netzwerkbüchern darüber gelesen oder in Kursen, die ich besucht hatte, davon gehört zu haben. Das Lesen anderer Stackoverflow-Fragen , in denen SCTP erwähnt wird, deutet darauf hin, dass ich mit diesem Mangel an Wissen nicht allein bin.

Warum ist SCTP so unbekannt? Warum wird es nicht viel benutzt?


4
+1 hat noch nie davon gehört - danke.
Robert Venables

1
Jeder möchte SCTP mit ZeroMQ vergleichen (außerdem ist eines ein Protokoll, das andere eine Bibliothek - betrachten Sie sie als Werkzeug zur Lösung von Problemen).
Emil Ivanov

Ich bin nur neugierig: Was ist falsch / anders am 01.03.2013? Warum so viele Stimmen an diesem einen Tag?
Meister

8
@dmeister: Weil ich dich auf Reddit gesetzt habe . Grüße aus Darmstadt.
Janus Troelsen

32
Bitte schreiben Sie nicht 01.03.2013. Jeder von "1. März 2013", "1. März 2013", "1. März '13" ist vorzuziehen. Schreiben Sie Monat und Tag des Monats nur nicht so, dass sie falsch interpretiert werden können.
Zecc

Antworten:


94

In der Tat wird SCTP hauptsächlich im Telekommunikationsbereich verwendet. Traditionell verwenden Telekommunikations-Switches SS7 ( Signalisierungssystem Nr. 7 ), um verschiedene Einheiten im Telekommunikationsnetzwerk miteinander zu verbinden. Beispiel: In der Teilnehmerdatenbank (HLR) des Telekommunikationsanbieters mit einem Switch (MSC) ist auch der Teilnehmer verbunden (MSC).

Der Telekommunikationsbereich bewegt sich zu höheren Geschwindigkeiten und einer besser erreichbaren Umgebung. Eine dieser Änderungen besteht darin, das SS7-Protokoll durch ein eleganteres, schnelleres und flexibleres IP-basiertes Protokoll zu ersetzen.

Der Telekommunikationsbereich ist sehr konservativ. Das SS7-Netzwerk wird hier seit Jahrzehnten genutzt. Es ist ein sehr zuverlässiges und geschlossenes Netzwerk. Dies bedeutet, dass ein normaler Benutzer keinen Zugriff darauf hat.

Im Gegensatz dazu ist das IP-Netzwerk offen und nicht zuverlässig, und die Telekommunikation wird nicht in dieses Netzwerk konvertiert, wenn es nicht mindestens die von SS7 bewältigte Last bewältigt. Aus diesem Grund wurde SCTP entwickelt. Es versucht:

  • alle im Laufe der Jahrzehnte angesammelten Vorteile des SS7-Netzwerks nachzuahmen.
  • um ein verbindungsorientiertes Protokoll zu erstellen, das in Bezug auf Geschwindigkeit, Sicherheit und Redundanz besser als TCP ist

Die neuesten Linux-Versionen unterstützen bereits SCTP.


Insbesondere sollten Sie sich die Ausgabe der IETF-Arbeitsgruppe "SIGTRAN" ansehen, die die Zuordnung zwischen SS7 und SCTP erstellt hat.
Alnitak

22
Wahrscheinlich ist der Hauptgrund dafür, dass SCTP im öffentlichen Internet nicht häufig verwendet wird, dass IPv4 / NAT-Gateways für Privathaushalte SCTP-fähig werden müssen, um Multiplexing-Zuordnungen zwischen mehreren gleichzeitigen privaten Endpunkten und externen Hosts zu unterstützen. Suchen Sie nach SCTP, um nützlicher zu werden, sobald der IPv6-Übergang mehr Dampf aufnimmt.
James Woodyatt

@jameswoodyatt gibt es Bibliotheksimplementierungen von SCTP über UDP. Es löst einige Probleme mit Routern für Endverbraucher.
user7610

1
Dies beantwortet die Frage überhaupt nicht. James 'Antwort enthält mehr Informationen als die Antwort tatsächlich.
Ken Sharp

@jameswoodyatt Die Consumer-Router, mit denen ich mich angelegt habe, unterstützen alle, auch einige ziemlich alte. Das Problem ist, dass es nicht über die reguläre Benutzeroberfläche verfügbar gemacht wird. Sie müssen also einige schreckliche Dinge mit dem System tun, um dorthin zu gelangen, wo Sie es konfigurieren können. Meiner Meinung nach ein Versehen.
Perkins

70

Wir haben SCTP jetzt in mehreren Anwendungen bereitgestellt und sind auf ein erhebliches Problem mit der SCTP-Unterstützung in verschiedenen Heimroutern gestoßen. Sie behandeln SCTP einfach nicht richtig. Ich glaube, dies ist in erster Linie ein Leistungsproblem (die SCTP-Protokollspezifikation erfordert Prüfsummen für die Neuberechnung der gesamten Pakete und nicht nur für Header).

Wie viele andere vielversprechende Protokolle ist SCTP leider tot im Wasser, bis D-Link und Netgear ihre kaputten NAT-Boxen reparieren.


7
Wow, ich war mir dieser Eintrittsbarriere nicht bewusst. Sie haben völlig Recht - einen umfassenden Vorschlag finden Sie unter tools.ietf.org/html/draft-ietf-behave-sctpnat-05 . Dies ist der 3. Satz von Internet-Entwürfen zum gleichen Thema ...
Bwooce

Sie klingen ziemlich pessimistisch - zumindest für Heimrouter. Unter der Annahme, dass Router, die in professionellen Produktionsumgebungen verwendet werden, dies unterstützen, sieht SCTP immer noch sehr nützlich aus. Es gibt viele Anwendungsfälle, in denen Netzwerktopologien die Räumlichkeiten des Rechenzentrums nicht verlassen. In diesem Fall sollte SCTP perfekt sein.
Eugene Beresovsky

4
@ EugeneBeresovksy: Es ist ein paar Jahre her, seit ich diese Antwort gepostet habe. Mein Eindruck ist, dass SCTP seitdem keine nennenswerten Fortschritte gemacht hat. Es wird immer noch in einigen speziellen Anwendungen in kontrollierten Umgebungen verwendet, aber in freier Wildbahn selten gesehen. Windows und Mac OS X bieten standardmäßig keine SCTP-Unterstützung. Der Mangel an Vertrautheit und die Sprödigkeit eines Protokolls, das von den meisten Firewalls und NAT-Boxen gebrochen wird, lässt die Leute es nur ungern verwenden.
Pehrs

@pehrs Ich möchte es in einem Rechenzentrum verwenden, also keine NATs und keine Firewalls, außer den im Betriebssystem integrierten. In einer Linux-Serverumgebung hoffe ich, dass es einfach funktioniert. Aber auch unter Windows gibt es SCTP-Bibliotheken - und ich glaube, ohne am Betriebssystem basteln zu müssen.
Eugene Beresovsky

SCTP ist unter Linux normalerweise nicht aktiviert, da es nicht übernommen wird, aber selbst auf meinem Ubuntu Precise (alten) System ist es als ladbares Modul verfügbar. Das Bereitstellen einer Anwendung, die SCTP verwenden möchte, aber beispielsweise auf TCP zurückgreift, ist ein Problem, das dem Dual-Stacking ähnelt, jedoch schmerzhafter ist.
Ken Sharp

55

SCTP erfordert mehr Design innerhalb der Anwendung, um es optimal nutzen zu können. Es gibt mehr Optionen als TCP, die Sockets-ähnliche API wurde später eingeführt und ist noch jung. Ich denke jedoch, dass die meisten Leute, die sich die Zeit nehmen, um es zu verstehen (und die die Mängel von TCP kennen), es zu schätzen wissen - es ist ein gut konzipiertes Protokoll, das auf unserem ~ 30-jährigen Wissen über TCP und UDP aufbaut.

Einer der Aspekte, die einige Überlegungen erfordern, sind Streams. Streams bieten (normalerweise können Sie sie deaktivieren) eine Bestellgarantie (ähnlich wie bei einer TCP-Verbindung), es können jedoch mehrere Streams pro SCTP-Verbindung vorhanden sein. Wenn die Daten Ihrer Anwendung über mehrere Streams gesendet werden können, vermeiden Sie Head-of-Line-Blockierungen, bei denen der Empfänger aufgrund eines verlegten Pakets verhungert. Über dieselbe Verbindung können effektiv unterschiedliche Gespräche geführt werden, ohne sich gegenseitig zu beeinflussen.

Eine weitere nützliche Ergänzung ist die Multi-Homing-Unterstützung: Eine Verbindung kann über mehrere Schnittstellen an beiden Enden erfolgen und Fehler bewältigen. Sie können dies in TCP emulieren, jedoch auf Anwendungsebene.

Der richtige Link-Heartbeat, der das erste ist, was jede Anwendung, die TCP für nicht transiente Verbindungen verwendet, implementiert, ist kostenlos.

Meine persönliche Zusammenfassung von SCTP ist, dass es nichts tut, was Sie nicht anders machen könnten (in TCP oder UDP), mit umfassender Anwendungsunterstützung. Das, was es bietet, ist die Fähigkeit, diesen Code nicht (schlecht) selbst implementieren zu müssen.

Zu Ihrer Information, SCTP wird als für Durchmesser unterstützt vorgeschrieben (siehe RADIUS next gen). siehe RFC 3588

   Durchmesser-Clients MÜSSEN entweder TCP oder SCTP unterstützen, während Agenten und
   Server MÜSSEN beide unterstützen. Zukünftige Versionen dieser Spezifikation können
   Mandat, dass Clients SCTP unterstützen.

43

SCTP ist nicht sehr bekannt und wird nicht oft verwendet / bereitgestellt, weil:

  • Weit verbreitet: Nicht weit verbreitet in TCP / IP-Stacks integriert (2013: fehlt nativ in den neuesten Versionen von Mac OSX und Windows)
  • Bibliotheken: Nur wenige Bindungen auf hoher Ebene in benutzerfreundlichen Sprachen (Haftungsausschluss: Ich bin ein Betreuer von pysctp , SCTP Easy Stack-Unterstützung für Python).
  • NAT: Überkreuzt NAT nicht sehr gut / überhaupt nicht (weniger als 1% der Internet-Heim- und Unternehmensrouter verwenden NAT über SCTP).
  • Popularität: Keine allgemeine öffentliche App verwendet es
  • Programmierparadigma: Es hat sich ein wenig geändert: Es ist immer noch ein Socket, aber Sie können viele Hosts mit vielen Hosts verbinden (Multihoming), Datagramm ist geordnet und zuverlässig, erc ...
  • Komplexität: Die Implementierung des SCTP-Stacks ist komplex (aus den oben genannten Gründen).
  • Wettbewerb: Multipath TCP kommt und sollte auf Multihoming-Anforderungen / -Fähigkeiten eingehen, damit die Leute SCTP nach Möglichkeit nicht implementieren und auf MTCP warten
  • Nische: Benötigt SCTP-Füllungen sind sehr eigenartig (bestellte zuverlässige Datagramme, Multistream) und werden von vielen Anwendungen nicht benötigt
  • Sicherheit: SCTP entzieht sich Sicherheitskontrollen (einige Firewalls, die meisten IDSes, alle DLPs werden nur mit CentOS / Redhat / Fedora auf netstat angezeigt ...)
  • Prüfungsfähigkeit: Etwa drei Unternehmen auf der Welt führen routinemäßig Prüfungen der SCTP-Sicherheit durch (Haftungsausschluss: Ich arbeite in einem von ihnen).
  • Lernkurve: Nicht viel Toolchain zum Spielen mit SCTP (überprüfen Sie das hervorragende withsctp , das sich gut mit netcat kombinieren lässt, oder verwenden Sie socat).
  • Unter der Haube: Wird hauptsächlich in der Telekommunikation verwendet und jedes Mal, wenn Sie SMS senden, auf Ihrem Handy im Internet surfen oder telefonieren, lösen Sie häufig Nachrichten aus, die über SCTP fließen (SIGTRAN / SS7 mit GSM / UMTS, Durchmesser mit LTE / IMS) / RCS, S1AP / X2AP mit LTE), also benutzt du es tatsächlich oft, aber du weißt nie davon ;-)

14
Betreff: "Nische / wird von vielen Anwendungen nicht benötigt". Webbrowser würden davon profitieren, siehe HTTP2 und seine Versuche, zusätzlich zu TCP einige der kostenlosen SCTP- Angebote zu implementieren. Die meisten HTTP-Optimierungstechniken (Spriting, Sharding, Inlining, Verkettung) würden durch SCTP redundant gemacht (fast vollständig - die verschwenderischen Header von HTTP1 bleiben ungelöst). Gleiches gilt für Anwendungen mit einem Verbindungspool, um den gleichzeitigen Zugriff auf eine Datenbank oder einen anderen Dienst zu ermöglichen. Mit anderen Worten: Viele Apps benötigen dringend einige der Funktionen von SCTP.
Eugene Beresovsky

4
"Keine allgemeine öffentliche App verwendet es": Nicht mehr wahr, da SCTP von WebRTC verwendet wird. "Sicherheit: SCTP entzieht sich Sicherheitskontrollen" - das ist eher ein Problem der Sicherheitskontrollen. Wenn diese Überprüfungen vermieden werden, wäre es ein wunderbares Protokoll, wenn Malware unter dem Radar bleibt.
Maciej Piechotka

14

p1. SCTP, das direkt über IPv4 zugeordnet ist, erfordert Unterstützung in NAT-Gateways, die noch nie in großem Umfang bereitgestellt wurden. Ohne dieses IPTP-Gateway kann nur ein privater Host pro öffentlicher Adresse SCTP gleichzeitig verwenden.

p2. SCTP, das über UDP / IPv4 zugeordnet ist, ermöglicht mehr private Hosts pro öffentlicher Adresse, aber UDP-Zuordnungen in IPv4 / NAT-Gateways sind bekanntermaßen schwierig einzurichten und aufrechtzuerhalten, da UDP ein verbindungsloser Transport ohne expliziten Status für die Verfolgung durch ein NAT ist .

p3. SCTP, das direkt über IPv6 zugeordnet ist, erfordert ... nun ... IPv6. Haben Sie versucht, IPv6 bereitzustellen? Wenn ja, haben Sie versucht, eine IPv6-Firewall zu kaufen? Unterstützt es SCTP? Wie wäre es mit einem Load Balancer? Ein SSL-Beschleuniger?

p4. Schließlich ist ein Großteil des Internets ziemlich auf das beschränkt, was über TCP-Port 80 und Port 443 passen kann, so dass SCTP jeglicher Art dort tendenziell verliert. Daher sehen Sie Bemühungen wie die MPTCP- Arbeitsgruppe in der IETF.


"Haben Sie versucht, eine IPv6-Firewall zu kaufen? Unterstützt sie SCTP?" - die übliche frei verteilte iptables unterstützt sie einwandfrei . Ich bin allerdings kein Netzwerk-Typ, daher kann ich für den Rest nichts sagen.
Hi-Angel

12

Viele von uns werden SCTP bald verwenden, da es von WebRTC-Datenkanälen verwendet wird, um eine TCP-ähnliche zuverlässige Schicht über UDP zu erstellen - SCTP über DTLS über UDP: https://tools.ietf.org/html/draft-ietf -rtcweb-data-channel-13 # section-6


Ich habe vergessen zu erwähnen, dass der Hauptfokus von WebRTC auf dem kombinierten Video- und Audio-Streaming liegt. Es ist nicht als Nachrichtenrelais gedacht. Turn / Ice / Stun-Dienste sind ein weiterer Teil der Technologie, auf der WebRTC ausgeführt wird. Dies sind jedoch Technologien, die WebRTC verwendet. Diese Technologien sind nicht WebRTC.
TamusJRoyce

6

Beim Lesen der Wikipedia-Seite zu SCTP würde ich sagen, dass der Hauptgrund darin besteht, dass SCTP ein sehr junges Protokoll (vorgeschlagen im Jahr 2000) ist, das derzeit von den Mainstream-Betriebssystemen ( Windows , OS X , Linux ) nicht unterstützt wird.

Wenn Ihnen "sehr jung" unangemessen erscheint, denken Sie an IPV6 : "Im Dezember 2008 steckte IPv6 trotz seines 10-jährigen Jubiläums als Standard-Track-Protokoll im Hinblick auf die allgemeine weltweite Bereitstellung erst in den Kinderschuhen."


3
Laut dem Wikipedia-Artikel, auf den Sie verlinkt haben, ist SCTP unter Linux, Solaris, FreeBSD, HP-UX und anderen implementiert.
drrlvn

Der verlinkte Artikel sagt jetzt auch, dass es unter OS X und Windows läuft.
Meister

3

SCTP wird häufig im 4G LTE-Netzwerk verwendet, in dem Diameter für AAA verwendet wird.


2

Es ist vielleicht nicht bekannt, aber es ist nicht unbenutzt. Erst vor kurzem gab es einen Entwurf in der veröffentlichten IETF über SCTP Verwendung als Layer Protocol Transport für HTTP .


2
Als Sie "nicht unbenutzt" sagten, dachte ich an die tatsächliche Verwendung des Protokolls. Dann haben Sie jedoch nur ein Beispiel für einen Dokumententwurf angegeben , der möglicherweise in Zukunft zu einer tatsächlichen Verwendung führen wird.
Kissaki


-1

Sctp wird zu spät geboren und für viele Situationen reicht TCP aus.

Wie ich weiß, wird der größte Teil seiner Nutzung im Telekommunikationsbereich durchgeführt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.