RFC 3528 EXPERIMENTAL SERVICE DISCOVERY · SLP · NETWORKING

Mesh-enhanced Service Location Protocol (mSLP)

Directory Agents that peer with each other in fully meshed groups and share new service registrations.

On rfc-editor.org ↗
PUBLISHED
May 2003
AUTHORS
W. Zhao, H. Schulzrinne, E. Guttman
STREAM
INDEPENDENT
DOCUMENT STATUS
Experimental
NEW DAADVERT ATTRIBUTE
mesh-enhanced
MESHFWD EXTENSION ID
0x0006
ANTIETRPRQST FUNCTION-ID
12
KEEPALIVE INTERVAL
200 seconds
TIMEOUT
300 seconds
DOI
10.17487/RFC3528

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                            W. Zhao
Request for Comments: 3528                                H. Schulzrinne
Category: Experimental                               Columbia University
                                                              E. Guttman
                                                        Sun Microsystems
                                                              April 2003


             Mesh-enhanced Service Location Protocol (mSLP)

Status of this Memo

   This memo defines an Experimental Protocol for the Internet
   community.  It does not specify an Internet standard of any kind.
   Discussion and suggestions for improvement are requested.
   Distribution of this memo is unlimited.

Copyright Notice

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

Abstract

   This document describes the Mesh-enhanced Service Location Protocol
   (mSLP).  mSLP enhances the Service Location Protocol (SLP) with a
   scope-based fully-meshed peering Directory Agent (DA) architecture.
   Peer DAs exchange new service registrations in shared scopes via
   anti-entropy and direct forwarding.  mSLP improves the reliability
   and consistency of SLP DA services, and simplifies Service Agent (SA)
   registrations in systems with multiple DAs.  mSLP is backward
   compatible with SLPv2 and can be deployed incrementally.

Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
       1.1.  Notation Conventions . . . . . . . . . . . . . . . . . .  2
       1.2.  Terminology  . . . . . . . . . . . . . . . . . . . . . .  3
       1.3.  Compatibility  . . . . . . . . . . . . . . . . . . . . .  3
   2.  Scope-based Fully-meshed Peering DA Architecture . . . . . . .  4
   3.  Peer Relationship Management . . . . . . . . . . . . . . . . .  6
       3.1.  Learning about New Peers . . . . . . . . . . . . . . . .  6
       3.2.  Establishing a Peering Connection  . . . . . . . . . . .  6
       3.3.  Exchanging Information about Existing Peers  . . . . . .  6
       3.4.  Maintaining a Peer Relationship  . . . . . . . . . . . .  7
       3.5.  Tearing Down a Peer Relationship . . . . . . . . . . . .  7
   4.  Registration Propagation Control . . . . . . . . . . . . . . .  7
       4.1.  Accept ID and Propagation Order  . . . . . . . . . . . .  7
       4.2.  Version Timestamp and Registration Version Resolution  .  8
       4.3.  Mesh Forwarding Extension  . . . . . . . . . . . . . . .  8
       4.4.  Summary Vector . . . . . . . . . . . . . . . . . . . . .  9
       4.5.  Service Deregistration . . . . . . . . . . . . . . . . . 10
       4.6.  Anti-entropy Request Message . . . . . . . . . . . . . . 10
       4.7.  Anti-entropy . . . . . . . . . . . . . . . . . . . . . . 11
       4.8.  Direct Forwarding  . . . . . . . . . . . . . . . . . . . 11
       4.9.  SrvAck Message . . . . . . . . . . . . . . . . . . . . . 12
       4.10. Control Information  . . . . . . . . . . . . . . . . . . 12
   5.  Summary  . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
   6.  Protocol Timing Defaults . . . . . . . . . . . . . . . . . . . 13
   7.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 13
   8.  Security Considerations  . . . . . . . . . . . . . . . . . . . 13
   9.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 13
   10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 13
       10.1. Normative References . . . . . . . . . . . . . . . . . . 13
       10.2. Informative References . . . . . . . . . . . . . . . . . 14
   11. Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 14
   12. Full Copyright Statement . . . . . . . . . . . . . . . . . . . 15

1. Introduction

   In the Service Location Protocol (SLPv2 [RFC2608]), Directory Agents
   (DAs) accept service registrations from Service Agents (SAs) and
   answer queries from User Agents (UAs); they enhance the performance
   and scalability of SLPv2.  The use of scopes in SLPv2 further
   improves its scalability.  In general, a DA can serve multiple
   scopes, and a scope can be served by multiple DAs.  When multiple DAs
   are present for a scope, how should they interact with each other?
   This document describes the Mesh-enhanced Service Location Protocol
   (mSLP), addressing this open issue in SLPv2.

   mSLP defines a scope-based fully-meshed peering DA architecture: for
   each scope, all DAs serving the scope form a fully-meshed peer
   relationship (similar to IBGP [RFC1771]).  Peer DAs exchange new
   service registrations in shared scopes via anti-entropy [EPID-
   ALGO,UPDA-PROP] and direct forwarding.  mSLP improves the reliability
   and consistency of SLP DA services, and simplifies SA registrations
   in systems with multiple DAs.

