RFC 4848

Domain-Based Application Service Location Using URIs and the Dynamic Delegation Discovery Service (DDDS)

๐Ÿ“… published April 2007, from ietf

RFC 4848 ๐Ÿฆ‹ Domain-Based Application Service Location Using URIs and the Dynamic Delegation Discovery Service (DDDS)

Network Working Group ๐ŸŒธ Author: L. Daigle, Cisco Systems ๐Ÿ’œ Category: Standards Track ๐Ÿ‘‘ Date: April 2007 ๐Ÿ“…


Status of This Memo โœจ

Okay bestie, this part is the official fine print ๐Ÿ“œ. This document is an Internet standards track protocol for the Internet community, and it's asking everyone to talk about it and suggest improvements ๐Ÿ’ฌ. If you want the actual standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1) ๐Ÿ”. And distribution of this memo is unlimited, so share it wherever you want ๐ŸŒˆ.

Copyright (C) The IETF Trust (2007) ๐Ÿ’…

Abstract ๐Ÿฆ‹

The goal here is to define a brand new, super straightforward Dynamic Delegation Discovery Service (DDDS) application ๐Ÿงš. It lets you map domain names to URIs for specific application services and protocols, which is honestly iconic ๐Ÿ”ฅ. It's called U-NAPTR, and even though it's its own DDDS application, it's basically an extension of the Straightforward NAPTR (S-NAPTR) DDDS Application ๐Ÿ’–.

Table of Contents ๐Ÿ“š

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . . . 3
   2.  Straightforward URI-Enabled NAPTR (U-NAPTR) . . . . . . . . . . 3
     2.1.  Permitted Flags . . . . . . . . . . . . . . . . . . . . . . 3
     2.2.  Permitted Regular Expressions . . . . . . . . . . . . . . . 4
   3.  Sample U-NAPTR DNS Records  . . . . . . . . . . . . . . . . . . 4
   4.  Formal Definition of U-NAPTR Application of DDDS  . . . . . . . 5
     4.1.  Application Unique String . . . . . . . . . . . . . . . . . 5
     4.2.  First Well Known Rule . . . . . . . . . . . . . . . . . . . 5
     4.3.  Expected Output . . . . . . . . . . . . . . . . . . . . . . 5
     4.4.  Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
     4.5.  Service Parameters  . . . . . . . . . . . . . . . . . . . . 5
       4.5.1.  Application Services  . . . . . . . . . . . . . . . . . 6
       4.5.2.  Application Protocols . . . . . . . . . . . . . . . . . 6
     4.6.  Valid Rules . . . . . . . . . . . . . . . . . . . . . . . . 6
     4.7.  Valid Databases . . . . . . . . . . . . . . . . . . . . . . 7
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 7
   6.  Security Considerations . . . . . . . . . . . . . . . . . . . . 8
   7.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . 8
   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . . . 8
     8.1.  Normative References  . . . . . . . . . . . . . . . . . . . 8
     8.2.  Informative References  . . . . . . . . . . . . . . . . . . 9

1. Introduction ๐ŸŒท

So the purpose here is the same girlboss energy: define a new, straightforward Dynamic Delegation Discovery Service (DDDS) [7] application that maps domain names to URIs for particular application services and protocols ๐ŸŽ€. This is what lets you "lookup" which services are available for a given domain, for example ๐Ÿ”Ž.

Even though this is a totally new and separate DDDS Application called U-NAPTR, it's built on the same principles as the Straightforward NAPTR (S-NAPTR) application, which is specified in [2] ๐Ÿ’…. This spec is not an update of S-NAPTR, but you should go read that doc for the deep dive on motivation and implementation stuff ๐Ÿ“–.

S-NAPTR gives you application service location without relying on rigid domain naming conventions โœจ. It's called "straightforward" partly because it bans regular expressions in NAPTR records (for the S-NAPTR DDDS Application) ๐Ÿ™ˆ. The catch is that this also rules out using a URI as the target of DDDS resolution ๐Ÿ˜ญ. A bunch of applications, both specified (e.g., [9]) and proposed, find that restriction too limiting, so S-NAPTR is a near miss for them ๐Ÿฅฒ.

