RFC 2907

MADCAP Multicast Scope Nesting State Option

๐Ÿ“… published September 2000, from ietf

MADCAP Multicast Scope Nesting State Option โœจ

Bestie, let's talk about RFC 2907 ๐Ÿฆ‹. It's titled MADCAP Multicast Scope Nesting State Option, written by R. Kermode from Motorola, filed under the Network Working Group, and it's a Standards Track document dated September 2000 ๐ŸŽ€. The header doesn't list anything it obsoletes or updates, so it's standing on its own ๐Ÿ’….


Status of This Memo ๐Ÿ“œ

Okay so this doc is an Internet standards track protocol for the whole Internet community ๐ŸŒ, and it's openly asking for discussion and suggestions for improvements ๐Ÿ’ฌ. If you want the current standardization state and status of this protocol, check the latest edition of the "Internet Official Protocol Standards" (STD 1) ๐Ÿ“–. Distribution of this memo is unlimited ๐Ÿซถ.

Copyright (C) The Internet Society (2000). All Rights Reserved. ๐ŸŒธ

Abstract ๐ŸŒˆ

This document adds a brand-new option to the Multicast Address Dynamic Client Allocation Protocol (MADCAP) so it can handle nested scoping โœจ. The point of the option is to let clients figure out which scopes nest inside each other ๐Ÿงฉ. That info can then be used for expanding scope searches or hierarchical multicast transport ๐Ÿ”ฅ.

Table of Contents ๐Ÿ“š

1.  Introduction. . . . . . . . . . . . . . . . . . . . .    2
     1.1 Time-To-Live (TTL) Scoping Split Horizon Effect.    2
     1.2 Eliminating the Split Horizon Effect with
         Administrative Scoping . . . . . . . . . . . . .    3
     1.3 Terminology. . . . . . . . . . . . . . . . . . .    4
2.   Multicast Nested Scoping State. . . . . . . . . . . .    5
3.   Multicast Scope Nesting State Option. . . . . . . . .    5
     3.1 Multicast Scope List Option  . . . . . . . . . .    5
     3.2 Representing the Multicast Scope Nesting State .    6
     3.3 Multicast Scope Nesting State Option Usage . . .    7
4.   Managing Dynamic Nested Scopes. . . . . . . . . . . .    8
     4.1 MADCAP Server processing of MZAP messages. . . .    9
     4.2 Updating State for Dynamic Nested Scopes due to
             Timer Expiration . . . . . . . . . . . . . .    9
5.   Multicast Scope Nesting State Option Format . . . . .    9
6.   Constants . . . . . . . . . . . . . . . . . . . . . .   10
7.   Security Considerations . . . . . . . . . . . . . . .   11
8.   IANA Considerations . . . . . . . . . . . . . . . . .   11
9.   Acknowledgements. . . . . . . . . . . . . . . . . . .   11
10.  References. . . . . . . . . . . . . . . . . . . . . .   11
11.  Author's Address. . . . . . . . . . . . . . . . . . .   12
12.  Full Copyright Statement. . . . . . . . . . . . . . .   13

1. Introduction ๐ŸŽ€

Okay so the Multicast Address Dynamic Client Allocation Protocol (MADCAP) [RFC2730] is what lets client apps ask multicast address allocation servers for addresses ๐Ÿ™Œ. As part of the Multicast Address Allocation Architecture [RFC2908], MADCAP lets clients reserve, request, and extend leases on multicast addresses ๐Ÿ’–.

Here's the new bit ๐Ÿฆ‹: the "Multicast Scope Nesting State" option. Clients already get the "Multicast Scope List" option, which tells them which scopes exist. This new one tells them how those scopes nest inside each other ๐Ÿงฉ. It also helps clients pick better scopes for a given session and build hierarchies of administratively scoped zones ๐ŸŒˆ. Those hierarchies can then power expanding scope searches, which beat the expanding ring or increasing-TTL searches ๐Ÿ‘‘. Expanding scope searches don't suffer from the Split-Horizon Effect that expanding ring searches have, so they simplify protocol design and localize better ๐Ÿ’…โœจ.

1.1 Time-To-Live (TTL) Scoping Split Horizon Effect ๐Ÿ™ˆ

