FOREWORD
PREFACE
1 Introduction and Overview
1.1 IP Networking Basics
1.1.1 How Messages Are Delivered in an IP Network
1.1.2 IP Protocols
1.1.3 IP Multi-homing
1.2 What Is SCTP?
1.2.1 Where Does SCTP Fit in the IP Architecture?
1.3 Motivation for Developing SCTP
1.3.1 TCP Limitations
1.3.2 UDP Limitations
1.3.3 SCTP Enhancements over TCP and UDP
1.4 A Short History of SCTP Development
1.4.1 Early Works Before the IETF and MDTP
1.4.2 IETF Refinements
1.5 Major General SCTP Issues Debated in the IETF
1.5.1 Do We Really Need a New Transport Protocol?
1.5.2 Over UDP Versus Over IP
1.6 Organization of this Book
1.7 Summary
1.8 Questions
2 SCTP Endpoint and Association
2.1 SCTP Transport Address
2.2 SCTP Endpoint
2.2.1 Multi-homed SCTP Endpoint
2.3 SCTP Association
2.4 Operation of an SCTP Association
2.4.1 Functional View of an Association
2.4.2 Functional Responsibilities of an SCTP Endpoint
2.4.3 Operation States of an Association
2.5 IETF Debate and Issues
2.6 Summary
2.7 Questions
3 Format of SCTP Messages
3.1 Basic Layout-The Bits on the Wire
3.1.1 The SCTP Common Header
3.1.2 Elements in a Chunk
3.1.3 Defined Chunk Types and Extensibility
3.1.4 General Rules When Dealing with Chunks
3.1.5 Chunk Parameters
3.1.6 Other Considerations
3.2 Basic Chunk Descriptions
3.2.1 The INIT Chunk
3.2.2 The INIT-ACK Chunk
3.2.3 The COOKIE-ECHO Chunk
3.2.4 The COOKIE-ACK Chunk
3.2.5 The DATA Chunk
3.2.6 The SACK Chunk
3.2.7 The HEARTBEAT Chunk
3.2.8 The HEARTBEAT-ACK Chunk
3.2.9 The SHUTDOWN Chunk
3.2.10 The SHUTDOWN-ACK Chunk
3.2.11 The SHUTDOWN-COMPLETE Chunk
3.2.12 The ERROR Chunk
3.2.13 The Error Cause Parameters
3.2.14 The ABORT Chunk
3.3 IETF Debate and Issue
3.4 Summary
3.5 Questions
4 Setup of an Association
4.1 The INIT Chunk
4.1.1 Formulating the Chunk
4.1.2 INIT Parameters
4.1.3 Timer and Retransmission for INIT
4.2 The INIT-ACK Response
4.2.1 Formulating the Response
4.2.2 INIT-ACK Parameters
4.2.3 Preventing Resource Attacks
4.3 The COOKIE-ECHO Chunk
4.3.1 Formulating the Chunk
4.3.2 Bundling Data with the COOKIE-ECHO
4.3.3 Timer and Retransmission for COOKIE-ECHO
4.4 The COOKIE-ACK Chunk
4.4.1 Validating and Unpacking the Cookie
4.4.2 Formulating the COOKIE-ACK
4.4.3 Bundling DATA and SACK with COOKIE-ACK
4.5 Address Usage When Starting an Association
4.6 Chunk Rejections During an Association Setup
4.6.1 When Is an INIT Not Acceptable?
4.6.2 When Is a Cookie Not Worth Eating?
4.7 Handling Unexpected Initialization Chunks
4.7.1 Association Tie-Tags and Their Values
4.7.2 Handling Overlapping Initialization Chunks
4.7.3 Case Study 1:Initialization Collision
4.7.4 Case Study 2:Peer Restart
4.7.5 A Lost COOKIE-ACK
4.8 IETF Debate and Issues
4.9 Summary
4.10 Questions
5 User Data Transfer
5.1 User Message Transfer Overview
5.1.1 How User Messages Are Sent
5.1.2 How User Messages Are Received
5.1.3 Summary of Data Transfer Overview
5.2 Obeying the Transmission Rules
5.2.1 Congestion Window and Receiver Window
5.2.2 Rules for Data Transmission
5.3 Acknowledgment Rules
5.3.1 Where Should a SACK Be Sent?
5.3.2 When Should a SACK Be Sent?
5.3.3 What Should Be Reported in a SACK?
5.3.4 Revoking an Acknowledgment by the Receiver
5.3.5 Processing of Received SACK by Data Sender
5.4 Management of Retransmission Timer
5.4.1 Determine Retransmission Timeout(RTO)
5.4.2 Retransmission Timer Rules
5.4.3 Handling Retransmission Timer Expiration
5.5 Multi-homed Data Sender and Receiver
5.5.1 Selection of Primary Transport Address
5.5.2 Transferring Data between Multi-homed Endpoints
5.5.3 Sending a SACK on Duplicate Data
5.6 Stream Identifier and Stream Sequence Number
5.6.1 Ordered and Unordered Message Delivery
5.7 Passing a Payload Protocol Identifier
5.8 Fragmentation and Bundling of User Messages
5.8.1 When Should User Messages Be Fragmented?
5.8.2 How Should User Messages Be Fragmented?
5.8.3 Reassembling a Fragmented Message at the Data Receiver
5.8.4 User Message Bundling
5.9 Adler-32 Checksum
5.9.1 Generation of the Adler-32 Checksum by the Data Sender
5.9.2 Validation of the Adler-32 Checksum by the Data Receiver
5.10 Error Handling
5.10.1 Handling a Data Chunk with an Invalid Stream Identifier
5.10.2 Handling an Empty Data Chunk
5.10.3 Handling Out-of-State Data
5.11 IETF Debate and Issues
5.12 Summary
5.13 Questions
6 Congestion Control and avoidance
6.1 The Cause of Network Congestion Collapse
6.2 Basic Concept of Congestion Control
6.3 SCTP Congestion Control Algorithm
6.3.1 How Does Your cwnd Grow?
6.3.2 How Does Your cwnd Shrink?
6.4 Interesting Details of the Algorithms
6.5 Path MTU Discovery
6.5.1 A Refresher on How PMTU Works
6.5.2 PMTU Discovery in SCTP
6.6 Explicit Congestion Notification
6.7 IETF Debate and Issues
6.8 Summary
6.9 Questions
7 Failure Detection and Recovery
7.1 The Types of Failure SCTP Detects
7.1.1 Unreachable Destination Address
7.1.2 Unreachable Peer Endpoint
7.2 How to Detect an Unreachable Address
7.2.1 Using HEARTBEAT Chunks to Monitor Reachability
7.2.2 Address-Unreachability Detection Algorithm
7.2.3 More on Using the SCTP HEARTBEAT
7.2.4 Handling an Unreachable Primary Destination Address
7.3 How to Detect an Unreachable Peer
7.3.1 When an Association Enters the Dormant State
7.4 Fault Resilience Communication and Routing Configuration
7.4.1 Maximizing Path Diversity
7.4.2 Asymmetric Multi-homing Configuration
7.4.3 Effects of Source Address Selection
7.5 IETF Debate and Issues
7.6 Summary
7.7 Questions
8 Auxiliary SCTP Packet Handling Functions
8.1 Handling Out-of-the-Blue SCTP Packets
8.2 SCTP Packet Verification Tag Rules
8.2.1 Basic Verification Tag Rules
8.2.2 special Verification Tag Rules
8.3 IETF Debate and Discussion
8.4 Summary
8.5 Questions
9 Close of an Association
9.1 The Graceful Shutdown
9.1.1 Sending SHUTDOWN
9.1.2 Receiving SHUTDOWN
9.1.3 Sending SHUTDOWN-COMPLETE
9.1.4 Race Conditions and Lost Messages
9.2 The Abortive Shutdown
9.2.1 ABORT Usage
9.2.2 Sending an ABORT
9.2.3 Receiving an ABORT
9.3 IETF Debate and Issues
9.4 Summary
9.5 Questions
10 IANA and Future Extension of SCTP
10.1 SCTP Port Number Assignment
10.2 IETF Chunk Extensions
10.3 IETF Parameter Extensions
10.4 IETF Extensions to Error Causes
10.5 Payload Protocol Identifier
10.6 Summary
11 A Sockets API for SCTP
11.1 A Quick Review of the TCP Sockets API
11.1.1 The Server-Side Application
11.1.2 The Client-Side Application
11.2 The TCP-Style SCTP Sockets API Extension
11.3 The UDP-Style SCTP Sockets API Extension
11.3.1 A View of a Client Using a UDP-Style SCTP socket
11.3.2 A View of a Server Using a UDP-Style SCTP socket
11.4 Common API Mechanisms for Both Models
11.4.1 Using the sendmsg() and recvmsg() Calls with SCTP
11.4.2 Notification Information
11.5 Summary
11.6 Questions
12 Comparing SCTP to TCP
12.1 The Similarities between SCTP and TCP
12.1.1 Startup
12.1.2 Reliability and Ordering
12.1.3 Congestion Control
12.1.4 Closing Down
12.2 The Differences Between SCTP and TCP
12.2.1 Differences at Startup
12.2.2 Head-of-Line Blocking
12.2.3 Message Boundaries
12.2.4 Unordered Delivery
12.2.5 Selective Acknowledgment
12.2.6 Multi-homing
12.2.7 A Closing Difference
12.3 Summary
12.4 Questions
13 Using Streams in SCTP
13.1 A File Transfer Application
13.2 A Telephone Call Control Application
13.3 A Web Browser
13.4 Summary
13.5 Questions
14 A User Space Implementation of SCTP
14.1 The Big Picture
14.2 Data Structures
14.3 Events and the API
14.4 Association Setup
14.4.1 When an Upper Layer Issues an Associate Primitive
14.4.2 When a Peer Sends the SCTP Endpoint an INIT
14.5 Data Transfer
14.5.1 SACK Processing
14.5.2 Inbound DATA Chunk Processing
14.5.3 Finishing Off by Sending
14.6 Congestion Control,PMTU,and RTO
14.6.1 Congestion Control
14.6.2 PMTU Discovery
14.6.3 RTO Calculation
14.7 Fault Management
14.8 Tag and Out-of-the-Blue Handling
14.9 Association Close-Down
14.9.1 At the Upper Layer's Request
14.9.2 Reception of a SHUTDOWN
14.10 Summary
REFERENCES
GLOSSARY AND ABBREVIATIONS
INDEX