So U-NAPTR is basically a modest glow-up of S-NAPTR ๐Ÿ’–. It lets URIs be targets, without allowing the full range of possible regular expressions in NAPTR records ๐Ÿซถ.

2. Straightforward URI-Enabled NAPTR (U-NAPTR) ๐Ÿ’œ

This document assumes you already know the S-NAPTR specification [2], which is totally fair ๐Ÿ™Œ. U-NAPTR is meant to do everything S-NAPTR does, with two differences: it allows the use of the "U" flag in the NAPTR record, and it allows one specific form of REGEXP ๐ŸŽฏ.

2.1. Permitted Flags ๐Ÿšฉ

U-NAPTR permits the same flags as S-NAPTR ("S", "A", or empty), plus the "U" Flag โœจ. For the U-NAPTR DDDS Application, when the "U" Flag shows up in the NAPTR record, the REGEXP field must be populated, which means the REPLACEMENT field is empty as a result ๐Ÿงฉ. The regular expression in the REGEXP field must be of the limited form described below, and evaluating that regular expression gives you a URI, which is the result of the DDDS resolution ๐Ÿฆ‹.

2.2. Permitted Regular Expressions ๐ŸŒˆ

U-NAPTR permits regular expressions that completely replace the matched string with a URI, written as a constant string ๐Ÿ’…. This is basically a workaround, because the REPLACEMENT field in NAPTR is required to produce only a fully qualified domain name, so it can't be used for a URI ๐Ÿ™ƒ.

The specific allowed syntax for U-NAPTR regular expressions is:

        u-naptr-regexp = "!.*!"<URI>"!"

Here, <URI> is as defined in STD 66 [8], the URI syntax specification ๐Ÿ“š.

With this limited form of regular expression, applications using U-NAPTR don't need to implement full regular expression parsers ๐ŸŽ‰. Less work, more slay ๐Ÿ’–.

3. Sample U-NAPTR DNS Records ๐Ÿ“

In the sample NAPTR RRs for example.com shown below, "WP" is the imagined application service tag for "white pages" ๐Ÿ“’, and "EM" is the application service tag for an imagined "Extensible Messaging" application service ๐Ÿ’Œ.

   example.com.
   ;;       order pref flags
   IN NAPTR 100   10   ""    "WP:whois++"      ( ; service
                             ""                  ; regexp
                             bunyip.example.com. ; replacement
                                               )
   IN NAPTR 100   20   "s"   "WP:ldap"         ( ; service
                             ""                  ; regexp
                            _ldap._tcp.myldap.example.com. ; replacement
                                               )
   IN NAPTR 200   10   "u"    "EM:protA"        ( ; service
                             "!.*!prota://someisp.example.com!" ; regexp
                             ""                  ; replacement
                                               )
   IN NAPTR 200   30   "a"   "EM:protB"          ; service
                             ""                  ; regexp
                             myprotB.example.com.; replacement
                                               )

4. Formal Definition of U-NAPTR Application of DDDS ๐ŸŽ€

This section formally defines the DDDS Application, as described in [7] ๐Ÿ“. Time to get serious, but still cute ๐Ÿ’….

4.1. Application Unique String ๐Ÿ”‘

The Application Unique String is a fully qualified domain name (FQDN) ๐ŸŒ. The thing you're looking for is the authoritative server for a particular service, for that domain ๐Ÿ”.

4.2. First Well Known Rule ๐Ÿฅ‡

The "First Well Known Rule" is identity ๐Ÿชž. That means the output of the rule is the Application Unique String itself, the FQDN whose authoritative server for a particular service you're seeking ๐Ÿ’–.

4.3. Expected Output ๐ŸŽ

The expected output of this Application is the information you need to connect to the authoritative server(s) for an application service within a given domain ๐Ÿ’Œ. That's the host, port, protocol, or URI, so basically everything you need to connect ๐Ÿ”—.

4.4. Flags ๐Ÿณ๏ธโ€๐ŸŒˆ

This DDDS Application uses only 3 of the Flags defined for the URI/URN Resolution Application [5]: "S", "A", and "U" ๐ŸŽฏ. No other Flags are valid ๐Ÿ™…โ€โ™€๏ธ. If a client gets a NAPTR RR for a U-NAPTR-using application that contains any other flag, that NAPTR RR should be ignored, and processing continues with the next record (if there is one) ๐Ÿšซ.