Multicast searching and localized recovery transport techniques that rely on TTL scoping have a known problem once they're deployed widely ๐Ÿ˜ญ. The villain is the split horizon effect, shown in Figure 1 below ๐Ÿ“. A requestor and a responder each need a TTL big enough to reach each other. When they're many hops apart, the TTL gets huge, and the number of receivers in the multicast tree that hear only the request or only the response can get really big ๐Ÿ’€.

                  .......   *******
               ...       ***       ***        A Only hears S
             ..        **   ..        **      B hears S and R
            .         *       .         *     C Only hears R
           .         *         .         *
           .         S<------->R         *    . TTL Boundary for S
           .         *         .         *    * TTL Boundary for R
            .    A    *   B   .   C     *
             ..        **   ..        **
               ...       ***       ***
                  .......   *******

            Figure 1 : Split Horizon Problem from TTL scoping

1.2 Eliminating the Split Horizon Effect with Administrative Scoping ๐Ÿงš

Ideally, we want something that either gets rid of the A and C regions in Figure 1 or makes them way smaller, as shown in Figure 2 ๐ŸŒธ. Administrative scoping [RFC2365] is one mechanism that does this ๐Ÿซถ. Routers prevent packets from passing through within a certain range of multicast addresses. Routers that support this can be configured to draw a perimeter around a region of the network. That perimeter encloses an administratively scoped zone, and traffic sent to that range of multicast addresses can neither leave nor enter it ๐Ÿ”’. Routers can build and manage these zones using the MZAP [RFC2776] protocol ๐Ÿ’œ.

                    ........................
                  .                          .
                 .        many hops           .
                 .S<------------------------>R.
                 .                            .
                  .                          .
                    ........................

          Figure 2 : Eliminating the Split Horizon Effect

MZAP can also tell whether administratively scoped regions nest inside one another ๐Ÿช†. That's what lets you build hierarchies like the one in Figure 3 โœจ.

        . . . . .  . . . . . . . . . . . . .
       .            scope a                 .     Scope Boundaries
      .                                      .     . = scope  a
     .  _______________      ________________ .    - = scopes b,c
     . /    scope b    \    /  scope c       \ .   # = scopes d,e,f, & g
     .|                 |  |                  |.
     .|  #####    ##### |  |  #####    #####  |.
     .| #scope#  #scope#|  | #scope#  #scope# |.
      .\ # d  #  # e   #|  | # f   #  #  g # /.
       .\ ####    #####/    \ #####    #### /.
        .\____________/      \_____________/.
         . . . . . . . . . . . . . . . . .

          Figure 3 : Admin Scope Zone Nesting Hierarchy example

Here's the generic expanding scope search algorithm [KERM] that takes advantage of a hierarchy of administratively scoped zones ๐Ÿ”ฅ:

  1. Starting with the smallest known scope for the session, a requestor in that session issues a request and waits for a reply.
  2. If a node within that scope hears a request at a certain scope that it can satisfy, it sends a response at that same scope, possibly after some random delay to reduce duplicate responses ๐ŸŽฒ.
  3. Nodes that receive a response to a particular request while waiting to send a response to that request suppress their own response ๐Ÿค.
  4. If a requestor issues a request to a scope and doesn't hear a response after a specified amount of time, it retransmits its request at the same scope a small number of additional times. If those retries still don't get a response, the requestor increases the scope to the next largest scope and tries again ๐Ÿ”.
  5. Requestors keep increasing the scope of the request according to step 4 until either a response comes back or the largest legal scope for the session is reached ๐Ÿ. If attempts at the largest possible scope for the session still don't yield a response, the requestor may conclude that the request cannot be met ๐Ÿฅฒ.

1.3. Terminology ๐Ÿ“–

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119] ๐Ÿ’…. Those are the official vibes-check words, so pay attention to them ๐Ÿ‘€.

Throughout the rest of this document, "server" or "MADCAP server" refers to a host that provides multicast address allocation services via MADCAP ๐Ÿ–ฅ๏ธ. "Client" or "MADCAP client" refers to a host that requests multicast address allocation services via MADCAP ๐Ÿ“ฑ.

2. Multicast Nested Scoping State ๐Ÿงฉ

Two scopes, X and Y, can be related in one of four possible ways ๐Ÿฆ‹:

  1. X nests inside Y,
  2. Y nests inside X,
  3. X and Y do not nest (the overlap case), and
  4. X and Y nest inside each other.

The fourth case SHOULD be interpreted as meaning that X and Y have exactly the same border ๐ŸŽฏ. That does not mean X and Y are the same scope, though, since they might cover different ranges of the multicast address space ๐Ÿ™…โ€โ™€๏ธ.

