Sunday, October 21, 2012

An introduction to SCTP

The Internet
In every modern network, TCP/IP is used. Traditionally this refers to the Transmission Control Protocol (TCP) running over Internet Protocol version 4 (IPv4). In terms of computer science, both protocols are ancient, dating respectively from 1974 and 1981.

At the Network Layer, we see currently a change of Internet Protocol from IPv4 to IPv6, mainly driven by the shortage of addresses in IPv4, but the new protocol, published in 1998, offers also better features concerning mobility, security etc.

At the transport layer, TCP and the User Datagram Protocol (UDP, from 1980)  have some successors but none of them breaks really through. Perhaps the most well-known is the Stream Control Transmission Protocol (SCTP), defined by the IETF SIGTRAN group in 2000.

Transport Layer Protocols

In what follows, you can find a short description of TCP, UDP and SCTP.

TCP

TCP offers a reliable transmission: i.e the data you send, will arrive correctly and in the right order. It is connection oriented, meaning that you have to setup a connection first before you can transmit real data. It also provides congestion control, mechanisms to reduce congestion (too much traffic and thus delays, packet loss, ...).

UDP

UDP offers a reliable transmission method for data transmissions where faults can be tolerated and reliability costs too much time: e.g. when streaming video and a packet is lost, there is too little time to retransmit the lost packet and wait for it too arrive: the video would stall. Video codecs are also fault tolerant and have ways to cope in a less obtrusive way than stalling.

SCTP

SCTP offers reliable but also partial reliable data transfer. Partial reliability enables the applications to choose how persistent the data transfer should be. In SCTP partial reliability is defined per packet and in time, i.e. for each packet a time-out can be set after which no further retransmission is attempted.
SCTP is connection oriented and has a congestion control mechanism. All data, also the partially reliable or unreliable falls under the same congestion control and thus SCTP is fully TCP-friendly, whereas UDP has no congestion control. UDP pushes away TCP connections as it keeps sending packets when the network is congested: TCP backs off using its congestion control mechanism but UDP continues to flood the network.
SCTP also offers multi-streaming and multi-homing, which are explained separately below the table.

In the following table, you can see a comparison of SCTP, TCP and UDP. Not all features are explained in this article.

Services/Features SCTP TCP UDP
Connection-oriented yes yes no
Full duplex yes yes yes
Reliable data transfer yes yes no
Partial-reliable data transfer optional no no
Ordered data delivery yes yes no
Unordered data delivery yes no yes
Flow control yes yes no
Congestion control yes yes no
ECN capable yes yes no
Selective ACKs yes optional no
Preservation of message boundaries yes no yes
Path MTU discovery yes yes no
Application PDU fragmentation yes yes no
Application PDU bundling yes yes no
Multi-streaming yes no no
Multi-homing yes no no
Protection against SYN flooding attacks yes no n/a
Allows half-closed connections no yes n/a
Reachability check yes yes no
Psuedo-header for checksum no (uses vtags) yes yes
Time wait state for vtags for 4-tuple n/a

The lines in bold red are the features I am currently focussing on in the QoCON project of iMinds, a Flemish research institute. These features offer possibilities as yet not available in the Internet.

Features of SCTP

Multi-homing

Multi-homing means that your device has multiple connections over multiple network interfaces at the same time: e.g. a WiFi connection and a cellular connection. Multi-homing has many useful applications in the Internet of today.

Many Internet users are mobile and have access to cellular (3G or 4G) networks. At home or at the office there are also WiFi networks. If we look at smartphones or tablets with both cellular and WiFi networks, we see that they prefer WiFi access, but as soon as that fails, they switch easily to cellular networks.
For some applications however, this is a problem as they have persistent connections. The device changes its IP address as soon as it roams to the other network and all existing connections are lost, interrupting your Youtube video, Skype call, chats, etc. SCTP can offer the solution here by multi-homing: using the WiFi connection as primary one, but keeping the cellular connection as a backup to switch to without interruption when the WiFi fails.

Another scenario is providing high availability for a server by using two different Internet connections: when one connection fails, the other can keep all existing connections online.

Multi-streaming

Multi-streaming allows for data to be sent in multiple streams, independent of each other. Data loss in one stream does not affect other streams and different streams can be given different parameters like e.g. partial reliability (which can even be chosen on a per packet basis), ordered or unordered data, etc. The different streams have the same congestion control, so you do not need the connection setup and slow start phase for every stream. This web page could actually be a good example: in the current Internet several TCP connections are set up when you download this page, while this could be done with one SCTP connection (per web server) containing multiple streams.

The future

It is hard to tell when SCTP will become more popular. Currently it is only used in specialized scenarios, while the Internet could really profit from its use. The introduction of SCTP in such a large scale network is hard though: where to start? Why would a client applications support SCTP connections if no servers do so? And why would servers support SCTP connections if no client applications do so? For the introduction of IPv6 there is a clear need and even that takes (too) long, thus it is unclear when we will see the introduction of SCTP and/or other transport layer protocols on a larger scale.

Conclusion

Many of the protocols currently still in use in the Internet are quite old (in terms of computer science). For the network layer there is one clear successor for IPv4: IPv6, but for the transport layer this is less obvious. In this article I have explained SCTP a bit, which has many advantages over TCP and UDP, but Internet-wide introduction of such a protocol is very hard. This article was rather high-level and not too technical, the next article(s) will focus on some functionality of SCTP, e.g. mutli-homing, and how to program and configure it in a Linux environment.

1 comment:

  1. Tabassum unnisa(Mtech)November 12, 2012 at 6:28 PM

    its really a gud info which helpd me a lot.....nice go ahead...thanks Ervin....

    ReplyDelete