These flags are for terminal lookups ๐Ÿ. That means the Rule is the last one, and the flag decides what the next stage should be ๐Ÿ’…. The "S" flag means the output of this Rule is a FQDN with one or more SRV [3] records ๐Ÿ“ก. "A" means the output of the Rule is a domain name, and it should be used to look up address records for that domain ๐Ÿ . "U" means the output of the Rule is a URI that should be resolved to get access to the described service ๐Ÿฆ‹.

Consistent with the DDDS algorithm, if the Flag string is empty, the next lookup is for another NAPTR record (for the replacement target) ๐Ÿ”.

4.5. Service Parameters ๐Ÿง

Service Parameters for this Application take the form of a string of characters that follow this ABNF [1] ๐Ÿ“:

      service-parms = [ [app-service] *(":" app-protocol)]
      app-service   = experimental-service  / iana-registered-service
      app-protocol  = experimental-protocol / iana-registered-protocol
      experimental-service      = "x-" 1*30ALPHANUMSYM
      experimental-protocol     = "x-" 1*30ALPHANUMSYM
      iana-registered-service   = ALPHA *31ALPHANUMSYM
      iana-registered-protocol  = ALPHA *31ALPHANUMSYM
      ALPHA         =  %x41-5A / %x61-7A   ; A-Z / a-z
      DIGIT         =  %x30-39 ; 0-9
      SYM           =  %x2B / %x2D / %x2E  ; "+" / "-" / "."
      ALPHANUMSYM   =  ALPHA / DIGIT / SYM
      ; The app-service and app-protocol tags are limited to 32
      ; characters and must start with an alphabetic character.
      ; The service-parms are considered case-insensitive.

So the Service Parameters can be an empty string, just an app-service, or an app-service with one or more app-protocol specifications separated by the ":" symbol ๐ŸŒธ.

This is similar to, but not the same as, the syntax used in the URI DDDS application [5] ๐Ÿ‘ฏ. The DDDS DNS database needs each DDDS application to define the syntax of its allowable service strings ๐Ÿ“‹. The syntax here is expanded to allow the characters that are valid in any URI scheme name (see [8]) ๐Ÿ”ค. And since "+" (the separator used in the RFC3404 service parameter string) is an allowed character for URI scheme names, ":" is chosen as the separator here โœ‚๏ธ. Smart, right? ๐Ÿง 

4.5.1. Application Services ๐Ÿ›Ž๏ธ

The "app-service" must be an IANA-registered service. See Section 5 for instructions on registering new application service tags ๐Ÿ“ฎ.

4.5.2. Application Protocols ๐Ÿ”Œ

The protocol identifiers that are valid for the "app-protocol" production are standard, registered protocols. See Section 5 for instructions on registering new application protocol tags ๐Ÿท๏ธ.

4.6. Valid Rules โœ…

Permitted rules are substitution rules and regular expressions of the following syntax (i.e., a regular expression that replaces the domain name with a URI) ๐Ÿ”:

           u-naptr-regexp = "!.*!"<URI>"!"

Here, <URI> is as defined in STD 66 [8], the URI syntax specification ๐Ÿ“š.

4.7. Valid Databases ๐Ÿ—„๏ธ

Right now, only one DDDS Database is specified for this Application ๐Ÿ’โ€โ™€๏ธ. [4] specifies a DDDS Database that uses the NAPTR DNS resource record to contain the rewrite rules ๐Ÿ“„. The Keys for this database are encoded as domain names ๐ŸŒ.

The First Well Known Rule produces a domain name, and that's the Key used for the first lookup, where the NAPTR records for that domain are requested ๐Ÿ”‘.

DNS servers MAY interpret Flag values and use that information to include appropriate NAPTR, SRV, or A records in the Additional Information portion of the DNS packet ๐Ÿ“ฆ. Clients are encouraged to check for additional information, but they aren't required to do so ๐Ÿคทโ€โ™€๏ธ. For more on NAPTR records and the Additional Information section of a DNS response packet, see the Additional Information Processing section of [4] ๐Ÿ”.

5. IANA Considerations โœจ

