summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8260.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc8260.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc8260.txt')
-rw-r--r--doc/rfc/rfc8260.txt1291
1 files changed, 1291 insertions, 0 deletions
diff --git a/doc/rfc/rfc8260.txt b/doc/rfc/rfc8260.txt
new file mode 100644
index 0000000..9144f7a
--- /dev/null
+++ b/doc/rfc/rfc8260.txt
@@ -0,0 +1,1291 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) R. Stewart
+Request for Comments: 8260 Netflix, Inc.
+Category: Standards Track M. Tuexen
+ISSN: 2070-1721 Muenster Univ. of Appl. Sciences
+ S. Loreto
+ Ericsson
+ R. Seggelmann
+ Metafinanz Informationssysteme GmbH
+ November 2017
+
+
+ Stream Schedulers and User Message Interleaving
+ for the Stream Control Transmission Protocol
+
+Abstract
+
+ The Stream Control Transmission Protocol (SCTP) is a message-oriented
+ transport protocol supporting arbitrarily large user messages. This
+ document adds a new chunk to SCTP for carrying payload data. This
+ allows a sender to interleave different user messages that would
+ otherwise result in head-of-line blocking at the sender. The
+ interleaving of user messages is required for WebRTC data channels.
+
+ Whenever an SCTP sender is allowed to send user data, it may choose
+ from multiple outgoing SCTP streams. Multiple ways for performing
+ this selection, called stream schedulers, are defined in this
+ document. A stream scheduler can choose to either implement, or not
+ implement, user message interleaving.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc8260.
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 1]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+Copyright Notice
+
+ Copyright (c) 2017 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 2]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
+ 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4
+ 1.2. Conventions . . . . . . . . . . . . . . . . . . . . . . . 6
+ 2. User Message Interleaving . . . . . . . . . . . . . . . . . . 6
+ 2.1. The I-DATA Chunk Supporting User Message Interleaving . . 7
+ 2.2. Procedures . . . . . . . . . . . . . . . . . . . . . . . 9
+ 2.2.1. Negotiation . . . . . . . . . . . . . . . . . . . . . 10
+ 2.2.2. Sender-Side Considerations . . . . . . . . . . . . . 10
+ 2.2.3. Receiver-Side Considerations . . . . . . . . . . . . 11
+ 2.3. Interaction with Other SCTP Extensions . . . . . . . . . 11
+ 2.3.1. SCTP Partial Reliability Extension . . . . . . . . . 11
+ 2.3.2. SCTP Stream Reconfiguration Extension . . . . . . . . 13
+ 3. Stream Schedulers . . . . . . . . . . . . . . . . . . . . . . 14
+ 3.1. First-Come, First-Served Scheduler (SCTP_SS_FCFS) . . . . 14
+ 3.2. Round-Robin Scheduler (SCTP_SS_RR) . . . . . . . . . . . 14
+ 3.3. Round-Robin Scheduler per Packet (SCTP_SS_RR_PKT) . . . . 14
+ 3.4. Priority-Based Scheduler (SCTP_SS_PRIO) . . . . . . . . . 14
+ 3.5. Fair Capacity Scheduler (SCTP_SS_FC) . . . . . . . . . . 15
+ 3.6. Weighted Fair Queueing Scheduler (SCTP_SS_WFQ) . . . . . 15
+ 4. Socket API Considerations . . . . . . . . . . . . . . . . . . 15
+ 4.1. Exposure of the Stream Sequence Number (SSN) . . . . . . 15
+ 4.2. SCTP_ASSOC_CHANGE Notification . . . . . . . . . . . . . 16
+ 4.3. Socket Options . . . . . . . . . . . . . . . . . . . . . 16
+ 4.3.1. Enable or Disable the Support of User Message
+ Interleaving (SCTP_INTERLEAVING_SUPPORTED) . . . . . 16
+ 4.3.2. Get or Set the Stream Scheduler
+ (SCTP_STREAM_SCHEDULER) . . . . . . . . . . . . . . . 17
+ 4.3.3. Get or Set the Stream Scheduler Parameter
+ (SCTP_STREAM_SCHEDULER_VALUE) . . . . . . . . . . . . 18
+ 4.4. Explicit EOR Marking . . . . . . . . . . . . . . . . . . 19
+ 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19
+ 5.1. I-DATA Chunk . . . . . . . . . . . . . . . . . . . . . . 19
+ 5.2. I-FORWARD-TSN Chunk . . . . . . . . . . . . . . . . . . . 20
+ 6. Security Considerations . . . . . . . . . . . . . . . . . . . 20
+ 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 21
+ 7.1. Normative References . . . . . . . . . . . . . . . . . . 21
+ 7.2. Informative References . . . . . . . . . . . . . . . . . 22
+ Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 22
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 3]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+1. Introduction
+
+1.1. Overview
+
+ When SCTP [RFC4960] was initially designed, it was mainly envisioned
+ for the transport of small signaling messages. Late in the design
+ stage, it was decided to add support for fragmentation and reassembly
+ of larger messages with the thought that someday signaling messages
+ in the style of Session Initiation Protocol (SIP) [RFC3261] may also
+ need to use SCTP, and a message that is a single Maximum Transmission
+ Unit (MTU) would be too small. Unfortunately this design decision,
+ though valid at the time, did not account for other applications that
+ might send large messages over SCTP. The sending of such large
+ messages over SCTP, as specified in [RFC4960], can result in a form
+ of sender-side head-of-line blocking (e.g., when the transmission of
+ a message is blocked from transmission because the sender has started
+ the 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.
+
+ 2. As an identifier for the sequence of fragments to allow
+ reassembly.
+
+ 3. As a sequence number allowing up to 2**16 - 1 Stream Sequence
+ Numbers (SSNs) outstanding.
+
+ The protocol requires all fragments of a user message to have
+ consecutive TSNs. This document allows an SCTP sender to interleave
+ different user messages.
+
+ This document also defines several stream schedulers for general SCTP
+ associations allowing different relative stream treatments. The
+ stream schedulers may behave differently depending on whether or not
+ user message interleaving has been negotiated for the association.
+
+ Figure 1 illustrates the behavior of a round-robin stream scheduler
+ using DATA chunks when three streams with the Stream Identifiers
+ (SIDs) 0, 1, and 2 are used. Each queue for SID 0 and SID 2 contains
+ a single user message requiring three chunks. The queue for SID 1
+ contains three user messages each requiring a single chunk. It is
+ shown how these user messages are encapsulated in chunks using TSN 0
+ to TSN 8. Please note that the use of such a scheduler implies late
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 4]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ TSN assignment, but it can be used with an implementation that is
+ compliant with [RFC4960] and that does not support user message
+ interleaving. Late TSN assignment means that the sender generates
+ chunks from user messages and assigns the TSN as late as possible in
+ the process of sending the user messages.
+
+ +---+---+---+
+ | 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|--->|---|---|---|---|---|---|---|---|---|
+ +---+---+---+ +->| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+ | +---+---+---+---+---+---+---+---+---+
+ +---+---+---+ |
+ | 2/0 |-+
+ +---+---+---+
+ +-------+
+ +-------+ |SID/SSN|
+ |SID/SSN| |-------|
+ +-------+ | TSN |
+ +-------+
+
+ Figure 1: Round-Robin Scheduler without User Message Interleaving
+
+ This document describes a new chunk carrying payload data called
+ I-DATA. This chunk incorporates the properties of the current SCTP
+ DATA chunk, all the flags and fields except the Stream Sequence
+ Number (SSN), and also adds two new fields in its chunk header -- the
+ Fragment Sequence Number (FSN) and the Message Identifier (MID). The
+ FSN is only used for reassembling all fragments that have the same
+ MID and the same ordering property. The TSN is only used for the
+ reliable transfer in combination with Selective Acknowledgment (SACK)
+ chunks.
+
+ In addition, the MID is also used for ensuring ordered delivery
+ instead of using the stream sequence number (the I-DATA chunk omits
+ an SSN).
+
+ Figure 2 illustrates the behavior of an interleaving round-robin
+ stream scheduler using I-DATA chunks.
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 5]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
++---+---+---+
+| 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|--->|-----|-----|-----|-----|-----|-----|-----|-----|-----|
++---+---+---+ +->| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+ | +-----+-----+-----+-----+-----+-----+-----+-----+-----+
++---+---+---+ |
+| 2/0 |-+
++---+---+---+
+ +-----------+
+ +-------+ |SID/MID/FSN|
+ |SID/MID| |-----------|
+ +-------+ | TSN |
+ +-----------+
+
+ Figure 2: Round-Robin Scheduler with User Message Interleaving
+
+ The support of the I-DATA chunk is negotiated during the association
+ setup using the Supported Extensions Parameter, as defined in
+ [RFC5061]. If I-DATA support has been negotiated for an association,
+ I-DATA chunks are used for all user messages. DATA chunks are not
+ permitted when I-DATA support has been negotiated. It should be
+ noted that an SCTP implementation supporting I-DATA chunks needs to
+ allow the coexistence of associations using DATA chunks and
+ associations using I-DATA chunks.
+
+ In Section 2, this document specifies the user message interleaving
+ by defining the I-DATA chunk, the procedures to use it, and its
+ interactions with other SCTP extensions. Section 3 defines multiple
+ stream schedulers, and Section 4 describes an extension to the socket
+ API for using the mechanism specified in this document.
+
+1.2. Conventions
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+2. User Message Interleaving
+
+ The protocol mechanisms described in this document allow the
+ interleaving of user messages sent on different streams. They do not
+ support the interleaving of multiple messages (ordered or unordered)
+ sent on the same stream.
+
+
+
+Stewart, et al. Standards Track [Page 6]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ The interleaving of user messages is required for WebRTC data
+ channels, as specified in [DATA-CHAN].
+
+ 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 Partial Reliability
+ extension described in [RFC3758] or the Stream Reconfiguration
+ Extension described in [RFC6525], it is REQUIRED to implement the
+ corresponding changes specified in Section 2.3.
+
+2.1. The I-DATA Chunk Supporting User Message Interleaving
+
+ The following Figure 3 shows the new I-DATA chunk allowing user
+ message interleaving.
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Type = 64 | Res |I|U|B|E| Length = Variable |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | TSN |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Stream Identifier | Reserved |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Message Identifier |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Payload Protocol Identifier / Fragment Sequence Number |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ \ \
+ / User Data /
+ \ \
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Figure 3: I-DATA Chunk Format
+
+ The only differences between the I-DATA chunk in Figure 3 and the
+ DATA chunk defined in [RFC4960] and [RFC7053] are the addition of the
+ new Message Identifier (MID) and the new Fragment Sequence Number
+ (FSN) and the removal of the Stream Sequence Number (SSN). The
+ Payload Protocol Identifier (PPID), which is already defined for DATA
+ chunks in [RFC4960], and the new FSN are stored at the same location
+ of the packet using the B bit to determine which value is stored at
+ the location. The length of the I-DATA chunk header is 20 bytes,
+ which is 4 bytes more than the length of the DATA chunk header
+ defined in [RFC4960] and [RFC7053].
+
+
+
+
+
+Stewart, et al. Standards Track [Page 7]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ The old fields are:
+
+ Res: 4 bits
+ These bits are reserved. They MUST be set to 0 by the sender and
+ MUST be ignored by the receiver.
+
+ I bit: 1 bit
+ The (I)mmediate Bit, if set, indicates that the receiver SHOULD
+ NOT delay the sending of the corresponding SACK chunk. Same as
+ the I bit for DATA chunks, as specified in [RFC7053].
+
+ U bit: 1 bit
+ The (U)nordered bit, if set, indicates the user message is
+ unordered. Same as the U bit for DATA chunks, as specified in
+ [RFC4960].
+
+ B bit: 1 bit
+ The (B)eginning fragment bit, if set, indicates the first fragment
+ of a user message. Same as the B bit for DATA chunks, as
+ specified in [RFC4960].
+
+ E bit: 1 bit
+ The (E)nding fragment bit, if set, indicates the last fragment of
+ a user message. Same as the E bit for DATA chunks, as specified
+ in [RFC4960].
+
+ Length: 16 bits (unsigned integer)
+ This field indicates the length in bytes of the DATA chunk from
+ the beginning of the Type field to the end of the User Data field,
+ excluding any padding. Similar to the Length for DATA chunks, as
+ specified in [RFC4960].
+
+ TSN: 32 bits (unsigned integer)
+ This value represents the TSN for this I-DATA chunk. Same as the
+ TSN for DATA chunks, as specified in [RFC4960].
+
+ Stream Identifier: 16 bits (unsigned integer)
+ Identifies the stream to which the user data belongs. Same as the
+ Stream Identifier for DATA chunks, as specified in [RFC4960].
+
+ The new fields are:
+
+ Reserved: 16 bits (unsigned integer)
+ This field is reserved. It MUST be set to 0 by the sender and
+ MUST be ignored by the receiver.
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 8]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ Message Identifier (MID): 32 bits (unsigned integer)
+ The MID is the same for all fragments of a user message; it is
+ used to determine which fragments (enumerated by the FSN) belong
+ to the same user message. For ordered user messages, the MID is
+ also used by the SCTP receiver to deliver the user messages in the
+ correct order to the upper layer (similar to the SSN of the DATA
+ chunk defined in [RFC4960]). The sender uses two counters for
+ each outgoing stream: one for ordered messages and one for
+ unordered messages. All of these counters are independent and
+ initially 0. They are incremented by 1 for each user message.
+ Please note that the serial number arithmetic defined in [RFC1982]
+ using SERIAL_BITS = 32 applies. Therefore, the sender MUST NOT
+ have more than 2**31 - 1 ordered messages for each outgoing stream
+ in flight and MUST NOT have more than 2**31 - 1 unordered messages
+ for each outgoing stream in flight. A message is considered in
+ flight if at least one of its I-DATA chunks is not acknowledged in
+ a way that cannot be reneged (i.e., not acknowledged by the
+ cumulative TSN Ack). Please note that the MID is in "network byte
+ order", a.k.a. Big Endian.
+
+ Payload Protocol Identifier (PPID) / Fragment Sequence Number (FSN):
+ 32 bits (unsigned integer)
+ If the B bit is set, this field contains the PPID of the user
+ message. Note that in this case, this field is not touched by an
+ SCTP implementation; therefore, its byte order is not necessarily
+ in network byte order. The upper layer is responsible for any
+ byte order conversions to this field, similar to the PPID of DATA
+ chunks. In this case, the FSN is implicitly considered to be 0.
+ If the B bit is not set, this field contains the FSN. The FSN is
+ used to enumerate all fragments of a single user message, starting
+ from 0 and incremented by 1. The last fragment of a message MUST
+ have the E bit set. Note that the FSN MAY wrap completely
+ multiple times, thus allowing arbitrarily large user messages.
+ For the FSN, the serial number arithmetic defined in [RFC1982]
+ applies with SERIAL_BITS = 32. Therefore, a sender MUST NOT have
+ more than 2**31 - 1 fragments of a single user message in flight.
+ A fragment is considered in flight if it is not acknowledged in a
+ way that cannot be reneged. Please note that the FSN is in
+ "network byte order", a.k.a. Big Endian.
+
+2.2. Procedures
+
+ 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
+ receiver.
+
+ The handling of the I bit for the I-DATA chunk corresponds to the
+ handling of the I bit for the DATA chunk described in [RFC7053].
+
+
+
+Stewart, et al. Standards Track [Page 9]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+2.2.1. Negotiation
+
+ An SCTP endpoint indicates user message interleaving support by
+ listing the I-DATA chunk within the Supported Extensions Parameter,
+ as defined in [RFC5061]. User message interleaving has been
+ negotiated for an association if both endpoints have indicated I-DATA
+ support.
+
+ If user message interleaving support has been negotiated for an
+ association, I-DATA chunks MUST be used for all user messages and
+ DATA chunks MUST NOT be used. If user message interleaving support
+ has not been negotiated for an association, DATA chunks MUST be used
+ for all user messages and I-DATA chunks MUST NOT be used.
+
+ An endpoint implementing the socket API specified in [RFC6458] MUST
+ NOT indicate user message interleaving support unless the user has
+ requested its use (e.g., via the socket API; see Section 4.3). This
+ constraint is made since the usage of this chunk requires that the
+ application is capable of handling interleaved messages upon
+ reception within an association. This is not the default choice
+ within the socket API (see the SCTP_FRAGMENT_INTERLEAVE socket option
+ in Section 8.1.20 of [RFC6458]); thus, the user MUST indicate to the
+ SCTP implementation its support for receiving completely interleaved
+ messages.
+
+ Note that stacks that do not implement [RFC6458] may use other
+ methods to indicate interleaved message support and thus indicate the
+ support of user message interleaving. The crucial point is that the
+ SCTP stack MUST know that the application can handle interleaved
+ messages before indicating the I-DATA support.
+
+2.2.2. Sender-Side Considerations
+
+ The sender-side usage of the I-DATA chunk is quite simple. Instead
+ of using the TSN for fragmentation purposes, the sender uses the new
+ FSN field to indicate which fragment number is being sent. The first
+ fragment MUST have the B bit set. The last fragment MUST have the E
+ bit set. All other fragments MUST NOT have the B or E bit set. All
+ other properties of the existing SCTP DATA chunk also apply to the
+ I-DATA chunk, i.e., congestion control as well as receiver window
+ conditions MUST be observed, as defined in [RFC4960].
+
+ 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
+ TSN. This way messages from other streams may be interleaved with
+ the fragmented message. Please note that this is the only form of
+ interleaving support. For example, it is not possible to interleave
+ multiple ordered or unordered user messages from the same stream.
+
+
+
+Stewart, et al. Standards Track [Page 10]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ The sender MUST NOT process (move user data into I-DATA chunks and
+ assign a TSN to it) more than one user message in any given stream at
+ any time. At any time, a sender MAY process multiple user messages,
+ each of them on different streams.
+
+ The sender MUST assign TSNs to I-DATA chunks in a way that the
+ receiver can make progress. One way to achieve this is to assign a
+ higher TSN to the later fragments of a user message and send out the
+ I-DATA chunks such that the TSNs are in sequence.
+
+2.2.3. Receiver-Side Considerations
+
+ Upon reception of an SCTP packet containing an I-DATA chunk whose
+ user message needs to be reassembled, the receiver MUST first use the
+ SID to identify the stream, consider the U bit to determine if it is
+ part of an ordered or unordered message, find the user message
+ identified by the MID, and use the FSN for reassembly of the message
+ and not the TSN. The receiver MUST NOT make any assumption about the
+ TSN assignments of the sender. Note that a non-fragmented message is
+ indicated by the fact that both the E and B bits are set. A message
+ (either ordered or unordered) whose E and B bits are not both set may
+ be identified as being fragmented.
+
+ If I-DATA support has been negotiated for an association, the
+ reception of a DATA chunk is a violation of the above rules and
+ therefore the receiver of the DATA chunk MUST abort the association
+ by sending an ABORT chunk. The ABORT chunk MAY include the 'Protocol
+ Violation' error cause. The same applies if I-DATA support has not
+ been negotiated for an association and an I-DATA chunk is received.
+
+2.3. Interaction with Other SCTP Extensions
+
+ The usage of the I-DATA chunk might interfere with other SCTP
+ extensions. Future SCTP extensions MUST describe if and how they
+ interfere with the usage of I-DATA chunks. For the SCTP extensions
+ already defined when this document was published, the details are
+ given in the following subsections.
+
+2.3.1. SCTP Partial Reliability Extension
+
+ When the SCTP extension defined in [RFC3758] is used in combination
+ with the user message interleaving extension, the new I-FORWARD-TSN
+ chunk MUST be used instead of the FORWARD-TSN chunk. The difference
+ between the FORWARD-TSN and the I-FORWARD-TSN chunk is that the
+ 16-bit Stream Sequence Number (SSN) has been replaced by the 32-bit
+ Message Identifier (MID), and the largest skipped MID can also be
+
+
+
+
+
+Stewart, et al. Standards Track [Page 11]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ provided for unordered messages. Therefore, the principle applied to
+ ordered messages when using FORWARD-TSN chunks is applied to ordered
+ and unordered messages when using I-FORWARD-TSN chunks.
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Type = 194 | Flags = 0x00 | Length = Variable |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | New Cumulative TSN |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Stream Identifier | Reserved |U|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Message Identifier |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ \ \
+ / /
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Stream Identifier | Reserved |U|
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Message Identifier |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Figure 4: I-FORWARD-TSN Chunk Format
+
+ The old fields are:
+
+ Flags: 8 bits (unsigned integer)
+ These bits are reserved. They MUST be set to 0 by the sender and
+ MUST be ignored by the receiver. Same as the Flags for FORWARD
+ TSN chunks, as specified in [RFC3758].
+
+ Length: 16 bits (unsigned integer)
+ This field holds the length of the chunk. Similar to the Length
+ for FORWARD TSN chunks, as specified in [RFC3758].
+
+ New Cumulative TSN: 32 bits (unsigned integer)
+ This indicates the New Cumulative TSN to the data receiver. Same
+ as the New Cumulative TSN for FORWARD TSN chunks, as specified in
+ [RFC3758].
+
+ The new fields are:
+
+ Stream Identifier (SID): 16 bits (unsigned integer)
+ This field holds the stream number this entry refers to.
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 12]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ Reserved: 15 bits
+ This field is reserved. It MUST be set to 0 by the sender and
+ MUST be ignored by the receiver.
+
+ U bit: 1 bit
+ The U bit specifies if the Message Identifier of this entry refers
+ to unordered messages (U bit is set) or ordered messages (U bit is
+ not set).
+
+ Message Identifier (MID): 32 bits (unsigned integer)
+ This field holds the largest Message Identifier for ordered or
+ unordered messages indicated by the U bit that was skipped for the
+ stream specified by the Stream Identifier. For ordered messages,
+ this is similar to the FORWARD-TSN chunk, just replacing the
+ 16-bit SSN by the 32-bit MID.
+
+ Support for the I-FORWARD-TSN chunk is negotiated during the SCTP
+ association setup via the Supported Extensions Parameter, as defined
+ in [RFC5061]. The partial reliability extension is negotiated and
+ can be used in combination with user message interleaving only if
+ both endpoints indicated their support of user message interleaving
+ and the I-FORWARD-TSN chunk.
+
+ The FORWARD-TSN chunk MUST be used in combination with the DATA chunk
+ and MUST NOT be used in combination with the I-DATA chunk. The
+ I-FORWARD-TSN chunk MUST be used in combination with the I-DATA chunk
+ and MUST NOT be used in combination with the DATA chunk.
+
+ If I-FORWARD-TSN support has been negotiated for an association, the
+ reception of a FORWARD-TSN chunk is a violation of the above rules
+ and therefore the receiver of the FORWARD-TSN chunk MUST abort the
+ association by sending an ABORT chunk. The ABORT chunk MAY include
+ the 'Protocol Violation' error cause. The same applies if
+ I-FORWARD-TSN support has not been negotiated for an association and
+ a FORWARD-TSN chunk is received.
+
+2.3.2. SCTP Stream Reconfiguration Extension
+
+ When an association resets the SSN using the SCTP extension defined
+ in [RFC6525], the two counters (one for the ordered messages, one for
+ the unordered messages) used for the MIDs MUST be reset to 0.
+
+ Since most schedulers, especially all schedulers supporting user
+ message interleaving, require late TSN assignment, it should be noted
+ that the implementation of [RFC6525] needs to handle this.
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 13]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+3. Stream Schedulers
+
+ This section defines several stream schedulers. The stream
+ schedulers may behave differently depending on whether or not user
+ message interleaving has been negotiated for the association. An
+ implementation MAY implement any subset of them. If the
+ implementation is used for WebRTC data channels, as specified in
+ [DATA-CHAN], it MUST implement the Weighted Fair Queueing Scheduler
+ defined in Section 3.6.
+
+ The selection of the stream scheduler is done at the sender side.
+ There is no mechanism provided for signaling the stream scheduler
+ being used to the receiver side or even for letting the receiver side
+ influence the selection of the stream scheduler used at the sender
+ side.
+
+3.1. First-Come, First-Served Scheduler (SCTP_SS_FCFS)
+
+ The simple first-come, first-served scheduler of user messages is
+ used. It just passes through the messages in the order in which they
+ have been delivered by the application. No modification of the order
+ is done at all. The usage of user message interleaving does not
+ affect the sending of the chunks, except that I-DATA chunks are used
+ instead of DATA chunks.
+
+3.2. Round-Robin Scheduler (SCTP_SS_RR)
+
+ When not interleaving user messages, this scheduler provides a fair
+ scheduling based on the number of user messages by cycling around
+ non-empty stream queues. When interleaving user messages, this
+ scheduler provides a fair scheduling based on the number of I-DATA
+ chunks by cycling around non-empty stream queues.
+
+3.3. Round-Robin Scheduler per Packet (SCTP_SS_RR_PKT)
+
+ This is a round-robin scheduler, which only switches streams when
+ starting to fill a new packet. It bundles only DATA or I-DATA chunks
+ referring to the same stream in a packet. This scheduler minimizes
+ head-of-line blocking when a packet is lost because only a single
+ stream is affected.
+
+3.4. Priority-Based Scheduler (SCTP_SS_PRIO)
+
+ Scheduling of user messages with strict priorities is used. The
+ priority is configurable per outgoing SCTP stream. Streams having a
+ higher priority will be scheduled first and when multiple streams
+ have the same priority, the scheduling between them is implementation
+
+
+
+
+Stewart, et al. Standards Track [Page 14]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ dependent. When the scheduler interleaves user messages, the sending
+ of large, lower-priority user messages will not delay the sending of
+ higher-priority user messages.
+
+3.5. Fair Capacity Scheduler (SCTP_SS_FC)
+
+ A fair capacity distribution between the streams is used. This
+ scheduler considers the lengths of the messages of each stream and
+ schedules them in a specific way to maintain an equal capacity for
+ all streams. The details are implementation dependent. interleaving
+ user messages allows for a better realization of the fair capacity
+ usage.
+
+3.6. Weighted Fair Queueing Scheduler (SCTP_SS_WFQ)
+
+ A Weighted Fair Queueing scheduler between the streams is used. The
+ weight is configurable per outgoing SCTP stream. This scheduler
+ considers the lengths of the messages of each stream and schedules
+ them in a specific way to use the capacity according to the given
+ weights. If the weight of stream S1 is n times the weight of stream
+ S2, the scheduler should assign to stream S1 n times the capacity it
+ assigns to stream S2. The details are implementation dependent.
+ Interleaving user messages allows for a better realization of the
+ capacity usage according to the given weights.
+
+ This scheduler, in combination with user message interleaving, is
+ used for WebRTC data channels, as specified in [DATA-CHAN].
+
+4. Socket API Considerations
+
+ This section describes how the socket API defined in [RFC6458] is
+ extended to allow applications to use the extension described in this
+ document.
+
+ Please note that this section is informational only.
+
+4.1. Exposure of the Stream Sequence Number (SSN)
+
+ The socket API defined in [RFC6458] defines several structures in
+ which the SSN of a received user message is exposed to the
+ application. The list of these structures includes:
+
+ struct sctp_sndrcvinfo
+ Specified in Section 5.3.2 of [RFC6458] and marked as deprecated.
+
+ struct sctp_extrcvinfo
+ Specified in Section 5.3.3 of [RFC6458] and marked as deprecated.
+
+
+
+
+Stewart, et al. Standards Track [Page 15]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ struct sctp_rcvinfo
+ Specified in Section 5.3.5 of [RFC6458].
+
+ If user message interleaving is used, the lower-order 16 bits of the
+ MID are used as the SSN when filling out these structures.
+
+4.2. SCTP_ASSOC_CHANGE Notification
+
+ When an SCTP_ASSOC_CHANGE notification (specified in Section 6.1.1 of
+ [RFC6458]) is delivered indicating a sac_state of SCTP_COMM_UP or
+ SCTP_RESTART for an SCTP association where both peers support the
+ I-DATA chunk, SCTP_ASSOC_SUPPORTS_INTERLEAVING should be listed in
+ the sac_info field.
+
+4.3. Socket Options
+
+ +-----------------------------+-------------------------+-----+-----+
+ | Option Name | Data Type | Get | Set |
+ +-----------------------------+-------------------------+-----+-----+
+ | SCTP_INTERLEAVING_SUPPORTED | struct sctp_assoc_value | X | X |
+ | SCTP_STREAM_SCHEDULER | struct sctp_assoc_value | X | X |
+ | SCTP_STREAM_SCHEDULER_VALUE | struct | X | X |
+ | | sctp_stream_value | | |
+ +-----------------------------+-------------------------+-----+-----+
+
+4.3.1. Enable or Disable the Support of User Message Interleaving
+ (SCTP_INTERLEAVING_SUPPORTED)
+
+ This socket option allows the enabling or disabling of the
+ negotiation of user message interleaving support for future
+ associations. For existing associations, it allows for querying
+ whether or not user message interleaving support was negotiated on a
+ particular association.
+
+ This socket option uses IPPROTO_SCTP as its level and
+ SCTP_INTERLEAVING_SUPPORTED as its name. It can be used with
+ getsockopt() and setsockopt(). The socket option value uses the
+ following structure defined in [RFC6458]:
+
+ struct sctp_assoc_value {
+ sctp_assoc_t assoc_id;
+ uint32_t assoc_value;
+ };
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 16]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ assoc_id: This parameter is ignored for one-to-one style sockets.
+ For one-to-many style sockets, this parameter indicates upon which
+ association the user is performing an action. The special
+ sctp_assoc_t SCTP_FUTURE_ASSOC can also be used; it is an error to
+ use SCTP_{CURRENT|ALL}_ASSOC in assoc_id.
+
+ assoc_value: A non-zero value encodes the enabling of user message
+ interleaving, whereas a value of zero encodes the disabling of
+ user message interleaving.
+
+ sctp_opt_info() needs to be extended to support
+ SCTP_INTERLEAVING_SUPPORTED.
+
+ An application using user message interleaving should also set the
+ fragment interleave level to 2 by using the SCTP_FRAGMENT_INTERLEAVE
+ socket option specified in Section 8.1.20 of [RFC6458]. This allows
+ the interleaving of user messages from different streams. Please
+ note that it does not allow the interleaving of user messages
+ (ordered or unordered) on the same stream. Failure to set this
+ option can possibly lead to application deadlock. Some
+ implementations might therefore put some restrictions on setting
+ combinations of these values. Setting the interleaving level to at
+ least 2 before enabling the negotiation of user message interleaving
+ should work on all platforms. Since the default fragment interleave
+ level is not 2, user message interleaving is disabled per default.
+
+4.3.2. Get or Set the Stream Scheduler (SCTP_STREAM_SCHEDULER)
+
+ A stream scheduler can be selected with the SCTP_STREAM_SCHEDULER
+ option for setsockopt(). The struct sctp_assoc_value is used to
+ specify the association for which the scheduler should be changed and
+ the value of the desired algorithm.
+
+ The definition of struct sctp_assoc_value is the same as in
+ [RFC6458]:
+
+ struct sctp_assoc_value {
+ sctp_assoc_t assoc_id;
+ uint32_t assoc_value;
+ };
+
+ assoc_id: Holds the identifier of the association for which the
+ scheduler should be changed. The special
+ SCTP_{FUTURE|CURRENT|ALL}_ASSOC can also be used. This parameter
+ is ignored for one-to-one style sockets.
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 17]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ assoc_value: This specifies which scheduler is used. The following
+ constants can be used:
+
+ SCTP_SS_DEFAULT: The default scheduler used by the SCTP
+ implementation. Typical values are SCTP_SS_FCFS or SCTP_SS_RR.
+
+ SCTP_SS_FCFS: Use the scheduler specified in Section 3.1.
+
+ SCTP_SS_RR: Use the scheduler specified in Section 3.2.
+
+ SCTP_SS_RR_PKT: Use the scheduler specified in Section 3.3.
+
+ SCTP_SS_PRIO: Use the scheduler specified in Section 3.4. The
+ priority can be assigned with the sctp_stream_value struct.
+ The higher the assigned value, the lower the priority. That
+ is, the default value 0 is the highest priority, and therefore
+ the default scheduling will be used if no priorities have been
+ assigned.
+
+ SCTP_SS_FB: Use the scheduler specified in Section 3.5.
+
+ SCTP_SS_WFQ: Use the scheduler specified in Section 3.6. The
+ weight can be assigned with the sctp_stream_value struct.
+
+ sctp_opt_info() needs to be extended to support
+ SCTP_STREAM_SCHEDULER.
+
+4.3.3. Get or Set the Stream Scheduler Parameter
+ (SCTP_STREAM_SCHEDULER_VALUE)
+
+ Some schedulers require additional information to be set for
+ individual streams as shown in the following table:
+
+ +-----------------+-----------------+
+ | Name | Per-Stream Info |
+ +-----------------+-----------------+
+ | SCTP_SS_DEFAULT | n/a |
+ | SCTP_SS_FCFS | no |
+ | SCTP_SS_RR | no |
+ | SCTP_SS_RR_PKT | no |
+ | SCTP_SS_PRIO | yes |
+ | SCTP_SS_FB | no |
+ | SCTP_SS_WFQ | yes |
+ +-----------------+-----------------+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 18]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ This is achieved with the SCTP_STREAM_SCHEDULER_VALUE option and the
+ corresponding struct sctp_stream_value. The definition of struct
+ sctp_stream_value is as follows:
+
+ struct sctp_stream_value {
+ sctp_assoc_t assoc_id;
+ uint16_t stream_id;
+ uint16_t stream_value;
+ };
+
+ assoc_id: Holds the identifier of the association for which the
+ scheduler should be changed. The special
+ SCTP_{FUTURE|CURRENT|ALL}_ASSOC can also be used. This parameter
+ is ignored for one-to-one style sockets.
+
+ stream_id: Holds the identifier of the stream for which additional
+ information has to be provided.
+
+ stream_value: The meaning of this field depends on the scheduler
+ specified. It is ignored when the scheduler does not need
+ additional information.
+
+ sctp_opt_info() needs to be extended to support
+ SCTP_STREAM_SCHEDULER_VALUE.
+
+4.4. Explicit EOR Marking
+
+ Using explicit End of Record (EOR) marking for an SCTP association
+ supporting user message interleaving allows the user to interleave
+ the sending of user messages on different streams.
+
+5. IANA Considerations
+
+ Two new chunk types have been assigned by IANA.
+
+5.1. I-DATA Chunk
+
+ IANA has assigned the chunk type for this chunk from the pool of
+ chunks with the upper two bits set to '01'. This appears in the
+ "Chunk Types" registry for SCTP as follows:
+
+ +----------+--------------------------------------------+-----------+
+ | ID Value | Chunk Type | Reference |
+ +----------+--------------------------------------------+-----------+
+ | 64 | Payload Data supporting Interleaving | RFC 8260 |
+ | | (I-DATA) | |
+ +----------+--------------------------------------------+-----------+
+
+
+
+
+Stewart, et al. Standards Track [Page 19]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+ The registration table (as defined in [RFC6096]) for the chunk flags
+ of this chunk type is initially as follows:
+
+ +------------------+-----------------+-----------+
+ | Chunk Flag Value | Chunk Flag Name | Reference |
+ +------------------+-----------------+-----------+
+ | 0x01 | E bit | RFC 8260 |
+ | 0x02 | B bit | RFC 8260 |
+ | 0x04 | U bit | RFC 8260 |
+ | 0x08 | I bit | RFC 8260 |
+ | 0x10 | Unassigned | |
+ | 0x20 | Unassigned | |
+ | 0x40 | Unassigned | |
+ | 0x80 | Unassigned | |
+ +------------------+-----------------+-----------+
+
+5.2. I-FORWARD-TSN Chunk
+
+ IANA has assigned the chunk type for this chunk from the pool of
+ chunks with the upper two bits set to '11'. This appears in the
+ "Chunk Types" registry for SCTP as follows:
+
+ +----------+---------------+-----------+
+ | ID Value | Chunk Type | Reference |
+ +----------+---------------+-----------+
+ | 194 | I-FORWARD-TSN | RFC 8260 |
+ +----------+---------------+-----------+
+
+ The registration table (as defined in [RFC6096]) for the chunk flags
+ of this chunk type is initially empty.
+
+6. Security Considerations
+
+ This document does not add any additional security considerations in
+ 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. When doing so, an application has to provide a
+ reassembly buffer for each incoming stream. It has to protect itself
+ against these buffers taking too many resources. If user message
+ interleaving is not used, only a single reassembly buffer needs to be
+ provided for each association. But the application has to protect
+ itself for excessive resource usages there too.
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 20]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+7. References
+
+7.1. Normative References
+
+ [RFC1982] Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982,
+ DOI 10.17487/RFC1982, August 1996,
+ <https://www.rfc-editor.org/info/rfc1982>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P.
+ Conrad, "Stream Control Transmission Protocol (SCTP)
+ Partial Reliability Extension", RFC 3758,
+ DOI 10.17487/RFC3758, May 2004,
+ <https://www.rfc-editor.org/info/rfc3758>.
+
+ [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol",
+ RFC 4960, DOI 10.17487/RFC4960, September 2007,
+ <https://www.rfc-editor.org/info/rfc4960>.
+
+ [RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M.
+ Kozuka, "Stream Control Transmission Protocol (SCTP)
+ Dynamic Address Reconfiguration", RFC 5061,
+ DOI 10.17487/RFC5061, September 2007,
+ <https://www.rfc-editor.org/info/rfc5061>.
+
+ [RFC6096] Tuexen, M. and R. Stewart, "Stream Control Transmission
+ Protocol (SCTP) Chunk Flags Registration", RFC 6096,
+ DOI 10.17487/RFC6096, January 2011,
+ <https://www.rfc-editor.org/info/rfc6096>.
+
+ [RFC6525] Stewart, R., Tuexen, M., and P. Lei, "Stream Control
+ Transmission Protocol (SCTP) Stream Reconfiguration",
+ RFC 6525, DOI 10.17487/RFC6525, February 2012,
+ <https://www.rfc-editor.org/info/rfc6525>.
+
+ [RFC7053] Tuexen, M., Ruengeler, I., and R. Stewart, "SACK-
+ IMMEDIATELY Extension for the Stream Control Transmission
+ Protocol", RFC 7053, DOI 10.17487/RFC7053, November 2013,
+ <https://www.rfc-editor.org/info/rfc7053>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+
+
+
+Stewart, et al. Standards Track [Page 21]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+7.2. Informative References
+
+ [DATA-CHAN]
+ Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data
+ Channels", Work in Progress,
+ draft-ietf-rtcweb-data-channel-13, January 2015.
+
+ [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
+ A., Peterson, J., Sparks, R., Handley, M., and E.
+ Schooler, "SIP: Session Initiation Protocol", RFC 3261,
+ DOI 10.17487/RFC3261, June 2002,
+ <https://www.rfc-editor.org/info/rfc3261>.
+
+ [RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V.
+ Yasevich, "Sockets API Extensions for the Stream Control
+ Transmission Protocol (SCTP)", RFC 6458,
+ DOI 10.17487/RFC6458, December 2011,
+ <https://www.rfc-editor.org/info/rfc6458>.
+
+Acknowledgments
+
+ The authors wish to thank Benoit Claise, Julian Cordes, Spencer
+ Dawkins, Gorry Fairhurst, Lennart Grahl, Christer Holmberg, Mirja
+ Kuehlewind, Marcelo Ricardo Leitner, Karen E. Egede Nielsen, Maksim
+ Proshin, Eric Rescorla, Irene Ruengeler, Felix Weinrank, Michael
+ Welzl, Magnus Westerlund, and Lixia Zhang for their invaluable
+ comments.
+
+ This work has received funding from the European Union's Horizon 2020
+ research and innovation program under grant agreement No. 644334
+ (NEAT). The views expressed are solely those of the authors.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 22]
+
+RFC 8260 Stream Schedulers and the I-DATA Chunk November 2017
+
+
+Authors' Addresses
+
+ Randall R. Stewart
+ Netflix, Inc.
+ Chapin, SC 29036
+ United States of America
+
+ Email: randall@lakerest.net
+
+
+ Michael Tuexen
+ Muenster University of Applied Sciences
+ Stegerwaldstrasse 39
+ 48565 Steinfurt
+ Germany
+
+ Email: tuexen@fh-muenster.de
+
+
+ Salvatore Loreto
+ Ericsson
+ Torshamnsgatan 21
+ 164 80 Stockholm
+ Sweden
+
+ Email: Salvatore.Loreto@ericsson.com
+
+
+ Robin Seggelmann
+ Metafinanz Informationssysteme GmbH
+ Leopoldstrasse 146
+ 80804 Muenchen
+ Germany
+
+ Email: rfc@robin-seggelmann.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 23]
+