In computer networking, the Stream Control Transmission Protocol is a transport layer
protocol, serving in a similar role to the popular protocols Transmission Control Protocol
and User Datagram Protocol.
It provides some of the same service features of both: it is message-oriented like UDP and
ensures reliable, in-sequence transport of messages with congestion control like TCP.
The protocol was defined by the IETF Signaling Transport working group in 2000, and is maintained
by the IETF Transport Area working group.
RFC 4960 defines the protocol.
RFC 3286 provides an introduction.
In the absence of native SCTP support in operating systems it is possible to tunnel SCTP over
UDP, as well as mapping TCP API calls to SCTP ones.
Message-based multi-streaming SCTP applications submit their data to be
transmitted in messages to the SCTP transport layer.
SCTP places messages and control information into separate chunks, each identified by a
chunk header.
The protocol can fragment a message into a number of data chunks, but each data chunk
contains data from only one user message.
SCTP bundles the chunks into SCTP packets.
The SCTP packet, which is submitted to the Internet Protocol, consists of a packet header,
SCTP control chunks, followed by SCTP data chunks.
SCTP may be characterized as message-oriented, meaning it transports a sequence of messages,
rather than transporting an unbroken stream of bytes as does TCP.
As in UDP, in SCTP a sender sends a message in one operation, and that exact message is
passed to the receiving application process in one operation.
In contrast, TCP is a stream-oriented protocol, transporting streams of bytes reliably and
in order.
However TCP does not allow the receiver to know how many times the sender application
called on the TCP transport passing it groups of bytes to be sent out.
At the sender, TCP simply appends more bytes to a queue of bytes waiting to go out over
the network, rather than having to keep a queue of individual separate outbound messages
which must be preserved as such.
The term multi-streaming refers to the capability of SCTP to transmit several independent streams
of chunks in parallel, for example transmitting web page images together with the web page
text.
In essence, it involves bundling several connections into a single SCTP association, operating
on messages rather than bytes.
TCP preserves byte order in the stream by assigning a sequence number to each packet.
SCTP, on the other hand, assigns a sequence number to each message sent in a stream.
This allows independent ordering of messages in different streams.
However, message ordering is optional in SCTP; a receiving application may choose to process
messages in the order of receipt instead of the order they were sent.
Features Features of SCTP include:
Multihoming support in which one or both endpoints of a connection can consist of more than one
IP address, enabling transparent fail-over between redundant network paths.
Delivery of chunks within independent streams eliminate unnecessary head-of-line blocking,
as opposed to TCP byte-stream delivery.
Path selection and monitoring select a primary data transmission path and test the connectivity
of the transmission path.
Validation and acknowledgment mechanisms protect against flooding attacks and provide notification
of duplicated or missing data chunks.
Improved error detection suitable for Ethernet jumbo frames.
The designers of SCTP originally intended it for the transport of telephony over Internet
Protocol, with the goal of duplicating some of the reliability attributes of the SS7 signaling
network in IP.
This IETF effort is known as SIGTRAN.
In the meantime, other uses have been proposed, for example, the Diameter protocol and Reliable
server pooling.
Motivations TCP has provided the primary means to transfer
data reliably across the Internet, however TCP has imposed limitations on several applications.
From RFC 4960:
TCP provides both reliable data transfer and strict order-of-transmission delivery of data.
Some applications need reliable transfer without sequence maintenance, while others would be
satisfied with partial ordering of the data.
In both of these cases, the head-of-line blocking offered by TCP causes unnecessary delay.
The stream-oriented nature of TCP is often an inconvenience.
Applications must add their own record marking to delineate their messages, and must make
explicit use of the push facility to ensure that a complete message is transferred in
a reasonable time.
The limited scope of TCP sockets complicates the task of providing highly-available data
transfer capability using multi-homed hosts.
TCP is relatively vulnerable to denial-of-service attacks, such as SYN attacks.
Packet structure
SCTP packets have a simpler basic structure than TCP packets.
Each consists of two basic sections: The common header, which occupies the first
12 bytes and is highlighted in blue, and The data chunks, which occupy the remaining
portion of the packet.
The first chunk is highlighted in green, and the last of N chunks is highlighted in red.
Each chunk has a type identifier that is one byte long yielding, at most, 255 different
chunk types.
RFC 4960 defines a list of chunk types and there are currently 15 types defined.
The remainder of the chunk is a two byte length and the data.
If the chunk does not form a multiple of 4 bytes then it is implicitly padded with zeros
which are not included in the chunk length.
Security Although encryption was not part of the original
SCTP design, SCTP was designed with features for improved security, such as 4-way handshake
to protect against SYN flooding attacks, and large "cookies" for association verification
and authenticity.
Reliability was also a key part of the security design of SCTP.
Multihoming enables an association to stay open even when some routes and interfaces
are down.
This is of particular importance for SIGTRAN as it carries SS7 over an IP network using
SCTP, and requires strong resilience during link outages to maintain telecommunication
service even when enduring network anomalies.
SCTP is sometimes a good fingerprinting candidate.
Some operating systems ship with SCTP support enabled, and, as it is not as well known as
TCP or UDP, it is sometimes overlooked in firewall and intrusion detection configurations,
thus often permitting probing traffic.
Implementations The SCTP reference implementation runs on
FreeBSD, Mac OS X, Microsoft Windows, and Linux.
The following operating systems implement SCTP:
AIX Version 5 and newer Generic BSD with external patch at KAME project
Cisco IOS 12 DragonFly BSD since version 1.4
FreeBSD, version 7 and above, contains the reference SCTP implementation
HP-UX, 11i v2 and above Linux kernel-based 2.4 and newer
QNX Neutrino Realtime OS, 6.3.0 to 6.3.2 but not 6.4.0 and above
Sun Solaris 10 and above VxWorks versions 6.2.x to 6.4.x, and 6.7 and
newer Third-party drivers:
Microsoft Windows: The SctpDrv kernel driver is a port of the
BSD SCTP stack to Windows
Userspace library: The SCTP libraryWindows XP port
Oracle Java SE 7 The following applications implement SCTP:
Spot-on - P2P library GoldBug - Instant Messenger
RFC history RFC 7053 SACK-IMMEDIATELY Extension for the
Stream Control Transmission Protocol RFC 6525 Stream Control Transmission Protocol
Stream Reconfiguration RFC 6458 Sockets API Extensions for the Stream
Control Transmission Protocol RFC 6096 Stream Control Transmission Protocol
Chunk Flags Registration RFC 5062 Security Attacks Found Against the
Stream Control Transmission Protocol and Current Countermeasures
RFC 5061 Stream Control Transmission Protocol Dynamic Address Reconfiguration
RFC 5043 Stream Control Transmission Protocol Direct Data Placement Adaptation
RFC 4960 Stream Control Transmission Protocol RFC 4895 Authenticated Chunks for the Stream
Control Transmission Protocol RFC 4820 Padding Chunk and Parameter for the
Stream Control Transmission Protocol RFC 4460 Stream Control Transmission Protocol
Specification Errata and Issues RFC 3873 Stream Control Transmission Protocol
Management Information Base RFC 3758 Stream Control Transmission Protocol
Partial Reliability Extension RFC 3554 On the Use of Stream Control Transmission
Protocol with IPsec RFC 3436 Transport Layer Security over Stream
Control Transmission Protocol RFC 3309 Stream Control Transmission Protocol
Checksum Change RFC 3286 An Introduction to the Stream Control
Transmission Protocol RFC 3257 Stream Control Transmission Protocol
Applicability Statement RFC 2960 Stream Control Transmission Protocol
See also Transport protocol comparison table
Session initiation protocol – which may initiate multiple streams over SCTP, TCP or
UDP Multipath TCP – which allows a TCP connection
to use multiple paths to maximize resource usage and increase redundancy
References
External links http:www.sigtran.org
http:www.ietf.orgsigtran-charter.html http:www.ietf.orgtsvwg-charter.html
http:www.openss7.org SCTP workgroup for Linux
Michael Tüxen's SCTP Page Lode Coene's SCTP Page
Thomas Dreibholz's SCTP Project Page