This state MUST be stored in the MADCAP servers, and those servers MUST allow the state to be updated as network conditions change ๐Ÿ”„. So each MADCAP server SHOULD define two pieces of state that describe whether "scope X nests in scope Y" and vice versa ๐Ÿ’œ. For the rest of this document, the nesting relationship is written as "/", where X/Y means "X nests inside Y" ๐Ÿช„. That relation takes one of the values "true" or "false" โœ…โŒ. Nesting state that's indeterminate counts as "false" ๐Ÿซ .

3 Multicast Scope Nesting State Option ๐ŸŽ€

The "Multicast Scope Nesting State" option is proposed to level up the "Multicast Scope List" option in MADCAP by giving applications extra info about how scopes nest ๐ŸŒŸ. This option is OPTIONAL, which means MADCAP servers MAY implement it, but they aren't required to ๐Ÿซถ.

MADCAP servers shall learn this extra nesting information through static configuration, or through some other protocol, such as MZAP [RFC2776], that manages administrative scopes dynamically ๐ŸŒธ.

3.1 Multicast Scope List Option ๐Ÿ“‹

To get the "Multicast Scope Nesting State" option, you first have to understand the "Multicast Scope List" option ๐Ÿค“.

The Multicast Scope List option in MADCAP is how MADCAP servers tell MADCAP clients which zones are visible ๐Ÿ‘€. Visible scopes are listed inside the option as successive tuples, and each tuple holds the following info ๐Ÿงพ:

  • Scope ID: The smallest address for the range of multicast addresses covered by this scope.
  • Last Address: The largest address for the range of multicast addresses covered by this scope.
  • TTL: The TTL to be used when sending messages to this scope.
  • Name(s): One or more language-specific names for the scope. ๐ŸŒˆ

3.2 Representing the Multicast Scope Nesting State โœจ

okay so, if you've got a Multicast Scope List with descriptions for n scopes, you can make n(n-1)/2 pairings ๐ŸŽ€ Earlier in section 2 we saw that each pairing can be in one of four possible states. So for a list of n scopes, there are 2 pieces of information for every pairing, which adds up to n(n-1) pieces of info about which scopes do and don't nest inside each other ๐Ÿงฎ

There are a bunch of ways to store this, like full matrices, sparse matrices, or lists of variable-length lists ๐Ÿ’… But for maximal efficiency and flexibility, the Multicast Nesting State Option uses a bit-packed matrix. The matrix is built from X/Y state pieces, where X is the row and Y is the column. A "1" means "row nests inside column" is true. A "0" means that relationship is either false or indeterminate ๐Ÿฆ‹ The diagonal gets removed, since that's the case where X is the same as Y, and then each row gets zero-padded out to the next byte boundary. That's the final representation ๐Ÿซถ

Here's an example of how the matrix comes together for these scope nestings: S1/S2, S2/S3, S2/S4, S3/S5, S4/S5, S5/S6, and S6/S7. Note that a bunch of extra nesting relationships are implied by this set too, so it's giving efficiency ๐ŸŒธ

                         ________________________________
                        /............          \    \    \
                       /.S3 _________._____     \    \    \
                      |.   /+--+    \ .    \    |    |    |
                      |.  | |S1| S2 | . S4 | S5 | S6 | S7 |
                      |.   \+--+    / .    |    |    |    |
                       \.   \______/ .     |    |    |    |
                        \....\.......      /    /    /    /
                         \    \___________/    /    /    /
                          \___________________/    /    /
       \ Y                 \______________________/    /
      X \ 1 2 3 4 5 6 7     \_________________________/
         +-+-+-+-+-+-+-+
      1  |1 1 1 1 1 1 1|      *111111       1111 1100       0xfc
      2  |0 1 1 1 1 1 1|      0*11111       0111 1100       0x7c
      3  |0 0 1 0 1 1 1|      00*0111       0001 1100       0x1c
      4  |0 0 0 1 1 1 1|  =>  000*111   =>  0001 1100   =>  0x1c
      5  |0 0 0 0 1 1 1|      0000*11       0000 1100       0x0c
      6  |0 0 0 0 0 1 1|      00000*1       0000 0100       0x04
      7  |0 0 0 0 0 0 1|      000000*       0000 0000       0x00
         +-+-+-+-+-+-+-+                           ^^
                          * = X/Y where   zero padding
                             X == Y
         Final Representation: 0xfc 0x7c 0x1c 0x1c 0x0c 0x04 0x00

Figure 4. Scope Nesting Example

3.3 Multicast Scope Nesting State Option Usage ๐ŸŒˆ