1.1. Notation Conventions

   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 BCP 14, RFC 2119
   [RFC2119].

1.2. Terminology

   Peer DAs (or Peers)
      DAs that share one or multiple scopes are peers.

   Peering Connection
      A persistent connection (e.g., TCP) that provides reliable and
      ordered transfers between two peers.  The closing of a peering
      connection terminates the peer relationship.

   Mesh-enhanced DA (MDA)
      An MDA carries the "mesh-enhanced" attribute keyword in its DA
      Advertisement (DAAdvert) message, maintains peering connections to
      all peers, and properly interacts with peers.

   Mesh-enhanced SA (MSA)
      An MSA uses the Mesh Forwarding extension (Section 4.3) when it
      registers with MDAs.

   Registration Update
      A registration update refers to a Service Registration (SrvReg) or
      Service Deregistration (SrvDeReg) message.

   Registration State
      A registration state refers to an entry in the registration
      database.

   Accept DA
      When a DA accepts a registration update from an SA, the DA is the
      accept DA for the update.

   Accept Timestamp
      The arrival timestamp of a registration update at its accept DA is
      the accept timestamp of the update.  All accept timestamps
      assigned by the same DA MUST be monotonically increasing.

   Version Timestamp
      When an MSA sends a registration update to an MDA, the MSA assigns
      a version timestamp to the update.  All version timestamps
      assigned by the same MSA MUST be monotonically increasing.

1.3. Compatibility

   mSLP is designed as a lightweight enhancement to SLPv2.  It is
   backward compatible with SLPv2.  mSLP defines two enhanced entities:
   MDAs and MSAs.  They can be deployed incrementally.  An enhanced
   entity supports extended operations without affecting its original
   functionality as defined in RFC 2608 [RFC2608].  For simplicity and
   compatibility, an enhanced entity works as a non-enhanced entity to
   interact with non-enhanced entities.  Table 1 summarizes all
   interactions involving an MDA or MSA.

            Interaction       Equivalent To     Defined In
            ----------------------------------------------
            MDA <--> MDA                           mSLP
            MDA <--> MSA                           mSLP
            MDA <--> DA        DA <--> DA        RFC 2608
            MDA <--> SA        DA <--> SA        RFC 2608
            MDA <--> UA        DA <--> UA        RFC 2608
            MSA <--> DA        SA <--> DA        RFC 2608
            MSA <--> UA        SA <--> UA        RFC 2608

             Table 1. Interactions involving an MDA or MSA

2. Scope-based Fully-meshed Peering DA Architecture

                                 (x,y)
          +--------------------------------------------------+
          |                  +------------+                  |
          |                  |  MDA4 (z)  |                  |
          |                  +------------+                  |
          |                        | (z)                     |
   +------------+     (y)    +------------+     (y)    +------------+
   | MDA1 (x,y) | ---------- | MDA3 (y,z) | ---------- | MDA2 (x,y) |
   +------------+            +------------+            +------------+

      Figure 1. A scope-based fully-meshed peering DA architecture

   mSLP employs a scope-based fully-meshed peering DA architecture.  For
   each scope, all MDAs that serve the scope form a fully-meshed peer
   relationship.  Figure 1 shows an example for four MDAs and three
   scopes (x, y, and z).  Note that a single peering connection is
   needed between two peers for exchanging all service registrations in
   their shared scopes.

   This architecture enhances SLP DA services.  First, it improves the
   consistency among peer DAs by automatically reconciling inconsistent
   states among them.  Second, it enables newly booted and rebooted MDAs
   to catch up on all new registrations at once from their peers, purely
   through DA interaction, without involving SAs.

   This architecture also simplifies SA registrations.  In SLPv2, an SA
   needs to discover and register with all existing DAs in its scopes,
   and re-register when new DAs are discovered or old DAs are found to
   have rebooted.  In mSLP, for all MDAs, an MSA only needs to discover
   and register with a sufficient number of them, such that the union of
   their scopes covers its scopes; the registrations will then be
   propagated automatically to other MDAs in the registration scopes.
   For example, in Figure 2, MSA1 only needs to discover and register
   with MDA2, or with both MDA1 and MDA3.

                 (option2)  +------------+  (option2)
         +----------------- | MSA1 (x,y) | -----------------+
         |                  +------------+                  |
         |                        | (option1)               |
         V                        V                         V
   +----------+             +------------+             +----------+
   | MDA1 (x) | ----------- | MDA2 (x,y) | ----------- | MDA3 (y) |
   +----------+             +------------+             +----------+

            Figure 2. Options for registering with MDAs

   Furthermore, this architecture provides scaling advantages.  Consider
   a scope that has N SAs and M DAs, and assume N > M >= 2.  Although
   mSLP and SLPv2 need the same number of SLP messages to distribute
   registrations from N SAs to M DAs, mSLP can reduce the number of
   agents needed for taking care of registration distribution, and
   reduce the number of TCP connections needed if each SA uses TCP for
   its registrations.  More specifically, the agents that need to take
   care of registration distribution are all N SAs in SLPv2, but only M
   DAs in mSLP.  Also, the number of needed TCP connections is N*M in
   SLPv2 as each SA has to connect with each DA and register, but only
   N+M*(M-1)/2 in mSLP as each SA only needs to connect to one
   contacting DA of a full mesh of M node and register, then
   registrations are propagated through the DA mesh.  For N=100 and
   M=10, SLPv2 needs 1000 TCP connections, but mSLP only needs 145 such
   connections.

   Note that as mSLP employs full-mesh topology, which is mainly for
   simplicity and reliability, it cannot scale to a large number of MDAs
   in a single mesh.  In general, mSLP can be applied if the number of
   MDAs in a mesh is on the order of tens or below.  One way to avoid
   having a large number of MDAs in a mesh is to split the scope into
   several finer scopes.  For example, if we have N MDAs for scope "x",
   and N is too large, then we can split "x" into two finer scopes:
   "x-1" and "x-2", with N1 MDAs for "x-1" only, N2 MDAs for "x-2" only,
   N3 MDAs for both "x-1" and "x-2", and N1+N2+N3=N.  Thus, instead of
   having a large full mesh of size N, we now have two smaller full
   meshes of size N1+N3 and N2+N3, respectively.  Accordingly, a service
   registration that previously targets for scope "x", now needs to be
   registered under both "x-1" and "x-2".

