Die In­ter­net­pro­to­koll­fa­mi­lie bildet die Grundlage für die Kom­mu­ni­ka­ti­on von Systemen in Netz­wer­ken wie dem Internet. Die über 500 ver­schie­de­nen Mit­glie­der nehmen dabei zwar größ­ten­teils ganz ver­schie­de­ne Rollen ein – es gibt al­ler­dings auch Pro­to­kol­le, die mehr oder weniger die gleiche Funktion haben. So de­fi­nie­ren bei­spiels­wei­se sowohl TCP (Trans­mis­si­on Control Protocol) als auch UDP (User Datagram Protocol), auf welche Art Daten zwischen Netz­werk­teil­neh­mern aus­ge­tauscht werden. Während TCP hierfür al­ler­dings eine be­stehen­de Ver­bin­dung benötigt, er­mög­licht UDP den ver­bin­dungs­lo­sen Transfer von Dateien. Mit SCTP (Stream Control Trans­mis­si­on Protocol) ver­öf­fent­lich­te die IETF (Internet En­gi­nee­ring Task Force) im Jahr 2000 ein weiteres Protokoll, das die Ei­gen­schaf­ten von TCP und UDP kom­bi­niert.

Was ist SCTP (Stream Control Trans­mis­si­on Protocol)?

Das Stream Control Trans­mis­si­on Protocol, kurz SCTP, ist ein zu­ver­läs­si­ges Netz­werk­pro­to­koll der In­ter­net­pro­to­koll­fa­mi­lie, das von der IETF-Ar­beits­grup­pe Signaling Transport (SIGTRAN) entworfen wurde. Eine erste Version des Pro­to­kolls ist in dem 2000 pu­bli­zier­ten RFC 2960 definiert – sieben Jahre später ver­öf­fent­lich­te die IETF in RFC 4960 eine über­ar­bei­te­te Variante. SCTP wird in diesen Standards in erster Linie als ein Protokoll be­schrie­ben, das der Abbildung von Telefonie-In­fra­struk­tur in IP-Netz­wer­ken dient. Darüber hinaus nutzt man es aber auch in anderen Bereichen – bei­spiels­wei­se beim Reliable Server Pooling (Ver­wal­tung von Server-Pools zur Last­ver­tei­lung).

De­fi­ni­ti­on SCTP

SCTP (Stream Control Trans­mis­si­on Protocol) ist ein zu­ver­läs­si­ges Trans­port­pro­to­koll der In­ter­net­pro­to­koll­fa­mi­lie, das die Über­tra­gung von Te­le­kom­mu­ni­ka­ti­ons­nach­rich­ten über IP-Netzwerke er­mög­licht. Es vereint mehrere Merkmale der ebenfalls für den Da­ten­trans­fer zu­stän­di­gen Pro­to­kol­le TCP (ver­bin­dungs­ori­en­tiert) und UDP (ver­bin­dungs­los) und be­inhal­tet unter anderem Me­cha­nis­men zur Über­last­steue­rung (Con­ges­ti­on Control) und zur Ver­bes­se­rung der Feh­ler­to­le­ranz beim Pa­ket­ver­sand. Dank seiner hohen Fle­xi­bi­li­tät kommt SCTP auch in anderen An­wen­dun­gen zum Einsatz (z. B. bei der Ver­wal­tung und Ad­mi­nis­tra­ti­on von Server-Pools).

Welche Ei­gen­schaf­ten zeichnen SCTP aus?

SCTP nutzt ty­pi­scher­wei­se IP als Basis, kann prin­zi­pi­ell aber auch auf jedem anderen ver­bin­dungs­lo­sen Pa­ket­dienst aufsetzen. Der Transport der Pakete zeichnet sich dabei ins­be­son­de­re durch folgende Ei­gen­schaf­ten aus:

  • quit­tier­te Über­tra­gung von Nut­zer­da­ten (feh­ler­frei und ohne Duplikate)
  • Da­ten­frag­men­tie­rung, um die maximale Pa­ket­grö­ße des je­wei­li­gen Netz­werk­pfads einhalten zu können
  • se­quen­zier­te Zu­stel­lung von Be­nut­zer­nach­rich­ten innerhalb mehrerer Da­ten­strö­me (Multi-Streaming) – inklusive der Option, die Rei­hen­fol­ge dieser Nach­rich­ten fest­zu­le­gen
  • Bündelung (optional) mehrerer Be­nut­zer­nach­rich­ten in einem einzelnen SCTP-Paket (Chunk-Bundling)
  • Feh­ler­to­le­ranz auf Netz­wer­kebe­ne dank Multi-Homing (Host mit mehreren gültigen Netz­werk­adres­sen) eines oder beider Kom­mu­ni­ka­ti­ons­part­ner(s)

