| < draft-ietf-tsvwg-sctp-ndata-07.txt | draft-ietf-tsvwg-sctp-ndata-08.txt > | |||
|---|---|---|---|---|
| Network Working Group R. Stewart | Network Working Group R. Stewart | |||
| Internet-Draft Netflix, Inc. | Internet-Draft Netflix, Inc. | |||
| Intended status: Standards Track M. Tuexen | Intended status: Standards Track M. Tuexen | |||
| Expires: January 22, 2017 Muenster Univ. of Appl. Sciences | Expires: May 4, 2017 Muenster Univ. of Appl. Sciences | |||
| S. Loreto | S. Loreto | |||
| Ericsson | Ericsson | |||
| R. Seggelmann | R. Seggelmann | |||
| Metafinanz Informationssysteme GmbH | Metafinanz Informationssysteme GmbH | |||
| July 21, 2016 | October 31, 2016 | |||
| Stream Schedulers and User Message Interleaving for the Stream Control | Stream Schedulers and User Message Interleaving for the Stream Control | |||
| Transmission Protocol | Transmission Protocol | |||
| draft-ietf-tsvwg-sctp-ndata-07.txt | draft-ietf-tsvwg-sctp-ndata-08.txt | |||
| Abstract | Abstract | |||
| The Stream Control Transmission Protocol (SCTP) is a message oriented | The Stream Control Transmission Protocol (SCTP) is a message oriented | |||
| transport protocol supporting arbitrary large user messages. | transport protocol supporting arbitrary large user messages. This | |||
| However, the sender can not interleave different user messages which | document adds a new data chunk to SCTP. This allows a sender to | |||
| causes head of line blocking at the sender side. To overcome this | interleave different user messages that would otherwise result in | |||
| limitation, this document adds a new data chunk to SCTP. | head of line blocking at the sender. | |||
| Whenever an SCTP sender is allowed to send a user data, it can | Whenever an SCTP sender is allowed to send user data, it may choose | |||
| possibly choose from multiple outgoing SCTP streams. Multiple ways | from multiple outgoing SCTP streams. Multiple ways for performing | |||
| for this selection, called stream schedulers, are defined. Some of | this selection, called stream schedulers, are defined. A stream | |||
| them don't require the support of user message interleaving, some do. | scheduler can choose to either implement, or not implement, user | |||
| message interleaving. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| 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." | |||
| This Internet-Draft will expire on January 22, 2017. | This Internet-Draft will expire on May 4, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 26 ¶ | skipping to change at page 2, line 26 ¶ | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.2. Conventions . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2. Conventions . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2. User Message Interleaving . . . . . . . . . . . . . . . . . . 5 | 2. User Message Interleaving . . . . . . . . . . . . . . . . . . 5 | |||
| 2.1. The I-DATA Chunk supporting User Message Interleaving . . 5 | 2.1. The I-DATA Chunk supporting User Message Interleaving . . 6 | |||
| 2.2. Procedures . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.2. Procedures . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.2.1. Negotiation . . . . . . . . . . . . . . . . . . . . . 7 | 2.2.1. Negotiation . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.2.2. Sender Side Considerations . . . . . . . . . . . . . 8 | 2.2.2. Sender Side Considerations . . . . . . . . . . . . . 8 | |||
| 2.2.3. Receiver Side Considerations . . . . . . . . . . . . 8 | 2.2.3. Receiver Side Considerations . . . . . . . . . . . . 8 | |||
| 2.3. Interaction with other SCTP Extensions . . . . . . . . . 8 | 2.3. Interaction with other SCTP Extensions . . . . . . . . . 9 | |||
| 2.3.1. SCTP Partial Reliability Extension . . . . . . . . . 9 | 2.3.1. SCTP Partial Reliability Extension . . . . . . . . . 9 | |||
| 2.3.2. SCTP Stream Reconfiguration Extension . . . . . . . . 10 | 2.3.2. SCTP Stream Reconfiguration Extension . . . . . . . . 10 | |||
| 3. Stream Schedulers . . . . . . . . . . . . . . . . . . . . . . 10 | 3. Stream Schedulers . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.1. First Come First Serve (SCTP_SS_FCFS) . . . . . . . . . . 10 | 3.1. First Come First Serve (SCTP_SS_FCFS) . . . . . . . . . . 10 | |||
| 3.2. Round Robin Scheduler (SCTP_SS_RR) . . . . . . . . . . . 11 | 3.2. Round Robin Scheduler (SCTP_SS_RR) . . . . . . . . . . . 11 | |||
| 3.3. Round Robin Scheduler per Packet (SCTP_SS_RR_PKT) . . . . 11 | 3.3. Round Robin Scheduler per Packet (SCTP_SS_RR_PKT) . . . . 11 | |||
| 3.4. Priority Based Scheduler (SCTP_SS_PRIO) . . . . . . . . . 11 | 3.4. Priority Based Scheduler (SCTP_SS_PRIO) . . . . . . . . . 11 | |||
| 3.5. Fair Bandwidth Scheduler (SCTP_SS_FB) . . . . . . . . . . 11 | 3.5. Fair Bandwidth Scheduler (SCTP_SS_FB) . . . . . . . . . . 11 | |||
| 3.6. Weighted Fair Queueing Scheduler (SCTP_SS_WFQ) . . . . . 11 | 3.6. Weighted Fair Queueing Scheduler (SCTP_SS_WFQ) . . . . . 11 | |||
| 4. Socket API Considerations . . . . . . . . . . . . . . . . . . 12 | 4. Socket API Considerations . . . . . . . . . . . . . . . . . . 12 | |||
| skipping to change at page 3, line 20 ¶ | skipping to change at page 3, line 20 ¶ | |||
| 1. Introduction | 1. Introduction | |||
| 1.1. Overview | 1.1. Overview | |||
| When SCTP [RFC4960] was initially designed it was mainly envisioned | When SCTP [RFC4960] was initially designed it was mainly envisioned | |||
| for the transport of small signaling messages. Late in the design | for the transport of small signaling messages. Late in the design | |||
| stage it was decided to add support for fragmentation and reassembly | stage it was decided to add support for fragmentation and reassembly | |||
| of larger messages with the thought that someday Session Initiation | of larger messages with the thought that someday Session Initiation | |||
| Protocol (SIP) [RFC3261] style signaling messages may also need to | Protocol (SIP) [RFC3261] style signaling messages may also need to | |||
| use SCTP and a single MTU sized message would be too small. | use SCTP and a single Maximum Transmission Unit (MTU) sized message | |||
| Unfortunately this design decision, though valid at the time, did not | would be too small. Unfortunately this design decision, though valid | |||
| account for other applications which might send very large messages | at the time, did not account for other applications that might send | |||
| over SCTP. When such large messages are now sent over SCTP a form of | large messages over SCTP. When such large messages are sent over | |||
| sender side head of line blocking becomes created within the | SCTP as specified in [RFC4960] can result in a form of sender side | |||
| protocol. This head of line blocking is caused by the use of the | head of line blocking (e.g., when the transmission of an urgent | |||
| Transmission Sequence Number (TSN) for three different purposes: | message is blocked from transmission because the sender has started | |||
| transmission of another, possibly large, message). This head of line | ||||
| blocking is caused by the use of the Transmission Sequence Number | ||||
| (TSN) for three different purposes: | ||||
| 1. As an identifier for DATA chunks to provide a reliable transfer. | 1. As an identifier for DATA chunks to provide a reliable transfer. | |||
| 2. As an identifier for the sequence of fragments to allow | 2. As an identifier for the sequence of fragments to allow | |||
| reassembly. | reassembly. | |||
| 3. As a sequence number allowing to have up to 2**16 - 1 Stream | 3. As a sequence number allowing to have up to 2**16 - 1 Stream | |||
| Sequence Numbers (SSNs) outstanding. | Sequence Numbers (SSNs) outstanding. | |||
| The protocol requires all fragments of a user message to have | The protocol requires all fragments of a user message to have | |||
| consecutive TSNs. Therefore it is impossible for the sender to | consecutive TSNs. Therefore it is impossible for the sender to | |||
| interleave different user messages. | interleave different user messages. | |||
| This document also defines several stream schedulers for general SCTP | This document also defines several stream schedulers for general SCTP | |||
| associations. If support for user message interleaving has been | associations. If support for user message interleaving has been | |||
| negotiated, several more schedulers are available. | negotiated, several more schedulers are available. | |||
| The following Figure 1 illustrates the behaviour of a round robin | The following Figure 1 illustrates the behaviour of a round robin | |||
| stream scheduler using DATA chunks. Please note that the use of such | stream scheduler using DATA chunks. Please note that the use of such | |||
| an scheduler implies late TSN assignment but it can be used with an | a scheduler implies late TSN assignment but it can be used with an | |||
| [RFC4960] compliant implementation not supporting user message | [RFC4960] compliant implementation not supporting user message | |||
| interleaving. | interleaving. | |||
| +---+---+---+ | +---+---+---+ | |||
| | 0/0 |-+ | | 0/0 |-+ | |||
| +---+---+---+ | | +---+---+---+ | | |||
| | +---+---+---+---+---+---+---+---+---+ | | +---+---+---+---+---+---+---+---+---+ | |||
| +---+---+---+ +->|1/2|1/1|2/0|2/0|2/0|1/0|0/0|0/0|0/0| | +---+---+---+ +->|1/2|1/1|2/0|2/0|2/0|1/0|0/0|0/0|0/0| | |||
| |1/2|1/1|1/0|--->|---|---|---|---|---|---|---|---|---| | |1/2|1/1|1/0|--->|---|---|---|---|---|---|---|---|---| | |||
| +---+---+---+ +->| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | +---+---+---+ +->| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | |||
| skipping to change at page 4, line 31 ¶ | skipping to change at page 4, line 31 ¶ | |||
| Figure 1: Round Robin Scheduler without User Message Interleaving | Figure 1: Round Robin Scheduler without User Message Interleaving | |||
| This document describes a new Data chunk called I-DATA. This chunk | This document describes a new Data chunk called I-DATA. This chunk | |||
| incorporates all the flags and fields except the Stream Sequence | incorporates all the flags and fields except the Stream Sequence | |||
| Number (SSN) and properties of the current SCTP Data chunk but also | Number (SSN) and properties of the current SCTP Data chunk but also | |||
| adds two new fields in its chunk header, the Fragment Sequence Number | adds two new fields in its chunk header, the Fragment Sequence Number | |||
| (FSN) and the Message Identifier (MID). Then the FSN is only used | (FSN) and the Message Identifier (MID). Then the FSN is only used | |||
| for reassembling all fragments having the same MID and ordering | for reassembling all fragments having the same MID and ordering | |||
| property. The TSN is used only for the reliable transfer in | property. The TSN is used only for the reliable transfer in | |||
| combination with SACK chunks. | combination with Selective Acknowledgment (SACK) chunks. | |||
| The MID is also used for ensuring ordered delivery, therefore | In addition, the MID is also used for ensuring ordered delivery | |||
| replacing the stream sequence number. Therefore, the head of line | instead of using the stream sequence number, which has been omitted | |||
| blocking caused by the original design is avoided. | from the I-DATA chunk. | |||
| The following Figure 2 illustrates the behaviour of an interleaving | The following Figure 2 illustrates the behaviour of an interleaving | |||
| round robin stream scheduler using I-DATA chunks. | round robin stream scheduler using I-DATA chunks. | |||
| +---+---+---+ | +---+---+---+ | |||
| | 0/0 |-+ | | 0/0 |-+ | |||
| +---+---+---+ | | +---+---+---+ | | |||
| | +-----+-----+-----+-----+-----+-----+-----+-----+-----+ | | +-----+-----+-----+-----+-----+-----+-----+-----+-----+ | |||
| +---+---+---+ +->|2/0/2|1/2/0|0/0/2|2/0/1|1/1/0|0/0/1|2/0/0|1/0/0|0/0/0| | +---+---+---+ +->|2/0/2|1/2/0|0/0/2|2/0/1|1/1/0|0/0/1|2/0/0|1/0/0|0/0/0| | |||
| |1/2|1/1|1/0|--->|-----|-----|-----|-----|-----|-----|-----|-----|-----| | |1/2|1/1|1/0|--->|-----|-----|-----|-----|-----|-----|-----|-----|-----| | |||
| skipping to change at page 5, line 27 ¶ | skipping to change at page 5, line 27 ¶ | |||
| +-------+ |SID/MID/FSN| | +-------+ |SID/MID/FSN| | |||
| |SID/MID| |-----------| | |SID/MID| |-----------| | |||
| +-------+ | TSN | | +-------+ | TSN | | |||
| +-----------+ | +-----------+ | |||
| Figure 2: Round Robin Scheduler with User Message Interleaving | Figure 2: Round Robin Scheduler with User Message Interleaving | |||
| The support of the I-DATA chunk is negotiated during the association | The support of the I-DATA chunk is negotiated during the association | |||
| setup using the Supported Extensions Parameter as defined in | setup using the Supported Extensions Parameter as defined in | |||
| [RFC5061]. If I-DATA support has been negotiated for an association | [RFC5061]. If I-DATA support has been negotiated for an association | |||
| I-DATA chunks are used for all user-messages and no DATA chunks. It | I-DATA chunks are used for all user-messages. DATA chunks are not | |||
| should be noted, that an SCTP implementation needs to support the | permitted when I-DATA support has been negotiated. It should be | |||
| coexistence of associations using DATA chunks and associations using | noted, that an SCTP implementation needs to support the coexistence | |||
| I-DATA chunks. | of associations using DATA chunks and associations using I-DATA | |||
| chunks. | ||||
| This document specifies in Section 2 the user message interleaving by | ||||
| defining the I-DATA chunk, the procedures to use it and its | ||||
| interactions with other SCTP extensions. Multiple stream schedulers | ||||
| are defined in Section 3 followed by describing in Section 4 an | ||||
| extension to the socket API for using what is specified in this | ||||
| document. | ||||
| 1.2. Conventions | 1.2. Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| 2. User Message Interleaving | 2. User Message Interleaving | |||
| The interleaving of user messages is required for WebRTC Datachannels | The interleaving of user messages is required for WebRTC Datachannels | |||
| as specified in [I-D.ietf-rtcweb-data-channel]. | as specified in [I-D.ietf-rtcweb-data-channel]. | |||
| An SCTP implementation supporting user message interleaving is | ||||
| REQUIRED to support the coexistence of associations using DATA chunks | ||||
| and associations using I-DATA chunks. If an SCTP implementation | ||||
| supports user message interleaving and the extension described in | ||||
| [RFC3758] or [RFC6525], it is REQUIRED to implement the corresponding | ||||
| changes specified in Section 2.3. | ||||
| 2.1. The I-DATA Chunk supporting User Message Interleaving | 2.1. The I-DATA Chunk supporting User Message Interleaving | |||
| The following Figure 3 shows the new I-DATA chunk allowing user | The following Figure 3 shows the new I-DATA chunk allowing user | |||
| messages interleaving. | messages interleaving. | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 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 = 64 | Res |I|U|B|E| Length | | | Type = 64 | Res |I|U|B|E| Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| skipping to change at page 7, line 33 ¶ | skipping to change at page 7, line 42 ¶ | |||
| note that the FSN is in "network byte order", a.k.a. Big Endian. | note that the FSN is in "network byte order", a.k.a. Big Endian. | |||
| 2.2. Procedures | 2.2. Procedures | |||
| This subsection describes how the support of the I-DATA chunk is | This subsection describes how the support of the I-DATA chunk is | |||
| negotiated and how the I-DATA chunk is used by the sender and | negotiated and how the I-DATA chunk is used by the sender and | |||
| receiver. | receiver. | |||
| 2.2.1. Negotiation | 2.2.1. Negotiation | |||
| A sender MUST NOT send a I-DATA chunk unless both peers have | A sender MUST NOT send an I-DATA chunk unless both peers have | |||
| indicated its support of the I-DATA chunk type within the Supported | indicated its support of the I-DATA chunk type within the Supported | |||
| Extensions Parameter as defined in [RFC5061]. If I-DATA support has | Extensions Parameter as defined in [RFC5061]. If I-DATA support has | |||
| been negotiated on an association, I-DATA chunks MUST be used for all | been negotiated on an association, I-DATA chunks MUST be used for all | |||
| user messages and DATA-chunk MUST NOT be used. If I-DATA support has | user messages and DATA-chunk MUST NOT be used. If I-DATA support has | |||
| not been negotiated on an association, DATA chunks MUST be used for | not been negotiated on an association, DATA chunks MUST be used for | |||
| all user messages and I-DATA chunks MUST NOT be used. | all user messages and I-DATA chunks MUST NOT be used. | |||
| A sender MUST NOT use the I-DATA chunk unless the user has requested | A sender MUST NOT use the I-DATA chunk unless the user has requested | |||
| that use (e.g. via the socket API, see Section 4). This constraint | that use (e.g. via the socket API, see Section 4.3). This constraint | |||
| is made since usage of this chunk requires that the application be | is made since usage of this chunk requires that the application be | |||
| willing to interleave messages upon reception within an association. | willing to interleave messages upon reception within an association. | |||
| This is not the default choice within the socket API (see [RFC6458]) | This is not the default choice within the socket API (see [RFC6458]) | |||
| thus the user MUST indicate support to the protocol of the reception | thus the user MUST indicate support to the protocol of the reception | |||
| of completely interleaved messages. Note that for stacks that do not | of completely interleaved messages. Note that for stacks that do not | |||
| implement [RFC6458] they may use other methods to indicate | implement [RFC6458] they may use other methods to indicate | |||
| interleaved message support and thus enable the usage of the I-DATA | interleaved message support and thus enable the usage of the I-DATA | |||
| chunk, the key is that the stack MUST know the application has | chunk, the key is that the stack MUST know the application has | |||
| indicated its choice in wanting to use the extension. | indicated its choice in wanting to use the extension. | |||
| skipping to change at page 8, line 25 ¶ | skipping to change at page 8, line 34 ¶ | |||
| Note that the usage of this chunk implies the late assignment of the | Note that the usage of this chunk implies the late assignment of the | |||
| actual TSN to any chunk being sent. Each I-DATA chunk uses a single | actual TSN to any chunk being sent. Each I-DATA chunk uses a single | |||
| TSN. This way messages from other streams may be interleaved with | TSN. This way messages from other streams may be interleaved with | |||
| the fragmented message. Please note that this is the only form of | the fragmented message. Please note that this is the only form of | |||
| interleaving support. For example, it is not possible to interleave | interleaving support. For example, it is not possible to interleave | |||
| multiple ordered or unordered user messages from the same stream. | multiple ordered or unordered user messages from the same stream. | |||
| The sender MUST NOT be fragmenting more than one user message in any | The sender MUST NOT be fragmenting more than one user message in any | |||
| given stream at any time. At any time, a sender MAY fragment | given stream at any time. At any time, a sender MAY fragment | |||
| multiple user message, each of them on different streams. | multiple user messages, each of them on different streams. | |||
| The sender MUST assign TSN's in a way that the receiver can make | The sender MUST assign TSN's in a way that the receiver can make | |||
| progress. One way to achieve this is to assign the later fragments | progress. One way to achieve this is to assign the later fragments | |||
| of a user message a higher TSN and send out the TSNs in sequence. | of a user message a higher TSN and send out the TSNs in sequence. | |||
| 2.2.3. Receiver Side Considerations | 2.2.3. Receiver Side Considerations | |||
| Upon reception of an SCTP packet containing a I-DATA chunk if the | Upon reception of an SCTP packet containing an I-DATA chunk if the | |||
| message needs to be reassembled, then the receiver MUST use the FSN | message needs to be reassembled, then the receiver MUST use the FSN | |||
| for reassembly of the message and not the TSN. The receiver MUST NOT | for reassembly of the message and not the TSN. The receiver MUST NOT | |||
| make any assumption about the TSN assignments of the sender. Note | make any assumption about the TSN assignments of the sender. Note | |||
| that a non-fragmented message is indicated by the fact that both the | that a non-fragmented message is indicated by the fact that both the | |||
| 'E' and 'B' bits are set. An ordered or unordered fragmented message | 'E' and 'B' bits are set. A message (either ordered or unordered) | |||
| is thus identified by not having both bits set. | may be identified as being fragmented by seeing that not both bits | |||
| have been set. | ||||
| 2.3. Interaction with other SCTP Extensions | 2.3. Interaction with other SCTP Extensions | |||
| The usage of the I-DATA chunk might interfere with other SCTP | The usage of the I-DATA chunk might interfere with other SCTP | |||
| extensions. Future SCTP extensions MUST describe if and how they | extensions. Future SCTP extensions MUST describe if and how they | |||
| interfere with the usage of I-DATA chunks. For the SCTP extensions | interfere with the usage of I-DATA chunks. For the SCTP extensions | |||
| already defined when this document was published, the details are | already defined when this document was published, the details are | |||
| given in the following subsections. | given in the following subsections. | |||
| 2.3.1. SCTP Partial Reliability Extension | 2.3.1. SCTP Partial Reliability Extension | |||
| skipping to change at page 10, line 25 ¶ | skipping to change at page 10, line 34 ¶ | |||
| Support for the I-FORWARD-TSN chunk is negotiated during the SCTP | Support for the I-FORWARD-TSN chunk is negotiated during the SCTP | |||
| association setup via the Supported Extensions Parameter as defined | association setup via the Supported Extensions Parameter as defined | |||
| in [RFC5061]. Only if both end points support the I-DATA chunk and | in [RFC5061]. Only if both end points support the I-DATA chunk and | |||
| the I-FORWARD-TSN chunk, the partial reliability extension can be | the I-FORWARD-TSN chunk, the partial reliability extension can be | |||
| used in combination with user message interleaving. | used in combination with user message interleaving. | |||
| 2.3.2. SCTP Stream Reconfiguration Extension | 2.3.2. SCTP Stream Reconfiguration Extension | |||
| When an association resets the SSN using the SCTP extension defined | When an association resets the SSN using the SCTP extension defined | |||
| in [RFC6525], the two counters (one for the ordered messages, one for | in [RFC6525], the two counters (one for the ordered messages, one for | |||
| the unordered messages) used for the MID MUST be reset to 0 | the unordered messages) used for the MID MUST be reset to 0. | |||
| correspondingly. | ||||
| Since most schedulers, especially all schedulers when supporting user | Since most schedulers, especially all schedulers supporting user | |||
| message interleaving, require late TSN assignment, it should be noted | message interleaving, require late TSN assignment, it should be noted | |||
| that the implementation of [RFC6525] needs to handle this. | that the implementation of [RFC6525] needs to handle this. | |||
| 3. Stream Schedulers | 3. Stream Schedulers | |||
| This section defines several stream schedulers. The streams | This section defines several stream schedulers. The stream | |||
| schedulers may behave differently depending on whether user message | schedulers may behave differently depending on whether user message | |||
| interleaving has been negotiated for the association or not. The set | interleaving has been negotiated for the association or not. The set | |||
| of schedulers being implemented is implementation dependent. | of schedulers being implemented is implementation dependent. | |||
| 3.1. First Come First Serve (SCTP_SS_FCFS) | 3.1. First Come First Serve (SCTP_SS_FCFS) | |||
| The simple first-come, first-serve scheduler of user messages is | The simple first-come, first-serve scheduler of user messages is | |||
| used. It just passes through the messages in the order in which they | used. It just passes through the messages in the order in which they | |||
| have been delivered by the application. No modification of the order | have been delivered by the application. No modification of the order | |||
| is done at all. The usage of user message interleaving does not | is done at all. The usage of user message interleaving does not | |||
| skipping to change at page 12, line 20 ¶ | skipping to change at page 12, line 24 ¶ | |||
| Please note that this section is informational only. | Please note that this section is informational only. | |||
| 4.1. Exposition of the Stream Sequence Number (SSN) | 4.1. Exposition of the Stream Sequence Number (SSN) | |||
| The socket API defined in [RFC6458] defines several structures in | The socket API defined in [RFC6458] defines several structures in | |||
| which the SSN of a received user message is exposed to the | which the SSN of a received user message is exposed to the | |||
| application. The list of these structures includes: | application. The list of these structures includes: | |||
| struct sctp_sndrcvinfo | struct sctp_sndrcvinfo | |||
| Specified in Section 5.3.2 of [RFC6458] and being deprecated. | Specified in Section 5.3.2 of [RFC6458] and marked as deprecated. | |||
| struct sctp_extrcvinfo | struct sctp_extrcvinfo | |||
| Specified in Section 5.3.3 of [RFC6458] and being deprecated. | Specified in Section 5.3.3 of [RFC6458] and marked as deprecated. | |||
| struct sctp_rcvinfo | struct sctp_rcvinfo | |||
| Specified in Section 5.3.5 of [RFC6458]. | Specified in Section 5.3.5 of [RFC6458]. | |||
| If user message interleaving is used, the lower order 16 bits of the | If user message interleaving is used, the lower order 16 bits of the | |||
| MID are used as the SSN when filling out these structures. | MID are used as the SSN when filling out these structures. | |||
| 4.2. SCTP_ASSOC_CHANGE Notification | 4.2. SCTP_ASSOC_CHANGE Notification | |||
| When an SCTP_ASSOC_CHANGE notification is delivered indicating a | When an SCTP_ASSOC_CHANGE notification is delivered indicating a | |||
| skipping to change at page 15, line 47 ¶ | skipping to change at page 15, line 47 ¶ | |||
| stream_id: Holds the stream id for the stream for which additional | stream_id: Holds the stream id for the stream for which additional | |||
| information has to be provided. | information has to be provided. | |||
| stream_value: The meaning of this field depends on the scheduler | stream_value: The meaning of this field depends on the scheduler | |||
| specified. It is ignored when the scheduler does not need | specified. It is ignored when the scheduler does not need | |||
| additional information. | additional information. | |||
| 4.4. Explicit EOR Marking | 4.4. Explicit EOR Marking | |||
| Using explicit EOR marking for an SCTP association supporting user | Using explicit End of Record (EOR) marking for an SCTP association | |||
| message interleaving allows the user to interleave the sending of | supporting user message interleaving allows the user to interleave | |||
| user messages on different streams. | the sending of user messages on different streams. | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| [NOTE to RFC-Editor: | [NOTE to RFC-Editor: | |||
| "RFCXXXX" is to be replaced by the RFC number you assign this | "RFCXXXX" is to be replaced by the RFC number you assign this | |||
| document. | document. | |||
| ] | ] | |||
| skipping to change at page 17, line 10 ¶ | skipping to change at page 17, line 10 ¶ | |||
| | 0x20 | Unassigned | | | | 0x20 | Unassigned | | | |||
| | 0x40 | Unassigned | | | | 0x40 | Unassigned | | | |||
| | 0x80 | Unassigned | | | | 0x80 | Unassigned | | | |||
| +------------------+-----------------+-----------+ | +------------------+-----------------+-----------+ | |||
| 6. Security Considerations | 6. Security Considerations | |||
| This document does not add any additional security considerations in | This document does not add any additional security considerations in | |||
| addition to the ones given in [RFC4960] and [RFC6458]. | addition to the ones given in [RFC4960] and [RFC6458]. | |||
| It should be noted that the application has to consent that it is | ||||
| willing to do the more complex reassembly support required for user | ||||
| message interleaving. | ||||
| 7. Acknowledgments | 7. Acknowledgments | |||
| The authors wish to thank Christer Holmberg, Marcelo Ricardo Leitner, | The authors wish to thank Gorry Fairhurst, Christer Holmberg, Marcelo | |||
| Karen E. Egede Nielsen, Irene Ruengeler, Felix Weinrank, and Lixia | Ricardo Leitner, Karen E. Egede Nielsen, Irene Ruengeler, Felix | |||
| Zhang for her invaluable comments. | Weinrank, and Lixia Zhang for her invaluable comments. | |||
| This work has received funding from the European Union's Horizon 2020 | This work has received funding from the European Union's Horizon 2020 | |||
| research and innovation programme under grant agreement No. 644334 | research and innovation programme under grant agreement No. 644334 | |||
| (NEAT). The views expressed are solely those of the author(s). | (NEAT). The views expressed are solely those of the author(s). | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982, | |||
| End of changes. 27 change blocks. | ||||
| 48 lines changed or deleted | 71 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/ | ||||