3. Peer Relationship Management

3.1. Learning about New Peers

   An MDA can learn about new peers via static configuration, DHCP
   [RFC2610], and DAAdvert multicast and unicast.  In any case, an MDA
   MUST get a peer's DAAdvert before establishing a peer relationship to
   the peer.

3.2. Establishing a Peering Connection

   After getting a new peer's DAAdvert, an MDA establishes a peering
   connection (if such a connection does not exist yet) to the peer, and
   sends its DAAdvert via the connection (Figure 3).  An MDA can
   identify a peering connection initiated by a peer by receiving the
   peer's DAAdvert from the connection.  Normally, a single peering
   connection is set up between two peers, but there is a small
   possibility that a pair of peering connections might be created
   between two peers if they try to initiate a connection to each other
   at almost the same time.  Thus, when an MDA identifies a new peering
   connection initiated by a peer, it SHOULD check whether it has
   initiated another peering connection to the peer.  If this is the
   case, and it has a lower-numbered IP address than the peer, then the
   MDA SHOULD terminate the connection it has initiated.

      +------+    (1) MDA2's DAAdvert |                 +------+
      |      | <----------------------+                 |      |
      | MDA1 |    (2) Create a Peering Connection       | MDA2 |
      |      | ---------------------------------------> |      |
      +------+    (3) MDA1's DAAdvert                   +------+

             Figure 3. Establishing a peering connection

3.3. Exchanging Information about Existing Peers

   After establishing a peering connection, two peers (say, MDA1 and
   MDA2) exchange information about their existing peers by forwarding
   peers' DAAdverts via the peering connection (Figure 4).  MDA1 will
   forward the DAAdvert of a peer (say, MDA3) to MDA2 if:

      (1) MDA3 shares scopes with MDA2, and
      (2) MDA3 is an active peer of MDA1 (i.e., there is a peering
          connection between MDA3 and MDA1) or an accept DA for
          registrations currently maintained by MDA1 (i.e., MDA1
          has registrations originally accepted by MDA3).

   MDA2 operates similarly.  Note that all DAAdverts can be sent as one
   TCP stream for efficiency.  Exchanging information about existing
   peers enables an MDA to learn about new peers incrementally.

      +------+      DAAdverts of MDA1's existing peers     +------+
      |      | ------------------------------------------> |      |
      | MDA1 |             (Peering Connection)            | MDA2 |
      |      | <------------------------------------------ |      |
      +------+      DAAdverts of MDA2's existing peers     +------+

          Figure 4. Exchanging information about existing peers

3.4. Maintaining a Peer Relationship

      +------+              MDA1's DAAdvert             +------+
      |      | ---------------------------------------> |      |
      | MDA1 |           (Peering Connection)           | MDA2 |
      |      | <--------------------------------------- |      |
      +------+              MDA2's DAAdvert             +------+

            Figure 5. Maintaining a peer relationship

   To detect failures (network partitions and peer crashes), mSLP uses a
   heart-beat mechanism.  An MDA sends its DAAdvert to peers (Figure 5)
   every CONFIG_DA_KEEPALIVE seconds.  The timeout value for this
   message is CONFIG_DA_TIMEOUT seconds (Section 6).

3.5. Tearing Down a Peer Relationship

   An MDA SHOULD tear down a peer relationship when it finds that the
   peer has closed the peering connection, when it receives a DAAdvert
   multicast from the peer with a DA stateless boot timestamp set to 0
   (meaning that the peer is going to shutdown), or when it has not
   received the peer's DAAdvert for more than CONFIG_DA_TIMEOUT seconds.