okay, so the "Multicast Scope Nesting State" option depends on the "Multicast Scope List" option, and there's a good reason for that ๐Ÿ’– The Multicast Nest State Option needs the scopes to be identified along with their nesting properties. The info that describes a scope lives in the Multicast Scope List option, and that info can change. So the MADCAP messages that carry the Multicast Scope Nesting State option have to be atomic, which means they must include the "Multicast Scope List Option" too ๐Ÿ”’

So the "Multicast Scope Nesting State" option MUST only be used in messages that carry the "Multicast Scope List" option, specifically:

ACK (in response to GETINFO)

Since the Multicast Nest State option depends on the Multicast Scope List option, it MUST NOT be included without the Multicast Scope List option ๐Ÿ™…โ€โ™€๏ธ

If clients want to explicitly learn the nesting relationships between scopes, they should send a GETINFO message to the server, with the "Multicast Scope List" AND "Multicast Scope Nesting State" option codes listed in an Option Request option ๐Ÿงš

4. Managing Dynamically Nested Scopes ๐Ÿฆ‹

Scopes can be configured manually or automatically ๐Ÿ’… When scopes are configured manually, the relationships between them are also static, assuming the network doesn't partition because of router failure. If the network partitions, or heals after a partition, the nesting relationships are highly likely to change. Nesting relationships will also change when a network comes up, or when a change is deliberately made to a router, either through manual reconfiguration or by some automatic means ๐Ÿ˜ญ

To make sure nesting relationships are correctly determined when scope boundaries change, MADCAP servers MUST include a mechanism that allows for:

  • a) whether the nesting decision is still under consideration or can be considered definitive, and therefore announced to MADCAP clients.
  • b) whether one or both scopes for a particular nesting state entry have been destroyed, and hence whether the nesting state should therefore be discarded.
  • c) whether the scope boundaries have changed so that whereas scope X did or did not nest inside scope Y, the opposite is now true.

To realize a) and b), MADCAP servers MUST implement the following two timers: NEST_NO_DECISION_TIMER and ZONES_EXIST_TIMER โฐ

The first timer, NEST_NO_DECISION_TIMER, marks time between a MADCAP server's first hearing of a scope and it making a decision about its relationship to other zones. Until this timer expires, MADCAP servers MUST NOT conclude that the scope nests within another ๐Ÿ™ˆ

NEST_NO_DECISION_TIMER is also used to time out the X/Y = "false" state, so X/Y can be reset to true in the event that the boundaries for zone X and zone Y change so that zone X now nests inside zone Y ๐Ÿ”

The second timer, ZONES_EXIST_TIMER, is used to time out the internal state between two scopes in the event that one or both scopes are destroyed ๐Ÿ’€

4.1 MADCAP Server processing of MZAP messages ๐ŸŽ€

When MZAP is used to discover the nesting relationship between scopes, MADCAP servers eavesdrop on the MZAP messages that Zone Border Routers (ZBR) periodically transmit during the normal course of administrative scope boundary maintenance. This way they can learn which scopes exist (via Zone Announcement Messages, ZAMs) and which of those scopes do not nest (via Not Inside Messages, NIMs). This state must be cached within the MADCAP server ๐Ÿง 

When a MADCAP server S receives a NIM from a ZBR containing information that scope X does not nest in scope Y, it MUST update its internal state in the following way:

  1. S MUST update its internal X/Y state to "false".
  2. S MUST restart NEST_NO_DECISION_TIMER for the newly updated X/Y state.

4.2 Updating State for Dynamic Scopes due to timer expiration. ๐ŸŒธ

MADCAP servers update X/Y nesting state when timers expire, like this:

  • If the NEST_NO_DECISION_TIMER expires for a state entry X/Y AND no MADCAP messages have been received that indicate scope X does not nest inside scope Y, a MADCAP Server, S, MUST conclude that scope X nests inside scope Y. As a result, S changes X/Y from "false" to "true".

When X/Y changes from "false" to "true", S must also start the ZONES_EXIST_TIMER for X/Y. The ZONES_EXIST_TIMER should only reset when a Zone Announcement Message (ZAM) has been received for both zone X and zone Y since the last time it was restarted. This makes sure both zone X and zone Y are known to still exist ๐Ÿ‘‘

  • If the ZONES_EXIST_TIMER expires for a state entry X/Y, S SHOULD conclude that either zone Y or zone X no longer exists, and hence that both X/Y and Y/X state should be destroyed ๐Ÿซ 

