idnits 2.17.1 draft-ietf-rsvp-refresh-reduct-02.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** Looks like you're using RFC 2026 boilerplate. This must be updated to follow RFC 3978/3979, as updated by RFC 4748. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- ** The document seems to lack a 1id_guidelines paragraph about Internet-Drafts being working documents. ** The document seems to lack a 1id_guidelines paragraph about the list of current Internet-Drafts. ** The document seems to lack a 1id_guidelines paragraph about the list of Shadow Directories. == No 'Intended status' indicated for this document; assuming Proposed Standard Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) ** The document seems to lack separate sections for Informative/Normative References. All references will be assumed normative when checking for downward references. ** There are 2 instances of too long lines in the document, the longest one being 2 characters in excess of 72. == There are 1 instance of lines with multicast IPv4 addresses in the document. If these are generic example addresses, they should be changed to use the 233.252.0.x range defined in RFC 5771 Miscellaneous warnings: ---------------------------------------------------------------------------- == Using lowercase 'not' together with uppercase 'MUST', 'SHALL', 'SHOULD', or 'RECOMMENDED' is not an accepted usage according to RFC 2119. Please use uppercase 'NOT' together with RFC 2119 keywords (if that is what you mean). Found 'MUST not' in this paragraph: RSVP Bundle messages can only be sent to RSVP neighbors that support bundling. Methods for discovering such information include: (1) manual configuration and (2) observing the Refresh-Reduction-Capable bit (see Section 2) in the received RSVP messages. RSVP Bundle messages MUST not be used if the RSVP neighbor does not support RSVP Bundle messages. -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (January 2000) is 8868 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Possible downref: Non-RFC (?) normative reference: ref. 'Pan' ** Downref: Normative reference to an Informational RFC: RFC 1321 (ref. 'MD5') -- Possible downref: Normative reference to a draft: ref. 'Yuhara' Summary: 8 errors (**), 0 flaws (~~), 3 warnings (==), 5 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 Network Working Group Lou Berger 2 Internet Draft LabN Consulting, LLC 3 Expiration Date: July 2000 4 Der-Hwa Gan 5 Juniper Networks, Inc. 7 George Swallow 8 Cisco Systems, Inc. 10 Ping Pan 11 Bell Labs, Lucent 13 Franco Tommasi 14 Simone Molendini 15 University of Lecce 17 January 2000 19 RSVP Refresh Overhead Reduction Extensions 21 draft-ietf-rsvp-refresh-reduct-02.txt 23 Status of this Memo 25 This document is an Internet-Draft and is in full conformance with 26 all provisions of Section 10 of RFC2026. Internet-Drafts are working 27 documents of the Internet Engineering Task Force (IETF), its areas, 28 and its working groups. Note that other groups may also distribute 29 working documents as Internet-Drafts. 31 Internet-Drafts are draft documents valid for a maximum of six months 32 and may be updated, replaced, or obsoleted by other documents at any 33 time. It is inappropriate to use Internet-Drafts as reference 34 material or to cite them other than as "work in progress." 36 To view the current status of any Internet-Draft, please check the 37 "1id-abstracts.txt" listing contained in an Internet-Drafts Shadow 38 Directory, see http://www.ietf.org/shadow.html. 40 Abstract 42 This document describes a number of mechanisms that can be used to 43 reduce processing overhead requirements of refresh messages, 44 eliminate the state synchronization latency incurred when an RSVP 45 message is lost and, when desired, refreshing state without the 46 transmission of whole refresh messages. The same extensions also 47 support reliable RSVP message delivery on a per hop basis. These 48 extension present no backwards compatibility issues. 50 Contents 52 1 Introduction and Background ............................... 3 53 1.1 Trigger and Refresh Messages .............................. 4 54 2 Refresh-Reduction-Capable Bit ............................. 5 55 3 RSVP Bundle Message ....................................... 6 56 3.1 Bundle Header ............................................. 6 57 3.2 Message Formats ........................................... 7 58 3.3 Sending RSVP Bundle Messages .............................. 8 59 3.4 Receiving RSVP Bundle Messages ............................ 9 60 4 MESSAGE_ID Extension ...................................... 9 61 4.1 Modification of Standard Message Formats .................. 10 62 4.2 MESSAGE_ID Objects ....................................... 10 63 4.3 MESSAGE_ID_ACK and MESSAGE_ID_NACK Objects ................ 11 64 4.4 Ack Message Format ........................................ 12 65 4.5 MESSAGE_ID Object Usage ................................... 12 66 4.6 MESSAGE_ID_ACK Object and MESSAGE_ID_NACK Object Usage .... 15 67 4.7 Multicast Considerations .................................. 15 68 4.7.1 Reference RSVP/Routing Interface .......................... 16 69 4.8 Compatibility ............................................. 17 70 5 Summary Refresh Extension ................................. 17 71 5.1 MESSAGE_ID LIST, SRC_LIST and MCAST_LIST Objects .......... 19 72 5.2 Srefresh Message Format ................................... 25 73 5.3 Srefresh Message Usage .................................... 26 74 5.4 Srefresh NACK ............................................. 29 75 5.5 Preserving RSVP Soft State ................................ 29 76 5.6 Compatibility ............................................. 30 77 6 Reference Exponential Back-Off Procedures ................. 30 78 6.1 Outline of Operation ...................................... 31 79 6.2 Time Parameters ........................................... 31 80 6.3 Example Retransmission Algorithm .......................... 32 81 7 Acknowledgments ........................................... 32 82 8 Security Considerations ................................... 33 83 9 References ................................................ 33 84 10 Authors' Addresses ........................................ 34 85 Changes from previous version 87 o Add IPv6 c-types for MESSAGE_ID_LIST class 88 o Added internal checksum and periodic standard refresh options 89 to Srefresh 90 o Allow use of MESSAGE_ID SRC Lists on multi-access links when 91 so configured 92 o Removed sub-set implementation options (Renamed 93 Bundle-Capable bit to Refresh-Reduction-Capable bit) 94 o Removed ACK on Bundle messages 95 o Add paragraphs on bundling and Ack timing issues 96 o Added default values 97 o Other editorial and consistency related changes 98 o Incorporated MANY changes based on comments from Lixia Zhang 99 and Lan Wang 100 o Changed name of extensions to "Refresh Overhead Reduction" 101 o Changed the MESSAGE_ID object class value to have the form 102 0bbbbbbb from 10bbbbbb 103 o Cleaned up Section 6 105 1. Introduction and Background 107 Standard RSVP [RFC2205] maintains state via the generation of RSVP 108 refresh messages. Refresh messages are used to both synchronize 109 state between RSVP neighbors and to recover from lost RSVP messages. 110 The use of Refresh messages to cover many possible failures has 111 resulted in a number of operational problems. One problem relates to 112 scaling, another relates to the reliability and latency of RSVP 113 Signaling. 115 The scaling problems are linked to the resource requirements (in 116 terms of processing and memory) of running RSVP. The resource 117 requirements increase proportionally with the number of sessions. 118 Each session requires the generation, transmission, reception and 119 processing of RSVP Path and Resv messages per refresh period. 120 Supporting a large number of sessions, and the corresponding volume 121 of refresh messages, presents a scaling problem. 123 The reliability and latency problem occurs when a non-refresh RSVP 124 message is lost in transmission. Standard RSVP [RFC2205] recovers 125 from a lost message via RSVP refresh messages. In the face of 126 transmission loss of RSVP messages, the end-to-end latency of RSVP 127 signaling is tied to the refresh interval of the node(s) experiencing 128 the loss. When end-to-end signaling is limited by the refresh 129 interval, the delay incurred in the establishment or the change of a 130 reservation may be beyond the range of what is acceptable for some 131 applications. 133 One way to address the refresh volume problem is to increase the 134 refresh period, "R" as defined in Section 3.7 of [RFC2205]. 135 Increasing the value of R provides linear improvement on transmission 136 overhead, but at the cost of increasing the time it takes to 137 synchronize state. 139 One way to address the reliability and latency of RSVP Signaling is 140 to decrease the refresh period R. Decreasing the value of R 141 increases the probability that state will be installed in the face of 142 message loss, but at the cost of increasing refresh message rate and 143 associated processing requirements. 145 An additional issue is the time to deallocate resources after a tear 146 message is lost. RSVP does not retransmit ResvTear or PathTear 147 messages. If the sole tear message transmitted is lost, then 148 resources will only be deallocated once the "cleanup timer" interval 149 has passed. This may result in resources being allocated for an 150 unnecessary period of time. Note that even when the refresh period 151 is adjusted, the "cleanup timer" must still expire since tear 152 messages are not retransmitted. 154 The extensions defined in this document address both the refresh 155 volume and the reliability issues with mechanisms other than 156 adjusting refresh rate. The extensions are collectively referred to 157 as the "Refresh Overhead Reduction" or the "Refresh Reduction" 158 extensions. A Bundle message is defined to reduce overall message 159 handling load. A MESSAGE_ID object is defined to reduce refresh 160 message processing by allowing the receiver to more readily identify 161 an unchanged message. A MESSAGE_ACK object is defined which can be 162 used to detect message loss and support reliable RSVP message 163 delivery on a per hop basis. A summary refresh message is defined to 164 enable refreshing state without the transmission of whole refresh 165 messages, while maintaining RSVP's ability to indicate when state is 166 lost and to adjust to changes in routing. 168 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 169 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 170 document are to be interpreted as described in [RFC2119]. 172 1.1. Trigger and Refresh Messages 174 This document categorizes RSVP messages into two types: trigger and 175 refresh messages. Trigger messages are those RSVP messages that 176 advertise state or any other information not previously transmitted. 177 Trigger messages include messages advertising new state, a route 178 change that alters a reservation path, or a modification to an 179 existing RSVP session or reservation. Trigger messages also include 180 those messages that include changes in non-RSVP processed objects, 181 such as changes in the Policy or ADSPEC objects. 183 Refresh messages represent previously advertised state and contain 184 exactly the same objects and same information as a previously 185 transmitted message, and are sent over the same path. Only Path and 186 Resv messages can be refresh messages. Refresh messages are 187 identical to the corresponding previously transmitted message, with 188 the exception that the checksum, the flags and the INTEGRITY objects 189 which are allowed to differ in refresh messages. 191 2. Refresh-Reduction-Capable Bit 193 To indicate support for the refresh overhead reduction extensions, an 194 additional capability bit is added to the common RSVP header, which 195 is defined in [RFC2205]. 197 0 1 2 3 198 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 199 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 200 | Vers | Flags | Msg Type | RSVP Checksum | 201 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 202 | Send_TTL | (Reserved) | RSVP Length | 203 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 205 Flags: 4 bits 207 0x01: Refresh (overhead) reduction capable 209 When set, indicates to that this node is willing and capable 210 of receiving all the messages and objects described in this 211 document. This includes the Bundle message described in 212 Section 3, the MESSAGE_ID objects and Ack messages described 213 in Section 4, and the MESSAGE_ID LIST objects and Srefresh 214 message described in Section 5. This bit is meaningful only 215 between RSVP neighbors. 217 Nodes supporting the refresh overhead reduction extensions must also 218 take care to recognize when a next hop stops sending RSVP messages 219 with the Refresh-Reduction-Capable bit set. To cover this case, 220 nodes supporting the refresh overhead reduction extensions MUST 221 examine the flags field of each received RSVP message. If the flag 222 changes from indicating support to indicating non-support then, 223 unless configured otherwise, Srefresh messages (described in Section 224 5) MUST NOT be used for subsequent state refreshes to that neighbor 225 and Bundle messages (Section 3) MUST NOT be sent to that neighbor. 227 Note, a node that supports reliable RSVP message delivery (Section 4) 228 but not Bundle and Srefresh messages, will not set the the Refresh- 229 Reduction-Capable bit. 231 3. RSVP Bundle Message 233 An RSVP Bundle message consists of a bundle header followed by a body 234 consisting of a variable number of standard RSVP messages. A Bundle 235 message is used to aggregate multiple RSVP messages within a single 236 PDU. The term "bundling" is used to avoid confusion with RSVP 237 reservation aggregation. The following subsections define the 238 formats of the bundle header and the rules for including standard 239 RSVP messages as part of the message. 241 3.1. Bundle Header 243 0 1 2 3 244 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 245 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 246 | Vers | Flags | Msg type | RSVP checksum | 247 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 248 | Send_TTL | (Reserved) | RSVP length | 249 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 251 The format of the bundle header is identical to the format of the 252 RSVP common header [RFC2205]. The fields in the header are as 253 follows: 255 Vers: 4 bits 257 Protocol version number. This is version 1. 259 Flags: 4 bits 261 0x01: Refresh (overhead) reduction capable 263 See Section 2. 265 0x02-0x08: Reserved 267 Msg type: 8 bits 269 12 = Bundle 271 RSVP checksum: 16 bits 273 The one's complement of the one's complement sum of the entire 274 message, with the checksum field replaced by zero for the 275 purpose of computing the checksum. An all-zero value means 276 that no checksum was transmitted. Because individual sub- 277 messages may carry their own checksum as well as the INTEGRITY 278 object for authentication, this field MAY be set to zero. Note 279 that when the checksum is not computed, the header of the 280 bundle message will not be covered by any checksum. If the 281 checksum is computed, individual sub-messages MAY set their own 282 checksum to zero. 284 Send_TTL: 8 bits 286 The IP TTL value with which the message was sent. This is used 287 by RSVP to detect a non-RSVP hop by comparing the Send_TTL with 288 the IP TTL in a received message. 290 RSVP length: 16 bits 292 The total length of this RSVP Bundle message in bytes, 293 including the bundle header and the sub-messages that follow. 295 3.2. Message Formats 297 An RSVP Bundle message must contain at least one sub-message. A sub- 298 message MAY be any message type except for another Bundle message. 300 0 1 2 3 301 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 302 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 303 | Vers | Flags | 12 | RSVP checksum | 304 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 305 | Send_TTL | (Reserved) | RSVP length | 306 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 307 | | 308 // First sub-message // 309 | | 310 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 311 | | 312 // More sub-messages.. // 313 | | 314 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 316 3.3. Sending RSVP Bundle Messages 318 Support for RSVP Bundle messages is optional. While message bundling 319 helps in scaling RSVP, by reducing processing overhead and bandwidth 320 consumption, a node is not required to transmit every standard RSVP 321 message in a Bundle message. A node MUST always be ready to receive 322 standard RSVP messages. 324 RSVP Bundle messages can only be sent to RSVP neighbors that support 325 bundling. Methods for discovering such information include: (1) 326 manual configuration and (2) observing the Refresh-Reduction-Capable 327 bit (see Section 2) in the received RSVP messages. RSVP Bundle 328 messages MUST not be used if the RSVP neighbor does not support RSVP 329 Bundle messages. 331 RSVP Bundle messages are sent hop by hop between RSVP-capable nodes 332 as "raw" IP datagrams with protocol number 46. The IP source address 333 is an address local to the system that originated the Bundle message. 334 The IP destination address is the RSVP neighbor for which the sub- 335 messages are intended. 337 RSVP Bundle messages SHOULD NOT be sent with the Router Alert IP 338 option in their IP headers. This is because Bundle messages are 339 addressed directly to RSVP neighbors. 341 Each RSVP Bundle message MUST occupy exactly one IP datagram, which 342 is approximately 64K bytes. If it exceeds the MTU, the datagram is 343 fragmented by IP and reassembled at the recipient node. 344 Implementations may choose to limit each RSVP Bundle message to the 345 MTU size of the outgoing link, e.g. 1500 bytes. Implementations 346 SHOULD also limit the amount of time that a message is delayed in 347 order to be bundled. Different limits may be used for trigger and 348 standard refresh messages. Trigger messages SHOULD be delayed a 349 minimal amount of time. Refresh messages may be delayed up to their 350 refresh interval. Note that messages related to the same Resv or 351 Path state should not be delayed at different intervals in order to 352 preserve ordering. 354 If the RSVP neighbor is not known or changes in next hops cannot be 355 identified via routing, Bundle messages MUST NOT be used. Note that 356 when the routing next hop is not RSVP capable it will typically not 357 be possible to identify changes in next hop. 359 Any message that will be handled by the RSVP neighbor indicated in a 360 Bundle Message's destination address may be included in the same 361 message. This includes all RSVP messages that would be sent out a 362 point-to-point link. It includes any message, such as a Resv, 363 addressed to the same destination address. It also includes Path and 364 PathTear messages when the next hop is known to be the destination 365 and changes in next hops can be detected. Path and PathTear messages 366 for multicast sessions MUST NOT be sent in Bundle messages when the 367 outgoing link is not a point-to-point link or when the next hop does 368 not support the refresh overhead reduction extensions. 370 3.4. Receiving RSVP Bundle Messages 372 If the local system does not recognize or does not wish to accept an 373 Bundle message, the received messages shall be discarded without 374 further analysis. 376 The receiver next compares the Send_TTL with which a Bundle message 377 is sent to the IP TTL with which it is received. If a non-RSVP hop 378 is detected, the number of non-RSVP hops is recorded. It is used 379 later in processing of sub-messages. 381 Next, the receiver verifies the version number and checksum of the 382 RSVP Bundle message and discards the message if any mismatch is 383 found. 385 The receiver then starts decapsulating individual sub-messages. Each 386 sub-message has its own complete message length and authentication 387 information. Each sub-message is processed as if it was received 388 individually. 390 4. MESSAGE_ID Extension 392 Three new objects are defined as part of the MESSAGE_ID extension. 393 The objects are the MESSAGE_ID object, the MESSAGE_ID_ACK object, and 394 the MESSAGE_ID_NACK objects. The first two objects are used to 395 support acknowledgments and reliable RSVP message delivery. The last 396 object is used to support the summary refresh extension described in 397 Section 5. The MESSAGE_ID object can also be used to simply provide 398 a shorthand indication of when the message carrying the object is a 399 refresh message. Such information can be used by the receiving node 400 to reduce refresh processing requirements. 402 Message identification and acknowledgment is done on a per hop basis. 403 All types of MESSAGE_ID objects contain a message identifier. The 404 identifier MUST be unique on a per source IP address basis across 405 messages sent by an RSVP node and received by a particular node. No 406 more than one MESSAGE_ID object may be included in an RSVP message. 407 Each message containing an MESSAGE_ID object may be acknowledged via 408 a MESSAGE_ID_ACK object. MESSAGE_ID_ACK and MESSAGE_ID_NACK objects 409 may be sent piggy-backed in unrelated RSVP messages or in RSVP Ack 410 messages. RSVP messages carrying any of the three object types may 411 be included in a bundle message. When included, each object is 412 treated as if it were contained in a standard, non-bundled, RSVP 413 message. 415 4.1. Modification of Standard Message Formats 417 The MESSAGE_ID, MESSAGE_ID_ACK and MESSAGE_ID_NACK objects may be 418 included in the standard RSVP messages, as defined in [RFC2205]. 419 When included, one or more MESSAGE_ID_ACK or MESSAGE_ID_NACK objects 420 MUST immediately follow the INTEGRITY object. When no INTEGRITY 421 object is present, the MESSAGE_ID_ACK or MESSAGE_ID_NACK objects MUST 422 immediately follow the message or sub-message header. Only one 423 MESSAGE_ID object MAY be included in a message or sub-message and it 424 MUST follow any present MESSAGE_ID_ACK or MESSAGE_ID_NACK objects. 425 When no MESSAGE_ID_ACK or MESSAGE_ID_NACK objects are present, the 426 MESSAGE_ID object MUST immediately follow the INTEGRITY object. When 427 no INTEGRITY object is present, the MESSAGE_ID object MUST 428 immediately follow the message or sub-message header. 430 The ordering of the ACK objects for all standard RSVP messages is: 431 [ ] 432 [ [ | ] ... ] 433 [ ] 435 4.2. MESSAGE_ID Objects 437 MESSAGE_ID Class = TBD (Value to be assigned by IANA of form 438 0bbbbbbb) 440 MESSAGE_ID object 442 Class = MESSAGE_ID Class, C_Type = 1 444 0 1 2 3 445 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 446 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 447 | Flags | Epoch | 448 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 449 | Message_Identifier | 450 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 451 Flags: 8 bits 453 0x01 = ACK_Desired flag 455 Indicates that the sender requests the receiver to send an 456 acknowledgment for the message. 458 Epoch: 24 bits 460 A value that indicates when the Message_Identifier sequence has 461 reset. SHOULD be randomly generated each time a node reboots. 462 This value MUST NOT be changed during normal operation. 464 Message_Identifier: 32 bits 466 When combined with the message generator's IP address, the 467 Message_Identifier field uniquely identifies a message. This 468 values placed in this field change incrementally and only 469 decreases when the Epoch changes or when the value wraps. 471 4.3. MESSAGE_ID_ACK and MESSAGE_ID_NACK Objects 473 MESSAGE_ID_ACK Class = TBD (Value to be assigned by IANA of form 474 0bbbbbbb) 476 MESSAGE_ID_ACK object 478 Class = MESSAGE_ID_ACK Class, C_Type = 1 480 0 1 2 3 481 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 482 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 483 | Flags | Epoch | 484 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 485 | Message_Identifier | 486 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 488 Flags: 8 bits 490 No flags are currently defined. This field MUST be zero on 491 transmission and ignored on receipt. 493 Epoch: 24 bits 495 The Epoch field copied from the message being acknowledged. 497 Message_Identifier: 32 bits 499 The Message_Identifier field copied from the message being 500 acknowledged. 502 MESSAGE_ID_NACK object 504 Class = MESSAGE_ID_ACK Class, C_Type = 2 506 Definition is the same as the MESSAGE_ID_ACK object. 508 4.4. Ack Message Format 510 Ack messages carry one or more MESSAGE_ID_ACK or MESSAGE_ID_NACK 511 objects. They MUST NOT contain any MESSAGE_ID objects. Ack messages 512 are sent between neighboring RSVP nodes. The IP destination address 513 of an Ack message is the unicast address of the node that generated 514 the message(s) being acknowledged. For messages with RSVP_HOP 515 objects, such as Path and Resv messages, the address is found in the 516 RSVP_HOP object. For other messages, such as ResvConf, the 517 associated IP address is the source address in the IP header. The IP 518 source address is an address of the node that sends the Ack message. 520 The Ack message format is as follows: 522 ::= [ ] 523 | 524 [ [ | ] ... ] 526 For Ack messages, the Msg Type field of the Common Header MUST be set 527 to 13 (This is a suggested value, the permanent value is to be 528 assigned by IANA). 530 Section 4.6 provides guidance on when an Ack message should be used 531 and when MESSAGE_ID objects should be sent piggy-backed in other RSVP 532 messages. 534 4.5. MESSAGE_ID Object Usage 536 The MESSAGE_ID object may be included in any RSVP message other than 537 the Ack and Bundle messages. The MESSAGE_ID object is always 538 generated and processed over a single hop between RSVP neighbors. 539 The IP address of the object generator, i.e., the node that creates 540 the object, is represented in a per RSVP message type specific 541 fashion. For messages with RSVP_HOP objects, such as Path and Resv 542 messages, the generator's IP address is found in the RSVP_HOP object. 544 For other messages, such as ResvConf message, the generator's IP 545 address is the source address in the IP header. Note that MESSAGE_ID 546 objects can only be used in a Bundle sub-messages, but not in a 547 Bundle message. As is always the case with the Bundle message, each 548 sub-message is processed as if it was received individually. This 549 includes processing of MESSAGE_ID objects. 551 The Epoch field contains a generator selected value. The value is 552 used to indicate when the sender resets the values used in the 553 Message_Identifier field. On startup, a node SHOULD randomly select 554 a value to be used in the Epoch field. The node SHOULD ensure that 555 the selected value is not the same as was used when the node was last 556 operational. The value MUST NOT be changed unless the node or the 557 RSVP agent is restarted. 559 The Message_Identifier field contains a generator selected value. 560 This value, when combined with the generator's IP address, identifies 561 a particular RSVP message and the specific state information it 562 represents. The combination of Message_Identifier and Epoch can also 563 be used to detect out of order messages. When a node is sending a 564 refresh message with a MESSAGE_ID object, it SHOULD use the same 565 Message_Identifier value that was used in the RSVP message that first 566 advertised the state being refreshed. When a node is sending a 567 trigger message, the Message_Identifier value MUST have a value that 568 is greater than any other previously used value. A value is 569 considered to have been used when it has been sent in any message 570 using the associated IP address. 572 The ACK_Desired flag is set when the MESSAGE_ID object generator 573 wants a MESSAGE_ID_ACK object sent in response to the message. Such 574 information can be used to ensure reliable delivery of RSVP messages 575 in the face of network loss. Nodes setting the ACK_Desired flag 576 SHOULD retransmit unacknowledged messages at a more rapid interval 577 than the standard refresh period until the message is acknowledged or 578 until a "rapid" retry limit is reached. Rapid retransmission rate 579 SHOULD be based on well known exponential back-off procedures. See 580 Section 6 for an example of an exponential back-off retransmission 581 approach. Suggested default values are an initial retransmission 582 timeout of 500ms, a power of 2 exponential back-off and a default 583 retry limit of 3. The ACK_Desired flag will typically be set only in 584 trigger messages. The ACK_Desired flag MAY be set in refresh 585 messages. Issues relate to multicast sessions are covered in a later 586 section. 588 Nodes processing incoming MESSAGE_ID objects SHOULD check to see if a 589 newly received message is out of order and can be ignored. Out of 590 order messages SHOULD be ignored, i.e., silently dropped. Out of 591 order messages can be identified by examining the values in the Epoch 592 and Message_Identifier fields. To determine ordering, the received 593 Epoch value must match the value previously received from the message 594 sender. If the values differ then the receiver MUST NOT treat the 595 message as out of order. When the Epoch values match and the 596 Message_Identifier value is less than the largest value previously 597 received from the sender, then the receiver SHOULD check the value 598 previously received for the state associated with the message. This 599 check should be performed for any message that installs or changes 600 state. (Includes at least: Path, Resv, PathTear, ResvTear, PathErr 601 and ResvErr.) If no local state information can be associated with 602 the message, the receiver MUST NOT treat the message as out of order. 603 If local state can be associated with the message and the received 604 Message_Identifier value is less than the most recently received 605 value associated with the state, the message SHOULD be treated as 606 being out of order. 608 Note that the 32-bit Message_Identifier value MAY wrap. To cover the 609 the wrap case, the following expression may be used to test if a 610 newly received Message_Identifier value is less than a previously 611 received value: 612 if ((int) old_id - (int) new_id > 0) { 613 new value is less than old value; 614 } 616 MESSAGE_ID objects of messages that are not out of order SHOULD be 617 used to aid in determining if the message represents new state or a 618 state refresh. Note that state is only refreshed in Path and Resv 619 messages. If the received Epoch values differs from the value 620 previously received from the message sender, the message is a trigger 621 message and the receiver MUST fully process the message. If a Path 622 or Resv message contains the same Message_Identifier value that was 623 used in the most recently received message for the same session and, 624 for Path messages, SENDER_TEMPLATE then the receiver SHOULD treat the 625 message as a state refresh. If the Message_Identifier value is 626 greater than the most recently received value, the receiver MUST 627 fully processes the message. When fully processing a Path or Resv 628 message, the receiver MUST store the received Message_Identifier 629 value as part of the local Path or Resv state for future reference. 631 Nodes receiving a non-out of order message containing a MESSAGE_ID 632 object with the ACK_Desired flag set, SHOULD respond with a 633 MESSAGE_ID_ACK object. Note that MESSAGE_ID objects received in 634 messages containing errors, i.e., are not syntactically valid, MUST 635 NOT be acknowledged. PathErr and ResvErr messages SHOULD be treated 636 as implicit acknowledgments. 638 4.6. MESSAGE_ID_ACK Object and MESSAGE_ID_NACK Object Usage 640 The MESSAGE_ID_ACK object is used to acknowledge receipt of messages 641 containing MESSAGE_ID objects that were sent with the ACK_Desired 642 flag set. A MESSAGE_ID_ACK object MUST NOT be generated in response 643 to a received MESSAGE_ID object when the ACK_Desired flag is not set. 645 The MESSAGE_ID_NACK object is used as part of the summary refresh 646 extension. The generation and processing of MESSAGE_ID_NACK objects 647 is described in further detail in Section 5.4. 649 MESSAGE_ID_ACK and MESSAGE_ID_NACK objects MAY be sent in any RSVP 650 message that has an IP destination address matching the generator of 651 the associated MESSAGE_ID object. This means that the objects will 652 not typically be included in the non hop-by-hop Path, PathTear and 653 ResvConf messages. When no appropriate message is available, one or 654 more objects SHOULD be sent in an Ack message. Implementations 655 SHOULD include MESSAGE_ID_ACK and MESSAGE_ID_NACK objects in standard 656 RSVP messages when possible. 658 Implementations SHOULD limit the amount of time that an object is 659 delayed in order to be piggy-backed or sent in an Ack message. 660 Different limits may be used for MESSAGE_ID_ACK and MESSAGE_ID_NACK 661 objects. MESSAGE_ID_ACK objects are used to detect link transmission 662 losses. If an ACK object is delayed too long, the corresponding 663 message will be retransmitted. To avoid such retransmission, ACK 664 objects SHOULD be delayed a minimal amount of time. A delay time 665 equal to the link transit time MAY be used. MESSAGE_ID_NACK objects 666 may be delayed an independent and longer time. Although additional 667 delay increases the amount of time a desired reservation is not 668 installed. 670 4.7. Multicast Considerations 672 Path and PathTear messages may be sent to IP multicast destination 673 addresses. When the destination is a multicast address, it is 674 possible that a single message containing a single MESSAGE_ID object 675 will be received by multiple RSVP next hops. When the ACK_Desired 676 flag is set in this case, acknowledgment processing is more complex. 677 There are a number of issues to be addressed including ACK implosion, 678 number of acknowledgments to be expected and handling of new 679 receivers. 681 ACK implosion occurs when each receiver responds to the MESSAGE_ID 682 object at approximately the same time. This can lead to a 683 potentially large number of MESSAGE_ID_ACK objects being 684 simultaneously delivered to the message generator. To address this 685 case, the receiver MUST wait a random interval prior to acknowledging 686 a MESSAGE_ID object received in a message destined to a multicast 687 address. The random interval SHOULD be between zero (0) and a 688 configured maximum time. The configured maximum SHOULD be set in 689 proportion to the refresh and "rapid" retransmission interval, i.e, 690 such that the maximum time before sending an acknowledgment does not 691 result in retransmission. It should be noted that ACK implosion is 692 being addressed by spreading acknowledgments out in time, not by ACK 693 suppression. 695 A more fundamental issue is the number of acknowledgments that the 696 upstream node, i.e., the message generator, should expect. The 697 number of acknowledgments that should be expected is the same as the 698 number of RSVP next hops. In the router-to-router case, the number 699 of next hops can often be obtained from routing. When hosts are 700 either the upstream node or the next hops, the number of next hops 701 will typically not be readily available. Another case where the 702 number of RSVP next hops will typically not be known is when there 703 are non-RSVP routers between the message generator and the RSVP next 704 hops. 706 When the number of next hops is not known, the message generator 707 SHOULD only expect a single response. The result of this behavior 708 will be special retransmission handling until the message is 709 delivered to at least one next hop, then followed by standard RSVP 710 refreshes. Refresh messages will synchronize state with any next 711 hops that don't receive the original message. 713 4.7.1. Reference RSVP/Routing Interface 715 When using the MESSAGE_ID extension with multicast sessions it is 716 preferable for RSVP to obtain the number of next hops from routing 717 and to be notified when that number changes. The interface between 718 routing and RSVP is purely an implementation issue. Since RSVP 719 [RFC2205] describes a reference routing interface, a version of the 720 RSVP/routing interface updated to provide number of next hop 721 information is presented. See [RFC2205] for previously defined 722 parameters and function description. 724 o Route Query 725 Mcast_Route_Query( [ SrcAddress, ] DestAddress, 726 Notify_flag ) 727 -> [ IncInterface, ] OutInterface_list, 728 NHops_list 730 o Route Change Notification 731 Mcast_Route_Change( ) -> [ SrcAddress, ] DestAddress, 732 [ IncInterface, ] OutInterface_list, 733 NHops_list 735 NHops_list provides the number of multicast group members 736 reachable via each OutInterface_list entry. 738 4.8. Compatibility 740 All nodes sending messages with the Refresh-Reduction-Capable bit set 741 will support the MESSAGE_ID Extension. There are no backward 742 compatibility issues raised by the MESSAGE_ID Class with nodes that 743 do not set the Refresh-Reduction-Capable bit. The MESSAGE_ID Class 744 has an assigned value whose form is 0bbbbbbb. Per RSVP [RFC2205], 745 classes with values of this form must be rejected with an "Unknown 746 Object Class" error by nodes not supporting the class. When the 747 receiver of a MESSAGE_ID object does not support the class, a 748 corresponding error message will be generated. The generator of the 749 MESSAGE_ID object will see the error and then MUST re-send the 750 original message without the MESSAGE_ID object. In this case, the 751 message generator MAY still choose to retransmit messages at the 752 "rapid" retransmission interval. Lastly, since the MESSAGE_ID_ACK 753 class can only be issued in response to the MESSAGE_ID object, there 754 are no possible issues with this class or Ack messages. A node MAY 755 support the MESSAGE_ID Extension without supporting the other refresh 756 overhead reduction extensions. 758 5. Summary Refresh Extension 760 The summary refresh extension enables the refreshing of RSVP state 761 without the transmission of standard Path or Resv messages. The 762 benefits of the described extension are that it reduces the amount of 763 information that must be transmitted and processed in order to 764 maintain RSVP state synchronization. Importantly, the described 765 extension preserves RSVP's ability to handle non-RSVP next hops and 766 to adjust to changes in routing. This extension cannot be used with 767 Path or Resv messages that contain any change from previously 768 transmitted messages, i.e, are trigger messages. 770 The summary refresh extension builds on the previously defined 771 MESSAGE_ID extension. Only state that was previously advertised in 772 Path and Resv messages containing MESSAGE_ID objects can be refreshed 773 via the summary refresh extension. 775 The summary refresh extension uses the objects and the ACK message 776 previously defined as part of the MESSAGE_ID extension, and a new 777 Srefresh message. The new message carries a list of 778 Message_Identifier fields corresponding to the Path and Resv trigger 779 messages that established the state. The Message_Identifier fields 780 are carried in one of three Srefresh related objects. The three 781 objects are the MESSAGE_ID LIST object, the MESSAGE_ID SRC_LIST 782 object, and the MESSAGE_ID MCAST_LIST object. 784 The MESSAGE_ID LIST object is used to refresh all Resv state, and 785 Path state of unicast sessions. It is made up of a list of 786 Message_Identifier fields that were originally advertised in 787 MESSAGE_ID objects. The other two objects are used to refresh Path 788 state of multicast sessions. A node receiving a summary refresh for 789 multicast path state will at times need source and group information. 790 These two objects provide this information. The objects differ in 791 the information they contain and how they are sent. Both carry 792 Message_Identifier fields and corresponding source IP addresses. The 793 MESSAGE_ID SRC_LIST is sent in messages addressed to the session's 794 multicast IP address. The MESSAGE_ID MCAST_LIST object adds the 795 group address and is sent in messages addressed to the RSVP next hop. 796 The MESSAGE_ID MCAST_LIST is normally used on point-to-point links. 798 An RSVP node receiving an Srefresh message, matches each listed 799 Message_Identifier field with installed Path or Resv state. All 800 matching state is updated as if a normal RSVP refresh message has 801 been received. If matching state cannot be found, then the Srefresh 802 message sender is notified via a refresh NACK. 804 A refresh NACK is sent via the MESSAGE_ID_NACK object. As described 805 in the previous section, the rules for sending a MESSAGE_ID_NACK 806 object are the same as for sending a MESSAGE_ID_ACK object. This 807 includes sending MESSAGE_ID_NACK object both piggy-backed in 808 unrelated RSVP messages or in RSVP ACK messages. 810 5.1. MESSAGE_ID LIST, SRC_LIST and MCAST_LIST Objects 812 MESSAGE_ID LIST object 814 MESSAGE_ID_LIST Class = TBD (Value to be assigned by IANA of form 815 0bbbbbbb) 817 Class = MESSAGE_ID_LIST Class, C_Type = 1 819 0 1 2 3 820 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 821 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 822 | Flags | Epoch | 823 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 824 | Message_Identifier | 825 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 826 | : | 827 // : // 828 | : | 829 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 830 | Message_Identifier | 831 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 833 Flags: 8 bits 835 No flags are currently defined. This field MUST be zero on 836 transmission and ignored on receipt. 838 Epoch: 24 bits 840 The Epoch field from the MESSAGE_ID object corresponding to the 841 trigger message that advertised the state being refreshed. 843 Message_Identifier: 32 bits 845 The Message_Identifier field from the MESSAGE_ID object 846 corresponding to the trigger message that advertised the state 847 being refreshed. A variable number of Message_Identifiers may 848 be included. 850 IPv4/MESSAGE_ID SRC_LIST object 852 Class = MESSAGE_ID_LIST Class, C_Type = 2 854 0 1 2 3 855 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 856 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 857 | Flags | Epoch | 858 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 859 | Source_ | 860 | Message_Identifier_Tuple | 861 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 862 | : | 863 // : // 864 | : | 865 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 866 | Source_ | 867 | Message_Identifier_Tuple | 868 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 870 Where a Source_Message_Identifier_Tuple consists of: 872 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 873 | Message_Identifier | 874 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 875 | Source_IP_Address | 876 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 878 IPv6/MESSAGE_ID SRC_LIST object 880 Class = MESSAGE_ID_LIST Class, C_Type = 3 882 0 1 2 3 883 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 884 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 885 | Flags | Epoch | 886 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 887 | | 888 | IPv6_Source_ | 889 | Message_Identifier_Tuple | 890 | | 891 | | 892 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 893 | : | 894 // : // 895 | : | 896 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 897 | | 898 | IPv6_Source_ | 899 | Message_Identifier_Tuple | 900 | | 901 | | 902 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 904 Where a IPv6 Source_Message_Identifier_Tuple consists of: 906 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 907 | Message_Identifier | 908 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 909 | | 910 | IPv6 Source_IP_Address | 911 | | 912 | | 913 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 915 Flags: 8 bits 917 No flags are currently defined. This field MUST be zero on 918 transmission and ignored on receipt. 920 Epoch: 24 bits 922 The Epoch field from the MESSAGE_ID object corresponding to the 923 trigger message that advertised the state being refreshed. 925 Message_Identifier: 32 bits 927 The Message_Identifier field from the MESSAGE_ID object 928 corresponding to the trigger message that advertised the Path 929 state being refreshed. A variable number of 930 Message_Identifiers may be included. Each Message_Identifier 931 MUST be followed by the source IP address corresponding to the 932 sender described in the Path state being refreshed. 934 Source_IP_Address: 32 bits 936 The IP address corresponding to the sender of the Path state 937 being refreshed. 939 IPv4/MESSAGE_ID MCAST_LIST object 941 Class = MESSAGE_ID_LIST Class, C_Type = 4 943 0 1 2 3 944 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 945 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 946 | Flags | Epoch | 947 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 948 | Multicast_ | 949 | Message_Identifier_ | 950 | Tuple | 951 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 952 | : | 953 // : // 954 | : | 955 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 956 | Multicast_ | 957 | Message_Identifier_ | 958 | Tuple | 959 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 961 Where a Multicast_Message_Identifier_Tuple consists of: 963 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 964 | Message_Identifier | 965 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 966 | Source_IP_Address | 967 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 968 | Destination_IP_Address | 969 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 971 IPv6/MESSAGE_ID MCAST_LIST object 973 Class = MESSAGE_ID_LIST Class, C_Type = 5 975 0 1 2 3 976 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 977 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 978 | Flags | Epoch | 979 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 980 | | 981 | | 982 | | 983 | IPv6 Multicast_ | 984 | Message_Identifier_ | 985 | Tuple | 986 | | 987 | | 988 | | 989 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 990 | : | 991 // : // 992 | : | 993 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 994 | | 995 | | 996 | | 997 | IPv6 Multicast_ | 998 | Message_Identifier_ | 999 | Tuple | 1000 | | 1001 | | 1002 | | 1003 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1005 Where a IPv6 Multicast_Message_Identifier_Tuple consists of: 1007 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1008 | Message_Identifier | 1009 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1010 | | 1011 | IPv6 Source_IP_Address | 1012 | | 1013 | | 1014 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1015 | | 1016 | IPv6 Destination_IP_Address | 1017 | | 1018 | | 1019 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1021 Flags: 8 bits 1023 No flags are currently defined. This field MUST be zero on 1024 transmission and ignored on receipt. 1026 Epoch: 24 bits 1028 The Epoch field from the MESSAGE_ID object corresponding to the 1029 trigger message that advertised the state being refreshed. 1031 Message_Identifier: 32 bits 1033 The Message_Identifier field from the MESSAGE_ID object 1034 corresponding to the trigger message that advertised the Path 1035 state being refreshed. A variable number of 1036 Message_Identifiers may be included. Each Message_Identifier 1037 MUST be followed by the source IP address corresponding to the 1038 sender of the Path state being refreshed, and the destination 1039 IP address of the session. 1041 Source_IP_Address: 32 bits 1043 The IP address corresponding to the sender of the Path state 1044 being refreshed. 1046 Destination_IP_Address: 32 bits 1048 The destination IP address corresponding to the session of the 1049 Path state being refreshed. 1051 5.2. Srefresh Message Format 1053 Srefresh messages carry one or more MESSAGE_ID LIST, MESSAGE_ID 1054 SRC_LIST, and MESSAGE_ID MCAST_LIST objects. MESSAGE_ID LIST and 1055 MESSAGE_ID MCAST_LIST objects MAY be carried in the same Srefresh 1056 message. MESSAGE_ID SRC_LIST can not be combined in Srefresh 1057 messages with the other objects. A single Srefresh message MAY 1058 refresh both Path and Resv state. 1060 Srefresh messages carrying Message_Identifier fields corresponding to 1061 Path state are normally sent with a destination IP address equal to 1062 the address carried in the corresponding SESSION objects. The 1063 destination IP address MAY be set to the RSVP next hop when the next 1064 hop is known to be RSVP capable and either (a) the session is unicast 1065 or (b) the outgoing interface is a point-to-point link. Srefresh 1066 messages carrying Message_Identifier fields corresponding to Resv 1067 state MUST be sent with a destination IP address set to the Resv 1068 state's previous hop. 1070 Srefresh messages sent to a multicast session's destination IP 1071 address, MUST contain MESSAGE_ID SRC_LIST objects and MUST NOT 1072 include any MESSAGE_ID LIST or MESSAGE_ID MCAST_LIST objects. 1073 Srefresh messages sent to the RSVP next hop MAY contain either or 1074 both MESSAGE_ID LIST and MESSAGE_ID MCAST_LIST objects, but MUST NOT 1075 include any MESSAGE_ID SRC_LIST objects. 1077 The source IP address of an Srefresh message is an address of the 1078 node that generates the message. The source IP address MUST match 1079 the address associate with the MESSAGE_ID objects when they were 1080 included in a standard RSVP message. As previously mentioned, the 1081 source address associated with a MESSAGE_ID object is represented in 1082 a per RSVP message type specific fashion. For messages with RSVP_HOP 1083 objects, such as Path and Resv messages, the address is found in the 1084 RSVP_HOP object. For other messages, such as ResvConf message, the 1085 associated IP address is the source address in the IP header. 1087 Srefresh messages that are addressed to a session's destination IP 1088 address MUST be sent with the Router Alert IP option in their IP 1089 headers. Srefresh messages addressed directly to RSVP neighbors 1090 SHOULD NOT be sent with the Router Alert IP option in their IP 1091 headers. 1093 Each Srefresh message MUST occupy exactly one IP datagram. If it 1094 exceeds the MTU, the datagram is fragmented by IP and reassembled at 1095 the recipient node. Srefresh messages MAY be sent within an RSVP 1096 Bundle messages. Although this is not expected since Srefresh 1097 messages can carry a list of Message_Identifier fields within a 1098 single object. Implementations may choose to limit each Srefresh 1099 message to the MTU size of the outgoing link, e.g. 1500 bytes. 1101 The Srefresh message format is: 1103 ::= [ ] 1104 [ [ | ] ... ] 1105 [ ] 1106 | 1108 ::= | 1109 [ ] 1111 ::= 1112 [ ... ] 1114 For Srefresh messages, the Msg Type field of the Common Header MUST 1115 be set to 15 (This is a suggested value, the permanent value is to be 1116 assigned by IANA). 1118 5.3. Srefresh Message Usage 1120 An Srefresh message may be generated to refresh Resv and Path state. 1121 If an Srefresh message is used to refresh some particular state, then 1122 the generation of a standard refresh message for that particular 1123 state SHOULD be suppressed. A state's refresh interval is not 1124 affected by the use of Srefresh message based refreshes. 1126 When generating an Srefresh message, a node SHOULD refresh as much 1127 Path and Resv state as is possible by including the information from 1128 as many MESSAGE_ID objects in the same Srefresh message. Only the 1129 information from MESSAGE_ID objects that meet the source and 1130 destination IP address restrictions, as described in Sections 5.2, 1131 may be included in the same Srefresh message. Identifying Resv state 1132 that can be refreshed using the same Srefresh message is fairly 1133 straightforward. Identifying which Path state may be included is a 1134 little more complex. 1136 Only state that was previously advertised in Path and Resv messages 1137 containing MESSAGE_ID objects can be refreshed via an Srefresh 1138 message. Srefresh message based refreshes must preserve the state 1139 synchronization properties of Path or Resv message based refreshes. 1140 Specifically, the use of Srefresh messages MUST NOT result in state 1141 being timed-out at the RSVP next hop. The period at which state is 1142 refreshed when using Srefresh messages MAY be shorter than the period 1143 that would be used when using Path or Resv message based refreshes, 1144 but it MUST NOT be longer. 1146 The particular approach used to trigger Srefresh message based 1147 refreshes is implementation specific. Some possibilities are 1148 triggering Srefresh message generation based on each state's refresh 1149 period or, on a per interface basis, periodically generating Srefresh 1150 messages to refresh all state that has not been refreshed within the 1151 state's refresh interval. Other approaches are also possible. A 1152 default Srefresh message generation interval of 30 seconds is 1153 suggested for nodes that do not dynamically calculate a generation 1154 interval. 1156 When generating an Srefresh message, there are two methods for 1157 identifying which Path state may be refreshed in a specific message. 1158 In both cases, the previously mentioned refresh interval and source 1159 IP address restrictions must be followed. The primary method is to 1160 include only those sessions that share the same destination IP 1161 address in the same Srefresh message. 1163 The secondary method for identifying which Path state may be 1164 refreshed within a single Srefresh message is an optimization. This 1165 method MAY be used when the next hop is known to support RSVP and 1166 when either (a) the session is unicast or (b) the outgoing interface 1167 is a point-to-point link. This method MUST NOT be used when the next 1168 hop is not known to support RSVP or when the outgoing interface is to 1169 a multi-access network and the session is to a multicast address. 1170 The use of this method MAY be administratively configured. When 1171 using this method, the destination address in the IP header of the 1172 Srefresh message is usually the next hop's address. When the use of 1173 this method is administratively configured, the destination address 1174 should be the well known group address 224.0.0.14. When the outgoing 1175 interface is a point-to-point link, all Path state associated with 1176 sessions advertised out the interface SHOULD be included in the same 1177 Srefresh message. When the outgoing interface is not a point-to- 1178 point link, all unicast session Path state SHOULD be included in the 1179 same Srefresh message. 1181 Identifying which Resv state may be refreshed within a single 1182 Srefresh message is based simply on the source and destination IP 1183 addresses. Any state that was previously advertised in Resv messages 1184 with the same IP addresses as an Srefresh message MAY be included. 1186 After identifying the Path and Resv state that can be included in a 1187 particular Srefresh message, the message generator adds to the 1188 message MESSAGE_ID information matching each identified state's 1189 previously used object. For all Resv state and for Path state of 1190 unicast sessions, the information is added to the message in an 1191 MESSAGE_ID LIST object that has a matching Epoch value. (Note only 1192 one Epoch value will be in use during normal operation.) If no 1193 matching object exists, then a new MESSAGE_ID LIST object is created. 1195 Path state of multicast sessions may be added to the same message 1196 when the destination address of the Srefresh message is the RSVP next 1197 hop and the outgoing interface is a point-to-point link. In this 1198 case the information is added to the message in an MESSAGE_ID 1199 MCAST_LIST object that has a matching Epoch value. If no matching 1200 object exists, then a new MESSAGE_ID MCAST_LIST object is created. 1201 When the destination address of the message is a multicast address, 1202 then identified information is added to the message in an MESSAGE_ID 1203 SRC_LIST object that has a matching Epoch value. If no matching 1204 object exists, then a new MESSAGE_ID SRC_LIST object is created. 1205 Once the Srefresh message is composed, the message generator 1206 transmits the message out the proper interface. 1208 Upon receiving an Srefresh message, the node MUST attempt to identify 1209 matching installed Path or Resv state. Matching is done based on the 1210 source address in the IP header of the Srefresh message, the object 1211 type and each Message_Identifier field. If matching state can be 1212 found, then the receiving node MUST update the matching state 1213 information as if a standard refresh message had been received. If 1214 matching state cannot be identified, then an Srefresh NACK MUST be 1215 generated corresponding to the unmatched Message_Identifier field. 1216 Message_Identifier fields received in MESSAGE_ID LIST objects may 1217 correspond to any Resv state or to Path state of unicast sessions. 1218 Message_Identifier fields received in MESSAGE_ID SRC_LIST or 1219 MCAST_LIST objects correspond to Path state of multicast sessions. 1221 An additional check must be performed to determine if a NACK should 1222 be generated for unmatched Message_Identifier fields associated with 1223 Path state of multicast sessions, i.e. fields that were carried in 1224 MESSAGE_ID SRC_LIST or MCAST_LIST objects. The receiving node must 1225 check to see if the node would forward data packets originated from 1226 the source corresponding to the unmatched field. This check, 1227 commonly known as an RPF check, is performed based on the source and 1228 group information carried in the MESSAGE_ID SRC_LIST and MCAST_LIST 1229 objects. In both objects the IP address of the source is listed 1230 immediately after the corresponding Message_Identifier field. The 1231 group address is listed immediately after the source IP address in 1232 MESSAGE_ID MCAST_LIST objects. The group address is the message's 1233 destination IP address when MESSAGE_ID SRC_LIST objects are used. 1234 The receiving node only generates an Srefresh NACK when the node 1235 would forward packets to the identified group from the listed sender. 1236 If the node would forward multicast data packets from a listed sender 1237 and there is a corresponding unmatched Message_Identifier field, then 1238 an appropriate Srefresh NACK MUST be generated. If the node would 1239 not forward packets to the identified group from a listed sender, a 1240 corresponding unmatched Message_Identifier field is silently ignored. 1242 5.4. Srefresh NACK 1244 Srefresh NACKs are used to indicated that a received 1245 Message_Identifier field carried in MESSAGE_ID LIST, SRC_LIST, or 1246 MCAST_LIST object does not match any installed state. This may occur 1247 for a number of reasons including, for example, a route change. An 1248 Srefresh NACK is encoded in a MESSAGE_ID_NACK object. When 1249 generating an Srefresh NACK, the epoch and Message_Identifier fields 1250 of the MESSAGE_ID_NACK object MUST have the same value as was 1251 received. MESSAGE_ID_NACK objects are transmitted as described in 1252 Section 4.6. 1254 Received MESSAGE_ID_NACK objects indicate that the object generator 1255 does not have any installed state matching the object. Upon 1256 receiving a MESSAGE_ID_NACK object, the receiver performs an 1257 installed Path or Resv state lookup based on the Epoch and 1258 Message_Identifier values contained in the object. If matching state 1259 is found, then the receiver MUST transmit the matching state via a 1260 standard Path or Resv message. If the receiver cannot identify any 1261 installed state, then no action is required. 1263 5.5. Preserving RSVP Soft State 1265 As discussed in [RFC2205], RSVP uses soft state to address a large 1266 class of potential errors. RSVP does this by periodically sending a 1267 full representation of installed state in Resv and Path messages. 1268 Srefresh messages are used in place of the periodic sending of 1269 standard Path and Resv refresh messages. While this provides scaling 1270 benefits and protects against common network events such as packet 1271 loss or routing change, it does not provide exactly the same error 1272 recovery properties. An example error that could potentially be 1273 recovered from via standard messages but not with Srefresh messages 1274 is internal corruption of state. This section recommends two methods 1275 that can be used to better preserve RSVP's soft state error recovery 1276 mechanism. Both mechanisms are supported using existing protocol 1277 messages. 1279 The first mechanism uses a checksum or other algorithm to detect a 1280 previously unnoticed change in internal state. When sending a Path 1281 or Resv trigger message, a node should run a checksum or other 1282 algorithm, such as [MD5], over the internal state and store the 1283 result. The choice of algorithm is an administrative decision. 1284 Periodically the node should rerun the algorithm and compare the new 1285 result with the stored result. If the values differ, then a 1286 corresponding standard Path or Resv refresh message should be sent 1287 and the new value should be stored. The recomputation period should 1288 be set based on the computation resources of the node and the 1289 reliability requirements of the network. 1291 The second mechanism is simply to periodically send standard Path and 1292 Resv refresh messages. The period that standard refresh messages are 1293 sent must be longer than the interval that Srefresh messages are 1294 generated in order to gain the benefits of using the summary refresh 1295 extension. When a standard refresh message is sent, a corresponding 1296 summary refresh SHOULD NOT be sent during the same refresh period. 1297 When a node supports the periodic generation of standard refresh 1298 messages while Srefreshes are being used, the frequency of generation 1299 of standard refresh messages relative to the generation of summary 1300 refreshes SHOULD be configurable by the network administrator. 1302 5.6. Compatibility 1304 Nodes supporting the summary refresh extension advertise their 1305 support via the Refresh-Reduction-Capable bit in the RSVP message 1306 header. This enables nodes supporting the extension to detect each 1307 other. When it is not known if a next hop supports the extension, 1308 standard Path and Resv message based refreshes MUST be used. Note 1309 that when the routing next hop does not support RSVP, it will not 1310 always be possible to detect if the RSVP next hop supports the 1311 summary refresh extension. Therefore, when the routing next hop is 1312 not RSVP capable the Srefresh message based refresh SHOULD NOT be 1313 used. A node MAY be administratively configured to use Srefresh 1314 messages in all cases when all RSVP nodes in a network are known to 1315 support the summary refresh extension. This is useful since when 1316 operating in this mode, the extension properly adjusts to the case of 1317 non-RSVP next hops and changes in routing. 1319 Per section 2, nodes supporting the summary refresh extension must 1320 also take care to recognize when a next hop stops sending RSVP 1321 messages with the Refresh-Reduction-Capable bit set. 1323 6. Reference Exponential Back-Off Procedures 1325 This section is based on [Pan] and provides an example of how to 1326 implement exponential back-off for retransmission of messages 1327 awaiting acknowledgment, see Section 4.5. Implementations MAY choose 1328 to use the described procedures. 1330 6.1. Outline of Operation 1332 The following is one possible mechanism for exponential back-off 1333 retransmission of an unacknowledged RSVP message: When sending such a 1334 message, a node inserts a MESSAGE_ID object with the ACK_Desired flag 1335 set. The sending node will retransmit the message until a message 1336 acknowledgment is received or the message has been transmitted a 1337 maximum number of times. Upon reception, a receiving node 1338 acknowledges the arrival of the message by sending back a message 1339 acknowledgment (that is, a corresponding MESSAGE_ID_ACK object.) 1340 When the sending node receives the acknowledgment retransmission of 1341 the message is stopped. The interval between retransmissions is 1342 governed by a rapid retransmission timer. The rapid retransmission 1343 timer starts at a small interval and increases exponentially until it 1344 reaches a threshold. 1346 6.2. Time Parameters 1348 The described procedures make use of the following time parameters. 1349 All parameters are per interface. 1351 Rapid retransmission interval Rf: 1353 Rf is the initial retransmission interval for unacknowledged 1354 messages. After sending the message for the first time, the 1355 sending node will schedule a retransmission after Rf seconds. 1356 The value of Rf could be as small as the round trip time (RTT) 1357 between a sending and a receiving node, if known. 1359 Rapid retry limit Rl: 1361 Rl is the maximum number of times a message will be transmitted 1362 without being acknowledged. 1364 Increment value Delta: 1366 Delta governs the speed with which the sender increases the 1367 retransmission interval. The ratio of two successive 1368 retransmission intervals is (1 + Delta). 1370 6.3. Example Retransmission Algorithm 1372 After a sending node transmits a message containing a MESSAGE_ID 1373 object with the ACK_Desired flag set, it should immediately schedule 1374 a retransmission after Rf seconds. If a corresponding MESSAGE_ID_ACK 1375 object is received earlier than Rf seconds, then retransmission 1376 SHOULD be canceled. Otherwise, it will retransmit the message after 1377 (1 + Delta)*Rf seconds. The staged retransmission will continue 1378 until either an appropriate MESSAGE_ID_ACK object is received, or the 1379 rapid retry limit, Rl, has been reached. 1381 A sending node can use the following algorithm when transmitting a 1382 message containing a MESSAGE_ID object with the ACK_Desired flag set: 1384 Prior to initial transmission initialize: Rk = Rf and Rn = 0 1386 while (Rn++ < Rl) { 1387 transmit the message; 1388 wake up after Rk seconds; 1389 Rk = Rk * (1 + Delta); 1390 } 1391 /* acknowledged or no reply from receiver for too long: */ 1392 do any needed clean up; 1393 exit; 1395 Asynchronously, when a sending node receives a corresponding 1396 MESSAGE_ID_ACK object, it will change the retry count, Rn, to Rl. 1398 Note that the transmitting node does not advertise the use of the 1399 described exponential back-off procedures via the TIME_VALUE object. 1401 7. Acknowledgments 1403 This document represents ideas and comments from the MPLS-TE design 1404 team and participants in the RSVP Working Group's interim meeting. 1405 Thanks to Bob Braden, Lixia Zhang, Fred Baker, Roch Guerin, Kireeti 1406 Kompella, David Mankins, Henning Schulzrinne, Andreas Terzis, Lan 1407 Wang and Masanobu Yuhara for specific feedback on the document. 1409 Portions of this work are based on work done by Masanobu Yuhara and 1410 Mayumi Tomikawa [Yuhara]. 1412 8. Security Considerations 1414 No new security issues are raised in this document. See [RFC2205] 1415 for a general discussion on RSVP security issues. 1417 9. References 1419 [Pan] Pan, P., Schulzrinne, H., "Staged Refresh Timers for RSVP," 1420 Global Internet'97, Phoenix, AZ, November 1997. 1421 http://www.ctr.columbia.edu/~pan/papers/timergi.ps 1423 [MD5] Rivest, R., "The MD5 Message-Digest Algorithm," RFC 1321, 1424 April 1992. 1426 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1427 Requirement Levels," RFC 2119. 1429 [RFC2205] Braden, R. Ed. et al, "Resource ReserVation Protocol 1430 -- Version 1 Functional Specification", RFC 2205, 1431 September 1997. 1433 [Yuhara] Yuhara, M., Tomikawa, M. "RSVP Extensions for ID-based 1434 Refreshes," Internet Draft, 1435 draft-yuhara-rsvp-refresh-00.txt, April 1999. 1437 10. Authors' Addresses 1439 Lou Berger 1440 LabN Consulting, LLC 1441 Voice: +1 301 468 9228 1442 Email: lberger@labn.net 1444 Der-Hwa Gan 1445 Juniper Networks, Inc. 1446 385 Ravendale Drive 1447 Mountain View, CA 94043 1448 Voice: +1 650 526 8074 1449 Email: dhg@juniper.net 1451 George Swallow 1452 Cisco Systems, Inc. 1453 250 Apollo Drive 1454 Chelmsford, MA 01824 1455 Voice: +1 978 244 8143 1456 Email: swallow@cisco.com 1458 Ping Pan 1459 Bell Labs, Lucent 1460 101 Crawfords Corner Road, Room 4C-508 1461 Holmdel, NJ 07733 1462 Phone: +1 732 332 6744 1463 Email: pingpan@dnrc.bell-labs.com 1465 Franco Tommasi 1466 University of Lecce, Fac. Ingegneria 1467 Via Monteroni 73100 Lecce, ITALY 1468 Email: tommasi@ilenic.unile.it 1470 Simone Molendini 1471 University of Lecce, Fac. Ingegneria 1472 Via Monteroni 73100 Lecce, ITALY 1473 Email: molendini@ultra5.unile.it