4. Registration Propagation Control

4.1. Accept ID and Propagation Order

   When an MDA accepts a registration update from an MSA, the MDA
   assigns a unique accept ID to the update.  An accept ID has two
   components: an accept DA URL and an accept timestamp.  The accept
   timestamp is a 64-bit integer representing elapsed microseconds since
   00:00 Coordinated Universal Time (UTC), January 1, 1900.  Figure 6
   shows the format for an accept ID entry.  A registration state has
   the same accept ID as that of the latest update applied to it.

       0                   1                   2                   3
       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Accept Timestamp                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Accept Timestamp, cont'd.              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Length of Accept DA URL    |         Accept DA URL         \
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Figure 6. Accept ID entry

   An MDA MUST propagate registrations in the increasing order of their
   accept IDs, i.e., registrations having the same accept DA MUST be
   propagated in the increasing order of their accept timestamps.  Note
   that registrations having different accept DAs MAY be propagated in
   any order.

4.2. Version Timestamp and Registration Version Resolution

   When registrations are propagated among MDAs, their arrival
   timestamps at MDAs cannot be used for version resolution.  For
   example, assume that MSA1 sends a registration (R1) to MDA1 first,
   and a new version of the same registration (R2) to MDA2 later.  When
   R1 and R2 are propagated, the arrival timestamp of R1 at MDA2 is
   later than that of R2, but R1 SHOULD NOT overwrite R2 at MDA2 as R2
   is a newer version.

   mSLP resolves registration versions using version timestamps.  When
   an MSA sends a registration update to an MDA, the MSA assigns a
   version timestamp to the update.  The version timestamp is a 64-bit
   integer representing elapsed microseconds since 00:00 UTC, January 1,
   1900.  mSLP assumes that each registration is updated only by one SA,
   thus an MDA does not need to compare version timestamps from
   different MSAs.  An MDA installs a registration update if the update
   has a newer version timestamp (from an MSA), or the update does not
   have the Mesh Forwarding extension (from a non-MSA).

4.3. Mesh Forwarding Extension

   The Mesh Forwarding (MeshFwd) extension carries a version timestamp
   and an accept ID entry.  Figure 7 shows its format and two defined
   Forwarding IDs (Fwd-IDs).

   The MeshFwd extension is used with a Srv(De)Reg message, but it can
   only be used with a fresh SrvReg, or a complete SrvDeReg.

       0                   1                   2                   3
       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | MeshFwd Extension ID = 0x0006 |  Next Extension Offset (NEO)  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | NEO, cont'd.  |     Fwd-ID    |       Version Timestamp       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                  Version Timestamp, cont'd.                   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Version Timestamp, cont'd.  |       Accept ID Entry         \
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Fwd-ID         Abbreviation
                        1              RqstFwd
                        2              Fwded

                 Figure 7. MeshFwd extension and its Fwd-IDs

   An MSA uses the RqstFwd MeshFwd extension (Fwd-ID = RqstFwd, accept
   timestamp = 0) in a Srv(De)Reg to explicitly request an MDA (the
   accept DA) to forward the message.

   An MDA uses the Fwded MeshFwd extension (Fwd-ID = Fwded, accept
   timestamp != 0) in each Srv(De)Reg sent from it to another MDA,
   either forwarding a Srv(De)Reg received from an MSA (if the message
   has the RqstFwd MeshFwd extension), or propagating a registration
   state in its database.

4.4. Summary Vector

   An MDA uses a summary vector to represent its received Srv(De)Reg(s)
   that have a MeshFwd extension.  This summary vector records the
   latest accept timestamp for each accept DA that appears in the
   MeshFwd extension.  For example, consider n MDAs for a scope, if MDAi
   has a summary vector as ((MDA1, T1), (MDA2, T2), ..., (MDAn, Tn)),
   then MDAi has received all registrations originally accepted by MDAj
   up to timestamp Tj, where 1<=i,j<=n.

   An MDA updates its summary vector when it receives a Srv(De)Reg that
   has a MeshFwd extension.  The MDA adds a new accept ID to its summary
   vector if the Srv(De)Reg has a new accept DA; the MDA updates the
   accept timestamp of an existing accept ID in its summary vector if
   the Srv(De)Reg has an existing accept DA.

4.5. Service Deregistration

   When an MDA receives a SrvDeReg that has a MeshFwd extension, it
   SHOULD retain the corresponding registration in the database, and
   mark it as deleted.  This way, the registration will not appear in
   any query reply, and an earlier SrvReg will not mistakenly cause the
   registration to reappear in the database.  A registration state will
   be purged from the database when it expires.