Das Stream Control Trans­mis­si­on Protocol legt den Fokus also auf eine sichere und zu­ver­läs­si­ge Über­tra­gung der Daten. Eine strikte Re­gu­lie­rung der Rei­hen­fol­ge ver­schick­ter Da­ten­strö­me ist nicht er­for­der­lich, grund­sätz­lich aber jederzeit möglich. Auf diese Weise muss ein fester Ablauf bei der Über­mitt­lung der Pakete mit SCTP lediglich dann ein­ge­hal­ten werden, wenn es die zu­grei­fen­de Ap­pli­ka­ti­on erfordert. Dabei werden die ver­sen­de­ten Daten, die sich in mehrere Ströme aufteilen lassen, nicht byte-, sondern pa­ket­wei­se erfasst – was ins­be­son­de­re für nach­rich­ten­ori­en­tier­te Dienste nützlich ist.

Für die an­ge­spro­che­ne Si­cher­heit sorgt ein Vier-Wege-Handshake (wech­sel­sei­ti­ge Au­then­ti­fi­zie­rung inklusive Ver­bin­dungs­auf­bau) zwischen Sender und Empfänger, ohne den der Da­ten­trans­fer über SCTP nicht möglich ist. Zudem enthält der Header ein Ve­ri­fi­zie­rungs-Tag und ein optional nutzbares Prüf­sum­men-Feld.

So funk­tio­nie­ren die einzelnen Features des SCTP-Pro­to­kolls

Um die Funk­ti­ons­wei­se des Da­ten­trans­ports via Stream Control Trans­mis­si­on Protocol zu ver­deut­li­chen, be­leuch­ten wir die wich­tigs­ten Funk­tio­nen von SCTP genauer – vom Vier-Wege-Handshake über die Frag­men­tie­rung bis hin zur Über­mitt­lung der Pakete.

SCTP-Ver­bin­dungs­auf­bau und -abbau

Wie TCP ist SCTP vor allem auch ein ver­bin­dungs­ori­en­tier­tes Protokoll, das eine be­stehen­de Ver­bin­dung zwischen Client und Server vor­aus­setzt, damit diese Da­ten­pa­ke­te aus­tau­schen können. Um eine solche Ver­bin­dung auf­zu­bau­en, führen beide Seiten einen so­ge­nann­ten Vier-Wege-Handshake durch, den der Client mit einem INIT-Request in­itia­li­siert. Der Server be­ant­wor­tet diese Anfrage mit einer INIT-ACK-Nachricht, die neben der Be­stä­ti­gung ein Cookie enthält, das die vor­ge­schla­ge­ne Ver­bin­dung eindeutig kenn­zeich­net. Dieses Cookie sendet wiederum der Client ein­ge­bun­den in einen COOKIE-ECHO-Request an den Server zurück, woraufhin dieser den Ver­bin­dungs­auf­bau durch eine COOKIE-ACK-Meldung ab­schließt.

Eta­blier­te SCTP-Ver­bin­dun­gen lassen sich entweder durch die Anwendung bzw. den Nutzer schließen, sobald die Über­tra­gung beendet wurde, oder sie werden als Resultat eines Fehlers vorzeitig un­ter­bro­chen. Darüber hinaus ist es auch möglich, die Ver­bin­dung jederzeit per Request zu beenden. In jedem Fall ist der Da­ten­trans­fer komplett gestoppt, sobald ein Teil­neh­mer die Ver­bin­dung trennt.

Se­quen­zier­te Über­tra­gung in Streams (Da­ten­strö­men)

Der Begriff Stream be­zeich­net im SCTP-Standard eine Sequenz von Be­nut­zer­da­ten, die zwischen Server und Client aus­ge­tauscht werden. Eine einzelne SCTP-Ver­bin­dung erlaubt dabei beliebig viele Streams, wobei der Nutzer die genaue Anzahl bei der Eta­blie­rung der Ver­bin­dung spe­zi­fi­zie­ren kann. Während die Rei­hen­fol­ge der Daten innerhalb eines Da­ten­stroms streng ein­ge­hal­ten wird, gibt es bei der Aus­lie­fe­rung der ver­schie­de­nen Streams keine feste Hier­ar­chie und keine Ab­hän­gig­kei­ten. Gibt es also Probleme bei der Über­tra­gung eines Da­ten­stroms, hat dies keinerlei Aus­wir­kung auf den Transfer der anderen Ströme. Außerdem existiert ein Me­cha­nis­mus, über den man die se­quen­zier­te Über­tra­gung umgehen und prio­ri­sier­te Nach­rich­ten­pa­ke­te versenden kann.

