Stream Control Transmission Protocol

Source: Wikipedia, the free encyclopedia.
Stream Control Transmission Protocol
RFC 9260

The Stream Control Transmission Protocol (SCTP) is a

Signaling System 7 (SS7) message transport in telecommunication, the protocol provides the message-oriented feature of the User Datagram Protocol (UDP), while ensuring reliable, in-sequence transport of messages with congestion control like the Transmission Control Protocol (TCP). Unlike UDP and TCP, the protocol supports multihoming
and redundant paths to increase resilience and reliability.

SCTP is standardized by the

RFC 9260. The SCTP reference implementation was released as part of FreeBSD
version 7, and has since been widely ported to other platforms.

Formal oversight

The

provides an introduction.

Message-based multi-streaming

SCTP applications submit data for transmission in messages (groups of bytes) to the SCTP transport layer. SCTP places messages and control information into separate chunks (data chunks and control chunks), each identified by a chunk header. The protocol can fragment a message into multiple 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 (when necessary), followed by SCTP data chunks (when available).

SCTP may be characterized as message-oriented, meaning it transports a sequence of messages (each being a group of bytes), rather than transporting an unbroken stream of bytes as in 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 simultaneously with the web page text. In essence, it involves bundling several connections into a single SCTP association, operating on messages (or chunks) rather than bytes.

TCP preserves byte order in the stream by including a byte sequence number with each

segment. SCTP, on the other hand, assigns a sequence number or a message-id[note 1]
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 in the order of sending.

Features

Features of SCTP include:

The designers of SCTP originally intended it for the transport of telephony (i.e. Signaling System 7) 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[3] and Reliable Server Pooling (RSerPool).[4]

Motivation and adoption

TCP has provided the primary means to transfer data reliably across the Internet. However, TCP has imposed limitations on several applications. From

RFC 4960
:

Adoption has been slowed by lack of awareness, lack of implementations (particularly in Microsoft Windows), lack of application support and lack of network support.[6]

SCTP has seen adoption in the mobile telephony space as the transport protocol for several core network interfaces.[7]

Multihoming

SCTP multihoming
Asymmetric multihoming: local multihoming to remote single homing
Asymmetric multihoming: local single homing to remote multihoming

SCTP provides redundant paths to increase reliability.

Each SCTP end point needs to check reachability of the primary and redundant addresses of the remote end point using a heartbeat. Each SCTP end point needs to acknowledge the heartbeats it receives from the remote end point.

When SCTP sends a message to a remote address, the source interface will only be decided by the routing table of the host (and not by SCTP).

In asymmetric multihoming, one of the two endpoints does not support multihoming.

In local multihoming and remote single homing, if the remote primary address is not reachable, the SCTP association fails even if an alternate path is possible.

Packet structure

An SCTP packet consists of two basic sections:

  1. The common header, which occupies the first 12 bytes and is highlighted in blue.
  2. The data chunks, which occupy the remaining portion of the packet. The first chunk is highlighted in green, and the last of N chunks (Chunk N) is highlighted in red.
Bits 0–7 8–15 16–23 24–31
+0 Source port Destination port
32 Verification tag
64 Checksum
96 Chunk 1 type Chunk 1 flags Chunk 1 length
128 Chunk 1 data
Chunk N type Chunk N flags Chunk N length
Chunk N data

Each chunk starts with a one-byte type identifier, with 15 chunk types defined by

RFC 9260, and at least 5 more defined by additional RFCs.[note 2]
Eight flag bits, a two-byte length field, and the data compose the remainder of the chunk. If the chunk does not form a multiple of 4 bytes (i.e., the length is not a multiple of 4), then it is padded with zeros, which are not included in the chunk length. The two-byte length field limits each chunk to a 65,535-byte length (including the type, flags and length fields).

Security

Although encryption was not part of the original SCTP design, SCTP was designed with features for improved security, such as 4-way

TCP 3-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

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.[8]

