| rfc8686.original | rfc8686.txt | |||
|---|---|---|---|---|
| ALTO S. Kiesel | Internet Engineering Task Force (IETF) S. Kiesel | |||
| Internet-Draft University of Stuttgart | Request for Comments: 8686 University of Stuttgart | |||
| Intended status: Standards Track M. Stiemerling | Category: Standards Track M. Stiemerling | |||
| Expires: February 21, 2020 H-DA | ISSN: 2070-1721 H-DA | |||
| August 20, 2019 | January 2020 | |||
| Application Layer Traffic Optimization (ALTO) Cross-Domain Server | Application-Layer Traffic Optimization (ALTO) Cross-Domain Server | |||
| Discovery | Discovery | |||
| draft-ietf-alto-xdom-disc-06 | ||||
| Abstract | Abstract | |||
| The goal of Application-Layer Traffic Optimization (ALTO) is to | The goal of Application-Layer Traffic Optimization (ALTO) is to | |||
| provide guidance to applications that have to select one or several | provide guidance to applications that have to select one or several | |||
| hosts from a set of candidates capable of providing a desired | hosts from a set of candidates capable of providing a desired | |||
| resource. ALTO is realized by a client-server protocol. Before an | resource. ALTO is realized by a client-server protocol. Before an | |||
| ALTO client can ask for guidance it needs to discover one or more | ALTO client can ask for guidance, it needs to discover one or more | |||
| ALTO servers that can provide suitable guidance. | ALTO servers that can provide suitable guidance. | |||
| In some deployment scenarios, in particular if the information about | In some deployment scenarios, in particular if the information about | |||
| the network topology is partitioned and distributed over several ALTO | the network topology is partitioned and distributed over several ALTO | |||
| servers, it may be needed to discover an ALTO server outside of the | servers, it may be necessary to discover an ALTO server outside of | |||
| own network domain, in order to get appropriate guidance. This | the ALTO client's own network domain, in order to get appropriate | |||
| document details applicable scenarios, itemizes requirements, and | guidance. This document details applicable scenarios, itemizes | |||
| specifies a procedure for ALTO cross-domain server discovery. | requirements, and specifies a procedure for ALTO cross-domain server | |||
| discovery. | ||||
| Technically, the procedure specified in this document takes one | Technically, the procedure specified in this document takes one | |||
| IP address or prefix and a U-NAPTR Service Parameter (typically, | IP address or prefix and a U-NAPTR Service Parameter (typically, | |||
| "ALTO:https") as parameters. It performs DNS lookups (for NAPTR | "ALTO:https") as parameters. It performs DNS lookups (for NAPTR | |||
| resource records in the in-addr.arpa. or ip6.arpa. tree) and returns | resource records in the "in-addr.arpa." or "ip6.arpa." trees) and | |||
| one or more URI(s) of information resources related to that IP | returns one or more URIs of information resources related to that IP | |||
| address or prefix. | address or prefix. | |||
| Terminology and Requirements Language | Status of This Memo | |||
| This document makes use of the ALTO terminology defined in RFC 5693 | ||||
| [RFC5693]. | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in BCP | ||||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| Status of this Memo | ||||
| This Internet-Draft is submitted in full conformance with the | ||||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | This is an Internet Standards Track document. | |||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on February 21, 2020. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc8686. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
| 2. ALTO Cross-Domain Server Discovery Procedure: Overview . . . . 5 | 1.1. Terminology and Requirements Language | |||
| 3. ALTO Cross-Domain Server Discovery Procedure: Specification . 6 | 2. ALTO Cross-Domain Server Discovery Procedure: Overview | |||
| 3.1. Interface . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. ALTO Cross-Domain Server Discovery Procedure: Specification | |||
| 3.2. Step 1: Prepare Domain Name for Reverse DNS Lookup . . . . 7 | 3.1. Interface | |||
| 3.3. Step 2: Prepare Shortened Domain Names . . . . . . . . . . 8 | 3.2. Step 1: Prepare Domain Name for Reverse DNS Lookup | |||
| 3.4. Step 3: Perform DNS U-NAPTR lookups . . . . . . . . . . . 9 | 3.3. Step 2: Prepare Shortened Domain Names | |||
| 3.5. Error Handling . . . . . . . . . . . . . . . . . . . . . . 10 | 3.4. Step 3: Perform DNS U-NAPTR Lookups | |||
| 4. Using the ALTO Protocol with Cross-Domain Server Discovery . . 11 | 3.5. Error Handling | |||
| 4.1. Network and Cost Map Service . . . . . . . . . . . . . . . 11 | 4. Using the ALTO Protocol with Cross-Domain Server Discovery | |||
| 4.2. Map-Filtering Service . . . . . . . . . . . . . . . . . . 12 | 4.1. Network and Cost Map Service | |||
| 4.3. Endpoint Property Service . . . . . . . . . . . . . . . . 12 | 4.2. Map-Filtering Service | |||
| 4.4. Endpoint Cost Service . . . . . . . . . . . . . . . . . . 12 | 4.3. Endpoint Property Service | |||
| 4.5. Summary and Further Extensions . . . . . . . . . . . . . . 14 | 4.4. Endpoint Cost Service | |||
| 5. Implementation, Deployment, and Operational Considerations . . 15 | 4.5. Summary and Further Extensions | |||
| 5.1. Considerations for ALTO Clients . . . . . . . . . . . . . 15 | 5. Implementation, Deployment, and Operational Considerations | |||
| 5.2. Considerations for Network Operators . . . . . . . . . . . 17 | 5.1. Considerations for ALTO Clients | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | 5.2. Considerations for Network Operators | |||
| 6.1. Integrity of the ALTO Server's URI . . . . . . . . . . . . 19 | 6. Security Considerations | |||
| 6.2. Availability of the ALTO Server Discovery Procedure . . . 20 | 6.1. Integrity of the ALTO Server's URI | |||
| 6.3. Confidentiality of the ALTO Server's URI . . . . . . . . . 21 | 6.2. Availability of the ALTO Server Discovery Procedure | |||
| 6.4. Privacy for ALTO Clients . . . . . . . . . . . . . . . . . 21 | 6.3. Confidentiality of the ALTO Server's URI | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 6.4. Privacy for ALTO Clients | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 7. IANA Considerations | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . . 24 | 8. References | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . . 24 | 8.1. Normative References | |||
| Appendix A. Solution Approaches for Partitioned ALTO Knowledge . 27 | 8.2. Informative References | |||
| A.1. Classification of Solution Approaches . . . . . . . . . . 27 | Appendix A. Solution Approaches for Partitioned ALTO Knowledge | |||
| A.2. Discussion of Solution Approaches . . . . . . . . . . . . 28 | A.1. Classification of Solution Approaches | |||
| A.3. The Need for Cross-Domain ALTO Server Discovery . . . . . 28 | A.2. Discussion of Solution Approaches | |||
| A.4. Our Solution Approach . . . . . . . . . . . . . . . . . . 29 | A.3. The Need for Cross-Domain ALTO Server Discovery | |||
| A.5. Relation to the ALTO Requirements . . . . . . . . . . . . 29 | A.4. Our Solution Approach | |||
| Appendix B. Requirements for Cross-Domain Server Discovery . . . 30 | A.5. Relation to the ALTO Requirements | |||
| B.1. Discovery Client Application Programming Interface . . . . 30 | Appendix B. Requirements for Cross-Domain Server Discovery | |||
| B.2. Data Storage and Authority Requirements . . . . . . . . . 30 | B.1. Discovery Client Application Programming Interface | |||
| B.3. Cross-Domain Operations Requirements . . . . . . . . . . . 30 | B.2. Data Storage and Authority Requirements | |||
| B.4. Protocol Requirements . . . . . . . . . . . . . . . . . . 31 | B.3. Cross-Domain Operations Requirements | |||
| B.5. Further Requirements . . . . . . . . . . . . . . . . . . . 31 | B.4. Protocol Requirements | |||
| Appendix C. ALTO and Tracker-based Peer-to-Peer Applications . . 32 | B.5. Further Requirements | |||
| C.1. A generic Tracker-based Peer-to-Peer Application . . . . . 32 | Appendix C. ALTO and Tracker-Based Peer-to-Peer Applications | |||
| C.2. Architectural Options for Placing the ALTO Client . . . . 33 | C.1. A Generic Tracker-Based Peer-to-Peer Application | |||
| C.3. Evaluation . . . . . . . . . . . . . . . . . . . . . . . . 36 | C.2. Architectural Options for Placing the ALTO Client | |||
| C.4. Example . . . . . . . . . . . . . . . . . . . . . . . . . 38 | C.3. Evaluation | |||
| Appendix D. Contributors List and Acknowledgments . . . . . . . . 43 | C.4. Example | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 44 | Acknowledgments | |||
| Authors' Addresses | ||||
| 1. Introduction | 1. Introduction | |||
| The goal of Application-Layer Traffic Optimization (ALTO) is to | The goal of Application-Layer Traffic Optimization (ALTO) is to | |||
| provide guidance to applications that have to select one or several | provide guidance to applications that have to select one or several | |||
| hosts from a set of candidates capable of providing a desired | hosts from a set of candidates capable of providing a desired | |||
| resource [RFC5693]. ALTO is realized by an HTTP-based client-server | resource [RFC5693]. ALTO is realized by an HTTP-based client-server | |||
| protocol [RFC7285], which can be used in various scenarios [RFC7971]. | protocol [RFC7285], which can be used in various scenarios [RFC7971]. | |||
| The ALTO base protocol document [RFC7285] specifies the communication | The ALTO base protocol document [RFC7285] specifies the communication | |||
| between an ALTO client and one ALTO server. In principle, the client | between an ALTO client and one ALTO server. In principle, the client | |||
| may send any ALTO query. For example, it might ask for the routing | may send any ALTO query. For example, it might ask for the routing | |||
| cost between any two IP addresses, or it might request network and | cost between any two IP addresses, or it might request network and | |||
| cost maps for the whole network, which might be the worldwide | cost maps for the whole network, which might be the worldwide | |||
| Internet. It is assumed that the server can answer any query, | Internet. It is assumed that the server can answer any query, | |||
| possibly with some kind of default value if no exact data is known. | possibly with some kind of default value if no exact data is known. | |||
| No special provisions were made for deployment scenarios with | No special provisions were made for deployment scenarios with | |||
| multiple ALTO servers, with some servers having more accurate | multiple ALTO servers, with some servers having more accurate | |||
| information about some parts of the network topology while others | information about some parts of the network topology while others | |||
| having better information about other parts of the network | have better information about other parts of the network | |||
| ("partitioned knowledge"). Various ALTO use cases have been studied | ("partitioned knowledge"). Various ALTO use cases have been studied | |||
| in the context of such scenarios. In some cases, one cannot assume | in the context of such scenarios. In some cases, one cannot assume | |||
| that a topologically nearby ALTO server (e.g., a server discovered | that a topologically nearby ALTO server (e.g., a server discovered | |||
| with the procedure specified in [RFC7286]) will always provide useful | with the procedure specified in [RFC7286]) will always provide useful | |||
| information to the client. One such scenario is detailed in | information to the client. One such scenario is detailed in | |||
| Appendix C. Several solution approaches, such as redirecting a | Appendix C. Several solution approaches, such as redirecting a | |||
| client to a server that has more accurate information or forwarding | client to a server that has more accurate information or forwarding | |||
| the request to it on behalf of the client, have been proposed and | the request to such a server on behalf of the client, have been | |||
| analyzed (see Appendix A), but none has been specified so far. | proposed and analyzed (see Appendix A), but no solution has been | |||
| specified so far. | ||||
| Section 3 of this document specifies the "ALTO Cross-Domain Server | Section 3 of this document specifies the "ALTO Cross-Domain Server | |||
| Discovery Procedure" for client-side usage in these scenarios. An | Discovery Procedure" for client-side usage in these scenarios. An | |||
| ALTO client that wants to send an ALTO query related to a specific IP | ALTO client that wants to send an ALTO query related to a specific IP | |||
| address or prefix X, may call this procedure with X as a paramenter. | address or prefix X may call this procedure with X as a parameter. | |||
| It will use Domain Name System (DNS) lookups to find of one ore more | It will use Domain Name System (DNS) lookups to find one or more ALTO | |||
| ALTO servers that can provide a competent answer. The above wording | servers that can provide a competent answer. The above wording | |||
| "related to" was intentionally kept somewhat unspecific, as the exact | "related to" was intentionally kept somewhat unspecific, as the exact | |||
| semantics depends on the ALTO service to be used; see Section 4. | semantics depends on the ALTO service to be used; see Section 4. | |||
| Those who are in control of the "reverse DNS" for a given IP address | Those who are in control of the "reverse DNS" for a given IP address | |||
| or prefix (i.e., the corresponding subdomain of in-addr.arpa. or | or prefix (i.e., the corresponding subdomain of "in-addr.arpa." or | |||
| ip6.arpa.) - typically an Internet Service Provider (ISP), a | "ip6.arpa.") -- typically an Internet Service Provider (ISP), a | |||
| corporate IT department, or a university's computing center - may add | corporate IT department, or a university's computing center -- may | |||
| resource records to the DNS that point to one or more relevant ALTO | add resource records to the DNS that point to one or more relevant | |||
| server(s). In many cases, it may be an ALTO server run by that ISP | ALTO servers. In many cases, it may be an ALTO server run by that | |||
| or IT department, as they naturally have good insight into routing | ISP or IT department, as they naturally have good insight into | |||
| costs from and to their networks. However, they may also refer to an | routing costs from and to their networks. However, they may also | |||
| ALTO server provided by someone else, e.g., their upstream ISP. | refer to an ALTO server provided by someone else, e.g., their | |||
| upstream ISP. | ||||
| 1.1. Terminology and Requirements Language | ||||
| This document makes use of the ALTO terminology defined in RFC 5693 | ||||
| [RFC5693]. | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in | ||||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| 2. ALTO Cross-Domain Server Discovery Procedure: Overview | 2. ALTO Cross-Domain Server Discovery Procedure: Overview | |||
| This section gives a non-normative overview on the ALTO Cross-Domain | This section gives a non-normative overview of the ALTO Cross-Domain | |||
| Server Discovery Procedure. The detailed specification will follow | Server Discovery Procedure. The detailed specification will follow | |||
| in the next section. | in the next section. | |||
| This procedure was inspired by the "Location Information Server (LIS) | This procedure was inspired by "Location Information Server (LIS) | |||
| Discovery Using IP Addresses and Reverse DNS" [RFC7216] and re-uses | Discovery Using IP Addresses and Reverse DNS" [RFC7216] and reuses | |||
| parts of the basic ALTO Server Discovery Procedure [RFC7286]. | parts of the basic ALTO Server Discovery Procedure [RFC7286]. | |||
| The basic idea is to use the Domain Name System (DNS), more | The basic idea is to use the Domain Name System (DNS), more | |||
| specifically the "in-addr.arpa." or "ip6.arpa." trees, which are | specifically the "in-addr.arpa." or "ip6.arpa." trees, which are | |||
| mostly used for "reverse mapping" of IP addresses to host names by | mostly used for "reverse mapping" of IP addresses to host names by | |||
| means of PTR resource records. There, URI-enabled Naming Authority | means of PTR resource records. There, URI-enabled Naming Authority | |||
| Pointer (U-NAPTR) resource records [RFC4848], which allow the mapping | Pointer (U-NAPTR) resource records [RFC4848], which allow the mapping | |||
| of domain names to Uniform Resource Identifiers (URIs), are installed | of domain names to Uniform Resource Identifiers (URIs), are installed | |||
| as needed. Thereby, it is possible to store a mapping from an IP | as needed. Thereby, it is possible to store a mapping from an IP | |||
| address or prefix to one or more ALTO server URIs in the DNS. | address or prefix to one or more ALTO server URIs in the DNS. | |||
| The ALTO Cross-Domain Server Discovery Procedure is called with one | The ALTO Cross-Domain Server Discovery Procedure is called with one | |||
| IP address or prefix and a U-NAPTR Service Parameter [RFC4848] as | IP address or prefix and a U-NAPTR Service Parameter [RFC4848] as | |||
| parameters. | parameters. | |||
| The service parameter is usually set to "ALTO:https". However, other | The service parameter is usually set to "ALTO:https". However, other | |||
| parameter values may be used in some scenarios, e.g., "ALTO:http" to | parameter values may be used in some scenarios -- e.g., "ALTO:http" | |||
| search for a server that supports unencrypted transmission for | to search for a server that supports unencrypted transmission for | |||
| debugging purposes, or other application protocol or service tags if | debugging purposes, or other application protocol or service tags if | |||
| applicable. | applicable. | |||
| The procedure performs DNS lookups and returns one or more URI(s) of | The procedure performs DNS lookups and returns one or more URIs of | |||
| information resources related to said IP address or prefix, usually | information resources related to said IP address or prefix, usually | |||
| the URI(s) of one or more ALTO Information Resource Directory (IRD, | the URIs of one or more ALTO Information Resource Directories (IRDs; | |||
| see Section 9 of [RFC7285]). The U-NAPTR records also provide | see Section 9 of [RFC7285]). The U-NAPTR records also provide | |||
| preference values, which should be considered if more than one URI is | preference values, which should be considered if more than one URI is | |||
| returned. | returned. | |||
| The discovery procedure sequentially tries two different lookup | The discovery procedure sequentially tries two different lookup | |||
| strategies: First, an ALTO-specific U-NAPTR record is searched in the | strategies. First, an ALTO-specific U-NAPTR record is searched in | |||
| "reverse tree", i.e., in subdomains of in-addr.arpa. or ip6.arpa. | the "reverse tree" -- i.e., in subdomains of "in-addr.arpa." or | |||
| corresponding to the given IP address or prefix. If this lookup does | "ip6.arpa." corresponding to the given IP address or prefix. If this | |||
| not yield a usable result, the procedure tries further lookups with | lookup does not yield a usable result, the procedure tries further | |||
| truncated domain names, which correspond to shorter prefix lengths. | lookups with truncated domain names, which correspond to shorter | |||
| The goal is to allow deployment scenarios that require fine-grained | prefix lengths. The goal is to allow deployment scenarios that | |||
| discovery on a per-IP basis, as well as large-scale scenarios where | require fine-grained discovery on a per-IP basis, as well as large- | |||
| discovery is to be enabled for a large number of IP addresses with a | scale scenarios where discovery is to be enabled for a large number | |||
| small number of additional DNS resource records. | of IP addresses with a small number of additional DNS resource | |||
| records. | ||||
| 3. ALTO Cross-Domain Server Discovery Procedure: Specification | 3. ALTO Cross-Domain Server Discovery Procedure: Specification | |||
| 3.1. Interface | 3.1. Interface | |||
| The procedure specified in this document takes two parameters, X and | The procedure specified in this document takes two parameters, X and | |||
| SP, where X is an IP address or prefix and SP is a U-NAPTR Service | SP, where X is an IP address or prefix and SP is a U-NAPTR Service | |||
| Parameter. | Parameter. | |||
| The parameter X may be an IPv4 or an IPv6 address or prefix in CIDR | The parameter X may be an IPv4 or an IPv6 address or prefix in | |||
| notation (see [RFC4632] for the IPv4 CIDR notation and [RFC4291] for | Classless Inter-Domain Routing (CIDR) notation (see [RFC4632] for the | |||
| IPv6). Consequently, the address type AT is either "IPv4" or "IPv6". | IPv4 CIDR notation and [RFC4291] for IPv6). Consequently, the | |||
| In both cases, X consists of an IP address A and a prefix length L. | address type AT is either "IPv4" or "IPv6". In both cases, X | |||
| From the definition of IPv4 and IPv6 it follows that syntactically | consists of an IP address A and a prefix length L. From the | |||
| valid values for L are 0 <= L <= 32 when AT=IPv4 and 0 <= L <= 128 | definitions of IPv4 and IPv6, it follows that syntactically valid | |||
| when AT=IPv6. However, not all syntactically valid values of L are | values for L are 0 <= L <= 32 when AT=IPv4 and 0 <= L <= 128 when | |||
| actually supported by this procedure - Step 1 (see below) will check | AT=IPv6. However, not all syntactically valid values of L are | |||
| for unsupported values and report an error if neccessary. | actually supported by this procedure; Step 1 (see below) will check | |||
| for unsupported values and report an error if necessary. | ||||
| For example, for X=198.51.100.0/24, we get AT=IPv4, A=198.51.100.0 | For example, for X=198.51.100.0/24, we get AT=IPv4, A=198.51.100.0, | |||
| and L=24. Similarly, for X=2001:0DB8::20/128, we get AT=IPv6, | and L=24. Similarly, for X=2001:0DB8::20/128, we get AT=IPv6, | |||
| A=2001:0DB8::20 and L=128. | A=2001:0DB8::20, and L=128. | |||
| In the intended usage scenario, the procedure is normally always | In the intended usage scenario, the procedure is normally always | |||
| called with the parameter SP set to "ALTO:https". However, for | called with the parameter SP set to "ALTO:https". However, for | |||
| general applicabiliy and in order to support future extensions, the | general applicability and in order to support future extensions, the | |||
| procedure MUST support being called with any valid U-NAPTR Service | procedure MUST support being called with any valid U-NAPTR Service | |||
| Parameter (see Section 4.5. of [RFC4848] for the syntax of U-NAPTR | Parameter (see Section 4.5 of [RFC4848] for the syntax of U-NAPTR | |||
| Service Parameters and Section 5. of the same document for | Service Parameters and Section 5 of the same document for information | |||
| information about the IANA registries). | about the IANA registries). | |||
| The procedure performs DNS lookups and returns one or more URI(s) of | The procedure performs DNS lookups and returns one or more URIs of | |||
| information resources related to that IP address or prefix, usually | information resources related to that IP address or prefix, usually | |||
| the URI(s) of one or more ALTO Information Resource Directory (IRD, | the URIs of one or more ALTO Information Resource Directories (IRDs; | |||
| see Section 9 of [RFC7285]). For each URI, it also returns order and | see Section 9 of [RFC7285]). For each URI, the procedure also | |||
| preference values (see Section 4.1 of [RFC3403]), which should be | returns order and preference values (see Section 4.1 of [RFC3403]), | |||
| considered if more than one URI is returned. | which should be considered if more than one URI is returned. | |||
| During execution of this procedure, various error conditions may | During execution of this procedure, various error conditions may | |||
| occur and have to be reported to the caller; see Section 3.5. | occur and have to be reported to the caller; see Section 3.5. | |||
| For the remainder of the document, we use the following notation for | For the remainder of the document, we use the following notation for | |||
| calling the ALTO Cross-Domain Server Discovery Procedure: | calling the ALTO Cross-Domain Server Discovery | |||
| Procedure: IRD_URIS_X = XDOMDISC(X,"ALTO:https") | ||||
| IRD_URIS_X = XDOMDISC(X,"ALTO:https") | ||||
| 3.2. Step 1: Prepare Domain Name for Reverse DNS Lookup | 3.2. Step 1: Prepare Domain Name for Reverse DNS Lookup | |||
| First, the procedure checks the prefix length L for unsupported | First, the procedure checks the prefix length L for unsupported | |||
| values: If AT=IPv4 (i.e., if A is an IPv4 address) and L < 8, the | values: If AT=IPv4 (i.e., if A is an IPv4 address) and L < 8, the | |||
| procedure aborts and indicates an "unsupported prefix length" error | procedure aborts and indicates an "unsupported prefix length" error | |||
| to the caller. Similarly, if AT=IPv6 and L < 32, the procedure | to the caller. Similarly, if AT=IPv6 and L < 32, the procedure | |||
| aborts and indicates an "unsupported prefix length" error to the | aborts and indicates an "unsupported prefix length" error to the | |||
| caller. Otherwise, the procedure continues. | caller. Otherwise, the procedure continues. | |||
| If AT=IPv4, the procedure will then produce a DNS domain name, which | If AT=IPv4, the procedure will then produce a DNS domain name, which | |||
| will be referred to as R32. This domain name is constructed | will be referred to as R32. This domain name is constructed | |||
| according to the rules specified in Section 3.5 of [RFC1035] and it | according to the rules specified in Section 3.5 of [RFC1035], and it | |||
| is rooted in the special domain "IN-ADDR.ARPA.". | is rooted in the special domain "IN-ADDR.ARPA.". | |||
| For example, A=198.51.100.3 yields R32="3.100.51.198.IN-ADDR.ARPA.". | For example, A=198.51.100.3 yields R32="3.100.51.198.IN-ADDR.ARPA.". | |||
| If AT=IPv6, a domain name. which will be called R128, is constructed | If AT=IPv6, a domain name, which will be called R128, is constructed | |||
| according to the rules specified in Section 2.5 of [RFC3596] and the | according to the rules specified in Section 2.5 of [RFC3596], and the | |||
| special domain "IP6.ARPA." is used. | special domain "IP6.ARPA." is used. | |||
| For example (note: a line break was added after the second line), | For example (note: a line break was added after the second line), | |||
| A = 2001:0DB8::20 yields | A = 2001:0DB8::20 yields | |||
| R128 = "0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.B.D.0. | R128 = "0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.B.D.0. | |||
| 1.0.0.2.IP6.ARPA." | 1.0.0.2.IP6.ARPA." | |||
| 3.3. Step 2: Prepare Shortened Domain Names | 3.3. Step 2: Prepare Shortened Domain Names | |||
| For this step, an auxiliary function "skip" is defined as follows: | For this step, an auxiliary function, "skip", is defined as follows: | |||
| skip(str,n) will skip all characters in the string str, up to and | skip(str,n) will skip all characters in the string str, up to and | |||
| including the n-th dot, and return the remaining part of str. For | including the n-th dot, and return the remaining part of str. For | |||
| example, skip("foo.bar.baz.qux.quux.",2) will return "baz.qux.quux.". | example, skip("foo.bar.baz.qux.quux.",2) will return "baz.qux.quux.". | |||
| If AT=IPv4, the following additional domain names are generated from | If AT=IPv4, the following additional domain names are generated from | |||
| the result of the previous step: | the result of the previous step: | |||
| R24=skip(R32,1), | R24=skip(R32,1), | |||
| R16=skip(R32,2), and | R16=skip(R32,2), and | |||
| R8=skip(R32,3). | R8=skip(R32,3). | |||
| Removing one label from a domain name (i.e., one number of the | Removing one label from a domain name (i.e., one number of the | |||
| "dotted quad notation") corresponds to shortening the prefix length | "dotted quad notation") corresponds to shortening the prefix length | |||
| by 8 bits. | by 8 bits. | |||
| For example, R32="3.100.51.198.IN-ADDR.ARPA." yields | For example, | |||
| R24="100.51.198.IN-ADDR.ARPA.", R16="51.198.IN-ADDR.ARPA.", and | ||||
| R8="198.IN-ADDR.ARPA.". | R32="3.100.51.198.IN-ADDR.ARPA." yields | |||
| R24="100.51.198.IN-ADDR.ARPA." | ||||
| R16="51.198.IN-ADDR.ARPA." | ||||
| R8="198.IN-ADDR.ARPA." | ||||
| If AT=IPv6, the following additional domain names are generated from | If AT=IPv6, the following additional domain names are generated from | |||
| the result of the previous step: | the result of the previous step: | |||
| R64=skip(R128,16), | R64=skip(R128,16), | |||
| R56=skip(R128,18), | R56=skip(R128,18), | |||
| R48=skip(R128,20), | R48=skip(R128,20), | |||
| skipping to change at page 8, line 46 ¶ | skipping to change at line 338 ¶ | |||
| R48=skip(R128,20), | R48=skip(R128,20), | |||
| R40=skip(R128,22), and | R40=skip(R128,22), and | |||
| R32=skip(R128,24). | R32=skip(R128,24). | |||
| Removing one label from a domain name (i.e., one hex digit) | Removing one label from a domain name (i.e., one hex digit) | |||
| corresponds to shortening the prefix length by 4 bits. | corresponds to shortening the prefix length by 4 bits. | |||
| For example (note: a line break was added after the first line), | For example (note: a line break was added after the first line), | |||
| R128 = "0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.B.D.0. | R128 = "0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.B.D.0. | |||
| 1.0.0.2.IP6.ARPA." yields | 1.0.0.2.IP6.ARPA." yields | |||
| R64 = "0.0.0.0.0.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", | R64 = "0.0.0.0.0.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA." | |||
| R56 = "0.0.0.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", | R56 = "0.0.0.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA." | |||
| R48 = "0.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", | R48 = "0.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA." | |||
| R40 = "0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", and | R40 = "0.0.8.B.D.0.1.0.0.2.IP6.ARPA." | |||
| R32 = "8.B.D.0.1.0.0.2.IP6.ARPA.". | R32 = "8.B.D.0.1.0.0.2.IP6.ARPA." | |||
| 3.4. Step 3: Perform DNS U-NAPTR lookups | 3.4. Step 3: Perform DNS U-NAPTR Lookups | |||
| The address type and the prefix length of X are matched against the | The address type and the prefix length of X are matched against the | |||
| first and the second column of the following table, respectively: | first and the second column of the following table, respectively: | |||
| +------------+------------+------------+----------------------------+ | +------------+-----------+------------+-----------------------+ | |||
| | 1: Address | 2: Prefix | 3: MUST do | 4: SHOULD do further | | | 1: Address | 2: Prefix | 3: MUST do | 4: SHOULD do further | | |||
| | Type AT | Length L | 1st lookup | lookups in that order | | | Type AT | Length L | 1st lookup | lookups in that order | | |||
| +------------+------------+------------+----------------------------+ | +============+===========+============+=======================+ | |||
| | IPv4 | 32 | R32 | R24, R16, R8 | | | IPv4 | 32 | R32 | R24, R16, R8 | | |||
| | IPv4 | 24 .. 31 | R24 | R16, R8 | | +------------+-----------+------------+-----------------------+ | |||
| | IPv4 | 16 .. 23 | R16 | R8 | | | IPv4 | 24 .. 31 | R24 | R16, R8 | | |||
| | IPv4 | 8 .. 15 | R8 | (none) | | +------------+-----------+------------+-----------------------+ | |||
| | IPv4 | 0 .. 7 | (none, abort: unsupported prefix length)| | | IPv4 | 16 .. 23 | R16 | R8 | | |||
| +------------+------------+------------+----------------------------+ | +------------+-----------+------------+-----------------------+ | |||
| | IPv6 | 128 | R128 | R64, R56, R48, R40, R32 | | | IPv4 | 8 .. 15 | R8 | (none) | | |||
| | IPv6 | 64 (..127) | R64 | R56, R48, R40, R32 | | +------------+-----------+------------+-----------------------+ | |||
| | IPv6 | 56 .. 63 | R56 | R48, R40, R32 | | | IPv4 | 0 .. 7 | (none, abort: unsupported prefix | | |||
| | IPv6 | 48 .. 55 | R48 | R40, R32 | | | | | length) | | |||
| | IPv6 | 40 .. 47 | R40 | R32 | | +------------+-----------+------------+-----------------------+ | |||
| | IPv6 | 32 .. 39 | R32 | (none) | | | IPv6 | 128 | R128 | R64, R56, R48, R40, | | |||
| | IPv6 | 0 .. 31 | (none, abort: unsupported prefix length)| | | | | | R32 | | |||
| +------------+------------+------------+----------------------------+ | +------------+-----------+------------+-----------------------+ | |||
| | IPv6 | 64 | R64 | R56, R48, R40, R32 | | ||||
| | | (..127) | | | | ||||
| +------------+-----------+------------+-----------------------+ | ||||
| | IPv6 | 56 .. 63 | R56 | R48, R40, R32 | | ||||
| +------------+-----------+------------+-----------------------+ | ||||
| | IPv6 | 48 .. 55 | R48 | R40, R32 | | ||||
| +------------+-----------+------------+-----------------------+ | ||||
| | IPv6 | 40 .. 47 | R40 | R32 | | ||||
| +------------+-----------+------------+-----------------------+ | ||||
| | IPv6 | 32 .. 39 | R32 | (none) | | ||||
| +------------+-----------+------------+-----------------------+ | ||||
| | IPv6 | 0 .. 31 | (none, abort: unsupported prefix | | ||||
| | | | length) | | ||||
| +------------+-----------+------------------------------------+ | ||||
| Table 1: Perform DNS U-NAPTR lookups | ||||
| Then, the domain name given in the 3rd column and the U-NAPTR Service | Then, the domain name given in the 3rd column and the U-NAPTR Service | |||
| Parameter SP the procedure was called with (usually "ALTO:https") | Parameter SP with which the procedure was called (usually | |||
| MUST be used for an U-NAPTR [RFC4848] lookup, in order to obtain one | "ALTO:https") MUST be used for a U-NAPTR [RFC4848] lookup, in order | |||
| or more URIs (indicating protocol, host, and possibly path elements) | to obtain one or more URIs (indicating protocol, host, and possibly | |||
| for the ALTO server's Information Resource Directory (IRD). If such | path elements) for the ALTO server's Information Resource Directory | |||
| URI(s) can be found, the ALTO Cross-Domain Server Discovery Procedure | (IRD). If such URIs can be found, the ALTO Cross-Domain Server | |||
| returns that information to the caller and terminates successfully. | Discovery Procedure returns that information to the caller and | |||
| terminates successfully. | ||||
| For example, the following two U-NAPTR resource records can be used | For example, the following two U-NAPTR resource records can be used | |||
| for mapping "100.51.198.IN-ADDR.ARPA." (i.e., R24 from the example in | for mapping "100.51.198.IN-ADDR.ARPA." (i.e., R24 from the example in | |||
| the previous step) to the HTTPS URIs "https://alto1.example.net/ird" | the previous step) to the HTTPS URIs "https://alto1.example.net/ird" | |||
| and "https://alto2.example.net/ird", with the former being preferred. | and "https://alto2.example.net/ird", with the former being preferred. | |||
| 100.51.198.IN-ADDR.ARPA. IN NAPTR 100 10 "u" "ALTO:https" | 100.51.198.IN-ADDR.ARPA. IN NAPTR 100 10 "u" "ALTO:https" | |||
| "!.*!https://alto1.example.net/ird!" "" | "!.*!https://alto1.example.net/ird!" "" | |||
| 100.51.198.IN-ADDR.ARPA. IN NAPTR 100 20 "u" "ALTO:https" | 100.51.198.IN-ADDR.ARPA. IN NAPTR 100 20 "u" "ALTO:https" | |||
| "!.*!https://alto2.example.net/ird!" "" | "!.*!https://alto2.example.net/ird!" "" | |||
| If no matching U-NAPTR records can be found, the procedure SHOULD try | If no matching U-NAPTR records can be found, the procedure SHOULD try | |||
| further lookups, using the domain names from the fourth column in the | further lookups, using the domain names from the fourth column in the | |||
| indicated order, until one lookup succeeds. If no IRD URI could be | indicated order, until one lookup succeeds. If no IRD URI can be | |||
| found after looking up all domain names from the 3rd and 4th column, | found after looking up all domain names from the 3rd and 4th columns, | |||
| the procedure terminates unsuccessfully, returning an empty URI list. | the procedure terminates unsuccessfully, returning an empty URI list. | |||
| 3.5. Error Handling | 3.5. Error Handling | |||
| The ALTO Cross-Domain Server Discovery Procedure may fail for several | The ALTO Cross-Domain Server Discovery Procedure may fail for several | |||
| reasons. | reasons. | |||
| If the procedure is called with syntactically invalid parameters or | If the procedure is called with syntactically invalid parameters or | |||
| unsupported parameter values (in particular the prefix length L, see | unsupported parameter values (in particular, the prefix length L; see | |||
| Section 3.2), the procedure aborts, no URI list will be returned and | Section 3.2), the procedure aborts, no URI list will be returned, and | |||
| the error has to be reported to the caller. | the error has to be reported to the caller. | |||
| The procedure performs one or more DNS lookups in a well-defined | The procedure performs one or more DNS lookups in a well-defined | |||
| order (corresponding to descending prefix lengths, see Section 3.4), | order (corresponding to descending prefix lengths, see Section 3.4) | |||
| until one produces a usable result. Each of these DNS lookups might | until one produces a usable result. Each of these DNS lookups might | |||
| not produce a usable result, either due to a normal condition (e.g., | fail to produce a usable result, due to either a normal condition | |||
| domain name exists, but no ALTO-specific NAPTR resource records are | (e.g., a domain name exists, but no ALTO-specific NAPTR resource | |||
| associated with it), a permanent error (e.g., non-existent domain | records are associated with it), a permanent error (e.g., nonexistent | |||
| name), or due to a temporary error (e.g., timeout). In all three | domain name), or a temporary error (e.g., timeout). In all three | |||
| cases, and as long as there are further domain names that can be | cases, and as long as there are further domain names that can be | |||
| looked up, the procedure SHOULD immediately try to lookup the next | looked up, the procedure SHOULD immediately try to look up the next | |||
| domain name (from column 4 in the table given in Section 3.4). Only | domain name (from Column 4 in the table given in Section 3.4). Only | |||
| after all domain names have been tried at least once, the procedure | after all domain names have been tried at least once, the procedure | |||
| MAY retry those domain names that had caused temporary lookup errors. | MAY retry those domain names that had caused temporary lookup errors. | |||
| Generally speaking, ALTO provides advisory information for the | Generally speaking, ALTO provides advisory information for the | |||
| optimization of applications (e.g., peer-to-peer applications, | optimization of applications (peer-to-peer applications, overlay | |||
| overlay networks, etc.), but applications should not rely on the | networks, etc.), but applications should not rely on the availability | |||
| availability of such information for their basic functionality (see | of such information for their basic functionality (see | |||
| Section 8.3.4.3 of RFC 7285 [RFC7285]). Consequently, the speedy | Section 8.3.4.3 of [RFC7285]). Consequently, the speedy detection of | |||
| detection of an ALTO server, even though it may give less accurate | an ALTO server, even though it may give less accurate answers than | |||
| answers than other servers, or the quick realization that there is no | other servers, or the quick realization that there is no suitable | |||
| suitable ALTO server, is in general more preferable than causing long | ALTO server, is in general preferable to causing long delays by | |||
| delays by retrying failed queries. Nevertheless, the ALTO Cross- | retrying failed queries. Nevertheless, if DNS queries have failed | |||
| Domain Server Discovery Procedure SHOULD inform its caller, if DNS | due to temporary errors, the ALTO Cross-Domain Server Discovery | |||
| queries have failed due to temporary errors and that retrying the | Procedure SHOULD inform its caller that DNS queries have failed for | |||
| discovery at a later point in time might give more accurate results. | that reason and that retrying the discovery at a later point in time | |||
| might give more accurate results. | ||||
| 4. Using the ALTO Protocol with Cross-Domain Server Discovery | 4. Using the ALTO Protocol with Cross-Domain Server Discovery | |||
| Based on a modular design principle, ALTO provides several ALTO | Based on a modular design principle, ALTO provides several ALTO | |||
| services, each consisting of a set of information resouces that can | services, each consisting of a set of information resources that can | |||
| be accessed using the ALTO protocol. The information resources that | be accessed using the ALTO protocol. The information resources that | |||
| are available at a specific ALTO server are listed in its Information | are available at a specific ALTO server are listed in its Information | |||
| Resource Directory (IRD, see Section 9 of [RFC7285]). The ALTO | Resource Directory (IRD, see Section 9 of [RFC7285]). The ALTO | |||
| protocol specification defines the following ALTO services and their | protocol specification defines the following ALTO services and their | |||
| corresponding information resouces: | corresponding information resources: | |||
| o Network and Cost Map Service, see Section 11.2 of [RFC7285] | * Network and Cost Map Service, see Section 11.2 of [RFC7285] | |||
| o Map-Filtering Service, see Section 11.3 of [RFC7285] | * Map-Filtering Service, see Section 11.3 of [RFC7285] | |||
| o Endpoint Property Service, see Section 11.4 of [RFC7285] | * Endpoint Property Service, see Section 11.4 of [RFC7285] | |||
| o Endpoint Cost Service, see Section 11.5 of [RFC7285] | * Endpoint Cost Service, see Section 11.5 of [RFC7285] | |||
| The ALTO Cross-Domain Server Discovery Procedure is most useful in | The ALTO Cross-Domain Server Discovery Procedure is most useful in | |||
| conjunction with the Endpoint Property Service and the Endpoint Cost | conjunction with the Endpoint Property Service and the Endpoint Cost | |||
| Service. However, for the sake of completeness, possible interaction | Service. However, for the sake of completeness, possible interaction | |||
| with all four services is discussed below. Extension documents may | with all four services is discussed below. Extension documents may | |||
| specify further information resources; however, these are out of | specify further information resources; however, these are out of | |||
| scope of this document. | scope of this document. | |||
| 4.1. Network and Cost Map Service | 4.1. Network and Cost Map Service | |||
| An ALTO client may invoke the ALTO Cross-Domain Server Discovery | An ALTO client may invoke the ALTO Cross-Domain Server Discovery | |||
| Procedure (as specified in Section 3) for an IP address or prefix "X" | Procedure (as specified in Section 3) for an IP address or prefix X | |||
| and get a list of one or more IRD URI(s), including order and | and get a list of one or more IRD URIs, including order and | |||
| preference values: IRD_URIS_X = XDOMDISC(X,"ALTO:https"). The IRD(s) | preference values: IRD_URIS_X = XDOMDISC(X,"ALTO:https"). The IRD(s) | |||
| referenced by these URI(s) will always contain a network and a cost | referenced by these URIs will always contain a network and a cost | |||
| map, as these are mandatory information resources (see Section 11.2 | map, as these are mandatory information resources (see Section 11.2 | |||
| of [RFC7285]). However, the cost matrix may be very sparse. If, | of [RFC7285]). However, the cost matrix may be very sparse. If, | |||
| according to the network map, PID_X is the PID that contains the IP | according to the network map, PID_X is the Provider-defined | |||
| address or prefix X, and PID_1, PID_2, PID_3, ... are other PIDS, the | Identifier (PID; see Section 5.1 of [RFC7285]) that contains the IP | |||
| address or prefix X, and PID_1, PID_2, PID_3, ... are other PIDs, the | ||||
| cost map may look like this: | cost map may look like this: | |||
| From \ To PID_1 PID_2 PID_X PID_3 | +-------+----------+-------+-------+-------+ | |||
| ------+----------------------------------- | | From | To PID_1 | PID_2 | PID_X | PID_3 | | |||
| PID_1 | 92 | +=======+==========+=======+=======+=======+ | |||
| PID_2 | 6 | | PID_1 | | | 92 | | | |||
| PID_X | 46 3 1 19 | +-------+----------+-------+-------+-------+ | |||
| PID_3 | 38 | | PID_2 | | | 6 | | | |||
| +-------+----------+-------+-------+-------+ | ||||
| | PID_X | 46 | 3 | 1 | 19 | | ||||
| +-------+----------+-------+-------+-------+ | ||||
| | PID_3 | | | 38 | | | ||||
| +-------+----------+-------+-------+-------+ | ||||
| In this example, all cells outside column "X" and row "X" are | Table 2: Cost Map | |||
| In this example, all cells outside Column X and Row X are | ||||
| unspecified. A cost map with this structure contains the same | unspecified. A cost map with this structure contains the same | |||
| information as what could be retrieved using the Endpoint Cost | information as what could be retrieved using the Endpoint Cost | |||
| Service, cases 1 and 2 in Section 4.4. Accessing cells that are | Service, Cases 1 and 2 in Section 4.4. Accessing cells that are | |||
| neither in column "X" nor row "X" may not yield useful results. | neither in Column X nor Row X may not yield useful results. | |||
| Trying to assemble a more densely populated cost map from several | Trying to assemble a more densely populated cost map from several | |||
| cost maps with this very sparse structure may be a non-trivial task, | cost maps with this very sparse structure may be a nontrivial task, | |||
| as different ALTO servers may use different PID definitions (i.e., | as different ALTO servers may use different PID definitions (i.e., | |||
| network maps) and incompatible scales for the costs, in particular | network maps) and incompatible scales for the costs, in particular | |||
| for the "routingcost" metric. | for the "routingcost" metric. | |||
| 4.2. Map-Filtering Service | 4.2. Map-Filtering Service | |||
| An ALTO client may invoke the ALTO Cross-Domain Server Discovery | An ALTO client may invoke the ALTO Cross-Domain Server Discovery | |||
| Procedure (as specified in Section 3) for an IP address or prefix "X" | Procedure (as specified in Section 3) for an IP address or prefix X | |||
| and get a list of one or more IRD URI(s), including order and | and get a list of one or more IRD URIs, including order and | |||
| preference values: IRD_URIS_X = XDOMDISC(X,"ALTO:https"). These | preference values: IRD_URIS_X = XDOMDISC(X,"ALTO:https"). These IRDs | |||
| IRD(s) may provide the optional Map-Filtering Service (see Section | may provide the optional Map-Filtering Service (see Section 11.3 of | |||
| 11.3 of [RFC7285]). This service returns a subset of the full map, | [RFC7285]). This service returns a subset of the full map, as | |||
| as specified by the client. As discussed in Section 4.1, a cost map | specified by the client. As discussed in Section 4.1, a cost map may | |||
| may be very sparse in the envisioned deployment scenario. Therefore, | be very sparse in the envisioned deployment scenario. Therefore, | |||
| depending on the filtering criteria provided by the client, this | depending on the filtering criteria provided by the client, this | |||
| service may return results similar to the Endpoint Cost Service, or | service may return results similar to the Endpoint Cost Service, or | |||
| it may not return any useful result. | it may not return any useful result. | |||
| 4.3. Endpoint Property Service | 4.3. Endpoint Property Service | |||
| If an ALTO client wants to query an Endpoint Property Service (see | If an ALTO client wants to query an Endpoint Property Service (see | |||
| Section 11.4 of RFC 7285 [RFC7285]) about an endpoint with IP address | Section 11.4 of [RFC7285]) about an endpoint with IP address X or a | |||
| "X" or a group of endpoints within IP prefix "X", respectively, it | group of endpoints within IP prefix X, respectively, it has to invoke | |||
| has to invoke the ALTO Cross-Domain Server Discovery Procedure (as | the ALTO Cross-Domain Server Discovery Procedure (as specified in | |||
| specified in Section 3): IRD_URIS_X = XDOMDISC(X,"ALTO:https"). The | Section 3): IRD_URIS_X = XDOMDISC(X,"ALTO:https"). The result, | |||
| result IRD_URIS_X is a list of one or more URIs of Information | IRD_URIS_X, is a list of one or more URIs of Information Resource | |||
| Resource Directories (IRD, see Section 9 of [RFC7285]). Considering | Directories (IRDs, see Section 9 of [RFC7285]). Considering the | |||
| the order and preference values, the client has to check these IRDs | order and preference values, the client has to check these IRDs for a | |||
| for a suitable Endpoint Property Service and query it. | suitable Endpoint Property Service and query it. | |||
| If the ALTO client wants to do a similar Endpoint Property query for | If the ALTO client wants to do a similar Endpoint Property query for | |||
| a different IP address or prefix "Y", the whole procedure has to be | a different IP address or prefix "Y", the whole procedure has to be | |||
| repeated, as IRD_URIS_Y = XDOMDISC(Y,"ALTO:https") may yield a | repeated, as IRD_URIS_Y = XDOMDISC(Y,"ALTO:https") may yield a | |||
| different list of IRD URIs. Of course, the results of individual DNS | different list of IRD URIs. Of course, the results of individual DNS | |||
| queries may be cached as indicated by their respective time-to-live | queries may be cached as indicated by their respective time-to-live | |||
| (TTL) values. | (TTL) values. | |||
| 4.4. Endpoint Cost Service | 4.4. Endpoint Cost Service | |||
| The optional ALTO Endpoint Cost Service (ECS, see Section 11.5 of RFC | The optional ALTO Endpoint Cost Service (ECS; see Section 11.5 of | |||
| 7285 [RFC7285]) provides information about costs between individual | [RFC7285]) provides information about costs between individual | |||
| endpoints and it also supports ranking. The ECS allows that | endpoints and also supports ranking. The ECS allows endpoints to be | |||
| endpoints may be denoted by IP addresses or prefixes. The ECS is | denoted by IP addresses or prefixes. The ECS is called with a list | |||
| called with a list of one or more source IP addresses or prefixes, | of one or more source IP addresses or prefixes, which we will call | |||
| which we will call (S1, S2, S3, ...), and a list of one or more | (S1, S2, S3, ...), and a list of one or more destination IP addresses | |||
| destination IP addresses or prefixes, called (D1, D2, D3, ...). | or prefixes, called (D1, D2, D3, ...). | |||
| This specification distinguishes several cases, regarding the number | This specification distinguishes several cases, regarding the number | |||
| of elements in the list of source and destination addresses, | of elements in the list of source and destination addresses, | |||
| respectively: | respectively: | |||
| 1. Exactly one source address S1 and more than one destination | 1. Exactly one source address S1 and more than one destination | |||
| addresses D1, D2, D3, ... In this case, the ALTO client has to | addresses (D1, D2, D3, ...). In this case, the ALTO client has | |||
| invoke the ALTO Cross-Domain Server Discovery Procedure (as | to invoke the ALTO Cross-Domain Server Discovery Procedure (as | |||
| specified in Section 3) with that single source address as a | specified in Section 3) with that single source address as a | |||
| parameter: IRD_URIS_S1 = XDOMDISC(S1,"ALTO:https"). The result | parameter: IRD_URIS_S1 = XDOMDISC(S1,"ALTO:https"). The result, | |||
| IRD_URIS_S1 is a list of one or more URIs of Information Resource | IRD_URIS_S1, is a list of one or more URIs of Information | |||
| Directories (IRD, see Section 9 of [RFC7285]). Considering the | Resource Directories (IRDs, see Section 9 of [RFC7285]). | |||
| order and preference values, the client has to check these IRDs | Considering the order and preference values, the client has to | |||
| for a suitable Endpoint Cost Service and query it. The ECS is an | check these IRDs for a suitable Endpoint Cost Service and query | |||
| optional service (see Section 11.5.1 of RFC 7285 [RFC7285]) and | it. The ECS is an optional service (see Section 11.5.1 of | |||
| therefore, it may well be that an IRD does not refer to an ECS. | [RFC7285]), and therefore, it may well be that an IRD does not | |||
| refer to an ECS. | ||||
| Calling the Cross-Domain Server Discovery Procedure only once | Calling the Cross-Domain Server Discovery Procedure only once | |||
| with the single source address as a parameter - as opposed to | with the single source address as a parameter -- as opposed to | |||
| multiple calls, e.g., one for each destination address - is not | multiple calls, e.g., one for each destination address -- is not | |||
| only a matter of efficiency. In the given scenario, it is | only a matter of efficiency. In the given scenario, it is | |||
| advisable to send all ECS queries to the same ALTO server. This | advisable to send all ECS queries to the same ALTO server. This | |||
| ensures that the results can be compared (e.g., for sorting | ensures that the results can be compared (e.g., for sorting | |||
| candidate resource providers), even with cost metrics without a | candidate resource providers), even when cost metrics lack a | |||
| well-defined base unit, e.g., the "routingcost" metric. | well-defined base unit -- e.g., the "routingcost" metric. | |||
| 2. More than one source addresses S1, S2, S3, ... and exactly one | 2. More than one source address (S1, S2, S3, ...) and exactly one | |||
| destination address D1. In this case, the ALTO client has to | destination address D1. In this case, the ALTO client has to | |||
| invoke the ALTO Cross-Domain Server Discovery Procedure with that | invoke the ALTO Cross-Domain Server Discovery Procedure with that | |||
| single destination address as a parameter: | single destination address as a parameter: | |||
| IRD_URIS_D1 = XDOMDISC(D1,"ALTO:https"). The result IRD_URIS_D1 | IRD_URIS_D1 = XDOMDISC(D1,"ALTO:https"). The result, | |||
| is a list of one or more URIs of IRDs. Considering the order and | IRD_URIS_D1, is a list of one or more URIs of IRDs. Considering | |||
| preference values, the client has to check these IRDs for a | the order and preference values, the client has to check these | |||
| suitable ECS and query it. | IRDs for a suitable ECS and query it. | |||
| 3. Exactly one source address S1 and exactly one destination address | 3. Exactly one source address S1 and exactly one destination address | |||
| D1. The ALTO client may perform the same steps as in case 1, as | D1. The ALTO client may perform the same steps as in Case 1, as | |||
| specified above. As an alternative, it may also perform the same | specified above. As an alternative, it may also perform the same | |||
| steps as in case 2, as specified above. | steps as in Case 2, as specified above. | |||
| 4. More than one source addresses S1, S2, S3, ... and more than one | 4. More than one source address (S1, S2, S3, ...) and more than one | |||
| destination addresses D1, D2, D3, ... In this case, the ALTO | destination address (D1, D2, D3, ...). In this case, the ALTO | |||
| client should split the list of desired queries based on source | client should split the list of desired queries based on source | |||
| addresses and perform separately for each source address the same | addresses and perform separately for each source address the same | |||
| steps as in case 1, as specified above. As an alternative, the | steps as in Case 1, as specified above. As an alternative, the | |||
| ALTO client may also group the list based on destination | ALTO client may also group the list based on destination | |||
| addresses and perform separately for each destination address the | addresses and perform separately for each destination address the | |||
| same steps as in case 2, as specified above. However, comparing | same steps as in Case 2, as specified above. However, comparing | |||
| results between these sub-queries may be difficult, in particular | results between these subqueries may be difficult, in particular | |||
| if the cost metric is a relative preference without a well- | if the cost metric is a relative preference without a well- | |||
| defined base unit (e.g., the "routingcost" metric). | defined base unit (e.g., the "routingcost" metric). | |||
| See Appendix C for a detailed example showing the interaction of a | See Appendix C for a detailed example showing the interaction of a | |||
| tracker-based peer-to-peer application, the ALTO Endpoint Cost | tracker-based peer-to-peer application, the ALTO Endpoint Cost | |||
| Service, and the ALTO Cross-Domain Server Discovery Procedure. | Service, and the ALTO Cross-Domain Server Discovery Procedure. | |||
| 4.5. Summary and Further Extensions | 4.5. Summary and Further Extensions | |||
| Considering the four services defined in the ALTO base protocol | Considering the four services defined in the ALTO base protocol | |||
| specification [RFC7285], the ALTO Cross-Domain Server Discovery | specification [RFC7285], the ALTO Cross-Domain Server Discovery | |||
| Procedure works best with the Endpoint Property Service (EPS) and the | Procedure works best with the Endpoint Property Service (EPS) and the | |||
| Endpoint Cost Service (ECS). Both the EPS and the ECS take one or | Endpoint Cost Service (ECS). Both the EPS and the ECS take one or | |||
| more IP addresses as a parameter. The previous sections specify how | more IP addresses as a parameter. The previous sections specify how | |||
| the parameter for calling the ALTO Cross-Domain Server Discovery | the parameter for calling the ALTO Cross-Domain Server Discovery | |||
| Procedure has to be derived from these IP adresses. | Procedure has to be derived from these IP addresses. | |||
| In contrast, the ALTO Cross-Domain Server Discovery Procedure seems | In contrast, the ALTO Cross-Domain Server Discovery Procedure seems | |||
| less useful if the goal is to retrieve network and cost maps that | less useful if the goal is to retrieve network and cost maps that | |||
| cover the whole network topology. However, the procedure may be | cover the whole network topology. However, the procedure may be | |||
| useful if a map centered at a specific IP address is desired (i.e., a | useful if a map centered at a specific IP address is desired (i.e., a | |||
| map detailing the vicinity of said IP address or a map giving costs | map detailing the vicinity of said IP address or a map giving costs | |||
| from said IP address to all potential destinations). | from said IP address to all potential destinations). | |||
| The interaction between further ALTO services (and their | The interaction between further ALTO services (and their | |||
| corresponding information resources) needs to be investigated and | corresponding information resources) needs to be investigated and | |||
| defined once such further ALTO services are specified in an extension | defined once such further ALTO services are specified in an extension | |||
| document. | document. | |||
| 5. Implementation, Deployment, and Operational Considerations | 5. Implementation, Deployment, and Operational Considerations | |||
| 5.1. Considerations for ALTO Clients | 5.1. Considerations for ALTO Clients | |||
| 5.1.1. Resource Consumer Initiated Discovery | 5.1.1. Resource-Consumer-Initiated Discovery | |||
| Resource consumer initiated ALTO server discovery (c.f. ALTO | Resource-consumer-initiated ALTO server discovery (cf. ALTO | |||
| requirement AR-32 [RFC6708]) can be seen as a special case of cross- | requirement AR-32 [RFC6708]) can be seen as a special case of cross- | |||
| domain ALTO server discovery. To that end, an ALTO client embedded | domain ALTO server discovery. To that end, an ALTO client embedded | |||
| in a resource consumer would have to perform the ALTO Cross-Domain | in a resource consumer would have to perform the ALTO Cross-Domain | |||
| Server Discovery Procedure with its own IP address as a parameter. | Server Discovery Procedure with its own IP address as a parameter. | |||
| However, due to the widespread deployment of Network Address | However, due to the widespread deployment of Network Address | |||
| Translators (NAT), additional protocols and mechanisms such as STUN | Translators (NATs), additional protocols and mechanisms such as | |||
| [RFC5389] are usually needed to detect the client's "public" IP | Session Traversal Utilities for NAT (STUN) [RFC5389] are usually | |||
| address, before it can be used as a parameter to the discovery | needed to detect the client's "public" IP address before it can be | |||
| procedure. Note that a different approach for resource consumer | used as a parameter for the discovery procedure. Note that a | |||
| initiated ALTO server discovery, which is based on DHCP, is specified | different approach for resource-consumer-initiated ALTO server | |||
| in [RFC7286]. | discovery, which is based on DHCP, is specified in [RFC7286]. | |||
| 5.1.2. IPv4/v6 Dual Stack, Multihoming and Host Mobility | 5.1.2. IPv4/v6 Dual Stack, Multihoming and Host Mobility | |||
| The procedure specified in this document can discover ALTO server | The procedure specified in this document can discover ALTO server | |||
| URIs for a given IP address or prefix. The intention is, that a | URIs for a given IP address or prefix. The intention is that a third | |||
| third party (e.g., a resource directory) that receives query messages | party (e.g., a resource directory) that receives query messages from | |||
| from a resource consumer can use the source address in these messages | a resource consumer can use the source address in these messages to | |||
| to discover suitable ALTO servers for this specific resource | discover suitable ALTO servers for this specific resource consumer. | |||
| consumer. | ||||
| However, resource consumers (as defined in Section 2 of [RFC5693]) | However, resource consumers (as defined in Section 2 of [RFC5693]) | |||
| may reside on hosts with more than one IP address, e.g., due to | may reside on hosts with more than one IP address -- for example, due | |||
| IPv4/v6 dual stack operation and/or multihoming. IP packets sent | to IPv4/v6 dual stack operation and/or multihoming. IP packets sent | |||
| with different source addresses may be subject to different routing | with different source addresses may be subject to different routing | |||
| policies and path costs. In some deployment scenarios, it may even | policies and path costs. In some deployment scenarios, it may even | |||
| be required to ask different sets of ALTO servers for guidance. | be required to ask different sets of ALTO servers for guidance. | |||
| Furthermore, source addresses in IP packets may be modified en-route | Furthermore, source addresses in IP packets may be modified en route | |||
| by Network Address Translators (NAT). | by Network Address Translators (NATs). | |||
| If a resource consumer queries a resource directory for candidate | If a resource consumer queries a resource directory for candidate | |||
| resource providers, the locally selected (and possibly en-route | resource providers, the locally selected (and possibly en-route- | |||
| translated) source address of the query message - as observed by the | translated) source address of the query message -- as observed by the | |||
| resource directory - will become the basis for the ALTO server | resource directory -- will become the basis for the ALTO server | |||
| discovery and the subsequent optimization of the resource directory's | discovery and the subsequent optimization of the resource directory's | |||
| reply. If, however, the resource consumer then selects different | reply. If, however, the resource consumer then selects different | |||
| source addresses to contact returned resource providers, the desired | source addresses to contact returned resource providers, the desired | |||
| better-than-random "ALTO effect" may not occur. | better-than-random "ALTO effect" may not occur. | |||
| One solution approach for this problem is, that a dual stack or | One solution approach for this problem is that a dual-stack or | |||
| multihomed resource consumer could always use the same address for | multihomed resource consumer could always use the same address for | |||
| contacting the resource directory and all resource providers, thus | contacting the resource directory and all resource providers, thus | |||
| overriding the operating system's automatic source IP address | overriding the operating system's automatic selection of source IP | |||
| selection. For example, when using the BSD socket API, one could | addresses. For example, when using the BSD socket API, one could | |||
| always bind() the socket to one of the local IP addresses before | always bind() the socket to one of the local IP addresses before | |||
| trying to connect() to the resource directory or the resource | trying to connect() to the resource directory or the resource | |||
| providers, respectively. Another solution approach is to perform | providers, respectively. Another solution approach is to perform | |||
| ALTO-influenced resource provider selection (and source address | ALTO-influenced resource provider selection (and source-address | |||
| selection) locally in the resource consumer, in addition to or | selection) locally in the resource consumer, in addition to, or | |||
| instead of performing it in the resource directory. See | instead of, performing it in the resource directory. See | |||
| Section 5.1.1 for a discussion how to discover ALTO servers for local | Section 5.1.1 for a discussion of how to discover ALTO servers for | |||
| usage in the resource consumer. | local usage in the resource consumer. | |||
| Similarly, resource consumers on mobile hosts SHOULD query the | Similarly, resource consumers on mobile hosts SHOULD query the | |||
| resource directory again after a change of IP address, in order to | resource directory again after a change of IP address, in order to | |||
| get a list of candidate resource providers that is optimized for the | get a list of candidate resource providers that is optimized for the | |||
| new IP address. | new IP address. | |||
| 5.1.3. Interaction with Network Address Translation | 5.1.3. Interaction with Network Address Translation | |||
| The ALTO Cross-Domain Server Discovery Procedure has been designed to | The ALTO Cross-Domain Server Discovery Procedure has been designed to | |||
| enable the ALTO-based optimization of applications such as large- | enable the ALTO-based optimization of applications such as large- | |||
| scale overlay networks, that span - on the IP layer - multiple | scale overlay networks, that span -- on the IP layer -- multiple | |||
| adminstrative domains, possibly the whole Internet. Due to the | administrative domains, possibly the whole Internet. Due to the | |||
| widespread usage of Network Address Translators (NAT) it may well be | widespread usage of Network Address Translators (NATs), it may well | |||
| that nodes of the overlay network (i.e., resource consumers or | be that nodes of the overlay network (i.e., resource consumers or | |||
| resource providers) are located behind a NAT, maybe even behind | resource providers) are located behind a NAT, maybe even behind | |||
| several cascaded NATs. | several cascaded NATs. | |||
| If a resource directory is located in the public Internet (i.e., not | If a resource directory is located in the public Internet (i.e., not | |||
| behind a NAT) and if it receives a message from a resource consumer | behind a NAT) and receives a message from a resource consumer behind | |||
| behind one or more NATs, the message's source address will be the | one or more NATs, the message's source address will be the public IP | |||
| public IP address of the outermost NAT in front of the resource | address of the outermost NAT in front of the resource consumer. The | |||
| consumer. The same applies if the resource directory is behind a | same applies if the resource directory is behind a different NAT than | |||
| different NAT than the resource consumer. The resource directory may | the resource consumer. The resource directory may call the ALTO | |||
| call the ALTO Cross-Domain Server Discovery Procedure with the | Cross-Domain Server Discovery Procedure with the message's source | |||
| message's source address as a parameter. In effect, not the resource | address as a parameter. In effect, not the resource consumer's | |||
| consumer's (private) IP address, but the public IP address of the | (private) IP address, but the public IP address of the outermost NAT | |||
| outermost NAT in front of it will be used as a basis for ALTO- | in front of it, will be used as a basis for ALTO optimization. This | |||
| optimization. This will work fine as long as the network behind the | will work fine as long as the network behind the NAT is not too big | |||
| NAT is not too big (e.g., if the NAT is in a residential gateway). | (e.g., if the NAT is in a residential gateway). | |||
| If a resource directory receives a message from a resource consumer | If a resource directory receives a message from a resource consumer | |||
| and the message's source address is a "private" IP address [RFC1918], | and the message's source address is a "private" IP address [RFC1918], | |||
| this may be a sign that both of them are behind the same NAT. An | this may be a sign that both of them are behind the same NAT. An | |||
| invokation of the ALTO Cross-Domain Server Discovery Procedure with | invocation of the ALTO Cross-Domain Server Discovery Procedure with | |||
| this private address may be problematic, as this will only yield | this private address may be problematic, as this will only yield | |||
| usable results if a DNS "split horizon" and DNSSEC trust anchors are | usable results if a DNS "split horizon" and DNSSEC trust anchors are | |||
| configured correctly. In this situation it may be more advisable to | configured correctly. In this situation, it may be more advisable to | |||
| query an ALTO server that has been discovered using [RFC7286] or any | query an ALTO server that has been discovered using [RFC7286] or any | |||
| other local configuration. The interaction between intra-domain ALTO | other local configuration. The interaction between intradomain ALTO | |||
| for large private domains (e.g., behind a "carrier-grade NAT") and | for large private domains (e.g., behind a "carrier-grade NAT") and | |||
| cross-domain, Internet-wide optimization, is beyond the scope of this | cross-domain, Internet-wide optimization, is beyond the scope of this | |||
| document. | document. | |||
| 5.2. Considerations for Network Operators | 5.2. Considerations for Network Operators | |||
| 5.2.1. Flexibility vs. Load on the DNS | 5.2.1. Flexibility vs. Load on the DNS | |||
| The ALTO Cross-Domain Server Discovery Procedure, as specified in | The ALTO Cross-Domain Server Discovery Procedure, as specified in | |||
| Section 3, first produces a list of domain names (steps 1 and 2) and | Section 3, first produces a list of domain names (Steps 1 and 2) and | |||
| then looks for relevant NAPTR records associated with these names, | then looks for relevant NAPTR records associated with these names, | |||
| until a useful result can be found (step 3). The number of candidate | until a useful result can be found (Step 3). The number of candidate | |||
| domain names on this list is a compromise between flexibility when | domain names on this list is a compromise between flexibility when | |||
| installing NAPTR records and avoiding excess load on the DNS. | installing NAPTR records and avoiding excess load on the DNS. | |||
| A single invocation of the ALTO Cross-Domain Server Discovery | A single invocation of the ALTO Cross-Domain Server Discovery | |||
| Procedure, with an IPv6 address as a parameter, may cause up to, but | Procedure, with an IPv6 address as a parameter, may cause up to, but | |||
| no more than, six DNS lookups for NAPTR records. For IPv4, the | no more than, six DNS lookups for NAPTR records. For IPv4, the | |||
| maximum is four lookups. Should the load on the DNS infrastructure | maximum is four lookups. Should the load on the DNS infrastructure | |||
| caused by these lookups become a problem, one solution approach is to | caused by these lookups become a problem, one solution approach is to | |||
| actually populate the DNS with ALTO-specific NAPTR records. If such | populate the DNS with ALTO-specific NAPTR records. If such records | |||
| records can be found for individual IP addresses (possibly installed | can be found for individual IP addresses (possibly installed using a | |||
| using a wildcarding mechanism in the name server) or for long | wildcarding mechanism in the name server) or long prefixes, the | |||
| prefixes, the procedure will terminate successfully and not perform | procedure will terminate successfully and not perform lookups for | |||
| lookups for shorter prefix lengths, thus reducing the total number of | shorter prefix lengths, thus reducing the total number of DNS | |||
| DNS queries. Another approach for reducing the load on the DNS | queries. Another approach for reducing the load on the DNS | |||
| infrastructure is to increase the TTL for caching negative answers. | infrastructure is to increase the TTL for caching negative answers. | |||
| On the other hand, the ALTO Cross-Domain Server Discovery Procedure | On the other hand, the ALTO Cross-Domain Server Discovery Procedure | |||
| trying to lookup truncated domain names allows for efficient | trying to look up truncated domain names allows for efficient | |||
| configuration of large-scale scenarios, where discovery is to be | configuration of large-scale scenarios, where discovery is to be | |||
| enabled for a large number of IP addresses with a small number of | enabled for a large number of IP addresses with a small number of | |||
| additional DNS resource records. Note that expressly, it has not | additional DNS resource records. Note that it expressly has not been | |||
| been a design goal of this procedure to give clients a means to | a design goal of this procedure to give clients a means of | |||
| understand the IP prefix delegation structure. Furthermore, this | understanding the IP prefix delegation structure. Furthermore, this | |||
| specification does not assume or reccomend that prefix delegations | specification does not assume or recommend that prefix delegations | |||
| should preferrably occur at those prefix lengths that are used in | should preferably occur at those prefix lengths that are used in Step | |||
| Step 2 of this procedure (see Section 3.3). A network operator that | 2 of this procedure (see Section 3.3). A network operator that uses, | |||
| uses, for example, an IPv4 /18 prefix and wants to install the NAPTR | for example, an IPv4 /18 prefix and wants to install the NAPTR | |||
| records efficiently, could either install 64 NAPTR records (one for | records efficiently could either install 64 NAPTR records (one for | |||
| each of the /24 prefixes contained within the /18 prefix), or they | each of the /24 prefixes contained within the /18 prefix), or they | |||
| could try to team up with the owners of the other fragments of the | could try to team up with the owners of the other fragments of the | |||
| enclosing /16 prefix, in order to run a common ALTO server to which | enclosing /16 prefix, in order to run a common ALTO server to which | |||
| only one NAPTR would point. | only one NAPTR would point. | |||
| 5.2.2. BCP20 and missing delegations of the reverse DNS | 5.2.2. BCP 20 and Missing Delegations of the Reverse DNS | |||
| RFC2317 [RFC2317], also known as BCP20, describes a way to delegate | [RFC2317], also known as BCP 20, describes a way to delegate the | |||
| the "reverse DNS" (i.e., subdomains of in-addr.arpa.) for IPv4 | "reverse DNS" (i.e., subdomains of "in-addr.arpa.") for IPv4 address | |||
| address ranges with fewer than 256 addresses (i.e., less than a whole | ranges with fewer than 256 addresses (i.e., less than a whole /24 | |||
| /24 prefix). The ALTO Cross-Domain Server Discovery procedure is | prefix). The ALTO Cross-Domain Server Discovery Procedure is | |||
| compatible with this method. | compatible with this method. | |||
| In some deployment scenarios, e.g., residential Internet access, | In some deployment scenarios -- e.g., residential Internet access -- | |||
| where customers often dynamically receive a single IPv4 address | where customers often dynamically receive a single IPv4 address (and/ | |||
| (and/or a small IPv6 address block) from a pool of addresses, ISPs | or a small IPv6 address block) from a pool of addresses, ISPs | |||
| typically will not delegate the "reverse DNS" to their customers. | typically will not delegate the "reverse DNS" to their customers. | |||
| This practice makes it impossible for these customers to populate the | This practice makes it impossible for these customers to populate the | |||
| DNS with NAPTR resource records that point to an ALTO server of their | DNS with NAPTR resource records that point to an ALTO server of their | |||
| choice. Yet, the ISP may publish NAPTR resource records in the | choice. Yet, the ISP may publish NAPTR resource records in the | |||
| "reverse DNS" for individual addresses or larger address pools (i.e., | "reverse DNS" for individual addresses or larger address pools (i.e., | |||
| shorter prefix lengths). | shorter prefix lengths). | |||
| While ALTO is by no means technologically tied to the Border Gateway | While ALTO is by no means technologically tied to the Border Gateway | |||
| Protocol (BGP), it is anticipated that BGP will be an important | Protocol (BGP), it is anticipated that BGP will be an important | |||
| source of information for ALTO and that the operator of the outermost | source of information for ALTO and that the operator of the outermost | |||
| BGP-enabled router will have a strong incentive to publish a digest | BGP-enabled router will have a strong incentive to publish a digest | |||
| of their routing policies and costs through ALTO. In contrast, an | of their routing policies and costs through ALTO. In contrast, an | |||
| individual user or an organization that has been assigned only a | individual user or an organization that has been assigned only a | |||
| small address range (i.e., an IPv4 prefix with a prefix length longer | small address range (i.e., an IPv4 prefix with a prefix length longer | |||
| than /24) will typically connect to the Internet using only a single | than /24) will typically connect to the Internet using only a single | |||
| ISP, and they might not be interested in publishing their own ALTO | ISP, and they might not be interested in publishing their own ALTO | |||
| information. Consequently, they might wish to leave the operation of | information. Consequently, they might wish to leave the operation of | |||
| an ALTO server up to their ISP. This ISP may install NAPTR resource | an ALTO server up to their ISP. This ISP may install NAPTR resource | |||
| records, which are needed for the ALTO Cross-Domain Server Discovery | records, which are needed for the ALTO Cross-Domain Server Discovery | |||
| procedure, in the subdomain of in-addr.arpa. that corresponds to the | Procedure, in the subdomain of "in-addr.arpa." that corresponds to | |||
| whole /24 prefix (c.f., R24 in Section 3.3 of this document), even if | the whole /24 prefix (cf. R24 in Section 3.3 of this document), even | |||
| BCP20-style delegations or no delegations at all are in use. | if delegations in the style of BCP 20 or no delegations at all are in | |||
| use. | ||||
| 6. Security Considerations | 6. Security Considerations | |||
| A high-level discussion of security issues related to ALTO is part of | A high-level discussion of security issues related to ALTO is part of | |||
| the ALTO problem statement [RFC5693]. A classification of unwanted | the ALTO problem statement [RFC5693]. A classification of unwanted | |||
| information disclosure risks, as well as specific security-related | information disclosure risks, as well as specific security-related | |||
| requirements can be found in the ALTO requirements document | requirements, can be found in the ALTO requirements document | |||
| [RFC6708]. | [RFC6708]. | |||
| The remainder of this section focuses on security threats and | The remainder of this section focuses on security threats and | |||
| protection mechanisms for the cross-domain ALTO server discovery | protection mechanisms for the Cross-Domain ALTO Server Discovery | |||
| procedure as such. Once the ALTO server's URI has been discovered | Procedure as such. Once the ALTO server's URI has been discovered, | |||
| and the communication between the ALTO client and the ALTO server | and the communication between the ALTO client and the ALTO server | |||
| starts, the security threats and protection mechanisms discussed in | starts, the security threats and protection mechanisms discussed in | |||
| the ALTO protocol specification [RFC7285] apply. | the ALTO protocol specification [RFC7285] apply. | |||
| 6.1. Integrity of the ALTO Server's URI | 6.1. Integrity of the ALTO Server's URI | |||
| Scenario Description | Scenario Description | |||
| An attacker could compromise the ALTO server discovery procedure | An attacker could compromise the ALTO server discovery procedure | |||
| or the underlying infrastructure in a way that ALTO clients would | or the underlying infrastructure in such a way that ALTO clients | |||
| discover a "wrong" ALTO server URI. | would discover a "wrong" ALTO server URI. | |||
| Threat Discussion | Threat Discussion | |||
| The cross-domain ALTO server discovery procedure relies on a | The Cross-Domain ALTO Server Discovery Procedure relies on a | |||
| series of DNS lookups, in order to produce one or more URI(s). If | series of DNS lookups, in order to produce one or more URIs. If | |||
| an attacker was able to modify or spoof any of the DNS records, | an attacker were able to modify or spoof any of the DNS records, | |||
| the resulting URI(s) could be replaced by forged URI(s). This is | the resulting URIs could be replaced by forged URIs. This is | |||
| probably the most serious security concern related to ALTO server | probably the most serious security concern related to ALTO server | |||
| discovery. The discovered "wrong" ALTO server might not be able | discovery. The discovered "wrong" ALTO server might not be able | |||
| to give guidance to a given ALTO client at all, or it might give | to give guidance to a given ALTO client at all, or it might give | |||
| suboptimal or forged information. In the latter case, an attacker | suboptimal or forged information. In the latter case, an attacker | |||
| could try to use ALTO to affect the traffic distribution in the | could try to use ALTO to affect the traffic distribution in the | |||
| network or the performance of applications (see also Section 15.1. | network or the performance of applications (see also Section 15.1 | |||
| of [RFC7285]). Furthermore, a hostile ALTO server could threaten | of [RFC7285]). Furthermore, a hostile ALTO server could threaten | |||
| user privacy (see also Section 5.2.1, case (5a) in [RFC6708]). | user privacy (see also Case (5a) in Section 5.2.1 of [RFC6708]). | |||
| Protection Strategies and Mechanisms | Protection Strategies and Mechanisms | |||
| The application of DNS security (DNSSEC) [RFC4033] provides a | The application of DNS security (DNSSEC) [RFC4033] provides a | |||
| means to detect and avert attacks that rely on modification of the | means of detecting and averting attacks that rely on modification | |||
| DNS records while in transit. All implementations of the cross- | of the DNS records while in transit. All implementations of the | |||
| domain ALTO server discovery procedure MUST support DNSSEC or be | Cross-Domain ALTO Server Discovery Procedure MUST support DNSSEC | |||
| able to use such functionality provided by the underlying | or be able to use such functionality provided by the underlying | |||
| operating system. Network operators that publish U-NAPTR resource | operating system. Network operators that publish U-NAPTR resource | |||
| records to be used for the cross-domain ALTO server discovery | records to be used for the Cross-Domain ALTO Server Discovery | |||
| procedure SHOULD use DNSSEC to protect their subdomains of in- | Procedure SHOULD use DNSSEC to protect their subdomains of "in- | |||
| addr.arpa. and/or ip6.arpa., respectively. Additional operational | addr.arpa." and/or "ip6.arpa.", respectively. Additional | |||
| precautions for safely operating the DNS infrastructure are | operational precautions for safely operating the DNS | |||
| required in order to ensure that name servers do not sign forged | infrastructure are required in order to ensure that name servers | |||
| (or otherwise "wrong") resource records. Security considerations | do not sign forged (or otherwise "wrong") resource records. | |||
| specific to U-NAPTR are described in more detail in [RFC4848]. | Security considerations specific to U-NAPTR are described in more | |||
| detail in [RFC4848]. | ||||
| In addition to active protection mechanisms, users and network | In addition to active protection mechanisms, users and network | |||
| operators can monitor application performance and network traffic | operators can monitor application performance and network traffic | |||
| patterns for poor performance or abnormalities. If it turns out | patterns for poor performance or abnormalities. If it turns out | |||
| that relying on the guidance of a specific ALTO server does not | that relying on the guidance of a specific ALTO server does not | |||
| result in better-than-random results, the usage of the ALTO server | result in better-than-random results, the usage of the ALTO server | |||
| may be discontinued (see also Section 15.2 of [RFC7285]). | may be discontinued (see also Section 15.2 of [RFC7285]). | |||
| Note | Note | |||
| The cross-domain ALTO server discovery procedure finishes | The Cross-Domain ALTO Server Discovery Procedure finishes | |||
| successfully when it has discovered one or more URI(s). Once an | successfully when it has discovered one or more URIs. Once an | |||
| ALTO server's URI has been discovered and the communication | ALTO server's URI has been discovered and the communication | |||
| between the ALTO client and the ALTO server starts, the security | between the ALTO client and the ALTO server starts, the security | |||
| threats and protection mechanisms discussed in the ALTO protocol | threats and protection mechanisms discussed in the ALTO protocol | |||
| specification [RFC7285] apply. | specification [RFC7285] apply. | |||
| A threat related to the one considered above is the impersonation | A threat related to the one considered above is the impersonation | |||
| of an ALTO server after its correct URI has been discovered. This | of an ALTO server after its correct URI has been discovered. This | |||
| threat and protection strategies are discussed in Section 15.1 of | threat and protection strategies are discussed in Section 15.1 of | |||
| [RFC7285]. The ALTO protocol's primary mechanism for protecting | [RFC7285]. The ALTO protocol's primary mechanism for protecting | |||
| authenticity and integrity (as well as confidentiality) is the use | authenticity and integrity (as well as confidentiality) is the use | |||
| of HTTPS-based transport, i.e., HTTP over TLS [RFC2818]. | of HTTPS-based transport -- i.e., HTTP over TLS [RFC2818]. | |||
| Typically, when the URI's host component is a host name, a further | Typically, when the URI's host component is a host name, a further | |||
| DNS lookup is needed to map it to an IP address, before the | DNS lookup is needed to map it to an IP address before the | |||
| communication with the server can begin. This last DNS lookup | communication with the server can begin. This last DNS lookup | |||
| (for A or AAAA resource records) does not necessarily have to be | (for A or AAAA resource records) does not necessarily have to be | |||
| protected by DNSSEC, as the server identity checks specified in | protected by DNSSEC, as the server identity checks specified in | |||
| [RFC2818] are able to detect DNS spoofing or similar attacks, | [RFC2818] are able to detect DNS spoofing or similar attacks after | |||
| after the connection to the (possibly wrong) host has been | the connection to the (possibly wrong) host has been established. | |||
| established. However, this validation, which is based on the | However, this validation, which is based on the server | |||
| server certificate, can only protect the steps that occur after | certificate, can only protect the steps that occur after the | |||
| the server URI has been discovered. It cannot detect attacks | server URI has been discovered. It cannot detect attacks against | |||
| against the authenticity of the U-NAPTR lookups needed for the | the authenticity of the U-NAPTR lookups needed for the Cross- | |||
| cross-domain ALTO server discovery procedure, and therefore, these | Domain ALTO Server Discovery Procedure, and therefore, these | |||
| resource records have to be secured using DNSSEC. | resource records have to be secured using DNSSEC. | |||
| 6.2. Availability of the ALTO Server Discovery Procedure | 6.2. Availability of the ALTO Server Discovery Procedure | |||
| Scenario Description | Scenario Description | |||
| An attacker could compromise the cross-domain ALTO server | An attacker could compromise the Cross-Domain ALTO Server | |||
| discovery procedure or the underlying infrastructure in a way that | Discovery Procedure or the underlying infrastructure in such a way | |||
| ALTO clients would not be able to discover any ALTO server. | that ALTO clients would not be able to discover any ALTO server. | |||
| Threat Discussion | Threat Discussion | |||
| If no ALTO server can be discovered (although a suitable one | If no ALTO server can be discovered (although a suitable one | |||
| exists) applications have to make their decisions without ALTO | exists), applications have to make their decisions without ALTO | |||
| guidance. As ALTO could be temporarily unavailable for many | guidance. As ALTO could be temporarily unavailable for many | |||
| reasons, applications must be prepared to do so. However, The | reasons, applications must be prepared to do so. However, the | |||
| resulting application performance and traffic distribution will | resulting application performance and traffic distribution will | |||
| correspond to a deployment scenario without ALTO. | correspond to a deployment scenario without ALTO. | |||
| Protection Strategies and Mechanisms | Protection Strategies and Mechanisms | |||
| Operators should follow best current practices to secure their DNS | Operators should follow best current practices to secure their DNS | |||
| and ALTO (see Section 15.5 of [RFC7285]) servers against Denial- | and ALTO servers (see Section 15.5 of [RFC7285]) against Denial- | |||
| of-Service (DoS) attacks. | of-Service (DoS) attacks. | |||
| 6.3. Confidentiality of the ALTO Server's URI | 6.3. Confidentiality of the ALTO Server's URI | |||
| Scenario Description | Scenario Description | |||
| An unauthorized party could invoke the cross-domain ALTO server | An unauthorized party could invoke the Cross-Domain ALTO Server | |||
| discovery procedure, or intercept discovery messages between an | Discovery Procedure or intercept discovery messages between an | |||
| authorized ALTO client and the DNS servers, in order to acquire | authorized ALTO client and the DNS servers, in order to acquire | |||
| knowledge of the ALTO server URI for a specific IP address. | knowledge of the ALTO server URI for a specific IP address. | |||
| Threat Discussion | Threat Discussion | |||
| In the ALTO use cases that have been described in the ALTO problem | In the ALTO use cases that have been described in the ALTO problem | |||
| statement [RFC5693] and/or discussed in the ALTO working group, | statement [RFC5693] and/or discussed in the ALTO working group, | |||
| the ALTO server's URI as such has always been considered as public | the ALTO server's URI as such has always been considered as public | |||
| information that does not need protection of confidentiality. | information that does not need protection of confidentiality. | |||
| Protection Strategies and Mechanisms | Protection Strategies and Mechanisms | |||
| No protection mechanisms for this scenario have been provided, as | No protection mechanisms for this scenario have been provided, as | |||
| it has not been identified as a relevant threat. However, if a | it has not been identified as a relevant threat. However, if a | |||
| new use case is identified that requires this kind of protection, | new use case is identified that requires this kind of protection, | |||
| the suitability of this ALTO server discovery procedure as well as | the suitability of this ALTO server discovery procedure as well as | |||
| possible security extensions have to be re-evaluated thoroughly. | possible security extensions have to be re-evaluated thoroughly. | |||
| 6.4. Privacy for ALTO Clients | 6.4. Privacy for ALTO Clients | |||
| Scenario Description | Scenario Description | |||
| An unauthorized party could eavesdrop on the messages between an | An unauthorized party could eavesdrop on the messages between an | |||
| ALTO client and the DNS servers, and thereby find out the fact | ALTO client and the DNS servers and thereby find out the fact that | |||
| that said ALTO client uses (or at least tries to use) the ALTO | said ALTO client uses (or at least tries to use) the ALTO service | |||
| service in order to optimize traffic from/to a specific IP | in order to optimize traffic from/to a specific IP address. | |||
| address. | ||||
| Threat Discussion | Threat Discussion | |||
| In the ALTO use cases that have been described in the ALTO problem | In the ALTO use cases that have been described in the ALTO problem | |||
| statement [RFC5693] and/or discussed in the ALTO working group, | statement [RFC5693] and/or discussed in the ALTO working group, | |||
| this scenario has not been identified as a relevant threat. | this scenario has not been identified as a relevant threat. | |||
| However, Pervasive Surveillance [RFC7624] and DNS Privacy | However, pervasive surveillance [RFC7624] and DNS privacy | |||
| Considerations [RFC7626] have seen significant attention in the | considerations [RFC7626] have seen significant attention in the | |||
| Internet community in recent years. | Internet community in recent years. | |||
| Protection Strategies and Mechanisms | Protection Strategies and Mechanisms | |||
| DNS over TLS [RFC7858] and DNS over HTTPS [RFC8484] provide means | DNS over TLS [RFC7858] and DNS over HTTPS [RFC8484] provide means | |||
| for protecting confidentiality (and integrity) of DNS traffic | for protecting confidentiality (and integrity) of DNS traffic | |||
| between a client (stub) and its recursive name servers, including | between a client (stub) and its recursive name servers, including | |||
| DNS queries and replies caused by the ALTO Cross-Domain Server | DNS queries and replies caused by the ALTO Cross-Domain Server | |||
| Discovery Procedure. | Discovery Procedure. | |||
| 7. IANA Considerations | 7. IANA Considerations | |||
| This document does not require any IANA action. | This document has no IANA actions. | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [RFC1035] Mockapetris, P., "Domain names - implementation and | [RFC1035] Mockapetris, P., "Domain names - implementation and | |||
| specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | |||
| November 1987, <https://www.rfc-editor.org/info/rfc1035>. | November 1987, <https://www.rfc-editor.org/info/rfc1035>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ | Requirement Levels", BCP 14, RFC 2119, | |||
| RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3403] Mealling, M., "Dynamic Delegation Discovery System (DDDS) | [RFC3403] Mealling, M., "Dynamic Delegation Discovery System (DDDS) | |||
| Part Three: The Domain Name System (DNS) Database", | Part Three: The Domain Name System (DNS) Database", | |||
| RFC 3403, DOI 10.17487/RFC3403, October 2002, | RFC 3403, DOI 10.17487/RFC3403, October 2002, | |||
| <https://www.rfc-editor.org/info/rfc3403>. | <https://www.rfc-editor.org/info/rfc3403>. | |||
| [RFC3596] Thomson, S., Huitema, C., Ksinant, V., and M. Souissi, | [RFC3596] Thomson, S., Huitema, C., Ksinant, V., and M. Souissi, | |||
| "DNS Extensions to Support IP Version 6", STD 88, | "DNS Extensions to Support IP Version 6", STD 88, | |||
| RFC 3596, DOI 10.17487/RFC3596, October 2003, | RFC 3596, DOI 10.17487/RFC3596, October 2003, | |||
| skipping to change at page 24, line 39 ¶ | skipping to change at line 1002 ¶ | |||
| Using URIs and the Dynamic Delegation Discovery Service | Using URIs and the Dynamic Delegation Discovery Service | |||
| (DDDS)", RFC 4848, DOI 10.17487/RFC4848, April 2007, | (DDDS)", RFC 4848, DOI 10.17487/RFC4848, April 2007, | |||
| <https://www.rfc-editor.org/info/rfc4848>. | <https://www.rfc-editor.org/info/rfc4848>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [I-D.kiesel-alto-alto4alto] | [ALTO-ANYCAST] | |||
| Kiesel, S., "Using ALTO for ALTO server selection", | ||||
| draft-kiesel-alto-alto4alto-00 (work in progress), | ||||
| July 2010. | ||||
| [I-D.kiesel-alto-ip-based-srv-disc] | ||||
| Kiesel, S. and R. Penno, "Application-Layer Traffic | Kiesel, S. and R. Penno, "Application-Layer Traffic | |||
| Optimization (ALTO) Anycast Address", | Optimization (ALTO) Anycast Address", Work in Progress, | |||
| draft-kiesel-alto-ip-based-srv-disc-03 (work in progress), | Internet-Draft, draft-kiesel-alto-ip-based-srv-disc-03, 1 | |||
| July 2014. | July 2014, <https://tools.ietf.org/html/draft-kiesel-alto- | |||
| ip-based-srv-disc-03>. | ||||
| [RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G., | [ALTO4ALTO] | |||
| and E. Lear, "Address Allocation for Private Internets", | Kiesel, S., "Using ALTO for ALTO server selection", Work | |||
| BCP 5, RFC 1918, DOI 10.17487/RFC1918, February 1996, | in Progress, Internet-Draft, draft-kiesel-alto-alto4alto- | |||
| <https://www.rfc-editor.org/info/rfc1918>. | 00, 5 July 2010, <https://tools.ietf.org/html/draft- | |||
| kiesel-alto-alto4alto-00>. | ||||
| [RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G. | ||||
| J., and E. Lear, "Address Allocation for Private | ||||
| Internets", BCP 5, RFC 1918, DOI 10.17487/RFC1918, | ||||
| February 1996, <https://www.rfc-editor.org/info/rfc1918>. | ||||
| [RFC2317] Eidnes, H., de Groot, G., and P. Vixie, "Classless IN- | [RFC2317] Eidnes, H., de Groot, G., and P. Vixie, "Classless IN- | |||
| ADDR.ARPA delegation", BCP 20, RFC 2317, DOI 10.17487/ | ADDR.ARPA delegation", BCP 20, RFC 2317, | |||
| RFC2317, March 1998, | DOI 10.17487/RFC2317, March 1998, | |||
| <https://www.rfc-editor.org/info/rfc2317>. | <https://www.rfc-editor.org/info/rfc2317>. | |||
| [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, DOI 10.17487/ | [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, | |||
| RFC2818, May 2000, | DOI 10.17487/RFC2818, May 2000, | |||
| <https://www.rfc-editor.org/info/rfc2818>. | <https://www.rfc-editor.org/info/rfc2818>. | |||
| [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "DNS Security Introduction and Requirements", | Rose, "DNS Security Introduction and Requirements", | |||
| RFC 4033, DOI 10.17487/RFC4033, March 2005, | RFC 4033, DOI 10.17487/RFC4033, March 2005, | |||
| <https://www.rfc-editor.org/info/rfc4033>. | <https://www.rfc-editor.org/info/rfc4033>. | |||
| [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing | [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing | |||
| Architecture", RFC 4291, DOI 10.17487/RFC4291, | Architecture", RFC 4291, DOI 10.17487/RFC4291, February | |||
| February 2006, <https://www.rfc-editor.org/info/rfc4291>. | 2006, <https://www.rfc-editor.org/info/rfc4291>. | |||
| [RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | [RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | |||
| (CIDR): The Internet Address Assignment and Aggregation | (CIDR): The Internet Address Assignment and Aggregation | |||
| Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, | Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, August | |||
| August 2006, <https://www.rfc-editor.org/info/rfc4632>. | 2006, <https://www.rfc-editor.org/info/rfc4632>. | |||
| [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | |||
| "Session Traversal Utilities for NAT (STUN)", RFC 5389, | "Session Traversal Utilities for NAT (STUN)", RFC 5389, | |||
| DOI 10.17487/RFC5389, October 2008, | DOI 10.17487/RFC5389, October 2008, | |||
| <https://www.rfc-editor.org/info/rfc5389>. | <https://www.rfc-editor.org/info/rfc5389>. | |||
| [RFC5693] Seedorf, J. and E. Burger, "Application-Layer Traffic | [RFC5693] Seedorf, J. and E. Burger, "Application-Layer Traffic | |||
| Optimization (ALTO) Problem Statement", RFC 5693, | Optimization (ALTO) Problem Statement", RFC 5693, | |||
| DOI 10.17487/RFC5693, October 2009, | DOI 10.17487/RFC5693, October 2009, | |||
| <https://www.rfc-editor.org/info/rfc5693>. | <https://www.rfc-editor.org/info/rfc5693>. | |||
| skipping to change at page 26, line 25 ¶ | skipping to change at line 1087 ¶ | |||
| Threat Model and Problem Statement", RFC 7624, | Threat Model and Problem Statement", RFC 7624, | |||
| DOI 10.17487/RFC7624, August 2015, | DOI 10.17487/RFC7624, August 2015, | |||
| <https://www.rfc-editor.org/info/rfc7624>. | <https://www.rfc-editor.org/info/rfc7624>. | |||
| [RFC7626] Bortzmeyer, S., "DNS Privacy Considerations", RFC 7626, | [RFC7626] Bortzmeyer, S., "DNS Privacy Considerations", RFC 7626, | |||
| DOI 10.17487/RFC7626, August 2015, | DOI 10.17487/RFC7626, August 2015, | |||
| <https://www.rfc-editor.org/info/rfc7626>. | <https://www.rfc-editor.org/info/rfc7626>. | |||
| [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | |||
| and P. Hoffman, "Specification for DNS over Transport | and P. Hoffman, "Specification for DNS over Transport | |||
| Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, | Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | |||
| May 2016, <https://www.rfc-editor.org/info/rfc7858>. | 2016, <https://www.rfc-editor.org/info/rfc7858>. | |||
| [RFC7971] Stiemerling, M., Kiesel, S., Scharf, M., Seidel, H., and | [RFC7971] Stiemerling, M., Kiesel, S., Scharf, M., Seidel, H., and | |||
| S. Previdi, "Application-Layer Traffic Optimization (ALTO) | S. Previdi, "Application-Layer Traffic Optimization (ALTO) | |||
| Deployment Considerations", RFC 7971, DOI 10.17487/ | Deployment Considerations", RFC 7971, | |||
| RFC7971, October 2016, | DOI 10.17487/RFC7971, October 2016, | |||
| <https://www.rfc-editor.org/info/rfc7971>. | <https://www.rfc-editor.org/info/rfc7971>. | |||
| [RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | [RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | |||
| (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | |||
| <https://www.rfc-editor.org/info/rfc8484>. | <https://www.rfc-editor.org/info/rfc8484>. | |||
| Appendix A. Solution Approaches for Partitioned ALTO Knowledge | Appendix A. Solution Approaches for Partitioned ALTO Knowledge | |||
| The ALTO base protocol document [RFC7285] specifies the communication | The ALTO base protocol document [RFC7285] specifies the communication | |||
| between an ALTO client and a single ALTO server. It is implicitly | between an ALTO client and a single ALTO server. It is implicitly | |||
| skipping to change at page 27, line 23 ¶ | skipping to change at line 1118 ¶ | |||
| control of different administrative entities (e.g., different ISPs) | control of different administrative entities (e.g., different ISPs) | |||
| or that the overall ALTO information is partitioned and stored on | or that the overall ALTO information is partitioned and stored on | |||
| several ALTO servers. | several ALTO servers. | |||
| A.1. Classification of Solution Approaches | A.1. Classification of Solution Approaches | |||
| Various protocol extensions and other solutions have been proposed to | Various protocol extensions and other solutions have been proposed to | |||
| deal with multiple information sources and partitioned knowledge. | deal with multiple information sources and partitioned knowledge. | |||
| They can be classified as follows: | They can be classified as follows: | |||
| 1 Ensure that all ALTO servers have the same knowledge | 1. Ensure that all ALTO servers have the same knowledge. | |||
| 1.1 Ensure data replication and synchronization within the | 1.1 Ensure data replication and synchronization within the | |||
| provisioning protocol (cf. RFC 5693, Fig 1 [RFC5693]). | provisioning protocol (cf. [RFC5693], Figure 1). | |||
| 1.2 Use an Inter-ALTO-server data replication protocol. Possibly, | 1.2 Use an inter-ALTO-server data replication protocol. | |||
| the ALTO protocol itself - maybe with some extensions - could be | Possibly, the ALTO protocol itself -- maybe with some | |||
| used for that purpose; however, this has not been studied in | extensions -- could be used for that purpose; however, this | |||
| detail so far. | has not been studied in detail so far. | |||
| 2 Accept that different ALTO servers (possibly operated by | 2. Accept that different ALTO servers (possibly operated by | |||
| different organizations, e.g., ISPs) do not have the same | different organizations, e.g., ISPs) do not have the same | |||
| knowledge | knowledge. | |||
| 2.1 Allow ALTO clients to send arbitrary queries to any ALTO server | 2.1 Allow ALTO clients to send arbitrary queries to any ALTO | |||
| (e.g. the one discovered using [RFC7286]). If this server | server (e.g., the one discovered using [RFC7286]). If this | |||
| cannot answer the query itself, it will fetch the data on behalf | server cannot answer the query itself, it will fetch the | |||
| of the client, using the ALTO protocol or a to-be-defined inter- | data on behalf of the client, using the ALTO protocol or a | |||
| ALTO-server request forwarding protocol. | to-be-defined inter-ALTO-server request forwarding protocol. | |||
| 2.2 Allow ALTO clients to send arbitrary queries to any ALTO server | 2.2 Allow ALTO clients to send arbitrary queries to any ALTO | |||
| (e.g. the one discovered using [RFC7286]). If this server | server (e.g., the one discovered using [RFC7286]). If this | |||
| cannot answer the query itself, it will redirect the client to | server cannot answer the query itself, it will redirect the | |||
| the "right" ALTO server that has the desired information, using | client to the "right" ALTO server that has the desired | |||
| a small to-be-defined extension of the ALTO protocol. | information, using a small to-be-defined extension of the | |||
| ALTO protocol. | ||||
| 2.3 ALTO clients need to use some kind of "search engine" that | 2.3 ALTO clients need to use some kind of "search engine" that | |||
| indexes ALTO servers and redirects and/or gives cached results. | indexes ALTO servers and redirects and/or gives cached | |||
| results. | ||||
| 2.4 ALTO clients need to use a new discovery mechanism to discover | 2.4 ALTO clients need to use a new discovery mechanism to | |||
| the ALTO server that has the desired information and contact it | discover the ALTO server that has the desired information | |||
| directly. | and contact it directly. | |||
| A.2. Discussion of Solution Approaches | A.2. Discussion of Solution Approaches | |||
| The provisioning or initialization protocol for ALTO servers (cf. RFC | The provisioning or initialization protocol for ALTO servers | |||
| 5693, Fig 1 [RFC5693]) is currently not standardized. It was a | (cf. [RFC5693], Figure 1) is currently not standardized. It was a | |||
| conscious decision not to include this in the scope of the IETF ALTO | conscious decision not to include this in the scope of the IETF ALTO | |||
| working group. The reason is that there are many different kinds of | working group. The reason is that there are many different kinds of | |||
| information sources. This implementation specific protocol will | information sources. This implementation-specific protocol will | |||
| adapt them to the ALTO server, which offers a standardized protocol | adapt them to the ALTO server, which offers a standardized protocol | |||
| to the ALTO clients. However, adding the task of synchronization | to the ALTO clients. However, adding the task of synchronization | |||
| between ALTO servers to this protocol (i.e., approach 1.1) would | between ALTO servers to this protocol (i.e., Approach 1.1) would | |||
| overload this protocol with a second functionality that requires | overload this protocol with a second functionality that requires | |||
| standardization for seamless multi-domain operation. | standardization for seamless multidomain operation. | |||
| For the 1.? solution approaches, in addition to general technical | For Approaches 1.1 and 1.2, in addition to general technical | |||
| feasibility and issues like overhead and caching efficiency, another | feasibility and issues like overhead and caching efficiency, another | |||
| aspect to consider is legal liability. Operator "A" might prefer not | aspect to consider is legal liability. Operator "A" might prefer not | |||
| to publish information about nodes in or paths between the networks | to publish information about nodes in, or paths between, the networks | |||
| of operators "B" and "C" through A's ALTO server, even if A knew that | of operators "B" and "C" through A's ALTO server, even if A knew that | |||
| information. This is not only a question of map size and processing | information. This is not only a question of map size and processing | |||
| load on A's ALTO server. Operator A could also face legal liability | load on A's ALTO server. Operator A could also face legal liability | |||
| issues if that information had a bad impact on the traffic | issues if that information had a bad impact on the traffic | |||
| engineering between B's and C's networks, or on their business | engineering between B's and C's networks or on their business models. | |||
| models. | ||||
| No specific actions to build a "search engine" based solution | No specific actions to build a solution based on a "search engine" | |||
| (approach 2.3) are currently known and it is unclear what could be | (Approach 2.3) are currently known, and it is unclear what could be | |||
| the incentives to operate such an engine. Therefore, this approach | the incentives to operate such an engine. Therefore, this approach | |||
| is not considered in the remainder of this document. | is not considered in the remainder of this document. | |||
| A.3. The Need for Cross-Domain ALTO Server Discovery | A.3. The Need for Cross-Domain ALTO Server Discovery | |||
| Approaches 1.1, 1.2, 2.1, and 2.2 do not only require the | Approaches 1.1, 1.2, 2.1, and 2.2 require more than just the | |||
| specification of an ALTO protocol extension or a new protocol that | specification of an ALTO protocol extension or a new protocol that | |||
| runs between ALTO servers. A large-scale, maybe Internet-wide, | runs between ALTO servers. A large-scale, maybe Internet-wide, | |||
| multi-domain deployment would also need mechanisms by which an ALTO | multidomain deployment would also need mechanisms by which an ALTO | |||
| server could discover other ALTO servers, learn which information is | server could discover other ALTO servers, learn which information is | |||
| available where, and ideally also who is authorized to publish | available where, and ideally also who is authorized to publish | |||
| information related to a given part of the network. Approach 2.4 | information related to a given part of the network. Approach 2.4 | |||
| needs the same mechanisms, except that they are used on the client- | needs the same mechanisms, except that they are used on the client | |||
| side instead of the server-side. | side instead of the server side. | |||
| It is sometimes questioned whether there is a need for a solution | It is sometimes questioned whether there is a need for a solution | |||
| that allows clients to ask arbitrary queries, even if the ALTO | that allows clients to ask arbitrary queries, even if the ALTO | |||
| information is partitioned and stored on many ALTO servers. The main | information is partitioned and stored on many ALTO servers. The main | |||
| argument is, that clients are supposed to optimize the traffic from | argument is that clients are supposed to optimize the traffic from | |||
| and to themselves, and that the information needed for that is most | and to themselves, and that the information needed for that is most | |||
| likely stored on a "nearby" ALTO server, i.e., the one that can be | likely stored on a "nearby" ALTO server -- i.e., the one that can be | |||
| discovered using [RFC7286]. However, there are scenarios where the | discovered using [RFC7286]. However, there are scenarios where the | |||
| ALTO client is not co-located with an endpoint of the to-be-optimized | ALTO client is not co-located with an endpoint of the to-be-optimized | |||
| data transmission. Instead, the ALTO client is located at a third | data transmission. Instead, the ALTO client is located at a third | |||
| party, which takes part in the application signaling, e.g., a so- | party that takes part in the application signaling -- e.g., a so- | |||
| called "tracker" in a peer-to-peer application. One such scenario, | called "tracker" in a peer-to-peer application. One such scenario, | |||
| where it is advantageous to place the ALTO client not at an endpoint | where it is advantageous to place the ALTO client not at an endpoint | |||
| of the user data transmission, is analyzed in Appendix C. | of the user data transmission, is analyzed in Appendix C. | |||
| A.4. Our Solution Approach | A.4. Our Solution Approach | |||
| Several solution approaches for cross-domain ALTO server discovery | Several solution approaches for cross-domain ALTO server discovery | |||
| have been evaluated, using the criteria documented in Appendix B. | have been evaluated, using the criteria documented in Appendix B. | |||
| One of them was to use the ALTO protocol itself for the exchange of | One of them was to use the ALTO protocol itself for the exchange of | |||
| information availability [I-D.kiesel-alto-alto4alto]. However, the | information availability [ALTO4ALTO]. However, the drawback of that | |||
| drawback of that approach is that a new registration administration | approach is that a new registration administration authority would | |||
| authority would have to be established. | have to be established. | |||
| This document specifies a DNS-based procedure for cross-domain ALTO | This document specifies a DNS-based procedure for cross-domain ALTO | |||
| server discovery, which was inspired by "Location Information Server | server discovery, which was inspired by "Location Information Server | |||
| (LIS) Discovery Using IP Addresses and Reverse DNS" [RFC7216]. The | (LIS) Discovery Using IP Addresses and Reverse DNS" [RFC7216]. The | |||
| primary goal is that this procedure can be used on the client-side | primary goal is that this procedure can be used on the client side | |||
| (i.e., approach 2.4), but together with new protocols or protocol | (i.e., Approach 2.4), but together with new protocols or protocol | |||
| extensions it could also be used to implement the other solution | extensions, it could also be used to implement the other solution | |||
| approaches itemized above. | approaches itemized above. | |||
| A.5. Relation to the ALTO Requirements | A.5. Relation to the ALTO Requirements | |||
| During the design phase of the overall ALTO solution, two different | During the design phase of the overall ALTO solution, two different | |||
| server discovery scenarios have been identified and documented in the | server discovery scenarios were identified and documented in the ALTO | |||
| ALTO requirements document [RFC6708]. The first scenario, documented | requirements document [RFC6708]. The first scenario, documented in | |||
| in Req. AR-32, can be supported using the discovery mechanisms | Req. AR-32, can be supported using the discovery mechanisms specified | |||
| specified in [RFC7286]. An alternative approach, based on IP anycast | in [RFC7286]. An alternative approach, based on IP anycast | |||
| [I-D.kiesel-alto-ip-based-srv-disc], has also been studied. This | [ALTO-ANYCAST], has also been studied. This document, in contrast, | |||
| document, in contrast, tries to address Req. AR-33. | tries to address Req. AR-33. | |||
| Appendix B. Requirements for Cross-Domain Server Discovery | Appendix B. Requirements for Cross-Domain Server Discovery | |||
| This appendix itemizes requirements that have been collected before | This appendix itemizes requirements that were collected before the | |||
| the design phase and that are reflected by the design of the ALTO | design phase and are reflected in the design of the ALTO Cross-Domain | |||
| Cross-Domain Server Discovery Procedure. | Server Discovery Procedure. | |||
| B.1. Discovery Client Application Programming Interface | B.1. Discovery Client Application Programming Interface | |||
| The discovery client will be called through some kind of application | The discovery client will be called through some kind of application | |||
| programming interface (API) and the parameters will be an IP address | programming interface (API), and the parameters will be an IP address | |||
| and, for purposes of extensibility, a service identifier such as | and, for purposes of extensibility, a service identifier such as | |||
| "ALTO". It will return one or more URI(s) that offers the requested | "ALTO". The client will return one or more URIs that offer the | |||
| service ("ALTO") for the given IP address. | requested service ("ALTO") for the given IP address. | |||
| In other words, the client would be used to retrieve a mapping: | In other words, the client would be used to retrieve a mapping: | |||
| (IP address, "ALTO") -> IRD-URI(s) | (IP address, "ALTO") -> IRD-URI(s) | |||
| where IRD-URI(s) is one or more URI(s) of Information Resource | where IRD-URI(s) is one or more URIs of Information Resource | |||
| Directories (IRD, see Section 9 of [RFC7285]) of ALTO server(s) that | Directories (IRDs, see Section 9 of [RFC7285]) of ALTO servers that | |||
| can give reasonable guidance to a resource consumer with the | can give reasonable guidance to a resource consumer with the | |||
| indicated IP address. | indicated IP address. | |||
| B.2. Data Storage and Authority Requirements | B.2. Data Storage and Authority Requirements | |||
| The information for mapping IP addresses and service parameters to | The information for mapping IP addresses and service parameters to | |||
| URIs should be stored in a - preferably distributed - database. It | URIs should be stored in a -- preferably distributed -- database. It | |||
| must be possible to delegate administration of parts of this | must be possible to delegate administration of parts of this | |||
| database. Usually, the mapping from a specific IP address to an URI | database. Usually, the mapping from a specific IP address to a URI | |||
| is defined by the authority that has administrative control over this | is defined by the authority that has administrative control over this | |||
| IP address, e.g., the ISP in residential access networks or the IT | IP address -- e.g., the ISP in residential access networks or the IT | |||
| department in enterprise, university, or similar networks. | department in enterprise, university, or similar networks. | |||
| B.3. Cross-Domain Operations Requirements | B.3. Cross-Domain Operations Requirements | |||
| The cross-domain server discovery mechanism should be designed in | The cross-domain server discovery mechanism should be designed in | |||
| such a way that it works across the public Internet and also in other | such a way that it works across the public Internet and also in other | |||
| IP-based networks. This in turn means that such mechanisms cannot | IP-based networks. This, in turn, means that such mechanisms cannot | |||
| rely on protocols that are not widely deployed across the Internet or | rely on protocols that are not widely deployed across the Internet or | |||
| protocols that require special handling within participating | protocols that require special handling within participating | |||
| networks. An example is multicast, which is not generally available | networks. An example is multicast, which is not generally available | |||
| across the Internet. | across the Internet. | |||
| The ALTO Cross-Domain Server Discovery protocol must support gradual | The ALTO Cross-Domain Server Discovery Protocol must support gradual | |||
| deployment without a network-wide flag day. If the mechanism needs | deployment without a network-wide flag day. If the mechanism needs | |||
| some kind of well-known "rendezvous point", re-using an existing | some kind of well-known "rendezvous point", reusing an existing | |||
| infrastructure (such as the DNS root servers or the WHOIS database) | infrastructure (such as the DNS root servers or the WHOIS database) | |||
| should be preferred over establishing a new one. | should be preferred over establishing a new one. | |||
| B.4. Protocol Requirements | B.4. Protocol Requirements | |||
| The protocol must be able to operate across middleboxes, especially | The protocol must be able to operate across middleboxes, especially | |||
| across NATs and firewalls. | NATs and firewalls. | |||
| The protocol shall not require any pre-knowledge from the client | The protocol shall not require any preknowledge from the client other | |||
| other than any information that is known to a regular IP host on the | than any information that is known to a regular IP host on the | |||
| Internet. | Internet. | |||
| B.5. Further Requirements | B.5. Further Requirements | |||
| The ALTO cross domain server discovery cannot assume that the server | The ALTO cross-domain server discovery cannot assume that the server- | |||
| discovery client and the server discovery responding entity are under | discovery client and the server-discovery responding entity are under | |||
| the same administrative control. | the same administrative control. | |||
| Appendix C. ALTO and Tracker-based Peer-to-Peer Applications | Appendix C. ALTO and Tracker-Based Peer-to-Peer Applications | |||
| This appendix provides a complete example of using ALTO and the ALTO | This appendix provides a complete example of using ALTO and the ALTO | |||
| Cross-Domain Server Discovery Procedure in one specific application | Cross-Domain Server Discovery Procedure in one specific application | |||
| scenario, namely a tracker-based peer-to-peer application. First, in | scenario -- namely, a tracker-based peer-to-peer application. First, | |||
| subsection C.1, we introduce a generic model of such an application | in Appendix C.1, we introduce a generic model of such an application | |||
| and show why ALTO optimization is desirable. Then, in C.2, we | and show why ALTO optimization is desirable. Then, in Appendix C.2, | |||
| introduce two architectural options for integrating ALTO into the | we introduce two architectural options for integrating ALTO into the | |||
| tracker-based peer-to-peer application - one option is based on the | tracker-based peer-to-peer application; one option is based on the | |||
| "regular" ALTO server discovery procedure [RFC7286], one relies on | "regular" ALTO server discovery procedure [RFC7286], and one relies | |||
| the ALTO Cross-Domain Server Discovery Procedure. In C.3, a simple | on the ALTO Cross-Domain Server Discovery Procedure. In | |||
| mathematical model is used to show that the latter approach is | Appendix C.3, a simple mathematical model is used to show that the | |||
| expected to yield significantly better optimization results. The | latter approach is expected to yield significantly better | |||
| appendix concludes with subsection C.4, which details an exemplary | optimization results. The appendix concludes with Appendix C.4, | |||
| complete walk-through of the ALTO Cross-Domain Server Discovery | which details an exemplary complete walk-through of the ALTO Cross- | |||
| Procedure. | Domain Server Discovery Procedure. | |||
| C.1. A generic Tracker-based Peer-to-Peer Application | C.1. A Generic Tracker-Based Peer-to-Peer Application | |||
| The optimization of peer-to-peer (P2P) applications such as | The optimization of peer-to-peer (P2P) applications such as | |||
| BitTorrent was one of the first use cases that lead to the inception | BitTorrent was one of the first use cases that lead to the inception | |||
| of the IETF ALTO working group. Further use cases have been | of the IETF ALTO working group. Further use cases have been | |||
| identified as well, yet we will use this scenario to illustrate the | identified as well, yet we will use this scenario to illustrate the | |||
| operation and usefulness of the ALTO Cross-Domain Server Discovery | operation and usefulness of the ALTO Cross-Domain Server Discovery | |||
| Procedure. | Procedure. | |||
| For the remainder of this chapter we consider a generic, tracker- | For the remainder of this chapter, we consider a generic, tracker- | |||
| based peer-to-peer file sharing application. The goal is the | based peer-to-peer file-sharing application. The goal is the | |||
| dissemination of a large file, without using one large server with a | dissemination of a large file, without using one large server with a | |||
| correspondingly high upload bandwidth. The file is split into | correspondingly high upload bandwidth. The file is split into | |||
| chunks. So-called "peers" assume the role of both a client and a | chunks. So-called "peers" assume the role of both a client and a | |||
| server. That is, they may request chunks from other peers and they | server. That is, they may request chunks from other peers, and they | |||
| may serve the chunks they already possess to other peers at the same | may serve the chunks they already possess to other peers at the same | |||
| time, thereby contributing their upload bandwidth. Peers that want | time, thereby contributing their upload bandwidth. Peers that want | |||
| to share the same file participate in a "swarm". They use the peer- | to share the same file participate in a "swarm". They use the peer- | |||
| to-peer protocol to inform each other about the availability of | to-peer protocol to inform each other about the availability of | |||
| chunks and to request and transfer chunks from one peer to another. | chunks and request and transfer chunks from one peer to another. A | |||
| A swarm may consist of a very large number of peers. Consequently, | swarm may consist of a very large number of peers. Consequently, | |||
| peers usually maintain logical connections only to a subset of all | peers usually maintain logical connections to only a subset of all | |||
| peers in the swarm. If a new peer wants to join a swarm, it first | peers in the swarm. If a new peer wants to join a swarm, it first | |||
| contacts a well-known server, the "tracker", which provides a list of | contacts a well-known server, the "tracker", which provides a list of | |||
| IP addresses of peers in the swarm. | IP addresses of peers in the swarm. | |||
| A swarm is an overlay network on top of the IP network. Algorithms | A swarm is an overlay network on top of the IP network. Algorithms | |||
| that determine the overlay topology and the traffic distribution in | that determine the overlay topology and the traffic distribution in | |||
| the overlay may consider information about the underlying IP network, | the overlay may consider information about the underlying IP network, | |||
| such as topological distance, link bandwidth, (monetary) costs for | such as topological distance, link bandwidth, (monetary) costs for | |||
| sending traffic from one host to another, etc. ALTO is a protocol | sending traffic from one host to another, etc. ALTO is a protocol | |||
| for retrieving such information. The goal of such "topology aware" | for retrieving such information. The goal of such "topology-aware" | |||
| decisions is to improve performance or Quality of Experience in the | decisions is to improve performance or Quality of Experience in the | |||
| application while reducing the utilization of the underlying network | application while reducing the utilization of the underlying network | |||
| infrastructure. | infrastructure. | |||
| C.2. Architectural Options for Placing the ALTO Client | C.2. Architectural Options for Placing the ALTO Client | |||
| The ALTO protocol specification [RFC7285] details how an ALTO client | The ALTO protocol specification [RFC7285] details how an ALTO client | |||
| can query an ALTO server for guiding information and receive the | can query an ALTO server for guiding information and receive the | |||
| corresponding replies. However, in the considered scenario of a | corresponding replies. However, in the considered scenario of a | |||
| tracker-based P2P application, there are two fundamentally different | tracker-based P2P application, there are two fundamentally different | |||
| possibilities where to place the ALTO client: | possible locations for where to place the ALTO client: | |||
| 1. ALTO client in the resource consumer ("peer") | 1. ALTO client in the resource consumer ("peer") | |||
| 2. ALTO client in the resource directory ("tracker") | 2. ALTO client in the resource directory ("tracker") | |||
| In the following, both scenarios are compared in order to explain the | In the following, both scenarios are compared in order to explain the | |||
| need for ALTO queries on behalf of remote resource consumers. | need for ALTO queries on behalf of remote resource consumers. | |||
| In the first scenario (see Figure 2), the resource consumer queries | In the first scenario (see Figure 2), the resource consumer queries | |||
| the resource directory for the desired resource (F1). The resource | the resource directory for the desired resource (F1). The resource | |||
| directory returns a list of potential resource providers without | directory returns a list of potential resource providers without | |||
| considering ALTO (F2). It is then the duty of the resource consumer | considering ALTO (F2). It is then the duty of the resource consumer | |||
| to invoke ALTO (F3/F4), in order to solicit guidance regarding this | to invoke ALTO (F3/F4), in order to solicit guidance regarding this | |||
| list. | list. | |||
| In the second scenario (see Figure 4), the resource directory has an | In the second scenario (see Figure 4), the resource directory has an | |||
| embedded ALTO client. After receiving a query for a given resource | embedded ALTO client. After receiving a query for a given resource | |||
| (F1) the resource directory invokes this ALTO client to evaluate all | (F1), the resource directory invokes this ALTO client to evaluate all | |||
| resource providers it knows (F2/F3). Then it returns a, possibly | resource providers it knows (F2/F3). Then it returns a list, | |||
| shortened, list containing the "best" resource providers to the | possibly shortened, containing the "best" resource providers to the | |||
| resource consumer (F4). | resource consumer (F4). | |||
| ............................. ............................. | ............................. ............................. | |||
| : Tracker : : Peer : | : Tracker : : Peer : | |||
| : ______ : : : | : ______ : : : | |||
| : +-______-+ : : k good : | : +-______-+ : : k good : | |||
| : | | +--------+ : P2P App. : +--------+ peers +------+ : | : | | +--------+ : P2P App. : +--------+ peers +------+ : | |||
| : | N | | random | : Protocol : | ALTO- |------>| data | : | : | N | | random | : Protocol : | ALTO- |------>| data | : | |||
| : | known |====>| pre- |*************>| biased | | ex- | : | : | known |====>| pre- |*************>| biased | | ex- | : | |||
| : | peers, | | selec- | : transmit : | peer |------>| cha- | : | : | peers, | | selec- | : transmit : | peer |------>| cha- | : | |||
| skipping to change at page 34, line 25 ¶ | skipping to change at line 1400 ¶ | |||
| :...........................: :.....^.....................: | :...........................: :.....^.....................: | |||
| | | | | |||
| | ALTO protocol | | ALTO protocol | |||
| __|___ | __|___ | |||
| +-______-+ | +-______-+ | |||
| | | | | | | |||
| | ALTO | | | ALTO | | |||
| | server | | | server | | |||
| +-______-+ | +-______-+ | |||
| Figure 1: Tracker-based P2P Application with random peer preselection | Figure 1: Tracker-Based P2P Application with Random Peer Preselection | |||
| Peer w. ALTO cli. Tracker ALTO Server | Peer w. ALTO cli. Tracker ALTO Server | |||
| --------+-------- --------+-------- --------+-------- | --------+-------- --------+-------- --------+-------- | |||
| | F1 Tracker query | | | | F1 Tracker query | | | |||
| |======================>| | | |======================>| | | |||
| | F2 Tracker reply | | | | F2 Tracker reply | | | |||
| |<======================| | | |<======================| | | |||
| | F3 ALTO query | | | | F3 ALTO query | | | |||
| |---------------------------------------------->| | |---------------------------------------------->| | |||
| | F4 ALTO reply | | | | F4 ALTO reply | | | |||
| |<----------------------------------------------| | |<----------------------------------------------| | |||
| | | | | | | | | |||
| ==== Application protocol (i.e., tracker-based P2P app protocol) | ==== Application protocol (i.e., tracker-based P2P app protocol) | |||
| ---- ALTO protocol | ---- ALTO protocol | |||
| Figure 2: Basic message sequence chart for resource consumer- | Figure 2: Basic Message Sequence Chart for Resource Consumer- | |||
| initiated ALTO query | Initiated ALTO Query | |||
| ............................. ............................. | ............................. ............................. | |||
| : Tracker : : Peer : | : Tracker : : Peer : | |||
| : ______ : : : | : ______ : : : | |||
| : +-______-+ : : : | : +-______-+ : : : | |||
| : | | +--------+ : P2P App. : k good peers & +------+ : | : | | +--------+ : P2P App. : k good peers & +------+ : | |||
| : | N | | ALTO- | : Protocol : n-k bad peers | data | : | : | N | | ALTO- | : Protocol : n-k bad peers | data | : | |||
| : | known |====>| biased |******************************>| ex- | : | : | known |====>| biased |******************************>| ex- | : | |||
| : | peers, | | peer | : transmit : | cha- | : | : | peers, | | peer | : transmit : | cha- | : | |||
| : | M good | | select | : n peer : | nge | : | : | M good | | select | : n peer : | nge | : | |||
| skipping to change at page 35, line 25 ¶ | skipping to change at line 1440 ¶ | |||
| :.....................^.....: :...........................: | :.....................^.....: :...........................: | |||
| | | | | |||
| | ALTO protocol | | ALTO protocol | |||
| __|___ | __|___ | |||
| +-______-+ | +-______-+ | |||
| | | | | | | |||
| | ALTO | | | ALTO | | |||
| | server | | | server | | |||
| +-______-+ | +-______-+ | |||
| Figure 3: Tracker-based P2P Application with ALTO client in tracker | Figure 3: Tracker-Based P2P Application with ALTO Client in Tracker | |||
| Peer Tracker w. ALTO cli. ALTO Server | Peer Tracker w. ALTO cli. ALTO Server | |||
| --------+-------- --------+-------- --------+-------- | --------+-------- --------+-------- --------+-------- | |||
| | F1 Tracker query | | | | F1 Tracker query | | | |||
| |======================>| | | |======================>| | | |||
| | | F2 ALTO query | | | | F2 ALTO query | | |||
| | |---------------------->| | | |---------------------->| | |||
| | | F3 ALTO reply | | | | F3 ALTO reply | | |||
| | |<----------------------| | | |<----------------------| | |||
| | F4 Tracker reply | | | | F4 Tracker reply | | | |||
| |<======================| | | |<======================| | | |||
| | | | | | | | | |||
| ==== Application protocol (i.e., tracker-based P2P app protocol) | ==== Application protocol (i.e., tracker-based P2P app protocol) | |||
| ---- ALTO protocol | ---- ALTO protocol | |||
| Figure 4: Basic message sequence chart for ALTO query on behalf of | Figure 4: Basic Message Sequence Chart for ALTO Query on Behalf | |||
| remote resource consumer | of Remote Resource Consumer | |||
| Note: the message sequences depicted in Figure 2 and Figure 4 may | | Note: The message sequences depicted in Figures 2 and 4 may | |||
| occur both in the target-aware and the target-independent query mode | | occur both in the target-aware and the target-independent query | |||
| (c.f. [RFC6708]). In the target-independent query mode no message | | mode (cf. [RFC6708]). In the target-independent query mode, no | |||
| exchange with the ALTO server might be needed after the tracker | | message exchange with the ALTO server might be needed after the | |||
| query, because the candidate resource providers could be evaluated | | tracker query, because the candidate resource providers could | |||
| using a locally cached "map", which has been retrieved from the ALTO | | be evaluated using a locally cached "map", which has been | |||
| server some time ago. | | retrieved from the ALTO server some time ago. | |||
| C.3. Evaluation | C.3. Evaluation | |||
| The problem with the first approach is, that while the resource | The problem with the first approach is that while the resource | |||
| directory might know thousands of peers taking part in a swarm, the | directory might know thousands of peers taking part in a swarm, the | |||
| list returned to the resource consumer is usually shortened for | list returned to the resource consumer is usually shortened for | |||
| efficiency reasons. Therefore, the "best" (in the sense of ALTO) | efficiency reasons. Therefore, the "best" (in the sense of ALTO) | |||
| potential resource providers might not be contained in that list | potential resource providers might not be contained in that list | |||
| anymore, even before ALTO can consider them. | anymore, even before ALTO can consider them. | |||
| For illustration, consider a simple model of a swarm, in which all | For illustration, consider a simple model of a swarm, in which all | |||
| peers fall into one of only two categories: assume that there are | peers fall into one of only two categories: assume that there are | |||
| "good" ("good" in the sense of ALTO's better-than-random peer | only "good" (in the sense of ALTO's better-than-random peer | |||
| selection, based on an arbitrary desired rating criterion) and "bad' | selection, based on an arbitrary desired rating criterion) and "bad" | |||
| peers only. Having more different categories makes the maths more | peers. Having more different categories makes the math more complex | |||
| complex but does not change anything to the basic outcome of this | but does not change anything about the basic outcome of this | |||
| analysis. Assume that the swarm has a total number of N peers, out | analysis. Assume that the swarm has a total number of N peers, out | |||
| of which are M "good" and N-M "bad" peers, which are all known to the | of which there are M "good" and N-M "bad" peers, which are all known | |||
| tracker. A new peer wants to join the swarm and therefore asks the | to the tracker. A new peer wants to join the swarm and therefore | |||
| tracker for a list of peers. | asks the tracker for a list of peers. | |||
| If, according to the first approach, the tracker randomly picks n | If, according to the first approach, the tracker randomly picks n | |||
| peers from the N known peers, the result can be described with the | peers from the N known peers, the result can be described with the | |||
| hypergeometric distribution. The probability that the tracker reply | hypergeometric distribution. The probability that the tracker reply | |||
| contains exactly k "good" peers (and n-k "bad" peers) is: | contains exactly k "good" peers (and n-k "bad" peers) is: | |||
| / M \ / N - M \ | / M \ / N - M \ | |||
| \ k / \ n - k / | \ k / \ n - k / | |||
| P(X=k) = --------------------- | P(X=k) = --------------------- | |||
| / N \ | / N \ | |||
| \ n / | \ n / | |||
| / n \ n! | / n \ n! | |||
| with \ k / = ----------- and n! = n * (n-1) * (n-2) * .. * 1 | with \ k / = ----------- and n! = n * (n-1) * (n-2) * .. * 1 | |||
| k! (n-k)! | k! (n-k)! | |||
| The probability that the reply contains at most k "good" peers is: | The probability that the reply contains at most k "good" peers is: | |||
| P(X<=k)=P(X=0)+P(X=1)+..+P(X=k). | P(X<=k) = P(X=0) + P(X=1) + .. + P(X=k). | |||
| For example, consider a swarm with N=10,000 peers known to the | For example, consider a swarm with N=10,000 peers known to the | |||
| tracker, out of which M=100 are "good" peers. If the tracker | tracker, out of which M=100 are "good" peers. If the tracker | |||
| randomly selects n=100 peers, the formula yields for the reply: | randomly selects n=100 peers, the formula yields for the reply: | |||
| P(X=0)=36%, P(X<=4)=99%. That is, with a probability of approx. 36% | P(X=0)=36%, P(X<=4)=99%. That is, with a probability of approximately | |||
| this list does not contain a single "good" peer, and with 99% | 36%, this list does not contain a single "good" peer, and with 99% | |||
| probability there are only four or less of the "good" peers on the | probability, there are only four or fewer of the "good" peers on the | |||
| list. Processing this list with the guiding ALTO information will | list. Processing this list with the guiding ALTO information will | |||
| ensure that the few favorable peers are ranked to the top of the | ensure that the few favorable peers are ranked to the top of the | |||
| list; however, the benefit is rather limited as the number of | list; however, the benefit is rather limited as the number of | |||
| favorable peers in the list is just too small. | favorable peers in the list is just too small. | |||
| Much better traffic optimization could be achieved if the tracker | Much better traffic optimization could be achieved if the tracker | |||
| would evaluate all known peers using ALTO, and return a list of 100 | would evaluate all known peers using ALTO and return a list of 100 | |||
| peers afterwards. This list would then include a significantly | peers afterwards. This list would then include a significantly | |||
| higher fraction of "good" peers. (Note, that if the tracker returned | higher fraction of "good" peers. (Note that if the tracker returned | |||
| "good" peers only, there might be a risk that the swarm might | "good" peers only, there might be a risk that the swarm might | |||
| disconnect and split into several disjunct partitions. However, | disconnect and split into several disjunct partitions. However, | |||
| finding the right mix of ALTO-biased and random peer selection is out | finding the right mix of ALTO-biased and random peer selection is out | |||
| of the scope of this document.) | of the scope of this document.) | |||
| Therefore, from an overall optimization perspective, the second | Therefore, from an overall optimization perspective, the second | |||
| scenario with the ALTO client embedded in the resource directory is | scenario with the ALTO client embedded in the resource directory is | |||
| advantageous, because it is ensured that the addresses of the "best" | advantageous, because it is ensured that the addresses of the "best" | |||
| resource providers are actually delivered to the resource consumer. | resource providers are actually delivered to the resource consumer. | |||
| An architectural implication of this insight is that the ALTO server | An architectural implication of this insight is that the ALTO server | |||
| discovery procedures must support ALTO queries on behalf of remote | discovery procedures must support ALTO queries on behalf of remote | |||
| resource consumers. That is, as the tracker issues ALTO queries on | resource consumers. That is, as the tracker issues ALTO queries on | |||
| behalf of the peer which contacted the tracker, the tracker must be | behalf of the peer that contacted the tracker, the tracker must be | |||
| able to discover an ALTO server that can give guidance suitable for | able to discover an ALTO server that can give guidance suitable for | |||
| that respective peer. This task can be solved using the ALTO Cross- | that peer. This task can be solved using the ALTO Cross-Domain | |||
| Domain Server Discovery Procedure. | Server Discovery Procedure. | |||
| C.4. Example | C.4. Example | |||
| This section provides a complete example of the ALTO Cross-Domain | This section provides a complete example of the ALTO Cross-Domain | |||
| Server Discovery Procedure in a tracker-based peer-to-peer scenario. | Server Discovery Procedure in a tracker-based peer-to-peer scenario. | |||
| The example is based on the network topology shown in Figure 5. Five | The example is based on the network topology shown in Figure 5. Five | |||
| access networks - Networks a, b, c, x, and t - are operated by five | access networks -- Networks a, b, c, x, and t -- are operated by five | |||
| different network operators. They are interconnected by a backbone | different network operators. They are interconnected by a backbone | |||
| structure. Each network operator runs an ALTO server in their | structure. Each network operator runs an ALTO server in their | |||
| network, i.e., ALTO_SRV_A, ALTO_SRV_B, ALTO_SRV_C, ALTO_SRV_X, and | network -- i.e., ALTO_SRV_A, ALTO_SRV_B, ALTO_SRV_C, ALTO_SRV_X, and | |||
| ALTO_SRV_T, respectively. | ALTO_SRV_T, respectively. | |||
| _____ __ _____ __ _____ __ | _____ __ _____ __ _____ __ | |||
| __( )__( )_ __( )__( )_ __( )__( )_ | __( )__( )_ __( )__( )_ __( )__( )_ | |||
| ( Network a ) ( Network b ) ( Network c ) | ( Network a ) ( Network b ) ( Network c ) | |||
| ( Res. Provider A ) ( Res. Provider B ) ( Res. Provider C ) | ( Res. Provider A ) ( Res. Provider B ) ( Res. Provider C ) | |||
| (__ ALTO_SRV_A __) (__ ALTO_SRV_B __) (__ ALTO_SRV_C __) | (__ ALTO_SRV_A __) (__ ALTO_SRV_B __) (__ ALTO_SRV_C __) | |||
| (___)--(____) \ (___)--(____) / (___)--(____) | (___)--(____) \ (___)--(____) / (___)--(____) | |||
| \ / / | \ / / | |||
| ---+---------+-----------------+---- | ---+---------+-----------------+---- | |||
| ( Backbone ) | ( Backbone ) | |||
| ------------+------------------+---- | ------------+------------------+---- | |||
| _____ __/ _____ \__ | _____ __/ _____ \__ | |||
| __( )__( )_ __( )__( )_ | __( )__( )_ __( )__( )_ | |||
| ( Network x ) ( Network t ) | ( Network x ) ( Network t ) | |||
| ( Res. Consumer X ) (Resource Directory) | ( Res. Consumer X ) (Resource Directory) | |||
| (_ ALTO_SRV_X __) (_ ALTO_SRV_T __) | (_ ALTO_SRV_X __) (_ ALTO_SRV_T __) | |||
| (___)--(____) (___)--(____) | (___)--(____) (___)--(____) | |||
| Figure 5: Example network topology | Figure 5: Example Network Topology | |||
| A new peer of a peer-to-peer application wants to join a specific | A new peer of a peer-to-peer application wants to join a specific | |||
| swarm (overlay network), in order to access a specific resource. | swarm (overlay network), in order to access a specific resource. | |||
| This new peer will be called "Resource Consumer X" in accordance to | This new peer will be called "Resource Consumer X", in accordance | |||
| the terminology of [RFC6708] and it is located in Network x. It | with the terminology of [RFC6708], and is located in Network x. It | |||
| contacts the tracker ("Resource Directory"), which is located in | contacts the tracker ("Resource Directory"), which is located in | |||
| Network t. The mechanism by which the new peer discovers the tracker | Network t. The mechanism by which the new peer discovers the tracker | |||
| is out of the scope of this document. The tracker maintains a list | is out of the scope of this document. The tracker maintains a list | |||
| of peers that take part in the overlay network, and hence it can | of peers that take part in the overlay network, and hence it can | |||
| determine that Resource Providers A, B, and C are candidate peers for | determine that Resource Providers A, B, and C are candidate peers for | |||
| Resource Consumer X. | Resource Consumer X. | |||
| As shown in the previous section, a tracker-side ALTO optimization | As shown in the previous section, a tracker-side ALTO optimization | |||
| (c.f. Figure 3 and Figure 4) is more efficient than a client-side | (cf. Figures 3 and 4) is more efficient than a client-side | |||
| optimization. Consequently, the tracker wants to use the ALTO | optimization. Consequently, the tracker wants to use the ALTO | |||
| Endpoint Cost Service (ECS) to learn the routing costs between X and | Endpoint Cost Service (ECS) to learn the routing costs between X and | |||
| A, X and B, as well as X and C, in order to sort A, B, and C by their | A, X and B, and X and C, in order to sort A, B, and C by their | |||
| respective routing costs to X. | respective routing costs to X. | |||
| In theory, there are many options how the ALTO Cross-Domain Server | In theory, there are many options for how the ALTO Cross-Domain | |||
| Discovery Procedure could be used. For example, the tracker could do | Server Discovery Procedure could be used. For example, the tracker | |||
| the following steps: | could do the following steps: | |||
| IRD_URIS_A = XDOMDISC(A,"ALTO:https") | IRD_URIS_A = XDOMDISC(A,"ALTO:https") | |||
| COST_X_A = query the ECS(X,A,routingcost) found in IRD_URIS_A | COST_X_A = query the ECS(X,A,routingcost) found in IRD_URIS_A | |||
| IRD_URIS_B = XDOMDISC(B,"ALTO:https") | IRD_URIS_B = XDOMDISC(B,"ALTO:https") | |||
| COST_X_B = query the ECS(X,B,routingcost) found in IRD_URIS_B | COST_X_B = query the ECS(X,B,routingcost) found in IRD_URIS_B | |||
| IRD_URIS_C = XDOMDISC(C,"ALTO:https") | IRD_URIS_C = XDOMDISC(C,"ALTO:https") | |||
| COST_X_C = query the ECS(X,C,routingcost) found in IRD_URIS_C | COST_X_C = query the ECS(X,C,routingcost) found in IRD_URIS_C | |||
| Maybe, the ALTO Cross-Domain Server Discovery Procedure queries would | In this scenario, the ALTO Cross-Domain Server Discovery Procedure | |||
| yield in this scenario: IRD_URIS_A = ALTO_SRV_A, IRD_URIS_B = | queries might yield: IRD_URIS_A = ALTO_SRV_A, IRD_URIS_B = | |||
| ALTO_SRV_B, and IRD_URIS_C = ALTO_SRV_C. That is, each ECS query | ALTO_SRV_B, and IRD_URIS_C = ALTO_SRV_C. That is, each ECS query | |||
| would be sent to a different ALTO server. The problem with this | would be sent to a different ALTO server. The problem with this | |||
| approach is that we are not neccessarily able to compare COST_X_A, | approach is that we are not necessarily able to compare COST_X_A, | |||
| COST_X_B, and COST_X_C with each other. The specification of the | COST_X_B, and COST_X_C with each other. The specification of the | |||
| routingcost metric mandates that "A lower value indicates a higher | routingcost metric mandates that "A lower value indicates a higher | |||
| preference", but "an ISP may internally compute routing cost using | preference", but "an ISP may internally compute routing cost using | |||
| any method that it chooses" (see section 6.1.1.1. of [RFC7285]). | any method that it chooses" (see Section 6.1.1.1 of [RFC7285]). | |||
| Thus, COST_X_A could be 10 (milliseconds round-trip time), while | Thus, COST_X_A could be 10 (milliseconds round-trip time), while | |||
| COST_X_B could be 200 (kilometers great circle distance between the | COST_X_B could be 200 (kilometers great circle distance between the | |||
| approximate geographic locations of the hosts) and COST_X_C could be | approximate geographic locations of the hosts) and COST_X_C could be | |||
| 3 (router hops, corresponding to a decrease of the TTL field in the | 3 (router hops, corresponding to a decrease of the TTL field in the | |||
| IP header). Each of these metrics fulfills the "lower value is more | IP header). Each of these metrics fulfills the "lower value is more | |||
| preferable" requirement on its own, but obviously, they cannot be | preferable" requirement on its own, but they obviously cannot be | |||
| compared with each other. Even if there was a reasonable formula to | compared with each other. Even if there were a reasonable formula to | |||
| compare, for example, kilometers with milliseconds, we could not use | compare, for example, kilometers with milliseconds, we could not use | |||
| it, as the units of measurement (or any other information about the | it, as the units of measurement (or any other information about the | |||
| computation method for the routingcost) are not sent along with the | computation method for the routingcost) are not sent along with the | |||
| value in the ECS reply. | value in the ECS reply. | |||
| To avoid this problem, the tracker tries to send all ECS queries to | To avoid this problem, the tracker tries to send all ECS queries to | |||
| the same ALTO server. As specified in Section 4.4 of this document, | the same ALTO server. As specified in Section 4.4 of this document, | |||
| case 2, it uses the IP address of Resource Consumer x as parameter to | Case 2, it uses the IP address of Resource Consumer x as a parameter | |||
| the discovery procedure: | of the discovery procedure: | |||
| IRD_URIS_X = XDOMDISC(X,"ALTO:https") | IRD_URIS_X = XDOMDISC(X,"ALTO:https") | |||
| COST_X_A = query the ECS(X,A,routingcost) found in IRD_URIS_X | COST_X_A = query the ECS(X,A,routingcost) found in IRD_URIS_X | |||
| COST_X_B = query the ECS(X,B,routingcost) found in IRD_URIS_X | COST_X_B = query the ECS(X,B,routingcost) found in IRD_URIS_X | |||
| COST_X_C = query the ECS(X,C,routingcost) found in IRD_URIS_X | COST_X_C = query the ECS(X,C,routingcost) found in IRD_URIS_X | |||
| This strategy ensures that COST_X_A, COST_X_B, and COST_X_C can be | This strategy ensures that COST_X_A, COST_X_B, and COST_X_C can be | |||
| compared with each other. | compared with each other. | |||
| As discussed above, the tracker calls the ALTO Cross-Domain Server | As discussed above, the tracker calls the ALTO Cross-Domain Server | |||
| Discovery Procedure with IP address X as a parameter. For the | Discovery Procedure with IP address X as a parameter. For the | |||
| reminder of this example, we assume that X = 2001:DB8:1:2:227:eff: | remainder of this example, we assume that X = | |||
| fe6a:de42. Thus, the procedure call is | 2001:DB8:1:2:227:eff:fe6a:de42. Thus, the procedure call is | |||
| IRD_URIS_X = XDOMDISC(2001:DB8:1:2:227:eff:fe6a:de42,"ALTO:https"). | IRD_URIS_X = XDOMDISC(2001:DB8:1:2:227:eff:fe6a:de42,"ALTO:https"). | |||
| The first parameter 2001:DB8:1:2:227:eff:fe6a:de42 is a single IPv6 | The first parameter, 2001:DB8:1:2:227:eff:fe6a:de42, is a single IPv6 | |||
| address. Thus, we get AT = IPv6, A = 2001:DB8:1:2:227:eff:fe6a:de42, | address. Thus, we get AT = IPv6, A = 2001:DB8:1:2:227:eff:fe6a:de42, | |||
| L = 128, and SP = "ALTO:https". | L = 128, and SP = "ALTO:https". | |||
| The procedure constructs (see Step 1 in Section 3.2) | The procedure constructs (see Step 1 in Section 3.2) | |||
| R128 = "2.4.E.D.A.6.E.F.F.F.E.0.7.2.2.0.2.0.0.0.1.0.0.0. | R128 = "2.4.E.D.A.6.E.F.F.F.E.0.7.2.2.0.2.0.0.0.1.0.0.0. | |||
| 8.B.D.0.1.0.0.2.IP6.ARPA.", as well as (see Step 2 in Section 3.3) | 8.B.D.0.1.0.0.2.IP6.ARPA." | |||
| R64 = "2.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", | ||||
| R56 = "0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", | as well as the following (see Step 2 in Section 3.2): | |||
| R48 = "1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", | ||||
| R40 = "0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", and | R64 = "2.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA." | |||
| R32 = "8.B.D.0.1.0.0.2.IP6.ARPA.". | R56 = "0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA." | |||
| R48 = "1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA." | ||||
| R40 = "0.0.8.B.D.0.1.0.0.2.IP6.ARPA." | ||||
| R32 = "8.B.D.0.1.0.0.2.IP6.ARPA." | ||||
| In order to illustrate the third step of the ALTO Cross-Domain Server | In order to illustrate the third step of the ALTO Cross-Domain Server | |||
| Discovery Procedure, we use the "dig" (domain information groper) DNS | Discovery Procedure, we use the "dig" (domain information groper) DNS | |||
| lookup utility that is available for many operating systems (e.g., | lookup utility that is available for many operating systems (e.g., | |||
| Linux). A real implementation of the ALTO Cross-Domain Server | Linux). A real implementation of the ALTO Cross-Domain Server | |||
| Discovery Procedure would not be based on the "dig" utility, but use | Discovery Procedure would not be based on the "dig" utility but | |||
| appropriate libraries and/or operating system APIs. Please note that | instead would use appropriate libraries and/or operating-system APIs. | |||
| the following steps have been performed in a controlled lab | Please note that the following steps have been performed in a | |||
| environment with a appropriately configured name server. A suitable | controlled lab environment with an appropriately configured name | |||
| DNS configuration will be needed to reproduce these results. Please | server. A suitable DNS configuration will be needed to reproduce | |||
| also note that the rather verbose output of the "dig" tool has been | these results. Please also note that the rather verbose output of | |||
| shortened to the relevant lines. | the "dig" tool has been shortened to the relevant lines. | |||
| Since AT = IPv6 and L = 128, in the table given in Section 3.4, the | Since AT = IPv6 and L = 128, in the table given in Section 3.4, the | |||
| sixth row (not counting the column headers) applies. | sixth row (not counting the column headers) applies. | |||
| As mandated by the third column, we start with a lookup of R128, | As mandated by the third column, we start with a lookup of R128, | |||
| looking for NAPTR resource records: | looking for NAPTR resource records: | |||
| | user@labpc:~$ dig -tNAPTR 2.4.E.D.A.6.E.F.F.F.E.0.7.2.2.0.\ | | user@labpc:~$ dig -tNAPTR 2.4.E.D.A.6.E.F.F.F.E.0.7.2.2.0.\ | |||
| | 2.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. | | 2.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. | |||
| | | | | |||
| skipping to change at page 41, line 12 ¶ | skipping to change at line 1693 ¶ | |||
| get a useful result. Therefore, we continue with the fourth column | get a useful result. Therefore, we continue with the fourth column | |||
| of the table and do a lookup of R64: | of the table and do a lookup of R64: | |||
| | user@labpc:~$ dig -tNAPTR 2.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. | | user@labpc:~$ dig -tNAPTR 2.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. | |||
| | | | | |||
| | ;; Got answer: | | ;; Got answer: | |||
| | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33193 | | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33193 | |||
| | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADD'L: 0 | | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADD'L: 0 | |||
| The domain name R64 could be looked up (status: NOERROR), but there | The domain name R64 could be looked up (status: NOERROR), but there | |||
| are no NAPTR resource records associated with it (ANSWER: 0). Maybe, | are no NAPTR resource records associated with it (ANSWER: 0). There | |||
| there are some other resource records such as PTR, NS, or SOA, but we | may be some other resource records such as PTR, NS, or SOA, but we | |||
| are not interested in them. Thus, we do not get a useful result and | are not interested in them. Thus, we do not get a useful result, and | |||
| we continue with looking up R56: | we continue with looking up R56: | |||
| | user@labpc:~$ dig -tNAPTR 0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. | | user@labpc:~$ dig -tNAPTR 0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. | |||
| | | | | |||
| | ;; Got answer: | | ;; Got answer: | |||
| | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35966 | | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35966 | |||
| | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADD'L: 2 | | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADD'L: 2 | |||
| | | | | |||
| | ;; ANSWER SECTION: | | ;; ANSWER SECTION: | |||
| | 0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. 604800 IN NAPTR 100 10 "u" | | 0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. 604800 IN NAPTR 100 10 "u" | |||
| | "LIS:HELD" "!.*!https://lis1.example.org:4802/?c=ex!" . | | "LIS:HELD" "!.*!https://lis1.example.org:4802/?c=ex!" . | |||
| | 0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. 604800 IN NAPTR 100 20 "u" | | 0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. 604800 IN NAPTR 100 20 "u" | |||
| | "LIS:HELD" "!.*!https://lis2.example.org:4802/?c=ex!" . | | "LIS:HELD" "!.*!https://lis2.example.org:4802/?c=ex!" . | |||
| The domain name R56 could be looked up and there are NAPTR resource | The domain name R56 could be looked up, and there are NAPTR resource | |||
| records associated with it. However, each of these records has a | records associated with it. However, each of these records has a | |||
| service parameter that does not match our SP = "ALTO:https" (see | service parameter that does not match our SP = "ALTO:https" (see | |||
| [RFC7216] for "LIS:HELD"), and therefore, we have to ignore them. | [RFC7216] for "LIS:HELD"), and therefore we have to ignore them. | |||
| Consequently, we still do not have a useful result and continue with | Consequently, we still do not have a useful result and continue with | |||
| a lookup of R48: | a lookup of R48: | |||
| | user@labpc:~$ dig -tNAPTR 1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. | | user@labpc:~$ dig -tNAPTR 1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. | |||
| | | | | |||
| | ;; Got answer: | | ;; Got answer: | |||
| | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50459 | | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50459 | |||
| | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADD'L: 2 | | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADD'L: 2 | |||
| | | | | |||
| | ;; ANSWER SECTION: | | ;; ANSWER SECTION: | |||
| skipping to change at page 42, line 9 ¶ | skipping to change at line 1739 ¶ | |||
| This lookup yields two NAPTR resource records. We have to ignore the | This lookup yields two NAPTR resource records. We have to ignore the | |||
| second one as its service parameter does not match our SP, but the | second one as its service parameter does not match our SP, but the | |||
| first NAPTR resource record has a matching service parameter. | first NAPTR resource record has a matching service parameter. | |||
| Therefore, the procedure terminates successfully and the final | Therefore, the procedure terminates successfully and the final | |||
| outcome is: IRD_URIS_X = "https://alto1.example.net/ird". | outcome is: IRD_URIS_X = "https://alto1.example.net/ird". | |||
| The ALTO client that is embedded in the tracker will access the ALTO | The ALTO client that is embedded in the tracker will access the ALTO | |||
| Information Resource Directory (IRD, see Section 9 of [RFC7285]) at | Information Resource Directory (IRD, see Section 9 of [RFC7285]) at | |||
| this URI, look for the Endpoint Cost Service (ECS, see Section 11.5 | this URI, look for the Endpoint Cost Service (ECS, see Section 11.5 | |||
| of [RFC7285]), and query the ECS for the costs between A and X, B and | of [RFC7285]), and query the ECS for the costs between A and X, B and | |||
| X, as well as C and X, before returning an ALTO-optimized list of | X, and C and X, before returning an ALTO-optimized list of candidate | |||
| candidate resource providers to resource consumer X. | resource providers to resource consumer X. | |||
| Appendix D. Contributors List and Acknowledgments | Acknowledgments | |||
| The initial version of this document was co-authored by Marco Tomsu | The initial draft version of this document was co-authored by Marco | |||
| (Alcatel-Lucent). | Tomsu (Alcatel-Lucent). | |||
| This document borrows some text from [RFC7286], as historically, it | This document borrows some text from [RFC7286], as historically, it | |||
| has been part of the draft that eventually became said RFC. Special | was part of the draft that eventually became said RFC. Special | |||
| thanks to Michael Scharf and Nico Schwan. | thanks to Michael Scharf and Nico Schwan. | |||
| Authors' Addresses | Authors' Addresses | |||
| Sebastian Kiesel | Sebastian Kiesel | |||
| University of Stuttgart Information Center | University of Stuttgart Information Center | |||
| Allmandring 30 | Allmandring 30 | |||
| Stuttgart 70550 | 70550 Stuttgart | |||
| Germany | Germany | |||
| Email: ietf-alto@skiesel.de | Email: ietf-alto@skiesel.de | |||
| URI: http://www.izus.uni-stuttgart.de | URI: http://www.izus.uni-stuttgart.de | |||
| Martin Stiemerling | Martin Stiemerling | |||
| University of Applied Sciences Darmstadt, Computer Science Dept. | University of Applied Sciences Darmstadt, Computer Science Dept. | |||
| Haardtring 100 | Haardtring 100 | |||
| Darmstadt 64295 | 64295 Darmstadt | |||
| Germany | Germany | |||
| Phone: +49 6151 16 37938 | Phone: +49 6151 16 37938 | |||
| Email: mls.ietf@gmail.com | Email: mls.ietf@gmail.com | |||
| URI: http://ietf.stiemerling.org | URI: https://danet.fbi.h-da.de | |||
| End of changes. 217 change blocks. | ||||
| 593 lines changed or deleted | 632 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||