The Stream Control Transmission Protocol (SCTP) has a simpler basic packet structure than TCP. Each consists of two basic sections:
All SCTP packets require the common header section (shown with a blue background).
Each SCTP packet consists, in addition to the common header, of chunks. Each chunk has a common format, but the contents can vary. The green bytes in the diagram above signify one chunk.
If the chunk length does not equate to a multiple of 4 bytes, then the protocol implicitly pads the chunk with trailing zeros.
Additionally, each chunk type may define a set of parameters which it includes inside the chunk value field (and, consequently, their length in the chunk length).
Two types of parameter exist:
For optional/variable-length parameters, the parameter type, parameter length, and parameter value fields all behave just like their chunk counterparts. The minimum size of parameter is 4 bytes, and this occurs when the parameter value field is empty and the parameter consists only of the type and length fields.
RFC 2960 defines the following list of chunk types. More detailed information about each type is provided in the following subsections.
Following this table each chunk and its parameters are defined. Please note the following color scheme:
The INIT ACK chunk replicates the INIT chunk except the chunk type is always 2.
Not defined yet.
At most two re-configuration parameters from those mentioned below may appear in this chunk. Not all combinations are valid, see RFC 6525 for details.
This parameter is used by a sender to inform the receiver that it wishes to reset the sequence numbers (or message-ids if I-DATA is used) for its outgoing streams.
This parameter is used by a sender to request that the receiver resets the sequence numbers (or message-ids if I-DATA is used) for its outgoing streams.
This parameter is used by a sender to inform the receiver that it wishes to reset all TSNs and all SSNs/MIDs for all streams.
This parameter is used as a response to a re-configuration request, except possibly for an incoming SSN reset request, which elicits an outgoing SSN reset request parameter if granted.
This parameter is used by a sender to request that additional outgoing streams be added to the association (i.e. incoming streams for the receiver).
This parameter is used by a sender to request that additional incoming streams be added to the association (i.e. outgoing streams for the receiver).
The PAD chunk was introduced to facilitate path MTU discovery,[7] by enabling a sender to arbitrarily increase the size of an SCTP packet.
The I-DATA chunk was introduced to avoid a large message in one stream blocking messages in all other streams from being transmitted: SCTP primarily uses the TSN to achieve reliability. In some cases, the TSN is also needed to distinguish different DATA chunks.[8] When a message is fragmented, the DATA TSN additionally doubles as a fragment sequence number. This means that all fragments in a message must be sent using consecutive TSNs, effectively blocking all other data. The I-DATA chunk disentangles the different uses of the TSN in DATA chunks.
As DATA and I-DATA chunks are not compatible, they may not both be used in the same association.
The FORWARD-TSN chunk was introduced to support selective unreliability: it allows the sender to tell the receiver that it will not retransmit some number of chunks, and requests that the receiver consider all these chunks as received.
The I-FORWARD-TSN chunk was introduced to be used instead of FORWARD-TSN when I-DATA is used instead of DATA.