SCTP is in the Tree :-)

Randall Stewart rrs at
Wed Nov 8 20:59:44 UTC 2006

Hi all:

I wanted to point out to y'all that FreeBSD current now
has SCTP.. you enable it with option SCTP in your
config :-)

So, what is SCTP?

Stream Control Transmission Protocol (SCTP) - is a reliable message
oriented transport protocol which provides network fault tolerance
It supports multiple streams and multihoming. A very good overview
of the protocol is given in RFC 3268.

So, why would you want to use SCTP?

Well, the basic SCTP protocol gives you several features unique for 
transporting messages:
  - Strong checksum, you won't get corrupt data without knowing it.
  - Multi-homing directly supported, this means you can have each
    side of your connection (called an association in SCTP) have multiple
    IP addresses for redundancy, and SCTP will seamlessly use them.
  - Support of IPv4 and IPv6, you can even use both of them at the
    same time in a connection.
  - Partial ordering and unordered delivery - This feature minimizes the
    impact of head-of-line blocking. You basically can send multiple
    transactions in parallel on separate "streams" and message loss in
    one stream will not block message delivery in another.
The implemented extensions of SCTP provide
  - Support authentication and dynamic address addition/deletion (you can
    do transport layer mobility with this actually :-D)
  - Partial reliability. You can basically do sending with a time to
    live before you give up trying to send it. A while ago Marco Molteni
    had a paper in EuroBSD on using this with Mpeg and showed how it can
    be used.

So, what features does the dropped in code support?

Most of all features described in an IETF document (RFC or ID)
are implemented. It is fairly stable but more testing is needed.
The list of implemented documents is:
     * RFC 2960 (base protocol spec)
     * RFC 3309 (checksum change)
     * RFC 4460 (implementers guide)
     * draft-ietf-tsvwg-sctp-2960bis-03.txt (will replace RFC 2960)
     * RFC3758 (partial reliability)
     * draft-ietf-tsvwg-sctp-auth-05.txt (SCTP level authentication)
     * draft-ietf-tsvwg-addip-sctp-15.txt (dynamic address modifications)
     * draft-stewart-sctpstrrst-03.txt (stream reset)
     * draft-ietf-tsvwg-sctp-padding-02.txt (needed for improved path MTU
     * draft-ladha-sctp-nonce-05.txt (ECN-Nonce and basic ECN)
     * draft-ietf-tsvwg-sctpsocket-13.txt (the socket API for SCTP)

So, who uses SCTP currently?

SCTP was developed for transporting telephony network signaling
messages  over IP (SS7/IP). Therefore it is now deployed in
the telephony networks. It makes it easy to connect IP-based
systems to the telephony network, for example to process SMS.
You can also find SCTP used by H.248 and other signalling protocols.
There are experimental patches and deployments around for
apache and firefox. I know the web server is reachable
via SCTP. Some SIP implementations also support SCTP for both
proxy's and even end-hosts. The university of vancover is
doing work with MPI and SCTP. And of course IPFIX/netflow which
is for peg-count data collection of what is going on in a
network :-)

So how do you try and use it?

SCTP uses the socket API. Using the advanced functionality of SCTP
requires you to use additonal SCTP specific functions. But for using
the basic functionality, only minor modifications to the current
way you write network programs is required (indicating SCTP
in the socket() call and changing the transport level socket
options). However, if the application does not bind to
specific addresses, it will use multihoming for free.

A very good introduction to SCTP socket programming is provided
in the third edition of "Unix Network Programming" by Steven,
Fenner and Rudoff.

Other places on the web that have information on SCTP: (the project web site and a general
                       collection of info... under the
                       drafts tab is a nice set of tutorials
                       that were presented at a linux symposium) (Lyndon Ong's nice
                                         intro/overview of SCTP)

Project plans:

  - Debug/debug debug :-)
  - Continuted code improvements
  - Performance improvements if we can :-)
  - Continue to support a multi-platform
    stack for MAC-OS X/NetBSD/FreeBSD6.x
    and other platforms.
  - Add appropriate features (in the future).


Randall Stewart
NSSTG - Cisco Systems Inc.
803-345-0369 <or> 803-317-4952 (cell

More information about the freebsd-current mailing list