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: 4460 Cisco Systems, Inc. |
| 9 | Category: Informational I. Arias-Rodriguez |
| 10 | Nokia Research Center |
| 11 | K. Poon |
| 12 | Sun Microsystems, Inc. |
| 13 | A. Caro |
| 14 | BBN Technologies |
| 15 | M. Tuexen |
| 16 | Muenster Univ. of Applied Sciences |
| 17 | April 2006 |
| 18 | |
| 19 | |
| 20 | Stream Control Transmission Protocol (SCTP) Specification |
| 21 | Errata and Issues |
| 22 | |
| 23 | |
| 24 | Status of This Memo |
| 25 | |
| 26 | This memo provides information for the Internet community. It does |
| 27 | not specify an Internet standard of any kind. Distribution of this |
| 28 | memo is unlimited. |
| 29 | |
| 30 | Copyright Notice |
| 31 | |
| 32 | Copyright (C) The Internet Society (2006). |
| 33 | |
| 34 | Abstract |
| 35 | |
| 36 | This document is a compilation of issues found during six |
| 37 | interoperability events and 5 years of experience with implementing, |
| 38 | testing, and using Stream Control Transmission Protocol (SCTP) along |
| 39 | with the suggested fixes. This document provides deltas to RFC 2960 |
| 40 | and is organized in a time-based way. The issues are listed in the |
| 41 | order they were brought up. Because some text is changed several |
| 42 | times, the last delta in the text is the one that should be applied. |
| 43 | In addition to the delta, a description of the problem and the |
| 44 | details of the solution are also provided. |
| 45 | |
| 46 | Table of Contents |
| 47 | |
| 48 | 1. Introduction ....................................................6 |
| 49 | 1.1. Conventions ................................................7 |
| 50 | 2. Corrections to RFC 2960 .........................................7 |
| 51 | 2.1. Incorrect Error Type During Chunk Processing. ..............7 |
| 52 | 2.1.1. Description of the Problem ..........................7 |
| 53 | 2.1.2. Text changes to the document ........................7 |
| 54 | 2.1.3. Solution Description ................................7 |
| 55 | |
| 56 | |
| 57 | |
| 58 | Stewart, et al. Informational [Page 1] |
| 59 | |
| 60 | RFC 4460 SCTP Errata April 2006 |
| 61 | |
| 62 | |
| 63 | 2.2. Parameter Processing Issue .................................7 |
| 64 | 2.2.1. Description of the Problem ..........................7 |
| 65 | 2.2.2. Text Changes to the Document ........................8 |
| 66 | 2.2.3. Solution Description ................................8 |
| 67 | 2.3. Padding Issues .............................................8 |
| 68 | 2.3.1. Description of the Problem ..........................8 |
| 69 | 2.3.2. Text Changes to the Document ........................9 |
| 70 | 2.3.3. Solution Description ...............................10 |
| 71 | 2.4. Parameter Types across All Chunk Types ....................10 |
| 72 | 2.4.1. Description of the Problem .........................10 |
| 73 | 2.4.2. Text Changes to the Document .......................10 |
| 74 | 2.4.3. Solution Description ...............................12 |
| 75 | 2.5. Stream Parameter Clarification ............................12 |
| 76 | 2.5.1. Description of the problem .........................12 |
| 77 | 2.5.2. Text Changes to the Document .......................12 |
| 78 | 2.5.3. Solution Description ...............................13 |
| 79 | 2.6. Restarting Association Security Issue .....................13 |
| 80 | 2.6.1. Description of the Problem .........................13 |
| 81 | 2.6.2. Text Changes to the Document .......................14 |
| 82 | 2.6.3. Solution Description ...............................18 |
| 83 | 2.7. Implicit Ability to Exceed cwnd by PMTU-1 Bytes ...........19 |
| 84 | 2.7.1. Description of the Problem .........................19 |
| 85 | 2.7.2. Text Changes to the Document .......................19 |
| 86 | 2.7.3. Solution Description ...............................19 |
| 87 | 2.8. Issues with Fast Retransmit ...............................19 |
| 88 | 2.8.1. Description of the Problem .........................19 |
| 89 | 2.8.2. Text Changes to the Document .......................20 |
| 90 | 2.8.3. Solution Description ...............................23 |
| 91 | 2.9. Missing Statement about partial_bytes_acked Update ........24 |
| 92 | 2.9.1. Description of the Problem .........................24 |
| 93 | 2.9.2. Text Changes to the Document .......................24 |
| 94 | 2.9.3. Solution Description ...............................25 |
| 95 | 2.10. Issues with Heartbeating and Failure Detection ...........25 |
| 96 | 2.10.1. Description of the Problem ........................25 |
| 97 | 2.10.2. Text Changes to the Document ......................26 |
| 98 | 2.10.3. Solution Description ..............................28 |
| 99 | 2.11. Security interactions with firewalls .....................29 |
| 100 | 2.11.1. Description of the Problem ........................29 |
| 101 | 2.11.2. Text Changes to the Document ......................29 |
| 102 | 2.11.3. Solution Description ..............................31 |
| 103 | 2.12. Shutdown Ambiguity .......................................31 |
| 104 | 2.12.1. Description of the Problem ........................31 |
| 105 | 2.12.2. Text Changes to the Document ......................31 |
| 106 | 2.12.3. Solution Description ..............................32 |
| 107 | 2.13. Inconsistency in ABORT Processing ........................32 |
| 108 | 2.13.1. Description of the Problem ........................32 |
| 109 | 2.13.2. Text changes to the document ......................33 |
| 110 | 2.13.3. Solution Description ..............................33 |
| 111 | |
| 112 | |
| 113 | |
| 114 | Stewart, et al. Informational [Page 2] |
| 115 | |
| 116 | RFC 4460 SCTP Errata April 2006 |
| 117 | |
| 118 | |
| 119 | 2.14. Cwnd Gated by Its Full Use ...............................34 |
| 120 | 2.14.1. Description of the Problem ........................34 |
| 121 | 2.14.2. Text Changes to the Document ......................34 |
| 122 | 2.14.3. Solution Description ..............................36 |
| 123 | 2.15. Window Probes in SCTP ....................................36 |
| 124 | 2.15.1. Description of the Problem ........................36 |
| 125 | 2.15.2. Text Changes to the Document ......................36 |
| 126 | 2.15.3. Solution Description ..............................38 |
| 127 | 2.16. Fragmentation and Path MTU Issues ........................39 |
| 128 | 2.16.1. Description of the Problem ........................39 |
| 129 | 2.16.2. Text Changes to the Document ......................39 |
| 130 | 2.16.3. Solution Description ..............................40 |
| 131 | 2.17. Initial Value of the Cumulative TSN Ack ..................40 |
| 132 | 2.17.1. Description of the Problem ........................40 |
| 133 | 2.17.2. Text Changes to the Document ......................40 |
| 134 | 2.17.3. Solution Description ..............................41 |
| 135 | 2.18. Handling of Address Parameters within the INIT or |
| 136 | INIT-ACK .................................................41 |
| 137 | 2.18.1. Description of the Problem ........................41 |
| 138 | 2.18.2. Text Changes to the Document ......................41 |
| 139 | 2.18.3. Solution description ..............................42 |
| 140 | 2.19. Handling of Stream Shortages .............................42 |
| 141 | 2.19.1. Description of the Problem ........................42 |
| 142 | 2.19.2. Text Changes to the Document ......................42 |
| 143 | 2.19.3. Solution Description ..............................43 |
| 144 | 2.20. Indefinite Postponement ..................................43 |
| 145 | 2.20.1. Description of the Problem ........................43 |
| 146 | 2.20.2. Text Changes to the Document ......................43 |
| 147 | 2.20.3. Solution Description ..............................44 |
| 148 | 2.21. User-Initiated Abort of an Association ...................44 |
| 149 | 2.21.1. Description of the Problem ........................44 |
| 150 | 2.21.2. Text changes to the document ......................44 |
| 151 | 2.21.3. Solution Description ..............................50 |
| 152 | 2.22. Handling of Invalid Initiate Tag of INIT-ACK .............50 |
| 153 | 2.22.1. Description of the Problem ........................50 |
| 154 | 2.22.2. Text Changes to the Document ......................50 |
| 155 | 2.22.3. Solution Description ..............................51 |
| 156 | 2.23. Sending an ABORT in Response to an INIT ..................51 |
| 157 | 2.23.1. Description of the Problem ........................51 |
| 158 | 2.23.2. Text Changes to the Document ......................51 |
| 159 | 2.23.3. Solution Description ..............................52 |
| 160 | 2.24. Stream Sequence Number (SSN) Initialization ..............52 |
| 161 | 2.24.1. Description of the Problem ........................52 |
| 162 | 2.24.2. Text Changes to the Document ......................52 |
| 163 | 2.24.3. Solution Description ..............................53 |
| 164 | 2.25. SACK Packet Format .......................................53 |
| 165 | 2.25.1. Description of the Problem ........................53 |
| 166 | 2.25.2. Text Changes to the Document ......................53 |
| 167 | |
| 168 | |
| 169 | |
| 170 | Stewart, et al. Informational [Page 3] |
| 171 | |
| 172 | RFC 4460 SCTP Errata April 2006 |
| 173 | |
| 174 | |
| 175 | 2.25.3. Solution Description ..............................53 |
| 176 | 2.26. Protocol Violation Error Cause ...........................53 |
| 177 | 2.26.1. Description of the Problem ........................53 |
| 178 | 2.26.2. Text Changes to the Document ......................54 |
| 179 | 2.26.3. Solution Description ..............................56 |
| 180 | 2.27. Reporting of Unrecognized Parameters .....................56 |
| 181 | 2.27.1. Description of the Problem ........................56 |
| 182 | 2.27.2. Text Changes to the Document ......................56 |
| 183 | 2.27.3. Solution Description ..............................57 |
| 184 | 2.28. Handling of IP Address Parameters ........................58 |
| 185 | 2.28.1. Description of the Problem ........................58 |
| 186 | 2.28.2. Text Changes to the Document ......................58 |
| 187 | 2.28.3. Solution Description ..............................58 |
| 188 | 2.29. Handling of COOKIE ECHO Chunks When a TCB Exists .........59 |
| 189 | 2.29.1. Description of the Problem ........................59 |
| 190 | 2.29.2. Text Changes to the Document ......................59 |
| 191 | 2.29.3. Solution Description ..............................59 |
| 192 | 2.30. The Initial Congestion Window Size .......................59 |
| 193 | 2.30.1. Description of the Problem ........................59 |
| 194 | 2.30.2. Text Changes to the Document ......................60 |
| 195 | 2.30.3. Solution Description ..............................61 |
| 196 | 2.31. Stream Sequence Numbers in Figures .......................62 |
| 197 | 2.31.1. Description of the Problem ........................62 |
| 198 | 2.31.2. Text Changes to the Document ......................63 |
| 199 | 2.31.3. Solution description ..............................67 |
| 200 | 2.32. Unrecognized Parameters ..................................67 |
| 201 | 2.32.1. Description of the Problem ........................67 |
| 202 | 2.32.2. Text Changes to the Document ......................67 |
| 203 | 2.32.3. Solution Description ..............................68 |
| 204 | 2.33. Handling of Unrecognized Parameters ......................68 |
| 205 | 2.33.1. Description of the Problem ........................68 |
| 206 | 2.33.2. Text Changes to the Document ......................68 |
| 207 | 2.33.3. Solution Description ..............................70 |
| 208 | 2.34. Tie Tags .................................................70 |
| 209 | 2.34.1. Description of the Problem ........................70 |
| 210 | 2.34.2. Text Changes to the Document ......................70 |
| 211 | 2.34.3. Solution Description ..............................72 |
| 212 | 2.35. Port Number Verification in the COOKIE-ECHO ..............72 |
| 213 | 2.35.1. Description of the Problem ........................72 |
| 214 | 2.35.2. Text Changes to the Document ......................72 |
| 215 | 2.35.3. Solution Description ..............................73 |
| 216 | 2.36. Path Initialization ......................................74 |
| 217 | 2.36.1. Description of the Problem ........................74 |
| 218 | 2.36.2. Text Changes to the Document ......................74 |
| 219 | 2.36.3. Solution Description ..............................76 |
| 220 | 2.37. ICMP Handling Procedures .................................76 |
| 221 | 2.37.1. Description of the Problem ........................76 |
| 222 | 2.37.2. Text Changes to the Document ......................77 |
| 223 | |
| 224 | |
| 225 | |
| 226 | Stewart, et al. Informational [Page 4] |
| 227 | |
| 228 | RFC 4460 SCTP Errata April 2006 |
| 229 | |
| 230 | |
| 231 | 2.37.3. Solution Description ..............................79 |
| 232 | 2.38. Checksum .................................................79 |
| 233 | 2.38.1. Description of the problem ........................79 |
| 234 | 2.38.2. Text Changes to the Document ......................79 |
| 235 | 2.38.3. Solution Description ..............................86 |
| 236 | 2.39. Retransmission Policy ....................................86 |
| 237 | 2.39.1. Description of the Problem ........................86 |
| 238 | 2.39.2. Text Changes to the Document ......................87 |
| 239 | 2.39.3. Solution Description ..............................87 |
| 240 | 2.40. Port Number 0 ............................................88 |
| 241 | 2.40.1. Description of the Problem ........................88 |
| 242 | 2.40.2. Text Changes to the Document ......................88 |
| 243 | 2.40.3. Solution Description ..............................89 |
| 244 | 2.41. T Bit ....................................................89 |
| 245 | 2.41.1. Description of the Problem ........................89 |
| 246 | 2.41.2. Text Changes to the Document ......................89 |
| 247 | 2.41.3. Solution Description ..............................93 |
| 248 | 2.42. Unknown Parameter Handling ...............................93 |
| 249 | 2.42.1. Description of the Problem ........................93 |
| 250 | 2.42.2. Text Changes to the Document ......................93 |
| 251 | 2.42.3. Solution Description ..............................95 |
| 252 | 2.43. Cookie Echo Chunk ........................................95 |
| 253 | 2.43.1. Description of the Problem ........................95 |
| 254 | 2.43.2. Text Changes to the Document ......................95 |
| 255 | 2.43.3. Solution Description ..............................96 |
| 256 | 2.44. Partial Chunks ...........................................96 |
| 257 | 2.44.1. Description of the Problem ........................96 |
| 258 | 2.44.2. Text Changes to the Document ......................96 |
| 259 | 2.44.3. Solution Description ..............................97 |
| 260 | 2.45. Non-unicast Addresses ....................................97 |
| 261 | 2.45.1. Description of the Problem ........................97 |
| 262 | 2.45.2. Text Changes to the Document ......................97 |
| 263 | 2.45.3. Solution Description ..............................98 |
| 264 | 2.46. Processing of ABORT Chunks ...............................98 |
| 265 | 2.46.1. Description of the Problem ........................98 |
| 266 | 2.46.2. Text Changes to the Document ......................98 |
| 267 | 2.46.3. Solution Description ..............................98 |
| 268 | 2.47. Sending of ABORT Chunks ..................................99 |
| 269 | 2.47.1. Description of the Problem ........................99 |
| 270 | 2.47.2. Text Changes to the Document ......................99 |
| 271 | 2.47.3. Solution Description ..............................99 |
| 272 | 2.48. Handling of Supported Address Types Parameter ............99 |
| 273 | 2.48.1. Description of the Problem ........................99 |
| 274 | 2.48.2. Text Changes to the Document .....................100 |
| 275 | 2.48.3. Solution Description .............................100 |
| 276 | 2.49. Handling of Unexpected Parameters .......................101 |
| 277 | 2.49.1. Description of the Problem .......................101 |
| 278 | 2.49.2. Text Changes to the Document .....................101 |
| 279 | |
| 280 | |
| 281 | |
| 282 | Stewart, et al. Informational [Page 5] |
| 283 | |
| 284 | RFC 4460 SCTP Errata April 2006 |
| 285 | |
| 286 | |
| 287 | 2.49.3. Solution Description .............................102 |
| 288 | 2.50. Payload Protocol Identifier .............................102 |
| 289 | 2.50.1. Description of the Problem .......................102 |
| 290 | 2.50.2. Text Changes to the Document .....................103 |
| 291 | 2.50.3. Solution Description .............................103 |
| 292 | 2.51. Karn's Algorithm ........................................104 |
| 293 | 2.51.1. Description of the Problem .......................104 |
| 294 | 2.51.2. Text Changes to the Document .....................104 |
| 295 | 2.51.3. Solution Description .............................104 |
| 296 | 2.52. Fast Retransmit Algorithm ...............................104 |
| 297 | 2.52.1. Description of the Problem .......................104 |
| 298 | 2.52.2. Text Changes to the Document .....................105 |
| 299 | 2.52.3. Solution Description .............................105 |
| 300 | 3. Security Considerations .......................................105 |
| 301 | 4. Acknowledgements ..............................................106 |
| 302 | 5. IANA Considerations ...........................................106 |
| 303 | 6. Normative References ..........................................106 |
| 304 | |
| 305 | 1. Introduction |
| 306 | |
| 307 | This document contains a compilation of all defects found up until |
| 308 | the publishing of this document for the Stream Control Transmission |
| 309 | Protocol (SCTP), RFC 2960 [5]. These defects may be of an editorial |
| 310 | or technical nature. This document may be thought of as a companion |
| 311 | document to be used in the implementation of SCTP to clarify errors |
| 312 | in the original SCTP document. |
| 313 | |
| 314 | This document provides a history of the changes that will be compiled |
| 315 | into RFC 2960's [5] BIS document. Each error will be detailed within |
| 316 | this document in the form of |
| 317 | |
| 318 | o the problem description, |
| 319 | |
| 320 | o the text quoted from RFC 2960 [5], |
| 321 | |
| 322 | o the replacement text that should be placed into the BIS document, |
| 323 | and |
| 324 | |
| 325 | o a description of the solution. |
| 326 | |
| 327 | This document is a historical record of sequential changes what have |
| 328 | been found necessary at various interop events and through discussion |
| 329 | on this list. |
| 330 | |
| 331 | Note that because some text is changed several times, the last delta |
| 332 | for a text in the document is the erratum for that text in RFC 2960. |
| 333 | |
| 334 | |
| 335 | |
| 336 | |
| 337 | |
| 338 | Stewart, et al. Informational [Page 6] |
| 339 | |
| 340 | RFC 4460 SCTP Errata April 2006 |
| 341 | |
| 342 | |
| 343 | 1.1. Conventions |
| 344 | |
| 345 | The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, |
| 346 | SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL, when |
| 347 | they appear in this document, are to be interpreted as described in |
| 348 | RFC 2119 [2]. |
| 349 | |
| 350 | 2. Corrections to RFC 2960 |
| 351 | |
| 352 | 2.1. Incorrect Error Type During Chunk Processing. |
| 353 | |
| 354 | 2.1.1. Description of the Problem |
| 355 | |
| 356 | A typo was discovered in RFC 2960 [5] that incorrectly specifies an |
| 357 | action to be taken when processing chunks of unknown identity. |
| 358 | |
| 359 | 2.1.2. Text changes to the document |
| 360 | |
| 361 | --------- |
| 362 | Old text: (Section 3.2) |
| 363 | --------- |
| 364 | |
| 365 | 01 - Stop processing this SCTP packet and discard it, do not process |
| 366 | any further chunks within it, and report the unrecognized |
| 367 | parameter in an 'Unrecognized Parameter Type' (in either an |
| 368 | ERROR or in the INIT ACK). |
| 369 | |
| 370 | --------- |
| 371 | New text: (Section 3.2) |
| 372 | --------- |
| 373 | |
| 374 | 01 - Stop processing this SCTP packet and discard it, do not process |
| 375 | any further chunks within it, and report the unrecognized |
| 376 | chunk in an 'Unrecognized Chunk Type'. |
| 377 | |
| 378 | 2.1.3. Solution Description |
| 379 | |
| 380 | The receiver of an unrecognized chunk should not send a 'parameter' |
| 381 | error but instead should send the appropriate chunk error as |
| 382 | described above. |
| 383 | |
| 384 | 2.2. Parameter Processing Issue |
| 385 | |
| 386 | 2.2.1. Description of the Problem |
| 387 | |
| 388 | A typographical error was introduced through an improper cut and |
| 389 | paste in the use of the upper two bits to describe proper handling of |
| 390 | unknown parameters. |
| 391 | |
| 392 | |
| 393 | |
| 394 | Stewart, et al. Informational [Page 7] |
| 395 | |
| 396 | RFC 4460 SCTP Errata April 2006 |
| 397 | |
| 398 | |
| 399 | 2.2.2. Text Changes to the Document |
| 400 | |
| 401 | --------- |
| 402 | Old text: (Section 3.2.1) |
| 403 | --------- |
| 404 | |
| 405 | 00 - Stop processing this SCTP packet and discard it; do not process |
| 406 | any further chunks within it. |
| 407 | |
| 408 | 01 - Stop processing this SCTP packet and discard it, do not process |
| 409 | any further chunks within it, and report the unrecognized |
| 410 | parameter in an 'Unrecognized Parameter Type' (in either an |
| 411 | ERROR or in the INIT ACK). |
| 412 | |
| 413 | --------- |
| 414 | New text: (Section 3.2.1) |
| 415 | --------- |
| 416 | |
| 417 | 00 - Stop processing this SCTP chunk and discard it, do not process |
| 418 | any further parameters within this chunk. |
| 419 | |
| 420 | 01 - Stop processing this SCTP chunk and discard it, do not process |
| 421 | any further parameters within this chunk, and report the |
| 422 | unrecognized parameter in an 'Unrecognized Parameter Type' (in |
| 423 | either an ERROR or in the INIT ACK). |
| 424 | |
| 425 | 2.2.3. Solution Description |
| 426 | |
| 427 | It was always the intent to stop processing at the level one was at |
| 428 | in an unknown chunk or parameter with the upper bit set to 0. Thus, |
| 429 | if you are processing a chunk, you should drop the packet. If you |
| 430 | are processing a parameter, you should drop the chunk. |
| 431 | |
| 432 | 2.3. Padding Issues |
| 433 | |
| 434 | 2.3.1. Description of the Problem |
| 435 | |
| 436 | A problem was found when a Chunk terminated in a TLV parameter. If |
| 437 | this last TLV was not on a 32-bit boundary (as required), there was |
| 438 | confusion as to whether the last padding was included in the chunk |
| 439 | length. |
| 440 | |
| 441 | |
| 442 | |
| 443 | |
| 444 | |
| 445 | |
| 446 | |
| 447 | |
| 448 | |
| 449 | |
| 450 | Stewart, et al. Informational [Page 8] |
| 451 | |
| 452 | RFC 4460 SCTP Errata April 2006 |
| 453 | |
| 454 | |
| 455 | 2.3.2. Text Changes to the Document |
| 456 | |
| 457 | --------- |
| 458 | Old text: (Section 3.2) |
| 459 | --------- |
| 460 | |
| 461 | Chunk Length: 16 bits (unsigned integer) |
| 462 | |
| 463 | This value represents the size of the chunk in bytes including the |
| 464 | Chunk Type, Chunk Flags, Chunk Length, and Chunk Value fields. |
| 465 | Therefore, if the Chunk Value field is zero-length, the Length |
| 466 | field will be set to 4. The Chunk Length field does not count any |
| 467 | padding. |
| 468 | |
| 469 | Chunk Value: variable length |
| 470 | |
| 471 | The Chunk Value field contains the actual information to be |
| 472 | transferred in the chunk. The usage and format of this field is |
| 473 | dependent on the Chunk Type. |
| 474 | |
| 475 | The total length of a chunk (including Type, Length and Value fields) |
| 476 | MUST be a multiple of 4 bytes. If the length of the chunk is not a |
| 477 | multiple of 4 bytes, the sender MUST pad the chunk with all zero |
| 478 | bytes and this padding is not included in the chunk length field. |
| 479 | The sender should never pad with more than 3 bytes. The receiver |
| 480 | MUST ignore the padding bytes. |
| 481 | |
| 482 | --------- |
| 483 | New text: (Section 3.2) |
| 484 | --------- |
| 485 | |
| 486 | Chunk Length: 16 bits (unsigned integer) |
| 487 | |
| 488 | This value represents the size of the chunk in bytes, including |
| 489 | the Chunk Type, Chunk Flags, Chunk Length, and Chunk Value fields. |
| 490 | Therefore, if the Chunk Value field is zero-length, the Length |
| 491 | field will be set to 4. The Chunk Length field does not count any |
| 492 | chunk padding. |
| 493 | |
| 494 | Chunks (including Type, Length, and Value fields) are padded out |
| 495 | by the sender with all zero bytes to be a multiple of 4 bytes |
| 496 | long. This padding MUST NOT be more than 3 bytes in total. The |
| 497 | Chunk Length value does not include terminating padding of the |
| 498 | chunk. However, it does include padding of any variable-length |
| 499 | parameter except the last parameter in the chunk. The receiver |
| 500 | MUST ignore the padding. |
| 501 | |
| 502 | |
| 503 | |
| 504 | |
| 505 | |
| 506 | Stewart, et al. Informational [Page 9] |
| 507 | |
| 508 | RFC 4460 SCTP Errata April 2006 |
| 509 | |
| 510 | |
| 511 | Note: A robust implementation should accept the Chunk whether or |
| 512 | not the final padding has been included in the Chunk Length. |
| 513 | |
| 514 | Chunk Value: variable length |
| 515 | |
| 516 | The Chunk Value field contains the actual information to be |
| 517 | transferred in the chunk. The usage and format of this field is |
| 518 | dependent on the Chunk Type. |
| 519 | |
| 520 | The total length of a chunk (including Type, Length, and Value |
| 521 | fields) MUST be a multiple of 4 bytes. If the length of the chunk is |
| 522 | not a multiple of 4 bytes, the sender MUST pad the chunk with all |
| 523 | zero bytes, and this padding is not included in the chunk length |
| 524 | field. The sender should never pad with more than 3 bytes. The |
| 525 | receiver MUST ignore the padding bytes. |
| 526 | |
| 527 | 2.3.3. Solution Description |
| 528 | |
| 529 | The above text makes clear that the padding of the last parameter is |
| 530 | not included in the Chunk Length field. It also clarifies that the |
| 531 | padding of parameters that are not the last one must be counted in |
| 532 | the Chunk Length field. |
| 533 | |
| 534 | 2.4. Parameter Types across All Chunk Types |
| 535 | |
| 536 | 2.4.1. Description of the Problem |
| 537 | |
| 538 | A problem was noted when multiple errors are needed to be sent |
| 539 | regarding unknown or unrecognized parameters. Since often the error |
| 540 | type does not hold the chunk type field, it may become difficult to |
| 541 | tell which error was associated with which chunk. |
| 542 | |
| 543 | 2.4.2. Text Changes to the Document |
| 544 | |
| 545 | --------- |
| 546 | Old text: (Section 3.2.1) |
| 547 | --------- |
| 548 | |
| 549 | The actual SCTP parameters are defined in the specific SCTP chunk |
| 550 | sections. The rules for IETF-defined parameter extensions are |
| 551 | defined in Section 13.2. |
| 552 | |
| 553 | --------- |
| 554 | New text: (Section 3.2.1) |
| 555 | --------- |
| 556 | |
| 557 | The actual SCTP parameters are defined in the specific SCTP chunk |
| 558 | sections. The rules for IETF-defined parameter extensions are |
| 559 | |
| 560 | |
| 561 | |
| 562 | Stewart, et al. Informational [Page 10] |
| 563 | |
| 564 | RFC 4460 SCTP Errata April 2006 |
| 565 | |
| 566 | |
| 567 | defined in Section 13.2. Note that a parameter type MUST be unique |
| 568 | across all chunks. For example, the parameter type '5' is used to |
| 569 | represent an IPv4 address (see Section 3.3.2). The value '5' then is |
| 570 | reserved across all chunks to represent an IPv4 address and MUST NOT |
| 571 | be reused with a different meaning in any other chunk. |
| 572 | |
| 573 | --------- |
| 574 | Old text: (Section 13.2) |
| 575 | --------- |
| 576 | |
| 577 | 13.2 IETF-defined Chunk Parameter Extension |
| 578 | |
| 579 | The assignment of new chunk parameter type codes is done through an |
| 580 | IETF Consensus action as defined in [RFC2434]. Documentation of the |
| 581 | chunk parameter MUST contain the following information: |
| 582 | |
| 583 | a) Name of the parameter type. |
| 584 | |
| 585 | b) Detailed description of the structure of the parameter field. |
| 586 | This structure MUST conform to the general type-length-value |
| 587 | format described in Section 3.2.1. |
| 588 | |
| 589 | c) Detailed definition of each component of the parameter type. |
| 590 | |
| 591 | d) Detailed description of the intended use of this parameter type, |
| 592 | and an indication of whether and under what circumstances multiple |
| 593 | instances of this parameter type may be found within the same |
| 594 | chunk. |
| 595 | |
| 596 | --------- |
| 597 | New text: (Section 13.2) |
| 598 | --------- |
| 599 | |
| 600 | 13.2. IETF-defined Chunk Parameter Extension |
| 601 | |
| 602 | The assignment of new chunk parameter type codes is done through an |
| 603 | IETF Consensus action, as defined in [RFC2434]. Documentation of the |
| 604 | chunk parameter MUST contain the following information: |
| 605 | |
| 606 | a) Name of the parameter type. |
| 607 | |
| 608 | b) Detailed description of the structure of the parameter field. |
| 609 | This structure MUST conform to the general type-length-value |
| 610 | format described in Section 3.2.1. |
| 611 | |
| 612 | c) Detailed definition of each component of the parameter type. |
| 613 | |
| 614 | |
| 615 | |
| 616 | |
| 617 | |
| 618 | Stewart, et al. Informational [Page 11] |
| 619 | |
| 620 | RFC 4460 SCTP Errata April 2006 |
| 621 | |
| 622 | |
| 623 | d) Detailed description of the intended use of this parameter type, |
| 624 | and an indication of whether and under what circumstances multiple |
| 625 | instances of this parameter type may be found within the same |
| 626 | chunk. |
| 627 | |
| 628 | e) Each parameter type MUST be unique across all chunks. |
| 629 | |
| 630 | 2.4.3. Solution Description |
| 631 | |
| 632 | By having all parameters unique across all chunk assignments (the |
| 633 | current assignment policy), no ambiguity exists as to what a |
| 634 | parameter means in different contexts. The trade-off for this is a |
| 635 | smaller parameter space, i.e., 65,536 parameters versus 65,536 * |
| 636 | Number-of- chunks. |
| 637 | |
| 638 | 2.5. Stream Parameter Clarification |
| 639 | |
| 640 | 2.5.1. Description of the problem |
| 641 | |
| 642 | A problem was found where the specification is unclear on the |
| 643 | legality of an endpoint asking for more stream resources than were |
| 644 | allowed in the MIS value of the INIT. In particular, the value in |
| 645 | the INIT ACK requested in its OS value was larger than the MIS value |
| 646 | received in the INIT chunk. This behavior is illegal, yet it was |
| 647 | unspecified in RFC 2960 [5] |
| 648 | |
| 649 | 2.5.2. Text Changes to the Document |
| 650 | |
| 651 | --------- |
| 652 | Old text: (Section 3.3.3) |
| 653 | --------- |
| 654 | |
| 655 | Number of Outbound Streams (OS): 16 bits (unsigned integer) |
| 656 | |
| 657 | Defines the number of outbound streams the sender of this INIT ACK |
| 658 | chunk wishes to create in this association. The value of 0 MUST |
| 659 | NOT be used. |
| 660 | |
| 661 | Note: A receiver of an INIT ACK with the OS value set to 0 SHOULD |
| 662 | destroy the association discarding its TCB. |
| 663 | |
| 664 | |
| 665 | |
| 666 | |
| 667 | |
| 668 | |
| 669 | |
| 670 | |
| 671 | |
| 672 | |
| 673 | |
| 674 | Stewart, et al. Informational [Page 12] |
| 675 | |
| 676 | RFC 4460 SCTP Errata April 2006 |
| 677 | |
| 678 | |
| 679 | --------- |
| 680 | New text: (Section 3.3.3) |
| 681 | --------- |
| 682 | |
| 683 | Number of Outbound Streams (OS): 16 bits (unsigned integer) |
| 684 | |
| 685 | Defines the number of outbound streams the sender of this INIT ACK |
| 686 | chunk wishes to create in this association. The value of 0 MUST |
| 687 | NOT be used, and the value MUST NOT be greater than the MIS value |
| 688 | sent in the INIT chunk. |
| 689 | |
| 690 | Note: A receiver of an INIT ACK with the OS value set to 0 SHOULD |
| 691 | destroy the association, discarding its TCB. |
| 692 | |
| 693 | 2.5.3. Solution Description |
| 694 | |
| 695 | The change in wording, above, changes it so that a responder to an |
| 696 | INIT chunk does not specify more streams in its OS value than were |
| 697 | represented to it in the MIS value, i.e., its maximum. |
| 698 | |
| 699 | 2.6. Restarting Association Security Issue |
| 700 | |
| 701 | 2.6.1. Description of the Problem |
| 702 | |
| 703 | A security problem was found when a restart occurs. It is possible |
| 704 | for an intruder to send an INIT to an endpoint of an existing |
| 705 | association. In the INIT the intruder would list one or more of the |
| 706 | current addresses of an association and its own. The normal restart |
| 707 | procedures would then occur, and the intruder would have hijacked an |
| 708 | association. |
| 709 | |
| 710 | |
| 711 | |
| 712 | |
| 713 | |
| 714 | |
| 715 | |
| 716 | |
| 717 | |
| 718 | |
| 719 | |
| 720 | |
| 721 | |
| 722 | |
| 723 | |
| 724 | |
| 725 | |
| 726 | |
| 727 | |
| 728 | |
| 729 | |
| 730 | Stewart, et al. Informational [Page 13] |
| 731 | |
| 732 | RFC 4460 SCTP Errata April 2006 |
| 733 | |
| 734 | |
| 735 | 2.6.2. Text Changes to the Document |
| 736 | |
| 737 | --------- |
| 738 | Old text: (Section 3.3.10) |
| 739 | --------- |
| 740 | |
| 741 | Cause Code |
| 742 | Value Cause Code |
| 743 | --------- ---------------- |
| 744 | 1 Invalid Stream Identifier |
| 745 | 2 Missing Mandatory Parameter |
| 746 | 3 Stale Cookie Error |
| 747 | 4 Out of Resource |
| 748 | 5 Unresolvable Address |
| 749 | 6 Unrecognized Chunk Type |
| 750 | 7 Invalid Mandatory Parameter |
| 751 | 8 Unrecognized Parameters |
| 752 | 9 No User Data |
| 753 | 10 Cookie Received While Shutting Down |
| 754 | |
| 755 | Cause Length: 16 bits (unsigned integer) |
| 756 | |
| 757 | Set to the size of the parameter in bytes, including the Cause |
| 758 | Code, Cause Length, and Cause-Specific Information fields |
| 759 | |
| 760 | Cause-specific Information: variable length |
| 761 | |
| 762 | This field carries the details of the error condition. |
| 763 | |
| 764 | Sections 3.3.10.1 - 3.3.10.10 define error causes for SCTP. |
| 765 | |
| 766 | Guidelines for the IETF to define new error cause values are |
| 767 | discussed in Section 13.3. |
| 768 | |
| 769 | |
| 770 | |
| 771 | |
| 772 | |
| 773 | |
| 774 | |
| 775 | |
| 776 | |
| 777 | |
| 778 | |
| 779 | |
| 780 | |
| 781 | |
| 782 | |
| 783 | |
| 784 | |
| 785 | |
| 786 | Stewart, et al. Informational [Page 14] |
| 787 | |
| 788 | RFC 4460 SCTP Errata April 2006 |
| 789 | |
| 790 | |
| 791 | --------- |
| 792 | New text: (Section 3.3.10) |
| 793 | --------- |
| 794 | |
| 795 | Cause Code |
| 796 | Value Cause Code |
| 797 | --------- ---------------- |
| 798 | 1 Invalid Stream Identifier |
| 799 | 2 Missing Mandatory Parameter |
| 800 | 3 Stale Cookie Error |
| 801 | 4 Out of Resource |
| 802 | 5 Unresolvable Address |
| 803 | 6 Unrecognized Chunk Type |
| 804 | 7 Invalid Mandatory Parameter |
| 805 | 8 Unrecognized Parameters |
| 806 | 9 No User Data |
| 807 | 10 Cookie Received While Shutting Down |
| 808 | 11 Restart of an Association with New Addresses |
| 809 | |
| 810 | Cause Length: 16 bits (unsigned integer) |
| 811 | |
| 812 | Set to the size of the parameter in bytes, including the Cause |
| 813 | Code, Cause Length, and Cause-Specific Information fields. |
| 814 | |
| 815 | Cause-specific Information: variable length |
| 816 | |
| 817 | This field carries the details of the error condition. |
| 818 | |
| 819 | Sections 3.3.10.1 - 3.3.10.11 define error causes for SCTP. |
| 820 | Guidelines for the IETF to define new error cause values are |
| 821 | discussed in Section 13.3. |
| 822 | |
| 823 | --------- |
| 824 | New text: (Note no old text, new error cause added in section 3.3.10) |
| 825 | --------- |
| 826 | |
| 827 | 3.3.10.11. Restart of an Association with New Addresses (11) |
| 828 | |
| 829 | Cause of error |
| 830 | -------------- |
| 831 | Restart of an association with new addresses: An INIT was received |
| 832 | on an existing association. But the INIT added addresses to the |
| 833 | association that were previously NOT part of the association. The |
| 834 | new addresses are listed in the error code. This ERROR is normally |
| 835 | sent as part of an ABORT refusing the INIT (see Section 5.2). |
| 836 | |
| 837 | |
| 838 | |
| 839 | |
| 840 | |
| 841 | |
| 842 | Stewart, et al. Informational [Page 15] |
| 843 | |
| 844 | RFC 4460 SCTP Errata April 2006 |
| 845 | |
| 846 | |
| 847 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 848 | | Cause Code=11 | Cause Length=Variable | |
| 849 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 850 | / New Address TLVs / |
| 851 | \ \ |
| 852 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 853 | |
| 854 | Note: Each New Address TLV is an exact copy of the TLV |
| 855 | that was found in the INIT chunk that was new, including the |
| 856 | Parameter Type and the Parameter length. |
| 857 | |
| 858 | --------- |
| 859 | Old text: (Section 5.2.1) |
| 860 | --------- |
| 861 | |
| 862 | Upon receipt of an INIT in the COOKIE-WAIT or COOKIE-ECHOED state, an |
| 863 | endpoint MUST respond with an INIT ACK using the same parameters it |
| 864 | sent in its original INIT chunk (including its Initiation Tag, |
| 865 | unchanged). These original parameters are combined with those from |
| 866 | the newly received INIT chunk. The endpoint shall also generate a |
| 867 | State Cookie with the INIT ACK. The endpoint uses the parameters |
| 868 | sent in its INIT to calculate the State Cookie. |
| 869 | |
| 870 | --------- |
| 871 | New text: (Section 5.2.1) |
| 872 | --------- |
| 873 | |
| 874 | Upon receipt of an INIT in the COOKIE-WAIT state, an endpoint MUST |
| 875 | respond with an INIT ACK using the same parameters it sent in its |
| 876 | original INIT chunk (including its Initiation Tag, unchanged). When |
| 877 | responding, the endpoint MUST send the INIT ACK back to the same |
| 878 | address that the original INIT (sent by this endpoint) was sent to. |
| 879 | |
| 880 | Upon receipt of an INIT in the COOKIE-ECHOED state, an endpoint MUST |
| 881 | respond with an INIT ACK using the same parameters it sent in its |
| 882 | original INIT chunk (including its Initiation Tag, unchanged), |
| 883 | provided that no NEW address has been added to the forming |
| 884 | association. If the INIT message indicates that a new address has |
| 885 | been added to the association, then the entire INIT MUST be |
| 886 | discarded, and NO changes should be made to the existing association. |
| 887 | An ABORT SHOULD be sent in response that MAY include the error |
| 888 | 'Restart of an association with new addresses'. The error SHOULD |
| 889 | list the addresses that were added to the restarting association. |
| 890 | |
| 891 | |
| 892 | |
| 893 | |
| 894 | |
| 895 | |
| 896 | |
| 897 | |
| 898 | Stewart, et al. Informational [Page 16] |
| 899 | |
| 900 | RFC 4460 SCTP Errata April 2006 |
| 901 | |
| 902 | |
| 903 | When responding in either state (COOKIE-WAIT or COOKIE-ECHOED) with |
| 904 | an INIT ACK, the original parameters are combined with those from the |
| 905 | newly received INIT chunk. The endpoint shall also generate a State |
| 906 | Cookie with the INIT ACK. The endpoint uses the parameters sent in |
| 907 | its INIT to calculate the State Cookie. |
| 908 | |
| 909 | --------- |
| 910 | Old text: (Section 5.2.2) |
| 911 | --------- |
| 912 | |
| 913 | 5.2.2 Unexpected INIT in States Other than CLOSED, COOKIE-ECHOED, |
| 914 | COOKIE-WAIT and SHUTDOWN-ACK-SENT |
| 915 | |
| 916 | Unless otherwise stated, upon reception of an unexpected INIT for |
| 917 | this association, the endpoint shall generate an INIT ACK with a |
| 918 | State Cookie. In the outbound INIT ACK the endpoint MUST copy its |
| 919 | current Verification Tag and peer's Verification Tag into a reserved |
| 920 | place within the state cookie. We shall refer to these locations as |
| 921 | the Peer's-Tie-Tag and the Local-Tie-Tag. The outbound SCTP packet |
| 922 | containing this INIT ACK MUST carry a Verification Tag value equal to |
| 923 | the Initiation Tag found in the unexpected INIT. And the INIT ACK |
| 924 | MUST contain a new Initiation Tag (randomly generated see Section |
| 925 | 5.3.1). Other parameters for the endpoint SHOULD be copied from the |
| 926 | existing parameters of the association (e.g., number of outbound |
| 927 | streams) into the INIT ACK and cookie. |
| 928 | |
| 929 | After sending out the INIT ACK, the endpoint shall take no further |
| 930 | actions, i.e., the existing association, including its current state, |
| 931 | and the corresponding TCB MUST NOT be changed. |
| 932 | |
| 933 | Note: Only when a TCB exists and the association is not in a COOKIE- |
| 934 | WAIT state are the Tie-Tags populated. For a normal association INIT |
| 935 | (i.e., the endpoint is in a COOKIE-WAIT state), the Tie-Tags MUST be |
| 936 | set to 0 (indicating that no previous TCB existed). The INIT ACK and |
| 937 | State Cookie are populated as specified in section 5.2.1. |
| 938 | |
| 939 | --------- |
| 940 | New text: (Section 5.2.2) |
| 941 | --------- |
| 942 | |
| 943 | 5.2.2. Unexpected INIT in States Other Than CLOSED, COOKIE-ECHOED, |
| 944 | COOKIE-WAIT, and SHUTDOWN-ACK-SENT |
| 945 | |
| 946 | Unless otherwise stated, upon receipt of an unexpected INIT for this |
| 947 | association, the endpoint shall generate an INIT ACK with a State |
| 948 | Cookie. Before responding, the endpoint MUST check to see if the |
| 949 | unexpected INIT adds new addresses to the association. If new |
| 950 | addresses are added to the association, the endpoint MUST respond |
| 951 | |
| 952 | |
| 953 | |
| 954 | Stewart, et al. Informational [Page 17] |
| 955 | |
| 956 | RFC 4460 SCTP Errata April 2006 |
| 957 | |
| 958 | |
| 959 | with an ABORT, copying the 'Initiation Tag' of the unexpected INIT |
| 960 | into the 'Verification Tag' of the outbound packet carrying the |
| 961 | ABORT. In the ABORT response, the cause of error MAY be set to |
| 962 | 'restart of an association with new addresses'. The error SHOULD |
| 963 | list the addresses that were added to the restarting association. |
| 964 | |
| 965 | If no new addresses are added, when responding to the INIT in the |
| 966 | outbound INIT ACK, the endpoint MUST copy its current Verification |
| 967 | Tag and peer's Verification Tag into a reserved place within the |
| 968 | state cookie. We shall refer to these locations as the Peer's-Tie- |
| 969 | Tag and the Local-Tie-Tag. The outbound SCTP packet containing this |
| 970 | INIT ACK MUST carry a Verification Tag value equal to the Initiation |
| 971 | Tag found in the unexpected INIT. And the INIT ACK MUST contain a |
| 972 | new Initiation Tag (randomly generated; see Section 5.3.1). Other |
| 973 | parameters for the endpoint SHOULD be copied from the existing |
| 974 | parameters of the association (e.g., number of outbound streams) into |
| 975 | the INIT ACK and cookie. |
| 976 | |
| 977 | After sending out the INIT ACK or ABORT, the endpoint shall take no |
| 978 | further actions; i.e., the existing association, including its |
| 979 | current state, and the corresponding TCB MUST NOT be changed. |
| 980 | |
| 981 | Note: Only when a TCB exists and the association is not in a COOKIE- |
| 982 | WAIT or SHUTDOWN-ACK-SENT state are the Tie-Tags populated with a |
| 983 | value other than 0. For a normal association INIT (i.e., the |
| 984 | endpoint is in the CLOSED state), the Tie-Tags MUST be set to 0 |
| 985 | (indicating that no previous TCB existed). |
| 986 | |
| 987 | 2.6.3. Solution Description |
| 988 | |
| 989 | A new error code is being added, along with specific instructions to |
| 990 | send back an ABORT to a new association in a restart case or |
| 991 | collision case, where new addresses have been added. The error code |
| 992 | can be used by a legitimate restart to inform the endpoint that it |
| 993 | has made a software error in adding a new address. The endpoint then |
| 994 | can choose to wait until the OOTB ABORT tears down the old |
| 995 | association, or to restart without the new address. |
| 996 | |
| 997 | Also, the note at the end of Section 5.2.2 explaining the use of the |
| 998 | Tie-Tags was modified to properly explain the states in which the |
| 999 | Tie-Tags should be set to a value different than 0. |
| 1000 | |
| 1001 | |
| 1002 | |
| 1003 | |
| 1004 | |
| 1005 | |
| 1006 | |
| 1007 | |
| 1008 | |
| 1009 | |
| 1010 | Stewart, et al. Informational [Page 18] |
| 1011 | |
| 1012 | RFC 4460 SCTP Errata April 2006 |
| 1013 | |
| 1014 | |
| 1015 | 2.7. Implicit Ability to Exceed cwnd by PMTU-1 Bytes |
| 1016 | |
| 1017 | 2.7.1. Description of the Problem |
| 1018 | |
| 1019 | Some implementations were having difficulty growing their cwnd. This |
| 1020 | was due to an improper enforcement of the congestion control rules. |
| 1021 | The rules, as written, provided for a slop over of the cwnd value. |
| 1022 | Without this slop over, the sender would appear NOT to be using its |
| 1023 | full cwnd value and thus would never increase it. |
| 1024 | |
| 1025 | 2.7.2. Text Changes to the Document |
| 1026 | |
| 1027 | --------- |
| 1028 | Old text: (Section 6.1) |
| 1029 | --------- |
| 1030 | |
| 1031 | B) At any given time, the sender MUST NOT transmit new data to a |
| 1032 | given transport address if it has cwnd or more bytes of data |
| 1033 | outstanding to that transport address. |
| 1034 | |
| 1035 | --------- |
| 1036 | New text: (Section 6.1) |
| 1037 | --------- |
| 1038 | |
| 1039 | B) At any given time, the sender MUST NOT transmit new data to a |
| 1040 | given transport address if it has cwnd or more bytes of data |
| 1041 | outstanding to that transport address. The sender may exceed cwnd |
| 1042 | by up to (PMTU-1) bytes on a new transmission if the cwnd is not |
| 1043 | currently exceeded. |
| 1044 | |
| 1045 | 2.7.3. Solution Description |
| 1046 | |
| 1047 | The text changes make clear the ability to go over the cwnd value by |
| 1048 | no more than (PMTU-1) bytes. |
| 1049 | |
| 1050 | 2.8. Issues with Fast Retransmit |
| 1051 | |
| 1052 | 2.8.1. Description of the Problem |
| 1053 | |
| 1054 | Several problems were found in the current specification of fast |
| 1055 | retransmit. The current wording did not require GAP ACK blocks to be |
| 1056 | sent, even though they are essential to the workings of SCTP's |
| 1057 | congestion control. The specification left unclear how to handle the |
| 1058 | fast retransmit cycle, having the implementation wait on the cwnd to |
| 1059 | retransmit a TSN that was marked for fast retransmit. No limit was |
| 1060 | placed on how many times a TSN could be fast retransmitted. Fast |
| 1061 | Recovery was not specified, causing the congestion window to be |
| 1062 | reduced drastically when there are multiple losses in a single RTT. |
| 1063 | |
| 1064 | |
| 1065 | |
| 1066 | Stewart, et al. Informational [Page 19] |
| 1067 | |
| 1068 | RFC 4460 SCTP Errata April 2006 |
| 1069 | |
| 1070 | |
| 1071 | 2.8.2. Text Changes to the Document |
| 1072 | |
| 1073 | --------- |
| 1074 | Old text: (Section 6.2) |
| 1075 | --------- |
| 1076 | |
| 1077 | Acknowledgements MUST be sent in SACK chunks unless shutdown was |
| 1078 | requested by the ULP in which case an endpoint MAY send an |
| 1079 | acknowledgement in the SHUTDOWN chunk. A SACK chunk can acknowledge |
| 1080 | the reception of multiple DATA chunks. See Section 3.3.4 for SACK |
| 1081 | chunk format. In particular, the SCTP endpoint MUST fill in the |
| 1082 | Cumulative TSN Ack field to indicate the latest sequential TSN (of a |
| 1083 | valid DATA chunk) it has received. Any received DATA chunks with TSN |
| 1084 | greater than the value in the Cumulative TSN Ack field SHOULD also be |
| 1085 | reported in the Gap Ack Block fields. |
| 1086 | |
| 1087 | --------- |
| 1088 | New text: (Section 6.2) |
| 1089 | --------- |
| 1090 | |
| 1091 | Acknowledegments MUST be sent in SACK chunks unless shutdown was |
| 1092 | requested by the ULP, in which case an endpoint MAY send an |
| 1093 | acknowledgement in the SHUTDOWN chunk. A SACK chunk can acknowledge |
| 1094 | the reception of multiple DATA chunks. See Section 3.3.4 for SACK |
| 1095 | chunk format. In particular, the SCTP endpoint MUST fill in the |
| 1096 | Cumulative TSN Ack field to indicate the latest sequential TSN (of a |
| 1097 | valid DATA chunk) it has received. Any received DATA chunks with |
| 1098 | TSN greater than the value in the Cumulative TSN Ack field are |
| 1099 | reported in the Gap Ack Block fields. The SCTP endpoint MUST |
| 1100 | report as many Gap Ack Blocks as can fit in a single SACK |
| 1101 | chunk limited by the current path MTU. |
| 1102 | |
| 1103 | --------- |
| 1104 | Old text: (Section 6.2.1) |
| 1105 | --------- |
| 1106 | |
| 1107 | D) Any time a SACK arrives, the endpoint performs the following: |
| 1108 | |
| 1109 | i) If Cumulative TSN Ack is less than the Cumulative TSN Ack |
| 1110 | Point, then drop the SACK. Since Cumulative TSN Ack is |
| 1111 | monotonically increasing, a SACK whose Cumulative TSN Ack is |
| 1112 | less than the Cumulative TSN Ack Point indicates an out-of- |
| 1113 | order SACK. |
| 1114 | |
| 1115 | ii) Set rwnd equal to the newly received a_rwnd minus the |
| 1116 | number of bytes still outstanding after processing the |
| 1117 | Cumulative TSN Ack and the Gap Ack Blocks. |
| 1118 | |
| 1119 | |
| 1120 | |
| 1121 | |
| 1122 | Stewart, et al. Informational [Page 20] |
| 1123 | |
| 1124 | RFC 4460 SCTP Errata April 2006 |
| 1125 | |
| 1126 | |
| 1127 | iii) If the SACK is missing a TSN that was previously |
| 1128 | acknowledged via a Gap Ack Block (e.g., the data receiver |
| 1129 | reneged on the data), then mark the corresponding DATA chunk |
| 1130 | as available for retransmit: Mark it as missing for fast |
| 1131 | retransmit as described in Section 7.2.4 and if no |
| 1132 | retransmit timer is running for the destination address |
| 1133 | to which the DATA chunk was originally transmitted, then |
| 1134 | T3-rtx is started for that destination address. |
| 1135 | |
| 1136 | --------- |
| 1137 | New text: (Section 6.2.1) |
| 1138 | --------- |
| 1139 | |
| 1140 | D) Any time a SACK arrives, the endpoint performs the following: |
| 1141 | |
| 1142 | i) If Cumulative TSN Ack is less than the Cumulative TSN Ack |
| 1143 | Point, then drop the SACK. Since Cumulative TSN Ack is |
| 1144 | monotonically increasing, a SACK whose Cumulative TSN Ack is |
| 1145 | less than the Cumulative TSN Ack Point indicates an out-of- |
| 1146 | order SACK. |
| 1147 | |
| 1148 | ii) Set rwnd equal to the newly received a_rwnd minus the |
| 1149 | number of bytes still outstanding after processing the |
| 1150 | Cumulative TSN Ack and the Gap Ack Blocks. |
| 1151 | |
| 1152 | iii) If the SACK is missing a TSN that was previously |
| 1153 | acknowledged via a Gap Ack Block (e.g., the data receiver |
| 1154 | reneged on the data), then consider the corresponding DATA |
| 1155 | that might be possibly missing: Count one miss indication |
| 1156 | towards fast retransmit as described in Section 7.2.4, and |
| 1157 | if no retransmit timer is running for the destination |
| 1158 | address to which the DATA chunk was originally transmitted, |
| 1159 | then T3-rtx is started for that destination address. |
| 1160 | |
| 1161 | iv) If the Cumulative TSN Ack matches or exceeds the Fast |
| 1162 | Recovery exitpoint (Section 7.2.4), Fast Recovery is exited. |
| 1163 | |
| 1164 | --------- |
| 1165 | Old text: (Section 7.2.4) |
| 1166 | --------- |
| 1167 | |
| 1168 | Whenever an endpoint receives a SACK that indicates some TSN(s) |
| 1169 | missing, it SHOULD wait for 3 further miss indications (via |
| 1170 | subsequent SACK's) on the same TSN(s) before taking action with |
| 1171 | regard to Fast Retransmit. |
| 1172 | |
| 1173 | When the TSN(s) is reported as missing in the fourth consecutive |
| 1174 | SACK, the data sender shall: |
| 1175 | |
| 1176 | |
| 1177 | |
| 1178 | Stewart, et al. Informational [Page 21] |
| 1179 | |
| 1180 | RFC 4460 SCTP Errata April 2006 |
| 1181 | |
| 1182 | |
| 1183 | 1) Mark the missing DATA chunk(s) for retransmission, |
| 1184 | |
| 1185 | 2) Adjust the ssthresh and cwnd of the destination address(es) to |
| 1186 | which the missing DATA chunks were last sent, according to the |
| 1187 | formula described in Section 7.2.3. |
| 1188 | |
| 1189 | 3) Determine how many of the earliest (i.e., lowest TSN) DATA chunks |
| 1190 | marked for retransmission will fit into a single packet, subject |
| 1191 | to constraint of the path MTU of the destination transport address |
| 1192 | to which the packet is being sent. Call this value K. Retransmit |
| 1193 | those K DATA chunks in a single packet. |
| 1194 | |
| 1195 | 4) Restart T3-rtx timer only if the last SACK acknowledged the lowest |
| 1196 | outstanding TSN number sent to that address, or the endpoint is |
| 1197 | retransmitting the first outstanding DATA chunk sent to that |
| 1198 | address. |
| 1199 | |
| 1200 | Note: Before the above adjustments, if the received SACK also |
| 1201 | acknowledges new DATA chunks and advances the Cumulative TSN Ack |
| 1202 | Point, the cwnd adjustment rules defined in Sections 7.2.1 and 7.2.2 |
| 1203 | must be applied first. |
| 1204 | |
| 1205 | A straightforward implementation of the above keeps a counter for |
| 1206 | each TSN hole reported by a SACK. The counter increments for each |
| 1207 | consecutive SACK reporting the TSN hole. After reaching 4 and |
| 1208 | starting the fast retransmit procedure, the counter resets to 0. |
| 1209 | Because cwnd in SCTP indirectly bounds the number of outstanding |
| 1210 | TSN's, the effect of TCP fast-recovery is achieved automatically with |
| 1211 | no adjustment to the congestion control window size. |
| 1212 | |
| 1213 | --------- |
| 1214 | New text: (Section 7.2.4) |
| 1215 | --------- |
| 1216 | |
| 1217 | Whenever an endpoint receives a SACK that indicates that some TSNs |
| 1218 | are missing, it SHOULD wait for 3 further miss indications (via |
| 1219 | subsequent SACKs) on the same TSN(s) before taking action with |
| 1220 | regard to Fast Retransmit. |
| 1221 | |
| 1222 | Miss indications SHOULD follow the HTNA (Highest TSN Newly |
| 1223 | Acknowledged) algorithm. For each incoming SACK, miss |
| 1224 | indications are incremented only for missing TSNs prior to |
| 1225 | the highest TSN newly acknowledged in the SACK. A newly |
| 1226 | acknowledged DATA chunk is one not previously acknowledged |
| 1227 | in a SACK. If an endpoint is in Fast Recovery and a SACK |
| 1228 | arrives that advances the Cumulative TSN Ack Point, the |
| 1229 | miss indications are incremented for all TSNs reported |
| 1230 | missing in the SACK. |
| 1231 | |
| 1232 | |
| 1233 | |
| 1234 | Stewart, et al. Informational [Page 22] |
| 1235 | |
| 1236 | RFC 4460 SCTP Errata April 2006 |
| 1237 | |
| 1238 | |
| 1239 | When the fourth consecutive miss indication is received for a TSN(s), |
| 1240 | the data sender shall do the following: |
| 1241 | |
| 1242 | 1) Mark the DATA chunk(s) with four miss indications for |
| 1243 | retransmission. |
| 1244 | |
| 1245 | 2) If not in Fast Recovery, adjust the ssthresh and cwnd of the |
| 1246 | destination address(es) to which the missing DATA chunks were |
| 1247 | last sent, according to the formula described in Section 7.2.3. |
| 1248 | |
| 1249 | 3) Determine how many of the earliest (i.e., lowest TSN) DATA chunks |
| 1250 | marked for retransmission will fit into a single packet, subject |
| 1251 | to constraint of the path MTU of the destination transport address |
| 1252 | to which the packet is being sent. Call this value K. Retransmit |
| 1253 | those K DATA chunks in a single packet. When a Fast Retransmit is |
| 1254 | being performed, the sender SHOULD ignore the value of cwnd and |
| 1255 | SHOULD NOT delay retransmission for this single packet. |
| 1256 | |
| 1257 | 4) Restart T3-rtx timer only if the last SACK acknowledged the lowest |
| 1258 | outstanding TSN number sent to that address, or the endpoint is |
| 1259 | retransmitting the first outstanding DATA chunk sent to that |
| 1260 | address. |
| 1261 | |
| 1262 | 5) Mark the DATA chunk(s) as being fast retransmitted and thus |
| 1263 | ineligible for a subsequent fast retransmit. Those TSNs marked |
| 1264 | for retransmission due to the Fast Retransmit algorithm that |
| 1265 | did not fit in the sent datagram carrying K other TSNs are also |
| 1266 | marked as ineligible for a subsequent fast retransmit. However, |
| 1267 | as they are marked for retransmission they will be retransmitted |
| 1268 | later on as soon as cwnd allows. |
| 1269 | |
| 1270 | 6) If not in Fast Recovery, enter Fast Recovery and mark the highest |
| 1271 | outstanding TSN as the Fast Recovery exit point. When a SACK |
| 1272 | acknowledges all TSNs up to and including this exit point, Fast |
| 1273 | Recovery is exited. While in Fast Recovery, the ssthresh and cwnd |
| 1274 | SHOULD NOT change for any destinations due to a subsequent Fast |
| 1275 | Recovery event (i.e., one SHOULD NOT reduce the cwnd further due |
| 1276 | to a subsequent fast retransmit). |
| 1277 | |
| 1278 | Note: Before the above adjustments, if the received SACK also |
| 1279 | acknowledges new DATA chunks and advances the Cumulative TSN Ack |
| 1280 | Point, the cwnd adjustment rules defined in Sections 7.2.1 and 7.2.2 |
| 1281 | must be applied first. |
| 1282 | |
| 1283 | 2.8.3. Solution Description |
| 1284 | |
| 1285 | The effect of the above wording changes are as follows: |
| 1286 | |
| 1287 | |
| 1288 | |
| 1289 | |
| 1290 | Stewart, et al. Informational [Page 23] |
| 1291 | |
| 1292 | RFC 4460 SCTP Errata April 2006 |
| 1293 | |
| 1294 | |
| 1295 | o It requires with a MUST the sending of GAP Ack blocks instead of |
| 1296 | the current RFC 2960 [5] SHOULD. |
| 1297 | |
| 1298 | o It allows a TSN being Fast Retransmitted (FR) to be sent only once |
| 1299 | via FR. |
| 1300 | |
| 1301 | o It ends the delay in waiting for the flight size to drop when a |
| 1302 | TSN is identified as being ready to FR. |
| 1303 | |
| 1304 | o It changes the way chunks are marked during fast retransmit, so |
| 1305 | that only new reports are counted. |
| 1306 | |
| 1307 | o It introduces a Fast Recovery period to avoid multiple congestion |
| 1308 | window reductions when there are multiple losses in a single RTT |
| 1309 | (as shown by Caro et al. [3]). |
| 1310 | |
| 1311 | These changes will effectively allow SCTP to follow a similar model |
| 1312 | as TCP+SACK in the handling of Fast Retransmit. |
| 1313 | |
| 1314 | 2.9. Missing Statement about partial_bytes_acked Update |
| 1315 | |
| 1316 | 2.9.1. Description of the Problem |
| 1317 | |
| 1318 | SCTP uses four control variables to regulate its transmission rate: |
| 1319 | rwnd, cwnd, ssthresh, and partial_bytes_acked. Upon detection of |
| 1320 | packet losses from SACK, or when the T3-rtx timer expires on an |
| 1321 | address, cwnd and ssthresh should be updated as stated in Section |
| 1322 | 7.2.3. However, that section should also clarify that |
| 1323 | partial_bytes_acked must be updated as well; it has to be reset to 0. |
| 1324 | |
| 1325 | 2.9.2. Text Changes to the Document |
| 1326 | |
| 1327 | --------- |
| 1328 | Old text: (Section 7.2.3) |
| 1329 | --------- |
| 1330 | |
| 1331 | 7.2.3 Congestion Control |
| 1332 | |
| 1333 | Upon detection of packet losses from SACK (see Section 7.2.4), An |
| 1334 | endpoint should do the following: |
| 1335 | |
| 1336 | ssthresh = max(cwnd/2, 2*MTU) |
| 1337 | cwnd = ssthresh |
| 1338 | |
| 1339 | Basically, a packet loss causes cwnd to be cut in half. |
| 1340 | |
| 1341 | When the T3-rtx timer expires on an address, SCTP should perform slow |
| 1342 | start by: |
| 1343 | |
| 1344 | |
| 1345 | |
| 1346 | Stewart, et al. Informational [Page 24] |
| 1347 | |
| 1348 | RFC 4460 SCTP Errata April 2006 |
| 1349 | |
| 1350 | |
| 1351 | ssthresh = max(cwnd/2, 2*MTU) |
| 1352 | cwnd = 1*MTU |
| 1353 | |
| 1354 | --------- |
| 1355 | New text: (Section 7.2.3) |
| 1356 | --------- |
| 1357 | |
| 1358 | 7.2.3. Congestion Control |
| 1359 | |
| 1360 | Upon detection of packet losses from SACK (see Section 7.2.4), an |
| 1361 | endpoint should do the following if not in Fast Recovery: |
| 1362 | |
| 1363 | ssthresh = max(cwnd/2, 2*MTU) |
| 1364 | cwnd = ssthresh |
| 1365 | partial_bytes_acked = 0 |
| 1366 | |
| 1367 | Basically, a packet loss causes cwnd to be cut in half. |
| 1368 | |
| 1369 | When the T3-rtx timer expires on an address, SCTP should perform slow |
| 1370 | start by |
| 1371 | |
| 1372 | ssthresh = max(cwnd/2, 2*MTU) |
| 1373 | cwnd = 1*MTU |
| 1374 | partial_bytes_acked = 0 |
| 1375 | |
| 1376 | 2.9.3. Solution Description |
| 1377 | |
| 1378 | The missing text added solves the doubts about what to do with |
| 1379 | partial_bytes_acked in the situations stated in Section 7.2.3, making |
| 1380 | clear that, along with ssthresh and cwnd, partial_bytes_acked should |
| 1381 | also be updated by being reset to 0. |
| 1382 | |
| 1383 | 2.10. Issues with Heartbeating and Failure Detection |
| 1384 | |
| 1385 | 2.10.1. Description of the Problem |
| 1386 | |
| 1387 | Five basic problems have been discovered with the current heartbeat |
| 1388 | procedures: |
| 1389 | |
| 1390 | o The current specification does not specify that you should count a |
| 1391 | failed heartbeat as an error against the overall association. |
| 1392 | |
| 1393 | o The current specification is not specific as to when you start |
| 1394 | sending heartbeats and when you should stop. |
| 1395 | |
| 1396 | o The current specification is not specific as to when you should |
| 1397 | respond to heartbeats. |
| 1398 | |
| 1399 | |
| 1400 | |
| 1401 | |
| 1402 | Stewart, et al. Informational [Page 25] |
| 1403 | |
| 1404 | RFC 4460 SCTP Errata April 2006 |
| 1405 | |
| 1406 | |
| 1407 | o When responding to a Heartbeat, it is unclear what to do if more |
| 1408 | than a single TLV is present. |
| 1409 | |
| 1410 | o The jitter applied to a heartbeat was meant to be a small variance |
| 1411 | of the RTO and is currently a wide variance, due to the default |
| 1412 | delay time and incorrect wording within the RFC. |
| 1413 | |
| 1414 | 2.10.2. Text Changes to the Document |
| 1415 | |
| 1416 | --------- |
| 1417 | Old text: (Section 8.1) |
| 1418 | --------- |
| 1419 | |
| 1420 | 8.1 Endpoint Failure Detection |
| 1421 | |
| 1422 | An endpoint shall keep a counter on the total number of consecutive |
| 1423 | retransmissions to its peer (including retransmissions to all the |
| 1424 | destination transport addresses of the peer if it is multi-homed). |
| 1425 | If the value of this counter exceeds the limit indicated in the |
| 1426 | protocol parameter 'Association.Max.Retrans', the endpoint shall |
| 1427 | consider the peer endpoint unreachable and shall stop transmitting |
| 1428 | any more data to it (and thus the association enters the CLOSED |
| 1429 | state). In addition, the endpoint shall report the failure to the |
| 1430 | upper layer, and optionally report back all outstanding user data |
| 1431 | remaining in its outbound queue. The association is automatically |
| 1432 | closed when the peer endpoint becomes unreachable. |
| 1433 | |
| 1434 | The counter shall be reset each time a DATA chunk sent to that peer |
| 1435 | endpoint is acknowledged (by the reception of a SACK), or a |
| 1436 | HEARTBEAT-ACK is received from the peer endpoint. |
| 1437 | |
| 1438 | |
| 1439 | |
| 1440 | |
| 1441 | |
| 1442 | |
| 1443 | |
| 1444 | |
| 1445 | |
| 1446 | |
| 1447 | |
| 1448 | |
| 1449 | |
| 1450 | |
| 1451 | |
| 1452 | |
| 1453 | |
| 1454 | |
| 1455 | |
| 1456 | |
| 1457 | |
| 1458 | Stewart, et al. Informational [Page 26] |
| 1459 | |
| 1460 | RFC 4460 SCTP Errata April 2006 |
| 1461 | |
| 1462 | |
| 1463 | --------- |
| 1464 | New text: (Section 8.1) |
| 1465 | --------- |
| 1466 | |
| 1467 | 8.1. Endpoint Failure Detection |
| 1468 | |
| 1469 | An endpoint shall keep a counter on the total number of consecutive |
| 1470 | retransmissions to its peer (this includes retransmissions to all the |
| 1471 | destination transport addresses of the peer if it is multi-homed), |
| 1472 | including unacknowledged HEARTBEAT Chunks. If the value of this |
| 1473 | counter exceeds the limit indicated in the protocol parameter |
| 1474 | 'Association.Max.Retrans', the endpoint shall consider the peer |
| 1475 | endpoint unreachable and shall stop transmitting any more data to it |
| 1476 | (and thus the association enters the CLOSED state). In addition, the |
| 1477 | endpoint MAY report the failure to the upper layer and optionally |
| 1478 | report back all outstanding user data remaining in its outbound |
| 1479 | queue. The association is automatically closed when the peer |
| 1480 | endpoint becomes unreachable. |
| 1481 | |
| 1482 | The counter shall be reset each time a DATA chunk sent to that peer |
| 1483 | endpoint is acknowledged (by the reception of a SACK), or a |
| 1484 | HEARTBEAT-ACK is received from the peer endpoint. |
| 1485 | |
| 1486 | |
| 1487 | --------- |
| 1488 | Old text: (Section 8.3) |
| 1489 | --------- |
| 1490 | |
| 1491 | 8.3 Path Heartbeat |
| 1492 | |
| 1493 | By default, an SCTP endpoint shall monitor the reachability of the |
| 1494 | idle destination transport address(es) of its peer by sending a |
| 1495 | HEARTBEAT chunk periodically to the destination transport |
| 1496 | address(es). |
| 1497 | |
| 1498 | --------- |
| 1499 | New text: (Section 8.3) |
| 1500 | --------- |
| 1501 | |
| 1502 | 8.3 Path Heartbeat |
| 1503 | |
| 1504 | By default, an SCTP endpoint SHOULD monitor the reachability of the |
| 1505 | idle destination transport address(es) of its peer by sending a |
| 1506 | HEARTBEAT chunk periodically to the destination transport |
| 1507 | address(es). HEARTBEAT sending MAY begin upon reaching the |
| 1508 | ESTABLISHED state and is discontinued after sending either SHUTDOWN |
| 1509 | or SHUTDOWN-ACK. A receiver of a HEARTBEAT MUST respond to a |
| 1510 | HEARTBEAT with a HEARTBEAT-ACK after entering the COOKIE-ECHOED state |
| 1511 | |
| 1512 | |
| 1513 | |
| 1514 | Stewart, et al. Informational [Page 27] |
| 1515 | |
| 1516 | RFC 4460 SCTP Errata April 2006 |
| 1517 | |
| 1518 | |
| 1519 | (INIT sender) or the ESTABLISHED state (INIT receiver), up until |
| 1520 | reaching the SHUTDOWN-SENT state (SHUTDOWN sender) or the SHUTDOWN- |
| 1521 | ACK-SENT state (SHUTDOWN receiver). |
| 1522 | |
| 1523 | |
| 1524 | --------- |
| 1525 | Old text: (Section 8.3) |
| 1526 | --------- |
| 1527 | |
| 1528 | The receiver of the HEARTBEAT should immediately respond with a |
| 1529 | HEARTBEAT ACK that contains the Heartbeat Information field copied |
| 1530 | from the received HEARTBEAT chunk. |
| 1531 | |
| 1532 | --------- |
| 1533 | New text: (Section 8.3) |
| 1534 | --------- |
| 1535 | |
| 1536 | The receiver of the HEARTBEAT should immediately respond with a |
| 1537 | HEARTBEAT ACK that contains the Heartbeat Information TLV, together |
| 1538 | with any other received TLVs, copied unchanged from the received |
| 1539 | HEARTBEAT chunk. |
| 1540 | |
| 1541 | |
| 1542 | --------- |
| 1543 | Old text: (Section 8.3) |
| 1544 | --------- |
| 1545 | |
| 1546 | On an idle destination address that is allowed to heartbeat, a |
| 1547 | HEARTBEAT chunk is RECOMMENDED to be sent once per RTO of that |
| 1548 | destination address plus the protocol parameter 'HB.interval' , with |
| 1549 | jittering of +/- 50%, and exponential back-off of the RTO if the |
| 1550 | previous HEARTBEAT is unanswered. |
| 1551 | |
| 1552 | --------- |
| 1553 | New text: (Section 8.3) |
| 1554 | --------- |
| 1555 | |
| 1556 | On an idle destination address that is allowed to heartbeat, it is |
| 1557 | recommended that a HEARTBEAT chunk is sent once per RTO of that |
| 1558 | destination address plus the protocol parameter 'HB.interval', with |
| 1559 | jittering of +/- 50% of the RTO value, and exponential back-off of |
| 1560 | the RTO if the previous HEARTBEAT is unanswered. |
| 1561 | |
| 1562 | 2.10.3. Solution Description |
| 1563 | |
| 1564 | The above text provides guidance as to how to respond to the five |
| 1565 | issues mentioned in Section 2.10.1. In particular, the wording |
| 1566 | changes provide guidance as to when to start and stop heartbeating, |
| 1567 | |
| 1568 | |
| 1569 | |
| 1570 | Stewart, et al. Informational [Page 28] |
| 1571 | |
| 1572 | RFC 4460 SCTP Errata April 2006 |
| 1573 | |
| 1574 | |
| 1575 | how to respond to a heartbeat with extra parameters, and it clarifies |
| 1576 | the error counting procedures for the association. |
| 1577 | |
| 1578 | 2.11. Security interactions with firewalls |
| 1579 | |
| 1580 | 2.11.1. Description of the Problem |
| 1581 | |
| 1582 | When dealing with firewalls, it is advantageous for the firewall to |
| 1583 | be able to properly determine the initial startup sequence of a |
| 1584 | reliable transport protocol. With this in mind, the following text |
| 1585 | is to be added to SCTP's security section. |
| 1586 | |
| 1587 | 2.11.2. Text Changes to the Document |
| 1588 | |
| 1589 | --------- |
| 1590 | New text: (no old text, new section added) |
| 1591 | --------- |
| 1592 | |
| 1593 | 11.4 SCTP Interactions with Firewalls |
| 1594 | |
| 1595 | It is helpful for some firewalls if they can inspect |
| 1596 | just the first fragment of a fragmented SCTP packet and unambiguously |
| 1597 | determine whether it corresponds to an INIT chunk (for further |
| 1598 | information, please refer to RFC1858). Accordingly, we |
| 1599 | stress the requirements, stated in 3.1, that (1) an INIT chunk MUST |
| 1600 | NOT be bundled with any other chunk in a packet, and (2) a packet |
| 1601 | containing an INIT chunk MUST have a zero Verification Tag. |
| 1602 | Furthermore, we require that the receiver of an INIT chunk MUST |
| 1603 | enforce these rules by silently discarding an arriving packet with an |
| 1604 | INIT chunk that is bundled with other chunks. |
| 1605 | |
| 1606 | --------- |
| 1607 | Old text: (Section 18) |
| 1608 | --------- |
| 1609 | |
| 1610 | 18. Bibliography |
| 1611 | |
| 1612 | [ALLMAN99] Allman, M. and Paxson, V., "On Estimating End-to-End |
| 1613 | Network Path Properties", Proc. SIGCOMM'99, 1999. |
| 1614 | |
| 1615 | [FALL96] Fall, K. and Floyd, S., Simulation-based Comparisons of |
| 1616 | Tahoe, Reno, and SACK TCP, Computer Communications Review, |
| 1617 | V. 26 N. 3, July 1996, pp. 5-21. |
| 1618 | |
| 1619 | [RFC1750] Eastlake, D. (ed.), "Randomness Recommendations for |
| 1620 | Security", RFC 1750, December 1994. |
| 1621 | |
| 1622 | |
| 1623 | |
| 1624 | |
| 1625 | |
| 1626 | Stewart, et al. Informational [Page 29] |
| 1627 | |
| 1628 | RFC 4460 SCTP Errata April 2006 |
| 1629 | |
| 1630 | |
| 1631 | [RFC1950] Deutsch P. and J. Gailly, "ZLIB Compressed Data Format |
| 1632 | Specification version 3.3", RFC 1950, May 1996. |
| 1633 | |
| 1634 | [RFC2104] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: Keyed- |
| 1635 | Hashing for Message Authentication", RFC 2104, March 1997. |
| 1636 | |
| 1637 | [RFC2196] Fraser, B., "Site Security Handbook", FYI 8, RFC 2196, |
| 1638 | September 1997. |
| 1639 | |
| 1640 | [RFC2522] Karn, P. and W. Simpson, "Photuris: Session-Key Management |
| 1641 | Protocol", RFC 2522, March 1999. |
| 1642 | |
| 1643 | [SAVAGE99] Savage, S., Cardwell, N., Wetherall, D., and Anderson, T., |
| 1644 | "TCP Congestion Control with a Misbehaving Receiver", ACM |
| 1645 | Computer Communication Review, 29(5), October 1999. |
| 1646 | |
| 1647 | --------- |
| 1648 | New text: (Section 18) |
| 1649 | --------- |
| 1650 | |
| 1651 | 18. Bibliography |
| 1652 | |
| 1653 | [ALLMAN99] Allman, M. and Paxson, V., "On Estimating End-to-End |
| 1654 | Network Path Properties", Proc. SIGCOMM'99, 1999. |
| 1655 | |
| 1656 | [FALL96] Fall, K. and Floyd, S., Simulation-based Comparisons of |
| 1657 | Tahoe, Reno, and SACK TCP, Computer Communications Review, |
| 1658 | V. 26 N. 3, July 1996, pp. 5-21. |
| 1659 | |
| 1660 | [RFC1750] Eastlake, D. (ed.), "Randomness Recommendations for |
| 1661 | Security", RFC 1750, December 1994. |
| 1662 | |
| 1663 | [RFC1858] Ziemba, G., Reed, D. and Traina P., "Security |
| 1664 | Considerations for IP Fragment Filtering", RFC 1858, |
| 1665 | October 1995. |
| 1666 | |
| 1667 | [RFC1950] Deutsch P. and J. Gailly, "ZLIB Compressed Data Format |
| 1668 | Specification version 3.3", RFC 1950, May 1996. |
| 1669 | |
| 1670 | [RFC2104] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: Keyed- |
| 1671 | Hashing for Message Authentication", RFC 2104, March 1997. |
| 1672 | |
| 1673 | [RFC2196] Fraser, B., "Site Security Handbook", FYI 8, RFC 2196, |
| 1674 | September 1997. |
| 1675 | |
| 1676 | [RFC2522] Karn, P. and W. Simpson, "Photuris: Session-Key Management |
| 1677 | Protocol", RFC 2522, March 1999. |
| 1678 | |
| 1679 | |
| 1680 | |
| 1681 | |
| 1682 | Stewart, et al. Informational [Page 30] |
| 1683 | |
| 1684 | RFC 4460 SCTP Errata April 2006 |
| 1685 | |
| 1686 | |
| 1687 | [SAVAGE99] Savage, S., Cardwell, N., Wetherall, D., and Anderson, T., |
| 1688 | "TCP Congestion Control with a Misbehaving Receiver", ACM |
| 1689 | Computer Communication Review, 29(5), October 1999. |
| 1690 | |
| 1691 | 2.11.3. Solution Description |
| 1692 | |
| 1693 | The above text, which adds a new subsection to the Security |
| 1694 | Considerations section of RFC 2960 [5] makes clear that, to make |
| 1695 | easier the interaction with firewalls, an INIT chunk must not be |
| 1696 | bundled in any case with any other chunk that will silently discard |
| 1697 | the packets that do not follow this rule (this rule is enforced by |
| 1698 | the packet receiver). |
| 1699 | |
| 1700 | 2.12. Shutdown Ambiguity |
| 1701 | |
| 1702 | 2.12.1. Description of the Problem |
| 1703 | |
| 1704 | Currently, there is an ambiguity between the statements in Sections |
| 1705 | 6.2 and 9.2. Section 6.2 allows the sending of a SHUTDOWN chunk in |
| 1706 | place of a SACK when the sender is in the process of shutting down, |
| 1707 | while section 9.2 requires that both a SHUTDOWN chunk and a SACK |
| 1708 | chunk be sent. |
| 1709 | |
| 1710 | Along with this ambiguity there is a problem wherein an errant |
| 1711 | SHUTDOWN receiver may fail to stop accepting user data. |
| 1712 | |
| 1713 | 2.12.2. Text Changes to the Document |
| 1714 | |
| 1715 | --------- |
| 1716 | Old text: (Section 9.2) |
| 1717 | --------- |
| 1718 | |
| 1719 | If there are still outstanding DATA chunks left, the SHUTDOWN |
| 1720 | receiver shall continue to follow normal data transmission procedures |
| 1721 | defined in Section 6 until all outstanding DATA chunks are |
| 1722 | acknowledged; however, the SHUTDOWN receiver MUST NOT accept new data |
| 1723 | from its SCTP user. |
| 1724 | |
| 1725 | While in SHUTDOWN-SENT state, the SHUTDOWN sender MUST immediately |
| 1726 | respond to each received packet containing one or more DATA chunk(s) |
| 1727 | with a SACK, a SHUTDOWN chunk, and restart the T2-shutdown timer. If |
| 1728 | it has no more outstanding DATA chunks, the SHUTDOWN receiver shall |
| 1729 | send a SHUTDOWN ACK and start a T2-shutdown timer of its own, |
| 1730 | entering the SHUTDOWN-ACK-SENT state. If the timer expires, the |
| 1731 | endpoint must re-send the SHUTDOWN ACK. |
| 1732 | |
| 1733 | |
| 1734 | |
| 1735 | |
| 1736 | |
| 1737 | |
| 1738 | Stewart, et al. Informational [Page 31] |
| 1739 | |
| 1740 | RFC 4460 SCTP Errata April 2006 |
| 1741 | |
| 1742 | |
| 1743 | --------- |
| 1744 | New text: (Section 9.2) |
| 1745 | --------- |
| 1746 | |
| 1747 | If there are still outstanding DATA chunks left, the SHUTDOWN |
| 1748 | receiver MUST continue to follow normal data transmission procedures |
| 1749 | defined in Section 6, until all outstanding DATA chunks are |
| 1750 | acknowledged; however, the SHUTDOWN receiver MUST NOT accept new data |
| 1751 | from its SCTP user. |
| 1752 | |
| 1753 | While in SHUTDOWN-SENT state, the SHUTDOWN sender MUST immediately |
| 1754 | respond to each received packet containing one or more DATA chunks |
| 1755 | with a SHUTDOWN chunk and restart the T2-shutdown timer. If a |
| 1756 | SHUTDOWN chunk by itself cannot acknowledge all of the received DATA |
| 1757 | chunks (i.e., there are TSNs that can be acknowledged that are larger |
| 1758 | than the cumulative TSN, and thus gaps exist in the TSN sequence), or |
| 1759 | if duplicate TSNs have been received, then a SACK chunk MUST also be |
| 1760 | sent. |
| 1761 | |
| 1762 | The sender of the SHUTDOWN MAY also start an overall guard timer |
| 1763 | 'T5-shutdown-guard' to bound the overall time for shutdown sequence. |
| 1764 | At the expiration of this timer, the sender SHOULD abort the |
| 1765 | association by sending an ABORT chunk. If the 'T5-shutdown-guard' |
| 1766 | timer is used, it SHOULD be set to the recommended value of 5 times |
| 1767 | 'RTO.Max'. |
| 1768 | |
| 1769 | If the receiver of the SHUTDOWN has no more outstanding DATA chunks, |
| 1770 | the SHUTDOWN receiver MUST send a SHUTDOWN ACK and start a |
| 1771 | T2-shutdown timer of its own, entering the SHUTDOWN-ACK-SENT state. |
| 1772 | If the timer expires, the endpoint must re-send the SHUTDOWN ACK. |
| 1773 | |
| 1774 | 2.12.3. Solution Description |
| 1775 | |
| 1776 | The above text clarifies the use of a SACK in conjunction with a |
| 1777 | SHUTDOWN chunk. It also adds a guard timer to the SCTP shutdown |
| 1778 | sequence to protect against errant receivers of SHUTDOWN chunks. |
| 1779 | |
| 1780 | 2.13. Inconsistency in ABORT Processing |
| 1781 | |
| 1782 | 2.13.1. Description of the Problem |
| 1783 | |
| 1784 | It was noted that the wording in Section 8.5.1 did not give proper |
| 1785 | directions in the use of the 'T bit' with the Verification Tags. |
| 1786 | |
| 1787 | |
| 1788 | |
| 1789 | |
| 1790 | |
| 1791 | |
| 1792 | |
| 1793 | |
| 1794 | Stewart, et al. Informational [Page 32] |
| 1795 | |
| 1796 | RFC 4460 SCTP Errata April 2006 |
| 1797 | |
| 1798 | |
| 1799 | 2.13.2. Text changes to the document |
| 1800 | |
| 1801 | --------- |
| 1802 | Old text: (Section 8.5.1) |
| 1803 | --------- |
| 1804 | |
| 1805 | B) Rules for packet carrying ABORT: |
| 1806 | |
| 1807 | - The endpoint shall always fill in the Verification Tag field |
| 1808 | of the outbound packet with the destination endpoint's tag |
| 1809 | value if it is known. |
| 1810 | |
| 1811 | - If the ABORT is sent in response to an OOTB packet, the |
| 1812 | endpoint MUST follow the procedure described in Section 8.4. |
| 1813 | |
| 1814 | - The receiver MUST accept the packet if the Verification Tag |
| 1815 | matches either its own tag, OR the tag of its peer. Otherwise, |
| 1816 | the receiver MUST silently discard the packet and take no |
| 1817 | further action. |
| 1818 | |
| 1819 | --------- |
| 1820 | New text: (Section 8.5.1) |
| 1821 | --------- |
| 1822 | |
| 1823 | B) Rules for packet carrying ABORT: |
| 1824 | |
| 1825 | - The endpoint MUST always fill in the Verification Tag field of |
| 1826 | the outbound packet with the destination endpoint's tag value, |
| 1827 | if it is known. |
| 1828 | |
| 1829 | - If the ABORT is sent in response to an OOTB packet, the |
| 1830 | endpoint MUST follow the procedure described in Section 8.4. |
| 1831 | |
| 1832 | - The receiver of a ABORT MUST accept the packet if the |
| 1833 | Verification Tag field of the packet matches its own tag OR if |
| 1834 | it is set to its peer's tag and the T bit is set in the Chunk |
| 1835 | Flags. Otherwise, the receiver MUST silently discard the |
| 1836 | packet and take no further action. |
| 1837 | |
| 1838 | 2.13.3. Solution Description |
| 1839 | |
| 1840 | The above text change clarifies that the T bit must be set before an |
| 1841 | implementation looks for the peer's tag. |
| 1842 | |
| 1843 | |
| 1844 | |
| 1845 | |
| 1846 | |
| 1847 | |
| 1848 | |
| 1849 | |
| 1850 | Stewart, et al. Informational [Page 33] |
| 1851 | |
| 1852 | RFC 4460 SCTP Errata April 2006 |
| 1853 | |
| 1854 | |
| 1855 | 2.14. Cwnd Gated by Its Full Use |
| 1856 | |
| 1857 | 2.14.1. Description of the Problem |
| 1858 | |
| 1859 | A problem was found with the current specification of the growth and |
| 1860 | decay of cwnd. The cwnd should only be increased if it is being |
| 1861 | fully utilized, and after periods of underutilization, the cwnd |
| 1862 | should be decreased. In some sections, the current wording is weak |
| 1863 | and is not clearly defined. Also, the current specification |
| 1864 | unnecessarily introduces the need for special case code to ensure |
| 1865 | cwnd degradation. Plus, the cwnd should not be increased during Fast |
| 1866 | Recovery, since a full cwnd during Fast Recovery does not qualify the |
| 1867 | cwnd as being fully utilized. Additionally, multiple loss scenarios |
| 1868 | in a single window may cause the cwnd to grow more rapidly as the |
| 1869 | number of losses in a window increases [3]. |
| 1870 | |
| 1871 | 2.14.2. Text Changes to the Document |
| 1872 | |
| 1873 | --------- |
| 1874 | Old text: (Section 6.1) |
| 1875 | --------- |
| 1876 | |
| 1877 | D) Then, the sender can send out as many new DATA chunks as Rule A |
| 1878 | and Rule B above allow. |
| 1879 | |
| 1880 | --------- |
| 1881 | New text: (Section 6.1) |
| 1882 | --------- |
| 1883 | |
| 1884 | D) When the time comes for the sender to transmit new DATA chunks, |
| 1885 | the protocol parameter Max.Burst SHOULD be used to limit the |
| 1886 | number of packets sent. The limit MAY be applied by adjusting |
| 1887 | cwnd as follows: |
| 1888 | |
| 1889 | if((flightsize + Max.Burst*MTU) < cwnd) |
| 1890 | cwnd = flightsize + Max.Burst*MTU |
| 1891 | |
| 1892 | Or it MAY be applied by strictly limiting the number of packets |
| 1893 | emitted by the output routine. |
| 1894 | |
| 1895 | E) Then, the sender can send out as many new DATA chunks as Rule A |
| 1896 | and Rule B allow. |
| 1897 | |
| 1898 | |
| 1899 | |
| 1900 | |
| 1901 | |
| 1902 | |
| 1903 | |
| 1904 | |
| 1905 | |
| 1906 | Stewart, et al. Informational [Page 34] |
| 1907 | |
| 1908 | RFC 4460 SCTP Errata April 2006 |
| 1909 | |
| 1910 | |
| 1911 | --------- |
| 1912 | Old text: (Section 7.2.1) |
| 1913 | --------- |
| 1914 | |
| 1915 | o When cwnd is less than or equal to ssthresh an SCTP endpoint MUST |
| 1916 | use the slow start algorithm to increase cwnd (assuming the |
| 1917 | current congestion window is being fully utilized). If an |
| 1918 | incoming SACK advances the Cumulative TSN Ack Point, cwnd MUST be |
| 1919 | increased by at most the lesser of 1) the total size of the |
| 1920 | previously outstanding DATA chunk(s) acknowledged, and 2) the |
| 1921 | destination's path MTU. This protects against the ACK-Splitting |
| 1922 | attack outlined in [SAVAGE99]. |
| 1923 | |
| 1924 | --------- |
| 1925 | New text: (Section 7.2.1) |
| 1926 | --------- |
| 1927 | |
| 1928 | o When cwnd is less than or equal to ssthresh, an SCTP endpoint MUST |
| 1929 | use the slow start algorithm to increase cwnd only if the current |
| 1930 | congestion window is being fully utilized, an incoming SACK |
| 1931 | advances the Cumulative TSN Ack Point, and the data sender is not |
| 1932 | in Fast Recovery. Only when these three conditions are met can |
| 1933 | the cwnd be increased; otherwise, the cwnd MUST not be increased. |
| 1934 | If these conditions are met, then cwnd MUST be increased by, at |
| 1935 | most, the lesser of 1) the total size of the previously |
| 1936 | outstanding DATA chunk(s) acknowledged, and 2) the destination's |
| 1937 | path MTU. This upper bound protects against the ACK-Splitting |
| 1938 | attack outlined in [SAVAGE99]. |
| 1939 | |
| 1940 | |
| 1941 | --------- |
| 1942 | Old text: (Section 14) |
| 1943 | --------- |
| 1944 | |
| 1945 | 14. Suggested SCTP Protocol Parameter Values |
| 1946 | |
| 1947 | The following protocol parameters are RECOMMENDED: |
| 1948 | |
| 1949 | RTO.Initial - 3 seconds |
| 1950 | RTO.Min - 1 second |
| 1951 | RTO.Max - 60 seconds |
| 1952 | RTO.Alpha - 1/8 |
| 1953 | RTO.Beta - 1/4 |
| 1954 | Valid.Cookie.Life - 60 seconds |
| 1955 | Association.Max.Retrans - 10 attempts |
| 1956 | Path.Max.Retrans - 5 attempts (per destination address) |
| 1957 | Max.Init.Retransmits - 8 attempts |
| 1958 | HB.interval - 30 seconds |
| 1959 | |
| 1960 | |
| 1961 | |
| 1962 | Stewart, et al. Informational [Page 35] |
| 1963 | |
| 1964 | RFC 4460 SCTP Errata April 2006 |
| 1965 | |
| 1966 | |
| 1967 | --------- |
| 1968 | New text: (Section 14) |
| 1969 | --------- |
| 1970 | |
| 1971 | 14. Suggested SCTP Protocol Parameter Values |
| 1972 | |
| 1973 | The following protocol parameters are RECOMMENDED: |
| 1974 | |
| 1975 | RTO.Initial - 3 seconds |
| 1976 | RTO.Min - 1 second |
| 1977 | RTO.Max - 60 seconds |
| 1978 | Max.Burst - 4 |
| 1979 | RTO.Alpha - 1/8 |
| 1980 | RTO.Beta - 1/4 |
| 1981 | Valid.Cookie.Life - 60 seconds |
| 1982 | Association.Max.Retrans - 10 attempts |
| 1983 | Path.Max.Retrans - 5 attempts (per destination address) |
| 1984 | Max.Init.Retransmits - 8 attempts |
| 1985 | HB.Interval - 30 seconds |
| 1986 | |
| 1987 | 2.14.3. Solution Description |
| 1988 | |
| 1989 | The above changes strengthen the rules and make it much more apparent |
| 1990 | as to the need to block cwnd growth when the full cwnd is not being |
| 1991 | utilized. The changes also apply cwnd degradation without |
| 1992 | introducing the need for complex special case code. |
| 1993 | |
| 1994 | 2.15. Window Probes in SCTP |
| 1995 | |
| 1996 | 2.15.1. Description of the Problem |
| 1997 | |
| 1998 | When a receiver clamps its rwnd to 0 to flow control the peer, the |
| 1999 | specification implies that one must continue to accept data from the |
| 2000 | remote peer. This is incorrect and needs clarification. |
| 2001 | |
| 2002 | 2.15.2. Text Changes to the Document |
| 2003 | |
| 2004 | --------- |
| 2005 | Old text: (Section 6.2) |
| 2006 | --------- |
| 2007 | |
| 2008 | The SCTP endpoint MUST always acknowledge the receipt of each valid |
| 2009 | DATA chunk. |
| 2010 | |
| 2011 | |
| 2012 | |
| 2013 | |
| 2014 | |
| 2015 | |
| 2016 | |
| 2017 | |
| 2018 | Stewart, et al. Informational [Page 36] |
| 2019 | |
| 2020 | RFC 4460 SCTP Errata April 2006 |
| 2021 | |
| 2022 | |
| 2023 | --------- |
| 2024 | New text: (Section 6.2) |
| 2025 | --------- |
| 2026 | |
| 2027 | The SCTP endpoint MUST always acknowledge the reception of each valid |
| 2028 | DATA chunk when the DATA chunk received is inside its receive window. |
| 2029 | |
| 2030 | When the receiver's advertised window is 0, the receiver MUST drop |
| 2031 | any new incoming DATA chunk with a TSN larger than the largest TSN |
| 2032 | received so far. If the new incoming DATA chunk holds a TSN value |
| 2033 | less than the largest TSN received so far, then the receiver SHOULD |
| 2034 | drop the largest TSN held for reordering and accept the new incoming |
| 2035 | DATA chunk. In either case, if such a DATA chunk is dropped, the |
| 2036 | receiver MUST immediately send back a SACK with the current receive |
| 2037 | window showing only DATA chunks received and accepted so far. The |
| 2038 | dropped DATA chunk(s) MUST NOT be included in the SACK, as they were |
| 2039 | not accepted. The receiver MUST also have an algorithm for |
| 2040 | advertising its receive window to avoid receiver silly window |
| 2041 | syndrome (SWS), as described in RFC 813. The algorithm can be |
| 2042 | similar to the one described in Section 4.2.3.3 of RFC 1122. |
| 2043 | |
| 2044 | |
| 2045 | --------- |
| 2046 | Old text: (Section 6.1) |
| 2047 | --------- |
| 2048 | |
| 2049 | A) At any given time, the data sender MUST NOT transmit new data to |
| 2050 | any destination transport address if its peer's rwnd indicates |
| 2051 | that the peer has no buffer space (i.e., rwnd is 0, see Section |
| 2052 | 6.2.1). However, regardless of the value of rwnd (including if it |
| 2053 | is 0), the data sender can always have one DATA chunk in flight to |
| 2054 | the receiver if allowed by cwnd (see rule B below). This rule |
| 2055 | allows the sender to probe for a change in rwnd that the sender |
| 2056 | missed due to the SACK having been lost in transit from the data |
| 2057 | receiver to the data sender. |
| 2058 | |
| 2059 | |
| 2060 | |
| 2061 | |
| 2062 | |
| 2063 | |
| 2064 | |
| 2065 | |
| 2066 | |
| 2067 | |
| 2068 | |
| 2069 | |
| 2070 | |
| 2071 | |
| 2072 | |
| 2073 | |
| 2074 | Stewart, et al. Informational [Page 37] |
| 2075 | |
| 2076 | RFC 4460 SCTP Errata April 2006 |
| 2077 | |
| 2078 | |
| 2079 | --------- |
| 2080 | New text: (Section 6.1) |
| 2081 | --------- |
| 2082 | |
| 2083 | A) At any given time, the data sender MUST NOT transmit new data to |
| 2084 | any destination transport address if its peer's rwnd indicates |
| 2085 | that the peer has no buffer space (i.e., rwnd is 0; see Section |
| 2086 | 6.2.1). However, regardless of the value of rwnd (including if it |
| 2087 | is 0), the data sender can always have one DATA chunk in flight to |
| 2088 | the receiver if allowed by cwnd (see rule B, below). This rule |
| 2089 | allows the sender to probe for a change in rwnd that the sender |
| 2090 | missed due to the SACK's having been lost in transit from the data |
| 2091 | receiver to the data sender. |
| 2092 | |
| 2093 | When the receiver's advertised window is zero, this probe is |
| 2094 | called a zero window probe. Note that a zero window probe |
| 2095 | SHOULD only be sent when all outstanding DATA chunks have |
| 2096 | been cumulatively acknowledged and no DATA chunks are in |
| 2097 | flight. Zero window probing MUST be supported. |
| 2098 | |
| 2099 | If the sender continues to receive new packets from the receiver |
| 2100 | while doing zero window probing, the unacknowledged window probes |
| 2101 | should not increment the error counter for the association or any |
| 2102 | destination transport address.This is because the receiver MAY |
| 2103 | keep its window closed for an indefinite time. Refer to |
| 2104 | Section 6.2 on the receiver behavior when it advertises a zero |
| 2105 | window. The sender SHOULD send the first zero window probe after |
| 2106 | 1 RTO when it detects that the receiver has closed its window |
| 2107 | and SHOULD increase the probe interval exponentially afterwards. |
| 2108 | Also note that the cwnd SHOULD be adjusted according to |
| 2109 | Section 7.2.1. Zero window probing does not affect the |
| 2110 | calculation of cwnd. |
| 2111 | |
| 2112 | The sender MUST also have an algorithm for sending new DATA chunks |
| 2113 | to avoid silly window syndrome (SWS) as described in RFC 813. The |
| 2114 | algorithm can be similar to the one described in Section 4.2.3.4 |
| 2115 | of RFC 1122. |
| 2116 | |
| 2117 | 2.15.3. Solution Description |
| 2118 | |
| 2119 | The above allows a receiver to drop new data that arrives and yet |
| 2120 | still requires the receiver to send a SACK showing the conditions |
| 2121 | unchanged (with the possible exception of a new a_rwnd) and the |
| 2122 | dropped chunk as missing. This will allow the association to |
| 2123 | continue until the rwnd condition clears. |
| 2124 | |
| 2125 | |
| 2126 | |
| 2127 | |
| 2128 | |
| 2129 | |
| 2130 | Stewart, et al. Informational [Page 38] |
| 2131 | |
| 2132 | RFC 4460 SCTP Errata April 2006 |
| 2133 | |
| 2134 | |
| 2135 | 2.16. Fragmentation and Path MTU Issues |
| 2136 | |
| 2137 | 2.16.1. Description of the Problem |
| 2138 | |
| 2139 | The current wording of the Fragmentation and Reassembly forces an |
| 2140 | implementation that supports fragmentation to always fragment. This |
| 2141 | prohibits an implementation from offering its users an option to |
| 2142 | disable sends that exceed the SCTP fragmentation point. |
| 2143 | |
| 2144 | The restriction in RFC 2960 [5], Section 6.9, was never meant to |
| 2145 | restrict an implementations API from this behavior. |
| 2146 | |
| 2147 | 2.16.2. Text Changes to the Document |
| 2148 | |
| 2149 | --------- |
| 2150 | Old text: (Section 6.1) |
| 2151 | --------- |
| 2152 | |
| 2153 | 6.9 Fragmentation and Reassembly |
| 2154 | |
| 2155 | An endpoint MAY support fragmentation when sending DATA chunks, but |
| 2156 | MUST support reassembly when receiving DATA chunks. If an endpoint |
| 2157 | supports fragmentation, it MUST fragment a user message if the size |
| 2158 | of the user message to be sent causes the outbound SCTP packet size |
| 2159 | to exceed the current MTU. If an implementation does not support |
| 2160 | fragmentation of outbound user messages, the endpoint must return an |
| 2161 | error to its upper layer and not attempt to send the user message. |
| 2162 | |
| 2163 | IMPLEMENTATION NOTE: In this error case, the Send primitive |
| 2164 | discussed in Section 10.1 would need to return an error to the upper |
| 2165 | layer. |
| 2166 | |
| 2167 | --------- |
| 2168 | New text: (Section 6.1) |
| 2169 | --------- |
| 2170 | |
| 2171 | 6.9. Fragmentation and Reassembly |
| 2172 | |
| 2173 | An endpoint MAY support fragmentation when sending DATA chunks, but |
| 2174 | it MUST support reassembly when receiving DATA chunks. If an |
| 2175 | endpoint supports fragmentation, it MUST fragment a user message if |
| 2176 | the size of the user message to be sent causes the outbound SCTP |
| 2177 | packet size to exceed the current MTU. If an implementation does not |
| 2178 | support fragmentation of outbound user messages, the endpoint MUST |
| 2179 | return an error to its upper layer and not attempt to send the user |
| 2180 | message. |
| 2181 | |
| 2182 | |
| 2183 | |
| 2184 | |
| 2185 | |
| 2186 | Stewart, et al. Informational [Page 39] |
| 2187 | |
| 2188 | RFC 4460 SCTP Errata April 2006 |
| 2189 | |
| 2190 | |
| 2191 | Note: If an implementation that supports fragmentation makes |
| 2192 | available to its upper layer a mechanism to turn off fragmentation it |
| 2193 | may do so. However, in so doing, it MUST react just like an |
| 2194 | implementation that does NOT support fragmentation, i.e., it MUST |
| 2195 | reject sends that exceed the current P-MTU. |
| 2196 | |
| 2197 | IMPLEMENTATION NOTE: In this error case, the Send primitive |
| 2198 | discussed in Section 10.1 would need to return an error to the upper |
| 2199 | layer. |
| 2200 | |
| 2201 | 2.16.3. Solution Description |
| 2202 | |
| 2203 | The above wording will allow an implementation to offer the option of |
| 2204 | rejecting sends that exceed the P-MTU size even when the |
| 2205 | implementation supports fragmentation. |
| 2206 | |
| 2207 | 2.17. Initial Value of the Cumulative TSN Ack |
| 2208 | |
| 2209 | 2.17.1. Description of the Problem |
| 2210 | |
| 2211 | The current description of the SACK chunk within the RFC does not |
| 2212 | clearly state the value that would be put within a SACK when no DATA |
| 2213 | chunk has been received. |
| 2214 | |
| 2215 | 2.17.2. Text Changes to the Document |
| 2216 | |
| 2217 | --------- |
| 2218 | Old text: (Section 3.3.4) |
| 2219 | --------- |
| 2220 | |
| 2221 | Cumulative TSN Ack: 32 bits (unsigned integer) |
| 2222 | |
| 2223 | This parameter contains the TSN of the last DATA chunk received in |
| 2224 | sequence before a gap. |
| 2225 | |
| 2226 | --------- |
| 2227 | New text: (Section 3.3.4) |
| 2228 | --------- |
| 2229 | |
| 2230 | Cumulative TSN Ack: 32 bits (unsigned integer) |
| 2231 | |
| 2232 | This parameter contains the TSN of the last DATA chunk received in |
| 2233 | sequence before a gap. In the case where no DATA chunk has |
| 2234 | been received, this value is set to the peer's Initial TSN minus |
| 2235 | one. |
| 2236 | |
| 2237 | |
| 2238 | |
| 2239 | |
| 2240 | |
| 2241 | |
| 2242 | Stewart, et al. Informational [Page 40] |
| 2243 | |
| 2244 | RFC 4460 SCTP Errata April 2006 |
| 2245 | |
| 2246 | |
| 2247 | 2.17.3. Solution Description |
| 2248 | |
| 2249 | This change clearly states what the initial value will be for a SACK |
| 2250 | sender. |
| 2251 | |
| 2252 | 2.18. Handling of Address Parameters within the INIT or INIT-ACK |
| 2253 | |
| 2254 | 2.18.1. Description of the Problem |
| 2255 | |
| 2256 | The current description on handling address parameters contained |
| 2257 | within the INIT and INIT-ACK does not fully describe a requirement |
| 2258 | for their handling. |
| 2259 | |
| 2260 | 2.18.2. Text Changes to the Document |
| 2261 | |
| 2262 | --------- |
| 2263 | Old text: (Section 5.1.2) |
| 2264 | --------- |
| 2265 | |
| 2266 | C) If there are only IPv4/IPv6 addresses present in the received INIT |
| 2267 | or INIT ACK chunk, the receiver shall derive and record all the |
| 2268 | transport address(es) from the received chunk AND the source IP |
| 2269 | address that sent the INIT or INIT ACK. The transport address(es) |
| 2270 | are derived by the combination of SCTP source port (from the |
| 2271 | common header) and the IP address parameter(s) carried in the INIT |
| 2272 | or INIT ACK chunk and the source IP address of the IP datagram. |
| 2273 | The receiver should use only these transport addresses as |
| 2274 | destination transport addresses when sending subsequent packets to |
| 2275 | its peer. |
| 2276 | |
| 2277 | --------- |
| 2278 | New text: (Section 5.1.2) |
| 2279 | --------- |
| 2280 | |
| 2281 | C) If there are only IPv4/IPv6 addresses present in the received INIT |
| 2282 | or INIT ACK chunk, the receiver MUST derive and record all the |
| 2283 | transport addresses from the received chunk AND the source IP |
| 2284 | address that sent the INIT or INIT ACK. The transport addresses |
| 2285 | are derived by the combination of SCTP source port (from the |
| 2286 | common header) and the IP address parameter(s) carried in the INIT |
| 2287 | or INIT ACK chunk and the source IP address of the IP datagram. |
| 2288 | The receiver should use only these transport addresses as |
| 2289 | destination transport addresses when sending subsequent packets to |
| 2290 | its peer. |
| 2291 | |
| 2292 | |
| 2293 | |
| 2294 | |
| 2295 | |
| 2296 | |
| 2297 | |
| 2298 | Stewart, et al. Informational [Page 41] |
| 2299 | |
| 2300 | RFC 4460 SCTP Errata April 2006 |
| 2301 | |
| 2302 | |
| 2303 | D) An INIT or INIT ACK chunk MUST be treated as belonging |
| 2304 | to an already established association (or one in the |
| 2305 | process of being established) if the use of any of the |
| 2306 | valid address parameters contained within the chunk |
| 2307 | would identify an existing TCB. |
| 2308 | |
| 2309 | 2.18.3. Solution description |
| 2310 | |
| 2311 | This new text clearly specifies to an implementor the need to look |
| 2312 | within the INIT or INIT ACK. Any implementation that does not do |
| 2313 | this may (for example) not be able to recognize an INIT chunk coming |
| 2314 | from an already established association that adds new addresses (see |
| 2315 | Section 2.6) or an incoming INIT ACK chunk sent from a source address |
| 2316 | different from the destination address used to send the INIT chunk. |
| 2317 | |
| 2318 | 2.19. Handling of Stream Shortages |
| 2319 | |
| 2320 | 2.19.1. Description of the Problem |
| 2321 | |
| 2322 | The current wording in the RFC places the choice of sending an ABORT |
| 2323 | upon the SCTP stack when a stream shortage occurs. This decision |
| 2324 | should really be made by the upper layer, not the SCTP stack. |
| 2325 | |
| 2326 | 2.19.2. Text Changes to the Document |
| 2327 | |
| 2328 | --------- |
| 2329 | Old text: |
| 2330 | --------- |
| 2331 | |
| 2332 | 5.1.1 Handle Stream Parameters |
| 2333 | |
| 2334 | In the INIT and INIT ACK chunks, the sender of the chunk shall |
| 2335 | indicate the number of outbound streams (OS) it wishes to have in |
| 2336 | the association, as well as the maximum inbound streams (MIS) it |
| 2337 | will accept from the other endpoint. |
| 2338 | |
| 2339 | After receiving the stream configuration information from the other |
| 2340 | side, each endpoint shall perform the following check: If the peer's |
| 2341 | MIS is less than the endpoint's OS, meaning that the peer is |
| 2342 | incapable of supporting all the outbound streams the endpoint wants |
| 2343 | to configure, the endpoint MUST either use MIS outbound streams, or |
| 2344 | abort the association and report to its upper layer the resources |
| 2345 | shortage at its peer. |
| 2346 | |
| 2347 | |
| 2348 | |
| 2349 | |
| 2350 | |
| 2351 | |
| 2352 | |
| 2353 | |
| 2354 | Stewart, et al. Informational [Page 42] |
| 2355 | |
| 2356 | RFC 4460 SCTP Errata April 2006 |
| 2357 | |
| 2358 | |
| 2359 | --------- |
| 2360 | New text: (Section 5.1.2) |
| 2361 | --------- |
| 2362 | |
| 2363 | 5.1.1. Handle Stream Parameters |
| 2364 | |
| 2365 | In the INIT and INIT ACK chunks, the sender of the chunk MUST |
| 2366 | indicate the number of outbound streams (OS) it wishes to have in |
| 2367 | the association, as well as the maximum inbound streams (MIS) it will |
| 2368 | accept from the other endpoint. |
| 2369 | |
| 2370 | After receiving the stream configuration information from the other |
| 2371 | side, each endpoint MUST perform the following check: If the peer's |
| 2372 | MIS is less than the endpoint's OS, meaning that the peer is |
| 2373 | incapable of supporting all the outbound streams the endpoint wants |
| 2374 | to configure, the endpoint MUST use MIS outbound streams and MAY |
| 2375 | report any shortage to the upper layer. The upper layer can then |
| 2376 | choose to abort the association if the resource shortage |
| 2377 | is unacceptable. |
| 2378 | |
| 2379 | 2.19.3. Solution Description |
| 2380 | |
| 2381 | The above changes take the decision to ABORT out of the realm of the |
| 2382 | SCTP stack and place it into the user's hands. |
| 2383 | |
| 2384 | 2.20. Indefinite Postponement |
| 2385 | |
| 2386 | 2.20.1. Description of the Problem |
| 2387 | |
| 2388 | The current RFC does not provide any guidance on the assignment of |
| 2389 | TSN sequence numbers to outbound messages nor reception of these |
| 2390 | messages. This could lead to a possible indefinite postponement. |
| 2391 | |
| 2392 | 2.20.2. Text Changes to the Document |
| 2393 | |
| 2394 | --------- |
| 2395 | Old text: (Section 6.1) |
| 2396 | --------- |
| 2397 | |
| 2398 | Note: The data sender SHOULD NOT use a TSN that is more than 2**31 - |
| 2399 | 1 above the beginning TSN of the current send window. |
| 2400 | |
| 2401 | 6.2 Acknowledgement on Reception of DATA Chunks |
| 2402 | |
| 2403 | |
| 2404 | |
| 2405 | |
| 2406 | |
| 2407 | |
| 2408 | |
| 2409 | |
| 2410 | Stewart, et al. Informational [Page 43] |
| 2411 | |
| 2412 | RFC 4460 SCTP Errata April 2006 |
| 2413 | |
| 2414 | |
| 2415 | --------- |
| 2416 | New text: (Section 6.1) |
| 2417 | --------- |
| 2418 | |
| 2419 | Note: The data sender SHOULD NOT use a TSN that is more than 2**31 - |
| 2420 | 1 above the beginning TSN of the current send window. |
| 2421 | |
| 2422 | The algorithm by which an implementation assigns sequential TSNs to |
| 2423 | messages on a particular association MUST ensure that no user |
| 2424 | message that has been accepted by SCTP is indefinitely postponed |
| 2425 | from being assigned a TSN. Acceptable algorithms for assigning TSNs |
| 2426 | include |
| 2427 | |
| 2428 | (a) assigning TSNs in round-robin order over all streams with |
| 2429 | pending data; and |
| 2430 | |
| 2431 | (b) preserving the linear order in which the user messages were |
| 2432 | submitted to the SCTP association. |
| 2433 | |
| 2434 | When an upper layer requests to read data on an SCTP association, |
| 2435 | the SCTP receiver SHOULD choose the message with the lowest TSN from |
| 2436 | among all deliverable messages. In SCTP implementations that allow a |
| 2437 | user to request data on a specific stream, this operation SHOULD NOT |
| 2438 | block if data is not available, since this can lead to a deadlock |
| 2439 | under certain conditions. |
| 2440 | |
| 2441 | 6.2. Acknowledgement on Receipt of DATA Chunks |
| 2442 | |
| 2443 | 2.20.3. Solution Description |
| 2444 | |
| 2445 | The above wording clarifies how TSNs SHOULD be assigned by the |
| 2446 | sender. |
| 2447 | |
| 2448 | 2.21. User-Initiated Abort of an Association |
| 2449 | |
| 2450 | 2.21.1. Description of the Problem |
| 2451 | |
| 2452 | It is not possible for an upper layer to abort the association and |
| 2453 | provide the peer with an indication of why the association is |
| 2454 | aborted. |
| 2455 | |
| 2456 | 2.21.2. Text changes to the document |
| 2457 | |
| 2458 | Some of the changes given here already include changes suggested in |
| 2459 | Section 2.6 of this document. |
| 2460 | |
| 2461 | |
| 2462 | |
| 2463 | |
| 2464 | |
| 2465 | |
| 2466 | Stewart, et al. Informational [Page 44] |
| 2467 | |
| 2468 | RFC 4460 SCTP Errata April 2006 |
| 2469 | |
| 2470 | |
| 2471 | --------- |
| 2472 | Old text: (Section 3.3.10) |
| 2473 | --------- |
| 2474 | |
| 2475 | Cause Code |
| 2476 | Value Cause Code |
| 2477 | --------- ---------------- |
| 2478 | 1 Invalid Stream Identifier |
| 2479 | 2 Missing Mandatory Parameter |
| 2480 | 3 Stale Cookie Error |
| 2481 | 4 Out of Resource |
| 2482 | 5 Unresolvable Address |
| 2483 | 6 Unrecognized Chunk Type |
| 2484 | 7 Invalid Mandatory Parameter |
| 2485 | 8 Unrecognized Parameters |
| 2486 | 9 No User Data |
| 2487 | 10 Cookie Received While Shutting Down |
| 2488 | |
| 2489 | Cause Length: 16 bits (unsigned integer) |
| 2490 | |
| 2491 | Set to the size of the parameter in bytes, including the Cause |
| 2492 | Code, Cause Length, and Cause-Specific Information fields |
| 2493 | |
| 2494 | Cause-specific Information: variable length |
| 2495 | |
| 2496 | This field carries the details of the error condition. |
| 2497 | |
| 2498 | Sections 3.3.10.1 - 3.3.10.10 define error causes for SCTP. |
| 2499 | Guidelines for the IETF to define new error cause values are |
| 2500 | discussed in Section 13.3. |
| 2501 | |
| 2502 | |
| 2503 | |
| 2504 | |
| 2505 | |
| 2506 | |
| 2507 | |
| 2508 | |
| 2509 | |
| 2510 | |
| 2511 | |
| 2512 | |
| 2513 | |
| 2514 | |
| 2515 | |
| 2516 | |
| 2517 | |
| 2518 | |
| 2519 | |
| 2520 | |
| 2521 | |
| 2522 | Stewart, et al. Informational [Page 45] |
| 2523 | |
| 2524 | RFC 4460 SCTP Errata April 2006 |
| 2525 | |
| 2526 | |
| 2527 | --------- |
| 2528 | New text: (Section 3.3.10) |
| 2529 | --------- |
| 2530 | |
| 2531 | Cause Code |
| 2532 | Value Cause Code |
| 2533 | --------- ---------------- |
| 2534 | 1 Invalid Stream Identifier |
| 2535 | 2 Missing Mandatory Parameter |
| 2536 | 3 Stale Cookie Error |
| 2537 | 4 Out of Resource |
| 2538 | 5 Unresolvable Address |
| 2539 | 6 Unrecognized Chunk Type |
| 2540 | 7 Invalid Mandatory Parameter |
| 2541 | 8 Unrecognized Parameters |
| 2542 | 9 No User Data |
| 2543 | 10 Cookie Received While Shutting Down |
| 2544 | 11 Restart of an Association with New Addresses |
| 2545 | 12 User-Initiated Abort |
| 2546 | |
| 2547 | Cause Length: 16 bits (unsigned integer) |
| 2548 | |
| 2549 | Set to the size of the parameter in bytes, including the Cause |
| 2550 | Code, Cause Length, and Cause-Specific Information fields |
| 2551 | |
| 2552 | Cause-specific Information: variable length |
| 2553 | |
| 2554 | This field carries the details of the error condition. |
| 2555 | |
| 2556 | Sections 3.3.10.1 - 3.3.10.12 define error causes for SCTP. |
| 2557 | Guidelines for the IETF to define new error cause values are |
| 2558 | discussed in Section 13.3. |
| 2559 | |
| 2560 | --------- |
| 2561 | New text: (Note: no old text, new error added in Section 3.3.10) |
| 2562 | --------- |
| 2563 | |
| 2564 | 3.3.10.12. User-Initiated Abort (12) |
| 2565 | |
| 2566 | Cause of error |
| 2567 | -------------- |
| 2568 | |
| 2569 | This error cause MAY be included in ABORT chunks that are sent |
| 2570 | because of an upper layer request. The upper layer can specify |
| 2571 | an Upper Layer Abort Reason that is transported by SCTP |
| 2572 | transparently and MAY be delivered to the upper layer protocol |
| 2573 | at the peer. |
| 2574 | |
| 2575 | |
| 2576 | |
| 2577 | |
| 2578 | Stewart, et al. Informational [Page 46] |
| 2579 | |
| 2580 | RFC 4460 SCTP Errata April 2006 |
| 2581 | |
| 2582 | |
| 2583 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 2584 | | Cause Code=12 | Cause Length=Variable | |
| 2585 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 2586 | / Upper Layer Abort Reason / |
| 2587 | \ \ |
| 2588 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 2589 | |
| 2590 | --------- |
| 2591 | Old text: (Section 9.1) |
| 2592 | --------- |
| 2593 | |
| 2594 | 9.1 Abort of an Association |
| 2595 | |
| 2596 | When an endpoint decides to abort an existing association, it |
| 2597 | shall send an ABORT chunk to its peer endpoint. The sender MUST |
| 2598 | fill in the peer's Verification Tag in the outbound packet and |
| 2599 | MUST NOT bundle any DATA chunk with the ABORT. |
| 2600 | |
| 2601 | An endpoint MUST NOT respond to any received packet that contains |
| 2602 | an ABORT chunk (also see Section 8.4). |
| 2603 | |
| 2604 | An endpoint receiving an ABORT shall apply the special |
| 2605 | Verification Tag check rules described in Section 8.5.1. |
| 2606 | |
| 2607 | After checking the Verification Tag, the receiving endpoint shall |
| 2608 | remove the association from its record and shall report the |
| 2609 | termination to its upper layer. |
| 2610 | |
| 2611 | --------- |
| 2612 | New text: (Section 9.1) |
| 2613 | --------- |
| 2614 | |
| 2615 | 9.1. Abort of an Association |
| 2616 | |
| 2617 | When an endpoint decides to abort an existing association, it MUST |
| 2618 | send an ABORT chunk to its peer endpoint. The sender MUST fill in |
| 2619 | the peer's Verification Tag in the outbound packet and MUST NOT |
| 2620 | bundle any DATA chunk with the ABORT. If the association is |
| 2621 | aborted on request of the upper layer, a User-Initiated Abort |
| 2622 | error cause (see 3.3.10.12) SHOULD be present in the ABORT chunk. |
| 2623 | |
| 2624 | An endpoint MUST NOT respond to any received packet that contains |
| 2625 | an ABORT chunk (also see Section 8.4). |
| 2626 | |
| 2627 | An endpoint receiving an ABORT MUST apply the special Verification |
| 2628 | Tag check rules described in Section 8.5.1. |
| 2629 | |
| 2630 | After checking the Verification Tag, the receiving endpoint MUST |
| 2631 | |
| 2632 | |
| 2633 | |
| 2634 | Stewart, et al. Informational [Page 47] |
| 2635 | |
| 2636 | RFC 4460 SCTP Errata April 2006 |
| 2637 | |
| 2638 | |
| 2639 | remove the association from its record and SHOULD report the |
| 2640 | termination to its upper layer. If a User-Initiated Abort error |
| 2641 | cause is present in the ABORT chunk, the Upper Layer Abort Reason |
| 2642 | SHOULD be made available to the upper layer. |
| 2643 | |
| 2644 | --------- |
| 2645 | Old text: (Section 10.1) |
| 2646 | --------- |
| 2647 | |
| 2648 | D) Abort |
| 2649 | |
| 2650 | Format: ABORT(association id [, cause code]) |
| 2651 | -> result |
| 2652 | |
| 2653 | Ungracefully closes an association. Any locally queued user |
| 2654 | data will be discarded and an ABORT chunk is sent to the peer. |
| 2655 | A success code will be returned on successful abortion of the |
| 2656 | association. If attempting to abort the association results |
| 2657 | in a failure, an error code shall be returned. |
| 2658 | |
| 2659 | Mandatory attributes: |
| 2660 | |
| 2661 | o association id - local handle to the SCTP association |
| 2662 | |
| 2663 | Optional attributes: |
| 2664 | |
| 2665 | o cause code - reason of the abort to be passed to the peer. |
| 2666 | |
| 2667 | |
| 2668 | --------- |
| 2669 | New text: (Section 10.1) |
| 2670 | --------- |
| 2671 | |
| 2672 | D) Abort |
| 2673 | |
| 2674 | Format: ABORT(association id [, Upper Layer Abort Reason]) |
| 2675 | -> result |
| 2676 | |
| 2677 | Ungracefully closes an association. Any locally queued user |
| 2678 | data will be discarded, and an ABORT chunk is sent to the peer. |
| 2679 | A success code will be returned on successful abortion of the |
| 2680 | association. If attempting to abort the association results |
| 2681 | in a failure, an error code shall be returned. |
| 2682 | |
| 2683 | Mandatory attributes: |
| 2684 | |
| 2685 | o association id - Local handle to the SCTP association. |
| 2686 | |
| 2687 | |
| 2688 | |
| 2689 | |
| 2690 | Stewart, et al. Informational [Page 48] |
| 2691 | |
| 2692 | RFC 4460 SCTP Errata April 2006 |
| 2693 | |
| 2694 | |
| 2695 | Optional attributes: |
| 2696 | |
| 2697 | o Upper Layer Abort Reason - Reason of the abort to be passed |
| 2698 | to the peer. |
| 2699 | |
| 2700 | None. |
| 2701 | |
| 2702 | --------- |
| 2703 | Old text: (Section 10.2) |
| 2704 | --------- |
| 2705 | |
| 2706 | E) COMMUNICATION LOST notification |
| 2707 | |
| 2708 | When SCTP loses communication to an endpoint completely (e.g., via |
| 2709 | Heartbeats) or detects that the endpoint has performed an abort |
| 2710 | operation, it shall invoke this notification on the ULP. |
| 2711 | |
| 2712 | The following shall be passed with the notification: |
| 2713 | |
| 2714 | o association id - local handle to the SCTP association |
| 2715 | |
| 2716 | o status - This indicates what type of event has occurred; The |
| 2717 | status may indicate a failure OR a normal termination |
| 2718 | event occurred in response to a shutdown or abort |
| 2719 | request. |
| 2720 | |
| 2721 | The following may be passed with the notification: |
| 2722 | |
| 2723 | o data retrieval id - an identification used to retrieve |
| 2724 | unsent and unacknowledged data. |
| 2725 | |
| 2726 | o last-acked - the TSN last acked by that peer endpoint; |
| 2727 | |
| 2728 | o last-sent - the TSN last sent to that peer endpoint; |
| 2729 | |
| 2730 | --------- |
| 2731 | New text: (Section 10.2) |
| 2732 | --------- |
| 2733 | |
| 2734 | E) COMMUNICATION LOST notification |
| 2735 | |
| 2736 | When SCTP loses communication to an endpoint completely (e.g., via |
| 2737 | Heartbeats) or detects that the endpoint has performed an abort |
| 2738 | operation, it shall invoke this notification on the ULP. |
| 2739 | |
| 2740 | The following shall be passed with the notification: |
| 2741 | |
| 2742 | o association id - Local handle to the SCTP association. |
| 2743 | |
| 2744 | |
| 2745 | |
| 2746 | Stewart, et al. Informational [Page 49] |
| 2747 | |
| 2748 | RFC 4460 SCTP Errata April 2006 |
| 2749 | |
| 2750 | |
| 2751 | o status - This indicates what type of event has occurred; The |
| 2752 | status may indicate that a failure OR a normal |
| 2753 | termination event occurred in response to a shutdown |
| 2754 | or abort request. |
| 2755 | |
| 2756 | The following may be passed with the notification: |
| 2757 | |
| 2758 | o data retrieval id - An identification used to retrieve unsent |
| 2759 | and unacknowledged data. |
| 2760 | |
| 2761 | o last-acked - The TSN last acked by that peer endpoint. |
| 2762 | |
| 2763 | o last-sent - The TSN last sent to that peer endpoint. |
| 2764 | |
| 2765 | o Upper Layer Abort Reason - The abort reason specified in |
| 2766 | case of a user-initiated abort. |
| 2767 | |
| 2768 | 2.21.3. Solution Description |
| 2769 | |
| 2770 | The above allows an upper layer to provide its peer with an |
| 2771 | indication of why the association was aborted. Therefore, an |
| 2772 | addition error cause was introduced. |
| 2773 | |
| 2774 | 2.22. Handling of Invalid Initiate Tag of INIT-ACK |
| 2775 | |
| 2776 | 2.22.1. Description of the Problem |
| 2777 | |
| 2778 | RFC 2960 requires that the receiver of an INIT-ACK with the Initiate |
| 2779 | Tag set to zero handles this as an error and sends back an ABORT. |
| 2780 | But the sender of the INIT-ACK normally has no TCB, and thus the |
| 2781 | ABORT is useless. |
| 2782 | |
| 2783 | 2.22.2. Text Changes to the Document |
| 2784 | |
| 2785 | --------- |
| 2786 | Old text: (Section 3.3.3) |
| 2787 | --------- |
| 2788 | |
| 2789 | Initiate Tag: 32 bits (unsigned integer) |
| 2790 | |
| 2791 | The receiver of the INIT ACK records the value of the |
| 2792 | Initiate Tag parameter. This value MUST be placed into |
| 2793 | the Verification Tag field of every SCTP packet that the |
| 2794 | INIT ACK receiver transmits within this association. |
| 2795 | |
| 2796 | The Initiate Tag MUST NOT take the value 0. See Section 5.3.1 |
| 2797 | for more on the selection of the Initiate Tag value. |
| 2798 | |
| 2799 | |
| 2800 | |
| 2801 | |
| 2802 | Stewart, et al. Informational [Page 50] |
| 2803 | |
| 2804 | RFC 4460 SCTP Errata April 2006 |
| 2805 | |
| 2806 | |
| 2807 | If the value of the Initiate Tag in a received INIT ACK chunk |
| 2808 | is found to be 0, the receiver MUST treat it as an error and |
| 2809 | close the association by transmitting an ABORT. |
| 2810 | |
| 2811 | --------- |
| 2812 | New text: (Section 3.3.3) |
| 2813 | --------- |
| 2814 | |
| 2815 | Initiate Tag: 32 bits (unsigned integer) |
| 2816 | |
| 2817 | The receiver of the INIT ACK records the value of the |
| 2818 | Initiate Tag parameter. This value MUST be placed into |
| 2819 | the Verification Tag field of every SCTP packet that the |
| 2820 | INIT ACK receiver transmits within this association. |
| 2821 | |
| 2822 | The Initiate Tag MUST NOT take the value 0. See Section 5.3.1 |
| 2823 | for more on the selection of the Initiate Tag value. |
| 2824 | |
| 2825 | If the value of the Initiate Tag in a received INIT ACK |
| 2826 | chunk is found to be 0, the receiver MUST destroy the |
| 2827 | association discarding its TCB. The receiver MAY send an |
| 2828 | ABORT for debugging purpose. |
| 2829 | |
| 2830 | 2.22.3. Solution Description |
| 2831 | |
| 2832 | The new text does not require that the receiver of the invalid INIT- |
| 2833 | ACK send the ABORT. This behavior is in tune with the error case of |
| 2834 | invalid stream numbers in the INIT-ACK. However, sending an ABORT |
| 2835 | for debugging purposes is allowed. |
| 2836 | |
| 2837 | 2.23. Sending an ABORT in Response to an INIT |
| 2838 | |
| 2839 | 2.23.1. Description of the Problem |
| 2840 | |
| 2841 | Whenever the receiver of an INIT chunk has to send an ABORT chunk in |
| 2842 | response, for whatever reason, it is not stated clearly which |
| 2843 | Verification Tag and value of the T-bit should be used. |
| 2844 | |
| 2845 | 2.23.2. Text Changes to the Document |
| 2846 | |
| 2847 | --------- |
| 2848 | Old text: (Section 8.4) |
| 2849 | --------- |
| 2850 | |
| 2851 | 3) If the packet contains an INIT chunk with a Verification Tag |
| 2852 | set to '0', process it as described in Section 5.1. |
| 2853 | Otherwise, |
| 2854 | |
| 2855 | |
| 2856 | |
| 2857 | |
| 2858 | Stewart, et al. Informational [Page 51] |
| 2859 | |
| 2860 | RFC 4460 SCTP Errata April 2006 |
| 2861 | |
| 2862 | |
| 2863 | --------- |
| 2864 | New text: (Section 8.4) |
| 2865 | --------- |
| 2866 | |
| 2867 | 3) If the packet contains an INIT chunk with a Verification Tag |
| 2868 | set to '0', process it as described in Section 5.1. If, for |
| 2869 | whatever reason, the INIT cannot be processed normally and |
| 2870 | an ABORT has to be sent in response, the Verification Tag |
| 2871 | of the packet containing the ABORT chunk MUST be the |
| 2872 | Initiate tag of the received INIT chunk, and the T-Bit of |
| 2873 | the ABORT chunk has to be set to 0, indicating that |
| 2874 | a TCB was destroyed. Otherwise, |
| 2875 | |
| 2876 | 2.23.3. Solution Description |
| 2877 | |
| 2878 | The new text stated clearly which value of the Verification Tag and |
| 2879 | T-bit have to be used. |
| 2880 | |
| 2881 | 2.24. Stream Sequence Number (SSN) Initialization |
| 2882 | |
| 2883 | 2.24.1. Description of the Problem |
| 2884 | |
| 2885 | RFC 2960 does not describe the fact that the SSN has to be |
| 2886 | initialized to 0, as required by RFC 2119. |
| 2887 | |
| 2888 | 2.24.2. Text Changes to the Document |
| 2889 | |
| 2890 | --------- |
| 2891 | Old text: (Section 6.5) |
| 2892 | --------- |
| 2893 | |
| 2894 | The stream sequence number in all the streams shall start from 0 |
| 2895 | when the association is established. Also, when the stream |
| 2896 | sequence number reaches the value 65535 the next stream sequence |
| 2897 | number shall be set to 0. |
| 2898 | |
| 2899 | --------- |
| 2900 | New text: (Section 6.5) |
| 2901 | --------- |
| 2902 | |
| 2903 | The stream sequence number in all the streams MUST start from 0 |
| 2904 | when the association is established. Also, when the stream |
| 2905 | sequence number reaches the value 65535 the next stream sequence |
| 2906 | number MUST be set to 0. |
| 2907 | |
| 2908 | |
| 2909 | |
| 2910 | |
| 2911 | |
| 2912 | |
| 2913 | |
| 2914 | Stewart, et al. Informational [Page 52] |
| 2915 | |
| 2916 | RFC 4460 SCTP Errata April 2006 |
| 2917 | |
| 2918 | |
| 2919 | 2.24.3. Solution Description |
| 2920 | |
| 2921 | The 'shall' in the text is replaced by a 'MUST' to clearly state the |
| 2922 | required behavior. |
| 2923 | |
| 2924 | 2.25. SACK Packet Format |
| 2925 | |
| 2926 | 2.25.1. Description of the Problem |
| 2927 | |
| 2928 | It is not clear in RFC 2960 whether a SACK must contain the fields |
| 2929 | Number of Gap Ack Blocks and Number of Duplicate TSNs. |
| 2930 | |
| 2931 | 2.25.2. Text Changes to the Document |
| 2932 | |
| 2933 | --------- |
| 2934 | Old text: (Section 3.3.4) |
| 2935 | --------- |
| 2936 | |
| 2937 | The SACK MUST contain the Cumulative TSN Ack and |
| 2938 | Advertised Receiver Window Credit (a_rwnd) parameters. |
| 2939 | |
| 2940 | --------- |
| 2941 | New text: (Section 3.3.4) |
| 2942 | --------- |
| 2943 | |
| 2944 | The SACK MUST contain the Cumulative TSN Ack, |
| 2945 | Advertised Receiver Window Credit (a_rwnd), Number |
| 2946 | of Gap Ack Blocks, and Number of Duplicate TSNs fields. |
| 2947 | |
| 2948 | 2.25.3. Solution Description |
| 2949 | |
| 2950 | The text has been modified. It is now clear that a SACK always |
| 2951 | contains the fields Number of Gap Ack Blocks and Number of Duplicate |
| 2952 | TSNs. |
| 2953 | |
| 2954 | 2.26. Protocol Violation Error Cause |
| 2955 | |
| 2956 | 2.26.1. Description of the Problem |
| 2957 | |
| 2958 | There are many situations where an SCTP endpoint may detect that its |
| 2959 | peer violates the protocol. The result of such detection often |
| 2960 | results in the association being destroyed by the sending of an |
| 2961 | ABORT. Currently, there are only some error causes that could be |
| 2962 | used to indicate the reason for the abort, but these do not cover all |
| 2963 | cases. |
| 2964 | |
| 2965 | |
| 2966 | |
| 2967 | |
| 2968 | |
| 2969 | |
| 2970 | Stewart, et al. Informational [Page 53] |
| 2971 | |
| 2972 | RFC 4460 SCTP Errata April 2006 |
| 2973 | |
| 2974 | |
| 2975 | 2.26.2. Text Changes to the Document |
| 2976 | |
| 2977 | Some of the changes given here already include changes suggested in |
| 2978 | Section 2.6 and 2.21 of this document. |
| 2979 | |
| 2980 | --------- |
| 2981 | Old text: (Section 3.3.10) |
| 2982 | --------- |
| 2983 | |
| 2984 | Cause Code |
| 2985 | Value Cause Code |
| 2986 | --------- ---------------- |
| 2987 | 1 Invalid Stream Identifier |
| 2988 | 2 Missing Mandatory Parameter |
| 2989 | 3 Stale Cookie Error |
| 2990 | 4 Out of Resource |
| 2991 | 5 Unresolvable Address |
| 2992 | 6 Unrecognized Chunk Type |
| 2993 | 7 Invalid Mandatory Parameter |
| 2994 | 8 Unrecognized Parameters |
| 2995 | 9 No User Data |
| 2996 | 10 Cookie Received While Shutting Down |
| 2997 | |
| 2998 | Cause Length: 16 bits (unsigned integer) |
| 2999 | |
| 3000 | Set to the size of the parameter in bytes, including the Cause |
| 3001 | Code, Cause Length, and Cause-Specific Information fields |
| 3002 | |
| 3003 | Cause-specific Information: variable length |
| 3004 | |
| 3005 | This field carries the details of the error condition. |
| 3006 | |
| 3007 | Sections 3.3.10.1 - 3.3.10.10 define error causes for SCTP. |
| 3008 | Guidelines for the IETF to define new error cause values are |
| 3009 | discussed in Section 13.3. |
| 3010 | |
| 3011 | |
| 3012 | |
| 3013 | |
| 3014 | |
| 3015 | |
| 3016 | |
| 3017 | |
| 3018 | |
| 3019 | |
| 3020 | |
| 3021 | |
| 3022 | |
| 3023 | |
| 3024 | |
| 3025 | |
| 3026 | Stewart, et al. Informational [Page 54] |
| 3027 | |
| 3028 | RFC 4460 SCTP Errata April 2006 |
| 3029 | |
| 3030 | |
| 3031 | --------- |
| 3032 | New text: (Section 3.3.10) |
| 3033 | --------- |
| 3034 | |
| 3035 | Cause Code |
| 3036 | Value Cause Code |
| 3037 | --------- ---------------- |
| 3038 | 1 Invalid Stream Identifier |
| 3039 | 2 Missing Mandatory Parameter |
| 3040 | 3 Stale Cookie Error |
| 3041 | 4 Out of Resource |
| 3042 | 5 Unresolvable Address |
| 3043 | 6 Unrecognized Chunk Type |
| 3044 | 7 Invalid Mandatory Parameter |
| 3045 | 8 Unrecognized Parameters |
| 3046 | 9 No User Data |
| 3047 | 10 Cookie Received While Shutting Down |
| 3048 | 11 Restart of an Association with New Addresses |
| 3049 | 12 User Initiated Abort |
| 3050 | 13 Protocol Violation |
| 3051 | |
| 3052 | Cause Length: 16 bits (unsigned integer) |
| 3053 | |
| 3054 | Set to the size of the parameter in bytes, including the Cause |
| 3055 | Code, Cause Length, and Cause-Specific Information fields |
| 3056 | |
| 3057 | Cause-specific Information: variable length |
| 3058 | |
| 3059 | This field carries the details of the error condition. |
| 3060 | |
| 3061 | Sections 3.3.10.1 - 3.3.10.13 define error causes for SCTP. |
| 3062 | Guidelines for the IETF to define new error cause values are |
| 3063 | discussed in Section 13.3. |
| 3064 | |
| 3065 | --------- |
| 3066 | New text: (Note: no old text; new error added in section 3.3.10) |
| 3067 | --------- |
| 3068 | |
| 3069 | 3.3.10.13. Protocol Violation (13) |
| 3070 | |
| 3071 | Cause of error |
| 3072 | -------------- |
| 3073 | |
| 3074 | This error cause MAY be included in ABORT chunks that are sent |
| 3075 | because an SCTP endpoint detects a protocol violation of the peer |
| 3076 | that is not covered by the error causes described in 3.3.10.1 to |
| 3077 | 3.3.10.12. An implementation MAY provide additional information |
| 3078 | specifying what kind of protocol violation has been detected. |
| 3079 | |
| 3080 | |
| 3081 | |
| 3082 | Stewart, et al. Informational [Page 55] |
| 3083 | |
| 3084 | RFC 4460 SCTP Errata April 2006 |
| 3085 | |
| 3086 | |
| 3087 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 3088 | | Cause Code=13 | Cause Length=Variable | |
| 3089 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 3090 | / Additional Information / |
| 3091 | \ \ |
| 3092 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 3093 | |
| 3094 | 2.26.3. Solution Description |
| 3095 | |
| 3096 | An additional error cause has been defined that can be used by an |
| 3097 | endpoint to indicate a protocol violation of the peer. |
| 3098 | |
| 3099 | 2.27. Reporting of Unrecognized Parameters |
| 3100 | |
| 3101 | 2.27.1. Description of the Problem |
| 3102 | |
| 3103 | It is not stated clearly in RFC 2960 [5] how unrecognized parameters |
| 3104 | should be reported. Unrecognized parameters in an INIT chunk could |
| 3105 | be reported in the INIT-ACK chunk or in a separate ERROR chunk, which |
| 3106 | can get lost. Unrecognized parameters in an INIT-ACK chunk have to |
| 3107 | be reported in an ERROR-chunk. This can be bundled with the COOKIE- |
| 3108 | ERROR chunk or sent separately. If it is sent separately and |
| 3109 | received before the COOKIE-ECHO, it will be handled as an OOTB |
| 3110 | packet, resulting in sending out an ABORT chunk. Therefore, the |
| 3111 | association would not be established. |
| 3112 | |
| 3113 | 2.27.2. Text Changes to the Document |
| 3114 | |
| 3115 | Some of the changes given here already include changes suggested in |
| 3116 | Section 2.2 of this document. |
| 3117 | |
| 3118 | --------- |
| 3119 | Old text: (Section 3.2.1) |
| 3120 | --------- |
| 3121 | |
| 3122 | 00 - Stop processing this SCTP packet and discard it, do not process |
| 3123 | any further chunks within it. |
| 3124 | |
| 3125 | 01 - Stop processing this SCTP packet and discard it, do not process |
| 3126 | any further chunks within it, and report the unrecognized |
| 3127 | parameter in an 'Unrecognized Parameter Type' (in either an |
| 3128 | ERROR or in the INIT ACK). |
| 3129 | |
| 3130 | 10 - Skip this parameter and continue processing. |
| 3131 | |
| 3132 | 11 - Skip this parameter and continue processing but report the |
| 3133 | unrecognized parameter in an 'Unrecognized Parameter Type' (in |
| 3134 | either an ERROR or in the INIT ACK). |
| 3135 | |
| 3136 | |
| 3137 | |
| 3138 | Stewart, et al. Informational [Page 56] |
| 3139 | |
| 3140 | RFC 4460 SCTP Errata April 2006 |
| 3141 | |
| 3142 | |
| 3143 | --------- |
| 3144 | New text: (Section 3.2.1) |
| 3145 | --------- |
| 3146 | |
| 3147 | 00 - Stop processing this SCTP chunk and discard it; do not process |
| 3148 | any further parameters within this chunk. |
| 3149 | |
| 3150 | 01 - Stop processing this SCTP chunk and discard it, do not process |
| 3151 | any further parameters within this chunk, and report the |
| 3152 | unrecognized parameter in an 'Unrecognized Parameter Type', as |
| 3153 | described in 3.2.2. |
| 3154 | |
| 3155 | 10 - Skip this parameter and continue processing. |
| 3156 | |
| 3157 | 11 - Skip this parameter and continue processing but report the |
| 3158 | unrecognized parameter in an 'Unrecognized Parameter Type', as |
| 3159 | described in 3.2.2. |
| 3160 | |
| 3161 | --------- |
| 3162 | New text: (Note: no old text; clarification added in Section 3.2) |
| 3163 | --------- |
| 3164 | |
| 3165 | 3.2.2. Reporting of Unrecognized Parameters |
| 3166 | |
| 3167 | If the receiver of an INIT chunk detects unrecognized parameters |
| 3168 | and has to report them according to Section 3.2.1, it MUST put |
| 3169 | the 'Unrecognized Parameter' parameter(s) in the INIT-ACK chunk |
| 3170 | sent in response to the INIT-chunk. Note that if the receiver |
| 3171 | of the INIT chunk is NOT going to establish an association (e.g., |
| 3172 | due to lack of resources), then no report would be sent back. |
| 3173 | |
| 3174 | If the receiver of an INIT-ACK chunk detects unrecognized |
| 3175 | parameters and has to report them according to Section 3.2.1, |
| 3176 | it SHOULD bundle the ERROR chunk containing the |
| 3177 | 'Unrecognized Parameter' error cause with the COOKIE-ECHO |
| 3178 | chunk sent in response to the INIT-ACK chunk. If the |
| 3179 | receiver of the INIT-ACK cannot bundle the COOKIE-ECHO chunk |
| 3180 | with the ERROR chunk, the ERROR chunk MAY be sent separately |
| 3181 | but not before the COOKIE-ACK has been received. |
| 3182 | |
| 3183 | Note: Any time a COOKIE-ECHO is sent in a packet, it MUST be the |
| 3184 | first chunk. |
| 3185 | |
| 3186 | 2.27.3. Solution Description |
| 3187 | |
| 3188 | The procedure of reporting unrecognized parameters has been described |
| 3189 | clearly. |
| 3190 | |
| 3191 | |
| 3192 | |
| 3193 | |
| 3194 | Stewart, et al. Informational [Page 57] |
| 3195 | |
| 3196 | RFC 4460 SCTP Errata April 2006 |
| 3197 | |
| 3198 | |
| 3199 | 2.28. Handling of IP Address Parameters |
| 3200 | |
| 3201 | 2.28.1. Description of the Problem |
| 3202 | |
| 3203 | It is not stated clearly in RFC 2960 [5] how an SCTP endpoint that |
| 3204 | supports either IPv4 addresses or IPv6 addresses should respond if |
| 3205 | IPv4 and IPv6 addresses are presented by the peer in the INIT or |
| 3206 | INIT-ACK chunk. |
| 3207 | |
| 3208 | 2.28.2. Text Changes to the Document |
| 3209 | |
| 3210 | --------- |
| 3211 | Old text: (Section 5.1.2) |
| 3212 | --------- |
| 3213 | |
| 3214 | IMPLEMENTATION NOTE: In the case that the receiver of an INIT ACK |
| 3215 | fails to resolve the address parameter due to an unsupported type, |
| 3216 | it can abort the initiation process and then attempt a |
| 3217 | re-initiation by using a 'Supported Address Types' parameter in |
| 3218 | the new INIT to indicate what types of address it prefers. |
| 3219 | |
| 3220 | --------- |
| 3221 | New text: (Section 5.1.2) |
| 3222 | --------- |
| 3223 | |
| 3224 | IMPLEMENTATION NOTE: In the case that the receiver of an INIT ACK |
| 3225 | fails to resolve the address parameter due to an unsupported type, |
| 3226 | it can abort the initiation process and then attempt a re- |
| 3227 | initiation by using a 'Supported Address Types' parameter in the |
| 3228 | new INIT to indicate what types of address it prefers. |
| 3229 | |
| 3230 | IMPLEMENTATION NOTE: If an SCTP endpoint that only supports either |
| 3231 | IPv4 or IPv6 receives IPv4 and IPv6 addresses in an INIT or INIT- |
| 3232 | ACK chunk from its peer, it MUST use all the addresses belonging |
| 3233 | to the supported address family. The other addresses MAY be |
| 3234 | ignored. The endpoint SHOULD NOT respond with any kind of error |
| 3235 | indication. |
| 3236 | |
| 3237 | 2.28.3. Solution Description |
| 3238 | |
| 3239 | The procedure of handling IP address parameters has been described |
| 3240 | clearly. |
| 3241 | |
| 3242 | |
| 3243 | |
| 3244 | |
| 3245 | |
| 3246 | |
| 3247 | |
| 3248 | |
| 3249 | |
| 3250 | Stewart, et al. Informational [Page 58] |
| 3251 | |
| 3252 | RFC 4460 SCTP Errata April 2006 |
| 3253 | |
| 3254 | |
| 3255 | 2.29. Handling of COOKIE ECHO Chunks When a TCB Exists |
| 3256 | |
| 3257 | 2.29.1. Description of the Problem |
| 3258 | |
| 3259 | The description of the behavior in RFC 2960 [5] when a COOKIE ECHO |
| 3260 | chunk and a TCB exist could be misunderstood. When a COOKIE ECHO is |
| 3261 | received, a TCB exists and the local tag and peer's tag match, it is |
| 3262 | stated that the endpoint should enter the ESTABLISHED state if it has |
| 3263 | not already done so and send a COOKIE ACK. It was not clear that, in |
| 3264 | the case the endpoint has already left the ESTABLISHED state again, |
| 3265 | then it should not go back to established. In case D, the endpoint |
| 3266 | can only enter state ESTABLISHED from COOKIE-ECHOED because in state |
| 3267 | CLOSED it has no TCB and in state COOKIE-WAIT it has a TCB but knows |
| 3268 | nothing about the peer's tag, which is requested to match in this |
| 3269 | case. |
| 3270 | |
| 3271 | 2.29.2. Text Changes to the Document |
| 3272 | |
| 3273 | --------- |
| 3274 | Old text: (Section 5.2.4) |
| 3275 | --------- |
| 3276 | D) When both local and remote tags match the endpoint should |
| 3277 | always enter the ESTABLISHED state, if it has not already |
| 3278 | done so. It should stop any init or cookie timers that may |
| 3279 | be running and send a COOKIE ACK. |
| 3280 | |
| 3281 | --------- |
| 3282 | New text: (Section 5.2.4) |
| 3283 | --------- |
| 3284 | D) When both local and remote tags match, the endpoint should |
| 3285 | enter the ESTABLISHED state, if it is in the COOKIE-ECHOED |
| 3286 | state. It should stop any cookie timer that may |
| 3287 | be running and send a COOKIE ACK. |
| 3288 | |
| 3289 | 2.29.3. Solution Description |
| 3290 | |
| 3291 | The procedure of handling of COOKIE-ECHO chunks when a TCB exists has |
| 3292 | been described clearly. |
| 3293 | |
| 3294 | 2.30. The Initial Congestion Window Size |
| 3295 | |
| 3296 | 2.30.1. Description of the Problem |
| 3297 | |
| 3298 | RFC 2960 was published with the intention of having the same |
| 3299 | congestion control properties as TCP. Since the publication of RFC |
| 3300 | 2960, TCP's initial congestion window size has been increased via RFC |
| 3301 | 3390. This same update will be needed for SCTP to keep SCTP's |
| 3302 | congestion control properties equivalent to that of TCP. |
| 3303 | |
| 3304 | |
| 3305 | |
| 3306 | Stewart, et al. Informational [Page 59] |
| 3307 | |
| 3308 | RFC 4460 SCTP Errata April 2006 |
| 3309 | |
| 3310 | |
| 3311 | 2.30.2. Text Changes to the Document |
| 3312 | |
| 3313 | --------- |
| 3314 | Old text: (Section 7.2.1) |
| 3315 | --------- |
| 3316 | o The initial cwnd before DATA transmission or after a |
| 3317 | sufficiently long idle period MUST be <= 2*MTU. |
| 3318 | |
| 3319 | --------- |
| 3320 | New text: (Section 7.2.1) |
| 3321 | --------- |
| 3322 | o The initial cwnd before DATA transmission or after a |
| 3323 | sufficiently long idle period MUST be set to |
| 3324 | min(4*MTU, max (2*MTU, 4380 bytes)). |
| 3325 | |
| 3326 | --------- |
| 3327 | Old text: (Section 7.2.1) |
| 3328 | --------- |
| 3329 | o When the endpoint does not transmit data on a given transport |
| 3330 | address, the cwnd of the transport address should be adjusted |
| 3331 | to max(cwnd/2, 2*MTU) per RTO. |
| 3332 | |
| 3333 | --------- |
| 3334 | New text: (Section 7.2.1) |
| 3335 | --------- |
| 3336 | o When the endpoint does not transmit data on a given transport |
| 3337 | address, the cwnd of the transport address should be adjusted |
| 3338 | to max(cwnd/2, 4*MTU) per RTO. |
| 3339 | |
| 3340 | --------- |
| 3341 | Old text: (Section 7.2.2) |
| 3342 | --------- |
| 3343 | o Same as in the slow start, when the sender does not transmit |
| 3344 | DATA on a given transport address, the cwnd of the transport |
| 3345 | address should be adjusted to max(cwnd / 2, 2*MTU) per RTO. |
| 3346 | |
| 3347 | --------- |
| 3348 | New text: (Section 7.2.2) |
| 3349 | --------- |
| 3350 | o Same as in the slow start, when the sender does not transmit |
| 3351 | DATA on a given transport address, the cwnd of the transport |
| 3352 | address should be adjusted to max(cwnd / 2, 4*MTU) per RTO. |
| 3353 | |
| 3354 | |
| 3355 | |
| 3356 | |
| 3357 | |
| 3358 | |
| 3359 | |
| 3360 | |
| 3361 | |
| 3362 | Stewart, et al. Informational [Page 60] |
| 3363 | |
| 3364 | RFC 4460 SCTP Errata April 2006 |
| 3365 | |
| 3366 | |
| 3367 | --------- |
| 3368 | Old text: (Section 7.2.3) |
| 3369 | --------- |
| 3370 | |
| 3371 | 7.2.3. Congestion Control |
| 3372 | |
| 3373 | Upon detection of packet losses from SACK (see Section 7.2.4), an |
| 3374 | endpoint should do the following: |
| 3375 | |
| 3376 | ssthresh = max(cwnd/2, 2*MTU) |
| 3377 | cwnd = ssthresh |
| 3378 | |
| 3379 | Basically, a packet loss causes cwnd to be cut in half. |
| 3380 | |
| 3381 | When the T3-rtx timer expires on an address, SCTP should perform |
| 3382 | slow start by |
| 3383 | |
| 3384 | ssthresh = max(cwnd/2, 2*MTU) |
| 3385 | cwnd = 1*MTU |
| 3386 | |
| 3387 | --------- |
| 3388 | New text: (Section 7.2.3) |
| 3389 | --------- |
| 3390 | |
| 3391 | 7.2.3 Congestion Control |
| 3392 | |
| 3393 | Upon detection of packet losses from SACK (see Section 7.2.4), An |
| 3394 | endpoint should do the following: |
| 3395 | |
| 3396 | ssthresh = max(cwnd/2, 4*MTU) |
| 3397 | cwnd = ssthresh |
| 3398 | |
| 3399 | Basically, a packet loss causes cwnd to be cut in half. |
| 3400 | |
| 3401 | When the T3-rtx timer expires on an address, SCTP should perform |
| 3402 | slow start by: |
| 3403 | |
| 3404 | ssthresh = max(cwnd/2, 4*MTU) |
| 3405 | cwnd = 1*MTU |
| 3406 | |
| 3407 | 2.30.3. Solution Description |
| 3408 | |
| 3409 | The change to SCTP's initial congestion window will allow it to |
| 3410 | continue to maintain the same congestion control properties as TCP. |
| 3411 | |
| 3412 | |
| 3413 | |
| 3414 | |
| 3415 | |
| 3416 | |
| 3417 | |
| 3418 | Stewart, et al. Informational [Page 61] |
| 3419 | |
| 3420 | RFC 4460 SCTP Errata April 2006 |
| 3421 | |
| 3422 | |
| 3423 | 2.31. Stream Sequence Numbers in Figures |
| 3424 | |
| 3425 | 2.31.1. Description of the Problem |
| 3426 | |
| 3427 | In Section 2.24 of this document, it is clarified that the SSN are |
| 3428 | initialized with 0. Two figures in RFC 2960 [5] illustrate that they |
| 3429 | start with 1. |
| 3430 | |
| 3431 | |
| 3432 | |
| 3433 | |
| 3434 | |
| 3435 | |
| 3436 | |
| 3437 | |
| 3438 | |
| 3439 | |
| 3440 | |
| 3441 | |
| 3442 | |
| 3443 | |
| 3444 | |
| 3445 | |
| 3446 | |
| 3447 | |
| 3448 | |
| 3449 | |
| 3450 | |
| 3451 | |
| 3452 | |
| 3453 | |
| 3454 | |
| 3455 | |
| 3456 | |
| 3457 | |
| 3458 | |
| 3459 | |
| 3460 | |
| 3461 | |
| 3462 | |
| 3463 | |
| 3464 | |
| 3465 | |
| 3466 | |
| 3467 | |
| 3468 | |
| 3469 | |
| 3470 | |
| 3471 | |
| 3472 | |
| 3473 | |
| 3474 | Stewart, et al. Informational [Page 62] |
| 3475 | |
| 3476 | RFC 4460 SCTP Errata April 2006 |
| 3477 | |
| 3478 | |
| 3479 | 2.31.2. Text Changes to the Document |
| 3480 | |
| 3481 | --------- |
| 3482 | Old text: (Section 7.2.1) |
| 3483 | --------- |
| 3484 | |
| 3485 | Endpoint A Endpoint Z |
| 3486 | {app sets association with Z} |
| 3487 | (build TCB) |
| 3488 | INIT [I-Tag=Tag_A |
| 3489 | & other info] ------\ |
| 3490 | (Start T1-init timer) \ |
| 3491 | (Enter COOKIE-WAIT state) \---> (compose temp TCB and Cookie_Z) |
| 3492 | /-- INIT ACK [Veri Tag=Tag_A, |
| 3493 | / I-Tag=Tag_Z, |
| 3494 | (Cancel T1-init timer) <-----/ Cookie_Z, & other info] |
| 3495 | (destroy temp TCB) |
| 3496 | COOKIE ECHO [Cookie_Z] ------\ |
| 3497 | (Start T1-init timer) \ |
| 3498 | (Enter COOKIE-ECHOED state) \---> (build TCB enter ESTABLISHED |
| 3499 | state) |
| 3500 | /---- COOKIE-ACK |
| 3501 | / |
| 3502 | (Cancel T1-init timer, <-----/ |
| 3503 | Enter ESTABLISHED state) |
| 3504 | {app sends 1st user data; strm 0} |
| 3505 | DATA [TSN=initial TSN_A |
| 3506 | Strm=0,Seq=1 & user data]--\ |
| 3507 | (Start T3-rtx timer) \ |
| 3508 | \-> |
| 3509 | /----- SACK [TSN Ack=init |
| 3510 | / TSN_A,Block=0] |
| 3511 | (Cancel T3-rtx timer) <------/ |
| 3512 | ... |
| 3513 | {app sends 2 messages;strm 0} |
| 3514 | /---- DATA |
| 3515 | / [TSN=init TSN_Z |
| 3516 | <--/ Strm=0,Seq=1 & user data 1] |
| 3517 | SACK [TSN Ack=init TSN_Z, / ---- DATA |
| 3518 | Block=0] --------\ / [TSN=init TSN_Z +1, |
| 3519 | \/ Strm=0,Seq=2 & user data 2] |
| 3520 | <------/\ |
| 3521 | \ |
| 3522 | \------> |
| 3523 | |
| 3524 | Figure 4: INITiation Example |
| 3525 | |
| 3526 | |
| 3527 | |
| 3528 | |
| 3529 | |
| 3530 | Stewart, et al. Informational [Page 63] |
| 3531 | |
| 3532 | RFC 4460 SCTP Errata April 2006 |
| 3533 | |
| 3534 | |
| 3535 | --------- |
| 3536 | New text: (Section 7.2.1) |
| 3537 | --------- |
| 3538 | |
| 3539 | |
| 3540 | Endpoint A Endpoint Z |
| 3541 | {app sets association with Z} |
| 3542 | (build TCB) |
| 3543 | INIT [I-Tag=Tag_A |
| 3544 | & other info] ------\ |
| 3545 | (Start T1-init timer) \ |
| 3546 | (Enter COOKIE-WAIT state) \---> (compose temp TCB and Cookie_Z) |
| 3547 | /-- INIT ACK [Veri Tag=Tag_A, |
| 3548 | / I-Tag=Tag_Z, |
| 3549 | (Cancel T1-init timer) <------/ Cookie_Z, & other info] |
| 3550 | (destroy temp TCB) |
| 3551 | COOKIE ECHO [Cookie_Z] ------\ |
| 3552 | (Start T1-init timer) \ |
| 3553 | (Enter COOKIE-ECHOED state) \---> (build TCB enter ESTABLISHED |
| 3554 | state) |
| 3555 | /---- COOKIE-ACK |
| 3556 | / |
| 3557 | (Cancel T1-init timer, <-----/ |
| 3558 | Enter ESTABLISHED state) |
| 3559 | {app sends 1st user data; strm 0} |
| 3560 | DATA [TSN=initial TSN_A |
| 3561 | Strm=0,Seq=0 & user data]--\ |
| 3562 | (Start T3-rtx timer) \ |
| 3563 | \-> |
| 3564 | /----- SACK [TSN Ack=init |
| 3565 | / TSN_A,Block=0] |
| 3566 | (Cancel T3-rtx timer) <------/ |
| 3567 | ... |
| 3568 | {app sends 2 messages;strm 0} |
| 3569 | /---- DATA |
| 3570 | / [TSN=init TSN_Z |
| 3571 | <--/ Strm=0,Seq=0 & user data 1] |
| 3572 | SACK [TSN Ack=init TSN_Z, /---- DATA |
| 3573 | Block=0] --------\ / [TSN=init TSN_Z +1, |
| 3574 | \/ Strm=0,Seq=1 & user data 2] |
| 3575 | <------/\ |
| 3576 | \ |
| 3577 | \------> |
| 3578 | |
| 3579 | Figure 4: INITiation Example |
| 3580 | |
| 3581 | |
| 3582 | |
| 3583 | |
| 3584 | |
| 3585 | |
| 3586 | Stewart, et al. Informational [Page 64] |
| 3587 | |
| 3588 | RFC 4460 SCTP Errata April 2006 |
| 3589 | |
| 3590 | |
| 3591 | --------- |
| 3592 | Old text: (Section 5.2.4.1) |
| 3593 | --------- |
| 3594 | |
| 3595 | Endpoint A Endpoint Z |
| 3596 | <------------ Association is established----------------------> |
| 3597 | Tag=Tag_A Tag=Tag_Z |
| 3598 | <-------------------------------------------------------------> |
| 3599 | {A crashes and restarts} |
| 3600 | {app sets up a association with Z} |
| 3601 | (build TCB) |
| 3602 | INIT [I-Tag=Tag_A' |
| 3603 | & other info] --------\ |
| 3604 | (Start T1-init timer) \ |
| 3605 | (Enter COOKIE-WAIT state) \---> (find a existing TCB |
| 3606 | compose temp TCB and Cookie_Z |
| 3607 | with Tie-Tags to previous |
| 3608 | association) |
| 3609 | /--- INIT ACK [Veri Tag=Tag_A', |
| 3610 | / I-Tag=Tag_Z', |
| 3611 | (Cancel T1-init timer) <------/ Cookie_Z[TieTags= |
| 3612 | Tag_A,Tag_Z |
| 3613 | & other info] |
| 3614 | (destroy temp TCB,leave original |
| 3615 | in place) |
| 3616 | COOKIE ECHO [Veri=Tag_Z', |
| 3617 | Cookie_Z |
| 3618 | Tie=Tag_A, |
| 3619 | Tag_Z]----------\ |
| 3620 | (Start T1-init timer) \ |
| 3621 | (Enter COOKIE-ECHOED state) \---> (Find existing association, |
| 3622 | Tie-Tags match old tags, |
| 3623 | Tags do not match i.e., |
| 3624 | case X X M M above, |
| 3625 | Announce Restart to ULP |
| 3626 | and reset association). |
| 3627 | /---- COOKIE-ACK |
| 3628 | (Cancel T1-init timer, <------/ |
| 3629 | Enter ESTABLISHED state) |
| 3630 | {app sends 1st user data; strm 0} |
| 3631 | DATA [TSN=initial TSN_A |
| 3632 | Strm=0,Seq=1 & user data]--\ |
| 3633 | (Start T3-rtx timer) \ |
| 3634 | \-> |
| 3635 | /--- SACK [TSN Ack=init TSN_A,Block=0] |
| 3636 | (Cancel T3-rtx timer) <------/ |
| 3637 | |
| 3638 | Figure 5: A Restart Example |
| 3639 | |
| 3640 | |
| 3641 | |
| 3642 | Stewart, et al. Informational [Page 65] |
| 3643 | |
| 3644 | RFC 4460 SCTP Errata April 2006 |
| 3645 | |
| 3646 | |
| 3647 | --------- |
| 3648 | New text: (Section 5.2.4.1) |
| 3649 | --------- |
| 3650 | |
| 3651 | Endpoint A Endpoint Z |
| 3652 | <-------------- Association is established----------------------> |
| 3653 | Tag=Tag_A Tag=Tag_Z |
| 3654 | <---------------------------------------------------------------> |
| 3655 | {A crashes and restarts} |
| 3656 | {app sets up a association with Z} |
| 3657 | (build TCB) |
| 3658 | INIT [I-Tag=Tag_A' |
| 3659 | & other info] --------\ |
| 3660 | (Start T1-init timer) \ |
| 3661 | (Enter COOKIE-WAIT state) \---> (find a existing TCB |
| 3662 | compose temp TCB and Cookie_Z |
| 3663 | with Tie-Tags to previous |
| 3664 | association) |
| 3665 | /--- INIT ACK [Veri Tag=Tag_A', |
| 3666 | / I-Tag=Tag_Z', |
| 3667 | (Cancel T1-init timer) <------/ Cookie_Z[TieTags= |
| 3668 | Tag_A,Tag_Z |
| 3669 | & other info] |
| 3670 | (destroy temp TCB,leave original |
| 3671 | in place) |
| 3672 | COOKIE ECHO [Veri=Tag_Z', |
| 3673 | Cookie_Z |
| 3674 | Tie=Tag_A, |
| 3675 | Tag_Z]----------\ |
| 3676 | (Start T1-init timer) \ |
| 3677 | (Enter COOKIE-ECHOED state) \---> (Find existing association, |
| 3678 | Tie-Tags match old tags, |
| 3679 | Tags do not match i.e., |
| 3680 | case X X M M above, |
| 3681 | Announce Restart to ULP |
| 3682 | and reset association). |
| 3683 | /---- COOKIE-ACK |
| 3684 | (Cancel T1-init timer, <------/ |
| 3685 | Enter ESTABLISHED state) |
| 3686 | {app sends 1st user data; strm 0} |
| 3687 | DATA [TSN=initial TSN_A |
| 3688 | Strm=0,Seq=0 & user data]--\ |
| 3689 | (Start T3-rtx timer) \ |
| 3690 | \-> |
| 3691 | /--- SACK [TSN Ack=init TSN_A,Block=0] |
| 3692 | (Cancel T3-rtx timer) <------/ |
| 3693 | |
| 3694 | Figure 5: A Restart Example |
| 3695 | |
| 3696 | |
| 3697 | |
| 3698 | Stewart, et al. Informational [Page 66] |
| 3699 | |
| 3700 | RFC 4460 SCTP Errata April 2006 |
| 3701 | |
| 3702 | |
| 3703 | 2.31.3. Solution description |
| 3704 | |
| 3705 | Figure 4 and 5 were changed so that the SSN starts with 0 instead of |
| 3706 | 1. |
| 3707 | |
| 3708 | 2.32. Unrecognized Parameters |
| 3709 | |
| 3710 | 2.32.1. Description of the Problem |
| 3711 | |
| 3712 | The RFC does not state clearly in Section 3.3.3.1 whether one or |
| 3713 | multiple unrecognized parameters are included in the 'Unrecognized |
| 3714 | Parameter' parameter. |
| 3715 | |
| 3716 | 2.32.2. Text Changes to the Document |
| 3717 | |
| 3718 | --------- |
| 3719 | Old text: (Section 3.3.3) |
| 3720 | --------- |
| 3721 | Variable Parameters Status Type Value |
| 3722 | ------------------------------------------------------------- |
| 3723 | State Cookie Mandatory 7 |
| 3724 | IPv4 Address (Note 1) Optional 5 |
| 3725 | IPv6 Address (Note 1) Optional 6 |
| 3726 | Unrecognized Parameters Optional 8 |
| 3727 | Reserved for ECN Capable (Note 2) Optional 32768 (0x8000) |
| 3728 | Host Name Address (Note 3) Optional 11 |
| 3729 | |
| 3730 | --------- |
| 3731 | New text: (Section 3.3.3) |
| 3732 | --------- |
| 3733 | Variable Parameters Status Type Value |
| 3734 | ------------------------------------------------------------- |
| 3735 | State Cookie Mandatory 7 |
| 3736 | IPv4 Address (Note 1) Optional 5 |
| 3737 | IPv6 Address (Note 1) Optional 6 |
| 3738 | Unrecognized Parameter Optional 8 |
| 3739 | Reserved for ECN Capable (Note 2) Optional 32768 (0x8000) |
| 3740 | Host Name Address (Note 3) Optional 11 |
| 3741 | |
| 3742 | |
| 3743 | --------- |
| 3744 | Old text: (Section 3.3.3.1) |
| 3745 | --------- |
| 3746 | Unrecognized Parameters: |
| 3747 | |
| 3748 | Parameter Type Value: 8 |
| 3749 | |
| 3750 | Parameter Length: Variable Size. |
| 3751 | |
| 3752 | |
| 3753 | |
| 3754 | Stewart, et al. Informational [Page 67] |
| 3755 | |
| 3756 | RFC 4460 SCTP Errata April 2006 |
| 3757 | |
| 3758 | |
| 3759 | Parameter Value: |
| 3760 | This parameter is returned to the originator of the INIT |
| 3761 | chunk when the INIT contains an unrecognized parameter |
| 3762 | which has a value that indicates that it should be reported |
| 3763 | to the sender. This parameter value field will contain |
| 3764 | unrecognized parameters copied from the INIT chunk complete |
| 3765 | with Parameter Type, Length and Value fields. |
| 3766 | |
| 3767 | --------- |
| 3768 | New text: (Section 3.3.3.1) |
| 3769 | --------- |
| 3770 | Unrecognized Parameter: |
| 3771 | |
| 3772 | Parameter Type Value: 8 |
| 3773 | |
| 3774 | Parameter Length: Variable Size. |
| 3775 | |
| 3776 | Parameter Value: |
| 3777 | |
| 3778 | This parameter is returned to the originator of the INIT |
| 3779 | chunk when the INIT contains an unrecognized parameter |
| 3780 | that has a value that indicates that it should be reported |
| 3781 | to the sender. This parameter value field will contain the |
| 3782 | unrecognized parameter copied from the INIT chunk complete |
| 3783 | with Parameter Type, Length, and Value fields. |
| 3784 | |
| 3785 | 2.32.3. Solution Description |
| 3786 | |
| 3787 | The new text states clearly that only one unrecognized parameter is |
| 3788 | reported per parameter. |
| 3789 | |
| 3790 | 2.33. Handling of Unrecognized Parameters |
| 3791 | |
| 3792 | 2.33.1. Description of the Problem |
| 3793 | |
| 3794 | It is not stated clearly in RFC 2960 [5] how unrecognized parameters |
| 3795 | should be handled. The problem comes up when an INIT contains an |
| 3796 | unrecognized parameter with highest bits 00. It was not clear |
| 3797 | whether an INIT-ACK should be sent. |
| 3798 | |
| 3799 | 2.33.2. Text Changes to the Document |
| 3800 | |
| 3801 | Some of the changes given here already include changes suggested in |
| 3802 | Section 2.27 of this document. |
| 3803 | |
| 3804 | |
| 3805 | |
| 3806 | |
| 3807 | |
| 3808 | |
| 3809 | |
| 3810 | Stewart, et al. Informational [Page 68] |
| 3811 | |
| 3812 | RFC 4460 SCTP Errata April 2006 |
| 3813 | |
| 3814 | |
| 3815 | --------- |
| 3816 | Old text: (Section 3.2.1) |
| 3817 | --------- |
| 3818 | |
| 3819 | 00 - Stop processing this SCTP packet and discard it, do not process |
| 3820 | any further chunks within it. |
| 3821 | |
| 3822 | 01 - Stop processing this SCTP packet and discard it, do not process |
| 3823 | any further chunks within it, and report the unrecognized |
| 3824 | parameter in an 'Unrecognized Parameter Type' (in either an |
| 3825 | ERROR or in the INIT ACK). |
| 3826 | |
| 3827 | 10 - Skip this parameter and continue processing. |
| 3828 | |
| 3829 | 11 - Skip this parameter and continue processing but report the |
| 3830 | unrecognized parameter in an 'Unrecognized Parameter Type' (in |
| 3831 | either an ERROR or in the INIT ACK). |
| 3832 | |
| 3833 | --------- |
| 3834 | New text: (Section 3.2.1) |
| 3835 | --------- |
| 3836 | |
| 3837 | 00 - Stop processing this parameter; do not process |
| 3838 | any further parameters within this chunk. |
| 3839 | |
| 3840 | 01 - Stop processing this parameter, do not process |
| 3841 | any further parameters within this chunk, and report the |
| 3842 | unrecognized parameter in an 'Unrecognized Parameter Type', as |
| 3843 | described in 3.2.2. |
| 3844 | |
| 3845 | 10 - Skip this parameter and continue processing. |
| 3846 | |
| 3847 | 11 - Skip this parameter and continue processing but report the |
| 3848 | unrecognized parameter in an 'Unrecognized Parameter Type', as |
| 3849 | described in 3.2.2. |
| 3850 | |
| 3851 | |
| 3852 | --------- |
| 3853 | New text: (Note: no old text; clarification added in section 3.2) |
| 3854 | --------- |
| 3855 | |
| 3856 | 3.2.2. Reporting of Unrecognized Parameters |
| 3857 | |
| 3858 | If the receiver of an INIT chunk detects unrecognized parameters and |
| 3859 | has to report them according to Section 3.2.1, it MUST put the |
| 3860 | 'Unrecognized Parameter' parameter(s) in the INIT-ACK chunk sent in |
| 3861 | response to the INIT-chunk. Note that if the receiver of the INIT |
| 3862 | chunk is NOT going to establish an association (e.g., due to lack of |
| 3863 | |
| 3864 | |
| 3865 | |
| 3866 | Stewart, et al. Informational [Page 69] |
| 3867 | |
| 3868 | RFC 4460 SCTP Errata April 2006 |
| 3869 | |
| 3870 | |
| 3871 | resources), an 'Unrecognized Parameter' would NOT be included with |
| 3872 | any ABORT being sent to the sender of the INIT. |
| 3873 | |
| 3874 | If the receiver of an INIT-ACK chunk detects unrecognized parameters |
| 3875 | and has to report them according to Section 3.2.1, it SHOULD bundle |
| 3876 | the ERROR chunk containing the 'Unrecognized Parameter' error cause |
| 3877 | with the COOKIE-ECHO chunk sent in response to the INIT-ACK chunk. |
| 3878 | If the receiver of the INIT-ACK cannot bundle the COOKIE-ECHO chunk |
| 3879 | with the ERROR chunk, the ERROR chunk MAY be sent separately but not |
| 3880 | before the COOKIE-ACK has been received. |
| 3881 | |
| 3882 | Note: Any time a COOKIE-ECHO is sent in a packet, it MUST be the |
| 3883 | first chunk. |
| 3884 | |
| 3885 | 2.33.3. Solution Description |
| 3886 | |
| 3887 | The procedure of handling unrecognized parameters has been described |
| 3888 | clearly. |
| 3889 | |
| 3890 | 2.34. Tie Tags |
| 3891 | |
| 3892 | 2.34.1. Description of the Problem |
| 3893 | |
| 3894 | RFC 2960 requires that Tie-Tags be included in the COOKIE. The |
| 3895 | cookie may not be encrypted. An attacker could discover the value of |
| 3896 | the Verification Tags by analyzing cookies received after sending an |
| 3897 | INIT. |
| 3898 | |
| 3899 | 2.34.2. Text Changes to the Document |
| 3900 | |
| 3901 | --------- |
| 3902 | Old text: (Section 1.4) |
| 3903 | --------- |
| 3904 | o Tie-Tags: Verification Tags from a previous association. These |
| 3905 | Tags are used within a State Cookie so that the newly |
| 3906 | restarting association can be linked to the original |
| 3907 | association within the endpoint that did not restart. |
| 3908 | |
| 3909 | --------- |
| 3910 | New text: (Section 1.4) |
| 3911 | --------- |
| 3912 | |
| 3913 | o Tie-Tags: Two 32-bit random numbers that together make a 64- |
| 3914 | bit nonce. These Tags are used within a State Cookie and TCB |
| 3915 | so that a newly restarting association can be linked to the |
| 3916 | original association within the endpoint that did not restart |
| 3917 | and yet not reveal the true Verification Tags of an existing |
| 3918 | association. |
| 3919 | |
| 3920 | |
| 3921 | |
| 3922 | Stewart, et al. Informational [Page 70] |
| 3923 | |
| 3924 | RFC 4460 SCTP Errata April 2006 |
| 3925 | |
| 3926 | |
| 3927 | --------- |
| 3928 | Old text: (Section 5.2.1) |
| 3929 | --------- |
| 3930 | |
| 3931 | For an endpoint that is in the COOKIE-ECHOED state it MUST |
| 3932 | populate its Tie-Tags with the Tag information of itself and |
| 3933 | its peer (see Section 5.2.2 for a description of the Tie-Tags). |
| 3934 | |
| 3935 | --------- |
| 3936 | New text: (Section 5.2.1) |
| 3937 | --------- |
| 3938 | For an endpoint that is in the COOKIE-ECHOED state it MUST |
| 3939 | populate its Tie-Tags within both the association TCB and |
| 3940 | inside the State Cookie (see section 5.2.2 for a description |
| 3941 | of the Tie-Tags). |
| 3942 | |
| 3943 | |
| 3944 | --------- |
| 3945 | Old text: (Section 5.2.2) |
| 3946 | --------- |
| 3947 | Unless otherwise stated, upon reception of an unexpected INIT for |
| 3948 | this association, the endpoint shall generate an INIT ACK with a |
| 3949 | State Cookie. In the outbound INIT ACK the endpoint MUST copy its |
| 3950 | current Verification Tag and peer's Verification Tag into a |
| 3951 | reserved place within the state cookie. We shall refer to these |
| 3952 | locations as the Peer's-Tie-Tag and the Local-Tie-Tag. The |
| 3953 | outbound SCTP packet containing this INIT ACK MUST carry a |
| 3954 | Verification Tag value equal to the Initiation Tag found in the |
| 3955 | unexpected INIT. And the INIT ACK MUST contain a new Initiation |
| 3956 | Tag (randomly generated see Section 5.3.1). Other parameters |
| 3957 | for the endpoint SHOULD be copied from the existing parameters |
| 3958 | of the association (e.g., number of outbound streams) into the |
| 3959 | INIT ACK and cookie. |
| 3960 | |
| 3961 | --------- |
| 3962 | New text: (Section 5.2.2) |
| 3963 | --------- |
| 3964 | |
| 3965 | Unless otherwise stated, upon receipt of an unexpected INIT for |
| 3966 | this association, the endpoint MUST generate an INIT ACK with a |
| 3967 | State Cookie. In the outbound INIT ACK, the endpoint MUST copy |
| 3968 | its current Tie-Tags to a reserved place within the State Cookie |
| 3969 | and the association's TCB. We shall refer to these locations |
| 3970 | inside the cookie as the Peer's-Tie-Tag and the Local-Tie-Tag. We |
| 3971 | will refer to the copy within an association's TCB as the Local |
| 3972 | Tag and Peer's Tag. The outbound SCTP packet containing this INIT |
| 3973 | ACK MUST carry a Verification Tag value equal to the Initiation |
| 3974 | Tag found in the unexpected INIT. And the INIT ACK MUST contain a |
| 3975 | |
| 3976 | |
| 3977 | |
| 3978 | Stewart, et al. Informational [Page 71] |
| 3979 | |
| 3980 | RFC 4460 SCTP Errata April 2006 |
| 3981 | |
| 3982 | |
| 3983 | new Initiation Tag (randomly generated; see Section 5.3.1). Other |
| 3984 | parameters for the endpoint SHOULD be copied from the existing |
| 3985 | parameters of the association (e.g., number of outbound streams) |
| 3986 | into the INIT ACK and cookie. |
| 3987 | |
| 3988 | 2.34.3. Solution Description |
| 3989 | |
| 3990 | The solution to this problem is not to use the real Verification Tags |
| 3991 | within the State Cookie as tie-tags. Instead, two 32-bit random |
| 3992 | numbers are created to form one 64-bit nonce and stored both in the |
| 3993 | State Cookie and the existing association TCB. This prevents |
| 3994 | exposing the Verification Tags inadvertently. |
| 3995 | |
| 3996 | 2.35. Port Number Verification in the COOKIE-ECHO |
| 3997 | |
| 3998 | 2.35.1. Description of the Problem |
| 3999 | |
| 4000 | The State Cookie sent by a listening SCTP endpoint may not contain |
| 4001 | the original port numbers or the local Verification Tag. It is then |
| 4002 | possible that the endpoint, on receipt of the COOKIE-ECHO, will not |
| 4003 | be able to verify that these values match the original values found |
| 4004 | in the INIT and INIT-ACK that began the association setup. |
| 4005 | |
| 4006 | 2.35.2. Text Changes to the Document |
| 4007 | |
| 4008 | --------- |
| 4009 | Old text: (Section 5.1.5) |
| 4010 | --------- |
| 4011 | 3) Compare the creation timestamp in the State Cookie to the |
| 4012 | current local time. If the elapsed time is longer than the |
| 4013 | lifespan carried in the State Cookie, then the packet, |
| 4014 | including the COOKIE ECHO and any attached DATA chunks, |
| 4015 | SHOULD be discarded and the endpoint MUST transmit an ERROR |
| 4016 | chunk with a "Stale Cookie" error cause to the peer endpoint, |
| 4017 | |
| 4018 | 4) If the State Cookie is valid, create an association to the |
| 4019 | sender of the COOKIE ECHO chunk with the information in the |
| 4020 | TCB data carried in the COOKIE ECHO, and enter the |
| 4021 | ESTABLISHED state, |
| 4022 | |
| 4023 | 5) Send a COOKIE ACK chunk to the peer acknowledging reception |
| 4024 | of the COOKIE ECHO. The COOKIE ACK MAY be bundled with an |
| 4025 | outbound DATA chunk or SACK chunk; however, the COOKIE ACK |
| 4026 | MUST be the first chunk in the SCTP packet. |
| 4027 | |
| 4028 | 6) Immediately acknowledge any DATA chunk bundled with the COOKIE |
| 4029 | ECHO with a SACK (subsequent DATA chunk acknowledgement should |
| 4030 | follow the rules defined in Section 6.2). As mentioned in step |
| 4031 | |
| 4032 | |
| 4033 | |
| 4034 | Stewart, et al. Informational [Page 72] |
| 4035 | |
| 4036 | RFC 4460 SCTP Errata April 2006 |
| 4037 | |
| 4038 | |
| 4039 | 5), if the SACK is bundled with the COOKIE ACK, the COOKIE ACK |
| 4040 | MUST appear first in the SCTP packet. |
| 4041 | |
| 4042 | --------- |
| 4043 | New text: (Section 5.1.5) |
| 4044 | --------- |
| 4045 | |
| 4046 | 3) Compare the port numbers and the Verification Tag contained |
| 4047 | within the COOKIE ECHO chunk to the actual port numbers and the |
| 4048 | Verification Tag within the SCTP common header of the received |
| 4049 | packet. If these values do not match, the packet MUST be |
| 4050 | silently discarded. |
| 4051 | |
| 4052 | 4) Compare the creation timestamp in the State Cookie to the |
| 4053 | current local time. If the elapsed time is longer than the |
| 4054 | lifespan carried in the State Cookie, then the packet, |
| 4055 | including the COOKIE ECHO and any attached DATA chunks, |
| 4056 | SHOULD be discarded, and the endpoint MUST transmit an |
| 4057 | ERROR chunk with a "Stale Cookie" error cause to the peer |
| 4058 | endpoint. |
| 4059 | |
| 4060 | 5) If the State Cookie is valid, create an association to the |
| 4061 | sender of the COOKIE ECHO chunk with the information in the |
| 4062 | TCB data carried in the COOKIE ECHO and enter the |
| 4063 | ESTABLISHED state. |
| 4064 | |
| 4065 | 6) Send a COOKIE ACK chunk to the peer acknowledging receipt of |
| 4066 | the COOKIE ECHO. The COOKIE ACK MAY be bundled with an |
| 4067 | outbound DATA chunk or SACK chunk; however, the COOKIE ACK |
| 4068 | MUST be the first chunk in the SCTP packet. |
| 4069 | |
| 4070 | 7) Immediately acknowledge any DATA chunk bundled with the COOKIE |
| 4071 | ECHO with a SACK (subsequent DATA chunk acknowledgement should |
| 4072 | follow the rules defined in Section 6.2). As mentioned in step |
| 4073 | 5, if the SACK is bundled with the COOKIE ACK, the COOKIE ACK |
| 4074 | MUST appear first in the SCTP packet. |
| 4075 | |
| 4076 | 2.35.3. Solution Description |
| 4077 | |
| 4078 | By including both port numbers and the local Verification Tag within |
| 4079 | the State Cookie and verifying these during COOKIE-ECHO processing, |
| 4080 | this issue is resolved. |
| 4081 | |
| 4082 | |
| 4083 | |
| 4084 | |
| 4085 | |
| 4086 | |
| 4087 | |
| 4088 | |
| 4089 | |
| 4090 | Stewart, et al. Informational [Page 73] |
| 4091 | |
| 4092 | RFC 4460 SCTP Errata April 2006 |
| 4093 | |
| 4094 | |
| 4095 | 2.36. Path Initialization |
| 4096 | |
| 4097 | 2.36.1. Description of the Problem |
| 4098 | |
| 4099 | When an association enters the ESTABLISHED state, the endpoint has no |
| 4100 | verification that all of the addresses presented by the peer do in |
| 4101 | fact belong to the peer. This could cause various forms of denial of |
| 4102 | service attacks. |
| 4103 | |
| 4104 | 2.36.2. Text Changes to the Document |
| 4105 | |
| 4106 | --------- |
| 4107 | Old text: None |
| 4108 | --------- |
| 4109 | |
| 4110 | --------- |
| 4111 | New text: (Section 5.4) |
| 4112 | --------- |
| 4113 | 5.4. Path Verification |
| 4114 | |
| 4115 | During association establishment, the two peers exchange a list of |
| 4116 | addresses. In the predominant case, these lists accurately represent |
| 4117 | the addresses owned by each peer. However, it is possible that a |
| 4118 | misbehaving peer may supply addresses that it does not own. To |
| 4119 | prevent this, the following rules are applied to all addresses of the |
| 4120 | new association: |
| 4121 | |
| 4122 | 1) Any address passed to the sender of the INIT by its upper layer is |
| 4123 | automatically considered to be CONFIRMED. |
| 4124 | |
| 4125 | 2) For the receiver of the COOKIE-ECHO the only CONFIRMED address is |
| 4126 | the one that the INIT-ACK was sent to. |
| 4127 | |
| 4128 | 3) All other addresses not covered by rules 1 and 2 are considered |
| 4129 | UNCONFIRMED and are subject to probing for verification. |
| 4130 | |
| 4131 | To probe an address for verification, an endpoint will send |
| 4132 | HEARTBEATs including a 64-bit random nonce and a path indicator (to |
| 4133 | identify the address that the HEARTBEAT is sent to) within the |
| 4134 | HEARTBEAT parameter. |
| 4135 | |
| 4136 | Upon receipt of the HEARTBEAT-ACK, a verification is made that the |
| 4137 | nonce included in the HEARTBEAT parameter is the one sent to the |
| 4138 | address indicated inside the HEARTBEAT parameter. When this match |
| 4139 | occurs, the address that the original HEARTBEAT was sent to is now |
| 4140 | considered CONFIRMED and available for normal data transfer. |
| 4141 | |
| 4142 | |
| 4143 | |
| 4144 | |
| 4145 | |
| 4146 | Stewart, et al. Informational [Page 74] |
| 4147 | |
| 4148 | RFC 4460 SCTP Errata April 2006 |
| 4149 | |
| 4150 | |
| 4151 | These probing procedures are started when an association moves to the |
| 4152 | ESTABLISHED state and are ended when all paths are confirmed. |
| 4153 | |
| 4154 | Each RTO a probe may be sent on an active UNCONFIRMED path in an |
| 4155 | attempt to move it to the CONFIRMED state. If during this probing |
| 4156 | the path becomes inactive, this rate is lowered to the normal |
| 4157 | HEARTBEAT rate. At the expiration of the RTO timer, the error |
| 4158 | counter of any path that was probed but not CONFIRMED is incremented |
| 4159 | by one and subjected to path failure detection, as defined in section |
| 4160 | 8.2. When probing UNCONFIRMED addresses, however, the association |
| 4161 | overall error count is NOT incremented. |
| 4162 | |
| 4163 | The number of HEARTBEATS sent at each RTO SHOULD be limited by the |
| 4164 | HB.Max.Burst parameter. It is an implementation decision as to how |
| 4165 | to distribute HEARTBEATS to the peer's addresses for path |
| 4166 | verification. |
| 4167 | |
| 4168 | Whenever a path is confirmed, an indication MAY be given to the upper |
| 4169 | layer. |
| 4170 | |
| 4171 | An endpoint MUST NOT send any chunks to an UNCONFIRMED address, with |
| 4172 | the following exceptions: |
| 4173 | |
| 4174 | - A HEARTBEAT including a nonce MAY be sent to an UNCONFIRMED |
| 4175 | address. |
| 4176 | |
| 4177 | - A HEARTBEAT-ACK MAY be sent to an UNCONFIRMED address. |
| 4178 | |
| 4179 | - A COOKIE-ACK MAY be sent to an UNCONFIRMED address, but it MUST be |
| 4180 | bundled with a HEARTBEAT including a nonce. An implementation that |
| 4181 | does NOT support bundling MUST NOT send a COOKIE-ACK to an |
| 4182 | UNCONFIRMED address. |
| 4183 | |
| 4184 | - A COOKE-ECHO MAY be sent to an UNCONFIRMED address, but it MUST be |
| 4185 | bundled with a HEARTBEAT including a nonce, and the packet MUST NOT |
| 4186 | exceed the path MTU. If the implementation does NOT support |
| 4187 | bundling or if the bundled COOKIE-ECHO plus HEARTBEAT (including |
| 4188 | nonce) would exceed the path MTU, then the implementation MUST NOT |
| 4189 | send a COOKIE-ECHO to an UNCONFIRMED address. |
| 4190 | |
| 4191 | --------- |
| 4192 | Old text: (Section 14) |
| 4193 | --------- |
| 4194 | |
| 4195 | 14. Suggested SCTP Protocol Parameter Values |
| 4196 | |
| 4197 | The following protocol parameters are RECOMMENDED: |
| 4198 | |
| 4199 | |
| 4200 | |
| 4201 | |
| 4202 | Stewart, et al. Informational [Page 75] |
| 4203 | |
| 4204 | RFC 4460 SCTP Errata April 2006 |
| 4205 | |
| 4206 | |
| 4207 | RTO.Initial - 3 seconds |
| 4208 | RTO.Min - 1 second |
| 4209 | RTO.Max - 60 seconds |
| 4210 | RTO.Alpha - 1/8 |
| 4211 | RTO.Beta - 1/4 |
| 4212 | Valid.Cookie.Life - 60 seconds |
| 4213 | Association.Max.Retrans - 10 attempts |
| 4214 | Path.Max.Retrans - 5 attempts (per destination address) |
| 4215 | Max.Init.Retransmits - 8 attempts |
| 4216 | HB.interval - 30 seconds |
| 4217 | |
| 4218 | --------- |
| 4219 | New text: (Section 14) |
| 4220 | --------- |
| 4221 | |
| 4222 | 14. Suggested SCTP Protocol Parameter Values |
| 4223 | |
| 4224 | The following protocol parameters are RECOMMENDED: |
| 4225 | |
| 4226 | RTO.Initial - 3 seconds |
| 4227 | RTO.Min - 1 second |
| 4228 | RTO.Max - 60 seconds |
| 4229 | Max.Burst - 4 |
| 4230 | RTO.Alpha - 1/8 |
| 4231 | RTO.Beta - 1/4 |
| 4232 | Valid.Cookie.Life - 60 seconds |
| 4233 | Association.Max.Retrans - 10 attempts |
| 4234 | Path.Max.Retrans - 5 attempts (per destination address) |
| 4235 | Max.Init.Retransmits - 8 attempts |
| 4236 | HB.Interval - 30 seconds |
| 4237 | HB.Max.Burst - 1 |
| 4238 | |
| 4239 | 2.36.3. Solution Description |
| 4240 | |
| 4241 | By properly setting up initial path state and accelerated probing via |
| 4242 | HEARTBEAT's, a new association can verify that all addresses |
| 4243 | presented by a peer belong to that peer. |
| 4244 | |
| 4245 | 2.37. ICMP Handling Procedures |
| 4246 | |
| 4247 | 2.37.1. Description of the Problem |
| 4248 | |
| 4249 | RFC 2960 does not describe how ICMP messages should be processed by |
| 4250 | an SCTP endpoint. |
| 4251 | |
| 4252 | |
| 4253 | |
| 4254 | |
| 4255 | |
| 4256 | |
| 4257 | |
| 4258 | Stewart, et al. Informational [Page 76] |
| 4259 | |
| 4260 | RFC 4460 SCTP Errata April 2006 |
| 4261 | |
| 4262 | |
| 4263 | 2.37.2. Text Changes to the Document |
| 4264 | |
| 4265 | -------- |
| 4266 | Old text: None |
| 4267 | -------- |
| 4268 | |
| 4269 | --------- |
| 4270 | New text |
| 4271 | --------- |
| 4272 | |
| 4273 | 11.5. Protection of Non-SCTP Capable Hosts. |
| 4274 | |
| 4275 | To provide a non-SCTP capable host with the same level of protection |
| 4276 | against attacks as for SCTP-capable ones, all SCTP stacks MUST |
| 4277 | implement the ICMP handling described in Appendix C. |
| 4278 | |
| 4279 | When an SCTP stack receives a packet containing multiple control or |
| 4280 | DATA chunks and the processing of the packet requires the sending of |
| 4281 | multiple chunks in response, the sender of the response chunk(s) MUST |
| 4282 | NOT send more than one packet. If bundling is supported, multiple |
| 4283 | response chunks that fit into a single packet MAY be bundled together |
| 4284 | into one single response packet. If bundling is not supported, then |
| 4285 | the sender MUST NOT send more than one response chunk and MUST |
| 4286 | discard all other responses. Note that this rule does NOT apply to a |
| 4287 | SACK chunk, since a SACK chunk is, in itself, a response to DATA and |
| 4288 | a SACK does not require a response of more DATA. |
| 4289 | |
| 4290 | An SCTP implementation SHOULD abort the association if it receives a |
| 4291 | SACK acknowledging a TSN that has not been sent. |
| 4292 | |
| 4293 | An SCTP implementation that receives an INIT that would require a |
| 4294 | large packet in response, due to the inclusion of multiple ERROR |
| 4295 | parameters, MAY (at its discretion) elect to omit some or all of the |
| 4296 | ERROR parameters to reduce the size of the INIT-ACK. Due to a |
| 4297 | combination of the size of the COOKIE parameter and the number of |
| 4298 | addresses a receiver of an INIT may be indicating to a peer, it is |
| 4299 | always possible that the INIT-ACK will be larger than the original |
| 4300 | INIT. An SCTP implementation SHOULD attempt to make the INIT-ACK as |
| 4301 | small as possible to reduce the possibility of byte amplification |
| 4302 | attacks. |
| 4303 | |
| 4304 | --------- |
| 4305 | Old text: None |
| 4306 | --------- |
| 4307 | |
| 4308 | |
| 4309 | |
| 4310 | |
| 4311 | |
| 4312 | |
| 4313 | |
| 4314 | Stewart, et al. Informational [Page 77] |
| 4315 | |
| 4316 | RFC 4460 SCTP Errata April 2006 |
| 4317 | |
| 4318 | |
| 4319 | --------- |
| 4320 | New text: (Appendix C) |
| 4321 | --------- |
| 4322 | |
| 4323 | Appendix C ICMP Handling |
| 4324 | |
| 4325 | Whenever an ICMP message is received by an SCTP endpoint the |
| 4326 | following procedures MUST be followed to ensure proper utilization of |
| 4327 | the information being provided by layer 3. |
| 4328 | |
| 4329 | ICMP1) An implementation MAY ignore all ICMPv4 messages where the |
| 4330 | type field is not set to "Destination Unreachable". |
| 4331 | |
| 4332 | ICMP2) An implementation MAY ignore all ICMPv6 messages where the |
| 4333 | type field is not "Destination Unreachable, "Parameter |
| 4334 | Problem" or "Packet Too Big". |
| 4335 | |
| 4336 | ICMP3) An implementation MAY ignore any ICMPv4 messages where the |
| 4337 | code does not indicate "Protocol Unreachable" or |
| 4338 | "Fragmentation Needed". |
| 4339 | |
| 4340 | ICMP4) An implementation MAY ignore all ICMPv6 messages of type |
| 4341 | "Parameter Problem" if the code is not "Unrecognized next |
| 4342 | header type encountered". |
| 4343 | |
| 4344 | ICMP5) An implementation MUST use the payload of the ICMP message (V4 |
| 4345 | or V6) to locate the association that sent the message that |
| 4346 | ICMP is responding to. If the association cannot be found, an |
| 4347 | implementation SHOULD ignore the ICMP message. |
| 4348 | |
| 4349 | ICMP6) An implementation MUST validate that the Verification Tag |
| 4350 | contained in the ICMP message matches the verification tag of |
| 4351 | the peer. If the Verification Tag is not 0 and does NOT |
| 4352 | match, discard the ICMP message. If it is 0 and the ICMP |
| 4353 | message contains enough bytes to verify that the chunk type is |
| 4354 | an INIT chunk and that the initiate tag matches the tag of the |
| 4355 | peer, continue with ICMP7. If the ICMP message is too short |
| 4356 | or the chunk type or the initiate tag does not match, silently |
| 4357 | discard the packet. |
| 4358 | |
| 4359 | ICMP7) If the ICMP message is either a V6 "Packet Too Big" or a V4 |
| 4360 | "Fragmentation Needed", an implementation MAY process this |
| 4361 | information as defined for PATH MTU discovery. |
| 4362 | |
| 4363 | ICMP8) If the ICMP code is a "Unrecognized next header type |
| 4364 | encountered" or a "Protocol Unreachable", an implementation |
| 4365 | MUST treat this message as an abort with the T bit set if it |
| 4366 | does not contain an INIT chunk. If it does contain an INIT |
| 4367 | |
| 4368 | |
| 4369 | |
| 4370 | Stewart, et al. Informational [Page 78] |
| 4371 | |
| 4372 | RFC 4460 SCTP Errata April 2006 |
| 4373 | |
| 4374 | |
| 4375 | chunk and the association is in COOKIE-WAIT state, handle the |
| 4376 | ICMP message like an ABORT. |
| 4377 | |
| 4378 | ICMP9) If the ICMPv6 code is "Destination Unreachable", the |
| 4379 | implementation MAY mark the destination into the unreachable |
| 4380 | state or alternatively increment the path error counter. |
| 4381 | |
| 4382 | Note that these procedures differ from RFC 1122 [1] and from its |
| 4383 | requirements for processing of port-unreachable messages and the |
| 4384 | requirements that an implementation MUST abort associations in |
| 4385 | response to a "protocol unreachable" message. Port unreachable |
| 4386 | messages are not processed, since an implementation will send an |
| 4387 | ABORT, not a port unreachable. The stricter handling of the |
| 4388 | "protocol unreachable" message is due to security concerns for hosts |
| 4389 | that do NOT support SCTP. |
| 4390 | |
| 4391 | 2.37.3. Solution Description |
| 4392 | |
| 4393 | The new appendix now describes proper handling of ICMP messages in |
| 4394 | conjunction with SCTP. |
| 4395 | |
| 4396 | 2.38. Checksum |
| 4397 | |
| 4398 | 2.38.1. Description of the problem |
| 4399 | |
| 4400 | RFC 3309 [6] changes the SCTP checksum due to weaknesses in the |
| 4401 | original Adler 32 checksum for small messages. This document, being |
| 4402 | used as a guide for a cut and paste replacement to update RFC 2960, |
| 4403 | thus also needs to incorporate the checksum changes. The idea is |
| 4404 | that one could apply all changes found in this guide to a copy of RFC |
| 4405 | 2960 and have a "new" document that has ALL changes (including RFC |
| 4406 | 3309). |
| 4407 | |
| 4408 | 2.38.2. Text Changes to the Document |
| 4409 | |
| 4410 | --------- |
| 4411 | Old text: |
| 4412 | --------- |
| 4413 | |
| 4414 | 6.8 Adler-32 Checksum Calculation |
| 4415 | |
| 4416 | When sending an SCTP packet, the endpoint MUST strengthen the data |
| 4417 | integrity of the transmission by including the Adler-32 checksum |
| 4418 | value calculated on the packet, as described below. |
| 4419 | |
| 4420 | After the packet is constructed (containing the SCTP common header |
| 4421 | and one or more control or DATA chunks), the transmitter shall: |
| 4422 | |
| 4423 | |
| 4424 | |
| 4425 | |
| 4426 | Stewart, et al. Informational [Page 79] |
| 4427 | |
| 4428 | RFC 4460 SCTP Errata April 2006 |
| 4429 | |
| 4430 | |
| 4431 | 1) Fill in the proper Verification Tag in the SCTP common header |
| 4432 | and initialize the checksum field to 0's. |
| 4433 | |
| 4434 | 2) Calculate the Adler-32 checksum of the whole packet, including |
| 4435 | the SCTP common header and all the chunks. Refer to |
| 4436 | appendix B for details of the Adler-32 algorithm. And, |
| 4437 | |
| 4438 | 3) Put the resultant value into the checksum field in the common |
| 4439 | header, and leave the rest of the bits unchanged. |
| 4440 | |
| 4441 | When an SCTP packet is received, the receiver MUST first check the |
| 4442 | Adler-32 checksum: |
| 4443 | |
| 4444 | 1) Store the received Adler-32 checksum value aside, |
| 4445 | |
| 4446 | 2) Replace the 32 bits of the checksum field in the received SCTP |
| 4447 | packet with all '0's and calculate an Adler-32 checksum value |
| 4448 | of the whole received packet. And, |
| 4449 | |
| 4450 | 3) Verify that the calculated Adler-32 checksum is the same as the |
| 4451 | received Adler-32 checksum. If not, the receiver MUST treat |
| 4452 | the packet as an invalid SCTP packet. |
| 4453 | |
| 4454 | The default procedure for handling invalid SCTP packets is to |
| 4455 | silently discard them. |
| 4456 | |
| 4457 | --------- |
| 4458 | New text: |
| 4459 | --------- |
| 4460 | |
| 4461 | 6.8 CRC-32c Checksum Calculation |
| 4462 | |
| 4463 | When sending an SCTP packet, the endpoint MUST strengthen the data |
| 4464 | integrity of the transmission by including the CRC32c checksum |
| 4465 | value calculated on the packet, as described below. |
| 4466 | |
| 4467 | After the packet is constructed (containing the SCTP common header |
| 4468 | and one or more control or DATA chunks), the transmitter MUST |
| 4469 | |
| 4470 | 1) fill in the proper Verification Tag in the SCTP common header |
| 4471 | and initialize the checksum field to '0's, |
| 4472 | |
| 4473 | 2) calculate the CRC32c checksum of the whole packet, including |
| 4474 | the SCTP common header and all the chunks (refer to |
| 4475 | appendix B for details of the CRC32c algorithm); and |
| 4476 | |
| 4477 | 3) put the resultant value into the checksum field in the common |
| 4478 | header, and leave the rest of the bits unchanged. |
| 4479 | |
| 4480 | |
| 4481 | |
| 4482 | Stewart, et al. Informational [Page 80] |
| 4483 | |
| 4484 | RFC 4460 SCTP Errata April 2006 |
| 4485 | |
| 4486 | |
| 4487 | When an SCTP packet is received, the receiver MUST first check the |
| 4488 | CRC32c checksum as follows: |
| 4489 | |
| 4490 | 1) Store the received CRC32c checksum value aside. |
| 4491 | |
| 4492 | 2) Replace the 32 bits of the checksum field in the received SCTP |
| 4493 | packet with all '0's and calculate a CRC32c checksum value of |
| 4494 | the whole received packet. |
| 4495 | |
| 4496 | 3) Verify that the calculated CRC32c checksum is the same as the |
| 4497 | received CRC32c checksum. If it is not, the receiver MUST |
| 4498 | treat the packet as an invalid SCTP packet. |
| 4499 | |
| 4500 | The default procedure for handling invalid SCTP packets is to |
| 4501 | silently discard them. |
| 4502 | |
| 4503 | Any hardware implementation SHOULD be done in a way that is |
| 4504 | verifiable by the software. |
| 4505 | |
| 4506 | |
| 4507 | --------- |
| 4508 | Old text: |
| 4509 | --------- |
| 4510 | |
| 4511 | Appendix B Alder 32 bit checksum calculation |
| 4512 | |
| 4513 | The Adler-32 checksum calculation given in this appendix is |
| 4514 | copied from [RFC1950]. |
| 4515 | |
| 4516 | Adler-32 is composed of two sums accumulated per byte: s1 is the |
| 4517 | sum of all bytes, s2 is the sum of all s1 values. Both sums are |
| 4518 | done modulo 65521. s1 is initialized to 1, s2 to zero. The |
| 4519 | Adler-32 checksum is stored as s2*65536 + s1 in network byte |
| 4520 | order. |
| 4521 | |
| 4522 | The following C code computes the Adler-32 checksum of a data |
| 4523 | buffer. It is written for clarity, not for speed. The sample |
| 4524 | code is in the ANSI C programming language. Non C users may |
| 4525 | find it easier to read with these hints: |
| 4526 | |
| 4527 | & Bitwise AND operator. |
| 4528 | >> Bitwise right shift operator. When applied to an |
| 4529 | unsigned quantity, as here, right shift inserts zero bit(s) |
| 4530 | at the left. |
| 4531 | << Bitwise left shift operator. Left shift inserts zero |
| 4532 | bit(s) at the right. |
| 4533 | ++ "n++" increments the variable n. |
| 4534 | % modulo operator: a % b is the remainder of a divided by b. |
| 4535 | |
| 4536 | |
| 4537 | |
| 4538 | Stewart, et al. Informational [Page 81] |
| 4539 | |
| 4540 | RFC 4460 SCTP Errata April 2006 |
| 4541 | |
| 4542 | |
| 4543 | #define BASE 65521 /* largest prime smaller than 65536 */ |
| 4544 | /* |
| 4545 | Update a running Adler-32 checksum with the bytes buf[0..len-1] |
| 4546 | and return the updated checksum. The Adler-32 checksum should |
| 4547 | be initialized to 1. |
| 4548 | |
| 4549 | Usage example: |
| 4550 | |
| 4551 | unsigned long adler = 1L; |
| 4552 | |
| 4553 | while (read_buffer(buffer, length) != EOF) { |
| 4554 | adler = update_adler32(adler, buffer, length); |
| 4555 | } |
| 4556 | if (adler != original_adler) error(); |
| 4557 | */ |
| 4558 | unsigned long update_adler32(unsigned long adler, |
| 4559 | unsigned char *buf, int len) |
| 4560 | { |
| 4561 | unsigned long s1 = adler & 0xffff; |
| 4562 | unsigned long s2 = (adler >> 16) & 0xffff; |
| 4563 | int n; |
| 4564 | |
| 4565 | for (n = 0; n < len; n++) { |
| 4566 | s1 = (s1 + buf[n]) % BASE; |
| 4567 | s2 = (s2 + s1) % BASE; |
| 4568 | } |
| 4569 | return (s2 << 16) + s1; |
| 4570 | } |
| 4571 | |
| 4572 | /* Return the adler32 of the bytes buf[0..len-1] */ |
| 4573 | unsigned long adler32(unsigned char *buf, int len) |
| 4574 | { |
| 4575 | return update_adler32(1L, buf, len); |
| 4576 | } |
| 4577 | |
| 4578 | --------- |
| 4579 | New text: |
| 4580 | --------- |
| 4581 | |
| 4582 | Appendix B CRC32c Checksum Calculation |
| 4583 | |
| 4584 | We define a 'reflected value' as one that is the opposite of the |
| 4585 | normal bit order of the machine. The 32-bit CRC is calculated as |
| 4586 | described for CRC-32c and uses the polynomial code 0x11EDC6F41 |
| 4587 | (Castagnoli93) or x^32+x^28+x^27+x^26+x^25 |
| 4588 | +x^23+x^22+x^20+x^19+x^18+x^14+x^13+x^11+x^10+x^9+x^8+x^6+x^0. |
| 4589 | The CRC is computed using a procedure similar to ETHERNET CRC |
| 4590 | [ITU32], modified to reflect transport level usage. |
| 4591 | |
| 4592 | |
| 4593 | |
| 4594 | Stewart, et al. Informational [Page 82] |
| 4595 | |
| 4596 | RFC 4460 SCTP Errata April 2006 |
| 4597 | |
| 4598 | |
| 4599 | CRC computation uses polynomial division. A message |
| 4600 | bit-string M is transformed to a polynomial, M(X), and the CRC |
| 4601 | is calculated from M(X) using polynomial arithmetic [PETERSON 72]. |
| 4602 | |
| 4603 | When CRCs are used at the link layer, the polynomial is derived |
| 4604 | from on-the-wire bit ordering: the first bit 'on the wire' is the |
| 4605 | high-order coefficient. Since SCTP is a transport-level protocol, |
| 4606 | it cannot know the actual serial-media bit ordering. Moreover, |
| 4607 | different links in the path between SCTP endpoints may use |
| 4608 | different link-level bit orders. |
| 4609 | |
| 4610 | A convention must therefore be established for mapping SCTP |
| 4611 | transport messages to polynomials for purposes of CRC computation. |
| 4612 | The bit-ordering for mapping SCTP messages to polynomials is that |
| 4613 | bytes are taken most-significant first; but within each byte, bits |
| 4614 | are taken least-significant first. The first byte of the message |
| 4615 | provides the eight highest coefficients. Within each byte, |
| 4616 | the least-significant SCTP bit gives the most significant |
| 4617 | polynomial coefficient within that byte, and the most-significant |
| 4618 | SCTP bit is the least significant polynomial coefficient in that |
| 4619 | byte. (This bit ordering is sometimes called 'mirrored' or |
| 4620 | 'reflected' [WILLIAMS93].) CRC polynomials are to be transformed |
| 4621 | back into SCTP transport-level byte values, using a consistent |
| 4622 | mapping. |
| 4623 | |
| 4624 | The SCTP transport-level CRC value should be calculated as |
| 4625 | follows: |
| 4626 | |
| 4627 | - CRC input data are assigned to a byte stream, numbered from |
| 4628 | 0 to N-1. |
| 4629 | |
| 4630 | - The transport-level byte-stream is mapped to a polynomial |
| 4631 | value. An N-byte PDU with j bytes numbered 0 to N-1 is |
| 4632 | considered as coefficients of a polynomial M(x) of order |
| 4633 | 8N-1, with bit 0 of byte j being coefficient x^(8(N-j)-8), |
| 4634 | and bit 7 of byte j being coefficient x^(8(N-j)-1). |
| 4635 | |
| 4636 | - The CRC remainder register is initialized with all 1s and |
| 4637 | the CRC is computed with an algorithm that simultaneously |
| 4638 | multiplies by x^32 and divides by the CRC polynomial. |
| 4639 | |
| 4640 | - The polynomial is multiplied by x^32 and divided by G(x), |
| 4641 | the generator polynomial, producing a remainder R(x) of |
| 4642 | degree less than or equal to 31. |
| 4643 | |
| 4644 | - The coefficients of R(x) are considered a 32-bit sequence. |
| 4645 | |
| 4646 | |
| 4647 | |
| 4648 | |
| 4649 | |
| 4650 | Stewart, et al. Informational [Page 83] |
| 4651 | |
| 4652 | RFC 4460 SCTP Errata April 2006 |
| 4653 | |
| 4654 | |
| 4655 | - The bit sequence is complemented. The result is the CRC |
| 4656 | polynomial. |
| 4657 | |
| 4658 | - The CRC polynomial is mapped back into SCTP transport-level |
| 4659 | bytes. The coefficient of x^31 gives the value of bit 7 of |
| 4660 | SCTP byte 0, and the coefficient of x^24 gives the value of |
| 4661 | bit 0 of byte 0. The coefficient of x^7 gives bit 7 of |
| 4662 | byte 3, and the coefficient of x^0 gives bit 0 of byte 3. |
| 4663 | The resulting four-byte transport-level sequence is the |
| 4664 | 32-bit SCTP checksum value. |
| 4665 | |
| 4666 | IMPLEMENTATION NOTE: Standards documents, textbooks, and vendor |
| 4667 | literature on CRCs often follow an alternative formulation, in |
| 4668 | which the register used to hold the remainder of the |
| 4669 | long-division algorithm is initialized to zero rather than |
| 4670 | all-1s, and instead the first 32 bits of the message are |
| 4671 | complemented. The long-division algorithm used in our |
| 4672 | formulation is specified such that the initial |
| 4673 | multiplication by 2^32 and the long-division are combined into |
| 4674 | one simultaneous operation. For such algorithms, and for |
| 4675 | messages longer than 64 bits, the two specifications are |
| 4676 | precisely equivalent. That equivalence is the intent of |
| 4677 | this document. |
| 4678 | |
| 4679 | Implementors of SCTP are warned that both specifications are to be |
| 4680 | found in the literature, sometimes with no restriction on the |
| 4681 | long-division algorithm. The choice of formulation in this |
| 4682 | document is to permit non-SCTP usage, where the same CRC |
| 4683 | algorithm may be used to protect messages shorter than 64 bits. |
| 4684 | |
| 4685 | There may be a computational advantage in validating the |
| 4686 | Association against the Verification Tag, prior to performing a |
| 4687 | checksum, as invalid tags will result in the same action as a bad |
| 4688 | checksum in most cases. The exceptions for this technique would |
| 4689 | be INIT and some SHUTDOWN-COMPLETE exchanges, as well as a stale |
| 4690 | COOKIE-ECHO. These special case exchanges must represent small |
| 4691 | packets and will minimize the effect of the checksum calculation. |
| 4692 | |
| 4693 | |
| 4694 | --------- |
| 4695 | Old text: (Section 18) |
| 4696 | --------- |
| 4697 | |
| 4698 | 18. Bibliography |
| 4699 | |
| 4700 | [ALLMAN99] Allman, M. and Paxson, V., "On Estimating End-to-End |
| 4701 | Network Path Properties", Proc. SIGCOMM'99, 1999. |
| 4702 | |
| 4703 | |
| 4704 | |
| 4705 | |
| 4706 | Stewart, et al. Informational [Page 84] |
| 4707 | |
| 4708 | RFC 4460 SCTP Errata April 2006 |
| 4709 | |
| 4710 | |
| 4711 | [FALL96] Fall, K. and Floyd, S., Simulation-based Comparisons of |
| 4712 | Tahoe, Reno, and SACK TCP, Computer Communications Review, |
| 4713 | V. 26 N. 3, July 1996, pp. 5-21. |
| 4714 | |
| 4715 | [RFC1750] Eastlake, D. (ed.), "Randomness Recommendations for |
| 4716 | Security", RFC 1750, December 1994. |
| 4717 | |
| 4718 | [RFC1950] Deutsch P. and J. Gailly, "ZLIB Compressed Data Format |
| 4719 | Specification version 3.3", RFC 1950, May 1996. |
| 4720 | |
| 4721 | [RFC2104] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: Keyed- |
| 4722 | Hashing for Message Authentication", RFC 2104, March 1997. |
| 4723 | |
| 4724 | [RFC2196] Fraser, B., "Site Security Handbook", FYI 8, RFC 2196, |
| 4725 | September 1997. |
| 4726 | |
| 4727 | [RFC2522] Karn, P. and W. Simpson, "Photuris: Session-Key Management |
| 4728 | Protocol", RFC 2522, March 1999. |
| 4729 | |
| 4730 | [SAVAGE99] Savage, S., Cardwell, N., Wetherall, D., and Anderson, T., |
| 4731 | "TCP Congestion Control with a Misbehaving Receiver", ACM |
| 4732 | Computer Communication Review, 29(5), October 1999. |
| 4733 | |
| 4734 | --------- |
| 4735 | New text: (Section 18, including changes from 2.11) |
| 4736 | --------- |
| 4737 | |
| 4738 | 18. Bibliography |
| 4739 | |
| 4740 | [ALLMAN99] Allman, M. and Paxson, V., "On Estimating End-to-End |
| 4741 | Network Path Properties", Proc. SIGCOMM'99, 1999. |
| 4742 | |
| 4743 | [FALL96] Fall, K. and Floyd, S., Simulation-based Comparisons of |
| 4744 | Tahoe, Reno, and SACK TCP, Computer Communications Review, |
| 4745 | V. 26 N. 3, July 1996, pp. 5-21. |
| 4746 | |
| 4747 | [ITU32] ITU-T Recommendation V.42, "Error-correcting |
| 4748 | procedures for DCEs using asynchronous-to-synchronous |
| 4749 | conversion", Section 8.1.1.6.2, October 1996. |
| 4750 | |
| 4751 | [PETERSON 1972] W. W. Peterson and E.J Weldon, Error Correcting |
| 4752 | Codes, 2nd Edition, MIT Press, Cambridge, |
| 4753 | Massachusetts. |
| 4754 | |
| 4755 | [RFC1750] Eastlake, D., Ed., "Randomness Recommendations for |
| 4756 | Security", RFC 1750, December 1994. |
| 4757 | |
| 4758 | |
| 4759 | |
| 4760 | |
| 4761 | |
| 4762 | Stewart, et al. Informational [Page 85] |
| 4763 | |
| 4764 | RFC 4460 SCTP Errata April 2006 |
| 4765 | |
| 4766 | |
| 4767 | [RFC1858] Ziemba, G., Reed, D. and Traina P., "Security |
| 4768 | Considerations for IP Fragment Filtering", RFC 1858, |
| 4769 | October 1995. |
| 4770 | |
| 4771 | [RFC1950] Deutsch P. and J. Gailly, "ZLIB Compressed Data Format |
| 4772 | Specification version 3.3", RFC 1950, May 1996. |
| 4773 | |
| 4774 | [RFC2104] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: Keyed- |
| 4775 | Hashing for Message Authentication", RFC 2104, March 1997. |
| 4776 | |
| 4777 | [RFC2196] Fraser, B., "Site Security Handbook", FYI 8, RFC 2196, |
| 4778 | September 1997. |
| 4779 | |
| 4780 | [RFC2522] Karn, P. and W. Simpson, "Photuris: Session-Key Management |
| 4781 | Protocol", RFC 2522, March 1999. |
| 4782 | |
| 4783 | [SAVAGE99] Savage, S., Cardwell, N., Wetherall, D., and Anderson, T., |
| 4784 | "TCP Congestion Control with a Misbehaving Receiver", ACM |
| 4785 | Computer Communication Review, 29(5), October 1999. |
| 4786 | |
| 4787 | [WILLIAMS93] Williams, R., "A PAINLESS GUIDE TO CRC ERROR |
| 4788 | DETECTION ALGORITHMS" - Internet publication, August |
| 4789 | 1993, |
| 4790 | http://www.geocities.com/SiliconValley/Pines/ |
| 4791 | 8659/crc.htm. |
| 4792 | |
| 4793 | 2.38.3. Solution Description |
| 4794 | |
| 4795 | This change adds to the implementor's guide the complete set of |
| 4796 | changes that, when combined with RFC 2960 [5], encompasses the |
| 4797 | changes from RFC 3309 [6]. |
| 4798 | |
| 4799 | 2.39. Retransmission Policy |
| 4800 | |
| 4801 | 2.39.1. Description of the Problem |
| 4802 | |
| 4803 | The current retransmission policy (send all retransmissions an |
| 4804 | alternate destination) in the specification has performance issues |
| 4805 | under certain loss conditions with multihomed endpoints. Instead, |
| 4806 | fast retransmissions should be sent to the same destination, and only |
| 4807 | timeout retransmissions should be sent to an alternate destination |
| 4808 | [4]. |
| 4809 | |
| 4810 | |
| 4811 | |
| 4812 | |
| 4813 | |
| 4814 | |
| 4815 | |
| 4816 | |
| 4817 | |
| 4818 | Stewart, et al. Informational [Page 86] |
| 4819 | |
| 4820 | RFC 4460 SCTP Errata April 2006 |
| 4821 | |
| 4822 | |
| 4823 | 2.39.2. Text Changes to the Document |
| 4824 | |
| 4825 | --------- |
| 4826 | Old text: (Section 6.4) |
| 4827 | --------- |
| 4828 | |
| 4829 | Furthermore, when its peer is multi-homed, an endpoint SHOULD try to |
| 4830 | retransmit a chunk to an active destination transport address that is |
| 4831 | different from the last destination address to which the DATA chunk |
| 4832 | was sent. |
| 4833 | |
| 4834 | --------- |
| 4835 | New text: (Section 6.4) |
| 4836 | --------- |
| 4837 | |
| 4838 | Furthermore, when its peer is multi-homed, an endpoint SHOULD try to |
| 4839 | retransmit a chunk that timed out to an active destination transport |
| 4840 | address that is different from the last destination address to which |
| 4841 | the DATA chunk was sent. |
| 4842 | |
| 4843 | --------- |
| 4844 | Old text: (Section 6.4.1) |
| 4845 | --------- |
| 4846 | |
| 4847 | When retransmitting data, if the endpoint is multi-homed, it should |
| 4848 | consider each source-destination address pair in its retransmission |
| 4849 | selection policy. When retransmitting the endpoint should attempt to |
| 4850 | pick the most divergent source-destination pair from the original |
| 4851 | source-destination pair to which the packet was transmitted. |
| 4852 | |
| 4853 | --------- |
| 4854 | New text: (Section 6.4.1) |
| 4855 | --------- |
| 4856 | |
| 4857 | When retransmitting data that timed out, if the endpoint is |
| 4858 | multi-homed, it should consider each source-destination address |
| 4859 | pair in its retransmission selection policy. When retransmitting |
| 4860 | timed out data, the endpoint should attempt to pick the most |
| 4861 | divergent source-destination pair from the original |
| 4862 | source-destination pair to which the packet was transmitted. |
| 4863 | |
| 4864 | 2.39.3. Solution Description |
| 4865 | |
| 4866 | The above wording changes clarify that only timeout retransmissions |
| 4867 | should be sent to an alternate active destination. |
| 4868 | |
| 4869 | |
| 4870 | |
| 4871 | |
| 4872 | |
| 4873 | |
| 4874 | Stewart, et al. Informational [Page 87] |
| 4875 | |
| 4876 | RFC 4460 SCTP Errata April 2006 |
| 4877 | |
| 4878 | |
| 4879 | 2.40. Port Number 0 |
| 4880 | |
| 4881 | 2.40.1. Description of the Problem |
| 4882 | |
| 4883 | The port number 0 has a special semantic in various APIs. For |
| 4884 | example, in the socket API, if the user specifies 0, the SCTP |
| 4885 | implementation chooses an appropriate port number for the user. |
| 4886 | Therefore, the port number 0 should not be used on the wire. |
| 4887 | |
| 4888 | 2.40.2. Text Changes to the Document |
| 4889 | |
| 4890 | --------- |
| 4891 | Old text: (Section 3.1) |
| 4892 | --------- |
| 4893 | |
| 4894 | Source Port Number: 16 bits (unsigned integer) |
| 4895 | |
| 4896 | This is the SCTP sender's port number. It can be used by the |
| 4897 | receiver in combination with the source IP address, the SCTP |
| 4898 | destination port, and possibly the destination IP address to |
| 4899 | identify the association to which this packet belongs. |
| 4900 | |
| 4901 | Destination Port Number: 16 bits (unsigned integer) |
| 4902 | |
| 4903 | This is the SCTP port number to which this packet is destined. |
| 4904 | The receiving host will use this port number to de-multiplex |
| 4905 | the SCTP packet to the correct receiving endpoint/application. |
| 4906 | |
| 4907 | --------- |
| 4908 | New text: (Section 3.1) |
| 4909 | --------- |
| 4910 | |
| 4911 | Source Port Number: 16 bits (unsigned integer) |
| 4912 | |
| 4913 | This is the SCTP sender's port number. It can be used by the |
| 4914 | receiver in combination with the source IP address, the SCTP |
| 4915 | destination port and possibly the destination IP address to |
| 4916 | identify the association to which this packet belongs. |
| 4917 | The port number 0 MUST NOT be used. |
| 4918 | |
| 4919 | Destination Port Number: 16 bits (unsigned integer) |
| 4920 | |
| 4921 | This is the SCTP port number to which this packet is destined. |
| 4922 | The receiving host will use this port number to de-multiplex |
| 4923 | the SCTP packet to the correct receiving endpoint/application. |
| 4924 | The port number 0 MUST NOT be used. |
| 4925 | |
| 4926 | |
| 4927 | |
| 4928 | |
| 4929 | |
| 4930 | Stewart, et al. Informational [Page 88] |
| 4931 | |
| 4932 | RFC 4460 SCTP Errata April 2006 |
| 4933 | |
| 4934 | |
| 4935 | 2.40.3. Solution Description |
| 4936 | |
| 4937 | It is clearly stated that the port number 0 is an invalid value on |
| 4938 | the wire. |
| 4939 | |
| 4940 | 2.41. T Bit |
| 4941 | |
| 4942 | 2.41.1. Description of the Problem |
| 4943 | |
| 4944 | The description of the T bit as the bit describing whether a TCB has |
| 4945 | been destroyed is misleading. In addition, the procedure described |
| 4946 | in Section 2.13 is not as precise as needed. |
| 4947 | |
| 4948 | 2.41.2. Text Changes to the Document |
| 4949 | |
| 4950 | --------- |
| 4951 | Old text: (Section 3.3.7) |
| 4952 | --------- |
| 4953 | |
| 4954 | T bit: 1 bit |
| 4955 | The T bit is set to 0 if the sender had a TCB that it |
| 4956 | destroyed. If the sender did not have a TCB it should set |
| 4957 | this bit to 1. |
| 4958 | |
| 4959 | --------- |
| 4960 | New text: (Section 3.3.7) |
| 4961 | --------- |
| 4962 | |
| 4963 | T bit: 1 bit |
| 4964 | The T bit is set to 0 if the sender filled in the |
| 4965 | Verification Tag expected by the peer. If the Verification |
| 4966 | Tag is reflected, the T bit MUST be set to 1. Reflecting means |
| 4967 | that the sent Verification Tag is the same as the received |
| 4968 | one. |
| 4969 | |
| 4970 | |
| 4971 | --------- |
| 4972 | Old text: (Section 3.3.13) |
| 4973 | --------- |
| 4974 | |
| 4975 | T bit: 1 bit |
| 4976 | The T bit is set to 0 if the sender had a TCB that it |
| 4977 | destroyed. If the sender did not have a TCB it should set |
| 4978 | this bit to 1. |
| 4979 | |
| 4980 | |
| 4981 | |
| 4982 | |
| 4983 | |
| 4984 | |
| 4985 | |
| 4986 | Stewart, et al. Informational [Page 89] |
| 4987 | |
| 4988 | RFC 4460 SCTP Errata April 2006 |
| 4989 | |
| 4990 | |
| 4991 | --------- |
| 4992 | New text: (Section 3.3.13) |
| 4993 | --------- |
| 4994 | |
| 4995 | T bit: 1 bit |
| 4996 | The T bit is set to 0 if the sender filled in the |
| 4997 | Verification Tag expected by the peer. If the Verification |
| 4998 | Tag is reflected, the T bit MUST be set to 1. Reflecting means |
| 4999 | that the sent Verification Tag is the same as the received |
| 5000 | one. |
| 5001 | |
| 5002 | |
| 5003 | --------- |
| 5004 | Old text: (Section 8.4) |
| 5005 | --------- |
| 5006 | |
| 5007 | 3) If the packet contains an INIT chunk with a Verification Tag |
| 5008 | set to '0', process it as described in Section 5.1. |
| 5009 | Otherwise, |
| 5010 | |
| 5011 | --------- |
| 5012 | New text: (Section 8.4) |
| 5013 | --------- |
| 5014 | 3) If the packet contains an INIT chunk with a Verification Tag |
| 5015 | set to '0', process it as described in Section 5.1. If, for |
| 5016 | whatever reason, the INIT cannot be processed normally and |
| 5017 | an ABORT has to be sent in response, the Verification Tag of |
| 5018 | the packet containing the ABORT chunk MUST be the Initiate |
| 5019 | tag of the received INIT chunk, and the T-Bit of the ABORT |
| 5020 | chunk has to be set to 0, indicating that the Verification |
| 5021 | Tag is NOT reflected. |
| 5022 | |
| 5023 | |
| 5024 | --------- |
| 5025 | Old text: (Section 8.4) |
| 5026 | --------- |
| 5027 | 5) If the packet contains a SHUTDOWN ACK chunk, the receiver |
| 5028 | should respond to the sender of the OOTB packet with a |
| 5029 | SHUTDOWN COMPLETE. When sending the SHUTDOWN COMPLETE, the |
| 5030 | receiver of the OOTB packet must fill in the Verification |
| 5031 | Tag field of the outbound packet with the Verification Tag |
| 5032 | received in the SHUTDOWN ACK and set the T-bit in the Chunk |
| 5033 | Flags to indicate that no TCB was found. Otherwise, |
| 5034 | |
| 5035 | |
| 5036 | |
| 5037 | |
| 5038 | |
| 5039 | |
| 5040 | |
| 5041 | |
| 5042 | Stewart, et al. Informational [Page 90] |
| 5043 | |
| 5044 | RFC 4460 SCTP Errata April 2006 |
| 5045 | |
| 5046 | |
| 5047 | --------- |
| 5048 | New text: (Section 8.4) |
| 5049 | --------- |
| 5050 | |
| 5051 | 5) If the packet contains a SHUTDOWN ACK chunk, the receiver |
| 5052 | should respond to the sender of the OOTB packet with a |
| 5053 | SHUTDOWN COMPLETE. When sending the SHUTDOWN COMPLETE, the |
| 5054 | receiver of the OOTB packet must fill in the Verification |
| 5055 | Tag field of the outbound packet with the Verification Tag |
| 5056 | received in the SHUTDOWN ACK and set the T-bit in the |
| 5057 | Chunk Flags to indicate that the Verification Tag is |
| 5058 | reflected. Otherwise, |
| 5059 | |
| 5060 | |
| 5061 | --------- |
| 5062 | Old text: (Section 8.4) |
| 5063 | --------- |
| 5064 | |
| 5065 | 8) The receiver should respond to the sender of the OOTB packet |
| 5066 | with an ABORT. When sending the ABORT, the receiver of the |
| 5067 | OOTB packet MUST fill in the Verification Tag field of the |
| 5068 | outbound packet with the value found in the Verification |
| 5069 | Tag field of the OOTB packet and set the T-bit in the Chunk |
| 5070 | Flags to indicate that no TCB was found. After sending this |
| 5071 | ABORT, the receiver of the OOTB packet shall discard the |
| 5072 | OOTB packet and take no further action. |
| 5073 | |
| 5074 | --------- |
| 5075 | New text: (Section 8.4) |
| 5076 | --------- |
| 5077 | |
| 5078 | 8) The receiver should respond to the sender of the OOTB packet |
| 5079 | with an ABORT. When sending the ABORT, the receiver of the |
| 5080 | OOTB packet MUST fill in the Verification Tag field of the |
| 5081 | outbound packet with the value found in the Verification Tag |
| 5082 | field of the OOTB packet and set the T-bit in the Chunk Flags |
| 5083 | to indicate that the Verification Tag is reflected. After |
| 5084 | sending this ABORT, the receiver of the OOTB packet shall |
| 5085 | discard the OOTB packet and take no further action. |
| 5086 | |
| 5087 | |
| 5088 | --------- |
| 5089 | Old text: (Section 8.5.1) |
| 5090 | --------- |
| 5091 | |
| 5092 | B) Rules for packet carrying ABORT: |
| 5093 | |
| 5094 | |
| 5095 | |
| 5096 | |
| 5097 | |
| 5098 | Stewart, et al. Informational [Page 91] |
| 5099 | |
| 5100 | RFC 4460 SCTP Errata April 2006 |
| 5101 | |
| 5102 | |
| 5103 | - The endpoint shall always fill in the Verification Tag |
| 5104 | field of the outbound packet with the destination |
| 5105 | endpoint's tag value if it is known. |
| 5106 | |
| 5107 | - If the ABORT is sent in response to an OOTB packet, the |
| 5108 | endpoint MUST follow the procedure described in |
| 5109 | Section 8.4. |
| 5110 | |
| 5111 | - The receiver MUST accept the packet if the Verification |
| 5112 | Tag matches either its own tag, OR the tag of its peer. |
| 5113 | Otherwise, the receiver MUST silently discard the packet |
| 5114 | and take no further action. |
| 5115 | |
| 5116 | --------- |
| 5117 | New text: (Section 8.5.1) |
| 5118 | --------- |
| 5119 | |
| 5120 | B) Rules for packet carrying ABORT: |
| 5121 | |
| 5122 | - The endpoint MUST always fill in the Verification Tag |
| 5123 | field of the outbound packet with the destination |
| 5124 | endpoint's tag value, if it is known. |
| 5125 | |
| 5126 | - If the ABORT is sent in response to an OOTB packet, the |
| 5127 | endpoint MUST follow the procedure described in |
| 5128 | Section 8.4. |
| 5129 | |
| 5130 | - The receiver of an ABORT MUST accept the packet |
| 5131 | if the Verification Tag field of the packet matches its |
| 5132 | own tag and the T bit is not set |
| 5133 | OR |
| 5134 | if it is set to its peer's tag and the T bit is set in |
| 5135 | the Chunk Flags. |
| 5136 | Otherwise, the receiver MUST silently discard the packet |
| 5137 | and take no further action. |
| 5138 | |
| 5139 | |
| 5140 | --------- |
| 5141 | Old text: (Section 8.5.1) |
| 5142 | --------- |
| 5143 | |
| 5144 | C) Rules for packet carrying SHUTDOWN COMPLETE: |
| 5145 | |
| 5146 | - When sending a SHUTDOWN COMPLETE, if the receiver of the |
| 5147 | SHUTDOWN ACK has a TCB then the destination endpoint's |
| 5148 | tag MUST be used. Only where no TCB exists should the |
| 5149 | sender use the Verification Tag from the SHUTDOWN ACK. |
| 5150 | |
| 5151 | |
| 5152 | |
| 5153 | |
| 5154 | Stewart, et al. Informational [Page 92] |
| 5155 | |
| 5156 | RFC 4460 SCTP Errata April 2006 |
| 5157 | |
| 5158 | |
| 5159 | - The receiver of a SHUTDOWN COMPLETE shall accept the |
| 5160 | packet if the Verification Tag field of the packet matches |
| 5161 | its own tag OR it is set to its peer's tag and the T bit |
| 5162 | is set in the Chunk Flags. Otherwise, the receiver MUST |
| 5163 | silently discard the packet and take no further action. |
| 5164 | An endpoint MUST ignore the SHUTDOWN COMPLETE if it is |
| 5165 | not in the SHUTDOWN-ACK-SENT state. |
| 5166 | |
| 5167 | --------- |
| 5168 | New text: (Section 8.5.1) |
| 5169 | --------- |
| 5170 | |
| 5171 | C) Rules for packet carrying SHUTDOWN COMPLETE: |
| 5172 | |
| 5173 | - When sending a SHUTDOWN COMPLETE, if the receiver of the |
| 5174 | SHUTDOWN ACK has a TCB, then the destination endpoint's tag |
| 5175 | MUST be used, and the T-bit MUST NOT be set. Only where no |
| 5176 | TCB exists should the sender use the Verification Tag from |
| 5177 | the SHUTDOWN ACK, and MUST set the T-bit. |
| 5178 | |
| 5179 | - The receiver of a SHUTDOWN COMPLETE shall accept the packet |
| 5180 | if the Verification Tag field of the packet matches its own |
| 5181 | tag and the T bit is not set |
| 5182 | OR |
| 5183 | if it is set to its peer's tag and the T bit is set in the |
| 5184 | Chunk Flags. |
| 5185 | Otherwise, the receiver MUST silently discard the packet |
| 5186 | and take no further action. An endpoint MUST ignore the |
| 5187 | SHUTDOWN COMPLETE if it is not in the SHUTDOWN-ACK-SENT |
| 5188 | state. |
| 5189 | |
| 5190 | 2.41.3. Solution Description |
| 5191 | |
| 5192 | The description of the T bit now clearly describes the semantic of |
| 5193 | the bit. The procedures for receiving the T bit have been clarified. |
| 5194 | |
| 5195 | 2.42. Unknown Parameter Handling |
| 5196 | |
| 5197 | 2.42.1. Description of the Problem |
| 5198 | |
| 5199 | The description given in Section 2.33 does not state clearly whether |
| 5200 | an INIT-ACK or COOKIE-ECHO is sent. |
| 5201 | |
| 5202 | 2.42.2. Text Changes to the Document |
| 5203 | |
| 5204 | The changes given here already include changes suggested in Section |
| 5205 | 2.2, 2.27, and 2.33 of this document. |
| 5206 | |
| 5207 | |
| 5208 | |
| 5209 | |
| 5210 | Stewart, et al. Informational [Page 93] |
| 5211 | |
| 5212 | RFC 4460 SCTP Errata April 2006 |
| 5213 | |
| 5214 | |
| 5215 | --------- |
| 5216 | Old text: (Section 3.2.1) |
| 5217 | --------- |
| 5218 | |
| 5219 | 00 - Stop processing this SCTP packet and discard it do not process |
| 5220 | any further chunks within it. |
| 5221 | |
| 5222 | 01 - Stop processing this SCTP packet and discard it, do not process |
| 5223 | any further chunks within it, and report the unrecognized |
| 5224 | parameter in an 'Unrecognized Parameter Type' (in either an |
| 5225 | ERROR or in the INIT ACK). |
| 5226 | |
| 5227 | 10 - Skip this parameter and continue processing. |
| 5228 | |
| 5229 | 11 - Skip this parameter and continue processing but report the |
| 5230 | unrecognized parameter in an 'Unrecognized Parameter Type' (in |
| 5231 | either an ERROR or in the INIT ACK). |
| 5232 | |
| 5233 | --------- |
| 5234 | New text: (Section 3.2.1) |
| 5235 | --------- |
| 5236 | |
| 5237 | 00 - Stop processing this parameter; do not process |
| 5238 | any further parameters within this chunk. |
| 5239 | |
| 5240 | 01 - Stop processing this parameter, do not process |
| 5241 | any further parameters within this chunk, and report the |
| 5242 | unrecognized parameter in an 'Unrecognized Parameter', as |
| 5243 | described in 3.2.2. |
| 5244 | |
| 5245 | 10 - Skip this parameter and continue processing. |
| 5246 | |
| 5247 | 11 - Skip this parameter and continue processing but report the |
| 5248 | unrecognized parameter in an 'Unrecognized Parameter', as |
| 5249 | described in 3.2.2. |
| 5250 | |
| 5251 | Please note that in all four cases an INIT-ACK or COOKIE-ECHO |
| 5252 | chunk is sent. In the 00 or 01 case the processing of the |
| 5253 | parameters after the unknown parameter is canceled, but no |
| 5254 | processing already done is rolled back. |
| 5255 | |
| 5256 | |
| 5257 | |
| 5258 | |
| 5259 | |
| 5260 | |
| 5261 | |
| 5262 | |
| 5263 | |
| 5264 | |
| 5265 | |
| 5266 | Stewart, et al. Informational [Page 94] |
| 5267 | |
| 5268 | RFC 4460 SCTP Errata April 2006 |
| 5269 | |
| 5270 | |
| 5271 | --------- |
| 5272 | New text: (Note: no old text; clarification added in Section 3.2) |
| 5273 | --------- |
| 5274 | |
| 5275 | 3.2.2. Reporting of Unrecognized Parameters |
| 5276 | |
| 5277 | If the receiver of an INIT chunk detects unrecognized parameters |
| 5278 | and has to report them according to Section 3.2.1, it MUST put |
| 5279 | the 'Unrecognized Parameter' parameter(s) in the INIT-ACK chunk |
| 5280 | sent in response to the INIT-chunk. Note that if the receiver |
| 5281 | of the INIT chunk is NOT going to establish an association (e.g., |
| 5282 | due to lack of resources), an 'Unrecognized Parameter' would NOT |
| 5283 | be included with any ABORT being sent to the sender of the INIT. |
| 5284 | |
| 5285 | If the receiver of an INIT-ACK chunk detects unrecognized |
| 5286 | parameters and has to report them according to Section 3.2.1, it |
| 5287 | SHOULD bundle the ERROR chunk containing the 'Unrecognized |
| 5288 | Parameters' error cause with the COOKIE-ECHO chunk sent in |
| 5289 | response to the INIT-ACK chunk. If the receiver of the INIT-ACK |
| 5290 | cannot bundle the COOKIE-ECHO chunk with the ERROR chunk, the |
| 5291 | ERROR chunk MAY be sent separately but not before the COOKIE-ACK |
| 5292 | has been received. |
| 5293 | |
| 5294 | Note: Any time a COOKIE-ECHO is sent in a packet, it MUST be the |
| 5295 | first chunk. |
| 5296 | |
| 5297 | 2.42.3. Solution Description |
| 5298 | |
| 5299 | The new text clearly states that an INIT-ACK or COOKIE-ECHO has to be |
| 5300 | sent. |
| 5301 | |
| 5302 | 2.43. Cookie Echo Chunk |
| 5303 | |
| 5304 | 2.43.1. Description of the Problem |
| 5305 | |
| 5306 | The description given in Section 3.3.11 of RFC 2960 [5] is unclear as |
| 5307 | to how the COOKIE-ECHO is composed. |
| 5308 | |
| 5309 | 2.43.2. Text Changes to the Document |
| 5310 | |
| 5311 | --------- |
| 5312 | Old text: (Section 3.3.11) |
| 5313 | --------- |
| 5314 | Cookie: variable size |
| 5315 | |
| 5316 | This field must contain the exact cookie received in the State |
| 5317 | Cookie parameter from the previous INIT ACK. |
| 5318 | |
| 5319 | |
| 5320 | |
| 5321 | |
| 5322 | Stewart, et al. Informational [Page 95] |
| 5323 | |
| 5324 | RFC 4460 SCTP Errata April 2006 |
| 5325 | |
| 5326 | |
| 5327 | An implementation SHOULD make the cookie as small as possible |
| 5328 | to insure interoperability. |
| 5329 | |
| 5330 | --------- |
| 5331 | New text: (Section 3.3.11) |
| 5332 | --------- |
| 5333 | Cookie: variable size |
| 5334 | |
| 5335 | This field must contain the exact cookie received in the State |
| 5336 | Cookie parameter from the previous INIT ACK. |
| 5337 | |
| 5338 | An implementation SHOULD make the cookie as small as possible |
| 5339 | to ensure interoperability. |
| 5340 | |
| 5341 | Note: A Cookie Echo does NOT contain a State Cookie |
| 5342 | Parameter; instead, the data within the State Cookie's |
| 5343 | Parameter Value becomes the data within the Cookie Echo's |
| 5344 | Chunk Value. This allows an implementation to change only |
| 5345 | the first two bytes of the State Cookie parameter to become |
| 5346 | a Cookie Echo Chunk. |
| 5347 | |
| 5348 | 2.43.3. Solution Description |
| 5349 | |
| 5350 | The new text adds a note that helps clarify that a Cookie Echo chunk |
| 5351 | is nothing more than the State Cookie parameter with only two bytes |
| 5352 | modified. |
| 5353 | |
| 5354 | 2.44. Partial Chunks |
| 5355 | |
| 5356 | 2.44.1. Description of the Problem |
| 5357 | |
| 5358 | Section 6.10 of RFC 2960 [5] uses the notion of 'partial chunks' |
| 5359 | without defining it. |
| 5360 | |
| 5361 | 2.44.2. Text Changes to the Document |
| 5362 | |
| 5363 | --------- |
| 5364 | Old text: (Section 6.10) |
| 5365 | --------- |
| 5366 | Partial chunks MUST NOT be placed in an SCTP packet. |
| 5367 | |
| 5368 | --------- |
| 5369 | New text: (Section 6.10) |
| 5370 | --------- |
| 5371 | Partial chunks MUST NOT be placed in an SCTP packet. A partial |
| 5372 | chunk is a chunk that is not completely contained in the SCTP |
| 5373 | packet; i.e., the SCTP packet is too short to contain all the bytes |
| 5374 | of the chunk as indicated by the chunk length. |
| 5375 | |
| 5376 | |
| 5377 | |
| 5378 | Stewart, et al. Informational [Page 96] |
| 5379 | |
| 5380 | RFC 4460 SCTP Errata April 2006 |
| 5381 | |
| 5382 | |
| 5383 | 2.44.3. Solution Description |
| 5384 | |
| 5385 | The new text adds a definition of 'partial chunks'. |
| 5386 | |
| 5387 | 2.45. Non-unicast Addresses |
| 5388 | |
| 5389 | 2.45.1. Description of the Problem |
| 5390 | |
| 5391 | Section 8.4 of RFC 2960 [5] forces the OOTB handling to discard all |
| 5392 | non-unicast addresses. This leaves future use of anycast addresses |
| 5393 | in question. With the addition of the add-ip feature, SCTP should be |
| 5394 | able to easily handle anycast INIT s that can be followed, after |
| 5395 | association setup, with a delete of the anycast address from the |
| 5396 | association. |
| 5397 | |
| 5398 | 2.45.2. Text Changes to the Document |
| 5399 | |
| 5400 | --------- |
| 5401 | Old text: (Section 8.4) |
| 5402 | --------- |
| 5403 | 8.4 Handle "Out of the blue" Packets |
| 5404 | |
| 5405 | An SCTP packet is called an "out of the blue" (OOTB) packet if |
| 5406 | it is correctly formed, i.e., passed the receiver's Adler-32 |
| 5407 | check (see Section 6.8), but the receiver is not able to |
| 5408 | identify the association to which this packet belongs. |
| 5409 | |
| 5410 | The receiver of an OOTB packet MUST do the following: |
| 5411 | |
| 5412 | 1) If the OOTB packet is to or from a non-unicast address, |
| 5413 | silently discard the packet. Otherwise, |
| 5414 | |
| 5415 | |
| 5416 | --------- |
| 5417 | New text: (Section 8.4) |
| 5418 | --------- |
| 5419 | |
| 5420 | 8.4. Handle "Out of the Blue" Packets |
| 5421 | |
| 5422 | An SCTP packet is called an "out of the blue" (OOTB) packet if |
| 5423 | it is correctly formed (i.e., passed the receiver's CRC32c |
| 5424 | check; see Section 6.8), but the receiver is not able to identify |
| 5425 | the association to which this packet belongs. |
| 5426 | |
| 5427 | The receiver of an OOTB packet MUST do the following: |
| 5428 | |
| 5429 | 1) If the OOTB packet is to or from a non-unicast address, a |
| 5430 | receiver SHOULD silently discard the packet. Otherwise, |
| 5431 | |
| 5432 | |
| 5433 | |
| 5434 | Stewart, et al. Informational [Page 97] |
| 5435 | |
| 5436 | RFC 4460 SCTP Errata April 2006 |
| 5437 | |
| 5438 | |
| 5439 | 2.45.3. Solution Description |
| 5440 | |
| 5441 | The loosening of the wording to a SHOULD will now allow future use of |
| 5442 | anycast addresses. Note that no changes are made to Section |
| 5443 | 11.2.4.1, since responding to broadcast addresses could lead to |
| 5444 | flooding attacks and implementors should pay careful attention to |
| 5445 | these words. |
| 5446 | |
| 5447 | 2.46. Processing of ABORT Chunks |
| 5448 | |
| 5449 | 2.46.1. Description of the Problem |
| 5450 | |
| 5451 | Section 3.3.7 of RFC 2960 [5] requires an SCTP endpoint to silently |
| 5452 | discard ABORT chunks received for associations that do not exist. It |
| 5453 | is not clear what this means in the COOKIE-WAIT state, for example. |
| 5454 | Therefore, it was not clear whether an ABORT sent in response to an |
| 5455 | INIT should be processed or silently discarded. |
| 5456 | |
| 5457 | 2.46.2. Text Changes to the Document |
| 5458 | |
| 5459 | --------- |
| 5460 | Old text: (Section 3.3.7) |
| 5461 | --------- |
| 5462 | |
| 5463 | If an endpoint receives an ABORT with a format error or for an |
| 5464 | association that doesn't exist, it MUST silently discard it. |
| 5465 | |
| 5466 | --------- |
| 5467 | New text: (Section 3.3.7) |
| 5468 | --------- |
| 5469 | |
| 5470 | If an endpoint receives an ABORT with a format error or no |
| 5471 | TCB is found, it MUST silently discard it. |
| 5472 | |
| 5473 | 2.46.3. Solution Description |
| 5474 | |
| 5475 | It is now clearly stated that an ABORT chunk should be processed |
| 5476 | whenever a TCB is found. |
| 5477 | |
| 5478 | |
| 5479 | |
| 5480 | |
| 5481 | |
| 5482 | |
| 5483 | |
| 5484 | |
| 5485 | |
| 5486 | |
| 5487 | |
| 5488 | |
| 5489 | |
| 5490 | Stewart, et al. Informational [Page 98] |
| 5491 | |
| 5492 | RFC 4460 SCTP Errata April 2006 |
| 5493 | |
| 5494 | |
| 5495 | 2.47. Sending of ABORT Chunks |
| 5496 | |
| 5497 | 2.47.1. Description of the Problem |
| 5498 | |
| 5499 | Section 5.1 of RFC 2960 [5] requires that an ABORT chunk be sent in |
| 5500 | response to an INIT chunk when there is no listening end point. To |
| 5501 | make port scanning harder, someone might not want these ABORTs to be |
| 5502 | received by the sender of the INIT chunks. Currently, the only way |
| 5503 | to enforce this is by using a firewall that discards the packets |
| 5504 | containing the INIT chunks or the packets containing the ABORT |
| 5505 | chunks. It is desirable that the same can be done without a middle |
| 5506 | box. |
| 5507 | |
| 5508 | 2.47.2. Text Changes to the Document |
| 5509 | |
| 5510 | --------- |
| 5511 | Old text: (Section 5.1) |
| 5512 | --------- |
| 5513 | |
| 5514 | If an endpoint receives an INIT, INIT ACK, or COOKIE ECHO chunk |
| 5515 | but decides not to establish the new association due to missing |
| 5516 | mandatory parameters in the received INIT or INIT ACK, invalid |
| 5517 | parameter values, or lack of local resources, it MUST respond with |
| 5518 | an ABORT chunk. |
| 5519 | |
| 5520 | --------- |
| 5521 | New text: (Section 5.1) |
| 5522 | --------- |
| 5523 | |
| 5524 | If an endpoint receives an INIT, INIT ACK, or COOKIE ECHO chunk |
| 5525 | but decides not to establish the new association due to missing |
| 5526 | mandatory parameters in the received INIT or INIT ACK, invalid |
| 5527 | parameter values, or lack of local resources, it SHOULD respond |
| 5528 | with an ABORT chunk. |
| 5529 | |
| 5530 | 2.47.3. Solution Description |
| 5531 | |
| 5532 | The requirement of sending ABORT chunks is relaxed such that an |
| 5533 | implementation can decide not to send ABORT chunks. |
| 5534 | |
| 5535 | 2.48. Handling of Supported Address Types Parameter |
| 5536 | |
| 5537 | 2.48.1. Description of the Problem |
| 5538 | |
| 5539 | The sender of the INIT chunk can include a 'Supported Address Types' |
| 5540 | parameter to indicate which address families are supported. It is |
| 5541 | unclear how an INIT chunk should be processed where the source |
| 5542 | address of the packet containing the INIT chunk or listed addresses |
| 5543 | |
| 5544 | |
| 5545 | |
| 5546 | Stewart, et al. Informational [Page 99] |
| 5547 | |
| 5548 | RFC 4460 SCTP Errata April 2006 |
| 5549 | |
| 5550 | |
| 5551 | within the INIT chunk indicate that more address types are supported |
| 5552 | than those listed in the 'Supported Address Types' parameter. |
| 5553 | |
| 5554 | 2.48.2. Text Changes to the Document |
| 5555 | |
| 5556 | The changes given here already include changes suggested in Section |
| 5557 | 2.28 of this document. |
| 5558 | |
| 5559 | --------- |
| 5560 | Old text: (Section 5.1.2) |
| 5561 | --------- |
| 5562 | |
| 5563 | IMPLEMENTATION NOTE: In the case that the receiver of an INIT ACK |
| 5564 | fails to resolve the address parameter due to an unsupported type, |
| 5565 | it can abort the initiation process and then attempt a |
| 5566 | re-initiation by using a 'Supported Address Types' parameter in |
| 5567 | the new INIT to indicate what types of address it prefers. |
| 5568 | |
| 5569 | --------- |
| 5570 | New text: (Section 5.1.2) |
| 5571 | --------- |
| 5572 | |
| 5573 | IMPLEMENTATION NOTE: In the case that the receiver of an INIT ACK |
| 5574 | fails to resolve the address parameter due to an unsupported type, |
| 5575 | it can abort the initiation process and then attempt a re- |
| 5576 | initiation by using a 'Supported Address Types' parameter in the |
| 5577 | new INIT to indicate what types of address it prefers. |
| 5578 | |
| 5579 | IMPLEMENTATION NOTE: If an SCTP endpoint that only supports either |
| 5580 | IPv4 or IPv6 receives IPv4 and IPv6 addresses in an INIT or INIT- |
| 5581 | ACK chunk from its peer, it MUST use all the addresses belonging |
| 5582 | to the supported address family. The other addresses MAY be |
| 5583 | ignored. The endpoint SHOULD NOT respond with any kind of error |
| 5584 | indication. |
| 5585 | |
| 5586 | IMPLEMENTATION NOTE: If an SCTP endpoint lists in the 'Supported |
| 5587 | Address Types' parameter either IPv4 or IPv6, but uses the other |
| 5588 | family for sending the packet containing the INIT chunk, or if it |
| 5589 | also lists addresses of the other family in the INIT chunk, then |
| 5590 | the address family that is not listed in the 'Supported Address |
| 5591 | Types' parameter SHOULD also be considered as supported by the |
| 5592 | receiver of the INIT chunk. The receiver of the INIT chunk SHOULD |
| 5593 | NOT respond with any kind of error indication. |
| 5594 | |
| 5595 | 2.48.3. Solution Description |
| 5596 | |
| 5597 | It is now clearly described how these Supported Address Types |
| 5598 | parameters with incorrect data should be handled. |
| 5599 | |
| 5600 | |
| 5601 | |
| 5602 | Stewart, et al. Informational [Page 100] |
| 5603 | |
| 5604 | RFC 4460 SCTP Errata April 2006 |
| 5605 | |
| 5606 | |
| 5607 | 2.49. Handling of Unexpected Parameters |
| 5608 | |
| 5609 | 2.49.1. Description of the Problem |
| 5610 | |
| 5611 | RFC 2960 [5] clearly describes how unknown parameters in the INIT and |
| 5612 | INIT-ACK chunk should be processed. But it is not described how |
| 5613 | unexpected parameters should be processed. A parameter is unexpected |
| 5614 | if it is known and is an optional parameter in either the INIT or |
| 5615 | INIT-ACK chunk but is received in the chunk for which it is not an |
| 5616 | optional parameter. For example, the 'Supported Address Types' |
| 5617 | parameter would be an unexpected parameter if contained in an INIT- |
| 5618 | ACK chunk. |
| 5619 | |
| 5620 | 2.49.2. Text Changes to the Document |
| 5621 | |
| 5622 | --------- |
| 5623 | Old text: (Section 3.3.2) |
| 5624 | --------- |
| 5625 | |
| 5626 | Note 4: This parameter, when present, specifies all the address |
| 5627 | types the sending endpoint can support. The absence of this |
| 5628 | parameter indicates that the sending endpoint can support any |
| 5629 | address type. |
| 5630 | |
| 5631 | --------- |
| 5632 | New text: (Section 3.3.2) |
| 5633 | --------- |
| 5634 | |
| 5635 | Note 4: This parameter, when present, specifies all the address |
| 5636 | types the sending endpoint can support. The absence of this |
| 5637 | parameter indicates that the sending endpoint can support any |
| 5638 | address type. |
| 5639 | |
| 5640 | IMPLEMENTATION NOTE: If an INIT chunk is received with known |
| 5641 | parameters that are not optional parameters of the INIT chunk |
| 5642 | then the receiver SHOULD process the INIT chunk and send back |
| 5643 | an INIT-ACK. The receiver of the INIT chunk MAY bundle an ERROR |
| 5644 | chunk with the COOKIE-ACK chunk later. However, restrictive |
| 5645 | implementations MAY send back an ABORT chunk in response to |
| 5646 | the INIT chunk. |
| 5647 | |
| 5648 | |
| 5649 | |
| 5650 | |
| 5651 | |
| 5652 | |
| 5653 | |
| 5654 | |
| 5655 | |
| 5656 | |
| 5657 | |
| 5658 | Stewart, et al. Informational [Page 101] |
| 5659 | |
| 5660 | RFC 4460 SCTP Errata April 2006 |
| 5661 | |
| 5662 | |
| 5663 | --------- |
| 5664 | Old text: (Section 3.3.3) |
| 5665 | --------- |
| 5666 | |
| 5667 | IMPLEMENTATION NOTE: An implementation MUST be prepared to receive |
| 5668 | a INIT ACK that is quite large (more than 1500 bytes) due to the |
| 5669 | variable size of the state cookie AND the variable address list. |
| 5670 | For example if a responder to the INIT has 1000 IPv4 addresses |
| 5671 | it wishes to send, it would need at least 8,000 bytes to encode |
| 5672 | this in the INIT ACK. |
| 5673 | |
| 5674 | --------- |
| 5675 | New text: (Section 3.3.3) |
| 5676 | --------- |
| 5677 | |
| 5678 | IMPLEMENTATION NOTE: An implementation MUST be prepared to receive |
| 5679 | a INIT ACK that is quite large (more than 1500 bytes) due to the |
| 5680 | variable size of the state cookie AND the variable address list. |
| 5681 | For example, if a responder to the INIT has 1000 IPv4 addresses |
| 5682 | it wishes to send, it would need at least 8,000 bytes to encode |
| 5683 | this in the INIT ACK. |
| 5684 | |
| 5685 | IMPLEMENTATION NOTE: If an INIT-ACK chunk is received with known |
| 5686 | parameters that are not optional parameters of the INIT-ACK |
| 5687 | chunk, then the receiver SHOULD process the INIT-ACK chunk and |
| 5688 | send back a COOKIE-ECHO. The receiver of the INIT-ACK chunk |
| 5689 | MAY bundle an ERROR chunk with the COOKIE-ECHO chunk. However, |
| 5690 | restrictive implementations MAY send back an ABORT chunk in |
| 5691 | response to the INIT-ACK chunk. |
| 5692 | |
| 5693 | 2.49.3. Solution Description |
| 5694 | |
| 5695 | It is now stated how unexpected parameters should be processed. |
| 5696 | |
| 5697 | 2.50. Payload Protocol Identifier |
| 5698 | |
| 5699 | 2.50.1. Description of the Problem |
| 5700 | |
| 5701 | The current description of the payload protocol identifier does NOT |
| 5702 | highlight the fact that the field is NOT necessarily in network byte |
| 5703 | order. |
| 5704 | |
| 5705 | |
| 5706 | |
| 5707 | |
| 5708 | |
| 5709 | |
| 5710 | |
| 5711 | |
| 5712 | |
| 5713 | |
| 5714 | Stewart, et al. Informational [Page 102] |
| 5715 | |
| 5716 | RFC 4460 SCTP Errata April 2006 |
| 5717 | |
| 5718 | |
| 5719 | 2.50.2. Text Changes to the Document |
| 5720 | |
| 5721 | --------- |
| 5722 | Old text: (Section 3.3.1) |
| 5723 | --------- |
| 5724 | Payload Protocol Identifier: 32 bits (unsigned integer) |
| 5725 | |
| 5726 | This value represents an application (or upper layer) specified |
| 5727 | protocol identifier. This value is passed to SCTP by its upper |
| 5728 | layer and sent to its peer. This identifier is not used by |
| 5729 | SCTP but can be used by certain network entities as well as |
| 5730 | the peer application to identify the type of information being |
| 5731 | carried in this DATA chunk. This field must be sent even in |
| 5732 | fragmented DATA chunks (to make sure it is available for agents |
| 5733 | in the middle of the network). |
| 5734 | |
| 5735 | The value 0 indicates no application identifier is specified by |
| 5736 | the upper layer for this payload data. |
| 5737 | |
| 5738 | --------- |
| 5739 | New text: (Section 3.3.1) |
| 5740 | --------- |
| 5741 | Payload Protocol Identifier: 32 bits (unsigned integer) |
| 5742 | |
| 5743 | This value represents an application (or upper layer) specified |
| 5744 | protocol identifier. This value is passed to SCTP by its upper |
| 5745 | layer and sent to its peer. This identifier is not used by |
| 5746 | SCTP but can be used by certain network entities, as well as by |
| 5747 | the peer application, to identify the type of information being |
| 5748 | carried in this DATA chunk. This field must be sent even in |
| 5749 | fragmented DATA chunks (to make sure it is available for agents |
| 5750 | in the middle of the network). Note that this field is NOT |
| 5751 | touched by an SCTP implementation, therefore its byte order is |
| 5752 | NOT necessarily Big Endian. The upper layer is responsible |
| 5753 | for any byte order conversions to this field. |
| 5754 | |
| 5755 | The value 0 indicates that no application identifier is |
| 5756 | specified by the upper layer for this payload data. |
| 5757 | |
| 5758 | 2.50.3. Solution Description |
| 5759 | |
| 5760 | It is now explicitly stated that the upper layer is responsible for |
| 5761 | the byte order of this field. |
| 5762 | |
| 5763 | |
| 5764 | |
| 5765 | |
| 5766 | |
| 5767 | |
| 5768 | |
| 5769 | |
| 5770 | Stewart, et al. Informational [Page 103] |
| 5771 | |
| 5772 | RFC 4460 SCTP Errata April 2006 |
| 5773 | |
| 5774 | |
| 5775 | 2.51. Karn's Algorithm |
| 5776 | |
| 5777 | 2.51.1. Description of the Problem |
| 5778 | |
| 5779 | The current wording of the use of Karn's algorithm is not descriptive |
| 5780 | enough to ensure that an implementation in a multi-homed association |
| 5781 | does not incorrectly mismeasure the RTT. |
| 5782 | |
| 5783 | 2.51.2. Text Changes to the Document |
| 5784 | |
| 5785 | --------- |
| 5786 | Old text: (Section 6.3.1) |
| 5787 | --------- |
| 5788 | |
| 5789 | C5) Karn's algorithm: RTT measurements MUST NOT be made using |
| 5790 | packets that were retransmitted (and thus for which it is |
| 5791 | ambiguous whether the reply was for the first instance of the |
| 5792 | packet or a later instance) |
| 5793 | --------- |
| 5794 | New text: (Section 6.3.1) |
| 5795 | --------- |
| 5796 | |
| 5797 | C5) Karn's algorithm: RTT measurements MUST NOT be made using |
| 5798 | chunks that were retransmitted (and thus for which it is |
| 5799 | ambiguous whether the reply was for the first instance of |
| 5800 | the chunk or for a later instance) |
| 5801 | |
| 5802 | IMPLEMENTATION NOTE: RTT measurements should only be |
| 5803 | made using a chunk with TSN r if no chunk |
| 5804 | with TSN less than or equal to r is retransmitted |
| 5805 | since r is first sent. |
| 5806 | |
| 5807 | 2.51.3. Solution Description |
| 5808 | |
| 5809 | The above clarification adds an implementation note that will provide |
| 5810 | additional guidance in the application of Karn's algorithm. |
| 5811 | |
| 5812 | 2.52. Fast Retransmit Algorithm |
| 5813 | |
| 5814 | 2.52.1. Description of the Problem |
| 5815 | |
| 5816 | The original SCTP specification is overly conservative in requiring 4 |
| 5817 | missing reports before fast retransmitting a segment. TCP uses 3 |
| 5818 | missing reports or 4 acknowledgements indicating that the same |
| 5819 | segment was received. |
| 5820 | |
| 5821 | |
| 5822 | |
| 5823 | |
| 5824 | |
| 5825 | |
| 5826 | Stewart, et al. Informational [Page 104] |
| 5827 | |
| 5828 | RFC 4460 SCTP Errata April 2006 |
| 5829 | |
| 5830 | |
| 5831 | 2.52.2. Text Changes to the Document |
| 5832 | |
| 5833 | --------- |
| 5834 | Old text: |
| 5835 | --------- |
| 5836 | |
| 5837 | 7.2.4 Fast Retransmit on Gap Reports |
| 5838 | |
| 5839 | In the absence of data loss, an endpoint performs delayed |
| 5840 | acknowledgement. However, whenever an endpoint notices a hole in |
| 5841 | the arriving TSN sequence, it SHOULD start sending a SACK back |
| 5842 | every time a packet arrives carrying data until the |
| 5843 | hole is filled. |
| 5844 | |
| 5845 | Whenever an endpoint receives a SACK that indicates some TSN(s) |
| 5846 | missing, it SHOULD wait for 3 further miss indications (via |
| 5847 | subsequent SACK's) on the same TSN(s) before taking action with |
| 5848 | regard to Fast Retransmit. |
| 5849 | |
| 5850 | |
| 5851 | --------- |
| 5852 | New text: |
| 5853 | --------- |
| 5854 | |
| 5855 | 7.2.4. Fast Retransmit on Gap Reports |
| 5856 | |
| 5857 | In the absence of data loss, an endpoint performs delayed |
| 5858 | acknowledgement. However, whenever an endpoint notices a hole in |
| 5859 | the arriving TSN sequence, it SHOULD start sending a SACK back |
| 5860 | every time a packet arrives carrying data until the |
| 5861 | hole is filled. |
| 5862 | |
| 5863 | Whenever an endpoint receives a SACK that indicates that some |
| 5864 | TSNs are missing, it SHOULD wait for 2 further miss indications |
| 5865 | (via subsequent SACKs for a total of 3 missing reports) on the |
| 5866 | same TSNs before taking action with regard to Fast Retransmit. |
| 5867 | |
| 5868 | 2.52.3. Solution Description |
| 5869 | |
| 5870 | The above changes will make SCTP and TCP behave similarly in terms of |
| 5871 | how fast they engage the Fast Retransmission algorithm upon receiving |
| 5872 | missing reports. |
| 5873 | |
| 5874 | 3. Security Considerations |
| 5875 | |
| 5876 | This document should add no additional security risks to SCTP and in |
| 5877 | fact SHOULD correct some original security flaws within the original |
| 5878 | document once it is incorporated into a RFC 2960 [5] BIS document. |
| 5879 | |
| 5880 | |
| 5881 | |
| 5882 | Stewart, et al. Informational [Page 105] |
| 5883 | |
| 5884 | RFC 4460 SCTP Errata April 2006 |
| 5885 | |
| 5886 | |
| 5887 | 4. Acknowledgements |
| 5888 | |
| 5889 | The authors would like to thank the following people who have |
| 5890 | provided comments and input for this document: |
| 5891 | |
| 5892 | Barry Zuckerman, La Monte Yarroll, Qiaobing Xie, Wang Xiaopeng, |
| 5893 | Jonathan Wood, Jeff Waskow, Mike Turner, John Townsend, Sabina |
| 5894 | Torrente, Cliff Thomas, Yuji Suzuki, Manoj Solanki, Sverre Slotte, |
| 5895 | Keyur Shah, Jan Rovins, Ben Robinson, Renee Revis, Ian Periam, RC |
| 5896 | Monee, Sanjay Rao, Sujith Radhakrishnan, Heinz Prantner, Biren Patel, |
| 5897 | Nathalie Mouellic, Mitch Miers, Bernward Meyknecht, Stan McClellan, |
| 5898 | Oliver Mayor, Tomas Orti Martin, Sandeep Mahajan, David Lehmann, |
| 5899 | Jonathan Lee, Philippe Langlois, Karl Knutson, Joe Keller, Gareth |
| 5900 | Keily, Andreas Jungmaier, Janardhan Iyengar, Mutsuya Irie, John |
| 5901 | Hebert, Kausar Hassan, Fred Hasle, Dan Harrison, Jon Grim, Laurent |
| 5902 | Glaude, Steven Furniss, Atsushi Fukumoto, Ken Fujita, Steve Dimig, |
| 5903 | Thomas Curran, Serkan Cil, Melissa Campbell, Peter Butler, Rob |
| 5904 | Brennan, Harsh Bhondwe, Brian Bidulock, Caitlin Bestler, Jon Berger, |
| 5905 | Robby Benedyk, Stephen Baucke, Sandeep Balani, and Ronnie Sellar. |
| 5906 | |
| 5907 | A special thanks to Mark Allman, who should actually be a co-author |
| 5908 | for his work on the max-burst, but managed to wiggle out due to a |
| 5909 | technicality. Also, we would like to acknowledge Lyndon Ong and Phil |
| 5910 | Conrad for their valuable input and many contributions. |
| 5911 | |
| 5912 | 5. IANA Considerations |
| 5913 | |
| 5914 | This document recommends changes for the RFC 2960 [5] BIS document. |
| 5915 | As such, even though it lists new error cause code, this document in |
| 5916 | itself does NOT define those new codes. Instead, the BIS document |
| 5917 | will make the needed changes to RFC 2960 [5] and thus its IANA |
| 5918 | section will require changes to be made. |
| 5919 | |
| 5920 | 6. Normative References |
| 5921 | |
| 5922 | [1] Braden, R., "Requirements for Internet Hosts - Communication |
| 5923 | Layers", STD 3, RFC 1122, October 1989. |
| 5924 | |
| 5925 | [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement |
| 5926 | Levels", BCP 14, RFC 2119, March 1997. |
| 5927 | |
| 5928 | [3] Caro, A., Shah, K., Iyengar, J., Amer, P., and R. Stewart, "SCTP |
| 5929 | and TCP Variants: Congestion Control Under Multiple Losses", |
| 5930 | Technical Report TR2003-04, Computer and Information Sciences |
| 5931 | Department, University of Delaware, February 2003, |
| 5932 | <http://www.armandocaro.net/papers>. |
| 5933 | |
| 5934 | |
| 5935 | |
| 5936 | |
| 5937 | |
| 5938 | Stewart, et al. Informational [Page 106] |
| 5939 | |
| 5940 | RFC 4460 SCTP Errata April 2006 |
| 5941 | |
| 5942 | |
| 5943 | [4] Caro, A., Amer, P., and R. Stewart, "Retransmission Schemes for |
| 5944 | End-to-end Failover with Transport Layer Multihoming", GLOBECOM, |
| 5945 | November 2004., <http://www.armandocaro.net/papers>. |
| 5946 | |
| 5947 | [5] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer, |
| 5948 | H., Taylor, T., Rytina, I., Kalla, M., Zhang, L., and V. |
| 5949 | Paxson, "Stream Control Transmission Protocol", RFC 2960, |
| 5950 | October 2000. |
| 5951 | |
| 5952 | [6] Stone, J., Stewart, R., and D. Otis, "Stream Control |
| 5953 | Transmission Protocol (SCTP) Checksum Change", RFC 3309, |
| 5954 | September 2002. |
| 5955 | |
| 5956 | |
| 5957 | |
| 5958 | |
| 5959 | |
| 5960 | |
| 5961 | |
| 5962 | |
| 5963 | |
| 5964 | |
| 5965 | |
| 5966 | |
| 5967 | |
| 5968 | |
| 5969 | |
| 5970 | |
| 5971 | |
| 5972 | |
| 5973 | |
| 5974 | |
| 5975 | |
| 5976 | |
| 5977 | |
| 5978 | |
| 5979 | |
| 5980 | |
| 5981 | |
| 5982 | |
| 5983 | |
| 5984 | |
| 5985 | |
| 5986 | |
| 5987 | |
| 5988 | |
| 5989 | |
| 5990 | |
| 5991 | |
| 5992 | |
| 5993 | |
| 5994 | Stewart, et al. Informational [Page 107] |
| 5995 | |
| 5996 | RFC 4460 SCTP Errata April 2006 |
| 5997 | |
| 5998 | |
| 5999 | Authors' Addresses |
| 6000 | |
| 6001 | Randall R. Stewart |
| 6002 | Cisco Systems, Inc. |
| 6003 | 4875 Forest Drive |
| 6004 | Suite 200 |
| 6005 | Columbia, SC 29206 |
| 6006 | USA |
| 6007 | |
| 6008 | EMail: rrs@cisco.com |
| 6009 | |
| 6010 | |
| 6011 | Ivan Arias-Rodriguez |
| 6012 | Nokia Research Center |
| 6013 | PO Box 407 |
| 6014 | FIN-00045 Nokia Group |
| 6015 | Finland |
| 6016 | |
| 6017 | EMail: ivan.arias-rodriguez@nokia.com |
| 6018 | |
| 6019 | |
| 6020 | Kacheong Poon |
| 6021 | Sun Microsystems, Inc. |
| 6022 | 3571 N. First St. |
| 6023 | San Jose, CA 95134 |
| 6024 | USA |
| 6025 | |
| 6026 | EMail: kacheong.poon@sun.com |
| 6027 | |
| 6028 | |
| 6029 | Armando L. Caro Jr. |
| 6030 | BBN Technologies |
| 6031 | 10 Moulton St. |
| 6032 | Cambridge, MA 02138 |
| 6033 | |
| 6034 | EMail: acaro@bbn.com |
| 6035 | URI: http://www.armandocaro.net |
| 6036 | |
| 6037 | |
| 6038 | Michael Tuexen |
| 6039 | Muenster Univ. of Applied Sciences |
| 6040 | Stegerwaldstr. 39 |
| 6041 | 48565 Steinfurt |
| 6042 | Germany |
| 6043 | |
| 6044 | EMail: tuexen@fh-muenster.de |
| 6045 | |
| 6046 | |
| 6047 | |
| 6048 | |
| 6049 | |
| 6050 | Stewart, et al. Informational [Page 108] |
| 6051 | |
| 6052 | RFC 4460 SCTP Errata April 2006 |
| 6053 | |
| 6054 | |
| 6055 | Full Copyright Statement |
| 6056 | |
| 6057 | Copyright (C) The Internet Society (2006). |
| 6058 | |
| 6059 | This document is subject to the rights, licenses and restrictions |
| 6060 | contained in BCP 78, and except as set forth therein, the authors |
| 6061 | retain all their rights. |
| 6062 | |
| 6063 | This document and the information contained herein are provided on an |
| 6064 | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS |
| 6065 | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET |
| 6066 | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, |
| 6067 | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE |
| 6068 | INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED |
| 6069 | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. |
| 6070 | |
| 6071 | Intellectual Property |
| 6072 | |
| 6073 | The IETF takes no position regarding the validity or scope of any |
| 6074 | Intellectual Property Rights or other rights that might be claimed to |
| 6075 | pertain to the implementation or use of the technology described in |
| 6076 | this document or the extent to which any license under such rights |
| 6077 | might or might not be available; nor does it represent that it has |
| 6078 | made any independent effort to identify any such rights. Information |
| 6079 | on the procedures with respect to rights in RFC documents can be |
| 6080 | found in BCP 78 and BCP 79. |
| 6081 | |
| 6082 | Copies of IPR disclosures made to the IETF Secretariat and any |
| 6083 | assurances of licenses to be made available, or the result of an |
| 6084 | attempt made to obtain a general license or permission for the use of |
| 6085 | such proprietary rights by implementers or users of this |
| 6086 | specification can be obtained from the IETF on-line IPR repository at |
| 6087 | http://www.ietf.org/ipr. |
| 6088 | |
| 6089 | The IETF invites any interested party to bring to its attention any |
| 6090 | copyrights, patents or patent applications, or other proprietary |
| 6091 | rights that may cover technology that may be required to implement |
| 6092 | this standard. Please address the information to the IETF at |
| 6093 | ietf-ipr@ietf.org. |
| 6094 | |
| 6095 | Acknowledgement |
| 6096 | |
| 6097 | Funding for the RFC Editor function is provided by the IETF |
| 6098 | Administrative Support Activity (IASA). |
| 6099 | |
| 6100 | |
| 6101 | |
| 6102 | |
| 6103 | |
| 6104 | |
| 6105 | |
| 6106 | Stewart, et al. Informational [Page 109] |
| 6107 | |