1.6 Organization of this Book
To achieve this goal, we documented some important issues and items of debate that occurred while the protocol was being developed, giving the reader a bird's eye view of how the current protocol took its form in the IETF.
We also provided many examples to illustrate and explain the internal mechanisms and features of SCTP.
Whenever conflicting needs must be accommodated, a designer must make various compromises. SCTP's design is no exception. In this book we try to explain the reasoning behind those compromises, discussing the pros and cons of those features and how best to apply them in various environments.
For implementers we include an annotated version of the open-source user-space SCTP reference implementation. We explain in detail the software architecture and how the overall protocol features are implemented in the reference implementation.
Particularly, in Chapter 2 we provide a detailed analysis of some basic terms and definitions used in SCTP, such as transport address, endpoint, association, etc. Those terms and concepts are essential to understanding the design and operation of SCTP described in the rest of the book.
Chapter 3 describes in detail the SCTP packet formatsthe bits and the bytes that appear on the wire. This description is more detailed than you can find in RFC2960 (Stewart et al. 2000). It will help new readers get a grasp of what is on the wire, and it will provide a valuable reference to protocol developers. Readers whose goal is to gain a basic understanding of the protocol can refer to this chapter as needed but do not need to read it in detail.
Chapter 4 walks the reader through the details of setting up an SCTP association. It gives a high-level overview of the association establishment process, followed by a detailed summary. A reader who only wants to understand the basic concept of and steps for setting up an association can examine the high-level overview and move on, while those who want to implement the protocol may find helpful the detailed information in the rest of the chapter on how and why the protocol reacts the way it does during setup.
In Chapter 5 we discuss how the user data transfer happens within SCTP. For the convenience of the readers, an overview of the SCTP data transfer operation is given at the beginning of the chapter. The rest of the chapter provides a great deal of detail on
- How the SCTP sender transforms user messages into DATA chunks
- How the chunks are put together to form SCTP packets
- How fragmentation is done
- How bundling is done
- How the retransmission timer operates
- How the receiver acknowledges received DATA chunks
- How lost data is handled
- How SCTP deals with multi-homed hosts, etc.
Chapter 6 talks about SCTP congestion control and congestion avoidance algorithms. For those who plan to implement SCTP, this chapter is very important to understand.
The ability to detect failures and recover from them is one of the important design objectives of SCTP. Chapter 7 discusses how this is accomplished. The reader will find detailed discussions on the types of failures SCTP is capable of detecting, the internals of the failure detection and recovery algorithms, how the multi-homing and route arrangements interplay with SCTP failure detection and recovery, and so on.
In Chapter 8 we discuss some auxiliary functions within SCTP, particularly the handling rules for the out-of-the-blue (OOTB) SCTP packets and the rules dealing with the verification tags. Readers can skip this chapter if they only want to understand SCTP basics. But those who implement SCTP must obtain a full understanding of all of these rules.
Chapter 9 gives a detailed account of how an SCTP association is closed or terminated. It covers both the graceful shutdown case and the ungraceful abort of an association. This chapter is important for all readers to understand.
Chapter 10 talks about the procedures for creating future extensions of SCTP and assigning well-known SCTP port numbers through IANA.
In Chapter 11 we describe the proposed application programming interface (sockets API) for SCTP. Some readers may not find this chapter immediately useful, but implementers and application programmers who work on SCTP will benefit from the material in this chapter.
Chapter 12 discusses in detail some important differences between SCTP and TCP.
Chapter 13 gives examples to illustrate how the SCTP stream feature can be used.
In Chapter 14 we discuss the open-source SCTP reference implementation. We explain the architecture and design of the implementation and describe each of the main SCTP internal functions and the functional flow within the implementation. Implementers may find this chapter helpful if they wish to delve a bit deeper and look into the implementation itself.