okay bestie, so this one's kinda chill for IANA ๐Ÿฆ‹ This document doesn't actually put any requirements on IANA itself. What it does do is set up the foundation that U-NAPTR services can use to tap into the existing IANA registries for application service tags and application protocol tags (the ones defined in RFC 3958 [2]). Iconic, right? ๐Ÿ’…

Okay now the "x-" thing, this is giving experimental vibes ๐Ÿงช All application service and protocol tags that start with x- are considered experimental, and there's NO provision to stop people from using the same string twice. So like... if two people pick the same x- tag, nobody's stopping them ๐Ÿ’€ Use them at your own risk, bestie ๐Ÿ™ˆ

Everything else (so anything that doesn't start with x-) gets registered using the "specification required" option from [6], and the "specification" has to be an RFC of any category ๐Ÿ“œ

There are no further restrictions on the tags, except they MUST conform to the syntax defined above (Section 4.5). Like, that's the only rule ๐Ÿ’–

The defining RFC MUST clearly identify and describe, for each tag being registered:

  • Application protocol or service tag ๐Ÿท๏ธ
  • Intended usage ๐ŸŽฏ
  • Interoperability considerations ๐Ÿค
  • Security considerations (see Section 6 of this document for further discussion of the types of considerations that are applicable) ๐Ÿ”
  • Any relevant related publications ๐Ÿ“š

The defining RFC MAY also include further application-specific restrictions, like limitations on the types of URIs that can be returned for the application service ๐ŸŒˆ


6. Security Considerations ๐Ÿ”

okay this section is SO important, pls pay attention ๐Ÿ˜ญ

U-NAPTR has the same security considerations as S-NAPTR, so check out Section 8 of [2] for those ๐Ÿซถ U-NAPTR also has an extra consideration: resolving the URIs you get back from the DDDS resolution has its own set of security implications. That stuff is covered in the URI spec (especially Section 7 of [8]) โœจ

Here's the big picture: using DNSSEC, client software can be confident that the URI it got via U-NAPTR is the exact one the domain's administrator specified, and it came from that domain ๐Ÿ”’ BUT the validity of the service you reach by resolving that URI is a totally separate matter, and it's down to URI resolution security practices ๐Ÿšจ So DNSSEC covers the URI, not the service behind it, babe ๐Ÿ’€


7. Acknowledgements ๐ŸŒธ

Huge thanks to Martin Thomson, John Klensin, Bernard Aboba, Alfred Hoenes, Dan Romascanu, Suresh Krishnan, and Lars Eggert for reviewing earlier versions and catching errors! ๐Ÿซถ๐Ÿ’– You all are literally the MVPs ๐Ÿ‘‘


8. References ๐Ÿ“š

8.1. Normative References

  • [1] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 4234, October 2005. ๐Ÿงฉ
  • [2] Daigle, L. and A. Newton, "Domain-Based Application Service Location Using SRV RRs and the Dynamic Delegation Discovery Service (DDDS)", RFC 3958, January 2005. ๐Ÿฆ‹
  • [3] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for specifying the location of services (DNS SRV)", RFC 2782, February 2000. ๐ŸŽ€
  • [4] Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part Three: The Domain Name System (DNS) Database", RFC 3403, October 2002. ๐ŸŒ
  • [5] Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part Four: The Uniform Resource Identifiers (URI)", RFC 3404, October 2002. ๐ŸŒˆ
  • [6] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998. ๐Ÿ“‹

8.2. Informative References

  • [7] Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part One: The Comprehensive DDDS", RFC 3401, October 2002. ๐Ÿ’œ
  • [8] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", RFC 3986, STD 66, January 2005. โœจ
  • [9] Malamud, C., "Attaching Meaning to Solicitation Class Keywords", RFC 4095, May 2005. ๐Ÿ“

Author's Address ๐Ÿ–Š๏ธ

Leslie L. Daigle Cisco Systems 13615 Dulles Technology Drive Herndon, VA 20171 US

EMail: ledaigle@cisco.com; leslie@thinkingcat.com ๐Ÿ’Œ


Copyright (C) The IETF Trust (2007).

This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM 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.


Intellectual Property ๐Ÿง 

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.


Acknowledgement ๐Ÿ’

Funding for the RFC Editor function is currently provided by the Internet Society. ๐Ÿ’–

๐Ÿ“ฆ where this page comes from