4.6. Anti-entropy Request Message

   The Anti-entropy Request (AntiEtrpRqst) message carries an anti-
   entropy type ID and a list of accept ID entries.  Figure 8 shows its
   format and two defined anti-entropy type IDs.

       0                   1                   2                   3
       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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Service Location Header (AntiEtrpRqst Function-ID =  12)   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Anti-Entropy Type ID     |  Number of Accept ID Entries  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Accept ID Entry 1         . . .         Accept ID Entry k   \
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Anti-Entropy Type       Type ID
                       selective               1
                       complete                2

          Figure 8. AntiEtrpRqst message and anti-entropy types

   The AntiEtrpRqst message is used by an MDA to request new
   registration states from a peer.  The anti-entropy type is either
   selective or complete.  If the anti-entropy type is selective, only
   registration states that have an accept ID greater than any specified
   accept ID in the message are requested.  If the anti-entropy type is
   complete, all registration states that have an accept ID greater than
   any specified accept ID in the message or have an accept DA not
   specified in the message are requested.

   For example, consider three MDAs (MDA1, MDA2, and MDA3) for a scope.
   MDA2 has registration states originally accepted by MDA1, MDA2, and
   MDA3.  If MDA1 sends a selective AntiEtrpRqst to MDA2 using an accept
   ID list as ((MDA2, T2)), then MDA1 only requests registration states
   that are originally accepted by MDA2, and have an accept timestamp
   greater than T2.  If MDA1 sends a complete AntiEtrpRqst to MDA2 using
   an accept ID list as ((MDA2, T2)), then MDA1 requests all
   registration states originally accepted by MDA1 and MDA3, plus those
   originally accepted by MDA2 and having an accept timestamp greater
   than T2.

4.7. Anti-entropy

   Anti-entropy is used for exchanging initial registration states when
   two peers recognize each other for the first time, and for updating
   new registration states after failures.

   When an MDA receives an AntiEtrpRqst from a peer, it sends the
   requested new registration states in the increasing order of their
   accept IDs.  At last a Service Acknowledgment (SrvAck) message is
   sent to indicate that the processing of a corresponding AntiEtrpRqst
   has been completed (Figure 9).  A new registration state is sent as a
   fresh SrvReg with its remaining lifetime.  A newly deregistered state
   is propagated as a SrvDeReg.  Note that multiple Srv(De)Reg(s) can be
   sent as one TCP stream for efficiency.

      +------+                AntiEtrpRqst                  +------+
      |      | -------------------------------------------> |      |
      | MDA1 |            (Peering Connection)              | MDA2 |
      |      | <------------------------------------------- |      |
      +------+     New States via Srv(De)Reg(s) + SrvAck    +------+

      Figure 9. Anti-entropy via AntiEtrpRqst, Srv(De)Reg(s) and SrvAck

4.8. Direct Forwarding

+------+   RqstFwd Srv(De)Reg   +------+   Fwded Srv(De)Reg    +------+
|      | ---------------------> |      | --------------------> |      |
| MSA1 |                        | MDA1 |                       | MDA2 |
|      | <--------------------- |      |                       |      |
+------+         SrvAck         +------+                       +------+

            Figure 10. Direct forwarding of a Srv(De)Reg

   After sending all new registration states accepted by itself to a
   peer (via anti-entropy), an MDA directly forwards newly received
   registration updates from MSAs to the peer until a failure occurs.

   In Figure 10, when a Srv(De)Reg is directly forwarded from MDA1 to
   MDA2, its Fwd-ID is set to Fwded, and its accept timestamp is set to
   its arrival timestamp at MDA1.  Note that a direct forwarding is
   performed asynchronously: MDA1 can send a SrvAck to MSA1 before it
   forwards the Srv(De)Reg to MDA2.  Also note that the direct
   forwarding of a Srv(De)Reg goes only one-hop from its accept DA (say,
   MDA1) to all MDA1's peers that are in the registration scopes.

4.9. SrvAck Message

   According to [RFC2608], a DA MUST reply with a SrvAck to a Srv(De)Reg
   when the message is received from an SA.  However, an MDA SHOULD NOT
   reply with a SrvAck to a Srv(De)Reg if the message is received from a
   peer.  This is for efficiency because peers exchange Srv(De)Reg
   messages via reliable peering connections.  Note that an MDA MUST
   reply with a SrvAck to an AntiEtrpRqst.

4.10. Control Information

   For each registration entry, an MDA maintains the following control
   information: an accept ID (for registration propagation), a version
   timestamp (for registration version resolution - rejecting previous
   updates), and a deletion flag (deregistered or not).

   For all registration entries, an MDA maintains a summary vector to
   reflect its received registrations so far.

5. Summary

   mSLP extends SLPv2 with three new definitions: a new attribute -
   "mesh-enhanced" for DAAdvert, a new message extension - MeshFwd, and
   a new message type - AntiEtrpRqst.

   A UA MAY prefer an MDA to a non-MDA since an MDA is more likely to
   reliably contain the complete set of current service registrations
   for the UA's scopes.

   A non-MSA needs to discover and register with all DAs in its scopes.
   It does not use the MeshFwd extension.

   A non-MDA accepts Srv(De)Reg(s) from SAs.  It does not forward them.

   For all MDAs, an MSA only needs to discover and register with
   sufficient number of them, such that they cover its scopes.  It uses
   the MeshFwd extension when it registers with MDAs.

   An MDA carries the "mesh-enhanced" attribute keyword in its DAAdvert.
   It maintains a peer relationship to each peer.  It accepts
   registrations from SAs and peers, propagates registrations via anti-
   entropy and direct forwarding to peers.

