| < draft-ietf-tsvwg-2960bis-04.txt | draft-ietf-tsvwg-2960bis-05.txt > | |||
|---|---|---|---|---|
| Network Working Group R. Stewart | Network Working Group R. Stewart | |||
| Internet-Draft Editor | Internet-Draft Editor | |||
| Intended status: Standards Track April 5, 2007 | Obsoletes: 2960,3309 June 12, 2007 | |||
| Expires: October 7, 2007 | (if approved) | |||
| Intended status: Standards Track | ||||
| Expires: December 14, 2007 | ||||
| Stream Control Transmission Protocol | Stream Control Transmission Protocol | |||
| draft-ietf-tsvwg-2960bis-04.txt | draft-ietf-tsvwg-2960bis-05.txt | |||
| Status of this Memo | Status of this Memo | |||
| By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
| applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
| have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
| aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| skipping to change at page 1, line 34 ¶ | skipping to change at page 1, line 36 ¶ | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on October 7, 2007. | This Internet-Draft will expire on December 14, 2007. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2007). | |||
| Abstract | Abstract | |||
| This document obsoletes RFC2960 [RFC2960] and describes the Stream | This document obsoletes RFC2960 [RFC2960] and RFC3309 [RFC3309] it | |||
| Control Transmission Protocol (SCTP). SCTP is designed to transport | describes the Stream Control Transmission Protocol (SCTP). SCTP is | |||
| PSTN signaling messages over IP networks, but is capable of broader | designed to transport PSTN signaling messages over IP networks, but | |||
| applications. | is capable of broader applications. | |||
| SCTP is a reliable transport protocol operating on top of a | SCTP is a reliable transport protocol operating on top of a | |||
| connectionless packet network such as IP. It offers the following | connectionless packet network such as IP. It offers the following | |||
| services to its users: | services to its users: | |||
| -- acknowledged error-free non-duplicated transfer of user data, | -- acknowledged error-free non-duplicated transfer of user data, | |||
| -- data fragmentation to conform to discovered path MTU size, | -- data fragmentation to conform to discovered path MTU size, | |||
| -- sequenced delivery of user messages within multiple streams, with | -- sequenced delivery of user messages within multiple streams, with | |||
| an option for order-of-arrival delivery of individual user | an option for order-of-arrival delivery of individual user | |||
| messages, | messages, | |||
| skipping to change at page 2, line 23 ¶ | skipping to change at page 2, line 25 ¶ | |||
| at either or both ends of an association. | at either or both ends of an association. | |||
| The design of SCTP includes appropriate congestion avoidance behavior | The design of SCTP includes appropriate congestion avoidance behavior | |||
| and resistance to flooding and masquerade attacks. | and resistance to flooding and masquerade attacks. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1.2. Architectural View of SCTP . . . . . . . . . . . . . . . 6 | 1.2. Architectural View of SCTP . . . . . . . . . . . . . . . 6 | |||
| 1.3. Functional View of SCTP . . . . . . . . . . . . . . . . . 7 | 1.3. Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 1.3.1. Association Startup and Takedown . . . . . . . . . . 8 | 1.4. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 1.3.2. Sequenced Delivery within Streams . . . . . . . . . . 9 | 1.5. Functional View of SCTP . . . . . . . . . . . . . . . . . 11 | |||
| 1.3.3. User Data Fragmentation . . . . . . . . . . . . . . . 9 | 1.5.1. Association Startup and Takedown . . . . . . . . . . 12 | |||
| 1.3.4. Acknowledgement and Congestion Avoidance . . . . . . 9 | 1.5.2. Sequenced Delivery within Streams . . . . . . . . . . 13 | |||
| 1.3.5. Chunk Bundling . . . . . . . . . . . . . . . . . . . 10 | 1.5.3. User Data Fragmentation . . . . . . . . . . . . . . . 13 | |||
| 1.3.6. Packet Validation . . . . . . . . . . . . . . . . . . 10 | 1.5.4. Acknowledgement and Congestion Avoidance . . . . . . 13 | |||
| 1.3.7. Path Management . . . . . . . . . . . . . . . . . . . 10 | 1.5.5. Chunk Bundling . . . . . . . . . . . . . . . . . . . 14 | |||
| 1.4. Key Terms . . . . . . . . . . . . . . . . . . . . . . . . 11 | 1.5.6. Packet Validation . . . . . . . . . . . . . . . . . . 14 | |||
| 1.5. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 15 | 1.5.7. Path Management . . . . . . . . . . . . . . . . . . . 14 | |||
| 1.6. Serial Number Arithmetic . . . . . . . . . . . . . . . . 15 | 1.6. Serial Number Arithmetic . . . . . . . . . . . . . . . . 15 | |||
| 1.7. Changes from RFC2960 . . . . . . . . . . . . . . . . . . 16 | 1.7. Changes from RFC2960 . . . . . . . . . . . . . . . . . . 16 | |||
| 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3. SCTP packet Format . . . . . . . . . . . . . . . . . . . . . 16 | 3. SCTP packet Format . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.1. SCTP Common Header Field Descriptions . . . . . . . . . . 17 | 3.1. SCTP Common Header Field Descriptions . . . . . . . . . . 17 | |||
| 3.2. Chunk Field Descriptions . . . . . . . . . . . . . . . . 18 | 3.2. Chunk Field Descriptions . . . . . . . . . . . . . . . . 18 | |||
| 3.2.1. Optional/Variable-length Parameter Format . . . . . . 20 | 3.2.1. Optional/Variable-length Parameter Format . . . . . . 20 | |||
| 3.2.2. Reporting of Unrecognized Parameters . . . . . . . . 22 | 3.2.2. Reporting of Unrecognized Parameters . . . . . . . . 22 | |||
| 3.3. SCTP Chunk Definitions . . . . . . . . . . . . . . . . . 23 | 3.3. SCTP Chunk Definitions . . . . . . . . . . . . . . . . . 23 | |||
| 3.3.1. Payload Data (DATA) (0) . . . . . . . . . . . . . . . 23 | 3.3.1. Payload Data (DATA) (0) . . . . . . . . . . . . . . . 23 | |||
| skipping to change at page 4, line 19 ¶ | skipping to change at page 4, line 22 ¶ | |||
| 6.9. Fragmentation and Reassembly . . . . . . . . . . . . . . 90 | 6.9. Fragmentation and Reassembly . . . . . . . . . . . . . . 90 | |||
| 6.10. Bundling . . . . . . . . . . . . . . . . . . . . . . . . 91 | 6.10. Bundling . . . . . . . . . . . . . . . . . . . . . . . . 91 | |||
| 7. Congestion control . . . . . . . . . . . . . . . . . . . . . 92 | 7. Congestion control . . . . . . . . . . . . . . . . . . . . . 92 | |||
| 7.1. SCTP Differences from TCP Congestion control . . . . . . 93 | 7.1. SCTP Differences from TCP Congestion control . . . . . . 93 | |||
| 7.2. SCTP Slow-Start and Congestion Avoidance . . . . . . . . 94 | 7.2. SCTP Slow-Start and Congestion Avoidance . . . . . . . . 94 | |||
| 7.2.1. Slow-Start . . . . . . . . . . . . . . . . . . . . . 95 | 7.2.1. Slow-Start . . . . . . . . . . . . . . . . . . . . . 95 | |||
| 7.2.2. Congestion Avoidance . . . . . . . . . . . . . . . . 96 | 7.2.2. Congestion Avoidance . . . . . . . . . . . . . . . . 96 | |||
| 7.2.3. Congestion Control . . . . . . . . . . . . . . . . . 97 | 7.2.3. Congestion Control . . . . . . . . . . . . . . . . . 97 | |||
| 7.2.4. Fast Retransmit on Gap Reports . . . . . . . . . . . 97 | 7.2.4. Fast Retransmit on Gap Reports . . . . . . . . . . . 97 | |||
| 7.3. Path MTU Discovery . . . . . . . . . . . . . . . . . . . 99 | 7.3. Path MTU Discovery . . . . . . . . . . . . . . . . . . . 99 | |||
| 8. Fault Management . . . . . . . . . . . . . . . . . . . . . . 100 | 8. Fault Management . . . . . . . . . . . . . . . . . . . . . . 99 | |||
| 8.1. Endpoint Failure Detection . . . . . . . . . . . . . . . 100 | 8.1. Endpoint Failure Detection . . . . . . . . . . . . . . . 99 | |||
| 8.2. Path Failure Detection . . . . . . . . . . . . . . . . . 100 | 8.2. Path Failure Detection . . . . . . . . . . . . . . . . . 100 | |||
| 8.3. Path Heartbeat . . . . . . . . . . . . . . . . . . . . . 101 | 8.3. Path Heartbeat . . . . . . . . . . . . . . . . . . . . . 101 | |||
| 8.4. Handle "Out of the blue" Packets . . . . . . . . . . . . 103 | 8.4. Handle "Out of the blue" Packets . . . . . . . . . . . . 103 | |||
| 8.5. Verification Tag . . . . . . . . . . . . . . . . . . . . 104 | 8.5. Verification Tag . . . . . . . . . . . . . . . . . . . . 104 | |||
| 8.5.1. Exceptions in Verification Tag Rules . . . . . . . . 105 | 8.5.1. Exceptions in Verification Tag Rules . . . . . . . . 104 | |||
| 9. Termination of Association . . . . . . . . . . . . . . . . . 106 | 9. Termination of Association . . . . . . . . . . . . . . . . . 105 | |||
| 9.1. Abort of an Association . . . . . . . . . . . . . . . . . 106 | 9.1. Abort of an Association . . . . . . . . . . . . . . . . . 106 | |||
| 9.2. Shutdown of an Association . . . . . . . . . . . . . . . 107 | 9.2. Shutdown of an Association . . . . . . . . . . . . . . . 106 | |||
| 10. Interface with Upper Layer . . . . . . . . . . . . . . . . . 110 | 10. Interface with Upper Layer . . . . . . . . . . . . . . . . . 109 | |||
| 10.1. ULP-to-SCTP . . . . . . . . . . . . . . . . . . . . . . . 110 | 10.1. ULP-to-SCTP . . . . . . . . . . . . . . . . . . . . . . . 109 | |||
| 10.2. SCTP-to-ULP . . . . . . . . . . . . . . . . . . . . . . . 121 | 10.2. SCTP-to-ULP . . . . . . . . . . . . . . . . . . . . . . . 120 | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 124 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 123 | |||
| 11.1. Security Objectives . . . . . . . . . . . . . . . . . . . 124 | 11.1. Security Objectives . . . . . . . . . . . . . . . . . . . 123 | |||
| 11.2. SCTP Responses To Potential Threats . . . . . . . . . . . 124 | 11.2. SCTP Responses To Potential Threats . . . . . . . . . . . 123 | |||
| 11.2.1. Countering Insider Attacks . . . . . . . . . . . . . 124 | 11.2.1. Countering Insider Attacks . . . . . . . . . . . . . 124 | |||
| 11.2.2. Protecting against Data Corruption in the Network . . 124 | 11.2.2. Protecting against Data Corruption in the Network . . 124 | |||
| 11.2.3. Protecting Confidentiality . . . . . . . . . . . . . 125 | 11.2.3. Protecting Confidentiality . . . . . . . . . . . . . 124 | |||
| 11.2.4. Protecting against Blind Denial of Service Attacks . 125 | 11.2.4. Protecting against Blind Denial of Service Attacks . 125 | |||
| 11.2.4.1. Flooding . . . . . . . . . . . . . . . . . . . . 126 | 11.2.4.1. Flooding . . . . . . . . . . . . . . . . . . . . 125 | |||
| 11.2.4.2. Blind Masquerade . . . . . . . . . . . . . . . . 127 | 11.2.4.2. Blind Masquerade . . . . . . . . . . . . . . . . 126 | |||
| 11.2.4.3. Improper Monopolization of Services . . . . . . 128 | 11.2.4.3. Improper Monopolization of Services . . . . . . 127 | |||
| 11.3. Protection against Fraud and Repudiation . . . . . . . . 128 | 11.3. SCTP Interactions with Firewalls . . . . . . . . . . . . 127 | |||
| 11.4. SCTP Interactions with Firewalls . . . . . . . . . . . . 129 | 11.4. Protection of Non-SCTP Capable Hosts. . . . . . . . . . . 127 | |||
| 11.5. Protection of Non-SCTP Capable Hosts. . . . . . . . . . . 129 | 12. Network Management Considerations . . . . . . . . . . . . . . 128 | |||
| 12. Network Management Considerations . . . . . . . . . . . . . . 130 | 13. Recommended Transmission Control Block (TCB) Parameters . . . 128 | |||
| 13. Recommended Transmission Control Block (TCB) Parameters . . . 130 | 13.1. Parameters necessary for the SCTP instance . . . . . . . 129 | |||
| 13.1. Parameters necessary for the SCTP instance . . . . . . . 130 | 13.2. Parameters necessary per association (i.e. the TCB) . . . 129 | |||
| 13.2. Parameters necessary per association (i.e. the TCB) . . . 130 | 13.3. Per Transport Address Data . . . . . . . . . . . . . . . 131 | |||
| 13.3. Per Transport Address Data . . . . . . . . . . . . . . . 132 | 13.4. General Parameters Needed . . . . . . . . . . . . . . . . 132 | |||
| 13.4. General Parameters Needed . . . . . . . . . . . . . . . . 133 | 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 133 | |||
| 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 134 | 14.1. IETF-defined Chunk Extension . . . . . . . . . . . . . . 133 | |||
| 14.1. IETF-defined Chunk Extension . . . . . . . . . . . . . . 134 | 14.2. IETF-defined Chunk Parameter Extension . . . . . . . . . 133 | |||
| 14.2. IETF-defined Chunk Parameter Extension . . . . . . . . . 134 | 14.3. IETF-defined Additional Error Causes . . . . . . . . . . 134 | |||
| 14.3. IETF-defined Additional Error Causes . . . . . . . . . . 135 | 14.4. Payload Protocol Identifiers . . . . . . . . . . . . . . 134 | |||
| 14.4. Payload Protocol Identifiers . . . . . . . . . . . . . . 135 | 15. Suggested SCTP Protocol Parameter Values . . . . . . . . . . 135 | |||
| 15. Suggested SCTP Protocol Parameter Values . . . . . . . . . . 136 | 16. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 135 | |||
| 16. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 136 | Appendix A. Explicit Congestion Notification . . . . . . . . . . 136 | |||
| Appendix A. Explicit Congestion Notification . . . . . . . . . . 137 | Appendix B. CRC32c Checksum Calculation . . . . . . . . . . . . 138 | |||
| Appendix B. CRC32c Checksum Calculation . . . . . . . . . . . . 139 | Appendix C. ICMP Handling . . . . . . . . . . . . . . . . . . . 140 | |||
| Appendix C. ICMP Handling . . . . . . . . . . . . . . . . . . . 141 | 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 146 | |||
| 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 147 | 17.1. Normative references . . . . . . . . . . . . . . . . . . 146 | |||
| 17.1. Normative references . . . . . . . . . . . . . . . . . . 147 | 17.2. Informative References . . . . . . . . . . . . . . . . . 147 | |||
| 17.2. Informative References . . . . . . . . . . . . . . . . . 148 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 148 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 149 | ||||
| Intellectual Property and Copyright Statements . . . . . . . . . 150 | Intellectual Property and Copyright Statements . . . . . . . . . 150 | |||
| 1. Introduction | 1. Introduction | |||
| This section explains the reasoning behind the development of the | This section explains the reasoning behind the development of the | |||
| Stream Control Transmission Protocol (SCTP), the services it offers, | Stream Control Transmission Protocol (SCTP), the services it offers, | |||
| and the basic concepts needed to understand the detailed description | and the basic concepts needed to understand the detailed description | |||
| of the protocol. | of the protocol. | |||
| 1.1. Motivation | 1.1. Motivation | |||
| skipping to change at page 7, line 11 ¶ | skipping to change at page 7, line 11 ¶ | |||
| user" for short) and a connectionless packet network service such as | user" for short) and a connectionless packet network service such as | |||
| IP. The remainder of this document assumes SCTP runs on top of IP. | IP. The remainder of this document assumes SCTP runs on top of IP. | |||
| The basic service offered by SCTP is the reliable transfer of user | The basic service offered by SCTP is the reliable transfer of user | |||
| messages between peer SCTP users. It performs this service within | messages between peer SCTP users. It performs this service within | |||
| the context of an association between two SCTP endpoints. Section 10 | the context of an association between two SCTP endpoints. Section 10 | |||
| of this document sketches the API which should exist at the boundary | of this document sketches the API which should exist at the boundary | |||
| between the SCTP and the SCTP user layers. | between the SCTP and the SCTP user layers. | |||
| SCTP is connection-oriented in nature, but the SCTP association is a | SCTP is connection-oriented in nature, but the SCTP association is a | |||
| broader concept than the TCP connection. SCTP provides the means for | broader concept than the TCP connection. SCTP provides the means for | |||
| each SCTP endpoint (Section 1.4) to provide the other endpoint | each SCTP endpoint (Section 1.3) to provide the other endpoint | |||
| (during association startup) with a list of transport addresses | (during association startup) with a list of transport addresses | |||
| (i.e., multiple IP addresses in combination with an SCTP port) | (i.e., multiple IP addresses in combination with an SCTP port) | |||
| through which that endpoint can be reached and from which it will | through which that endpoint can be reached and from which it will | |||
| originate SCTP packets. The association spans transfers over all of | originate SCTP packets. The association spans transfers over all of | |||
| the possible source/destination combinations which may be generated | the possible source/destination combinations which may be generated | |||
| from each endpoint's lists. | from each endpoint's lists. | |||
| _____________ _____________ | _____________ _____________ | |||
| | SCTP User | | SCTP User | | | SCTP User | | SCTP User | | |||
| | Application | | Application | | | Application | | Application | | |||
| skipping to change at page 7, line 36 ¶ | skipping to change at page 7, line 36 ¶ | |||
| |-------------| |-------------| | |-------------| |-------------| | |||
| | |One or more ---- One or more| | | | |One or more ---- One or more| | | |||
| | IP Network |IP address \/ IP address| IP Network | | | IP Network |IP address \/ IP address| IP Network | | |||
| | Service |appearances /\ appearances| Service | | | Service |appearances /\ appearances| Service | | |||
| |_____________| ---- |_____________| | |_____________| ---- |_____________| | |||
| SCTP Node A |<-------- Network transport ------->| SCTP Node B | SCTP Node A |<-------- Network transport ------->| SCTP Node B | |||
| Figure 1: An SCTP Association | Figure 1: An SCTP Association | |||
| 1.3. Functional View of SCTP | 1.3. Key Terms | |||
| The SCTP transport service can be decomposed into a number of | ||||
| functions. These are depicted in Figure 2 and explained in the | ||||
| remainder of this section. | ||||
| SCTP User Application | ||||
| ----------------------------------------------------- | ||||
| _____________ ____________________ | ||||
| | | | Sequenced delivery | | ||||
| | Association | | within streams | | ||||
| | | |____________________| | ||||
| | startup | | ||||
| | | ____________________________ | ||||
| | and | | User Data Fragmentation | | ||||
| | | |____________________________| | ||||
| | takedown | | ||||
| | | ____________________________ | ||||
| | | | Acknowledgement | | ||||
| | | | and | | ||||
| | | | Congestion Avoidance | | ||||
| | | |____________________________| | ||||
| | | | ||||
| | | ____________________________ | ||||
| | | | Chunk Bundling | | ||||
| | | |____________________________| | ||||
| | | | ||||
| | | ________________________________ | ||||
| | | | Packet Validation | | ||||
| | | |________________________________| | ||||
| | | | ||||
| | | ________________________________ | ||||
| | | | Path Management | | ||||
| |_____________| |________________________________| | ||||
| Figure 2: Functional View of the SCTP Transport Service | ||||
| 1.3.1. Association Startup and Takedown | ||||
| An association is initiated by a request from the SCTP user (see the | ||||
| description of the ASSOCIATE (or SEND) primitive in Section 10). | ||||
| A cookie mechanism, similar to one described by Karn and Simpson in | ||||
| [RFC2522] , is employed during the initialization to provide | ||||
| protection against security attacks. The cookie mechanism uses a | ||||
| four-way handshake, the last two legs of which are allowed to carry | ||||
| user data for fast setup. The startup sequence is described in | ||||
| Section 5 of this document. | ||||
| SCTP provides for graceful close (i.e., shutdown) of an active | ||||
| association on request from the SCTP user. See the description of | ||||
| the SHUTDOWN primitive in Section 10. SCTP also allows ungraceful | ||||
| close (i.e., abort), either on request from the user (ABORT | ||||
| primitive) or as a result of an error condition detected within the | ||||
| SCTP layer. Section 9 describes both the graceful and the ungraceful | ||||
| close procedures. | ||||
| SCTP does not support a half-open state (like TCP) wherein one side | ||||
| may continue sending data while the other end is closed. When either | ||||
| endpoint performs a shutdown, the association on each peer will stop | ||||
| accepting new data from its user and only deliver data in queue at | ||||
| the time of the graceful close (see Section 9 ). | ||||
| 1.3.2. Sequenced Delivery within Streams | ||||
| The term "stream" is used in SCTP to refer to a sequence of user | ||||
| messages that are to be delivered to the upper-layer protocol in | ||||
| order with respect to other messages within the same stream. This is | ||||
| in contrast to its usage in TCP, where it refers to a sequence of | ||||
| bytes (in this document a byte is assumed to be eight bits). | ||||
| The SCTP user can specify at association startup time the number of | ||||
| streams to be supported by the association. This number is | ||||
| negotiated with the remote end (see Section 5.1.1). User messages | ||||
| are associated with stream numbers (SEND, RECEIVE primitives, | ||||
| Section 10). Internally, SCTP assigns a stream sequence number to | ||||
| each message passed to it by the SCTP user. On the receiving side, | ||||
| SCTP ensures that messages are delivered to the SCTP user in sequence | ||||
| within a given stream. However, while one stream may be blocked | ||||
| waiting for the next in-sequence user message, delivery from other | ||||
| streams may proceed. | ||||
| SCTP provides a mechanism for bypassing the sequenced delivery | ||||
| service. User messages sent using this mechanism are delivered to | ||||
| the SCTP user as soon as they are received. | ||||
| 1.3.3. User Data Fragmentation | ||||
| When needed, SCTP fragments user messages to ensure that the SCTP | ||||
| packet passed to the lower layer conforms to the path MTU. On | ||||
| receipt, fragments are reassembled into complete messages before | ||||
| being passed to the SCTP user. | ||||
| 1.3.4. Acknowledgement and Congestion Avoidance | ||||
| SCTP assigns a Transmission Sequence Number (TSN) to each user data | ||||
| fragment or unfragmented message. The TSN is independent of any | ||||
| stream sequence number assigned at the stream level. The receiving | ||||
| end acknowledges all TSNs received, even if there are gaps in the | ||||
| sequence. In this way, reliable delivery is kept functionally | ||||
| separate from sequenced stream delivery. | ||||
| The acknowledgement and congestion avoidance function is responsible | ||||
| for packet retransmission when timely acknowledgement has not been | ||||
| received. Packet retransmission is conditioned by congestion | ||||
| avoidance procedures similar to those used for TCP. See Section 6 | ||||
| and Section 7 for a detailed description of the protocol procedures | ||||
| associated with this function. | ||||
| 1.3.5. Chunk Bundling | ||||
| As described in Section 3, the SCTP packet as delivered to the lower | ||||
| layer consists of a common header followed by one or more chunks. | ||||
| Each chunk may contain either user data or SCTP control information. | ||||
| The SCTP user has the option to request bundling of more than one | ||||
| user messages into a single SCTP packet. The chunk bundling function | ||||
| of SCTP is responsible for assembly of the complete SCTP packet and | ||||
| its disassembly at the receiving end. | ||||
| During times of congestion an SCTP implementation MAY still perform | ||||
| bundling even if the user has requested that SCTP not bundle. The | ||||
| user's disabling of bundling only affects SCTP implementations that | ||||
| may delay a small period of time before transmission (to attempt to | ||||
| encourage bundling). When the user layer disables bundling, this | ||||
| small delay is prohibited but not bundling that is performed during | ||||
| congestion or retransmission. | ||||
| 1.3.6. Packet Validation | ||||
| A mandatory Verification Tag field and a 32 bit checksum field (see | ||||
| Appendix B for a description of the CRC32c checksum) are included in | ||||
| the SCTP common header. The Verification Tag value is chosen by each | ||||
| end of the association during association startup. Packets received | ||||
| without the expected Verification Tag value are discarded, as a | ||||
| protection against blind masquerade attacks and against stale SCTP | ||||
| packets from a previous association. The CRC32c checksum should be | ||||
| set by the sender of each SCTP packet to provide additional | ||||
| protection against data corruption in the network. The receiver of | ||||
| an SCTP packet with an invalid CRC32c checksum silently discards the | ||||
| packet. | ||||
| 1.3.7. Path Management | ||||
| The sending SCTP user is able to manipulate the set of transport | ||||
| addresses used as destinations for SCTP packets through the | ||||
| primitives described in Section 10. The SCTP path management | ||||
| function chooses the destination transport address for each outgoing | ||||
| SCTP packet based on the SCTP user's instructions and the currently | ||||
| perceived reachability status of the eligible destination set. The | ||||
| path management function monitors reachability through heartbeats | ||||
| when other packet traffic is inadequate to provide this information | ||||
| and advises the SCTP user when reachability of any far-end transport | ||||
| address changes. The path management function is also responsible | ||||
| for reporting the eligible set of local transport addresses to the | ||||
| far end during association startup, and for reporting the transport | ||||
| addresses returned from the far end to the SCTP user. | ||||
| At association start-up, a primary path is defined for each SCTP | ||||
| endpoint, and is used for normal sending of SCTP packets. | ||||
| On the receiving end, the path management is responsible for | ||||
| verifying the existence of a valid SCTP association to which the | ||||
| inbound SCTP packet belongs before passing it for further processing. | ||||
| Note: Path Management and Packet Validation are done at the same | ||||
| time, so although described separately above, in reality they cannot | ||||
| be performed as separate items. | ||||
| 1.4. Key Terms | ||||
| Some of the language used to describe SCTP has been introduced in the | Some of the language used to describe SCTP has been introduced in the | |||
| previous sections. This section provides a consolidated list of the | previous sections. This section provides a consolidated list of the | |||
| key terms and their definitions. | key terms and their definitions. | |||
| o Active destination transport address: A transport address on a | o Active destination transport address: A transport address on a | |||
| peer endpoint which a transmitting endpoint considers available | peer endpoint which a transmitting endpoint considers available | |||
| for receiving user messages. | for receiving user messages. | |||
| o Bundling: An optional multiplexing operation, whereby more than | o Bundling: An optional multiplexing operation, whereby more than | |||
| skipping to change at page 15, line 5 ¶ | skipping to change at page 11, line 20 ¶ | |||
| o User message: The unit of data delivery across the interface | o User message: The unit of data delivery across the interface | |||
| between SCTP and its user. | between SCTP and its user. | |||
| o Verification Tag: A 32 bit unsigned integer that is randomly | o Verification Tag: A 32 bit unsigned integer that is randomly | |||
| generated. The Verification Tag provides a key that allows a | generated. The Verification Tag provides a key that allows a | |||
| receiver to verify that the SCTP packet belongs to the current | receiver to verify that the SCTP packet belongs to the current | |||
| association and is not an old or stale packet from a previous | association and is not an old or stale packet from a previous | |||
| association. | association. | |||
| 1.5. Abbreviations | 1.4. Abbreviations | |||
| MAC - Message Authentication Code [RFC2104] | MAC - Message Authentication Code [RFC2104] | |||
| RTO - Retransmission Time-out | RTO - Retransmission Time-out | |||
| RTT - Round-trip Time | RTT - Round-trip Time | |||
| RTTVAR - Round-trip Time Variation | RTTVAR - Round-trip Time Variation | |||
| SCTP - Stream Control Transmission Protocol | SCTP - Stream Control Transmission Protocol | |||
| skipping to change at page 15, line 27 ¶ | skipping to change at page 11, line 42 ¶ | |||
| SRTT - Smoothed RTT | SRTT - Smoothed RTT | |||
| TCB - Transmission Control Block | TCB - Transmission Control Block | |||
| TLV - Type-Length-Value Coding Format | TLV - Type-Length-Value Coding Format | |||
| TSN - Transmission Sequence Number | TSN - Transmission Sequence Number | |||
| ULP - Upper-layer Protocol | ULP - Upper-layer Protocol | |||
| 1.5. Functional View of SCTP | ||||
| The SCTP transport service can be decomposed into a number of | ||||
| functions. These are depicted in Figure 2 and explained in the | ||||
| remainder of this section. | ||||
| SCTP User Application | ||||
| ----------------------------------------------------- | ||||
| _____________ ____________________ | ||||
| | | | Sequenced delivery | | ||||
| | Association | | within streams | | ||||
| | | |____________________| | ||||
| | startup | | ||||
| | | ____________________________ | ||||
| | and | | User Data Fragmentation | | ||||
| | | |____________________________| | ||||
| | takedown | | ||||
| | | ____________________________ | ||||
| | | | Acknowledgement | | ||||
| | | | and | | ||||
| | | | Congestion Avoidance | | ||||
| | | |____________________________| | ||||
| | | | ||||
| | | ____________________________ | ||||
| | | | Chunk Bundling | | ||||
| | | |____________________________| | ||||
| | | | ||||
| | | ________________________________ | ||||
| | | | Packet Validation | | ||||
| | | |________________________________| | ||||
| | | | ||||
| | | ________________________________ | ||||
| | | | Path Management | | ||||
| |_____________| |________________________________| | ||||
| Figure 2: Functional View of the SCTP Transport Service | ||||
| 1.5.1. Association Startup and Takedown | ||||
| An association is initiated by a request from the SCTP user (see the | ||||
| description of the ASSOCIATE (or SEND) primitive in Section 10). | ||||
| A cookie mechanism, similar to one described by Karn and Simpson in | ||||
| [RFC2522] , is employed during the initialization to provide | ||||
| protection against synchronization attacks. The cookie mechanism | ||||
| uses a four-way handshake, the last two legs of which are allowed to | ||||
| carry user data for fast setup. The startup sequence is described in | ||||
| Section 5 of this document. | ||||
| SCTP provides for graceful close (i.e., shutdown) of an active | ||||
| association on request from the SCTP user. See the description of | ||||
| the SHUTDOWN primitive in Section 10. SCTP also allows ungraceful | ||||
| close (i.e., abort), either on request from the user (ABORT | ||||
| primitive) or as a result of an error condition detected within the | ||||
| SCTP layer. Section 9 describes both the graceful and the ungraceful | ||||
| close procedures. | ||||
| SCTP does not support a half-open state (like TCP) wherein one side | ||||
| may continue sending data while the other end is closed. When either | ||||
| endpoint performs a shutdown, the association on each peer will stop | ||||
| accepting new data from its user and only deliver data in queue at | ||||
| the time of the graceful close (see Section 9 ). | ||||
| 1.5.2. Sequenced Delivery within Streams | ||||
| The term "stream" is used in SCTP to refer to a sequence of user | ||||
| messages that are to be delivered to the upper-layer protocol in | ||||
| order with respect to other messages within the same stream. This is | ||||
| in contrast to its usage in TCP, where it refers to a sequence of | ||||
| bytes (in this document a byte is assumed to be eight bits). | ||||
| The SCTP user can specify at association startup time the number of | ||||
| streams to be supported by the association. This number is | ||||
| negotiated with the remote end (see Section 5.1.1). User messages | ||||
| are associated with stream numbers (SEND, RECEIVE primitives, | ||||
| Section 10). Internally, SCTP assigns a stream sequence number to | ||||
| each message passed to it by the SCTP user. On the receiving side, | ||||
| SCTP ensures that messages are delivered to the SCTP user in sequence | ||||
| within a given stream. However, while one stream may be blocked | ||||
| waiting for the next in-sequence user message, delivery from other | ||||
| streams may proceed. | ||||
| SCTP provides a mechanism for bypassing the sequenced delivery | ||||
| service. User messages sent using this mechanism are delivered to | ||||
| the SCTP user as soon as they are received. | ||||
| 1.5.3. User Data Fragmentation | ||||
| When needed, SCTP fragments user messages to ensure that the SCTP | ||||
| packet passed to the lower layer conforms to the path MTU. On | ||||
| receipt, fragments are reassembled into complete messages before | ||||
| being passed to the SCTP user. | ||||
| 1.5.4. Acknowledgement and Congestion Avoidance | ||||
| SCTP assigns a Transmission Sequence Number (TSN) to each user data | ||||
| fragment or unfragmented message. The TSN is independent of any | ||||
| stream sequence number assigned at the stream level. The receiving | ||||
| end acknowledges all TSNs received, even if there are gaps in the | ||||
| sequence. In this way, reliable delivery is kept functionally | ||||
| separate from sequenced stream delivery. | ||||
| The acknowledgement and congestion avoidance function is responsible | ||||
| for packet retransmission when timely acknowledgement has not been | ||||
| received. Packet retransmission is conditioned by congestion | ||||
| avoidance procedures similar to those used for TCP. See Section 6 | ||||
| and Section 7 for a detailed description of the protocol procedures | ||||
| associated with this function. | ||||
| 1.5.5. Chunk Bundling | ||||
| As described in Section 3, the SCTP packet as delivered to the lower | ||||
| layer consists of a common header followed by one or more chunks. | ||||
| Each chunk may contain either user data or SCTP control information. | ||||
| The SCTP user has the option to request bundling of more than one | ||||
| user messages into a single SCTP packet. The chunk bundling function | ||||
| of SCTP is responsible for assembly of the complete SCTP packet and | ||||
| its disassembly at the receiving end. | ||||
| During times of congestion an SCTP implementation MAY still perform | ||||
| bundling even if the user has requested that SCTP not bundle. The | ||||
| user's disabling of bundling only affects SCTP implementations that | ||||
| may delay a small period of time before transmission (to attempt to | ||||
| encourage bundling). When the user layer disables bundling, this | ||||
| small delay is prohibited but not bundling that is performed during | ||||
| congestion or retransmission. | ||||
| 1.5.6. Packet Validation | ||||
| A mandatory Verification Tag field and a 32 bit checksum field (see | ||||
| Appendix B for a description of the CRC32c checksum) are included in | ||||
| the SCTP common header. The Verification Tag value is chosen by each | ||||
| end of the association during association startup. Packets received | ||||
| without the expected Verification Tag value are discarded, as a | ||||
| protection against blind masquerade attacks and against stale SCTP | ||||
| packets from a previous association. The CRC32c checksum should be | ||||
| set by the sender of each SCTP packet to provide additional | ||||
| protection against data corruption in the network. The receiver of | ||||
| an SCTP packet with an invalid CRC32c checksum silently discards the | ||||
| packet. | ||||
| 1.5.7. Path Management | ||||
| The sending SCTP user is able to manipulate the set of transport | ||||
| addresses used as destinations for SCTP packets through the | ||||
| primitives described in Section 10. The SCTP path management | ||||
| function chooses the destination transport address for each outgoing | ||||
| SCTP packet based on the SCTP user's instructions and the currently | ||||
| perceived reachability status of the eligible destination set. The | ||||
| path management function monitors reachability through heartbeats | ||||
| when other packet traffic is inadequate to provide this information | ||||
| and advises the SCTP user when reachability of any far-end transport | ||||
| address changes. The path management function is also responsible | ||||
| for reporting the eligible set of local transport addresses to the | ||||
| far end during association startup, and for reporting the transport | ||||
| addresses returned from the far end to the SCTP user. | ||||
| At association start-up, a primary path is defined for each SCTP | ||||
| endpoint, and is used for normal sending of SCTP packets. | ||||
| On the receiving end, the path management is responsible for | ||||
| verifying the existence of a valid SCTP association to which the | ||||
| inbound SCTP packet belongs before passing it for further processing. | ||||
| Note: Path Management and Packet Validation are done at the same | ||||
| time, so although described separately above, in reality they cannot | ||||
| be performed as separate items. | ||||
| 1.6. Serial Number Arithmetic | 1.6. Serial Number Arithmetic | |||
| It is essential to remember that the actual Transmission Sequence | It is essential to remember that the actual Transmission Sequence | |||
| Number space is finite, though very large. This space ranges from 0 | Number space is finite, though very large. This space ranges from 0 | |||
| to 2**32 - 1. Since the space is finite, all arithmetic dealing with | to 2**32 - 1. Since the space is finite, all arithmetic dealing with | |||
| Transmission Sequence Numbers must be performed modulo 2**32. This | Transmission Sequence Numbers must be performed modulo 2**32. This | |||
| unsigned arithmetic preserves the relationship of sequence numbers as | unsigned arithmetic preserves the relationship of sequence numbers as | |||
| they cycle from 2**32 - 1 to 0 again. There are some subtleties to | they cycle from 2**32 - 1 to 0 again. There are some subtleties to | |||
| computer modulo arithmetic, so great care should be taken in | computer modulo arithmetic, so great care should be taken in | |||
| programming the comparison of such values. When referring to TSNs, | programming the comparison of such values. When referring to TSNs, | |||
| skipping to change at page 16, line 40 ¶ | skipping to change at page 16, line 39 ¶ | |||
| | Chunk #1 | | | Chunk #1 | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | ... | | | ... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Chunk #n | | | Chunk #n | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Multiple chunks can be bundled into one SCTP packet up to the MTU | Multiple chunks can be bundled into one SCTP packet up to the MTU | |||
| size, except for the INIT, INIT ACK, and SHUTDOWN COMPLETE chunks. | size, except for the INIT, INIT ACK, and SHUTDOWN COMPLETE chunks. | |||
| These chunks MUST NOT be bundled with any other chunk in a packet. | These chunks MUST NOT be bundled with any other chunk in a packet. | |||
| See Section 6.10for more details on chunk bundling. | See Section 6.10 for more details on chunk bundling. | |||
| If a user data message doesn't fit into one SCTP packet it can be | If a user data message doesn't fit into one SCTP packet it can be | |||
| fragmented into multiple chunks using the procedure defined in | fragmented into multiple chunks using the procedure defined in | |||
| Section 6.9. | Section 6.9. | |||
| All integer fields in an SCTP packet MUST be transmitted in network | All integer fields in an SCTP packet MUST be transmitted in network | |||
| byte order, unless otherwise stated. | byte order, unless otherwise stated. | |||
| 3.1. SCTP Common Header Field Descriptions | 3.1. SCTP Common Header Field Descriptions | |||
| skipping to change at page 20, line 37 ¶ | skipping to change at page 20, line 37 ¶ | |||
| Chunk Value: variable length | Chunk Value: variable length | |||
| The Chunk Value field contains the actual information to be | The Chunk Value field contains the actual information to be | |||
| transferred in the chunk. The usage and format of this field is | transferred in the chunk. The usage and format of this field is | |||
| dependent on the Chunk Type. | dependent on the Chunk Type. | |||
| The total length of a chunk (including Type, Length, and Value | The total length of a chunk (including Type, Length, and Value | |||
| fields) MUST be a multiple of 4 bytes. If the length of the chunk is | fields) MUST be a multiple of 4 bytes. If the length of the chunk is | |||
| not a multiple of 4 bytes, the sender MUST pad the chunk with all | not a multiple of 4 bytes, the sender MUST pad the chunk with all | |||
| zero bytes, and this padding is not included in the chunk length | zero bytes, and this padding is not included in the chunk length | |||
| field. The sender should never pad with more than 3 bytes. The | field. The sender MUST NOT pad with more than 3 bytes. The receiver | |||
| receiver MUST ignore the padding bytes. | MUST ignore the padding bytes. | |||
| SCTP defined chunks are described in detail in Section 3.3. The | SCTP defined chunks are described in detail in Section 3.3. The | |||
| guidelines for IETF-defined chunk extensions can be found in | guidelines for IETF-defined chunk extensions can be found in | |||
| Section 14.1 of this document. | Section 14.1 of this document. | |||
| 3.2.1. Optional/Variable-length Parameter Format | 3.2.1. Optional/Variable-length Parameter Format | |||
| Chunk values of SCTP control chunks consist of a chunk-type-specific | Chunk values of SCTP control chunks consist of a chunk-type-specific | |||
| header of required fields, followed by zero or more parameters. The | header of required fields, followed by zero or more parameters. The | |||
| optional and variable-length parameters contained in a chunk are | optional and variable-length parameters contained in a chunk are | |||
| skipping to change at page 21, line 42 ¶ | skipping to change at page 21, line 42 ¶ | |||
| Chunk Parameter Value: variable-length. | Chunk Parameter Value: variable-length. | |||
| The Parameter Value field contains the actual information to be | The Parameter Value field contains the actual information to be | |||
| transferred in the parameter. | transferred in the parameter. | |||
| The total length of a parameter (including Type, Parameter Length | The total length of a parameter (including Type, Parameter Length | |||
| and Value fields) MUST be a multiple of 4 bytes. If the length of | and Value fields) MUST be a multiple of 4 bytes. If the length of | |||
| the parameter is not a multiple of 4 bytes, the sender pads the | the parameter is not a multiple of 4 bytes, the sender pads the | |||
| Parameter at the end (i.e., after the Parameter Value field) with | Parameter at the end (i.e., after the Parameter Value field) with | |||
| all zero bytes. The length of the padding is not included in the | all zero bytes. The length of the padding is not included in the | |||
| parameter length field. A sender SHOULD NOT pad with more than 3 | parameter length field. A sender MUST NOT pad with more than 3 | |||
| bytes. The receiver MUST ignore the padding bytes. | bytes. The receiver MUST ignore the padding bytes. | |||
| The Parameter Types are encoded such that the highest-order two | The Parameter Types are encoded such that the highest-order two | |||
| bits specify the action that must be taken if the processing | bits specify the action that must be taken if the processing | |||
| endpoint does not recognize the Parameter Type. | endpoint does not recognize the Parameter Type. | |||
| 00 - Stop processing this parameter; do not process any further | 00 - Stop processing this parameter; do not process any further | |||
| parameters within this chunk. | parameters within this chunk. | |||
| 01 - Stop processing this parameter, do not process any further | 01 - Stop processing this parameter, do not process any further | |||
| parameters within this chunk, and report the unrecognized | parameters within this chunk, and report the unrecognized | |||
| parameter in an 'Unrecognized Parameter', as described in | parameter in an 'Unrecognized Parameter', as described in | |||
| Section 3.2.2. | Section 3.2.2. | |||
| 10 - Skip this parameter and continue processing. | 10 - Skip this parameter and continue processing. | |||
| 11 - Skip this parameter and continue processing but report the | 11 - Skip this parameter and continue processing but report the | |||
| unrecognized parameter in an 'Unrecognized Parameter', as | unrecognized parameter in an 'Unrecognized Parameter', as | |||
| described in Section 3.2.2. | described in Section 3.2.2. | |||
| Please note that in all four cases an INIT-ACK or COOKIE-ECHO | ||||
| chunk is sent. In the 00 or 01 case the processing of the | ||||
| parameters after the unknown parameter is canceled, but no | ||||
| processing already done is rolled back. | ||||
| The actual SCTP parameters are defined in the specific SCTP chunk | Please note that in all four cases an INIT-ACK or COOKIE-ECHO chunk | |||
| sections. The rules for IETF-defined parameter extensions are | is sent. In the 00 or 01 case the processing of the parameters after | |||
| defined in Section 14.2. Note that a parameter type MUST be | the unknown parameter is canceled, but no processing already done is | |||
| unique across all chunks. For example, the parameter type '5' is | rolled back. | |||
| used to represent an IPv4 address (see Section 3.2.2). The value | ||||
| '5' then is reserved across all chunks to represent an IPv4 | The actual SCTP parameters are defined in the specific SCTP chunk | |||
| address and MUST NOT be reused with a different meaning in any | sections. The rules for IETF-defined parameter extensions are | |||
| other chunk. | defined in Section 14.2. Note that a parameter type MUST be unique | |||
| across all chunks. For example, the parameter type '5' is used to | ||||
| represent an IPv4 address (see Section 3.2.2). The value '5' then is | ||||
| reserved across all chunks to represent an IPv4 address and MUST NOT | ||||
| be reused with a different meaning in any other chunk. | ||||
| 3.2.2. Reporting of Unrecognized Parameters | 3.2.2. Reporting of Unrecognized Parameters | |||
| If the receiver of an INIT chunk detects unrecognized parameters and | If the receiver of an INIT chunk detects unrecognized parameters and | |||
| has to report them according to Section 3.2.1, it MUST put the | has to report them according to Section 3.2.1, it MUST put the | |||
| 'Unrecognized Parameter' parameter(s) in the INIT-ACK chunk sent in | 'Unrecognized Parameter' parameter(s) in the INIT-ACK chunk sent in | |||
| response to the INIT-chunk. Note that if the receiver of the INIT | response to the INIT-chunk. Note that if the receiver of the INIT | |||
| chunk is NOT going to establish an association (e.g., due to lack of | chunk is NOT going to establish an association (e.g., due to lack of | |||
| resources), an 'Unrecognized Parameter' would NOT be included with | resources), an 'Unrecognized Parameter' would NOT be included with | |||
| any ABORT being sent to the sender of the INIT. | any ABORT being sent to the sender of the INIT. | |||
| skipping to change at page 29, line 20 ¶ | skipping to change at page 29, line 20 ¶ | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type = 6 | Length = 20 | | | Type = 6 | Length = 20 | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | IPv6 Address | | | IPv6 Address | | |||
| | | | | | | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| IPv6 Address: 128 bit (unsigned integer) | IPv6 Address: 128 bits (unsigned integer) | |||
| Contains an IPv6 address of the sending endpoint. It is binary | Contains an IPv6 address of the sending endpoint. It is binary | |||
| encoded. | encoded. | |||
| Note: A sender MUST NOT use an IPv4-mapped IPv6 address [RFC4291]. | Note: A sender MUST NOT use an IPv4-mapped IPv6 address [RFC4291]. | |||
| but should instead use an IPv4 Address Parameter for an IPv4 | but should instead use an IPv4 Address Parameter for an IPv4 | |||
| address. | address. | |||
| Combined with the Source Port Number in the SCTP common header, | Combined with the Source Port Number in the SCTP common header, | |||
| the value passed in an IPv4 or IPv6 Address parameter indicates a | the value passed in an IPv4 or IPv6 Address parameter indicates a | |||
| skipping to change at page 40, line 8 ¶ | skipping to change at page 40, line 8 ¶ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Heartbeat Info Type=1 | HB Info Length | | | Heartbeat Info Type=1 | HB Info Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| / Sender-specific Heartbeat Info / | / Sender-specific Heartbeat Info / | |||
| \ \ | \ \ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| The Sender-specific Heartbeat Info field should normally include | The Sender-specific Heartbeat Info field should normally include | |||
| information about the sender's current time when this HEARTBEAT | information about the sender's current time when this HEARTBEAT | |||
| chunk is sent and the destination transport address to which this | chunk is sent and the destination transport address to which this | |||
| HEARTBEAT is sent (see Section 8.3). | HEARTBEAT is sent (see Section 8.3). This information is simply | |||
| reflected back by the receiver in the HEARTBEAT ACK message (see | ||||
| Section 3.3.6). Note also that the HEARTBEAT message is both for | ||||
| reachability checking and for Path Verification (see Section 5.4). | ||||
| When a HEARTBEAT chunk is being used for path verification | ||||
| purposes it MUST hold a 64 bit random nonce. | ||||
| 3.3.6. Heartbeat Acknowledgement (HEARTBEAT ACK) (5): | 3.3.6. Heartbeat Acknowledgement (HEARTBEAT ACK) (5): | |||
| An endpoint should send this chunk to its peer endpoint as a response | An endpoint should send this chunk to its peer endpoint as a response | |||
| to a HEARTBEAT chunk (see Section 8.3). A HEARTBEAT ACK is always | to a HEARTBEAT chunk (see Section 8.3). A HEARTBEAT ACK is always | |||
| sent to the source IP address of the IP datagram containing the | sent to the source IP address of the IP datagram containing the | |||
| HEARTBEAT chunk to which this ack is responding. | HEARTBEAT chunk to which this ack is responding. | |||
| The parameter field contains a variable length opaque data structure. | The parameter field contains a variable length opaque data structure. | |||
| skipping to change at page 53, line 32 ¶ | skipping to change at page 53, line 32 ¶ | |||
| o SCTP user primitive calls, e.g., [ASSOCIATE], [SHUTDOWN], [ABORT], | o SCTP user primitive calls, e.g., [ASSOCIATE], [SHUTDOWN], [ABORT], | |||
| o Reception of INIT, COOKIE ECHO, ABORT, SHUTDOWN, etc., control | o Reception of INIT, COOKIE ECHO, ABORT, SHUTDOWN, etc., control | |||
| chunks, or | chunks, or | |||
| o Some timeout events. | o Some timeout events. | |||
| The state diagram in the figures below illustrates state changes, | The state diagram in the figures below illustrates state changes, | |||
| together with the causing events and resulting actions. Note that | together with the causing events and resulting actions. Note that | |||
| some of the error conditions are not shown in the state diagram. | some of the error conditions are not shown in the state diagram. | |||
| Full description of all special cases should be found in the text. | Full description of all special cases are found in the text. | |||
| Note: Chunk names are given in all capital letters, while parameter | Note: Chunk names are given in all capital letters, while parameter | |||
| names have the first letter capitalized, e.g., COOKIE ECHO chunk type | names have the first letter capitalized, e.g., COOKIE ECHO chunk type | |||
| vs. State Cookie parameter. If more than one event/message can occur | vs. State Cookie parameter. If more than one event/message can occur | |||
| which causes a state transition it is labeled (A), (B) etc. | which causes a state transition it is labeled (A), (B) etc. | |||
| ----- -------- (from any state) | ----- -------- (from any state) | |||
| / \ / rcv ABORT [ABORT] | / \ / rcv ABORT [ABORT] | |||
| rcv INIT | | | ---------- or ---------- | rcv INIT | | | ---------- or ---------- | |||
| --------------- | v v delete TCB snd ABORT | --------------- | v v delete TCB snd ABORT | |||
| skipping to change at page 61, line 44 ¶ | skipping to change at page 61, line 44 ¶ | |||
| when the State Cookie is created, and the lifespan of the State | when the State Cookie is created, and the lifespan of the State | |||
| Cookie, along with all the information necessary for it to establish | Cookie, along with all the information necessary for it to establish | |||
| the association. | the association. | |||
| The following steps SHOULD be taken to generate the State Cookie: | The following steps SHOULD be taken to generate the State Cookie: | |||
| 1) Create an association TCB using information from both the | 1) Create an association TCB using information from both the | |||
| received INIT and the outgoing INIT ACK chunk, | received INIT and the outgoing INIT ACK chunk, | |||
| 2) In the TCB, set the creation time to the current time of day, and | 2) In the TCB, set the creation time to the current time of day, and | |||
| the lifespan to the protocol parameter 'Valid.Cookie.Life', | the lifespan to the protocol parameter 'Valid.Cookie.Life' (see | |||
| Section 15 ), | ||||
| 3) From the TCB, identify and collect the minimal subset of | 3) From the TCB, identify and collect the minimal subset of | |||
| information needed to re-create the TCB, and generate a MAC using | information needed to re-create the TCB, and generate a MAC using | |||
| this subset of information and a secret key (see [RFC2104] for an | this subset of information and a secret key (see [RFC2104] for an | |||
| example of generating a MAC), and | example of generating a MAC), and | |||
| 4) Generate the State Cookie by combining this subset of information | 4) Generate the State Cookie by combining this subset of information | |||
| and the resultant MAC. | and the resultant MAC. | |||
| After sending the INIT ACK with the State Cookie parameter, the | After sending the INIT ACK with the State Cookie parameter, the | |||
| skipping to change at page 62, line 35 ¶ | skipping to change at page 62, line 35 ¶ | |||
| When an endpoint (in the COOKIE WAIT state) receives an INIT ACK | When an endpoint (in the COOKIE WAIT state) receives an INIT ACK | |||
| chunk with a State Cookie parameter, it MUST immediately send a | chunk with a State Cookie parameter, it MUST immediately send a | |||
| COOKIE ECHO chunk to its peer with the received State Cookie. The | COOKIE ECHO chunk to its peer with the received State Cookie. The | |||
| sender MAY also add any pending DATA chunks to the packet after the | sender MAY also add any pending DATA chunks to the packet after the | |||
| COOKIE ECHO chunk. | COOKIE ECHO chunk. | |||
| The endpoint shall also start the T1-cookie timer after sending out | The endpoint shall also start the T1-cookie timer after sending out | |||
| the COOKIE ECHO chunk. If the timer expires, the endpoint shall | the COOKIE ECHO chunk. If the timer expires, the endpoint shall | |||
| retransmit the COOKIE ECHO chunk and restart the T1-cookie timer. | retransmit the COOKIE ECHO chunk and restart the T1-cookie timer. | |||
| This is repeated until either a COOKIE ACK is received or | This is repeated until either a COOKIE ACK is received or | |||
| 'Max.Init.Retransmits' is reached causing the peer endpoint to be | 'Max.Init.Retransmits' (see Section 15 is reached causing the peer | |||
| marked unreachable (and thus the association enters the CLOSED | endpoint to be marked unreachable (and thus the association enters | |||
| state). | the CLOSED state). | |||
| 5.1.5. State Cookie Authentication | 5.1.5. State Cookie Authentication | |||
| When an endpoint receives a COOKIE ECHO chunk from another endpoint | When an endpoint receives a COOKIE ECHO chunk from another endpoint | |||
| with which it has no association, it shall take the following | with which it has no association, it shall take the following | |||
| actions: | actions: | |||
| 1) Compute a MAC using the TCB data carried in the State Cookie and | 1) Compute a MAC using the TCB data carried in the State Cookie and | |||
| the secret key (note the timestamp in the State Cookie MAY be | the secret key (note the timestamp in the State Cookie MAY be | |||
| used to determine which secret key to use). Reference [RFC2104] | used to determine which secret key to use). Reference [RFC2104] | |||
| skipping to change at page 93, line 46 ¶ | skipping to change at page 93, line 46 ¶ | |||
| homing. SCTP is designed to establish robust communication | homing. SCTP is designed to establish robust communication | |||
| associations between two endpoints each of which may be reachable by | associations between two endpoints each of which may be reachable by | |||
| more than one transport address. Potentially different addresses may | more than one transport address. Potentially different addresses may | |||
| lead to different data paths between the two endpoints, thus ideally | lead to different data paths between the two endpoints, thus ideally | |||
| one may need a separate set of congestion control parameters for each | one may need a separate set of congestion control parameters for each | |||
| of the paths. The treatment here of congestion control for multi- | of the paths. The treatment here of congestion control for multi- | |||
| homed receivers is new with SCTP and may require refinement in the | homed receivers is new with SCTP and may require refinement in the | |||
| future. The current algorithms make the following assumptions: | future. The current algorithms make the following assumptions: | |||
| o The sender usually uses the same destination address until being | o The sender usually uses the same destination address until being | |||
| instructed by the upper layer otherwise; however, SCTP may change | instructed by the upper layer to do otherwise; however, SCTP may | |||
| to an alternate destination in the event an address is marked | change to an alternate destination in the event an address is | |||
| inactive (see Section 8.2). Also, SCTP may retransmit to a | marked inactive (see Section 8.2). Also, SCTP may retransmit to a | |||
| different transport address than the original transmission. | different transport address than the original transmission. | |||
| o The sender keeps a separate congestion control parameter set for | o The sender keeps a separate congestion control parameter set for | |||
| each of the destination addresses it can send to (not each source- | each of the destination addresses it can send to (not each source- | |||
| destination pair but for each destination). The parameters should | destination pair but for each destination). The parameters should | |||
| decay if the address is not used for a long enough time period. | decay if the address is not used for a long enough time period. | |||
| o For each of the destination addresses, an endpoint does slow-start | o For each of the destination addresses, an endpoint does slow-start | |||
| upon the first transmission to that address. | upon the first transmission to that address. | |||
| skipping to change at page 99, line 12 ¶ | skipping to change at page 99, line 12 ¶ | |||
| each TSN hole reported by a SACK. The counter increments for each | each TSN hole reported by a SACK. The counter increments for each | |||
| consecutive SACK reporting the TSN hole. After reaching 3 and | consecutive SACK reporting the TSN hole. After reaching 3 and | |||
| starting the fast retransmit procedure, the counter resets to 0. | starting the fast retransmit procedure, the counter resets to 0. | |||
| Because cwnd in SCTP indirectly bounds the number of outstanding | Because cwnd in SCTP indirectly bounds the number of outstanding | |||
| TSN's, the effect of TCP fast-recovery is achieved automatically with | TSN's, the effect of TCP fast-recovery is achieved automatically with | |||
| no adjustment to the congestion control window size. | no adjustment to the congestion control window size. | |||
| 7.3. Path MTU Discovery | 7.3. Path MTU Discovery | |||
| [RFC1191] specifies "Path MTU Discovery", whereby an endpoint | [RFC4821] specifies "Packetization Layer Path MTU Discovery", whereby | |||
| maintains an estimate of the maximum transmission unit (MTU) along a | an endpoint maintains an estimate of the maximum transmission unit | |||
| given Internet path and refrains from sending packets along that path | (MTU) along a given Internet path and refrains from sending packets | |||
| which exceed the MTU, other than occasional attempts to probe for a | along that path which exceed the MTU, other than occasional attempts | |||
| change in the Path MTU (PMTU). [RFC1191] is thorough in its | to probe for a change in the Path MTU (PMTU). [RFC4821] is thorough | |||
| discussion of the MTU discovery mechanism and strategies for | in its discussion of the MTU discovery mechanism and strategies for | |||
| determining the current end-to-end MTU setting as well as detecting | determining the current end-to-end MTU setting as well as detecting | |||
| changes in this value. [RFC1981] specifies the same mechanisms for | changes in this value. | |||
| IPv6. An SCTP sender using IPv6 MUST use Path MTU Discovery unless | ||||
| all packets are less than the minimum IPv6 MTU [RFC2460]. | ||||
| An endpoint SHOULD apply these techniques, and SHOULD do so on a per- | An endpoint SHOULD apply these techniques, and SHOULD do so on a per- | |||
| destination-address basis. | destination-address basis. | |||
| There are 4 ways in which SCTP differs from the description in | There are 2 important SCTP specific points regarding path MTU | |||
| [RFC1191] of applying MTU discovery to TCP: | discovery: | |||
| 1) SCTP associations can span multiple addresses. An endpoint MUST | 1) SCTP associations can span multiple addresses. An endpoint MUST | |||
| maintain separate MTU estimates for each destination address of | maintain separate MTU estimates for each destination address of | |||
| its peer. | its peer. | |||
| 2) Elsewhere in this document, when the term "MTU" is discussed, it | 2) The sender should track an association PMTU which will be the | |||
| refers to the MTU associated with the destination address | ||||
| corresponding to the context of the discussion. | ||||
| 3) Unlike TCP, SCTP does not have a notion of "Maximum Segment | ||||
| Size". Accordingly, the MTU for each destination address SHOULD | ||||
| be initialized to a value no larger than the link MTU for the | ||||
| local interface to which packets for that remote destination | ||||
| address will be routed. | ||||
| 4) Since data transmission in SCTP is naturally structured in terms | ||||
| of TSNs rather than bytes (as is the case for TCP), the | ||||
| discussion in Section 6.5 of [RFC1191] applies: When | ||||
| retransmitting an IP datagram to a remote address for which the | ||||
| IP datagram appears too large for the path MTU to that address, | ||||
| the IP datagram SHOULD be retransmitted without the DF bit set, | ||||
| allowing it to possibly be fragmented. Transmissions of new IP | ||||
| datagrams MUST have DF set. | ||||
| 5) The sender should track an association PMTU which will be the | ||||
| smallest PMTU discovered for all of the peer's destination | smallest PMTU discovered for all of the peer's destination | |||
| addresses. When fragmenting messages into multiple parts this | addresses. When fragmenting messages into multiple parts this | |||
| association PMTU should be used to calculate the size of each | association PMTU should be used to calculate the size of each | |||
| fragment. This will allow retransmissions to be seamlessly sent | fragment. This will allow retransmissions to be seamlessly sent | |||
| to an alternate address without encountering IP fragmentation. | to an alternate address without encountering IP fragmentation. | |||
| Other than these differences, the discussion of TCP's use of MTU | ||||
| discovery in [RFC1191] and [RFC1981] applies to SCTP on a per- | ||||
| destination-address basis. | ||||
| Note: For IPv6 destination addresses the DF bit does not exist, | ||||
| instead the IP datagram must be fragmented as described in [RFC2460]. | ||||
| 8. Fault Management | 8. Fault Management | |||
| 8.1. Endpoint Failure Detection | 8.1. Endpoint Failure Detection | |||
| An endpoint shall keep a counter on the total number of consecutive | An endpoint shall keep a counter on the total number of consecutive | |||
| retransmissions to its peer (this includes retransmissions to all the | retransmissions to its peer (this includes retransmissions to all the | |||
| destination transport addresses of the peer if it is multi-homed), | destination transport addresses of the peer if it is multi-homed), | |||
| including unacknowledged HEARTBEAT Chunks. If the value of this | including unacknowledged HEARTBEAT Chunks. If the value of this | |||
| counter exceeds the limit indicated in the protocol parameter | counter exceeds the limit indicated in the protocol parameter | |||
| 'Association.Max.Retrans', the endpoint shall consider the peer | 'Association.Max.Retrans', the endpoint shall consider the peer | |||
| skipping to change at page 111, line 29 ¶ | skipping to change at page 110, line 46 ¶ | |||
| Format: ASSOCIATE(local SCTP instance name, | Format: ASSOCIATE(local SCTP instance name, | |||
| destination transport addr, outbound stream count) | destination transport addr, outbound stream count) | |||
| -> association id [,destination transport addr list] | -> association id [,destination transport addr list] | |||
| [,outbound stream count] | [,outbound stream count] | |||
| This primitive allows the upper layer to initiate an association to a | This primitive allows the upper layer to initiate an association to a | |||
| specific peer endpoint. | specific peer endpoint. | |||
| The peer endpoint shall be specified by one of the transport | The peer endpoint shall be specified by one of the transport | |||
| addresses which defines the endpoint (see Section 1.4). If the local | addresses which defines the endpoint (see Section 1.3). If the local | |||
| SCTP instance has not been initialized, the ASSOCIATE is considered | SCTP instance has not been initialized, the ASSOCIATE is considered | |||
| an error. | an error. | |||
| An association id, which is a local handle to the SCTP association, | An association id, which is a local handle to the SCTP association, | |||
| will be returned on successful establishment of the association. If | will be returned on successful establishment of the association. If | |||
| SCTP is not able to open an SCTP association with the peer endpoint, | SCTP is not able to open an SCTP association with the peer endpoint, | |||
| an error is returned. | an error is returned. | |||
| Other association parameters may be returned, including the complete | Other association parameters may be returned, including the complete | |||
| destination transport addresses of the peer as well as the outbound | destination transport addresses of the peer as well as the outbound | |||
| skipping to change at page 124, line 50 ¶ | skipping to change at page 124, line 25 ¶ | |||
| lower layer transport services is considered to be too great, | lower layer transport services is considered to be too great, | |||
| additional integrity protection is required. If this additional | additional integrity protection is required. If this additional | |||
| protection were provided in the application-layer, the SCTP header | protection were provided in the application-layer, the SCTP header | |||
| would remain vulnerable to deliberate integrity attacks. While the | would remain vulnerable to deliberate integrity attacks. While the | |||
| existing SCTP mechanisms for detection of packet replays are | existing SCTP mechanisms for detection of packet replays are | |||
| considered sufficient for normal operation, stronger protections are | considered sufficient for normal operation, stronger protections are | |||
| needed to protect SCTP when the operating environment contains | needed to protect SCTP when the operating environment contains | |||
| significant risk of deliberate attacks from a sophisticated | significant risk of deliberate attacks from a sophisticated | |||
| adversary. | adversary. | |||
| In order to promote software code-reuse, to avoid re-inventing the | The SCTP Authentication extension SCTP-AUTH | |||
| wheel, and to avoid gratuitous complexity to SCTP, the IP | [I-D.ietf-tsvwg-sctp-auth] MAY be used when the threat environment | |||
| Authentication Header [RFC4302] SHOULD be used when the threat | requires stronger integrity protections, but does not require | |||
| environment requires stronger integrity protections, but does not | confidentiality. | |||
| require confidentiality. | ||||
| A widely implemented BSD Sockets API extension exists for | ||||
| applications to request IP security services, such as AH or ESP from | ||||
| an operating system kernel. Applications can use such an API to | ||||
| request AH whenever AH use is appropriate. | ||||
| 11.2.3. Protecting Confidentiality | 11.2.3. Protecting Confidentiality | |||
| In most cases, the risk of breach of confidentiality applies to the | In most cases, the risk of breach of confidentiality applies to the | |||
| signaling data payload, not to the SCTP or lower-layer protocol | signaling data payload, not to the SCTP or lower-layer protocol | |||
| overheads. If that is true, encryption of the SCTP user data only | overheads. If that is true, encryption of the SCTP user data only | |||
| might be considered. As with the supplementary checksum service, | might be considered. As with the supplementary checksum service, | |||
| user data encryption MAY be performed by the SCTP user application. | user data encryption MAY be performed by the SCTP user application. | |||
| Alternately, the user application MAY use an implementation-specific | Alternately, the user application MAY use an implementation-specific | |||
| API to request that the IP Encapsulating Security Payload (ESP) | API to request that the IP Encapsulating Security Payload (ESP) | |||
| skipping to change at page 127, line 36 ¶ | skipping to change at page 126, line 48 ¶ | |||
| it. | it. | |||
| - by deliberately allowing the impersonation to be detected, thereby | - by deliberately allowing the impersonation to be detected, thereby | |||
| provoking counter-measures which cause the impersonated node to be | provoking counter-measures which cause the impersonated node to be | |||
| locked out of the target SCTP node. | locked out of the target SCTP node. | |||
| - by interfering with an established association by inserting | - by interfering with an established association by inserting | |||
| extraneous content such as a SHUTDOWN request. | extraneous content such as a SHUTDOWN request. | |||
| SCTP reduces the risk of blind masquerade attacks through IP spoofing | SCTP reduces the risk of blind masquerade attacks through IP spoofing | |||
| by use of the four-way startup handshake. Man-in-the-middle | by use of the four-way startup handshake. Because the initial | |||
| masquerade attacks are discussed in Section 11.3 below. Because the | exchange is memory less, no lockout mechanism is triggered by blind | |||
| initial exchange is memory less, no lockout mechanism is triggered by | masquerade attacks. In addition, the INIT ACK containing the State | |||
| blind masquerade attacks. In addition, the INIT ACK containing the | Cookie is transmitted back to the IP address from which it received | |||
| State Cookie is transmitted back to the IP address from which it | the INIT. Thus the attacker would not receive the INIT ACK | |||
| received the INIT. Thus the attacker would not receive the INIT ACK | ||||
| containing the State Cookie. SCTP protects against insertion of | containing the State Cookie. SCTP protects against insertion of | |||
| extraneous packets into the flow of an established association by use | extraneous packets into the flow of an established association by use | |||
| of the Verification Tag. | of the Verification Tag. | |||
| Logging of received INIT requests and abnormalities such as | Logging of received INIT requests and abnormalities such as | |||
| unexpected INIT ACKs might be considered as a way to detect patterns | unexpected INIT ACKs might be considered as a way to detect patterns | |||
| of hostile activity. However, the potential usefulness of such | of hostile activity. However, the potential usefulness of such | |||
| logging must be weighed against the increased SCTP startup processing | logging must be weighed against the increased SCTP startup processing | |||
| it implies, rendering the SCTP node more vulnerable to flooding | it implies, rendering the SCTP node more vulnerable to flooding | |||
| attacks. Logging is pointless without the establishment of operating | attacks. Logging is pointless without the establishment of operating | |||
| skipping to change at page 128, line 21 ¶ | skipping to change at page 127, line 33 ¶ | |||
| of associations between the attacker's node and the target, or | of associations between the attacker's node and the target, or | |||
| transfer of large volumes of information within a legitimately- | transfer of large volumes of information within a legitimately- | |||
| established association. | established association. | |||
| Policy limits should be placed on the number of associations per | Policy limits should be placed on the number of associations per | |||
| adjoining SCTP node. SCTP user applications should be capable of | adjoining SCTP node. SCTP user applications should be capable of | |||
| detecting large volumes of illegitimate or "no-op" messages within a | detecting large volumes of illegitimate or "no-op" messages within a | |||
| given association and either logging or terminating the association | given association and either logging or terminating the association | |||
| as a result, based on local policy. | as a result, based on local policy. | |||
| 11.3. Protection against Fraud and Repudiation | 11.3. SCTP Interactions with Firewalls | |||
| The objective of fraud is to obtain services without authorization | ||||
| and specifically without paying for them. In order to achieve this | ||||
| objective, the attacker must induce the SCTP user application at the | ||||
| target SCTP node to provide the desired service while accepting | ||||
| invalid billing data or failing to collect it. Repudiation is a | ||||
| related problem, since it may occur as a deliberate act of fraud or | ||||
| simply because the repudiating party kept inadequate records of | ||||
| service received. | ||||
| Potential fraudulent attacks include interception and misuse of | ||||
| authorizing information such as credit card numbers, blind masquerade | ||||
| and replay, and man-in-the middle attacks which modify the packets | ||||
| passing through a target SCTP association in real time. | ||||
| The interception attack is countered by the confidentiality measures | ||||
| discussed in Section 11.2.3 above. | ||||
| Section 11.2.4.2 describes how SCTP is resistant to blind masquerade | ||||
| attacks, as a result of the four-way startup handshake and the | ||||
| Verification Tag. The Verification Tag and TSN together are | ||||
| protections against blind replay attacks, where the replay is into an | ||||
| existing association. | ||||
| However, SCTP does not protect against man-in-the-middle attacks | ||||
| where the attacker is able to intercept and alter the packets sent | ||||
| and received in an association. For example, the INIT ACK will have | ||||
| sufficient information sent on the wire for an adversary in the | ||||
| middle to hijack an existing SCTP association. Where a significant | ||||
| possibility of such attacks is seen to exist, or where possible | ||||
| repudiation is an issue, the use of the IPSEC AH service is | ||||
| recommended to ensure both the integrity and the authenticity of the | ||||
| SCTP packets passed. | ||||
| SCTP also provides no protection against attacks originating at or | ||||
| beyond the SCTP node and taking place within the context of an | ||||
| existing association. Prevention of such attacks should be covered | ||||
| by appropriate security policies at the host site, as discussed in | ||||
| Section 11.2.1. | ||||
| 11.4. SCTP Interactions with Firewalls | ||||
| It is helpful for some firewalls if they can inspect just the first | It is helpful for some firewalls if they can inspect just the first | |||
| fragment of a fragmented SCTP packet and unambiguously determine | fragment of a fragmented SCTP packet and unambiguously determine | |||
| whether it corresponds to an INIT chunk (for further information, | whether it corresponds to an INIT chunk (for further information, | |||
| please refer to [RFC1858]). Accordingly, we stress the requirements, | please refer to [RFC1858]). Accordingly, we stress the requirements, | |||
| stated in Section 3.1, that (1) an INIT chunk MUST NOT be bundled | stated in Section 3.1, that (1) an INIT chunk MUST NOT be bundled | |||
| with any other chunk in a packet, and (2) a packet containing an INIT | with any other chunk in a packet, and (2) a packet containing an INIT | |||
| chunk MUST have a zero Verification Tag. Furthermore, we require that | chunk MUST have a zero Verification Tag. Furthermore, we require that | |||
| the receiver of an INIT chunk MUST enforce these rules by silently | the receiver of an INIT chunk MUST enforce these rules by silently | |||
| discarding an arriving packet with an INIT chunk that is bundled with | discarding an arriving packet with an INIT chunk that is bundled with | |||
| other chunks. | other chunks. | |||
| 11.5. Protection of Non-SCTP Capable Hosts. | 11.4. Protection of Non-SCTP Capable Hosts. | |||
| To provide a non-SCTP capable host with the same level of protection | To provide a non-SCTP capable host with the same level of protection | |||
| against attacks as for SCTP-capable ones, all SCTP stacks MUST | against attacks as for SCTP-capable ones, all SCTP stacks MUST | |||
| implement the ICMP handling described in Appendix C. | implement the ICMP handling described in Appendix C. | |||
| When an SCTP stack receives a packet containing multiple control or | When an SCTP stack receives a packet containing multiple control or | |||
| DATA chunks and the processing of the packet requires the sending of | DATA chunks and the processing of the packet requires the sending of | |||
| multiple chunks in response, the sender of the response chunk(s) MUST | multiple chunks in response, the sender of the response chunk(s) MUST | |||
| NOT send more than one packet. If bundling is supported, multiple | NOT send more than one packet. If bundling is supported, multiple | |||
| response chunks that fit into a single packet MAY be bundled together | response chunks that fit into a single packet MAY be bundled together | |||
| skipping to change at page 130, line 11 ¶ | skipping to change at page 128, line 32 ¶ | |||
| ERROR parameters to reduce the size of the INIT-ACK. Due to a | ERROR parameters to reduce the size of the INIT-ACK. Due to a | |||
| combination of the size of the COOKIE parameter and the number of | combination of the size of the COOKIE parameter and the number of | |||
| addresses a receiver of an INIT may be indicating to a peer, it is | addresses a receiver of an INIT may be indicating to a peer, it is | |||
| always possible that the INIT-ACK will be larger than the original | always possible that the INIT-ACK will be larger than the original | |||
| INIT. An SCTP implementation SHOULD attempt to make the INIT-ACK as | INIT. An SCTP implementation SHOULD attempt to make the INIT-ACK as | |||
| small as possible to reduce the possibility of byte amplification | small as possible to reduce the possibility of byte amplification | |||
| attacks. | attacks. | |||
| 12. Network Management Considerations | 12. Network Management Considerations | |||
| A MIB for SCTP is defined in [RFC3873]. | The MIB module for SCTP defined in [RFC3873] applies for the version | |||
| of the protocol specified in this document. | ||||
| 13. Recommended Transmission Control Block (TCB) Parameters | 13. Recommended Transmission Control Block (TCB) Parameters | |||
| This section details a recommended set of parameters that should be | This section details a recommended set of parameters that should be | |||
| contained within the TCB for an implementation. This section is for | contained within the TCB for an implementation. This section is for | |||
| illustrative purposes and should not be deemed as requirements on an | illustrative purposes and should not be deemed as requirements on an | |||
| implementation or as an exhaustive list of all parameters inside an | implementation or as an exhaustive list of all parameters inside an | |||
| SCTP TCB. Each implementation may need its own additional parameters | SCTP TCB. Each implementation may need its own additional parameters | |||
| for optimization. | for optimization. | |||
| skipping to change at page 148, line 27 ¶ | skipping to change at page 147, line 27 ¶ | |||
| [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | |||
| December 2005. | December 2005. | |||
| [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", | |||
| RFC 4303, December 2005. | RFC 4303, December 2005. | |||
| [RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", | [RFC4306] Kaufman, C., "Internet Key Exchange (IKEv2) Protocol", | |||
| RFC 4306, December 2005. | RFC 4306, December 2005. | |||
| [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | ||||
| Discovery", RFC 4821, March 2007. | ||||
| 17.2. Informative References | 17.2. Informative References | |||
| [FALL96] Fall, K. and S. Floyd, "Simulation-based Comparisons of | [FALL96] Fall, K. and S. Floyd, "Simulation-based Comparisons of | |||
| Tahoe, Reno, and SACK TCP", SIGCOMM'99 V. 26 N. 3 pp 5-21, | Tahoe, Reno, and SACK TCP", SIGCOMM'99 V. 26 N. 3 pp 5-21, | |||
| July 1996. | July 1996. | |||
| [SAVAGE99] | [SAVAGE99] | |||
| Savage, S., Cardwell, N., Wetherall, D., and T. Anderson, | Savage, S., Cardwell, N., Wetherall, D., and T. Anderson, | |||
| "TCP Congestion Control with a Misbehaving Receiver", ACM | "TCP Congestion Control with a Misbehaving Receiver", ACM | |||
| Computer Communications Review 29(5), October 1999. | Computer Communications Review 29(5), October 1999. | |||
| skipping to change at page 149, line 13 ¶ | skipping to change at page 148, line 16 ¶ | |||
| Considerations for IP Fragment Filtering", RFC 1858, | Considerations for IP Fragment Filtering", RFC 1858, | |||
| October 1995. | October 1995. | |||
| [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | |||
| Hashing for Message Authentication", RFC 2104, | Hashing for Message Authentication", RFC 2104, | |||
| February 1997. | February 1997. | |||
| [RFC2196] Fraser, B., "Site Security Handbook", RFC 2196, | [RFC2196] Fraser, B., "Site Security Handbook", RFC 2196, | |||
| September 1997. | September 1997. | |||
| [RFC2367] McDonald, D., Metz, C., and B. Phan, "PF_KEY Key | ||||
| Management API, Version 2", RFC 2367, July 1998. | ||||
| [RFC2522] Karn, P. and W. Simpson, "Photuris: Session-Key Management | [RFC2522] Karn, P. and W. Simpson, "Photuris: Session-Key Management | |||
| Protocol", RFC 2522, March 1999. | Protocol", RFC 2522, March 1999. | |||
| [RFC2960] Stewart, R., Xie, Q., Morneault, K., Sharp, C., | [RFC2960] Stewart, R., Xie, Q., Morneault, K., Sharp, C., | |||
| Schwarzbauer, H., Taylor, T., Rytina, I., Kalla, M., | Schwarzbauer, H., Taylor, T., Rytina, I., Kalla, M., | |||
| Zhang, L., and V. Paxson, "Stream Control Transmission | Zhang, L., and V. Paxson, "Stream Control Transmission | |||
| Protocol", RFC 2960, October 2000. | Protocol", RFC 2960, October 2000. | |||
| [RFC3309] Stone, J., Stewart, R., and D. Otis, "Stream Control | ||||
| Transmission Protocol (SCTP) Checksum Change", RFC 3309, | ||||
| September 2002. | ||||
| [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | |||
| of Explicit Congestion Notification (ECN) to IP", | of Explicit Congestion Notification (ECN) to IP", | |||
| RFC 3168, September 2001. | RFC 3168, September 2001. | |||
| [RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness | [RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness | |||
| Requirements for Security", BCP 106, RFC 4086, June 2005. | Requirements for Security", BCP 106, RFC 4086, June 2005. | |||
| [RFC4460] Stewart, R., Arias-Rodriguez, I., Poon, K., Caro, A., and | [RFC4460] Stewart, R., Arias-Rodriguez, I., Poon, K., Caro, A., and | |||
| M. Tuexen, "Stream Control Transmission Protocol (SCTP) | M. Tuexen, "Stream Control Transmission Protocol (SCTP) | |||
| Specification Errata and Issues", RFC 4460, April 2006. | Specification Errata and Issues", RFC 4460, April 2006. | |||
| [I-D.ietf-tsvwg-sctp-auth] | ||||
| Tuexen, M., "Authenticated Chunks for Stream Control | ||||
| Transmission Protocol (SCTP)", | ||||
| draft-ietf-tsvwg-sctp-auth-08 (work in progress), | ||||
| February 2007. | ||||
| Author's Address | Author's Address | |||
| Randall R. Stewart | Randall R. Stewart | |||
| Editor | Editor | |||
| 4875 Forest Drive | 4875 Forest Drive | |||
| Suite 200 | Suite 200 | |||
| Columbia, SC 29206 | Columbia, SC 29206 | |||
| US | US | |||
| Email: rrs@cisco.com | Email: rrs@cisco.com | |||
| End of changes. 40 change blocks. | ||||
| 353 lines changed or deleted | 301 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||