SCTP (Signalling Transport) in LTE 4G
Why S1AP/X2AP run over SCTP — associations, streams, multihoming and heartbeats.
Every control-plane message on the LTE core-network-facing interfaces — S1AP between the eNB and the MME, X2AP between neighbouring eNBs — rides on SCTP, not TCP or UDP. Think of SCTP as "TCP rebuilt for signalling": reliable and connection-oriented, but message-oriented, split into independent streams so one stalled message never blocks the rest, and multi-homed so a single failed IP path does not drop the link. It is defined in RFC 4960, with the LTE S1 transport usage in TS 36.412 and the X2 usage in TS 36.422.
Introduction
SCTP (Stream Control Transmission Protocol) is the transport that carries LTE control-plane signalling between network nodes. It is not a radio protocol and the UE never speaks it directly — it lives entirely inside the fixed network, underneath the application protocols that eNBs, MMEs and other eNBs use to talk to each other. Wherever two LTE nodes exchange procedural signalling over IP, an SCTP association sits beneath it doing the reliable delivery.
You meet SCTP the moment an eNB is brought into service: before it can serve a single UE it opens an SCTP association to the MME and runs the S1 Setup procedure over it. From then on, every per-UE procedure that touches the core — attach, service request, bearer setup, handover, paging — travels as S1AP PDUs inside that association. Inter-eNB handover signalling rides a second kind of association, X2AP. If the association drops, the interface is down and no UE on that eNB can be served, which is exactly why the transport is engineered for resilience.
It matters because the LTE control plane makes demands that ordinary internet transports cannot meet at once: thousands of independent per-UE procedures must be reliable, must preserve message boundaries, must not block one another, and must survive a transport link failure without dropping every UE. SCTP was designed by the IETF SIGTRAN group to carry exactly this kind of telephony signalling, and 3GPP adopted it wholesale.
On this page
Why Signalling Uses SCTP, Not TCP or UDP
In plain words: imagine a courier road between two buildings that must deliver every letter reliably. TCP is a single-lane road: one broken-down truck blocks every letter queued behind it, and if the road washes out there is no other route. UDP is a fleet of motorbikes that ride fast but lose letters and never confirm delivery. SCTP is a multi-lane private road with several independent lanes (so one stall blocks only its own lane), delivery receipts on every letter, and a second bridge kept ready so a washed-out road reroutes traffic instead of stopping it.
The control plane of LTE is a stream of short, independent request/response messages — attach, bearer setup, handover, paging — that must arrive reliably and in the right order relative to each other, but must not get in each other's way. TCP and UDP each fail one half of that requirement. UDP gives no reliability, no ordering and no congestion control at all: perfect for a media stream, useless for signalling that cannot afford to silently lose a Handover Request. TCP is reliable but is a single ordered byte-stream: one lost segment blocks everything queued behind it (head-of-line blocking), it hides message boundaries, and a TCP connection is bolted to one IP address pair, so a single link failure kills it. SCTP was designed by the IETF SIGTRAN group precisely to carry telephony signalling, and it fixes both problems at once.
A transport-layer protocol (a peer of TCP and UDP, IP protocol number 132) that provides a reliable, message-oriented connection called an association between two endpoints, each of which may own several IP addresses.
LTE signalling needs reliability and resilience at once: thousands of per-UE procedures must not head-of-line-block one another, message boundaries must be preserved, and a lost transport path must not tear the link down. TCP gives none of that cleanly; UDP gives none of it at all; SCTP gives all of it.
A four-way handshake (INIT → INIT-ACK → COOKIE-ECHO → COOKIE-ACK) opens the association; streams carry independent message flows; multi-homing spans several IP paths; HEARTBEAT chunks watch each path. Application PDUs (S1AP, X2AP) travel inside DATA chunks tagged with a stream number and a Payload Protocol Identifier (PPID).
Where it sits: on the S1-MME interface, S1AP PDUs are the payload of SCTP DATA chunks between the eNB and the MME (TS 36.412). The same pattern holds on X2: X2AP rides SCTP between two eNBs (TS 36.422). One SCTP association per interface instance carries that interface's application protocol; SCTP in turn runs directly on IP.
The Association and Its Four-Way Handshake
An SCTP connection is called an association, and the word is chosen deliberately: it is not a single socket pinned to one address pair the way a TCP connection is, but a relationship between two endpoints, each of which may be reachable at several IP addresses. The association is reliable and connection-oriented — it is explicitly set up, maintained with acknowledgements, and explicitly torn down — but everything about how it is opened is hardened against abuse.
SCTP opens with a four-way handshake, one step more than TCP's three-way, specifically to resist SYN-flood-style attacks using a stateless cookie:
INIT— the initiator (say the eNB) proposes itsInitiate Tag, its receive window (a_rwnd), the number of outbound and inboundstreamsit wants, and the list of IP addresses it can be reached at.INIT-ACK— the responder (the MME) answers with its ownInitiate Tag, stream counts and address list, and aState Cookiethat encodes all the state needed to build the association. Crucially it allocates no association state yet and keeps no memory of the request.COOKIE-ECHO— the initiator echoes the cookie straight back, proving that its source address is genuine and reachable (it received theINIT-ACK).COOKIE-ACK— the responder validates the cookie, only now creates the association, and the association enters theESTABLISHEDstate.
Because the responder holds no state until a valid cookie returns, a flood of spoofed INITs cannot exhaust its memory — the defence is built into the protocol, unlike TCP where SYN cookies are a retrofitted work-around. The Verification Tag exchanged in the handshake is then stamped into every subsequent packet, so an off-path attacker cannot inject packets into an existing association without knowing the tag.
Who initiates: on S1, the eNB is normally the client that opens the association toward the MME; on X2 either eNB may initiate. Whichever side sends INIT, the same anti-flood cookie mechanism protects the responder, which is exactly the side (the MME, or a busy eNB) you most want to protect.
Messages, Chunks, TSN and Bundling
TCP delivers a shapeless stream of bytes: it neither knows nor cares where one application message ends and the next begins, so the receiver must add its own framing — length prefixes or delimiters — to recover message boundaries. SCTP is message-oriented — it preserves boundaries. When the eNB hands one complete S1AP PDU to SCTP, the MME's SCTP layer delivers exactly that one PDU up to its S1AP layer, whole and intact. For a protocol like S1AP that is defined entirely in terms of discrete PDUs (an Initial UE Message, an Initial Context Setup Request, a Handover Request), that is exactly the interface you want, and the application never re-implements framing on top of the transport.
Under the hood, an SCTP packet is a common header followed by one or more chunks. Chunks are the unit of everything SCTP does, and the important ones for LTE signalling are:
DATA— carries one application PDU (or a fragment of a large one). EachDATAchunk carries a Transmission Sequence Number (TSN), a Stream Identifier (SID), a Stream Sequence Number (SSN), and thePPIDnaming the application protocol inside.SACK— the Selective Acknowledgement, which reports the cumulativeTSNreceived plus any gaps, so the sender retransmits only what was actually lost rather than everything after a loss.HEARTBEAT/HEARTBEAT-ACK— probe and confirm that an idle path is still alive, and measure its round-trip time.INIT/INIT-ACK/COOKIE-ECHO/COOKIE-ACKfor setup, andSHUTDOWN/SHUTDOWN-ACK/SHUTDOWN-COMPLETE/ABORTfor teardown.
The common SCTP header itself is compact: a 16-bit source port, a 16-bit destination port, the 32-bit Verification Tag that binds the packet to its association, and a 32-bit checksum (CRC32c in RFC 4960, replacing the weaker Adler-32 of the original RFC 2960). Each chunk then carries its own type, flags and length, which is what lets several chunks be bundled behind one common header. The header adds 12 bytes; a DATA chunk adds a further 16-byte fixed part (type/flags/length, TSN, stream id, SSN, PPID) ahead of the S1AP payload.
The TSN is the association-wide reliability counter: every DATA chunk gets one, and SACKs are expressed in terms of it, so reliability is tracked across the whole association independently of which stream a message used. Reliability (via TSN/SACK) and ordering (via stream + SSN) are therefore decoupled — a subtle but central design point that streams exploit.
Two efficiency features fall out of the chunk design. Bundling lets several small chunks — for example a couple of short S1AP PDUs plus a SACK — travel in one IP packet, cutting per-packet overhead during signalling bursts. Fragmentation splits an application PDU larger than the path MTU across several DATA chunks that SCTP reassembles before delivery, so S1AP never has to worry about MTU.
Finally, SCTP offers ordered and unordered delivery per message. Ordered DATA uses the stream's SSN so PDUs on that stream arrive in send order; an unordered DATA chunk (the U-bit set) is delivered as soon as it arrives, still reliably, but with no ordering constraint. LTE signalling relies overwhelmingly on ordered delivery within a stream, because the sequence of PDUs in a single procedure is meaningful.
Mental model: TCP hands you a hose of bytes and you cut it into messages yourself; SCTP hands you the messages already cut, each stamped with a TSN for reliability and a stream number for ordering. Reliability and ordering are separate dials, not one.
Streams — Killing Head-of-Line Blocking
An SCTP association is subdivided into multiple streams, negotiated at setup (the Number of Outbound/Inbound Streams carried in INIT/INIT-ACK). Ordered delivery is guaranteed within a stream — each stream has its own SSN — but the streams are independent of one another. So if one message is lost and awaiting retransmission, only its stream stalls at the receiver; messages on the other streams keep being delivered upward. This is what "no head-of-line blocking across streams" means.
The stream identifier is a 16-bit field, so an association could in principle carry up to 65,536 streams in each direction; the two sides each propose a count in INIT/INIT-ACK and the negotiated number is the minimum of what each offered. In practice an S1 association is dimensioned with enough streams to keep per-UE procedures from colliding — a handful to a few tens, depending on the vendor and the expected UE load per eNB.
This matters directly for LTE. TCP is one ordered byte-stream, so a single dropped segment blocks everything behind it — one UE's stalled message would delay every unrelated UE sharing the connection. With SCTP the eNB spreads traffic across streams. The convention on S1AP and X2AP is to reserve stream 0 for non-UE-associated signalling (interface management such as setup and configuration updates) and to distribute UE-associated procedures across the remaining streams, so different UEs never head-of-line-block each other. Ordering is only promised within a stream — which is exactly what a single per-UE procedure needs, no more and no less.
Note that a stream is a delivery-ordering construct, not a reliability construct: a lost chunk is still retransmitted reliably regardless of stream, because reliability rides on the association-wide TSN. The stream only decides whether a correctly received later message must wait behind an earlier missing one. Confining that wait to a single stream is the whole point.
Stream 0 convention: in S1AP and X2AP, non-UE-associated messages (e.g. S1 SETUP REQUEST, X2 SETUP REQUEST, eNB CONFIGURATION UPDATE) use stream 0; UE-associated messages are spread over the other streams, with all PDUs of one UE-associated procedure kept on the same stream to preserve their order. This keeps global procedures and per-UE procedures from interfering.
Multi-Homing, Heartbeats and Failover
A single SCTP endpoint can advertise several IP addresses (listed in the address parameters of INIT/INIT-ACK). The association then spans all combinations of those addresses. One address pair is the primary path that normally carries new data; the others are backups. SCTP continuously probes idle paths with HEARTBEAT chunks and tracks an error counter per path. If a path's retransmissions or unanswered heartbeats exceed Path.Max.Retrans, that path is marked inactive; if the primary path fails, traffic fails over to a working alternate address without tearing the association down and without any renegotiation.
For a carrier network this is essential. An eNB and an MME are typically dual-homed across separate transport links, routers or subnets, so a single physical failure triggers a fast failover rather than a signalling outage that would drop every UE on that eNB. TCP has no equivalent: a TCP connection is bound to one address pair and dies with it, and recovery means detecting the dead connection (often via a long timeout) and rebuilding it from scratch, losing all in-flight state.
Heartbeats do double duty. Beyond failure detection, the HEARTBEAT/HEARTBEAT-ACK exchange measures each path's RTT so that when failover happens, the backup is already characterised and known to be alive — the association does not fail over onto a dead path. Association-level keep-alive also means a quiet association (no signalling for a while) is not mistaken for a broken one.
Redundancy, not load-sharing: standard SCTP uses alternate paths as hot standby — new data goes on the primary until it fails, while the backup is kept warm by heartbeats. Retransmissions may be sent on an alternate path to improve the odds of getting through, but the mechanism exists for resilience, not for spreading load across both paths.
An Association with Streams and Two Paths
The structural picture below shows a single eNB–MME association: two endpoints, each owning two IP addresses; several streams multiplexed inside the one association carrying S1AP PDUs; a primary IP path carrying data; and a secondary IP path kept warm by heartbeats for multi-homing.
And the sequence view below shows how that association is opened and used: the four-way handshake, then DATA chunks on distinct streams, then a heartbeat keeping the backup path alive.
Interfaces, PPIDs and Feature Mapping
Inside every DATA chunk sits a 32-bit Payload Protocol Identifier (PPID). SCTP itself never looks at it — it is an opaque tag passed transparently to the peer's application layer — but it names which application protocol the payload belongs to. This lets a receiver and any diagnostic tool identify the protocol without inspecting the payload, and lets one host distinguish protocols cleanly. IANA assigns these values, and 3GPP registers one per application protocol: S1AP uses PPID 18 and X2AP uses PPID 27.
| Interface | Endpoints | Application protocol | SCTP PPID | 3GPP spec |
|---|---|---|---|---|
| S1-MME | eNB ↔ MME | S1AP | 18 | TS 36.412 (transport), TS 36.413 (S1AP) |
| X2 | eNB ↔ eNB | X2AP | 27 | TS 36.422 (transport), TS 36.423 (X2AP) |
Note the clean separation of concerns. The interface (S1-MME vs X2) determines which two network functions are talking; the application protocol (S1AP vs X2AP) defines the PDUs and procedures; the PPID tags each PDU so the payload is self-describing; and SCTP underneath is the same reliable, multi-streamed, multi-homed transport in both cases. The S1-U user-plane interface, by contrast, carries GTP-U over UDP — reliability there is neither needed nor wanted for real-time bearer traffic — which is exactly why SCTP is reserved for the control plane.
PPID vs SID: do not confuse the two numbers stamped in a DATA chunk. The PPID (18 or 27) says what protocol the payload is; the Stream Identifier (0, 3, 7…) says which ordering context it belongs to. Both travel in the same chunk header alongside the TSN.
LTE ↔ NR: 5G keeps SCTP unchanged as the control-plane transport — same associations, streams, multi-homing and four-way handshake — and simply adds more interfaces on top of it. NGAP on N2 (gNB ↔ AMF, TS 38.412/38.413) uses PPID 60, XnAP on Xn (gNB ↔ gNB, TS 38.422/38.423) uses PPID 61, and the split-gNB interfaces add F1AP (PPID 62, TS 38.472) and E1AP (PPID 64, TS 38.462). The concepts you learn here transfer one-for-one; only the interface names, application protocols and PPID values change.
Finally, each SCTP feature exists to solve a concrete problem the LTE control plane would otherwise face. Put side by side:
| SCTP feature | Benefit for LTE signalling |
|---|---|
Reliable, connection-oriented association | Every S1AP/X2AP PDU is delivered without loss and acknowledged (via SACK on the association-wide TSN) — no signalling message silently disappears. |
Multiple streams | Per-UE procedures run on separate streams, so one UE's lost/retransmitted message never head-of-line-blocks other UEs; stream 0 carries non-UE-associated signalling. |
| Message-oriented delivery | Message boundaries are preserved, so S1AP receives whole PDUs and needs no framing of its own on top of the transport. |
| Ordered vs unordered per message | Ordering is guaranteed within a stream via the SSN exactly where a procedure needs it, decoupled from reliability, without imposing global ordering across all UEs. |
Multi-homing | Several IP addresses per endpoint give path redundancy — a link/router failure triggers fast failover instead of a signalling outage. |
HEARTBEAT path monitoring | Idle backup paths are probed and RTT measured, so failover targets a path already known to be alive. |
Four-way handshake with State Cookie | Responder allocates no state until the cookie returns, making the interface inherently resistant to INIT-flood (SYN-flood-style) attacks. |
| Chunk bundling & fragmentation | Small PDUs and SACKs share one packet during bursts; oversized PDUs are split and reassembled below S1AP, hiding MTU concerns. |
⚠ Common pitfalls / gotchas
- Confusing PPID with stream id. The
PPID(18/27) names the protocol; the Stream Identifier names the ordering context. Both sit in the sameDATAchunk and are easy to mix up when reading a capture. - Assuming multi-homing means load-balancing. Standard SCTP uses the alternate path as hot standby, not for splitting traffic. Data stays on the primary until it fails; the backup only carries heartbeats (and possibly retransmissions).
- Putting a whole procedure across different streams. Ordering is guaranteed only within one stream. All PDUs of a single UE-associated procedure must stay on the same stream, or they can arrive out of order relative to each other.
- Mismatched stream counts. The negotiated number of streams is the minimum each side offered in
INIT/INIT-ACK. Configuring more streams on the eNB than the MME accepts silently caps you at the lower number. - Firewalls that only know TCP/UDP. SCTP is IP protocol 132; middleboxes or ACLs that pass only TCP/UDP will drop the association entirely, which looks like a dead interface rather than a filtering problem.
Summary
SCTP is the reliable transport under the LTE control plane: S1AP on S1-MME (PPID 18) and X2AP on X2 (PPID 27) both ride SCTP associations, while the user plane deliberately uses GTP-U over UDP instead. Remember it as "TCP built for signalling" — reliable and connection-oriented, but with three additions TCP cannot give: it is message-oriented (S1AP PDU boundaries are preserved), it splits an association into independent streams (so one lost message blocks only its own stream, not every UE), and it is multi-homed (several IP addresses per endpoint, with fast failover to a heartbeat-probed backup path). Reliability rides the association-wide TSN and SACK; ordering rides the per-stream SSN; the two are separate dials. The four-way handshake with a stateless State Cookie hardens the responder against INIT-flood attacks. If you carry one picture away, make it Figure 1: one association, several streams, two IP paths — reliability, no head-of-line blocking, and resilience, all at once.
Quick Q&A
Q. Why do S1AP and X2AP run over SCTP instead of TCP or UDP?
A. UDP is unreliable and unordered, and TCP is a single ordered byte-stream tied to one address pair. SCTP gives reliability plus two things TCP cannot: streams, which confine head-of-line blocking so one UE's lost message does not delay others, and multi-homing, which lets an endpoint use several IP addresses with fast path failover. It is also message-oriented, so S1AP/X2AP PDU boundaries are preserved.
Q. Why does SCTP use a four-way handshake instead of TCP's three-way?
A. The extra step carries a stateless State Cookie. The responder allocates no association state until the initiator echoes the cookie back in COOKIE-ECHO, which proves the source address is genuine and makes SCTP inherently resistant to INIT-flood (SYN-flood-style) attacks.
Q. How are streams used on an S1AP association, and how is that different from ordering and reliability?
A. Stream 0 is reserved for non-UE-associated signalling such as S1 SETUP REQUEST; UE-associated procedures are spread across the remaining streams. Ordering is guaranteed only within a stream (via the SSN), while reliability is tracked association-wide via the TSN and SACK. So a loss on one stream delays only that stream, but it is still retransmitted reliably regardless of stream.
Q. What is the PPID and what are its values for S1AP and X2AP?
A. The Payload Protocol Identifier is a 32-bit tag inside each DATA chunk that names the application protocol in the payload. SCTP passes it transparently; it is 18 for S1AP and 27 for X2AP. It is distinct from the Stream Identifier, which selects the ordering context.
Q. What does multi-homing give an eNB–MME link that TCP cannot?
A. Each endpoint advertises several IP addresses, so the association spans multiple paths with one as primary and others as heartbeat-probed backups. A link or router failure fails over to a live path without tearing the association down. A TCP connection is bound to one address pair and must be rebuilt from scratch after a path failure.
Q. How does SCTP carry a large S1AP PDU and a burst of small ones efficiently?
A. A PDU larger than the path MTU is fragmented across several DATA chunks and reassembled below S1AP; several small chunks (and a SACK) are bundled into one IP packet. Both are transparent to S1AP.
Where to go next
See the application protocols that ride on these associations, and where they sit in the network.