blob: 1c0dc15fa2853eb893efb426ef3005da57f6e358 [file] [log] [blame]
Austin Schuh8d0a2852019-12-28 22:54:28 -08001
2
3
4
5
6
7Network Working Group R. Stewart
8Request for Comments: 3758 M. Ramalho
9Category: Standards Track Cisco Systems, Inc.
10 Q. Xie
11 Motorola, Inc.
12 M. Tuexen
13 Univ. of Applied Sciences Muenster
14 P. Conrad
15 University of Delaware
16 May 2004
17
18
19 Stream Control Transmission Protocol (SCTP)
20 Partial Reliability Extension
21
22Status of this Memo
23
24 This document specifies an Internet standards track protocol for the
25 Internet community, and requests discussion and suggestions for
26 improvements. Please refer to the current edition of the "Internet
27 Official Protocol Standards" (STD 1) for the standardization state
28 and status of this protocol. Distribution of this memo is unlimited.
29
30Copyright Notice
31
32 Copyright (C) The Internet Society (2004). All Rights Reserved.
33
34Abstract
35
36 This memo describes an extension to the Stream Control Transmission
37 Protocol (SCTP) that allows an SCTP endpoint to signal to its peer
38 that it should move the cumulative ack point forward. When both
39 sides of an SCTP association support this extension, it can be used
40 by an SCTP implementation to provide partially reliable data
41 transmission service to an upper layer protocol. This memo describes
42 the protocol extensions, which consist of a new parameter for INIT
43 and INIT ACK, and a new FORWARD TSN chunk type, and provides one
44 example of a partially reliable service that can be provided to the
45 upper layer via this mechanism.
46
47
48
49
50
51
52
53
54
55
56
57
58Stewart, et al. Standards Track [Page 1]
59
60RFC 3758 SCTP Partial Reliability Extension May 2004
61
62
63Table of Contents
64
65 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
66 1.1. Overview of Protocol Extensions. . . . . . . . . . . . . 2
67 1.2. Overview of New Services Provided to the Upper Layer . . 3
68 1.3. Benefits of PR-SCTP . . . . . . . . . . . . . . . . . . 4
69 2. Conventions. . . . . . . . . . . . . . . . . . . . . . . . . . 5
70 3. Protocol Changes to support PR-SCTP . . . . . . . . . . . . . 5
71 3.1. Forward-TSN-Supported Parameter For INIT and INIT ACK. . 5
72 3.2. Forward Cumulative TSN Chunk Definition (FORWARD TSN). . 5
73 3.3. Negotiation of Forward-TSN-Supported parameter . . . . . 7
74 3.3.1. Sending Forward-TSN-Supported param in INIT . . . 7
75 3.3.2. Receipt of Forward-TSN-Supported parameter in
76 INIT or INIT-ACK. . . . . . . . . . . . . . . . . 7
77 3.3.3. Receipt of Op. Error for Forward-TSN-Supported
78 Param . . . . . . . . . . . . . . . . . . . . . . 8
79 3.4. Definition of "abandoned" in the context of PR-SCTP. . . 8
80 3.5. Sender Side Implementation of PR-SCTP. . . . . . . . . . 9
81 3.6. Receiver Side Implementation of PR-SCTP. . . . . . . . . 12
82 4. Services provided by PR-SCTP to the upper layer. . . . . . . . 14
83 4.1. PR-SCTP Service Definition for "timed reliability" . . . 15
84 4.2. PR-SCTP Association Establishment. . . . . . . . . . . . 16
85 4.3. Guidelines for defining other PR-SCTP Services . . . . . 17
86 4.4. Usage Notes. . . . . . . . . . . . . . . . . . . . . . . 19
87 5. Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . 19
88 6. Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . 19
89 7. Security Considerations. . . . . . . . . . . . . . . . . . . . 19
90 8. IANA Considerations. . . . . . . . . . . . . . . . . . . . . . 20
91 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 20
92 9.1. Normative References . . . . . . . . . . . . . . . . . . 20
93 9.2. Informative References . . . . . . . . . . . . . . . . . 20
94 10. Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 20
95 11. Full Copyright Statement . . . . . . . . . . . . . . . . . . .
96
971. Introduction
98
99 This memo describes an extension to the Stream Control Transmission
100 Protocol (SCTP) RFC 2960 [2] that allows an SCTP sender to signal to
101 its peer that it should no longer expect to receive one or more DATA
102 chunks.
103
1041.1. Overview of Protocol Extensions
105
106 The protocol extension described in this document consists of two new
107 elements:
108
109 1. a single new parameter in the INIT/INIT-ACK exchange that
110 indicates whether the endpoint supports the extension
111
112
113
114Stewart, et al. Standards Track [Page 2]
115
116RFC 3758 SCTP Partial Reliability Extension May 2004
117
118
119 2. a single new chunk type, FORWARD TSN, that indicates that the
120 receiver should move its cumulative ack point forward (possibly
121 skipping past one or more DATA chunks that may not yet have been
122 received and/or acknowledged.)
123
1241.2. Overview of New Services Provided to the Upper Layer
125
126 When this extension is supported by both sides of an SCTP
127 association, it can be used to provide partially reliable transport
128 service over an SCTP association. We define partially reliable
129 transport service as a service that allows the user to specify, on a
130 per message basis, the rules governing how persistent the transport
131 service should be in attempting to send the message to the receiver.
132
133 One example of partially reliable service is specified in this
134 document, namely a "timed reliability" service. This service allows
135 the service user to indicate a limit on the duration of time that the
136 sender should try to transmit/retransmit the message (this is a
137 natural extension of the "lifetime" parameter already in the base
138 protocol).
139
140 In addition to this example, we will also show that defining the
141 semantics of a particular partially reliable service involves two
142 elements, namely:
143
144 1. how the service user indicates the level of reliability required
145 for a particular message, and
146
147 2. how the sender side implementation uses that reliability level to
148 determine when to give up on further retransmissions of that
149 message.
150
151 Note that other than the fact that the FORWARD-TSN chunk is required,
152 neither of these two elements impacts the "on-the-wire" protocol;
153 only the API and the sender side implementation are affected by the
154 way in which the service is defined to the upper layer. Therefore,
155 in principle, it is feasible to implement many varieties of partially
156 reliable services in a particular SCTP implementation without
157 changing the on-the-wire protocol. Also, the SCTP receiver does not
158 necessarily need to know which semantics of partially reliable
159 service are being used by the sender, since the receiver's only role
160 is to correctly interpret FORWARD TSN chunks, thereby skipping past
161 messages that the sender has decided to no longer transmit (or
162 retransmit).
163
164 Nevertheless, it is recommended that a limited number of standard
165 definitions of partially reliable services be standardized by the
166 IETF so that the designers of IETF application layer protocols can
167
168
169
170Stewart, et al. Standards Track [Page 3]
171
172RFC 3758 SCTP Partial Reliability Extension May 2004
173
174
175 match the requirements of their upper layer protocols to standard
176 service definitions provided by a particular SCTP implementation.
177 One such definition, "timed reliability", is included in this
178 document. Given the extensions proposed in this document, other
179 definitions may be standardized as the need arises without further
180 changes to the on-the-wire protocol.
181
1821.3. Benefits of PR-SCTP
183
184 Hereafter, we use the notation "Partial Reliable Stream Control
185 Transmission Protocol (PR-SCTP)" to refer to the SCTP protocol,
186 extended as defined in this document.
187
188 The following are some of the advantages for integrating partially
189 reliable data service into SCTP, i.e., benefits of PR-SCTP:
190
191 1. Some application layer protocols may benefit from being able to
192 use a single SCTP association to carry both reliable content, --
193 such as text pages, billing and accounting information, setup
194 signaling -- and unreliable content, e.g., state that is highly
195 sensitive to timeliness, where generating a new packet is more
196 advantageous than transmitting an old one [3].
197
198 2. Partially reliable data traffic carried by PR-SCTP will enjoy the
199 same communication failure detection and protection capabilities
200 as the normal reliable SCTP data traffic does. This includes the
201 ability to quickly detect a failed destination address, fail-over
202 to an alternate destination address, and be notified if the data
203 receiver becomes unreachable.
204
205 3. In addition to providing unordered, unreliable data transfer as
206 UDP does, PR-SCTP can provide ordered, unreliable data transfer
207 service.
208
209 4. PR-SCTP employs the same congestion control and congestion
210 avoidance for all data traffic, whether reliable or partially
211 reliable - this is very desirable since SCTP enforces TCP-
212 friendliness (unlike UDP.)
213
214 5. Because of the chunk bundling function of SCTP, reliable and
215 unreliable messages can be multiplexed over a single PR-SCTP
216 association. Therefore, the number of IP datagrams (and hence the
217 network overhead) can be reduced instead of having to send these
218 different types of data using separate protocols. Additionally,
219 this multiplexing allows for port savings versus using different
220 ports for reliable and unreliable connections.
221
222
223
224
225
226Stewart, et al. Standards Track [Page 4]
227
228RFC 3758 SCTP Partial Reliability Extension May 2004
229
230
2312. Conventions
232
233 The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD,
234 SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL, when
235 they appear in this document, are to be interpreted as described in
236 BCP 14, RFC 2119 [1].
237
238 Comparisons and arithmetic on Transport Sequence Numbers (TSNs) are
239 governed by the rules in Section 1.6 of RFC 2960 [2].
240
2413. Protocol Changes to support PR-SCTP
242
2433.1. Forward-TSN-Supported Parameter For INIT and INIT ACK
244
245 The following new OPTIONAL parameter is added to the INIT and INIT
246 ACK chunks.
247
248 Parameter Name Status Type Value
249 -------------------------------------------------------------
250 Forward-TSN-Supported OPTIONAL 49152 (0xC000)
251
252 At the initialization of the association, the sender of the INIT or
253 INIT ACK chunk MAY include this OPTIONAL parameter to inform its peer
254 that it is able to support the Forward TSN chunk (see Section 3.3 for
255 further details). The format of this parameter is defined as
256 follows:
257
258 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
259 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
260 | Parameter Type = 49152 | Parameter Length = 4 |
261 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
262
263 Type: 16 bit u_int
264
265 49152, indicating Forward-TSN-Supported parameter
266
267 Length: 16 bit u_int
268
269 Indicates the size of the parameter, i.e., 4.
270
2713.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
272
273 The following new chunk type is defined:
274
275 Chunk Type Chunk Name
276 ------------------------------------------------------
277 192 (0xC0) Forward Cumulative TSN (FORWARD TSN)
278
279
280
281
282Stewart, et al. Standards Track [Page 5]
283
284RFC 3758 SCTP Partial Reliability Extension May 2004
285
286
287 This chunk shall be used by the data sender to inform the data
288 receiver to adjust its cumulative received TSN point forward because
289 some missing TSNs are associated with data chunks that SHOULD NOT be
290 transmitted or retransmitted by the sender.
291
292 Forward Cumulative TSN chunk has the following format:
293
294 0 1 2 3
295 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
296 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
297 | Type = 192 | Flags = 0x00 | Length = Variable |
298 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
299 | New Cumulative TSN |
300 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
301 | Stream-1 | Stream Sequence-1 |
302 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
303 \ /
304 / \
305 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
306 | Stream-N | Stream Sequence-N |
307 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
308
309 Chunk Flags:
310
311 Set to all zeros on transmit and ignored on receipt.
312
313 New Cumulative TSN: 32 bit u_int
314
315 This indicates the new cumulative TSN to the data receiver. Upon
316 the reception of this value, the data receiver MUST consider
317 any missing TSNs earlier than or equal to this value as received,
318 and stop reporting them as gaps in any subsequent SACKs.
319
320 Stream-N: 16 bit u_int
321
322 This field holds a stream number that was skipped by this
323 FWD-TSN.
324
325 Stream Sequence-N: 16 bit u_int
326
327 This field holds the sequence number associated with the stream
328 that was skipped. The stream sequence field holds the largest
329 stream sequence number in this stream being skipped. The receiver
330 of the FWD-TSN's can use the Stream-N and Stream Sequence-N fields
331 to enable delivery of any stranded TSN's that remain on the stream
332 re-ordering queues. This field MUST NOT report TSN's corresponding
333 to DATA chunks that are marked as unordered. For ordered DATA
334 chunks this field MUST be filled in.
335
336
337
338Stewart, et al. Standards Track [Page 6]
339
340RFC 3758 SCTP Partial Reliability Extension May 2004
341
342
3433.3. Negotiation of Forward-TSN-Supported parameter
344
3453.3.1. Sending Forward-TSN-Supported param in INIT
346
347 If an SCTP endpoint supports the FORWARD TSN chunk, then any time it
348 sends an INIT during association establishment, it MAY include the
349 Forward-TSN-supported parameter in the INIT chunk to indicate this
350 fact to its peer.
351
352 Note that if the endpoint chooses NOT to include the parameter, then
353 at no time during the life of the association can it send or process
354 a FORWARD TSN. It MUST instead act as if it does NOT support the
355 FORWARD TSN chunk, returning an ERROR to the peer upon receipt of any
356 FORWARD TSN.
357
3583.3.2. Receipt of Forward-TSN-Supported parameter in INIT or INIT-ACK
359
360 When a receiver of an INIT detects a Forward-TSN-Supported parameter
361 and does not support the Forward-TSN chunk type, the receiver MUST
362 follow the rules defined in Section 3.3.3 of RFC 2960 [2].
363
364 When a receiver of an INIT-ACK detects a Forward-TSN-Supported
365 parameter and it does not support the Forward-TSN chunk type, the
366 receiver MUST follow the rules defined in Section 3.3.3 of RFC 2960
367 [2].
368
369 When a receiver of an INIT detects a Forward-TSN-Supported parameter
370 and it does support the Forward-TSN chunk type, the receiver MAY
371 respond with a Forward-TSN-supported parameter in the INIT-ACK chunk.
372
373 Note that if the endpoint chooses NOT to include the parameter, then
374 at no time during the life of the association can it send or process
375 a FORWARD TSN. It MUST instead act as if it does NOT support the
376 FORWARD TSN chunk, returning an ERROR to the peer upon receipt of any
377 FORWARD TSN.
378
379 When an endpoint that supports the FORWARD TSN chunk receives an INIT
380 that does not contain the Forward-TSN-Supported Parameter, that
381 endpoint:
382
383 o MAY include the Forward-TSN-Supported parameter in the INIT-ACK,
384 o SHOULD record the fact that the peer does not support the FORWARD
385 TSN chunk,
386 o MUST NOT send a FORWARD TSN chunk at any time during the
387 associations life,
388 o SHOULD inform the upper layer if the upper layer has requested
389 such notification.
390
391
392
393
394Stewart, et al. Standards Track [Page 7]
395
396RFC 3758 SCTP Partial Reliability Extension May 2004
397
398
3993.3.3. Receipt of Op. Error for Forward-TSN-Supported Param
400
401 When an SCTP endpoint that desires to use the FORWARD TSN chunk
402 feature for partially reliable data transfer receives an operational
403 error from the remote endpoint (either bundled with the COOKIE or as
404 an unrecognized parameter in the INIT-ACK), indicating that the
405 remote endpoint does not recognize the Forward-TSN-Supported
406 parameter, the local endpoint SHOULD inform its upper layer of the
407 remote endpoint's inability to support partially reliable data
408 transfer.
409
410 The local endpoint may then choose to either:
411
412 1) end the initiation process (in cases where the initiation process
413 has already ended, the endpoint may need to send an ABORT) in
414 consideration of the peer's inability to supply the requested
415 features for the new association, or
416
417 2) continue the initiation process (in cases where the initiation
418 process has already completed, the endpoint MUST just mark the
419 association as not supporting partial reliability), but with the
420 understanding that partially reliable data transmission is not
421 supported. In this case, the endpoint receiving the operational
422 error SHOULD note that the FORWARD TSN chunk is not supported, and
423 MUST NOT transmit a FORWARD TSN chunk at any time during the life
424 of the association.
425
4263.4. Definition of "abandoned" in the context of PR-SCTP
427
428 At some point, a sending PR-SCTP implementation MAY determine that a
429 particular data chunk SHOULD NOT be transmitted or retransmitted
430 further, in accordance with the rules governing some particular PR-
431 SCTP service definition (such as the definition of "timed
432 reliability" in Section 4.1.) For purposes of this document, we
433 define the term "abandoned" to refer to any data chunk about which
434 the SCTP sender has made this determination.
435
436 Each PR-SCTP service defines the rules for determining when a TSN is
437 "abandoned", and accordingly, the rules that govern how, whether, and
438 when to "abandon" a TSN may vary from one service definition to
439 another. However, the rules governing the actions taken when a TSN
440 is "abandoned" do NOT vary between service definitions; these rules
441 are included in Section 3.5.
442
443
444
445
446
447
448
449
450Stewart, et al. Standards Track [Page 8]
451
452RFC 3758 SCTP Partial Reliability Extension May 2004
453
454
4553.5. Sender Side Implementation of PR-SCTP
456
457 The sender side implementation of PR-SCTP is identical to that of the
458 base SCTP protocol, except for:
459
460 o actions a sending side PR-SCTP implementation must take when a TSN
461 is "abandoned" (as per the rules of whatever PR-SCTP service
462 definition is in effect)
463 o special actions that a PR-SCTP implementation must take upon
464 receipt of SACK
465 o rules governing the generation of FORWARD TSN chunks.
466
467 In detail, these exceptions are as follows:
468
469 A1) The sender maintains an "Advanced.Peer.Ack.Point" for each peer
470 to track a theoretical cumulative TSN point of the peer (Note,
471 this is a _new_ protocol variable and its value is NOT
472 necessarily the same as the SCTP "Cumulative TSN Ack Point" as
473 defined in Section 1.4 of RFC 2960 [2], and as discussed
474 throughout that document.)
475
476 A2) From time to time, as governed by the rules of a particular PR-
477 SCTP service definition (see Section 4), the SCTP data sender may
478 make a determination that a particular data chunk that has
479 already been assigned a TSN SHOULD be "abandoned".
480
481 When a data chunk is "abandoned", the sender MUST treat the data
482 chunk as being finally acked and no longer outstanding.
483
484 The sender MUST NOT credit an "abandoned" data chunk to the
485 partial_bytes_acked as defined in Section 7.2.2 of RFC 2960 [2],
486 and MUST NOT advance the cwnd based on this "abandoned" data
487 chunk.
488
489 A3) When a TSN is "abandoned", if it is part of a fragmented message,
490 all other TSN's within that fragmented message MUST be abandoned
491 at the same time.
492
493 A4) Whenever the data sender receives a SACK from the data receiver,
494 it MUST first process the SACK using the normal procedures as
495 defined in Section 6.2.1 of RFC 2960 [2].
496
497
498
499
500
501
502
503
504
505
506Stewart, et al. Standards Track [Page 9]
507
508RFC 3758 SCTP Partial Reliability Extension May 2004
509
510
511 The data sender MUST then perform the following additional steps:
512
513 C1) Let SackCumAck be the Cumulative TSN ACK carried in the
514 received SACK.
515
516 If (Advanced.Peer.Ack.Point < SackCumAck), then update
517 Advanced.Peer.Ack.Point to be equal to SackCumAck.
518
519 C2) Try to further advance the "Advanced.Peer.Ack.Point" locally,
520 that is, to move "Advanced.Peer.Ack.Point" up as long as the
521 chunk next in the out-queue space is marked as "abandoned",
522 as shown in the following example:
523
524 Assuming that a SACK arrived with the Cumulative TSN ACK =
525 102 and the Advanced.Peer.Ack.Point is updated to this
526 value:
527
528 out-queue at the end of ==> out-queue after Adv.Ack.Point
529 normal SACK processing local advancement
530
531 ... ...
532 Adv.Ack.Pt-> 102 acked 102 acked
533 103 abandoned 103 abandoned
534 104 abandoned Adv.Ack.P-> 104 abandoned
535 105 105
536 106 acked 106 acked
537 ... ...
538
539 In this example, the data sender successfully advanced the
540 "Advanced.Peer.Ack.Point" from 102 to 104 locally.
541
542 C3) If, after step C1 and C2, the "Advanced.Peer.Ack.Point" is
543 greater than the Cumulative TSN ACK carried in the received
544 SACK, the data sender MUST send the data receiver a FORWARD
545 TSN chunk containing the latest value of the
546 "Advanced.Peer.Ack.Point". Note that the sender MAY delay
547 the sending of a FORWARD TSN as defined in rule F2 below.
548 IMPLEMENTATION NOTE: It is an implementation decision as to
549 which destination address it is to be sent to, the only
550 restriction being that the address MUST be one that is
551 CONFIRMED.
552
553 C4) For each "abandoned" TSN, the sender of the FORWARD TSN MUST
554 determine if the chunk has a valid stream and sequence number
555 (i.e., it was ordered). If the chunk has a valid stream and
556 sequence number, the sender MUST include the stream and
557 sequence number in the FORWARD TSN. This information will
558 enable the receiver to easily find any stranded TSN's waiting
559
560
561
562Stewart, et al. Standards Track [Page 10]
563
564RFC 3758 SCTP Partial Reliability Extension May 2004
565
566
567 on stream reorder queues. Each stream SHOULD only be
568 reported once; this means that if multiple abandoned messages
569 occur in the same stream, then only the highest abandoned
570 stream sequence number is reported. If the total size of the
571 FORWARD TSN does NOT fit in a single MTU, then the sender of
572 the FORWARD TSN SHOULD lower the Advanced.Peer.Ack.Point to
573 the last TSN that will fit in a single MTU.
574
575 C5) If a FORWARD TSN is sent, the sender MUST assure that at
576 least one T3-rtx timer is running. IMPLEMENTATION NOTE: Any
577 destination's timer may be used for the purposes of rule C5.
578
579 A5) Any time the T3-rtx timer expires, on any destination, the sender
580 SHOULD try to advance the "Advanced.Peer.Ack.Point" by following
581 the procedures outlined in C2 - C5.
582
583 The following additional rules govern the generation of FORWARD TSN
584 chunks:
585
586 F1) An endpoint MUST NOT use the FORWARD TSN for any purposes other
587 than circumstances described in this document.
588
589 F2) The data sender SHOULD always attempt to bundle an outgoing
590 FORWARD TSN with outbound DATA chunks for efficiency.
591
592 A sender MAY even choose to delay the sending of the FORWARD TSN
593 in the hope of bundling it with an outbound DATA chunk.
594
595 IMPLEMENTATION NOTE: An implementation may wish to limit the
596 number of duplicate FORWARD TSN chunks it sends by either only
597 sending a duplicate FORWARD TSN every other SACK or waiting a
598 full RTT before sending a duplicate FORWARD TSN.
599
600 IMPLEMENTATION NOTE: An implementation may allow the maximum
601 delay for generating a FORWARD TSN to be configured either
602 statically or dynamically in order to meet the specific timing
603 requirements of the protocol being carried, but see the next
604 rule:
605
606 F3) Any delay applied to the sending of FORWARD TSN chunk SHOULD NOT
607 exceed 200ms and MUST NOT exceed 500ms. In other words, an
608 implementation MAY lower this value below 500ms but MUST NOT
609 raise it above 500ms.
610
611 NOTE: Delaying the sending of FORWARD TSN chunks may cause delays
612 in the receiver's ability to deliver other data being held at the
613 receiver for re-ordering. The values of 200ms and 500ms match
614
615
616
617
618Stewart, et al. Standards Track [Page 11]
619
620RFC 3758 SCTP Partial Reliability Extension May 2004
621
622
623 the required values for the delayed acknowledgement in RFC 2960
624 [2] since delaying a FORWARD TSN has the same consequences but in
625 the reverse direction.
626
627 F4) The detection criterion for out-of-order SACKs MUST remain the
628 same as stated in RFC 2960, that is, a SACK is only considered
629 out-of-order if the Cumulative TSN ACK carried in the SACK is
630 earlier than that of the previous received SACK (i.e., the
631 comparison MUST NOT be made against "Advanced.Peer.Ack.Point").
632
633 F5) If the decision to "abandon" a chunk is made, no matter how such
634 a decision is made, the appropriate congestion adjustment MUST be
635 made as specified in RFC 2960 if the chunk would have been marked
636 for retransmission later (e.g., either by T3-Timeout or by Fast
637 Retransmit).
638
6393.6. Receiver Side Implementation of PR-SCTP
640
641 The receiver side implementation of PR-SCTP at an SCTP endpoint A is
642 capable of supporting any PR-SCTP service definition used by the
643 sender at endpoint B, even if that service definition is not
644 supported by the sending side functionality of host A. All that is
645 necessary is that the receiving side correctly handle the Forward-
646 TSN-Supported parameter as specified in Section 3.3, and correctly
647 handle the receipt of FORWARD TSN chunks as specified below.
648
649 DATA chunk arrival at a PR-SCTP receiver proceeds exactly as for DATA
650 chunk arrival at a base protocol SCTP receiver---that is, the
651 receiver MUST perform the same TSN handling, including duplicate
652 detection, gap detection, SACK generation, cumulative TSN
653 advancement, etc. as defined in RFC 2960 [2]---with the following
654 exceptions and additions.
655
656 When a FORWARD TSN chunk arrives, the data receiver MUST first update
657 its cumulative TSN point to the value carried in the FORWARD TSN
658 chunk, and then MUST further advance its cumulative TSN point locally
659 if possible, as shown by the following example:
660
661 Assuming that the new cumulative TSN carried in the arrived
662 FORWARD TSN is 103:
663
664 in-queue before processing in-queue after processing
665 the FORWARD TSN ==> the FORWARD TSN and further
666 advancement
667
668
669
670
671
672
673
674Stewart, et al. Standards Track [Page 12]
675
676RFC 3758 SCTP Partial Reliability Extension May 2004
677
678
679 cum.TSN.Pt-> 102 received 102 --
680 103 missing 103 --
681 104 received 104 --
682 105 received cum.TSN.Pt-> 105 received
683 106 missing 106 missing
684 107 received 107 received
685 ... ...
686
687 In this example, the receiver's cumulative TSN point is first
688 updated to 103 and then further advanced to 105.
689
690 After the above processing, the data receiver MUST stop reporting any
691 missing TSNs earlier than or equal to the new cumulative TSN point.
692
693 Note, if the "New Cumulative TSN" value carried in the arrived
694 FORWARD TSN chunk is found to be behind or at the current cumulative
695 TSN point, the data receiver MUST treat this FORWARD TSN as out-of-
696 date and MUST NOT update its Cumulative TSN. The receiver SHOULD
697 send a SACK to its peer (the sender of the FORWARD TSN) since such a
698 duplicate may indicate the previous SACK was lost in the network.
699
700 Any time a FORWARD TSN chunk arrives, for the purposes of sending a
701 SACK, the receiver MUST follow the same rules as if a DATA chunk had
702 been received (i.e., follow the delayed sack rules specified in RFC
703 2960 [2] section 6.2).
704
705 Whenever a DATA chunk arrives with the 'U' bit set to '0' (indicating
706 ordered delivery) and is out of order, the receiver must hold the
707 chunk for reordering. Since it is possible with PR-SCTP that a DATA
708 chunk being waited upon will not be retransmitted, special actions
709 will need to be taken upon the arrival of a FORWARD TSN.
710
711 In particular, during processing of a FORWARD TSN, the receiver MUST
712 use the stream sequence information to examine all of the listed
713 stream reordering queues, and immediately make available for delivery
714 stream sequence numbers earlier than or equal to the stream sequence
715 number listed inside the FORWARD TSN. Any such stranded data SHOULD
716 be made immediately available to the upper layer application.
717
718 An application using PR-SCTP receiving data should be aware of
719 possible missing messages. The stream sequence number can be used,
720 in such a case, to determine that an intervening message has been
721 skipped. When intervening messages are missing, it is an application
722 decision to process the messages or to take some other corrective
723 action.
724
725
726
727
728
729
730Stewart, et al. Standards Track [Page 13]
731
732RFC 3758 SCTP Partial Reliability Extension May 2004
733
734
735 After receiving and processing a FORWARD TSN, the data receiver MUST
736 take cautions in updating its re-assembly queue. The receiver MUST
737 remove any partially reassembled message, which is still missing one
738 or more TSNs earlier than or equal to the new cumulative TSN point.
739 In the event that the receiver has invoked the partial delivery API,
740 a notification SHOULD also be generated to inform the upper layer API
741 that the message being partially delivered will NOT be completed.
742
743 Note that after receiving a FORWARD TSN and updating the cumulative
744 acknowledgement point, if a TSN that was skipped does arrive (i.e.,
745 due to network reordering), then the receiver will follow the normal
746 rules defined in RFC 2960 [2] for handling duplicate data. This
747 implies that the receiver will drop the chunk and report it as a
748 duplicate in the next outbound SACK chunk.
749
7504. Services provided by PR-SCTP to the upper layer
751
752 As described in Section 1.2, it is feasible to implement a variety of
753 partially reliable transport services using the new protocol
754 mechanisms introduced in Section 3; introducing these new services
755 requires making changes only at the sending side API, and the sending
756 side protocol implementation. Thus, there may be a temptation to
757 standardize only the protocol, and leave the service definition as
758 "implementation specific" or leave it to be defined in
759 "informational" documents.
760
761 However, for those who may wish to write IETF standards for upper
762 layer protocols implemented over PR-SCTP, it is important to be able
763 to refer to a standard definition of services provided. Therefore,
764 this section provides example definitions of one such service, while
765 also providing guidelines for the definition of additional services
766 as required. Each such service may be proposed as a separate new
767 RFC.
768
769 Section 4 is organized as follows:
770
771 o Section 4.1 provides the definition of one specific PR-SCTP
772 service: timed reliability.
773
774 o Section 4.2 describes how a particular PR-SCTP service definition
775 is requested by the upper layer during association establishment,
776 and how the upper layer is notified if that request cannot be
777 satisfied.
778
779 o Section 4.3 then provides guidelines for the specification of PR-
780 SCTP services other then the one defined in this memo.
781
782
783
784
785
786Stewart, et al. Standards Track [Page 14]
787
788RFC 3758 SCTP Partial Reliability Extension May 2004
789
790
791 o Finally, Section 4.4 describes some additional usage notes that
792 upper layer protocol designers and implementors may find helpful.
793
7944.1. PR-SCTP Service Definition for "timed reliability"
795
796 The "timed reliability" service is a natural extension of the
797 "lifetime" concept already present in the base SCTP protocol.
798
799 When this service is requested for an SCTP association, it changes
800 the meaning of the lifetime parameter specified in the SEND primitive
801 (see Section 10.1, part (E) of RFC 2960 [2]; note that the parameter
802 is spelled "life time" in that document.)
803
804 In the base SCTP protocol, the lifetime parameter is used to avoid
805 sending stale data. When a lifetime value is indicated for a
806 particular message and that lifetime expires, SCTP cancels the
807 sending of this message, and notifies the ULP if the first
808 transmission of the data does not take place (because of rwnd or cwnd
809 limitations, or for any other reason). However, in the base
810 protocol, if SCTP has sent the first transmission before the lifetime
811 expires, then the message MUST be sent as a normal reliable message.
812 During episodes of congestion this is particularly unfortunate, as
813 retransmission wastes bandwidth that could have been used for other
814 (non-lifetime expired) messages.
815
816 When the "timed reliability" service is invoked, this latter
817 restriction is removed. Specifically, when the "timed reliability"
818 service is in effect, the following rules govern all messages that
819 are sent with a lifetime parameter:
820
821 TR1) If the lifetime parameter of a message is SCTP_LIFETIME_RELIABLE
822 (or unspecified see Section 5), that message is treated as a
823 normal reliable SCTP message, just as in the base SCTP protocol.
824
825 TR2) If the lifetime parameter is not SCTP_LIFETIME_RELIABLE (see
826 Section 5), then the SCTP sender MUST treat the message just as
827 if it were a normal reliable SCTP message, as long as the
828 lifetime has not yet expired.
829
830 TR3) Before assigning a TSN to any message, the SCTP sender MUST
831 evaluate the lifetime of that message. If it is expired, the
832 SCTP sender MUST NOT assign a TSN to that message, but instead,
833 SHOULD issue a notification to the upper layer and abandon the
834 message.
835
836 TR4) Before transmitting or retransmitting a message for which a TSN
837 is already assigned, the SCTP sender MUST evaluate the lifetime
838 of the message. If the lifetime of the message is expired, the
839
840
841
842Stewart, et al. Standards Track [Page 15]
843
844RFC 3758 SCTP Partial Reliability Extension May 2004
845
846
847 SCTP sender MUST "abandon" the message, as per the rules
848 specified in Section 3.5 marking that TSN as eligible for
849 forward TSN. Note that this meets the requirement G1 defined in
850 Section 4.3. IMPLEMENTATION NOTE: An implementation SHOULD
851 delay TSN assignment as mentioned in RFC 2960 [2] Section 10.1.
852 In such a case, the lifetime parameter should be checked BEFORE
853 assigning a TSN, thus allowing a message to be abandoned without
854 the need to send a FORWARD TSN.
855
856 TR5) The sending SCTP MAY evaluate the lifetime of messages at
857 anytime. Expired messages that have not been assigned a TSN MAY
858 be handled as per rule TR3. Expired messages that HAVE been
859 assigned a TSN MAY be handled as per rule TR4.
860
861 TR6) The sending application MUST NOT change the lifetime parameter
862 once the message is passed to the sending SCTP.
863
864 Implementation Note: Rules TR1 through TR4 are designed in such a way
865 as to avoid requiring the implementer to maintain a separate timer
866 for each message; instead, the lifetime need only be evaluated at
867 points in the life of the message where actions are already being
868 taken, such as TSN assignment, transmission, or expiration of a
869 retransmission timeout. Rule TR5 is intended to give the SCTP
870 implementor flexibility to evaluate lifetime at any other convenient
871 opportunity, WITHOUT requiring that lifetime be evaluated immediately
872 at the point in time where it expires.
873
8744.2. PR-SCTP Association Establishment
875
876 An upper layer protocol (ULP) that uses PR-SCTP may need to know
877 whether PR-SCTP can be supported on a given association. Therefore,
878 the ULP needs to have some indication of whether the FORWARD-TSN
879 chunk is supported by its peer.
880
881 Section 10.1 of RFC 2960 [2] describes abstract primitives for the
882 ULP-to-SCTP interface, while noting that "individual implementations
883 must define their own exact format, and may provide combinations or
884 subsets of the basic functions in single calls."
885
886 In this section, we describe one additional return value that may be
887 added to the ASSOCIATE primitive to allow an SCTP service user to
888 indicate whether the FORWARD-TSN chunk is supported by its peer.
889
890 RFC 2960 indicates that the ASSOCIATE primitive "allows the upper
891 layer to initiate an association to a specific peer endpoint". It is
892 structured as follows:
893
894
895
896
897
898Stewart, et al. Standards Track [Page 16]
899
900RFC 3758 SCTP Partial Reliability Extension May 2004
901
902
903 Format: ASSOCIATE(local SCTP instance name, destination transport
904 addr, outbound stream count)
905 -> association id [,destination transport addr list]
906 [,outbound stream count]
907
908 This extension adds one new OPTIONAL return value, such that the new
909 primitive reads as follows:
910
911 Format: ASSOCIATE(local SCTP instance name, destination transport
912 addr, outbound stream count )
913 -> association id [,destination transport addr list]
914 [,outbound stream count] [,forward tsn supported]
915
916 NOTE: As per RFC 2960, if the ASSOCIATE primitive is implemented as a
917 non-blocking call, the new OPTIONAL return value shall be passed with
918 the association parameters using the COMMUNICATION UP notification.
919
920 The new OPTIONAL parameter "forward tsn supported" is a boolean flag:
921
922 (0) false [default] indicates that FORWARD TSN is not enabled by both
923 endpoints.
924
925 (1) true indicates that FORWARD TSN is enabled on both endpoints.
926
927 We also add a new primitive to allow the user application to enable/
928 disable the PR-SCTP service on its endpoint before an association is
929 established.
930
931 Format: ENABLE_PRSCTP(local SCTP instance name, boolean enable)
932
933 The boolean parameter enable, if set to true, will enable PR-SCTP
934 upon future endpoint associations. If the boolean parameter is set
935 to false, then the local endpoint will not advertise support of PR-
936 SCTP and thus disable the feature on future associations. It is
937 recommended that this option be disabled by default, i.e., in order
938 to enable PR-SCTP, the user will need to call this API option with
939 the enable flag set to "true".
940
9414.3. Guidelines for defining other PR-SCTP Services
942
943 Other PR-SCTP services may be defined and implemented as dictated by
944 the needs of upper layer protocols. If such upper layer protocols
945 are to be standardized and require some particular PR-SCTP service
946 other than the one defined in this document (i.e., "timed
947 reliability"), then those additional PR-SCTP services should also be
948 specified and standardized in a new RFC.
949
950
951
952
953
954Stewart, et al. Standards Track [Page 17]
955
956RFC 3758 SCTP Partial Reliability Extension May 2004
957
958
959 It is suggested that any such additional service definitions be
960 modeled after the contents of Section 4.1. In particular, the
961 service definition should provide:
962
963 1. A description of how the service user specifies any parameters
964 that need to be associated with a particular message (and/or any
965 other communication that takes place between the application and
966 the SCTP transport sender) that provides the SCTP transport sender
967 with the information needed to determine when to give up on
968 transmission of a particular message.
969
970 Preferably, this description should reference the primitives in
971 the abstract API provided in Section 10 of RFC 2960 [2],
972 indicating any:
973
974 * changes to the interpretation of the existing parameters of
975 existing primitives,
976
977 * additional parameters to be added to existing primitives (these
978 should be OPTIONAL, and default values should be indicated),
979
980 * additional primitives that may be needed.
981
982 2. A description of the rules used by the sender side implementation
983 to determine when to give up on messages that have not yet been
984 assigned a TSN. This description should also indicate what
985 protocol events trigger the evaluation, and what actions to take
986 (e.g., notifications.)
987
988 3. A description of the rules used by the sender side implementation
989 to determine when to give up on the transmission or retransmission
990 of messages that have already been assigned a TSN, and may have
991 been transmitted and possibly retransmitted zero or more times.
992
993 Items (2) and (3) in the list above should also indicate what
994 protocol events trigger the evaluation, and what actions to take if
995 the determination is made that the sender should give up on
996 transmitting the message (e.g., notifications to the ULP.)
997
998 Note that in any PR-SCTP service, the following rule MUST be
999 specified to avoid a protocol deadlock:
1000
1001 (G1) When the sender side implementation gives up on transmitting a
1002 message that has been assigned a TSN (i.e., when that message is
1003 "abandoned", as defined in Section 3.4), the sender side MUST
1004 mark that TSN as eligible for forward TSN, and the rules in
1005 Section 3.4 regarding the sending of FORWARD TSN chunks MUST be
1006 followed.
1007
1008
1009
1010Stewart, et al. Standards Track [Page 18]
1011
1012RFC 3758 SCTP Partial Reliability Extension May 2004
1013
1014
1015 Finally, a PR-SCTP service definition should specify a "canonical
1016 service name" to uniquely identify the service, and distinguish it
1017 from other PR-SCTP services. This name can then be used in upper
1018 layer protocol standards to indicate which PR-SCTP service definition
1019 is required by that upper layer protocol. It can also be used in the
1020 documentation of APIs of PR-SCTP implementations to indicate how an
1021 upper layer indicates which definition of PR-SCTP service should
1022 apply. The canonical service name for the PR-SCTP service defined in
1023 Section 4.1 is "timed reliability".
1024
10254.4. Usage Notes
1026
1027 Detecting missing data in a PR-SCTP stream is useful for some
1028 applications (e.g., Fibre channel or SCSI over IP). With PR-SCTP,
1029 this becomes possible - the upper layer simply needs to examine the
1030 stream sequence number of the arrived user messages of that stream to
1031 detect any missing data. Note, this detection only works when all
1032 the messages on that stream are sent in order, i.e., the "U" bit is
1033 not set.
1034
10355. Variables
1036
1037 This section defines variables used throughout this document:
1038
1039 SCTP_LIFETIME_RELIABLE - A user interface indication defined by an
1040 implementation and used to indicate when a message is to be
1041 considered fully reliable.
1042
10436. Acknowledgments
1044
1045 The authors would like to thank Brian Bidulock, Scott Bradner, Jon
1046 Berger, Armando L. Caro Jr., John Loughney, Jon Peterson, Ivan Arias
1047 Rodriguez, Ian Rytina, Chip Sharp, and others for their comments.
1048
10497. Security Considerations
1050
1051 This document does not introduce any new security concerns to SCTP
1052 other than the ones already documented in RFC 2960 [2]. In
1053 particular, this document shares the same security issues as
1054 unordered data within RFC 2960 [2] identified by RFC 3436 [4]. An
1055 application using the PR-SCTP extension should not use transport
1056 layer security; further details can be found in RFC 3436 [4].
1057
1058 Note that the ability to cause a message to be skipped (i.e, the
1059 FORWARD TSN chunk) does not provide any new attack for a Man-In-the-
1060 Middle (MIM), since the MIM already is capable of changing and/or
1061 withholding data, thus effectively skipping messages. However, the
1062 FORWARD TSN chunk does provide a mechanism to make it easier for a
1063
1064
1065
1066Stewart, et al. Standards Track [Page 19]
1067
1068RFC 3758 SCTP Partial Reliability Extension May 2004
1069
1070
1071 MIM to skip selective messages when the application has this feature
1072 enabled since the MIM would have less state to maintain.
1073
10748. IANA Considerations
1075
1076 IANA has assigned 192 as a new chunk type to SCTP.
1077
1078 IANA has assigned 49152 as a new parameter type code to SCTP.
1079
10809. References
1081
10829.1. Normative References
1083
1084 [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement
1085 Levels", BCP 14, RFC 2119, March 1997.
1086
1087 [2] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer,
1088 H., Taylor, T., Rytina, I., Kalla, M., Zhang, L. and V. Paxson,
1089 "Stream Control Transmission Protocol", RFC 2960, October 2000.
1090
10919.2. Informative References
1092
1093 [3] Clark, D. and D. Tennenhouse, "Architectural Considerations for
1094 a New Generation of Protocols", SIGCOMM 1990 pp. 200-208,
1095 September 1990.
1096
1097 [4] Jungmaier, A., Rescorla, E. and M. Tuexen, "Transport Layer
1098 Security over Stream Control Transmission Protocol", RFC 3436,
1099 December 2002.
1100
110110. Authors' Addresses
1102
1103 Randall R. Stewart
1104 Cisco Systems, Inc.
1105 8725 West Higgins Road
1106 Suite 300
1107 Chicago, IL 60631
1108 USA
1109
1110 Phone: +1-815-477-2127
1111 EMail: rrs@cisco.com
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122Stewart, et al. Standards Track [Page 20]
1123
1124RFC 3758 SCTP Partial Reliability Extension May 2004
1125
1126
1127 Michael A. Ramalho
1128 Cisco Systems, Inc.
1129 1802 Rue de la Porte
1130 Wall Township, NJ 07719-3784
1131 USA
1132
1133 Phone: +1.732.449.5762
1134 EMail: mramalho@cisco.com
1135
1136
1137 Qiaobing Xie
1138 Motorola, Inc.
1139 1501 W. Shure Drive, #2309
1140 Arlington Heights, IL 60004
1141 USA
1142
1143 Phone: +1-847-632-3028
1144 EMail: qxie1@email.mot.com
1145
1146
1147 Michael Tuexen
1148 Univ. of Applied Sciences Muenster
1149 Stegerwaldstr. 39
1150 48565 Steinfurt
1151 Germany
1152
1153 EMail: tuexen@fh-muenster.de
1154
1155
1156 Phillip T. Conrad
1157 University of Delaware
1158 Department of Computer and Information Sciences
1159 Newark, DE 19716
1160 USA
1161
1162 Phone: +1 302 831 8622
1163 EMail: conrad@acm.org
1164 URI: http://www.cis.udel.edu/~pconrad
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178Stewart, et al. Standards Track [Page 21]
1179
1180RFC 3758 SCTP Partial Reliability Extension May 2004
1181
1182
118311. Full Copyright Statement
1184
1185 Copyright (C) The Internet Society (2004). This document is subject
1186 to the rights, licenses and restrictions contained in BCP 78, and
1187 except as set forth therein, the authors retain all their rights.
1188
1189 This document and the information contained herein are provided on an
1190 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
1191 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
1192 ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
1193 INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
1194 INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
1195 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
1196
1197Intellectual Property
1198
1199 The IETF takes no position regarding the validity or scope of any
1200 Intellectual Property Rights or other rights that might be claimed to
1201 pertain to the implementation or use of the technology described in
1202 this document or the extent to which any license under such rights
1203 might or might not be available; nor does it represent that it has
1204 made any independent effort to identify any such rights. Information
1205 on the procedures with respect to rights in RFC documents can be
1206 found in BCP 78 and BCP 79.
1207
1208 Copies of IPR disclosures made to the IETF Secretariat and any
1209 assurances of licenses to be made available, or the result of an
1210 attempt made to obtain a general license or permission for the use of
1211 such proprietary rights by implementers or users of this
1212 specification can be obtained from the IETF on-line IPR repository at
1213 http://www.ietf.org/ipr.
1214
1215 The IETF invites any interested party to bring to its attention any
1216 copyrights, patents or patent applications, or other proprietary
1217 rights that may cover technology that may be required to implement
1218 this standard. Please address the information to the IETF at ietf-
1219 ipr@ietf.org.
1220
1221Acknowledgement
1222
1223 Funding for the RFC Editor function is currently provided by the
1224 Internet Society.
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234Stewart, et al. Standards Track [Page 22]
1235