summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3758.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc3758.txt')
-rw-r--r--doc/rfc/rfc3758.txt1235
1 files changed, 1235 insertions, 0 deletions
diff --git a/doc/rfc/rfc3758.txt b/doc/rfc/rfc3758.txt
new file mode 100644
index 0000000..1c0dc15
--- /dev/null
+++ b/doc/rfc/rfc3758.txt
@@ -0,0 +1,1235 @@
+
+
+
+
+
+
+Network Working Group R. Stewart
+Request for Comments: 3758 M. Ramalho
+Category: Standards Track Cisco Systems, Inc.
+ Q. Xie
+ Motorola, Inc.
+ M. Tuexen
+ Univ. of Applied Sciences Muenster
+ P. Conrad
+ University of Delaware
+ May 2004
+
+
+ Stream Control Transmission Protocol (SCTP)
+ Partial Reliability Extension
+
+Status of this Memo
+
+ This document specifies an Internet standards track protocol for the
+ Internet community, and requests discussion and suggestions for
+ improvements. Please refer to the current edition of the "Internet
+ Official Protocol Standards" (STD 1) for the standardization state
+ and status of this protocol. Distribution of this memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2004). All Rights Reserved.
+
+Abstract
+
+ This memo describes an extension to the Stream Control Transmission
+ Protocol (SCTP) that allows an SCTP endpoint to signal to its peer
+ that it should move the cumulative ack point forward. When both
+ sides of an SCTP association support this extension, it can be used
+ by an SCTP implementation to provide partially reliable data
+ transmission service to an upper layer protocol. This memo describes
+ the protocol extensions, which consist of a new parameter for INIT
+ and INIT ACK, and a new FORWARD TSN chunk type, and provides one
+ example of a partially reliable service that can be provided to the
+ upper layer via this mechanism.
+
+
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 1]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
+ 1.1. Overview of Protocol Extensions. . . . . . . . . . . . . 2
+ 1.2. Overview of New Services Provided to the Upper Layer . . 3
+ 1.3. Benefits of PR-SCTP . . . . . . . . . . . . . . . . . . 4
+ 2. Conventions. . . . . . . . . . . . . . . . . . . . . . . . . . 5
+ 3. Protocol Changes to support PR-SCTP . . . . . . . . . . . . . 5
+ 3.1. Forward-TSN-Supported Parameter For INIT and INIT ACK. . 5
+ 3.2. Forward Cumulative TSN Chunk Definition (FORWARD TSN). . 5
+ 3.3. Negotiation of Forward-TSN-Supported parameter . . . . . 7
+ 3.3.1. Sending Forward-TSN-Supported param in INIT . . . 7
+ 3.3.2. Receipt of Forward-TSN-Supported parameter in
+ INIT or INIT-ACK. . . . . . . . . . . . . . . . . 7
+ 3.3.3. Receipt of Op. Error for Forward-TSN-Supported
+ Param . . . . . . . . . . . . . . . . . . . . . . 8
+ 3.4. Definition of "abandoned" in the context of PR-SCTP. . . 8
+ 3.5. Sender Side Implementation of PR-SCTP. . . . . . . . . . 9
+ 3.6. Receiver Side Implementation of PR-SCTP. . . . . . . . . 12
+ 4. Services provided by PR-SCTP to the upper layer. . . . . . . . 14
+ 4.1. PR-SCTP Service Definition for "timed reliability" . . . 15
+ 4.2. PR-SCTP Association Establishment. . . . . . . . . . . . 16
+ 4.3. Guidelines for defining other PR-SCTP Services . . . . . 17
+ 4.4. Usage Notes. . . . . . . . . . . . . . . . . . . . . . . 19
+ 5. Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . 19
+ 6. Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . 19
+ 7. Security Considerations. . . . . . . . . . . . . . . . . . . . 19
+ 8. IANA Considerations. . . . . . . . . . . . . . . . . . . . . . 20
+ 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 20
+ 9.1. Normative References . . . . . . . . . . . . . . . . . . 20
+ 9.2. Informative References . . . . . . . . . . . . . . . . . 20
+ 10. Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 20
+ 11. Full Copyright Statement . . . . . . . . . . . . . . . . . . .
+
+1. Introduction
+
+ This memo describes an extension to the Stream Control Transmission
+ Protocol (SCTP) RFC 2960 [2] that allows an SCTP sender to signal to
+ its peer that it should no longer expect to receive one or more DATA
+ chunks.
+
+1.1. Overview of Protocol Extensions
+
+ The protocol extension described in this document consists of two new
+ elements:
+
+ 1. a single new parameter in the INIT/INIT-ACK exchange that
+ indicates whether the endpoint supports the extension
+
+
+
+Stewart, et al. Standards Track [Page 2]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ 2. a single new chunk type, FORWARD TSN, that indicates that the
+ receiver should move its cumulative ack point forward (possibly
+ skipping past one or more DATA chunks that may not yet have been
+ received and/or acknowledged.)
+
+1.2. Overview of New Services Provided to the Upper Layer
+
+ When this extension is supported by both sides of an SCTP
+ association, it can be used to provide partially reliable transport
+ service over an SCTP association. We define partially reliable
+ transport service as a service that allows the user to specify, on a
+ per message basis, the rules governing how persistent the transport
+ service should be in attempting to send the message to the receiver.
+
+ One example of partially reliable service is specified in this
+ document, namely a "timed reliability" service. This service allows
+ the service user to indicate a limit on the duration of time that the
+ sender should try to transmit/retransmit the message (this is a
+ natural extension of the "lifetime" parameter already in the base
+ protocol).
+
+ In addition to this example, we will also show that defining the
+ semantics of a particular partially reliable service involves two
+ elements, namely:
+
+ 1. how the service user indicates the level of reliability required
+ for a particular message, and
+
+ 2. how the sender side implementation uses that reliability level to
+ determine when to give up on further retransmissions of that
+ message.
+
+ Note that other than the fact that the FORWARD-TSN chunk is required,
+ neither of these two elements impacts the "on-the-wire" protocol;
+ only the API and the sender side implementation are affected by the
+ way in which the service is defined to the upper layer. Therefore,
+ in principle, it is feasible to implement many varieties of partially
+ reliable services in a particular SCTP implementation without
+ changing the on-the-wire protocol. Also, the SCTP receiver does not
+ necessarily need to know which semantics of partially reliable
+ service are being used by the sender, since the receiver's only role
+ is to correctly interpret FORWARD TSN chunks, thereby skipping past
+ messages that the sender has decided to no longer transmit (or
+ retransmit).
+
+ Nevertheless, it is recommended that a limited number of standard
+ definitions of partially reliable services be standardized by the
+ IETF so that the designers of IETF application layer protocols can
+
+
+
+Stewart, et al. Standards Track [Page 3]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ match the requirements of their upper layer protocols to standard
+ service definitions provided by a particular SCTP implementation.
+ One such definition, "timed reliability", is included in this
+ document. Given the extensions proposed in this document, other
+ definitions may be standardized as the need arises without further
+ changes to the on-the-wire protocol.
+
+1.3. Benefits of PR-SCTP
+
+ Hereafter, we use the notation "Partial Reliable Stream Control
+ Transmission Protocol (PR-SCTP)" to refer to the SCTP protocol,
+ extended as defined in this document.
+
+ The following are some of the advantages for integrating partially
+ reliable data service into SCTP, i.e., benefits of PR-SCTP:
+
+ 1. Some application layer protocols may benefit from being able to
+ use a single SCTP association to carry both reliable content, --
+ such as text pages, billing and accounting information, setup
+ signaling -- and unreliable content, e.g., state that is highly
+ sensitive to timeliness, where generating a new packet is more
+ advantageous than transmitting an old one [3].
+
+ 2. Partially reliable data traffic carried by PR-SCTP will enjoy the
+ same communication failure detection and protection capabilities
+ as the normal reliable SCTP data traffic does. This includes the
+ ability to quickly detect a failed destination address, fail-over
+ to an alternate destination address, and be notified if the data
+ receiver becomes unreachable.
+
+ 3. In addition to providing unordered, unreliable data transfer as
+ UDP does, PR-SCTP can provide ordered, unreliable data transfer
+ service.
+
+ 4. PR-SCTP employs the same congestion control and congestion
+ avoidance for all data traffic, whether reliable or partially
+ reliable - this is very desirable since SCTP enforces TCP-
+ friendliness (unlike UDP.)
+
+ 5. Because of the chunk bundling function of SCTP, reliable and
+ unreliable messages can be multiplexed over a single PR-SCTP
+ association. Therefore, the number of IP datagrams (and hence the
+ network overhead) can be reduced instead of having to send these
+ different types of data using separate protocols. Additionally,
+ this multiplexing allows for port savings versus using different
+ ports for reliable and unreliable connections.
+
+
+
+
+
+Stewart, et al. Standards Track [Page 4]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+2. Conventions
+
+ The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD,
+ SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL, when
+ they appear in this document, are to be interpreted as described in
+ BCP 14, RFC 2119 [1].
+
+ Comparisons and arithmetic on Transport Sequence Numbers (TSNs) are
+ governed by the rules in Section 1.6 of RFC 2960 [2].
+
+3. Protocol Changes to support PR-SCTP
+
+3.1. Forward-TSN-Supported Parameter For INIT and INIT ACK
+
+ The following new OPTIONAL parameter is added to the INIT and INIT
+ ACK chunks.
+
+ Parameter Name Status Type Value
+ -------------------------------------------------------------
+ Forward-TSN-Supported OPTIONAL 49152 (0xC000)
+
+ At the initialization of the association, the sender of the INIT or
+ INIT ACK chunk MAY include this OPTIONAL parameter to inform its peer
+ that it is able to support the Forward TSN chunk (see Section 3.3 for
+ further details). The format of this parameter is defined as
+ follows:
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Parameter Type = 49152 | Parameter Length = 4 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Type: 16 bit u_int
+
+ 49152, indicating Forward-TSN-Supported parameter
+
+ Length: 16 bit u_int
+
+ Indicates the size of the parameter, i.e., 4.
+
+3.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
+
+ The following new chunk type is defined:
+
+ Chunk Type Chunk Name
+ ------------------------------------------------------
+ 192 (0xC0) Forward Cumulative TSN (FORWARD TSN)
+
+
+
+
+Stewart, et al. Standards Track [Page 5]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ This chunk shall be used by the data sender to inform the data
+ receiver to adjust its cumulative received TSN point forward because
+ some missing TSNs are associated with data chunks that SHOULD NOT be
+ transmitted or retransmitted by the sender.
+
+ Forward Cumulative TSN chunk has the following format:
+
+ 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 = 192 | Flags = 0x00 | Length = Variable |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | New Cumulative TSN |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Stream-1 | Stream Sequence-1 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ \ /
+ / \
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Stream-N | Stream Sequence-N |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ Chunk Flags:
+
+ Set to all zeros on transmit and ignored on receipt.
+
+ New Cumulative TSN: 32 bit u_int
+
+ This indicates the new cumulative TSN to the data receiver. Upon
+ the reception of this value, the data receiver MUST consider
+ any missing TSNs earlier than or equal to this value as received,
+ and stop reporting them as gaps in any subsequent SACKs.
+
+ Stream-N: 16 bit u_int
+
+ This field holds a stream number that was skipped by this
+ FWD-TSN.
+
+ Stream Sequence-N: 16 bit u_int
+
+ This field holds the sequence number associated with the stream
+ that was skipped. The stream sequence field holds the largest
+ stream sequence number in this stream being skipped. The receiver
+ of the FWD-TSN's can use the Stream-N and Stream Sequence-N fields
+ to enable delivery of any stranded TSN's that remain on the stream
+ re-ordering queues. This field MUST NOT report TSN's corresponding
+ to DATA chunks that are marked as unordered. For ordered DATA
+ chunks this field MUST be filled in.
+
+
+
+Stewart, et al. Standards Track [Page 6]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+3.3. Negotiation of Forward-TSN-Supported parameter
+
+3.3.1. Sending Forward-TSN-Supported param in INIT
+
+ If an SCTP endpoint supports the FORWARD TSN chunk, then any time it
+ sends an INIT during association establishment, it MAY include the
+ Forward-TSN-supported parameter in the INIT chunk to indicate this
+ fact to its peer.
+
+ Note that if the endpoint chooses NOT to include the parameter, then
+ at no time during the life of the association can it send or process
+ a FORWARD TSN. It MUST instead act as if it does NOT support the
+ FORWARD TSN chunk, returning an ERROR to the peer upon receipt of any
+ FORWARD TSN.
+
+3.3.2. Receipt of Forward-TSN-Supported parameter in INIT or INIT-ACK
+
+ When a receiver of an INIT detects a Forward-TSN-Supported parameter
+ and does not support the Forward-TSN chunk type, the receiver MUST
+ follow the rules defined in Section 3.3.3 of RFC 2960 [2].
+
+ When a receiver of an INIT-ACK detects a Forward-TSN-Supported
+ parameter and it does not support the Forward-TSN chunk type, the
+ receiver MUST follow the rules defined in Section 3.3.3 of RFC 2960
+ [2].
+
+ When a receiver of an INIT detects a Forward-TSN-Supported parameter
+ and it does support the Forward-TSN chunk type, the receiver MAY
+ respond with a Forward-TSN-supported parameter in the INIT-ACK chunk.
+
+ Note that if the endpoint chooses NOT to include the parameter, then
+ at no time during the life of the association can it send or process
+ a FORWARD TSN. It MUST instead act as if it does NOT support the
+ FORWARD TSN chunk, returning an ERROR to the peer upon receipt of any
+ FORWARD TSN.
+
+ When an endpoint that supports the FORWARD TSN chunk receives an INIT
+ that does not contain the Forward-TSN-Supported Parameter, that
+ endpoint:
+
+ o MAY include the Forward-TSN-Supported parameter in the INIT-ACK,
+ o SHOULD record the fact that the peer does not support the FORWARD
+ TSN chunk,
+ o MUST NOT send a FORWARD TSN chunk at any time during the
+ associations life,
+ o SHOULD inform the upper layer if the upper layer has requested
+ such notification.
+
+
+
+
+Stewart, et al. Standards Track [Page 7]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+3.3.3. Receipt of Op. Error for Forward-TSN-Supported Param
+
+ When an SCTP endpoint that desires to use the FORWARD TSN chunk
+ feature for partially reliable data transfer receives an operational
+ error from the remote endpoint (either bundled with the COOKIE or as
+ an unrecognized parameter in the INIT-ACK), indicating that the
+ remote endpoint does not recognize the Forward-TSN-Supported
+ parameter, the local endpoint SHOULD inform its upper layer of the
+ remote endpoint's inability to support partially reliable data
+ transfer.
+
+ The local endpoint may then choose to either:
+
+ 1) end the initiation process (in cases where the initiation process
+ has already ended, the endpoint may need to send an ABORT) in
+ consideration of the peer's inability to supply the requested
+ features for the new association, or
+
+ 2) continue the initiation process (in cases where the initiation
+ process has already completed, the endpoint MUST just mark the
+ association as not supporting partial reliability), but with the
+ understanding that partially reliable data transmission is not
+ supported. In this case, the endpoint receiving the operational
+ error SHOULD note that the FORWARD TSN chunk is not supported, and
+ MUST NOT transmit a FORWARD TSN chunk at any time during the life
+ of the association.
+
+3.4. Definition of "abandoned" in the context of PR-SCTP
+
+ At some point, a sending PR-SCTP implementation MAY determine that a
+ particular data chunk SHOULD NOT be transmitted or retransmitted
+ further, in accordance with the rules governing some particular PR-
+ SCTP service definition (such as the definition of "timed
+ reliability" in Section 4.1.) For purposes of this document, we
+ define the term "abandoned" to refer to any data chunk about which
+ the SCTP sender has made this determination.
+
+ Each PR-SCTP service defines the rules for determining when a TSN is
+ "abandoned", and accordingly, the rules that govern how, whether, and
+ when to "abandon" a TSN may vary from one service definition to
+ another. However, the rules governing the actions taken when a TSN
+ is "abandoned" do NOT vary between service definitions; these rules
+ are included in Section 3.5.
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 8]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+3.5. Sender Side Implementation of PR-SCTP
+
+ The sender side implementation of PR-SCTP is identical to that of the
+ base SCTP protocol, except for:
+
+ o actions a sending side PR-SCTP implementation must take when a TSN
+ is "abandoned" (as per the rules of whatever PR-SCTP service
+ definition is in effect)
+ o special actions that a PR-SCTP implementation must take upon
+ receipt of SACK
+ o rules governing the generation of FORWARD TSN chunks.
+
+ In detail, these exceptions are as follows:
+
+ A1) The sender maintains an "Advanced.Peer.Ack.Point" for each peer
+ to track a theoretical cumulative TSN point of the peer (Note,
+ this is a _new_ protocol variable and its value is NOT
+ necessarily the same as the SCTP "Cumulative TSN Ack Point" as
+ defined in Section 1.4 of RFC 2960 [2], and as discussed
+ throughout that document.)
+
+ A2) From time to time, as governed by the rules of a particular PR-
+ SCTP service definition (see Section 4), the SCTP data sender may
+ make a determination that a particular data chunk that has
+ already been assigned a TSN SHOULD be "abandoned".
+
+ When a data chunk is "abandoned", the sender MUST treat the data
+ chunk as being finally acked and no longer outstanding.
+
+ The sender MUST NOT credit an "abandoned" data chunk to the
+ partial_bytes_acked as defined in Section 7.2.2 of RFC 2960 [2],
+ and MUST NOT advance the cwnd based on this "abandoned" data
+ chunk.
+
+ A3) When a TSN is "abandoned", if it is part of a fragmented message,
+ all other TSN's within that fragmented message MUST be abandoned
+ at the same time.
+
+ A4) Whenever the data sender receives a SACK from the data receiver,
+ it MUST first process the SACK using the normal procedures as
+ defined in Section 6.2.1 of RFC 2960 [2].
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 9]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ The data sender MUST then perform the following additional steps:
+
+ C1) Let SackCumAck be the Cumulative TSN ACK carried in the
+ received SACK.
+
+ If (Advanced.Peer.Ack.Point < SackCumAck), then update
+ Advanced.Peer.Ack.Point to be equal to SackCumAck.
+
+ C2) Try to further advance the "Advanced.Peer.Ack.Point" locally,
+ that is, to move "Advanced.Peer.Ack.Point" up as long as the
+ chunk next in the out-queue space is marked as "abandoned",
+ as shown in the following example:
+
+ Assuming that a SACK arrived with the Cumulative TSN ACK =
+ 102 and the Advanced.Peer.Ack.Point is updated to this
+ value:
+
+ out-queue at the end of ==> out-queue after Adv.Ack.Point
+ normal SACK processing local advancement
+
+ ... ...
+ Adv.Ack.Pt-> 102 acked 102 acked
+ 103 abandoned 103 abandoned
+ 104 abandoned Adv.Ack.P-> 104 abandoned
+ 105 105
+ 106 acked 106 acked
+ ... ...
+
+ In this example, the data sender successfully advanced the
+ "Advanced.Peer.Ack.Point" from 102 to 104 locally.
+
+ C3) If, after step C1 and C2, the "Advanced.Peer.Ack.Point" is
+ greater than the Cumulative TSN ACK carried in the received
+ SACK, the data sender MUST send the data receiver a FORWARD
+ TSN chunk containing the latest value of the
+ "Advanced.Peer.Ack.Point". Note that the sender MAY delay
+ the sending of a FORWARD TSN as defined in rule F2 below.
+ IMPLEMENTATION NOTE: It is an implementation decision as to
+ which destination address it is to be sent to, the only
+ restriction being that the address MUST be one that is
+ CONFIRMED.
+
+ C4) For each "abandoned" TSN, the sender of the FORWARD TSN MUST
+ determine if the chunk has a valid stream and sequence number
+ (i.e., it was ordered). If the chunk has a valid stream and
+ sequence number, the sender MUST include the stream and
+ sequence number in the FORWARD TSN. This information will
+ enable the receiver to easily find any stranded TSN's waiting
+
+
+
+Stewart, et al. Standards Track [Page 10]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ on stream reorder queues. Each stream SHOULD only be
+ reported once; this means that if multiple abandoned messages
+ occur in the same stream, then only the highest abandoned
+ stream sequence number is reported. If the total size of the
+ FORWARD TSN does NOT fit in a single MTU, then the sender of
+ the FORWARD TSN SHOULD lower the Advanced.Peer.Ack.Point to
+ the last TSN that will fit in a single MTU.
+
+ C5) If a FORWARD TSN is sent, the sender MUST assure that at
+ least one T3-rtx timer is running. IMPLEMENTATION NOTE: Any
+ destination's timer may be used for the purposes of rule C5.
+
+ A5) Any time the T3-rtx timer expires, on any destination, the sender
+ SHOULD try to advance the "Advanced.Peer.Ack.Point" by following
+ the procedures outlined in C2 - C5.
+
+ The following additional rules govern the generation of FORWARD TSN
+ chunks:
+
+ F1) An endpoint MUST NOT use the FORWARD TSN for any purposes other
+ than circumstances described in this document.
+
+ F2) The data sender SHOULD always attempt to bundle an outgoing
+ FORWARD TSN with outbound DATA chunks for efficiency.
+
+ A sender MAY even choose to delay the sending of the FORWARD TSN
+ in the hope of bundling it with an outbound DATA chunk.
+
+ IMPLEMENTATION NOTE: An implementation may wish to limit the
+ number of duplicate FORWARD TSN chunks it sends by either only
+ sending a duplicate FORWARD TSN every other SACK or waiting a
+ full RTT before sending a duplicate FORWARD TSN.
+
+ IMPLEMENTATION NOTE: An implementation may allow the maximum
+ delay for generating a FORWARD TSN to be configured either
+ statically or dynamically in order to meet the specific timing
+ requirements of the protocol being carried, but see the next
+ rule:
+
+ F3) Any delay applied to the sending of FORWARD TSN chunk SHOULD NOT
+ exceed 200ms and MUST NOT exceed 500ms. In other words, an
+ implementation MAY lower this value below 500ms but MUST NOT
+ raise it above 500ms.
+
+ NOTE: Delaying the sending of FORWARD TSN chunks may cause delays
+ in the receiver's ability to deliver other data being held at the
+ receiver for re-ordering. The values of 200ms and 500ms match
+
+
+
+
+Stewart, et al. Standards Track [Page 11]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ the required values for the delayed acknowledgement in RFC 2960
+ [2] since delaying a FORWARD TSN has the same consequences but in
+ the reverse direction.
+
+ F4) The detection criterion for out-of-order SACKs MUST remain the
+ same as stated in RFC 2960, that is, a SACK is only considered
+ out-of-order if the Cumulative TSN ACK carried in the SACK is
+ earlier than that of the previous received SACK (i.e., the
+ comparison MUST NOT be made against "Advanced.Peer.Ack.Point").
+
+ F5) If the decision to "abandon" a chunk is made, no matter how such
+ a decision is made, the appropriate congestion adjustment MUST be
+ made as specified in RFC 2960 if the chunk would have been marked
+ for retransmission later (e.g., either by T3-Timeout or by Fast
+ Retransmit).
+
+3.6. Receiver Side Implementation of PR-SCTP
+
+ The receiver side implementation of PR-SCTP at an SCTP endpoint A is
+ capable of supporting any PR-SCTP service definition used by the
+ sender at endpoint B, even if that service definition is not
+ supported by the sending side functionality of host A. All that is
+ necessary is that the receiving side correctly handle the Forward-
+ TSN-Supported parameter as specified in Section 3.3, and correctly
+ handle the receipt of FORWARD TSN chunks as specified below.
+
+ DATA chunk arrival at a PR-SCTP receiver proceeds exactly as for DATA
+ chunk arrival at a base protocol SCTP receiver---that is, the
+ receiver MUST perform the same TSN handling, including duplicate
+ detection, gap detection, SACK generation, cumulative TSN
+ advancement, etc. as defined in RFC 2960 [2]---with the following
+ exceptions and additions.
+
+ When a FORWARD TSN chunk arrives, the data receiver MUST first update
+ its cumulative TSN point to the value carried in the FORWARD TSN
+ chunk, and then MUST further advance its cumulative TSN point locally
+ if possible, as shown by the following example:
+
+ Assuming that the new cumulative TSN carried in the arrived
+ FORWARD TSN is 103:
+
+ in-queue before processing in-queue after processing
+ the FORWARD TSN ==> the FORWARD TSN and further
+ advancement
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 12]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ cum.TSN.Pt-> 102 received 102 --
+ 103 missing 103 --
+ 104 received 104 --
+ 105 received cum.TSN.Pt-> 105 received
+ 106 missing 106 missing
+ 107 received 107 received
+ ... ...
+
+ In this example, the receiver's cumulative TSN point is first
+ updated to 103 and then further advanced to 105.
+
+ After the above processing, the data receiver MUST stop reporting any
+ missing TSNs earlier than or equal to the new cumulative TSN point.
+
+ Note, if the "New Cumulative TSN" value carried in the arrived
+ FORWARD TSN chunk is found to be behind or at the current cumulative
+ TSN point, the data receiver MUST treat this FORWARD TSN as out-of-
+ date and MUST NOT update its Cumulative TSN. The receiver SHOULD
+ send a SACK to its peer (the sender of the FORWARD TSN) since such a
+ duplicate may indicate the previous SACK was lost in the network.
+
+ Any time a FORWARD TSN chunk arrives, for the purposes of sending a
+ SACK, the receiver MUST follow the same rules as if a DATA chunk had
+ been received (i.e., follow the delayed sack rules specified in RFC
+ 2960 [2] section 6.2).
+
+ Whenever a DATA chunk arrives with the 'U' bit set to '0' (indicating
+ ordered delivery) and is out of order, the receiver must hold the
+ chunk for reordering. Since it is possible with PR-SCTP that a DATA
+ chunk being waited upon will not be retransmitted, special actions
+ will need to be taken upon the arrival of a FORWARD TSN.
+
+ In particular, during processing of a FORWARD TSN, the receiver MUST
+ use the stream sequence information to examine all of the listed
+ stream reordering queues, and immediately make available for delivery
+ stream sequence numbers earlier than or equal to the stream sequence
+ number listed inside the FORWARD TSN. Any such stranded data SHOULD
+ be made immediately available to the upper layer application.
+
+ An application using PR-SCTP receiving data should be aware of
+ possible missing messages. The stream sequence number can be used,
+ in such a case, to determine that an intervening message has been
+ skipped. When intervening messages are missing, it is an application
+ decision to process the messages or to take some other corrective
+ action.
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 13]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ After receiving and processing a FORWARD TSN, the data receiver MUST
+ take cautions in updating its re-assembly queue. The receiver MUST
+ remove any partially reassembled message, which is still missing one
+ or more TSNs earlier than or equal to the new cumulative TSN point.
+ In the event that the receiver has invoked the partial delivery API,
+ a notification SHOULD also be generated to inform the upper layer API
+ that the message being partially delivered will NOT be completed.
+
+ Note that after receiving a FORWARD TSN and updating the cumulative
+ acknowledgement point, if a TSN that was skipped does arrive (i.e.,
+ due to network reordering), then the receiver will follow the normal
+ rules defined in RFC 2960 [2] for handling duplicate data. This
+ implies that the receiver will drop the chunk and report it as a
+ duplicate in the next outbound SACK chunk.
+
+4. Services provided by PR-SCTP to the upper layer
+
+ As described in Section 1.2, it is feasible to implement a variety of
+ partially reliable transport services using the new protocol
+ mechanisms introduced in Section 3; introducing these new services
+ requires making changes only at the sending side API, and the sending
+ side protocol implementation. Thus, there may be a temptation to
+ standardize only the protocol, and leave the service definition as
+ "implementation specific" or leave it to be defined in
+ "informational" documents.
+
+ However, for those who may wish to write IETF standards for upper
+ layer protocols implemented over PR-SCTP, it is important to be able
+ to refer to a standard definition of services provided. Therefore,
+ this section provides example definitions of one such service, while
+ also providing guidelines for the definition of additional services
+ as required. Each such service may be proposed as a separate new
+ RFC.
+
+ Section 4 is organized as follows:
+
+ o Section 4.1 provides the definition of one specific PR-SCTP
+ service: timed reliability.
+
+ o Section 4.2 describes how a particular PR-SCTP service definition
+ is requested by the upper layer during association establishment,
+ and how the upper layer is notified if that request cannot be
+ satisfied.
+
+ o Section 4.3 then provides guidelines for the specification of PR-
+ SCTP services other then the one defined in this memo.
+
+
+
+
+
+Stewart, et al. Standards Track [Page 14]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ o Finally, Section 4.4 describes some additional usage notes that
+ upper layer protocol designers and implementors may find helpful.
+
+4.1. PR-SCTP Service Definition for "timed reliability"
+
+ The "timed reliability" service is a natural extension of the
+ "lifetime" concept already present in the base SCTP protocol.
+
+ When this service is requested for an SCTP association, it changes
+ the meaning of the lifetime parameter specified in the SEND primitive
+ (see Section 10.1, part (E) of RFC 2960 [2]; note that the parameter
+ is spelled "life time" in that document.)
+
+ In the base SCTP protocol, the lifetime parameter is used to avoid
+ sending stale data. When a lifetime value is indicated for a
+ particular message and that lifetime expires, SCTP cancels the
+ sending of this message, and notifies the ULP if the first
+ transmission of the data does not take place (because of rwnd or cwnd
+ limitations, or for any other reason). However, in the base
+ protocol, if SCTP has sent the first transmission before the lifetime
+ expires, then the message MUST be sent as a normal reliable message.
+ During episodes of congestion this is particularly unfortunate, as
+ retransmission wastes bandwidth that could have been used for other
+ (non-lifetime expired) messages.
+
+ When the "timed reliability" service is invoked, this latter
+ restriction is removed. Specifically, when the "timed reliability"
+ service is in effect, the following rules govern all messages that
+ are sent with a lifetime parameter:
+
+ TR1) If the lifetime parameter of a message is SCTP_LIFETIME_RELIABLE
+ (or unspecified see Section 5), that message is treated as a
+ normal reliable SCTP message, just as in the base SCTP protocol.
+
+ TR2) If the lifetime parameter is not SCTP_LIFETIME_RELIABLE (see
+ Section 5), then the SCTP sender MUST treat the message just as
+ if it were a normal reliable SCTP message, as long as the
+ lifetime has not yet expired.
+
+ TR3) Before assigning a TSN to any message, the SCTP sender MUST
+ evaluate the lifetime of that message. If it is expired, the
+ SCTP sender MUST NOT assign a TSN to that message, but instead,
+ SHOULD issue a notification to the upper layer and abandon the
+ message.
+
+ TR4) Before transmitting or retransmitting a message for which a TSN
+ is already assigned, the SCTP sender MUST evaluate the lifetime
+ of the message. If the lifetime of the message is expired, the
+
+
+
+Stewart, et al. Standards Track [Page 15]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ SCTP sender MUST "abandon" the message, as per the rules
+ specified in Section 3.5 marking that TSN as eligible for
+ forward TSN. Note that this meets the requirement G1 defined in
+ Section 4.3. IMPLEMENTATION NOTE: An implementation SHOULD
+ delay TSN assignment as mentioned in RFC 2960 [2] Section 10.1.
+ In such a case, the lifetime parameter should be checked BEFORE
+ assigning a TSN, thus allowing a message to be abandoned without
+ the need to send a FORWARD TSN.
+
+ TR5) The sending SCTP MAY evaluate the lifetime of messages at
+ anytime. Expired messages that have not been assigned a TSN MAY
+ be handled as per rule TR3. Expired messages that HAVE been
+ assigned a TSN MAY be handled as per rule TR4.
+
+ TR6) The sending application MUST NOT change the lifetime parameter
+ once the message is passed to the sending SCTP.
+
+ Implementation Note: Rules TR1 through TR4 are designed in such a way
+ as to avoid requiring the implementer to maintain a separate timer
+ for each message; instead, the lifetime need only be evaluated at
+ points in the life of the message where actions are already being
+ taken, such as TSN assignment, transmission, or expiration of a
+ retransmission timeout. Rule TR5 is intended to give the SCTP
+ implementor flexibility to evaluate lifetime at any other convenient
+ opportunity, WITHOUT requiring that lifetime be evaluated immediately
+ at the point in time where it expires.
+
+4.2. PR-SCTP Association Establishment
+
+ An upper layer protocol (ULP) that uses PR-SCTP may need to know
+ whether PR-SCTP can be supported on a given association. Therefore,
+ the ULP needs to have some indication of whether the FORWARD-TSN
+ chunk is supported by its peer.
+
+ Section 10.1 of RFC 2960 [2] describes abstract primitives for the
+ ULP-to-SCTP interface, while noting that "individual implementations
+ must define their own exact format, and may provide combinations or
+ subsets of the basic functions in single calls."
+
+ In this section, we describe one additional return value that may be
+ added to the ASSOCIATE primitive to allow an SCTP service user to
+ indicate whether the FORWARD-TSN chunk is supported by its peer.
+
+ RFC 2960 indicates that the ASSOCIATE primitive "allows the upper
+ layer to initiate an association to a specific peer endpoint". It is
+ structured as follows:
+
+
+
+
+
+Stewart, et al. Standards Track [Page 16]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ Format: ASSOCIATE(local SCTP instance name, destination transport
+ addr, outbound stream count)
+ -> association id [,destination transport addr list]
+ [,outbound stream count]
+
+ This extension adds one new OPTIONAL return value, such that the new
+ primitive reads as follows:
+
+ Format: ASSOCIATE(local SCTP instance name, destination transport
+ addr, outbound stream count )
+ -> association id [,destination transport addr list]
+ [,outbound stream count] [,forward tsn supported]
+
+ NOTE: As per RFC 2960, if the ASSOCIATE primitive is implemented as a
+ non-blocking call, the new OPTIONAL return value shall be passed with
+ the association parameters using the COMMUNICATION UP notification.
+
+ The new OPTIONAL parameter "forward tsn supported" is a boolean flag:
+
+ (0) false [default] indicates that FORWARD TSN is not enabled by both
+ endpoints.
+
+ (1) true indicates that FORWARD TSN is enabled on both endpoints.
+
+ We also add a new primitive to allow the user application to enable/
+ disable the PR-SCTP service on its endpoint before an association is
+ established.
+
+ Format: ENABLE_PRSCTP(local SCTP instance name, boolean enable)
+
+ The boolean parameter enable, if set to true, will enable PR-SCTP
+ upon future endpoint associations. If the boolean parameter is set
+ to false, then the local endpoint will not advertise support of PR-
+ SCTP and thus disable the feature on future associations. It is
+ recommended that this option be disabled by default, i.e., in order
+ to enable PR-SCTP, the user will need to call this API option with
+ the enable flag set to "true".
+
+4.3. Guidelines for defining other PR-SCTP Services
+
+ Other PR-SCTP services may be defined and implemented as dictated by
+ the needs of upper layer protocols. If such upper layer protocols
+ are to be standardized and require some particular PR-SCTP service
+ other than the one defined in this document (i.e., "timed
+ reliability"), then those additional PR-SCTP services should also be
+ specified and standardized in a new RFC.
+
+
+
+
+
+Stewart, et al. Standards Track [Page 17]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ It is suggested that any such additional service definitions be
+ modeled after the contents of Section 4.1. In particular, the
+ service definition should provide:
+
+ 1. A description of how the service user specifies any parameters
+ that need to be associated with a particular message (and/or any
+ other communication that takes place between the application and
+ the SCTP transport sender) that provides the SCTP transport sender
+ with the information needed to determine when to give up on
+ transmission of a particular message.
+
+ Preferably, this description should reference the primitives in
+ the abstract API provided in Section 10 of RFC 2960 [2],
+ indicating any:
+
+ * changes to the interpretation of the existing parameters of
+ existing primitives,
+
+ * additional parameters to be added to existing primitives (these
+ should be OPTIONAL, and default values should be indicated),
+
+ * additional primitives that may be needed.
+
+ 2. A description of the rules used by the sender side implementation
+ to determine when to give up on messages that have not yet been
+ assigned a TSN. This description should also indicate what
+ protocol events trigger the evaluation, and what actions to take
+ (e.g., notifications.)
+
+ 3. A description of the rules used by the sender side implementation
+ to determine when to give up on the transmission or retransmission
+ of messages that have already been assigned a TSN, and may have
+ been transmitted and possibly retransmitted zero or more times.
+
+ Items (2) and (3) in the list above should also indicate what
+ protocol events trigger the evaluation, and what actions to take if
+ the determination is made that the sender should give up on
+ transmitting the message (e.g., notifications to the ULP.)
+
+ Note that in any PR-SCTP service, the following rule MUST be
+ specified to avoid a protocol deadlock:
+
+ (G1) When the sender side implementation gives up on transmitting a
+ message that has been assigned a TSN (i.e., when that message is
+ "abandoned", as defined in Section 3.4), the sender side MUST
+ mark that TSN as eligible for forward TSN, and the rules in
+ Section 3.4 regarding the sending of FORWARD TSN chunks MUST be
+ followed.
+
+
+
+Stewart, et al. Standards Track [Page 18]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ Finally, a PR-SCTP service definition should specify a "canonical
+ service name" to uniquely identify the service, and distinguish it
+ from other PR-SCTP services. This name can then be used in upper
+ layer protocol standards to indicate which PR-SCTP service definition
+ is required by that upper layer protocol. It can also be used in the
+ documentation of APIs of PR-SCTP implementations to indicate how an
+ upper layer indicates which definition of PR-SCTP service should
+ apply. The canonical service name for the PR-SCTP service defined in
+ Section 4.1 is "timed reliability".
+
+4.4. Usage Notes
+
+ Detecting missing data in a PR-SCTP stream is useful for some
+ applications (e.g., Fibre channel or SCSI over IP). With PR-SCTP,
+ this becomes possible - the upper layer simply needs to examine the
+ stream sequence number of the arrived user messages of that stream to
+ detect any missing data. Note, this detection only works when all
+ the messages on that stream are sent in order, i.e., the "U" bit is
+ not set.
+
+5. Variables
+
+ This section defines variables used throughout this document:
+
+ SCTP_LIFETIME_RELIABLE - A user interface indication defined by an
+ implementation and used to indicate when a message is to be
+ considered fully reliable.
+
+6. Acknowledgments
+
+ The authors would like to thank Brian Bidulock, Scott Bradner, Jon
+ Berger, Armando L. Caro Jr., John Loughney, Jon Peterson, Ivan Arias
+ Rodriguez, Ian Rytina, Chip Sharp, and others for their comments.
+
+7. Security Considerations
+
+ This document does not introduce any new security concerns to SCTP
+ other than the ones already documented in RFC 2960 [2]. In
+ particular, this document shares the same security issues as
+ unordered data within RFC 2960 [2] identified by RFC 3436 [4]. An
+ application using the PR-SCTP extension should not use transport
+ layer security; further details can be found in RFC 3436 [4].
+
+ Note that the ability to cause a message to be skipped (i.e, the
+ FORWARD TSN chunk) does not provide any new attack for a Man-In-the-
+ Middle (MIM), since the MIM already is capable of changing and/or
+ withholding data, thus effectively skipping messages. However, the
+ FORWARD TSN chunk does provide a mechanism to make it easier for a
+
+
+
+Stewart, et al. Standards Track [Page 19]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ MIM to skip selective messages when the application has this feature
+ enabled since the MIM would have less state to maintain.
+
+8. IANA Considerations
+
+ IANA has assigned 192 as a new chunk type to SCTP.
+
+ IANA has assigned 49152 as a new parameter type code to SCTP.
+
+9. References
+
+9.1. Normative References
+
+ [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement
+ Levels", BCP 14, RFC 2119, March 1997.
+
+ [2] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer,
+ H., Taylor, T., Rytina, I., Kalla, M., Zhang, L. and V. Paxson,
+ "Stream Control Transmission Protocol", RFC 2960, October 2000.
+
+9.2. Informative References
+
+ [3] Clark, D. and D. Tennenhouse, "Architectural Considerations for
+ a New Generation of Protocols", SIGCOMM 1990 pp. 200-208,
+ September 1990.
+
+ [4] Jungmaier, A., Rescorla, E. and M. Tuexen, "Transport Layer
+ Security over Stream Control Transmission Protocol", RFC 3436,
+ December 2002.
+
+10. Authors' Addresses
+
+ Randall R. Stewart
+ Cisco Systems, Inc.
+ 8725 West Higgins Road
+ Suite 300
+ Chicago, IL 60631
+ USA
+
+ Phone: +1-815-477-2127
+ EMail: rrs@cisco.com
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 20]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+ Michael A. Ramalho
+ Cisco Systems, Inc.
+ 1802 Rue de la Porte
+ Wall Township, NJ 07719-3784
+ USA
+
+ Phone: +1.732.449.5762
+ EMail: mramalho@cisco.com
+
+
+ Qiaobing Xie
+ Motorola, Inc.
+ 1501 W. Shure Drive, #2309
+ Arlington Heights, IL 60004
+ USA
+
+ Phone: +1-847-632-3028
+ EMail: qxie1@email.mot.com
+
+
+ Michael Tuexen
+ Univ. of Applied Sciences Muenster
+ Stegerwaldstr. 39
+ 48565 Steinfurt
+ Germany
+
+ EMail: tuexen@fh-muenster.de
+
+
+ Phillip T. Conrad
+ University of Delaware
+ Department of Computer and Information Sciences
+ Newark, DE 19716
+ USA
+
+ Phone: +1 302 831 8622
+ EMail: conrad@acm.org
+ URI: http://www.cis.udel.edu/~pconrad
+
+
+
+
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 21]
+
+RFC 3758 SCTP Partial Reliability Extension May 2004
+
+
+11. Full Copyright Statement
+
+ Copyright (C) The Internet Society (2004). This document is subject
+ to the rights, licenses and restrictions contained in BCP 78, and
+ except as set forth therein, the authors retain all their rights.
+
+ This document and the information contained herein are provided on an
+ "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+ OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
+ ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
+ INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+ INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+ WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Intellectual Property
+
+ The IETF takes no position regarding the validity or scope of any
+ Intellectual Property Rights or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; nor does it represent that it has
+ made any independent effort to identify any such rights. Information
+ on the procedures with respect to rights in RFC documents can be
+ found in BCP 78 and BCP 79.
+
+ Copies of IPR disclosures made to the IETF Secretariat and any
+ assurances of licenses to be made available, or the result of an
+ attempt made to obtain a general license or permission for the use of
+ such proprietary rights by implementers or users of this
+ specification can be obtained from the IETF on-line IPR repository at
+ http://www.ietf.org/ipr.
+
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights that may cover technology that may be required to implement
+ this standard. Please address the information to the IETF at ietf-
+ ipr@ietf.org.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+
+
+Stewart, et al. Standards Track [Page 22]
+