Austin Schuh | 8d0a285 | 2019-12-28 22:54:28 -0800 | [diff] [blame^] | 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | Network Working Group R. Stewart |
| 8 | Request for Comments: 3758 M. Ramalho |
| 9 | Category: 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 | |
| 22 | Status 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 | |
| 30 | Copyright Notice |
| 31 | |
| 32 | Copyright (C) The Internet Society (2004). All Rights Reserved. |
| 33 | |
| 34 | Abstract |
| 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 | |
| 58 | Stewart, et al. Standards Track [Page 1] |
| 59 | |
| 60 | RFC 3758 SCTP Partial Reliability Extension May 2004 |
| 61 | |
| 62 | |
| 63 | Table 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 | |
| 97 | 1. 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 | |
| 104 | 1.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 | |
| 114 | Stewart, et al. Standards Track [Page 2] |
| 115 | |
| 116 | RFC 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 | |
| 124 | 1.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 | |
| 170 | Stewart, et al. Standards Track [Page 3] |
| 171 | |
| 172 | RFC 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 | |
| 182 | 1.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 | |
| 226 | Stewart, et al. Standards Track [Page 4] |
| 227 | |
| 228 | RFC 3758 SCTP Partial Reliability Extension May 2004 |
| 229 | |
| 230 | |
| 231 | 2. 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 | |
| 241 | 3. Protocol Changes to support PR-SCTP |
| 242 | |
| 243 | 3.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 | |
| 271 | 3.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 | |
| 282 | Stewart, et al. Standards Track [Page 5] |
| 283 | |
| 284 | RFC 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 | |
| 338 | Stewart, et al. Standards Track [Page 6] |
| 339 | |
| 340 | RFC 3758 SCTP Partial Reliability Extension May 2004 |
| 341 | |
| 342 | |
| 343 | 3.3. Negotiation of Forward-TSN-Supported parameter |
| 344 | |
| 345 | 3.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 | |
| 358 | 3.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 | |
| 394 | Stewart, et al. Standards Track [Page 7] |
| 395 | |
| 396 | RFC 3758 SCTP Partial Reliability Extension May 2004 |
| 397 | |
| 398 | |
| 399 | 3.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 | |
| 426 | 3.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 | |
| 450 | Stewart, et al. Standards Track [Page 8] |
| 451 | |
| 452 | RFC 3758 SCTP Partial Reliability Extension May 2004 |
| 453 | |
| 454 | |
| 455 | 3.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 | |
| 506 | Stewart, et al. Standards Track [Page 9] |
| 507 | |
| 508 | RFC 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 | |
| 562 | Stewart, et al. Standards Track [Page 10] |
| 563 | |
| 564 | RFC 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 | |
| 618 | Stewart, et al. Standards Track [Page 11] |
| 619 | |
| 620 | RFC 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 | |
| 639 | 3.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 | |
| 674 | Stewart, et al. Standards Track [Page 12] |
| 675 | |
| 676 | RFC 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 | |
| 730 | Stewart, et al. Standards Track [Page 13] |
| 731 | |
| 732 | RFC 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 | |
| 750 | 4. 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 | |
| 786 | Stewart, et al. Standards Track [Page 14] |
| 787 | |
| 788 | RFC 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 | |
| 794 | 4.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 | |
| 842 | Stewart, et al. Standards Track [Page 15] |
| 843 | |
| 844 | RFC 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 | |
| 874 | 4.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 | |
| 898 | Stewart, et al. Standards Track [Page 16] |
| 899 | |
| 900 | RFC 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 | |
| 941 | 4.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 | |
| 954 | Stewart, et al. Standards Track [Page 17] |
| 955 | |
| 956 | RFC 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 | |
| 1010 | Stewart, et al. Standards Track [Page 18] |
| 1011 | |
| 1012 | RFC 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 | |
| 1025 | 4.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 | |
| 1035 | 5. 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 | |
| 1043 | 6. 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 | |
| 1049 | 7. 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 | |
| 1066 | Stewart, et al. Standards Track [Page 19] |
| 1067 | |
| 1068 | RFC 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 | |
| 1074 | 8. 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 | |
| 1080 | 9. References |
| 1081 | |
| 1082 | 9.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 | |
| 1091 | 9.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 | |
| 1101 | 10. 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 | |
| 1122 | Stewart, et al. Standards Track [Page 20] |
| 1123 | |
| 1124 | RFC 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 | |
| 1178 | Stewart, et al. Standards Track [Page 21] |
| 1179 | |
| 1180 | RFC 3758 SCTP Partial Reliability Extension May 2004 |
| 1181 | |
| 1182 | |
| 1183 | 11. 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 | |
| 1197 | Intellectual 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 | |
| 1221 | Acknowledgement |
| 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 | |
| 1234 | Stewart, et al. Standards Track [Page 22] |
| 1235 | |