The following operating systems implement SCTP:

  • AIX
    Version 5 and newer
  • NetBSD[9] since 8.0[10]
  • Cisco IOS 12 and above
  • DragonFly BSD since version 1.4, however support is being deprecated in version 4.2 [11]
  • FreeBSD, version 7 and above, contains the reference SCTP implementation[12]
  • HP-UX, 11i v2 and above[13]
  • illumos
  • Linux kernel 2.4 and above
  • QNX Neutrino Realtime OS,[14] 6.3.0 to 6.3.2, deprecated since 6.4.0[15]
  • Tru64
    with the Compaq SCTP add-on package
  • Sun
    Solaris 10 and above[16]
  • 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 (Abandoned after 2012)[17]
  • MacOS:
    • SCTP Network Kernel Extension for Mac OS X[18]

Userspace
library:

The following applications implement SCTP:

Tunneling over UDP

In the absence of native SCTP support in operating systems, it is possible to tunnel SCTP over UDP,[22] as well as to map TCP API calls to SCTP calls so existing applications can use SCTP without modification.[23]

RFCs

See also

Notes

  1. ^ The DATA chunk uses a sequence number for ordered messages, the I-DATA chunk, which solves some problems with the original DATA chunk, uses a message-id for all messages
  2. ^ See SCTP packet structure for more details.

References

  1. ^ "Protocol Numbers". iana.org. IANA. Retrieved 2014-09-09.
  2. .
  3. . Retrieved 2012-05-18.
  4. .
  5. ^ RFC 9260, section 1.5.5
  6. ^ Hogg, Scott. "What About Stream Control Transmission Protocol (SCTP)?". Network World. Retrieved 2017-10-04.
  7. .
  8. ^ "Reference Implementation for SCTP - RFC4960". GitHub. Retrieved 2013-10-14. This is the reference implementation for SCTP. It is portable and runs on FreeBSD/MAC-OS/Windows and in User Space (including linux).
  9. ^ "sys/netinet/sctp.h". BSD Cross Reference. NetBSD. 2017-06-27. Retrieved 2019-01-21.
  10. ^ "man4/sctp.4". BSD Cross Reference. NetBSD. 2018-07-31. Retrieved 2019-01-21.
  11. ^ "DragonFly Removes SCTP". Lists.dragonflybsd.org. Retrieved 2016-04-28.
  12. ^ "About FreeBSD's Technological Advances". The FreeBSD Project. 2008-03-09. Retrieved 2008-09-13. SCTP: FreeBSD 7.0 is the reference implementation for the new IETF Stream Control Transmission Protocol (SCTP) protocol, intended to support VoIP, telecommunications, and other applications with strong reliability and variable quality transmission through features such as multi-path delivery, fail-over, and multi-streaming.
  13. ^ "Stream Control Transmission Protocol (SCTP)". Hewlett-Packard Development Company. Archived from the original on 2013-01-03.
  14. ^ "TCP/IP Networking". QNX Developer Support. QNX Software Systems. Retrieved 2008-09-13."What's New in this Reference". QNX Library Reference. QNX Software Systems. Retrieved 2012-12-18.
  15. ^ "QNX Software Development Platform 6.4.0".
  16. ^ "Solaris 10 Operating System Networking — Extreme Network Performance". Sun Microsystems. Retrieved 2008-09-13.
  17. ^ "SctpDrv: an SCTP driver for Microsoft Windows". Archived from the original on 2017-10-08. Retrieved 2022-01-04.
  18. ^ "SCTP Network Kernel Extension for Mac OS X". GitHub. 23 September 2021.
  19. ^ "sctplab/usrsctp". Github. Retrieved 21 September 2021.
  20. ^ "SCTP Download Page". 2006-05-29. Retrieved 2011-02-04.
  21. ^ "Windows SCTP library installer". Retrieved 2011-02-04.
  22. .
  23. ^ Bickhart, Ryan; Paul D. Amer; Randall R. Stewart (2007). "Transparent TCP-to-SCTP Translation Shim Layer" (PDF). Retrieved 2008-09-13.
  24. IETF
    .
  25. IETF
    . Retrieved 2017-01-09.

External links