Hinweis

Während SCTP-Streams eine Sequenz von Be­nut­zer­da­ten kenn­zeich­nen, steht ein Stream in TCP-Ver­bin­dun­gen immer für eine bestimmte Sequenz von Bytes.

Frag­men­tie­rung der Nut­zer­da­ten

SCTP bietet die Mög­lich­keit, Pakete zu frag­men­tie­ren, um jederzeit die er­mit­tel­te PMTU (Path Maximum Trans­mis­si­on Unit) – also die maximale Pa­ket­grö­ße, die über den je­wei­li­gen Ver­bin­dungs­pfad über­tra­gen werden kann – einhalten zu können. Zum Zeitpunkt des Empfangs werden die einzelnen Fragmente wieder zu­sam­men­ge­setzt und als voll­stän­di­ge Nachricht an den Benutzer wei­ter­ge­lei­tet. Im Vergleich zur Frag­men­tie­rung auf Netz­wer­kebe­ne, die durch das IP-Protokoll durch­ge­führt wird, bietet solch eine Frag­men­tie­rung auf der Trans­port­schicht einige Vorteile: So entlastet sie bei­spiels­wei­se die Router, die für die Frag­men­tie­rung der IP-Pakete ver­ant­wort­lich sind. Zudem entfällt das Problem, dass komplette Nach­rich­ten aufgrund eines einzelnen, im Netzwerk ver­lo­ren­ge­gan­ge­nen Fragments neu ver­schickt werden müssen.

Pa­ket­be­stä­ti­gung und Über­last­steue­rung

Das Stream Control Tans­mis­si­on Protocol kenn­zeich­net alle Da­ten­frag­men­te oder un­frag­men­tier­ten Nach­rich­ten mit einer so­ge­nann­ten Trans­mis­si­on Sequence Number (dt. Über­tra­gungs-Se­quenz­num­mer). Für jede dieser Se­quenz­num­mern erwartet der Sender eine Be­stä­ti­gungs­nach­richt vom Empfänger. Bleibt diese innerhalb eines spe­zi­fi­zier­ten Zeitraums aus, wird das ent­spre­chen­de Paket erneut versendet. Um diese Über­tra­gungs­zu­ver­läs­sig­keit un­ab­hän­gig von der se­quen­zier­ten Über­tra­gung ge­währ­leis­ten zu können, quittiert der Empfänger den Erhalt einer Trans­mis­si­on Sequence Number auch dann, wenn es Lücken in der Über­tra­gungs­se­quenz gibt. Damit die Über­tra­gung nicht nur zu­ver­läs­sig, sondern auch möglichst schnell abläuft, greift SCTP auf ähnliche Con­ges­ti­on-Control-Al­go­rith­men zurück wie TCP. Diese re­gu­lie­ren den Versand, damit es nicht zu einem Stau der Pakete und somit einer Über­las­tung des Hosts kommt.

Chunk-Bundling (Bündelung mehrerer Nach­rich­ten in einem einzelnen SCTP-Paket)

SCTP er­mög­licht, mehrere Nach­rich­ten in einem einzelnen Paket zu bündeln. Auf diese Weise lassen sich mehrere Kon­troll­in­for­ma­tio­nen und/oder Nut­zer­da­ten, die im SCTP-Standard auch als Chunks (dt. Brocken) be­zeich­net werden, unter einem ge­mein­sa­men Header ver­schi­cken. Der Chunk-Bundling-Me­cha­nis­mus ist dabei sowohl für das Zu­sam­men­fü­gen als auch für das Zerlegen des kom­plet­ten Pakets auf Emp­fän­ger­sei­te zuständig.

Paket-Va­li­die­rung

Beim SCTP-Ver­bin­dungs­auf­bau handeln die beiden Endpunkte ein Ve­ri­fi­zie­rungs-Tag aus, das während der gesamten Über­tra­gung in den Headern der ver­schick­ten Pakete angegeben werden muss. Erhält einer der Kom­mu­ni­ka­ti­ons­part­ner ein Paket ohne dieses Kenn­zei­chen, verwirft er das ent­spre­chen­de Paket sofort. Auf diese Weise bietet das Protokoll Schutz gegen Fremd­zu­grif­fe und ver­hin­dert außerdem, dass Pakete vor­he­ri­ger Ver­bin­dun­gen weiterhin empfangen werden.

Um die Daten zu­sätz­lich zu schützen, hat der Sender die Mög­lich­keit, den Header um eine CRC32C-Prüfsumme zu erweitern. Hierfür stellt das Protokoll ein op­tio­na­les 32-Bit-Feld zur Verfügung.

