SCTP (RFC 4960) ist ein zuverlässiger, nachrichtenorientierter Transport, der für Signalisierung entworfen wurde. Anders als der einzelne Byte-Stream von TCP stellt es diskrete Nachrichten über mehrere unabhängige Streams zu (vermeidet Head-of-Line-Blocking) und unterstützt Multi-Homing — mehrere IP-Adressen je Endpunkt für automatisches Pfad-Failover. SIGTRAN nutzt es, um SS7 über IP zu tragen.
Warum SCTP statt TCP
SS7-Signalisierung benötigt zuverlässige, reihenfolgetreue, latenzarme Zustellung mit schnellem Failover — Anforderungen, die TCP nur teilweise erfüllt. TCP ist ein einzelner Byte-Stream, sodass ein verlorenes Segment jedes spätere Byte blockiert, bis es neu übertragen wird (Head-of-Line-Blocking), und eine TCP-Verbindung ist an ein IP-Adresspaar gebunden, sodass ein Pfadausfall sie bricht. SCTP wurde entworfen, um beides zu beheben: Es stellt unabhängige Nachrichten über mehrere Streams zu und bindet eine Assoziation an mehrere Adressen für transparentes Failover. Es widersteht zudem SYN-Flood-Angriffen mit einem Vier-Wege-Handshake.
| Eigenschaft | TCP | SCTP |
|---|---|---|
| Datenmodell | Byte-Stream | Nachrichtenorientiert (erhält Nachrichtengrenzen) |
| Streams | Eins | Viele unabhängige Streams pro Assoziation |
| Head-of-Line-Blocking | Über die gesamte Verbindung hinweg | Auf einen Stream beschränkt |
| Endpunktadressierung | Einzelnes IP-Paar | Multi-Homed (mehrere IPs pro Endpunkt) |
| Handshake | 3-Wege-Handshake (SYN-Flood-anfällig) | 4-Wege-Handshake mit signiertem Cookie |
| Zustelloptionen | Nur geordnet | Geordnet oder ungeordnet pro Nachricht |
Multi-Streaming
Eine SCTP-Assoziation trägt mehrere logische Streams, nummeriert über den Stream Identifier. Jeder Stream wird unabhängig über eine Stream Sequence Number geordnet, während eine einzige Transmission Sequence Number (TSN) die zuverlässige Zustellung über die gesamte Assoziation regelt. Der Effekt: Verlust auf einem Stream blockiert die anderen nicht — eine feststeckende Nachricht für ein Ziel blockiert nicht die Signalisierung für ein anderes. Anwendungen können Nachrichten auch ungeordnet senden, wenn keine Sequenzierung nötig ist, was die Latenz weiter senkt.
Multi-Homing und Failover
Ein SCTP-Endpunkt kann mehrere IP-Adressen binden — typischerweise auf getrennten Netzpfaden. Eine Adresse ist der primäre Pfad; die anderen sind Alternativen. SCTP überwacht jede Zieladresse fortlaufend mit HEARTBEAT-Chunks, und fällt der primäre Pfad aus, überträgt es auf einer Alternative neu, ohne die Assoziation abzubauen. Das gibt Signalisierungsverbindungen eine Carrier-Grade-Resilienz über IP, die eine single-homed TCP-Verbindung nicht bietet, und ist ein zentraler Grund, warum SIGTRAN SCTP wählte.
Das Chunk-basierte Paketformat
Ein SCTP-Paket hat einen 12-Byte-Common-Header — Quell- und Zielport, ein 32-Bit-Verification-Tag, das die Assoziation schützt, und eine CRC-32c-Prüfsumme —, gefolgt von einem oder mehreren Chunks. Chunks sind selbstbeschreibend (Type, Flags, Length, Value), und mehrere können in einem Paket gebündelt werden. Kontroll-Chunks bauen die Assoziation auf und verwalten sie; DATA-Chunks tragen Nutzernachrichten. Diese Struktur lässt SCTP im selben Paket effizient bestätigen, Heartbeats senden und Daten tragen.
Common header (12 bytes):
Source port (2) Destination port (2)
Verification Tag (4) Checksum CRC-32c (4)
Then 1..n chunks, each:
Type (1) Flags (1) Length (2) Value (variable)
e.g. [ DATA chunk (TSN, Stream ID, SSN, payload) ] [ SACK chunk ]Chunk-Typen und Assoziationsaufbau
Eine Assoziation wird mit einem Vier-Wege-Handshake aufgebaut — INIT, INIT ACK (mit einem signierten State Cookie), COOKIE ECHO, COOKIE ACK —, wodurch der Server zustandslos bleiben kann, bis das Cookie zurückgegeben wird, was SYN-Flood-Angriffe abwehrt. Daten fließen in DATA-Chunks, bestätigt durch SACK. HEARTBEAT/HEARTBEAT ACK sondieren untätige Pfade. Die Assoziation wird geordnet mit SHUTDOWN oder abrupt mit ABORT geschlossen.
| Typ | Chunk | Zweck |
|---|---|---|
| 0 | DATA | Überträgt eine Benutzernachricht (TSN, Stream-ID, SSN, Nutzdaten) |
| 1 / 2 | INIT / INIT ACK | Assoziation beginnen; INIT ACK enthält den Status-Cookie |
| 3 | SACK | Selektive Bestätigung empfangener DATA-Chunks |
| 4 / 5 | HEARTBEAT / HEARTBEAT ACK | Erreichbarkeit einer Zieladresse testen |
| 6 | ABORT | Abnormaler, sofortiger Abbau der Assoziation |
| 7 / 8 | SHUTDOWN / SHUTDOWN ACK | Geordneter Verbindungsabbau |
| 10 / 11 | COOKIE ECHO / COOKIE ACK | Schließt den 4-Wege-Handshake ab |
Häufig gestellte Fragen
Was ist der Hauptvorteil von SCTP gegenüber TCP?
Zwei Dinge: Multi-Streaming, sodass ein verlorenes Paket auf einem Stream die anderen nicht blockiert (kein verbindungsweites Head-of-Line-Blocking), und Multi-Homing, sodass ein Endpunkt mehrere IP-Adressen nutzen und automatisch failovern kann, wenn ein Pfad ausfällt. Beides ist für die Signalisierungszuverlässigkeit sehr wichtig.
Was ist SCTP-Multi-Homing?
Multi-Homing lässt eine einzelne SCTP-Assoziation mehrere IP-Adressen je Endpunkt binden. Eine ist der primäre Pfad und die übrigen sind Alternativen, überwacht durch Heartbeats. Fällt der primäre Pfad aus, überträgt SCTP auf einer Alternative neu, ohne die Assoziation zu verwerfen — im Transport eingebaute Pfadredundanz.
Was ist ein SCTP-Chunk?
Ein Chunk ist eine selbstbeschreibende Einheit innerhalb eines SCTP-Pakets, mit Type, Flags, Length und Value. DATA-Chunks tragen Nutzernachrichten; Kontroll-Chunks (INIT, SACK, HEARTBEAT, SHUTDOWN und andere) verwalten die Assoziation. Mehrere Chunks können in einem Paket gebündelt werden.
Warum nutzt SCTP einen Vier-Wege-Handshake?
Der zusätzliche Schritt lässt den Antwortenden zustandslos bleiben, bis er ein signiertes State Cookie (in COOKIE ECHO) zurückerhält. Da kein Assoziationszustand belegt wird, bis das Cookie zurückkehrt, widersteht SCTP SYN-Flood-artigen Ressourcenerschöpfungsangriffen, die den Drei-Wege-Handshake von TCP betreffen.
Was ist das Verification Tag in SCTP?
Ein 32-Bit-Wert im Common Header, ausgetauscht beim Assoziationsaufbau, den beide Endpunkte in jedem Paket enthalten müssen. Es bestätigt, dass ein Paket zur aktuellen Assoziation gehört, und schützt vor veralteten Paketen und blinden Injektionsangriffen.
Quellenspezifikationen
Diese Seite basiert auf den veröffentlichten Standards. (Wird in einem neuen Tab geöffnet.)