6. Protocol Timing Defaults

     Interval Name          Default Value      Defined in
   -------------------      -------------      -----------
   CONFIG_DA_KEEPALIVE       200 seconds       Section 3.4
   CONFIG_DA_TIMEOUT         300 seconds       Section 3.4

7. IANA Considerations

   The Mesh Forwarding (MeshFwd) extension ID, 0x0006, described in
   Section 4.3, has been assigned by IANA out of the SLP extension space
   (RFC 2608, Section 9.1) reserved for "optional to implement"
   extensions (i.e., the 0x0000-0x3FFF range).

   The function-ID of the Anti-entropy Request (AntiEtrpRqst) message
   type, 12, described in Section 4.6, has been assigned by IANA (RFC
   2608, Section 15).

8. Security Considerations

   mSLP uses standard SLPv2 authentication.  First, an MDA SHOULD
   authenticate other MDAs before setting up a peer relationship with
   them so as to prevent any malicious MDA from joining the DA mesh.
   Second, as a successful attack at an MDA may affect all MDAs in the
   DA mesh, an MDA SHOULD authenticate MSAs before accepting and
   forwarding their Srv(De)Reg messages to prevent illegitimate
   modification or elimination of service registrations.  Third, as an
   MSA depends on the MDA with which it registers to forward its
   Srv(De)Reg messages, it SHOULD authenticate the MDA to avoid using a
   malicious MDA.

9. Acknowledgments

   Thomas Narten, James Kempf, Mike Day, Mikael Pahmp, Ira McDonald,
   Qiaobing Xie and Xingang Guo provided valuable comments for this
   document.

10. References

10.1. Normative References

   [RFC2608]   Guttman, E., Perkins, C., Veizades, J. and M. Day,
               "Service Location Protocol, Version 2", RFC 2608, June
               1999.

   [RFC2119]   Bradner, S., "Key words for use in RFCs to Indicate
               Requirement Levels", BCP 14, RFC 2119, March 1997.

10.2. Informative References

   [RFC1771]   Rekhter, R. and T. Li, "A Border Gateway Protocol 4
               (BGP-4)", RFC 1771, March 1995.

   [RFC2610]   Perkins, C. and E. Guttman, "DHCP Options for Service
               Location Protocol", RFC 2610, June, 1999.

   [EPID-ALGO] A. Demers, D. Greene, C. Hauser, W. Irish, J. Larson, S.
               Shenker, H. Sturgis, D. Swinehart and D. Terry, "Epidemic
               algorithms for replicated database maintenance", the
               sixth ACM symposium on principles of distributed
               computing, Vancouver, Canada, 1987.

   [UPDA-PROP] K. Petersen, M. Spreizer, D. Terry, M. Theimer and A.
               Demers, "Flexible update propagation for weakly
               consistent replication", the sixteenth ACM symposium on
               operating systems principles, Saint Malo, France, 1997.

11. Authors' Addresses

   Weibin Zhao
   Department of Computer Science
   Columbia University
   1214 Amsterdam Avenue, MC 0401
   New York, NY 10027-7003

   EMail: zwb@cs.columbia.edu


   Henning Schulzrinne
   Department of Computer Science
   Columbia University
   1214 Amsterdam Avenue, MC 0401
   New York, NY 10027-7003

   EMail: hgs@cs.columbia.edu


   Erik Guttman
   Sun Microsystems
   Eichhoelzelstr. 7
   74915 Waibstadt
   Germany

   EMail: Erik.Guttman@sun.com

12. Full Copyright Statement

   Copyright (C) The Internet Society (2003).  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.

ISO Plain Language

On this page
PROBLEMIn the Service Location Protocol version 2, a service agent that wants to be found must register with every directory agent in its scope, and must re-register whenever a directory agent appears or reboots.
MECHANISMmSLP makes the directory agents in a scope peer with each other in a full mesh, and adds an extension that carries a version timestamp and an accept identifier so registrations can be propagated and ordered correctly.
WHAT IT CHANGESThe memo says mSLP is backward compatible with SLP version 2 and can be deployed incrementally, so existing peers keep working. It is an Experimental document.

§1Introduction and Compatibility

In the Service Location Protocol version 2, Directory Agents accept service registrations from Service Agents and answer queries from User Agents. They improve the performance and scalability of SLPv2, and the use of scopes improves scalability further. A Directory Agent can serve multiple scopes, and a scope can be served by multiple Directory Agents. The memo addresses the question this leaves open: when several Directory Agents serve the same scope, how should they interact with each other?

The answer is a scope-based fully meshed peering architecture. For each scope, all the Directory Agents serving that scope form a fully meshed peer relationship, similar to the way internal BGP peers are related. Peer Directory Agents exchange new service registrations in shared scopes through anti-entropy and through direct forwarding.

