Stream Control Transmission Protocol (SCTP)
Die Internetprotokollfamilie bildet die Grundlage für die Kommunikation von Systemen in Netzwerken wie dem Internet. Die über 500 verschiedenen Mitglieder nehmen dabei zwar größtenteils ganz verschiedene Rollen ein – es gibt allerdings auch Protokolle, die mehr oder weniger die gleiche Funktion haben. So definieren beispielsweise sowohl TCP (Transmission Control Protocol) als auch UDP (User Datagram Protocol), auf welche Art Daten zwischen Netzwerkteilnehmern ausgetauscht werden. Während TCP hierfür allerdings eine bestehende Verbindung benötigt, ermöglicht UDP den verbindungslosen Transfer von Dateien. Mit SCTP (Stream Control Transmission Protocol) veröffentlichte die IETF (Internet Engineering Task Force) im Jahr 2000 ein weiteres Protokoll, das die Eigenschaften von TCP und UDP kombiniert.
Was ist SCTP (Stream Control Transmission Protocol)?
Das Stream Control Transmission Protocol, kurz SCTP, ist ein zuverlässiges Netzwerkprotokoll der Internetprotokollfamilie, das von der IETF-Arbeitsgruppe Signaling Transport (SIGTRAN) entworfen wurde. Eine erste Version des Protokolls ist in dem 2000 publizierten RFC 2960 definiert – sieben Jahre später veröffentlichte die IETF in RFC 4960 eine überarbeitete Variante. SCTP wird in diesen Standards in erster Linie als ein Protokoll beschrieben, das der Abbildung von Telefonie-Infrastruktur in IP-Netzwerken dient. Darüber hinaus nutzt man es aber auch in anderen Bereichen – beispielsweise beim Reliable Server Pooling (Verwaltung von Server-Pools zur Lastverteilung).
SCTP (Stream Control Transmission Protocol) ist ein zuverlässiges Transportprotokoll der Internetprotokollfamilie, das die Übertragung von Telekommunikationsnachrichten über IP-Netzwerke ermöglicht. Es vereint mehrere Merkmale der ebenfalls für den Datentransfer zuständigen Protokolle TCP (verbindungsorientiert) und UDP (verbindungslos) und beinhaltet unter anderem Mechanismen zur Überlaststeuerung (Congestion Control) und zur Verbesserung der Fehlertoleranz beim Paketversand. Dank seiner hohen Flexibilität kommt SCTP auch in anderen Anwendungen zum Einsatz (z. B. bei der Verwaltung und Administration von Server-Pools).
Welche Eigenschaften zeichnen SCTP aus?
SCTP nutzt typischerweise IP als Basis, kann prinzipiell aber auch auf jedem anderen verbindungslosen Paketdienst aufsetzen. Der Transport der Pakete zeichnet sich dabei insbesondere durch folgende Eigenschaften aus:
- quittierte Übertragung von Nutzerdaten (fehlerfrei und ohne Duplikate)
- Datenfragmentierung, um die maximale Paketgröße des jeweiligen Netzwerkpfads einhalten zu können
- sequenzierte Zustellung von Benutzernachrichten innerhalb mehrerer Datenströme (Multi-Streaming) – inklusive der Option, die Reihenfolge dieser Nachrichten festzulegen
- Bündelung (optional) mehrerer Benutzernachrichten in einem einzelnen SCTP-Paket (Chunk-Bundling)
- Fehlertoleranz auf Netzwerkebene dank Multi-Homing (Host mit mehreren gültigen Netzwerkadressen) eines oder beider Kommunikationspartner(s)
Das Stream Control Transmission Protocol legt den Fokus also auf eine sichere und zuverlässige Übertragung der Daten. Eine strikte Regulierung der Reihenfolge verschickter Datenströme ist nicht erforderlich, grundsätzlich aber jederzeit möglich. Auf diese Weise muss ein fester Ablauf bei der Übermittlung der Pakete mit SCTP lediglich dann eingehalten werden, wenn es die zugreifende Applikation erfordert. Dabei werden die versendeten Daten, die sich in mehrere Ströme aufteilen lassen, nicht byte-, sondern paketweise erfasst – was insbesondere für nachrichtenorientierte Dienste nützlich ist.
Für die angesprochene Sicherheit sorgt ein Vier-Wege-Handshake (wechselseitige Authentifizierung inklusive Verbindungsaufbau) zwischen Sender und Empfänger, ohne den der Datentransfer über SCTP nicht möglich ist. Zudem enthält der Header ein Verifizierungs-Tag und ein optional nutzbares Prüfsummen-Feld.
So funktionieren die einzelnen Features des SCTP-Protokolls
Um die Funktionsweise des Datentransports via Stream Control Transmission Protocol zu verdeutlichen, beleuchten wir die wichtigsten Funktionen von SCTP genauer – vom Vier-Wege-Handshake über die Fragmentierung bis hin zur Übermittlung der Pakete.
SCTP-Verbindungsaufbau und -abbau
Wie TCP ist SCTP vor allem auch ein verbindungsorientiertes Protokoll, das eine bestehende Verbindung zwischen Client und Server voraussetzt, damit diese Datenpakete austauschen können. Um eine solche Verbindung aufzubauen, führen beide Seiten einen sogenannten Vier-Wege-Handshake durch, den der Client mit einem INIT-Request initialisiert. Der Server beantwortet diese Anfrage mit einer INIT-ACK-Nachricht, die neben der Bestätigung ein Cookie enthält, das die vorgeschlagene Verbindung eindeutig kennzeichnet. Dieses Cookie sendet wiederum der Client eingebunden in einen COOKIE-ECHO-Request an den Server zurück, woraufhin dieser den Verbindungsaufbau durch eine COOKIE-ACK-Meldung abschließt.
Etablierte SCTP-Verbindungen lassen sich entweder durch die Anwendung bzw. den Nutzer schließen, sobald die Übertragung beendet wurde, oder sie werden als Resultat eines Fehlers vorzeitig unterbrochen. Darüber hinaus ist es auch möglich, die Verbindung jederzeit per Request zu beenden. In jedem Fall ist der Datentransfer komplett gestoppt, sobald ein Teilnehmer die Verbindung trennt.
Sequenzierte Übertragung in Streams (Datenströmen)
Der Begriff Stream bezeichnet im SCTP-Standard eine Sequenz von Benutzerdaten, die zwischen Server und Client ausgetauscht werden. Eine einzelne SCTP-Verbindung erlaubt dabei beliebig viele Streams, wobei der Nutzer die genaue Anzahl bei der Etablierung der Verbindung spezifizieren kann. Während die Reihenfolge der Daten innerhalb eines Datenstroms streng eingehalten wird, gibt es bei der Auslieferung der verschiedenen Streams keine feste Hierarchie und keine Abhängigkeiten. Gibt es also Probleme bei der Übertragung eines Datenstroms, hat dies keinerlei Auswirkung auf den Transfer der anderen Ströme. Außerdem existiert ein Mechanismus, über den man die sequenzierte Übertragung umgehen und priorisierte Nachrichtenpakete versenden kann.
Während SCTP-Streams eine Sequenz von Benutzerdaten kennzeichnen, steht ein Stream in TCP-Verbindungen immer für eine bestimmte Sequenz von Bytes.
Fragmentierung der Nutzerdaten
SCTP bietet die Möglichkeit, Pakete zu fragmentieren, um jederzeit die ermittelte PMTU (Path Maximum Transmission Unit) – also die maximale Paketgröße, die über den jeweiligen Verbindungspfad übertragen werden kann – einhalten zu können. Zum Zeitpunkt des Empfangs werden die einzelnen Fragmente wieder zusammengesetzt und als vollständige Nachricht an den Benutzer weitergeleitet. Im Vergleich zur Fragmentierung auf Netzwerkebene, die durch das IP-Protokoll durchgeführt wird, bietet solch eine Fragmentierung auf der Transportschicht einige Vorteile: So entlastet sie beispielsweise die Router, die für die Fragmentierung der IP-Pakete verantwortlich sind. Zudem entfällt das Problem, dass komplette Nachrichten aufgrund eines einzelnen, im Netzwerk verlorengegangenen Fragments neu verschickt werden müssen.
Paketbestätigung und Überlaststeuerung
Das Stream Control Tansmission Protocol kennzeichnet alle Datenfragmente oder unfragmentierten Nachrichten mit einer sogenannten Transmission Sequence Number (dt. Übertragungs-Sequenznummer). Für jede dieser Sequenznummern erwartet der Sender eine Bestätigungsnachricht vom Empfänger. Bleibt diese innerhalb eines spezifizierten Zeitraums aus, wird das entsprechende Paket erneut versendet. Um diese Übertragungszuverlässigkeit unabhängig von der sequenzierten Übertragung gewährleisten zu können, quittiert der Empfänger den Erhalt einer Transmission Sequence Number auch dann, wenn es Lücken in der Übertragungssequenz gibt. Damit die Übertragung nicht nur zuverlässig, sondern auch möglichst schnell abläuft, greift SCTP auf ähnliche Congestion-Control-Algorithmen zurück wie TCP. Diese regulieren den Versand, damit es nicht zu einem Stau der Pakete und somit einer Überlastung des Hosts kommt.
Chunk-Bundling (Bündelung mehrerer Nachrichten in einem einzelnen SCTP-Paket)
SCTP ermöglicht, mehrere Nachrichten in einem einzelnen Paket zu bündeln. Auf diese Weise lassen sich mehrere Kontrollinformationen und/oder Nutzerdaten, die im SCTP-Standard auch als Chunks (dt. Brocken) bezeichnet werden, unter einem gemeinsamen Header verschicken. Der Chunk-Bundling-Mechanismus ist dabei sowohl für das Zusammenfügen als auch für das Zerlegen des kompletten Pakets auf Empfängerseite zuständig.
Paket-Validierung
Beim SCTP-Verbindungsaufbau handeln die beiden Endpunkte ein Verifizierungs-Tag aus, das während der gesamten Übertragung in den Headern der verschickten Pakete angegeben werden muss. Erhält einer der Kommunikationspartner ein Paket ohne dieses Kennzeichen, verwirft er das entsprechende Paket sofort. Auf diese Weise bietet das Protokoll Schutz gegen Fremdzugriffe und verhindert außerdem, dass Pakete vorheriger Verbindungen weiterhin empfangen werden.
Um die Daten zusätzlich zu schützen, hat der Sender die Möglichkeit, den Header um eine CRC32C-Prüfsumme zu erweitern. Hierfür stellt das Protokoll ein optionales 32-Bit-Feld zur Verfügung.
Pfad-Management
Da SCTP Multi-Homing unterstützt, können Benutzer einen kompletten Satz an Transportadressen angeben, die als potenzielle Ziele für die verschickten Pakete verwendet werden können. Sind mehrere Adressen verzeichnet, greift das Protokoll standardmäßig auf den primären Adresspfad zurück. Ist dieser nicht erreichbar, werden die alternativen Adressen angesteuert, um die Übertragung ohne Unterbrechung fortsetzen zu können. Um diesen Service bieten zu können, hat das Streaming Control Transmission Protocol eine Pfad-Management-Funktion implementiert, die auf die angegebenen Adressanweisungen zurückgreift. Zudem überwacht sie auch die Erreichbarkeit aller definierten Adresspfade, indem sie regelmäßig sogenannte Heartbeats (Kontrollsignale) an diese sendet.
Pfad-Management und Paket-Validierung finden immer gleichzeitig statt.
Die Vorteile des Stream Control Transmission Protocols
Als Protokoll der Transportschicht konkurriert SCTP insbesondere mit den bereits erwähnten Protokollen TCP und UDP. Ein Überblick über die implementierten Funktionen und Eigenschaften von SCTP zeigt jedoch, dass es weder das eine noch das andere Protokoll ersetzt, sondern diese vielmehr miteinander kombiniert. In welchen Punkten das Stream Control Transmission Protocol mehr dem TCP-Protokoll und in welchen Punkten mehr dem UDP-Protokoll ähnelt, fasst die folgende Tabelle zusammen:
TCP | UDP | SCTP | |
Zuverlässigkeit | zuverlässig | nicht zuverlässig | zuverlässig |
Verbindungsart | verbindungsorientiert | verbindungslos | verbindungsorientiert |
Übertragungsart | byteorientiert | nachrichtenorientiert | nachrichtenorientiert |
Übertragungsreihenfolge | strikt geordnet | ungeordnet | teilweise geordnet |
Überlaststeuerung | ja | nein | ja |
Fehlertoleranz | nein | nein | ja |
Drei wichtige Gemeinsamkeiten zwischen TCP und SCTP lassen sich also festmachen: Beide Protokolle setzen eine Verbindung zwischen den Kommunikationspartnern voraus, bieten einen Mechanismus zur Überlaststeuerung und sind darüber hinaus zuverlässig – sie tragen also beide Sorge dafür, dass die Pakete verlustfrei beim Empfänger ankommen. Eine derartige Garantie liefert UDP aufgrund fehlender Bestätigungsnachrichten nicht. Im Gegenzug erspart UDP der nutzenden Anwendung allerdings das Setzen eigener Datensatzmarkierungen (zur Markierung von Paketgrenzen), da es nicht byte- sondern nachrichtenorientiert ist – ein Vorzug, den SCTP ebenfalls bietet.
Abseits dieser Flexibilität, die SCTP zur idealen Lösung für Sprachübertragungsdienste wie VoIP (Voice over IP) macht, punktet das Protokoll auch mit der Unterstützung von Multi-Streaming und Multi-Homing (Fehlertoleranz statt alternativer Hosts), die weder UDP noch TCP bieten. Zudem sorgt das Stream Control Transmission Protocol mit dem Vier-Wege-Handshake (inklusive Authentifizierungs-Cookie) und dem verpflichtenden Verifizierungs-Tag im Header jedes verschickten Pakets für den höchsten Sicherheitskomfort aller drei Transportprotokolle.