← WebRTC Data Channel: SCTP Negotiation Acceleration Protocol
v151 · origin trial · sdp · attribute reference
a=sctp-init
A new SDP media-level attribute that carries a base64-encoded SCTP INIT chunk. When negotiated by both endpoints it lets them skip the SCTP four-way handshake: the association is treated as ESTABLISHED once the DTLS handshake completes. Defined by draft-hancke-tsvwg-snap §4; in origin trial in Chrome 151–156 (see the feature overview).
attribute definition
| Attribute name | sctp-init |
|---|---|
| Type of attribute | media (media-level — appears under the data m= section) |
| Mux category | CAUTION (per RFC 8859 mux-category taxonomy, assigned in draft §4.2) |
| Subject to charset | No |
| Purpose | Allows the SDP to carry the information contained in an SCTP INIT chunk |
| Appropriate values | A base64-encoded value |
| Syntax | sctp-init-value = base64 (base64 as defined in RFC 4566) |
where the attribute is allowed
The attribute is defined only for an m= line whose protocol identifier is UDP/DTLS/SCTP (defined in RFC 8841) with an <fmt> value of webrtc-datachannel (defined in RFC 8832). The draft notes it also covers TCP/DTLS/SCTP, and that usage with any other proto value “needs to be defined in a separate specification”.
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:UgEn
a=ice-pwd:f/+ugRILrIUlAkSmkStnZb/h
a=ice-options:trickle
a=fingerprint:sha-256 6A:15:F0:08:...:2D:7A
a=setup:actpass
a=mid:0
a=sctp-port:5000
a=max-message-size:262144
a=sctp-init:AQAAHols3R0AUAAA/////+B5ZR3AAAAEgAgABoLA
Source: draft-hancke-tsvwg-snap-00 §4.1, §7.
worked decode
The example value above decodes to this SCTP INIT chunk (draft §4.1; chunk layout per RFC 9260 §3.3.2):
| INIT chunk field | Value in the example |
|---|---|
| Type / Chunk Flags / Chunk Length | 1 / 0 / 30 |
| Initiate Tag | 0x896cdd1d |
| Advertised Receiver Window Credit (a_rwnd) | 0x00500000 |
| Outbound / Inbound Streams | 65535 / 65535 |
| Initial TSN | 0xe079651d |
| Optional/variable-length parameters | Forward TSN supported; Supported Extensions = RECONFIG (0x82), FORWARD_TSN (0xc0) |
generation, validation, renegotiation
- Generation (offer §5.2 / answer §5.4): the endpoint MUST have its SCTP implementation generate the serialized INIT chunk it would normally send over the network, base64-encode those bytes, and add the line to the data
m=section. The offerer does this when it has created a WebRTC data channel; the answerer does it when it negotiated a datam=section and detected a valida=sctp-initin the offer. - Validation (§5.3, §5.5): improperly base64-encoded data results in an error; the SCTP implementation then validates the chunk format and a byte string that is not a valid SCTP INIT chunk also results in an error.
- Renegotiation (§5.6): subsequent offers and answers MUST include the attribute with the same value as in the initial negotiation. A remote offer MAY carry a new value only in conjunction with a new SCTP association (RFC 8841 §9.3) or a new DTLS association (RFC 8842 §5.5). Attempting to add
sctp-initto an existing SCTP association results in an error. - Fallback: an endpoint that does not support the extension MUST NOT include the attribute in its answer (§5.4) — negotiation silently degrades to the classic SCTP handshake.
IANA status
Draft §9.1 defines sctp-init as a new SDP media-level attribute (details per §4.2). As of 2026-07-28 the draft is an expired, unadopted individual submission and no IANA registration has been made — the IANA SDP Parameters registry carries no sctp-init entry (checked 2026-07-28). Treat the attribute name as provisional until a working-group draft registers it.
security notes
Exposing the SCTP INIT chunk — in particular the Initiate Tag — in SDP introduces no new security concern per draft §8, because SCTP-over-DTLS protects against the off-path attacks of RFC 9260 §5.3.1. Application-layer code (JavaScript, signaling) that can read or rewrite SDP can add or remove the chunk’s variable-length parameters; per §8, removing one is equivalent to the peer not supporting that parameter, and adding an unsupported one is equivalent to receiving a packet for an unnegotiated feature. See the overview security section for the amplification analysis.
Source: draft-hancke-tsvwg-snap-00 §8.compatibility
| Endpoint | Behavior |
|---|---|
| Chrome 151–156 with origin-trial token | Generates and consumes a=sctp-init per draft §5 |
| Chrome without token / other browsers | Do not generate the attribute; per §5.4 a non-supporting answerer MUST NOT include it — classic SCTP handshake runs |