Pfad-Ma­nage­ment

Da SCTP Multi-Homing un­ter­stützt, können Benutzer einen kom­plet­ten Satz an Trans­port­adres­sen angeben, die als po­ten­zi­el­le Ziele für die ver­schick­ten Pakete verwendet werden können. Sind mehrere Adressen ver­zeich­net, greift das Protokoll stan­dard­mä­ßig auf den primären Adress­pfad zurück. Ist dieser nicht er­reich­bar, werden die al­ter­na­ti­ven Adressen an­ge­steu­ert, um die Über­tra­gung ohne Un­ter­bre­chung fort­set­zen zu können. Um diesen Service bieten zu können, hat das Streaming Control Trans­mis­si­on Protocol eine Pfad-Ma­nage­ment-Funktion im­ple­men­tiert, die auf die an­ge­ge­be­nen Adress­an­wei­sun­gen zu­rück­greift. Zudem überwacht sie auch die Er­reich­bar­keit aller de­fi­nier­ten Adress­pfa­de, indem sie re­gel­mä­ßig so­ge­nann­te He­art­beats (Kon­troll­si­gna­le) an diese sendet.

Hinweis

Pfad-Ma­nage­ment und Paket-Va­li­die­rung finden immer gleich­zei­tig statt.

Die Vorteile des Stream Control Trans­mis­si­on Protocols

Als Protokoll der Trans­port­schicht kon­kur­riert SCTP ins­be­son­de­re mit den bereits erwähnten Pro­to­kol­len TCP und UDP. Ein Überblick über die im­ple­men­tier­ten Funk­tio­nen und Ei­gen­schaf­ten von SCTP zeigt jedoch, dass es weder das eine noch das andere Protokoll ersetzt, sondern diese vielmehr mit­ein­an­der kom­bi­niert. In welchen Punkten das Stream Control Trans­mis­si­on Protocol mehr dem TCP-Protokoll und in welchen Punkten mehr dem UDP-Protokoll ähnelt, fasst die folgende Tabelle zusammen:

TCP UDP SCTP
Zu­ver­läs­sig­keit zu­ver­läs­sig nicht zu­ver­läs­sig zu­ver­läs­sig
Ver­bin­dungs­art ver­bin­dungs­ori­en­tiert ver­bin­dungs­los ver­bin­dungs­ori­en­tiert
Über­tra­gungs­art byte­ori­en­tiert nach­rich­ten­ori­en­tiert nach­rich­ten­ori­en­tiert
Über­tra­gungs­rei­hen­fol­ge strikt geordnet un­ge­ord­net teilweise geordnet
Über­last­steue­rung ja nein ja
Feh­ler­to­le­ranz nein nein ja

Drei wichtige Ge­mein­sam­kei­ten zwischen TCP und SCTP lassen sich also fest­ma­chen: Beide Pro­to­kol­le setzen eine Ver­bin­dung zwischen den Kom­mu­ni­ka­ti­ons­part­nern voraus, bieten einen Me­cha­nis­mus zur Über­last­steue­rung und sind darüber hinaus zu­ver­läs­sig – sie tragen also beide Sorge dafür, dass die Pakete ver­lust­frei beim Empfänger ankommen. Eine derartige Garantie liefert UDP aufgrund fehlender Be­stä­ti­gungs­nach­rich­ten nicht. Im Gegenzug erspart UDP der nutzenden Anwendung al­ler­dings das Setzen eigener Da­ten­satz­mar­kie­run­gen (zur Mar­kie­rung von Pa­ket­gren­zen), da es nicht byte- sondern nach­rich­ten­ori­en­tiert ist – ein Vorzug, den SCTP ebenfalls bietet.

Abseits dieser Fle­xi­bi­li­tät, die SCTP zur idealen Lösung für Sprach­über­tra­gungs­diens­te wie VoIP (Voice over IP) macht, punktet das Protokoll auch mit der Un­ter­stüt­zung von Multi-Streaming und Multi-Homing (Feh­ler­to­le­ranz statt al­ter­na­ti­ver Hosts), die weder UDP noch TCP bieten. Zudem sorgt das Stream Control Trans­mis­si­on Protocol mit dem Vier-Wege-Handshake (inklusive Au­then­ti­fi­zie­rungs-Cookie) und dem ver­pflich­ten­den Ve­ri­fi­zie­rungs-Tag im Header jedes ver­schick­ten Pakets für den höchsten Si­cher­heits­kom­fort aller drei Trans­port­pro­to­kol­le.

Zum Hauptmenü