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?
quelle
Antworten:
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:
Die neuesten Linux-Versionen unterstützen bereits SCTP.
quelle
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.
quelle
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
quelle
SCTP ist nicht sehr bekannt und wird nicht oft verwendet / bereitgestellt, weil:
quelle
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.
quelle
iptables
unterstützt sie einwandfrei . Ich bin allerdings kein Netzwerk-Typ, daher kann ich für den Rest nichts sagen.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
quelle
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."
quelle
SCTP wird häufig im 4G LTE-Netzwerk verwendet, in dem Diameter für AAA verwendet wird.
quelle
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 .
quelle
In Bezug auf alle Kommentare zu kommerziellen Routern, die defekt sind oder keine SCTP-Unterstützung bieten, besteht das Problem darin, dass SCTP mit NAT noch in Entwurfsform mit der IETF vorliegt. Es gibt also keine RFC-Spezifikation für die Implementierung.
https://tools.ietf.org/html/draft-ietf-behave-sctpnat-09
quelle
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.
quelle