# SCTP: Stream Control Transmission Protocol

> SCTP (RFC 4960) is a reliable, message-oriented transport designed for signalling. Unlike TCP's single byte stream, it delivers discrete messages over multiple independent streams (avoiding head-of-line blocking) and supports multi-homing — several IP addresses per endpoint for automatic path failover. SIGTRAN uses it to carry SS7 over IP.

- Canonical URL: https://www.broadnet.me/reference/sctp-stream-control-transmission-protocol
- Language: en
- Last updated: 2026-07-18
- Publisher: BroadNet (https://www.broadnet.me)

How SCTP works and why SIGTRAN uses it: message-oriented delivery, multi-streaming to avoid head-of-line blocking, multi-homing for path failover, the chunk-based packet format, and how it differs from TCP.

## Why SCTP instead of TCP

SS7 signalling needs reliable, in-sequence, low-latency delivery with fast failover — requirements TCP meets only partially. TCP is a single byte stream, so one lost segment blocks every later byte until it is retransmitted (head-of-line blocking), and a TCP connection is bound to one IP address pair, so a path failure breaks it. SCTP was designed to fix both: it delivers independent messages over multiple streams and binds an association to multiple addresses for transparent failover. It also resists SYN-flood attacks with a four-way handshake.

*SCTP vs TCP*

| Property | TCP | SCTP |
|---|---|---|
| Data model | Byte stream | Message-oriented (preserves boundaries) |
| Streams | One | Many independent streams per association |
| Head-of-line blocking | Across the whole connection | Confined to one stream |
| Endpoint addressing | Single IP pair | Multi-homed (multiple IPs per endpoint) |
| Handshake | 3-way (SYN-flood exposed) | 4-way with signed cookie |
| Delivery options | Ordered only | Ordered or unordered per message |

## Multi-streaming

An SCTP association carries multiple logical streams, numbered by Stream Identifier. Each stream is independently ordered using a Stream Sequence Number, while a single Transmission Sequence Number (TSN) governs reliable delivery across the whole association. The effect is that loss on one stream does not stall the others — a stuck message for one destination does not block signalling for another. Applications can also send messages unordered when sequencing is not required, cutting latency further.

## Multi-homing and failover

An SCTP endpoint can bind several IP addresses — typically on separate network paths. One address is the primary path; the others are alternates. SCTP continuously monitors each destination address with HEARTBEAT chunks, and if the primary path fails it retransmits on an alternate without tearing down the association. This gives signalling links carrier-grade resilience over IP that a single-homed TCP connection cannot, and it is a headline reason SIGTRAN chose SCTP.

## The chunk-based packet format

An SCTP packet has a 12-byte common header — source and destination ports, a 32-bit Verification Tag that guards the association, and a CRC-32c checksum — followed by one or more chunks. Chunks are self-describing (type, flags, length, value) and several can be bundled into one packet. Control chunks set up and manage the association; DATA chunks carry user messages. This structure lets SCTP acknowledge, heartbeat and carry data efficiently in the same packet.

*SCTP packet structure*

```text
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 types and association setup

An association is established with a four-way handshake — INIT, INIT ACK (carrying a signed state cookie), COOKIE ECHO, COOKIE ACK — which lets the server stay stateless until the cookie is returned, defeating SYN-flood attacks. Data flows in DATA chunks acknowledged by SACK. HEARTBEAT/HEARTBEAT ACK probe idle paths. The association is closed gracefully with SHUTDOWN or abruptly with ABORT.

*Common SCTP chunk types*

| Type | Chunk | Purpose |
|---|---|---|
| 0 | DATA | Carry a user message (TSN, Stream ID, SSN, payload) |
| 1 / 2 | INIT / INIT ACK | Begin association; INIT ACK carries the state cookie |
| 3 | SACK | Selective acknowledgement of received DATA |
| 4 / 5 | HEARTBEAT / HEARTBEAT ACK | Probe reachability of a destination address |
| 6 | ABORT | Abnormal, immediate close of the association |
| 7 / 8 | SHUTDOWN / SHUTDOWN ACK | Graceful close |
| 10 / 11 | COOKIE ECHO / COOKIE ACK | Complete the 4-way handshake |

## Frequently asked questions

### What is the main advantage of SCTP over TCP?

Two things: multi-streaming, so a lost packet on one stream does not block the others (no connection-wide head-of-line blocking), and multi-homing, so an endpoint can use several IP addresses and fail over automatically when a path drops. Both matter greatly for signalling reliability.

### What is SCTP multi-homing?

Multi-homing lets a single SCTP association bind multiple IP addresses per endpoint. One is the primary path and the rest are alternates, monitored by heartbeats. If the primary path fails, SCTP retransmits on an alternate without dropping the association — path redundancy built into the transport.

### What is an SCTP chunk?

A chunk is a self-describing unit inside an SCTP packet, with a type, flags, length and value. DATA chunks carry user messages; control chunks (INIT, SACK, HEARTBEAT, SHUTDOWN and others) manage the association. Multiple chunks can be bundled into one packet.

### Why does SCTP use a four-way handshake?

The extra step lets the responder stay stateless until it receives back a signed state cookie (in COOKIE ECHO). Because no association state is allocated until the cookie returns, SCTP resists SYN-flood-style resource-exhaustion attacks that affect TCP's three-way handshake.

### What is the Verification Tag in SCTP?

A 32-bit value in the common header, exchanged during association setup, that both endpoints must include on every packet. It validates that a packet belongs to the current association, protecting against stale packets and blind injection attacks.

## Sources

- [IETF RFC 4960 — Stream Control Transmission Protocol](https://datatracker.ietf.org/doc/html/rfc4960)
- [IETF RFC 3286 — Introduction to SCTP](https://datatracker.ietf.org/doc/html/rfc3286)

## Related

- [SIGTRAN overview](https://www.broadnet.me/reference/sigtran-overview)
- [M3UA: MTP3-User Adaptation](https://www.broadnet.me/reference/m3ua-mtp3-user-adaptation)
- [SIGTRAN deployment architecture](https://www.broadnet.me/reference/sigtran-deployment-architecture)
- [SS7 vs SIGTRAN](https://www.broadnet.me/reference/ss7-vs-sigtran)
- [Signalling & CDR platform](https://www.broadnet.me/platforms/signaling-cdr)
