SCTP is a reliable transport protocol operating on top of a connection-less packet network i.e. IP and offers the following services to its users:
- acknowledged error-free non-duplicated transfer of user data,
- data fragmentation to conform to discovered path MTU size,
- sequenced delivery of user messages within multiple streams, with an option for order-of-arrival delivery of individual user messages,
- optional bundling of multiple user messages into a single SCTP packet, and
- network-level fault tolerance through supporting of multi-homing at either or both ends of an association.
Packet Structure
SCTP has a simpler basic packet structure which consists of two basic sections:
- common header, which occupies the first 12 bytes.
- Data chunks, which form the remaining portion of the packet.
Common Header
Source Port Number: This is the SCTP sender's port number. It can be used by the receiver in combination with the source IP address, the SCTP destination port and possibly the destination IP address to identify the association to which this packet belongs.
Destination Port Number: This is the SCTP port number to which this packet is destined. The receiving host will use this port number to de-multiplex the SCTP packet to the correct receiving endpoint/application.
Verification Tag: The receiver of this packet uses the Verification Tag to validate the sender of this SCTP packet.
Checksum: This field contains the checksum of this SCTP packet. SCTP uses the Adler-32 algorithm for calculating the checksum
Chunk Description
Each chunk is formatted with a ChunkType field, a chunk-specific Flag field, a Chunk Length field, and a Value field as shown in the above figure.
Chunk Type: This field identifies the type of information contained in the Chunk Value field.
SCTP Chunk Lists
Following is the list of SCTP chunks along with their identifier value.
Chunk Flags: The usage of these bits depends on the chunk type as given by the Chunk Type. Generally they are set to zero on transmit and are ignored on receipt.
Chunk Length: This value represents the size of the chunk in bytes including the Chunk Type, Chunk Flags, Chunk Length, and Chunk Value fields. Therefore, if the Chunk Value field is zero-length, the Length field will be set to 4. The Chunk Length field does not count any padding.
Chunk Value: The Chunk Value field contains the actual information to be transferred in the chunk. The usage and format of this field is dependent on the Chunk Type. The total length of a chunk (including Type, Length and Value fields) is a multiple of 4 bytes.