5. Multicast Scope Nesting State Option Format ๐Ÿงš

       Code        Len     Count  Nest State Matrix
  +-----+-----+-----+-----+-----+-----+-...-+-----+
  |    17     |     p     | m   | N1  |     | Nm  |
  +-----+-----+-----+-----+-----+-----+-...-+-----+
  • Code: 16 bits. Option identifier 17.
  • Len: 16 bits. The length of the option in bytes.
  • Count: 8 bits. The number of zones present in the Nest State Matrix. This value MUST be identical to the Count field in the preceding Multicast State List option. If this is not the case, the scope nesting state information MUST BE ignored ๐Ÿšซ
  • Nest State Matrix: The compressed bit-packed representation of the matrix, derived in the same way as shown in Figure 4. For N scopes, the compressed matrix will be N times ceil((N-1)/8) bytes long, where ceil() is the function that rounds up to the nearest integer. The scopes corresponding to the rows and columns of this matrix are listed in the same order as they appear in the Multicast Scope List Option โœจ

6. Constants ๐Ÿ’œ

  • [NEST_NO_DECISION_TIMER] The time after which a MADCAP server or client can assume that a message announcing that two zones do not nest should not be received. The length of this timer depends on the zone announcement protocol used to inform the MADCAP router of which zones currently exist. When MZAP [RFC2776] is used, this value should be greater than the MZAP timeout value NIM-INTERVAL +30%. This corresponds to a timeout value of 1800 + 30% = 2340 seconds (39 minutes) โฑ๏ธ
  • [ZONES_EXIST_TIMER] The time after which a MADCAP server or client should assume that the zone in question does not exist when zones are detected dynamically. The length of this timer depends on the zone announcement protocol used to inform the MADCAP router of which zones currently exist. When MZAP [RFC2776] is used, this value should be no less than the MZAP timeout value NIM-HOLDTIME, which has a default of 5460 seconds (91 minutes) ๐Ÿ•ฐ๏ธ

7. Security Considerations ๐Ÿ”

Since this document proposes an extension to the MADCAP protocol through a new option, the same set of security concerns applies ๐Ÿšจ

On top of those, there are concerns that would come up if the information in the Multicast Scope Nesting State option were falsified. In that case, clients would be misinformed about which scopes nest inside one another ๐Ÿ˜ฑ They would then make incorrect decisions about the order in which to use the scopes. The effect would be to use larger scopes than necessary, which would effectively flatten any scope hierarchy present and nullify the advantage the hierarchy provides ๐Ÿ’€

Thus, a malformed or tampered Multicast Scope Nesting option may cause protocols that rely on the existence of a scoping hierarchy to scale less well, but it would not prevent them from working. ๐Ÿ™

8. IANA Considerations ๐Ÿฆ‹

The Multicast Nesting State Option has been assigned MADCAP option code 17 by the IANA [RFC2730] ๐ŸŽŸ๏ธ

9. Acknowledgments ๐Ÿซถ

The Author would like to acknowledge Mark Handley and Dave Thaler for the helpful discussions and feedback that helped shape and refine this document ๐Ÿ’–

10. References ๐Ÿ“š

okay bestie, here's the reading list ๐Ÿค“ the whole RFC leans on these, so they stay exactly as written:

  • [KERM] Kermode, R., "Smart Network Caches: Localized Content and Application Negotiated Recovery Mechanisms for Multicast Media Distribution", Ph.D. Thesis, MIT Media Laboratory, June 1998.
  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC2365] Meyer, D., "Administratively Scoped IP Multicast", BCP 23, RFC 2365, July 1998.
  • [RFC2730] Patel, B.V., Shah, M. and S.R. Hanna, "Multicast Address Dynamic Client Allocation Protocol (MADCAP)", RFC 2730, December 1999.
  • [RFC2776] Handley, M., Thaler, D. and R. Kermode, "Multicast-Scope Zone Announcement Protocol (MZAP)", RFC 2776, February 2000.
  • [RFC2908] Handley, M., Thaler, D. and D. Estrin, "The Internet Multicast Address Allocation Architecture", RFC 2908, September 2000.

11. Author's Address ๐ŸŽ€

here's where you can reach the author, Roger Kermode, in Australia ๐Ÿฆ‹

Roger Kermode
Motorola Australian Research Centre
Locked Bag 5028
Botany, NSW 1455
Australia

EMail: Roger.Kermode@motorola.com

the legal stuff is serious, so I'm keeping every word of it exactly the same โš–๏ธโœจ

Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement ๐ŸŒธ

funding for the RFC Editor function is currently provided by the Internet Society ๐Ÿซถ

๐Ÿ“ฆ where this page comes from