mSLP is designed as a lightweight enhancement to SLPv2 and is backward compatible with it. It defines two enhanced entities, a Mesh-enhanced Directory Agent and a Mesh-enhanced Service Agent, and they can be deployed incrementally. An enhanced entity supports the extended operations without affecting its original functionality as defined in RFC 2608, and for simplicity an enhanced entity works as a non-enhanced entity when it talks to a non-enhanced one.

The memo answers an open question in the Service Location Protocol: when several directory agents serve the same scope, they need to agree. The answer is to have them peer with each other. The change is small enough that a network can adopt it one machine at a time.

§2The Scope-Based Fully-Meshed Peer Architecture

For each scope, all the Mesh-enhanced Directory Agents serving that scope form a fully meshed peer relationship. A single peering connection between two peers carries all the service registrations in their shared scopes. The architecture improves the consistency among peer Directory Agents, because inconsistent states are reconciled automatically, and it lets a newly booted or rebooted agent catch up on all new registrations at once from its peers, purely through Directory Agent interaction and without involving Service Agents.

It also simplifies Service Agent registrations. In SLPv2 a Service Agent must discover and register with all existing Directory Agents in its scopes, and re-register when new ones are discovered or old ones are found to have rebooted. In mSLP, a Mesh-enhanced Service Agent only needs to discover and register with a sufficient number of them, such that the union of their scopes covers its own scopes, because the registrations are then propagated automatically.

The memo also sets out the scaling advantage. Consider a scope with N Service Agents and M Directory Agents, where N is greater than M and M is at least two. Both mSLP and SLPv2 need the same number of SLP messages to distribute the registrations, but the agents doing the distribution differ: in SLPv2 they are all N Service Agents, and in mSLP they are only the M Directory Agents. The number of TCP connections needed also differs. SLPv2 needs N times M, because each Service Agent connects to each Directory Agent, while mSLP needs N plus M times (M minus 1) divided by two, because each Service Agent connects to one Directory Agent and the registrations then travel through the mesh. For N of 100 and M of 10, SLPv2 needs 1000 TCP connections and mSLP needs 145.

The memo is candid about the limit this puts on the design. Because the topology is a full mesh, chosen mainly for simplicity and reliability, it cannot scale to a large number of agents in a single mesh; in general mSLP applies when the number of agents in a mesh is on the order of tens or below. The way out is to split a scope into finer scopes, so a scope x with too many agents becomes x-1 and x-2, each with its own smaller full mesh, and a registration for scope x must then be registered under both.

Directory agents in the same scope are linked to each other, all to all. A service that registers with one is passed to the rest, which saves each service agent from registering everywhere. The design does not scale to very large groups, so the memo says to split a busy scope into smaller ones.

WHAT THE MESH CHANGES, FOR N SERVICE AGENTS AND M DIRECTORY AGENTS
MeasureSLPv2mSLP
Agents that distribute registrationsAll N service agentsOnly the M directory agents
TCP connections neededN*MN+M*(M-1)/2
Connections for N of 100 and M of 101000145

§3Managing Peer Relationships

An agent learns about new peers through static configuration, DHCP, or the multicast and unicast DAAdvert message, and in every case it MUST obtain a peer's DAAdvert before establishing a peer relationship with that peer. It then opens a peering connection if one does not already exist and sends its own DAAdvert over it. An agent can tell that a connection was initiated by the peer, because the peer's DAAdvert arrives on that connection. Normally one connection is set up between two peers, but a pair can end up with two if both initiate at nearly the same moment, so an agent that notices this SHOULD check whether it opened the other one and, if it has a lower-numbered IP address, SHOULD terminate the connection it opened.

Once the connection exists, the two peers exchange information about their existing peers by forwarding those peers' DAAdverts over the connection. An agent forwards a third party's DAAdvert to a new peer when that third party shares scopes with the new peer and is either an active peer of the first agent or an accept DA for registrations the first agent currently holds. All the DAAdverts can travel as one TCP stream.

To detect failures, the peers use a heart-beat: an agent sends its DAAdvert to its peers every CONFIG_DA_KEEPALIVE seconds, and the timeout for that message is CONFIG_DA_TIMEOUT seconds. An agent SHOULD tear down a peer relationship when the peer closes the peering connection, when it receives a DAAdvert multicast from the peer with a DA stateless boot timestamp of zero, meaning the peer is going to shut down, or when it has not received the peer's DAAdvert for more than CONFIG_DA_TIMEOUT seconds.

Agents find each other, open a connection, and then tell each other about the other agents they know. Each sends a short advertisement on a timer so the others notice if one goes away, and close the relationship when it does.

§4Registration Propagation Control

When an agent accepts a registration update from a Service Agent, it assigns the update a unique accept ID, which has two parts: the URL of the accepting agent and an accept timestamp. The accept timestamp is a 64-bit integer counting elapsed microseconds since 00:00 UTC on January 1, 1900, and all accept timestamps assigned by the same agent MUST be monotonically increasing. A registration state carries the same accept ID as the latest update applied to it. An agent MUST propagate registrations in increasing order of their accept IDs, so registrations from the same accepting agent travel in the order they were accepted, while registrations from different accepting agents may travel in any order.

Arrival timestamps cannot settle which version of a registration is newer, because a registration may reach one agent before a newer version of it reaches another. mSLP therefore uses version timestamps. When a Mesh-enhanced Service Agent sends a registration update, it assigns a version timestamp, again a 64-bit integer counting microseconds since the same epoch, and all version timestamps assigned by the same agent MUST be monotonically increasing. Because mSLP assumes each registration is updated by only one Service Agent, an agent does not need to compare version timestamps from different Service Agents. It installs an update if the update has a newer version timestamp, or if the update does not carry the Mesh Forwarding extension, which is the case for a non-enhanced Service Agent.

The Mesh Forwarding extension carries the version timestamp and an accept ID entry, and it is used with a Srv(De)Reg message, but only with a fresh registration or a complete deregistration. It defines two forwarding IDs. RqstFwd is used by a Service Agent, with an accept timestamp of zero, to ask the accepting agent explicitly to forward the message. Fwded is used by an accepting agent in each message it sends to another agent, either forwarding a message it received from a Service Agent or propagating a registration state from its own database. A separate summary vector records, for each accept DA the agent has heard from, the latest accept timestamp, which tells the agent how far it has caught up with each of them. When a deregistration arrives with the Mesh Forwarding extension, the agent SHOULD keep the registration in its database and mark it as deleted, so it does not appear in any query reply and an earlier registration cannot bring it back.

Each registration carries two clocks: one that says when the agent that accepted it saw it, and one that says which version it is. Those let the agents agree on an order and stop an older version from overwriting a newer one, even when the messages arrive out of order.

THE TWO FORWARDING IDs IN THE MESH FORWARDING EXTENSION
  • 1RqstFwd — Set by a Service Agent with an accept timestamp of zero, asking the accepting agent to forward the message.
  • 2Fwded — Set by an accepting agent on each message it sends to another agent, with an accept timestamp that is not zero.

§4.6Anti-Entropy and Direct Forwarding

Anti-entropy is used to exchange initial registration states when two peers recognize each other for the first time, and to update new registration states after failures. An agent sends an Anti-entropy Request, which carries an anti-entropy type and a list of accept ID entries. The type is either selective, in which case only registration states with an accept ID greater than any accept ID named in the message are requested, or complete, in which case all states with a greater accept ID are requested, together with every state whose accept DA is not named in the message at all.

On receiving an Anti-entropy Request, the agent sends the requested new registration states in increasing order of their accept IDs, and at least a Service Acknowledgment message to say that the request has been processed. A new state is sent as a fresh registration with its remaining lifetime, and a newly deregistered state is propagated as a deregistration. Several such messages can travel as one TCP stream.

After sending all the new registration states it accepted itself to a peer through anti-entropy, an agent directly forwards newly received registration updates from Service Agents to that peer until a failure occurs. In a direct forward the forwarding ID is Fwded and the accept timestamp is the arrival timestamp at the forwarding agent. Direct forwarding is asynchronous: the forwarding agent can send a Service Acknowledgment to the Service Agent before it forwards the message to its peers. Direct forwarding goes one hop only, from the accepting agent to all of that agent's peers that are in the registration scopes.

The memo also states when acknowledgments are sent. A Directory Agent must reply with a Service Acknowledgment to a registration or deregistration received from a Service Agent, but a Mesh-enhanced agent should not reply to one received from a peer, because peers exchange these messages over reliable peering connections. It must reply to an Anti-entropy Request.

Two mechanisms move registrations around. Anti-entropy is a catch-up: an agent asks a peer for everything it is missing. Direct forwarding is a relay: a message received from a service agent is passed straight on to the peers, one hop only.

ANTI-ENTROPY: ONE AGENT ASKS A PEER FOR WHAT IT IS MISSING
MDA1MDA2
  1. AntiEtrpRqstCarries the anti-entropy type and a list of accept ID entries.
  2. Srv(De)Reg(s)The requested new registration states, in increasing order of accept ID.
  3. SrvAckSays that the request has been processed.

§8Security Considerations

mSLP uses the standard SLPv2 authentication, and the memo adds three recommendations about where it should be applied.

First, an agent SHOULD authenticate other agents before setting up a peer relationship with them, so that a malicious agent cannot join the mesh. Second, because a successful attack on one agent can affect every agent in the mesh, an agent SHOULD authenticate Service Agents before accepting and forwarding their registration messages, so that service registrations cannot be modified or removed illegitimately. Third, because a Service Agent depends on the agent it registers with to forward its messages, it SHOULD authenticate that agent, to avoid using a malicious one.

The memo uses the authentication already in the Service Location Protocol, and says where it must be applied: between directory agents that peer, between directory agents and the service agents that register with them, and between a service agent and the directory agent it relies on.

§7References