| rfc8686xml2.original.xml | rfc8686.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | |||
| <?rfc toc="yes" ?> | ||||
| <?rfc tocdepth="2" ?> | ||||
| <?rfc symrefs="yes" ?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc iprnotified="no" ?> | ||||
| <?rfc strict="no" ?> | ||||
| <?rfc compact="no" ?> | ||||
| <?rfc subcompact="no" ?> | ||||
| <rfc category="std" docName="draft-ietf-alto-xdom-disc-06" ipr="trust200902"> | ||||
| <front> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | |||
| <title abbrev='ALTO Cross-Domain Server Discovery'> | docName="draft-ietf-alto-xdom-disc-06" ipr="trust200902" obsoletes="" | |||
| Application Layer Traffic Optimization (ALTO) | updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="2" | |||
| Cross-Domain Server Discovery | symRefs="true" sortRefs="true" version="3" number="8686" consensus="true"> | |||
| </title> | ||||
| <!-- xml2rfc v2v3 conversion 2.35.0 --> | ||||
| <front> | ||||
| <title abbrev="ALTO Cross-Domain Server Discovery"> | ||||
| Application-Layer Traffic Optimization (ALTO) | ||||
| Cross&nbhy;Domain Server Discovery | ||||
| </title> | ||||
| <seriesInfo name="RFC" value="8686"/> | ||||
| <author fullname="Sebastian Kiesel" initials="S." surname="Kiesel"> | <author fullname="Sebastian Kiesel" initials="S." surname="Kiesel"> | |||
| <organization abbrev="University of Stuttgart"> | <organization abbrev="University of Stuttgart"> | |||
| University of Stuttgart Information Center | University of Stuttgart Information Center | |||
| </organization> | </organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Allmandring 30</street> | <street>Allmandring 30</street> | |||
| <city>Stuttgart</city> | <city>Stuttgart</city> | |||
| <code>70550</code> | <code>70550</code> | |||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal> | </postal> | |||
| <email>ietf-alto@skiesel.de</email> | <email>ietf-alto@skiesel.de</email> | |||
| <uri>http://www.izus.uni-stuttgart.de</uri> | <uri>http://www.izus.uni-stuttgart.de</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Martin Stiemerling" initials="M." surname="Stiemerling"> | <author fullname="Martin Stiemerling" initials="M." surname="Stiemerling"> | |||
| <organization abbrev="H-DA"> | <organization abbrev="H-DA"> | |||
| University of Applied Sciences Darmstadt, | University of Applied Sciences Darmstadt, | |||
| Computer Science Dept. | Computer Science Dept. | |||
| </organization> | </organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Haardtring 100</street> | <street>Haardtring 100</street> | |||
| <code>64295</code> | <code>64295</code> | |||
| <city>Darmstadt</city> | <city>Darmstadt</city> | |||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal> | </postal> | |||
| <phone>+49 6151 16 37938</phone> | <phone>+49 6151 16 37938</phone> | |||
| <email>mls.ietf@gmail.com</email> | <email>mls.ietf@gmail.com</email> | |||
| <uri>http://ietf.stiemerling.org</uri> | <uri>https://danet.fbi.h-da.de</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2020" month="February"/> | ||||
| <date year="2019" /> | ||||
| <area>TSV</area> | <area>TSV</area> | |||
| <workgroup>ALTO</workgroup> | <workgroup>ALTO</workgroup> | |||
| <keyword>Application-Layer Traffic Optimization (ALTO)</keyword> | <keyword>Application-Layer Traffic Optimization (ALTO)</keyword> | |||
| <keyword>ALTO cross-domain server discovery</keyword> | <keyword>ALTO cross-domain server discovery</keyword> | |||
| <keyword>ALTO third-party server discovery</keyword> | <keyword>ALTO third-party server discovery</keyword> | |||
| <abstract> | <abstract> | |||
| <t>The goal of Application-Layer Traffic Optimization (ALTO) is to | ||||
| <t>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.</t> | ALTO servers that can provide suitable guidance.</t> | |||
| <t>In some deployment scenarios, in particular if the information | ||||
| <t>In some deployment scenarios, in particular if the information | about the network topology is partitioned and distributed over several | |||
| about the network topology is partitioned and distributed over | ALTO servers, it may be necessary to discover an ALTO server outside | |||
| several ALTO servers, it may be needed to discover an | of the ALTO client's own network domain, in order to get appropriate | |||
| ALTO server outside of the own network domain, in order to get | guidance. This document details applicable scenarios, itemizes | |||
| appropriate guidance. | requirements, and specifies a procedure for ALTO cross-domain server | |||
| This document details applicable scenarios, itemizes requirements, and | discovery.</t> | |||
| specifies a procedure for ALTO cross-domain server discovery.</t> | <t>Technically, the procedure specified in this document takes one | |||
| <t>Technically, the procedure specified in this document takes one | ||||
| IP address or prefix and a U-NAPTR Service Parameter | IP address or prefix and a U-NAPTR Service Parameter | |||
| (typically, "ALTO:https") | (typically, "ALTO:https") as parameters. It performs DNS lookups (for | |||
| as parameters. It performs DNS lookups (for | NAPTR resource records in the "in-addr.arpa." or "ip6.arpa." trees) | |||
| NAPTR resource records in the in-addr.arpa. or ip6.arpa. tree) | and returns one or more URIs of information resources related | |||
| and returns one or more URI(s) of information resources related | ||||
| to that IP address or prefix.</t> | to that IP address or prefix.</t> | |||
| </abstract> | </abstract> | |||
| </front> | ||||
| <note title="Terminology and Requirements Language"> | <middle> | |||
| <t>This document makes use of the ALTO terminology defined in | <section numbered="true" toc="default"> | |||
| RFC 5693 <xref target="RFC5693"/>.</t> | <name>Introduction</name> | |||
| <t> | ||||
| <t>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 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
| when, and only when, they appear in all capitals, as shown here.</t> | ||||
| </note> | ||||
| </front> | ||||
| <middle> | ||||
| <section title="Introduction"> | ||||
| <t> | ||||
| 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 <xref target="RFC5693"/>. ALTO is realized by an | resource <xref target="RFC5693" format="default"/>. ALTO is realized | |||
| HTTP-based client-server protocol <xref target="RFC7285"/>, | by an | |||
| HTTP-based client-server protocol <xref target="RFC7285" format="def | ||||
| ault"/>, | ||||
| which can be used in various scenarios | which can be used in various scenarios | |||
| <xref target="RFC7971"/>. | <xref target="RFC7971" format="default"/>. | |||
| </t> | </t> | |||
| <t> | ||||
| <t> | The ALTO base protocol document <xref target="RFC7285" format="defau | |||
| The ALTO base protocol document <xref target="RFC7285"/> specifies | lt"/> specifies | |||
| the communication between an ALTO client and one ALTO server. | the communication between an ALTO client and one ALTO server. | |||
| In principle, the client may send any ALTO query. | In principle, the client may send any ALTO query. | |||
| For example, it might ask for the routing cost between any two IP | For example, it might ask for the routing cost between any two IP | |||
| addresses, or it might request network and | 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 | possibly with some kind of default value if no exact data is | |||
| known. | known. | |||
| </t> | </t> | |||
| <t> | ||||
| <t> | ||||
| 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 | ("partitioned knowledge"). Various ALTO use cases have been | |||
| studied in the context of such scenarios. In some cases, one | studied in the context of such scenarios. In some cases, one | |||
| cannot assume that a topologically nearby ALTO server (e.g., a | cannot assume that a topologically nearby ALTO server (e.g., a | |||
| server discovered with the procedure specified in | server discovered with the procedure specified in | |||
| <xref target="RFC7286"/>) will always provide useful information | <xref target="RFC7286" format="default"/>) will always provide usefu l information | |||
| to the client. One such scenario is detailed in | to the client. One such scenario is detailed in | |||
| <xref target="apx.alto_p2p"/>. Several solution | <xref target="apx.alto_p2p" format="default"/>. Several solution | |||
| approaches, such as redirecting a client to a server that has more | approaches, such as redirecting a client to a server that has more | |||
| accurate information or forwarding the request to it on behalf | accurate information or forwarding the request to such a server on b ehalf | |||
| of the client, have been proposed and analyzed (see | of the client, have been proposed and analyzed (see | |||
| <xref target="sec.multiplesources"/>), but none has been specified | <xref target="sec.multiplesources" format="default"/>), but no | |||
| so far. | solution has been specified so far. | |||
| </t> | </t> | |||
| <t> | ||||
| <t> | <xref target="sec.3pdisc-spec" format="default"/> of this document s | |||
| <xref target="sec.3pdisc-spec"/> of this document specifies | pecifies | |||
| the "ALTO Cross-Domain Server Discovery Procedure" | the "ALTO Cross-Domain Server Discovery Procedure" | |||
| for client-side usage in these scenarios. | for client-side usage in these scenarios. | |||
| An ALTO client that wants to send an ALTO query related to a | An ALTO client that wants to send an ALTO query related to a | |||
| specific IP address or prefix X, may call this procedure | specific IP address or prefix X may call this procedure | |||
| with X as a paramenter. | with X as a parameter. | |||
| It will use Domain Name System (DNS) lookups to find of one ore | It will use Domain Name System (DNS) lookups to find one or | |||
| more ALTO servers that can provide a competent answer. | more ALTO servers that can provide a competent answer. | |||
| The above wording "related to" was intentionally kept somewhat | The above wording "related to" was intentionally kept somewhat | |||
| unspecific, as the exact semantics depends on the ALTO service to | unspecific, as the exact semantics depends on the ALTO service to | |||
| be used; see <xref target="sec.xdom-usage"/>. | be used; see <xref target="sec.xdom-usage" format="default"/>. | |||
| </t> | </t> | |||
| <t> | ||||
| <t> | ||||
| Those who are in control of the "reverse DNS" | Those who are in control of the "reverse DNS" | |||
| for a given IP address or prefix | for a given IP address or prefix | |||
| (i.e., the corresponding subdomain of in-addr.arpa. or ip6.arpa.) | (i.e., the corresponding subdomain of "in-addr.arpa." or "ip6.arpa." | |||
| - typically an Internet Service Provider (ISP), a | ) | |||
| corporate IT department, or a university's computing center - | -- typically an Internet Service Provider (ISP), a | |||
| corporate IT department, or a university's computing center -- | ||||
| may add resource records to the DNS that point to one or more | may add resource records to the DNS that point to one or more | |||
| relevant ALTO server(s). In many cases, it may be | relevant ALTO servers. In many cases, it may be | |||
| an ALTO server run by that ISP or IT department, as they | an ALTO server run by that ISP or IT department, as they | |||
| naturally have good insight into routing costs from and | naturally have good insight into routing costs from and | |||
| to their networks. However, they may also refer to an | to their networks. However, they may also refer to an | |||
| ALTO server provided by someone else, e.g., their upstream ISP. | ALTO server provided by someone else, e.g., their upstream ISP. | |||
| </t> | ||||
| <section> | ||||
| <name>Terminology and Requirements Language</name> | ||||
| <t>This document makes use of the ALTO terminology defined in | ||||
| RFC 5693 <xref target="RFC5693" format="default"/>.</t> | ||||
| <t> | ||||
| The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
| "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | ||||
| ", | ||||
| "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
| "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
| be | ||||
| interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | ||||
| target="RFC8174"/> when, and only when, they appear in all capitals, as | ||||
| shown here. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | ||||
| <section anchor="sec.3pdisc-overview" | <section anchor="sec.3pdisc-overview" numbered="true" toc="default"> | |||
| title="ALTO Cross-Domain Server Discovery Procedure: Overview"> | <name>ALTO Cross-Domain Server Discovery Procedure: Overview</name> | |||
| <t>This section gives a non-normative overview of the | ||||
| <t>This section gives a non-normative overview on the | ||||
| ALTO Cross-Domain Server Discovery Procedure. The detailed | ALTO Cross-Domain Server Discovery Procedure. The detailed | |||
| specification will follow in the next section.</t> | specification will follow in the next section.</t> | |||
| <t>This procedure was inspired by "Location Information | ||||
| <t>This procedure was inspired by the "Location Information | ||||
| Server (LIS) Discovery Using IP Addresses and Reverse DNS" | Server (LIS) Discovery Using IP Addresses and Reverse DNS" | |||
| <xref target="RFC7216"/> and re-uses parts of the basic | <xref target="RFC7216" format="default"/> and reuses parts of the basic | |||
| ALTO Server Discovery Procedure <xref target="RFC7286"/>.</t> | ALTO Server Discovery Procedure <xref target="RFC7286" format="default"/ | |||
| >.</t> | ||||
| <t>The basic idea is to use the Domain Name System (DNS), | <t>The basic idea is to use the Domain Name System (DNS), | |||
| more specifically the "in-addr.arpa." or "ip6.arpa." trees, | more specifically the "in-addr.arpa." or "ip6.arpa." trees, | |||
| which are mostly used for "reverse mapping" of IP addresses | which are mostly used for "reverse mapping" of IP addresses | |||
| to host names by means of PTR resource records. | to host names by means of PTR resource records. | |||
| There, URI-enabled Naming Authority Pointer (U-NAPTR) | There, URI-enabled Naming Authority Pointer (U-NAPTR) | |||
| resource records <xref target="RFC4848"/>, | resource records <xref target="RFC4848" format="default"/>, | |||
| which allow the mapping of domain names to | which allow the mapping of domain names to | |||
| Uniform Resource Identifiers (URIs), are installed | Uniform Resource Identifiers (URIs), are installed | |||
| as needed. Thereby, it is possible to store a mapping from | 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. | an IP address or prefix to one or more ALTO server URIs in the DNS. | |||
| </t> | </t> | |||
| <t>The ALTO Cross-Domain Server Discovery Procedure is called | ||||
| <t>The ALTO Cross-Domain Server Discovery Procedure is called | ||||
| with one IP address or prefix and a U-NAPTR Service | with one IP address or prefix and a U-NAPTR Service | |||
| Parameter <xref target="RFC4848"/> as parameters. </t> | Parameter <xref target="RFC4848" format="default"/> as parameters. </t> | |||
| <t>The service parameter is usually set to "ALTO:https". | ||||
| <t>The service parameter is usually set to "ALTO:https". | However, other parameter values may be used in some scenarios -- e.g., | |||
| However, other parameter values may be used in some scenarios, e.g., | ||||
| "ALTO:http" to search for a server that supports unencrypted | "ALTO:http" to search for a server that supports unencrypted | |||
| transmission for debugging purposes, or other application protocol | transmission for debugging purposes, or other application protocol | |||
| or service tags if applicable.</t> | or service tags if applicable.</t> | |||
| <t>The procedure performs DNS lookups and returns one or more | ||||
| <t>The procedure performs DNS lookups and returns one or more | URIs of information resources related to said IP address or | |||
| URI(s) of information resources related to said IP address or | prefix, usually the URIs of one or more ALTO Information | |||
| prefix, usually the URI(s) of one or more ALTO Information | Resource Directories (IRDs; see <xref target="RFC7285" | |||
| Resource Directory (IRD, see Section 9 of <xref target="RFC7285"/>). | sectionFormat="of" section="9"/>). | |||
| The U-NAPTR records also provide preference values, which should | The U-NAPTR records also provide preference values, which should | |||
| be considered if more than one URI is returned. | be considered if more than one URI is returned. | |||
| </t> | </t> | |||
| <t>The discovery procedure sequentially tries two different lookup | ||||
| <t>The discovery procedure sequentially tries two different lookup | strategies. First, an ALTO-specific U-NAPTR record is searched in the "r | |||
| strategies: | everse | |||
| First, an ALTO-specific U-NAPTR record is searched in the "reverse | tree" -- i.e., in subdomains of "in-addr.arpa." or "ip6.arpa." correspon | |||
| tree", i.e., in subdomains of in-addr.arpa. or ip6.arpa. corresponding | ding | |||
| to the given IP address or prefix. | to the given IP address or prefix. | |||
| If this lookup does not yield a usable result, the procedure | If this lookup does not yield a usable result, the procedure | |||
| tries further lookups with truncated domain names, which correspond | tries further lookups with truncated domain names, which correspond | |||
| to shorter prefix lengths. The goal is to allow deployment | to shorter prefix lengths. The goal is to allow deployment | |||
| scenarios that require fine-grained discovery on a per-IP basis, as | scenarios that require fine-grained discovery on a per-IP basis, as | |||
| well as large-scale scenarios where discovery is to be enabled for a | well as large-scale scenarios where discovery is to be enabled for a | |||
| large number of IP addresses with a small number of additional DNS | large number of IP addresses with a small number of additional DNS | |||
| resource records.</t> | resource records.</t> | |||
| </section> | </section> | |||
| <section anchor="sec.3pdisc-spec" numbered="true" toc="default"> | ||||
| <section anchor="sec.3pdisc-spec" title="ALTO Cross-Domain Server | <name>ALTO Cross-Domain Server Discovery Procedure: Specificat | |||
| Discovery Procedure: Specification"> | ion</name> | |||
| <section anchor="sec.3pdisc-spec-interface" numbered="true" toc="default"> | ||||
| <section anchor="sec.3pdisc-spec-interface" title="Interface"> | <name>Interface</name> | |||
| <t>The procedure specified in this document takes two | ||||
| <t>The procedure specified in this document takes two | ||||
| parameters, X and SP, where X is an IP address or prefix | parameters, X and SP, where X is an IP address or prefix | |||
| and SP is a U-NAPTR Service Parameter.</t> | and SP is a U-NAPTR Service Parameter.</t> | |||
| <t>The parameter X may be an IPv4 or an IPv6 address | ||||
| <t>The parameter X may be an IPv4 or an IPv6 address | or prefix in Classless Inter-Domain Routing (CIDR) notation (see | |||
| or prefix in CIDR notation (see <xref target="RFC4632"/> | <xref target="RFC4632" format="default"/> | |||
| for the IPv4 CIDR notation and <xref target="RFC4291"/> for IPv6). | for the IPv4 CIDR notation and <xref target="RFC4291" | |||
| format="default"/> for IPv6). | ||||
| Consequently, the address type AT is either "IPv4" or "IPv6". | Consequently, the address type AT is either "IPv4" or "IPv6". | |||
| In both cases, X consists of an IP address A and a | In both cases, X consists of an IP address A and a | |||
| prefix length L. | prefix length L. | |||
| From the definition of IPv4 and IPv6 it follows that | From the definitions of IPv4 and IPv6, it follows that | |||
| syntactically valid values for L are | syntactically valid values for L are | |||
| 0 <= L <= 32 when AT=IPv4 and | 0 <= L <= 32 when AT=IPv4 and | |||
| 0 <= L <= 128 when AT=IPv6. | 0 <= L <= 128 when AT=IPv6. | |||
| However, not all syntactically valid values of L are actually | However, not all syntactically valid values of L are actually | |||
| supported by this procedure - Step 1 (see below) will | supported by this procedure; Step 1 (see below) will | |||
| check for unsupported values and report an error if | check for unsupported values and report an error if | |||
| neccessary.</t> | necessary.</t> | |||
| <t>For example, for X=198.51.100.0/24, we get AT=IPv4, | ||||
| <t>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, | |||
| A=198.51.100.0 and L=24. Similarly, for X=2001:0DB8::20/128, | we get AT=IPv6, A=2001:0DB8::20, and L=128.</t> | |||
| we get AT=IPv6, A=2001:0DB8::20 and L=128.</t> | <t>In the intended usage scenario, the procedure is normally | |||
| <t>In the intended usage scenario, the procedure is normally | ||||
| always called with the parameter SP set to "ALTO:https". | always called with the parameter SP set to "ALTO:https". | |||
| However, for general applicabiliy and in order to support | However, for general applicability and in order to support | |||
| future extensions, the procedure MUST support being called | future extensions, the procedure <bcp14>MUST</bcp14> support being c | |||
| alled | ||||
| with any valid U-NAPTR Service Parameter | with any valid U-NAPTR Service Parameter | |||
| (see Section 4.5. of <xref target="RFC4848"/> for the | (see <xref target="RFC4848" sectionFormat="of" section="4.5"/> for t | |||
| syntax of U-NAPTR Service Parameters and Section 5. of the | he | |||
| syntax of U-NAPTR Service Parameters and Section <xref target="RFC48 | ||||
| 48" | ||||
| sectionFormat="bare" section="5"/> of the | ||||
| same document for information about the IANA registries).</t> | same document for information about the IANA registries).</t> | |||
| <t>The procedure performs DNS lookups and returns one or more | ||||
| <t>The procedure performs DNS lookups and returns one or more | URIs of information resources related to that IP address or | |||
| URI(s) of information resources related to that IP address or | prefix, usually the URIs of one or more ALTO Information | |||
| prefix, usually the URI(s) of one or more ALTO Information | Resource Directories (IRDs; see <xref target="RFC7285" | |||
| Resource Directory (IRD, see Section 9 of <xref target="RFC7285"/>). | sectionFormat="of" section="9"/>). | |||
| For each URI, it also returns order and preference values | For each URI, the procedure also returns order and preference values | |||
| (see Section 4.1 of <xref target="RFC3403"/>), which | (see <xref target="RFC3403" sectionFormat="of" section="4.1"/>), | |||
| which | ||||
| should be considered if more than one URI is returned.</t> | should be considered if more than one URI is returned.</t> | |||
| <t>During execution of this procedure, various | ||||
| <t>During execution of this procedure, various | ||||
| error conditions may occur and have to be reported to | error conditions may occur and have to be reported to | |||
| the caller; see | the caller; see | |||
| <xref target="sec.3pdisc-spec-errorhandling"/>.</t> | <xref target="sec.3pdisc-spec-errorhandling" format="default"/>.</t> | |||
| <t>For the remainder of the document, we use the following | ||||
| <t>For the remainder of the document, we use the following | ||||
| notation for calling the ALTO Cross-Domain Server Discovery | notation for calling the ALTO Cross-Domain Server Discovery | |||
| Procedure: | Procedure: | |||
| <vspace blankLines="1"/> | ||||
| IRD_URIS_X = XDOMDISC(X,"ALTO:https") | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="sec.3pdisc-spec-step1" | IRD_URIS_X = XDOMDISC(X,"ALTO:https") | |||
| title="Step 1: Prepare Domain Name for Reverse DNS Lookup"> | </t> | |||
| </section> | ||||
| <t>First, the procedure checks the prefix length L for unsupported | <section anchor="sec.3pdisc-spec-step1" numbered="true" toc="default"> | |||
| <name>Step 1: Prepare Domain Name for Reverse DNS Lookup</name> | ||||
| <t>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, | values: If AT=IPv4 (i.e., if A is an IPv4 address) and L < 8, | |||
| the procedure aborts and indicates an "unsupported prefix length" | the procedure aborts and indicates an "unsupported prefix length" | |||
| error to the caller. Similarly, if AT=IPv6 | error to the caller. Similarly, if AT=IPv6 | |||
| and L < 32, the procedure aborts and indicates an | and L < 32, the procedure aborts and indicates an | |||
| "unsupported prefix length" error to the caller. Otherwise, | "unsupported prefix length" error to the caller. Otherwise, | |||
| the procedure continues.</t> | the procedure continues.</t> | |||
| <t>If AT=IPv4, the procedure will then produce a | ||||
| <t>If AT=IPv4, the procedure will then produce a | ||||
| DNS domain name, | DNS domain name, | |||
| which will be referred to as R32. This domain name is | which will be referred to as R32. This domain name is | |||
| constructed according to the rules specified in | constructed according to the rules specified in | |||
| Section 3.5 of <xref target="RFC1035"/> and it is rooted in | <xref target="RFC1035" format="default" sectionFormat="of" | |||
| section="3.5"/>, and it is rooted in | ||||
| the special domain "IN-ADDR.ARPA.".</t> | the special domain "IN-ADDR.ARPA.".</t> | |||
| <t>For example, A=198.51.100.3 yields | ||||
| <t>For example, A=198.51.100.3 yields | ||||
| R32="3.100.51.198.IN-ADDR.ARPA.". </t> | R32="3.100.51.198.IN-ADDR.ARPA.". </t> | |||
| <t>If AT=IPv6, a domain name, which will be called R128, | ||||
| <t>If AT=IPv6, a domain name. which will be called R128, | ||||
| is constructed according to the rules specified in | is constructed according to the rules specified in | |||
| Section 2.5 of <xref target="RFC3596"/> and the | <xref target="RFC3596" format="default" | |||
| sectionFormat="of" section="2.5"/>, and the | ||||
| special domain "IP6.ARPA." is used. | special domain "IP6.ARPA." is used. | |||
| <figure> | </t> | |||
| <artwork><![CDATA[ | ||||
| <t> | ||||
| For example (note: a line break was added after the second line), | For example (note: a line break was added after the second line), | |||
| </t> | ||||
| <sourcecode type="pseudocode"> | ||||
| 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." | |||
| ]]></artwork></figure> | </sourcecode> | |||
| </t> | ||||
| <t> | ||||
| <!-- force a page break as steps 2 and 3 each fit nicely on one page --> | ||||
| <vspace blankLines="60"/> | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="sec.3pdisc-spec-step2" | ||||
| title="Step 2: Prepare Shortened Domain Names"> | ||||
| <t>For this step, an auxiliary function "skip" is defined as | </section> | |||
| <section anchor="sec.3pdisc-spec-step2" numbered="true" toc="default"> | ||||
| <name>Step 2: Prepare Shortened Domain Names</name> | ||||
| <t>For this step, an auxiliary function, "skip", is defined as | ||||
| follows: | follows: | |||
| skip(str,n) will skip all characters in the string str, up to | skip(str,n) will skip all characters in the string str, up to | |||
| and including the n-th dot, and return the remaining | and including the n-th dot, and return the remaining | |||
| part of str. For example, skip("foo.bar.baz.qux.quux.",2) will | part of str. For example, skip("foo.bar.baz.qux.quux.",2) will | |||
| return "baz.qux.quux.". | return "baz.qux.quux.". | |||
| </t> | </t> | |||
| <t>If AT=IPv4, the following additional | ||||
| <t>If AT=IPv4, the following additional | ||||
| domain names are generated from the result of the previous step: | domain names are generated from the result of the previous step: | |||
| <list style="empty"> | </t> | |||
| <t>R24=skip(R32,1),</t> | <ul empty="true" spacing="normal"> | |||
| <t>R16=skip(R32,2), and</t> | <li>R24=skip(R32,1),</li> | |||
| <t>R8=skip(R32,3).</t> | <li>R16=skip(R32,2), and</li> | |||
| </list> | <li>R8=skip(R32,3).</li> | |||
| </ul> | ||||
| <t> | ||||
| 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.</t> | by 8 bits.</t> | |||
| <t>For example, R32="3.100.51.198.IN-ADDR.ARPA." yields | <t>For example,</t> | |||
| R24="100.51.198.IN-ADDR.ARPA.", | <sourcecode type="pseudocode"> | |||
| R16="51.198.IN-ADDR.ARPA.", and | R32="3.100.51.198.IN-ADDR.ARPA." yields | |||
| R8="198.IN-ADDR.ARPA.". </t> | R24="100.51.198.IN-ADDR.ARPA." | |||
| R16="51.198.IN-ADDR.ARPA." | ||||
| <t>If AT=IPv6, the following additional | R8="198.IN-ADDR.ARPA." | |||
| </sourcecode> | ||||
| <t>If AT=IPv6, the following additional | ||||
| domain names are generated from the result of the previous step: | domain names are generated from the result of the previous step: | |||
| <list style="empty"> | </t> | |||
| <t>R64=skip(R128,16),</t> | <ul empty="true" spacing="normal"> | |||
| <t>R56=skip(R128,18),</t> | <li>R64=skip(R128,16),</li> | |||
| <t>R48=skip(R128,20),</t> | <li>R56=skip(R128,18),</li> | |||
| <t>R40=skip(R128,22), and</t> | <li>R48=skip(R128,20),</li> | |||
| <t>R32=skip(R128,24).</t> | <li>R40=skip(R128,22), and</li> | |||
| </list> | <li>R32=skip(R128,24).</li> | |||
| </ul> | ||||
| <t> | ||||
| 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. | |||
| <figure> | </t> | |||
| <artwork><![CDATA[ | <t> | |||
| For example (note: a line break was added after the first line), | For example (note: a line break was added after the first line), | |||
| </t> | ||||
| <sourcecode type="pseudocode"> | ||||
| 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." | |||
| ]]></artwork></figure> | </sourcecode> | |||
| </t> | </section> | |||
| </section> | <section anchor="sec.3pdisc-spec-step3" numbered="true" toc="default"> | |||
| <name>Step 3: Perform DNS U-NAPTR Lookups</name> | ||||
| <section anchor="sec.3pdisc-spec-step3" | <t>The address type and the prefix length of X | |||
| title="Step 3: Perform DNS U-NAPTR lookups"> | ||||
| <t>The address type and the prefix length of X | ||||
| are matched against the first and the second column of the | are matched against the first and the second column of the | |||
| following table, respectively:</t> | following table, respectively:</t> | |||
| <figure><artwork><![CDATA[ | ||||
| +------------+------------+------------+----------------------------+ | ||||
| | 1: Address | 2: Prefix | 3: MUST do | 4: SHOULD do further | | ||||
| | Type AT | Length L | 1st lookup | lookups in that order | | ||||
| +------------+------------+------------+----------------------------+ | ||||
| | IPv4 | 32 | R32 | R24, R16, R8 | | ||||
| | IPv4 | 24 .. 31 | R24 | R16, R8 | | ||||
| | IPv4 | 16 .. 23 | R16 | R8 | | ||||
| | IPv4 | 8 .. 15 | R8 | (none) | | ||||
| | IPv4 | 0 .. 7 | (none, abort: unsupported prefix length)| | ||||
| +------------+------------+------------+----------------------------+ | ||||
| | IPv6 | 128 | R128 | R64, R56, R48, R40, R32 | | ||||
| | IPv6 | 64 (..127) | R64 | R56, R48, R40, R32 | | ||||
| | 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)| | ||||
| +------------+------------+------------+----------------------------+ | ||||
| ]]></artwork></figure> | ||||
| <t>Then, the domain name given in the 3rd column and the | <table anchor="U-NAPTR"> | |||
| U-NAPTR Service Parameter SP the procedure was called with | <name>Perform DNS U-NAPTR lookups</name> | |||
| (usually "ALTO:https") MUST be used for an | <thead> | |||
| U-NAPTR <xref target="RFC4848"/> lookup, in order | <tr> | |||
| <th>1: Address Type AT</th> | ||||
| <th>2: Prefix Length L</th> | ||||
| <th>3: MUST do 1st lookup</th> | ||||
| <th>4: SHOULD do further lookups in that order</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>IPv4</td> | ||||
| <td>32</td> | ||||
| <td>R32</td> | ||||
| <td>R24, R16, R8</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv4</td> | ||||
| <td>24 .. 31</td> | ||||
| <td>R24</td> | ||||
| <td>R16, R8</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv4</td> | ||||
| <td>16 .. 23</td> | ||||
| <td>R16</td> | ||||
| <td>R8</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv4</td> | ||||
| <td>8 .. 15</td> | ||||
| <td>R8</td> | ||||
| <td>(none)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv4</td> | ||||
| <td>0 .. 7</td> | ||||
| <td colspan="2">(none, abort: unsupported prefix length)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv6</td> | ||||
| <td>128</td> | ||||
| <td>R128</td> | ||||
| <td>R64, R56, R48, R40, R32</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv6</td> | ||||
| <td>64 (..127)</td> | ||||
| <td>R64</td> | ||||
| <td>R56, R48, R40, R32</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv6</td> | ||||
| <td>56 .. 63</td> | ||||
| <td>R56</td> | ||||
| <td>R48, R40, R32</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv6</td> | ||||
| <td>48 .. 55</td> | ||||
| <td>R48</td> | ||||
| <td>R40, R32</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv6</td> | ||||
| <td>40 .. 47</td> | ||||
| <td>R40</td> | ||||
| <td>R32</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv6</td> | ||||
| <td>32 .. 39</td> | ||||
| <td>R32</td> | ||||
| <td>(none)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>IPv6</td> | ||||
| <td>0 .. 31</td> | ||||
| <td colspan="2">(none, abort: unsupported prefix length)</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t>Then, the domain name given in the 3rd column and the | ||||
| U-NAPTR Service Parameter SP with which the procedure was called | ||||
| (usually "ALTO:https") <bcp14>MUST</bcp14> be used for a | ||||
| U-NAPTR <xref target="RFC4848" format="default"/> lookup, in order | ||||
| to obtain one or more URIs (indicating protocol, host, and | to obtain one or more URIs (indicating protocol, host, and | |||
| possibly path elements) for the ALTO server's Information Resource | possibly path elements) for the ALTO server's Information Resource | |||
| Directory (IRD). If such URI(s) can be found, the | Directory (IRD). If such URIs can be found, the | |||
| ALTO Cross-Domain Server Discovery Procedure returns that | ALTO Cross-Domain Server Discovery Procedure returns that | |||
| information to the caller and terminates successfully.</t> | information to the caller and terminates successfully.</t> | |||
| <t>For example, the following two U-NAPTR resource records can be | ||||
| <t>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 | used for mapping "100.51.198.IN-ADDR.ARPA." (i.e., R24 from the | |||
| example in the previous step) to the HTTPS URIs | example in the previous step) to the HTTPS URIs | |||
| "https://alto1.example.net/ird" and | "https://alto1.example.net/ird" and | |||
| "https://alto2.example.net/ird", with the former being preferred. | "https://alto2.example.net/ird", with the former being preferred. | |||
| <figure><artwork><![CDATA[ | </t> | |||
| <sourcecode type="dns-rr"> | ||||
| 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!" "" | |||
| ]]></artwork></figure></t> | </sourcecode> | |||
| <t>If no matching U-NAPTR records can be found, | <t>If no matching U-NAPTR records can be found, | |||
| the procedure SHOULD try further lookups, using the domain | the procedure <bcp14>SHOULD</bcp14> try further lookups, using the d | |||
| omain | ||||
| names from the fourth column in the indicated order, until one | names from the fourth column in the indicated order, until one | |||
| lookup | lookup | |||
| succeeds. If no IRD URI could be found after looking up | succeeds. If no IRD URI can be found after looking up | |||
| all domain names from the 3rd and 4th column, the procedure | all domain names from the 3rd and 4th columns, the procedure | |||
| terminates unsuccessfully, returning an empty URI list. | terminates unsuccessfully, returning an empty URI list. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section anchor="sec.3pdisc-spec-errorhandling" numbered="true" toc="defau | |||
| <section anchor="sec.3pdisc-spec-errorhandling" | lt"> | |||
| title="Error Handling"> | <name>Error Handling</name> | |||
| <t>The ALTO Cross-Domain Server Discovery Procedure may fail | ||||
| <t>The ALTO Cross-Domain Server Discovery Procedure may fail | ||||
| for several reasons.</t> | for several reasons.</t> | |||
| <t>If the procedure is called with syntactically invalid | ||||
| <t>If the procedure is called with syntactically invalid | parameters or unsupported parameter values (in particular, the | |||
| parameters or unsupported parameter values (in particular the | prefix length L; see <xref target="sec.3pdisc-spec-step1" format="de | |||
| prefix length L, see <xref target="sec.3pdisc-spec-step1"/>), | fault"/>), | |||
| the procedure aborts, no URI list will be returned and | the procedure aborts, no URI list will be returned, and | |||
| the error has to be reported to the caller.</t> | the error has to be reported to the caller.</t> | |||
| <t>The procedure performs one or more DNS lookups in a | ||||
| <t>The procedure performs one or more DNS lookups in a | ||||
| well-defined order (corresponding to descending prefix lengths, | well-defined order (corresponding to descending prefix lengths, | |||
| see <xref target="sec.3pdisc-spec-step3"/>), until one produces | see <xref target="sec.3pdisc-spec-step3" format="default"/>) until o ne produces | |||
| a usable result. Each of these DNS | a usable result. Each of these DNS | |||
| lookups might not produce a usable result, either due to a | lookups might fail to produce a usable result, due to either a | |||
| normal condition (e.g., domain name exists, but no ALTO-specific | normal condition (e.g., a domain name exists, but no ALTO-specific | |||
| NAPTR resource records are associated with it), a permanent error | NAPTR resource records are associated with it), a permanent error | |||
| (e.g., non-existent domain name), or due to a temporary error | (e.g., nonexistent domain name), or a temporary error | |||
| (e.g., timeout). In all three | (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 | looked up, the procedure <bcp14>SHOULD</bcp14> immediately try to | |||
| next domain name (from column 4 in the table given in | look up the | |||
| <xref target="sec.3pdisc-spec-step3"/>). | next domain name (from Column 4 in the table given in | |||
| <xref target="sec.3pdisc-spec-step3" format="default"/>). | ||||
| Only after all domain names have been tried at least once, the | Only after all domain names have been tried at least once, the | |||
| procedure MAY retry those domain names that had caused temporary | procedure <bcp14>MAY</bcp14> retry those domain names that had cause d temporary | |||
| lookup errors.</t> | lookup errors.</t> | |||
| <t>Generally speaking, ALTO provides advisory | ||||
| <t>Generally speaking, ALTO provides advisory | information for the optimization of applications (peer-to-peer | |||
| information for the optimization of applications (e.g., | applications, overlay networks, etc.), but | |||
| peer-to-peer applications, overlay networks, etc.), but | ||||
| applications should not rely on the availability of such | applications should not rely on the availability of such | |||
| information for their basic functionality (see | information for their basic functionality (see | |||
| <xref target="RFC7285">Section 8.3.4.3 of RFC 7285</xref>). | <xref target="RFC7285" sectionFormat="of" section="8.3.4.3" />). | |||
| Consequently, the speedy detection of an ALTO server, even | Consequently, the speedy detection of an ALTO server, even | |||
| though it may give less accurate answers than other servers, or | though it may give less accurate answers than other servers, or | |||
| the quick realization that there is no suitable ALTO server, is | the quick realization that there is no suitable ALTO server, is | |||
| in general more preferable than causing long delays by retrying | in general preferable to causing long delays by retrying | |||
| failed queries. Nevertheless, the ALTO Cross-Domain Server | failed queries. | |||
| Discovery Procedure SHOULD inform its caller, if DNS queries | ||||
| have failed due to temporary errors and that retrying the | ||||
| discovery at a later point in time might give more accurate | ||||
| results. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| <section anchor="sec.xdom-usage" | Nevertheless, if DNS queries have failed due to temporary errors, the | |||
| title="Using the ALTO Protocol with Cross-Domain Server Discovery"> | ALTO Cross-Domain Server Discovery Procedure SHOULD inform its caller | |||
| that DNS queries have failed for that reason and that retrying the | ||||
| discovery at a later point in time might give more accurate results. | ||||
| <t>Based on a modular design principle, ALTO provides several ALTO | </t> | |||
| services, each consisting of a set of information resouces | </section> | |||
| </section> | ||||
| <section anchor="sec.xdom-usage" numbered="true" toc="default"> | ||||
| <name>Using the ALTO Protocol with Cross-Domain Server Discovery</name> | ||||
| <t>Based on a modular design principle, ALTO provides several ALTO | ||||
| services, each consisting of a set of information resources | ||||
| that can be accessed using the ALTO protocol. | that can be accessed using the ALTO protocol. | |||
| The information resources that are available at a specific | The information resources that are available at a specific | |||
| ALTO server are listed in its Information Resource Directory | ALTO server are listed in its Information Resource Directory | |||
| (IRD, see Section 9 of <xref target="RFC7285"/>). | (IRD, see <xref target="RFC7285" sectionFormat="of" section="9"/>). | |||
| The ALTO protocol specification defines the following ALTO | The ALTO protocol specification defines the following ALTO | |||
| services and their corresponding information resouces: | services and their corresponding information resources: | |||
| <list style="symbols"> | </t> | |||
| <t>Network and Cost Map Service, | <ul spacing="normal"> | |||
| see Section 11.2 of <xref target="RFC7285"/> | <li>Network and Cost Map Service, see <xref | |||
| </t> | target="RFC7285" sectionFormat="of" section="11.2"/> | |||
| <t>Map-Filtering Service, | </li> | |||
| see Section 11.3 of <xref target="RFC7285"/> | <li>Map-Filtering Service, see <xref target="RFC7285" | |||
| </t> | sectionFormat="of" section="11.3"/> | |||
| <t>Endpoint Property Service, | </li> | |||
| see Section 11.4 of <xref target="RFC7285"/> | <li>Endpoint Property Service, | |||
| </t> | see <xref target="RFC7285" | |||
| <t>Endpoint Cost Service, | sectionFormat="of" section="11.4"/> | |||
| see Section 11.5 of <xref target="RFC7285"/> | </li> | |||
| </t> | <li>Endpoint Cost Service, | |||
| </list> | see <xref target="RFC7285" | |||
| sectionFormat="of" section="11.5"/> | ||||
| </li> | ||||
| </ul> | ||||
| <t> | ||||
| The ALTO Cross-Domain Server Discovery Procedure is | The ALTO Cross-Domain Server Discovery Procedure is | |||
| most useful in conjunction with the Endpoint Property Service and | most useful in conjunction with the Endpoint Property Service and | |||
| the Endpoint Cost Service. However, for the sake of completeness, | the Endpoint Cost Service. However, for the sake of completeness, | |||
| possible interaction with all four services is discussed below. | possible interaction with all four services is discussed below. | |||
| Extension documents may specify further information resources; | Extension documents may specify further information resources; | |||
| however, these are out of scope of this document. | however, these are out of scope of this document. | |||
| </t> | </t> | |||
| <section anchor="sec.mapservice" numbered="true" toc="default"> | ||||
| <section anchor="sec.mapservice" title="Network and Cost Map Service"> | <name>Network and Cost Map Service</name> | |||
| <t> An ALTO client may invoke the ALTO Cross-Domain Server | ||||
| <t> An ALTO client may invoke the ALTO Cross-Domain Server | ||||
| Discovery Procedure (as specified in | Discovery Procedure (as specified in | |||
| <xref target="sec.3pdisc-spec"/>) for an IP address | <xref target="sec.3pdisc-spec" format="default"/>) for an IP add | |||
| or prefix "X" | ress | |||
| and get a list of one or more IRD URI(s), including | or prefix X | |||
| and get a list of one or more IRD URIs, including | ||||
| order and preference values: | order and preference values: | |||
| IRD_URIS_X = XDOMDISC(X,"ALTO:https"). The IRD(s) | IRD_URIS_X = XDOMDISC(X,"ALTO:https"). The IRD(s) | |||
| referenced by these URI(s) | referenced by these URIs | |||
| will always contain a network and a cost map, as these | will always contain a network and a cost map, as these | |||
| are mandatory information resources (see Section 11.2 | are mandatory information resources (see <xref | |||
| of <xref target="RFC7285"/>). However, the cost matrix | target="RFC7285" sectionFormat="of" section="11.2"/>). | |||
| However, the cost matrix | ||||
| may be very sparse. If, according to the network map, | may be very sparse. If, according to the network map, | |||
| PID_X is the PID that contains the IP address or prefix X, and | PID_X is the Provider-defined Identifier (PID; see <xref | |||
| PID_1, PID_2, PID_3, ... are other PIDS, the cost map | target="RFC7285" sectionFormat="of" section="5.1"/>) that contain | |||
| s the IP address or prefix X, and | ||||
| PID_1, PID_2, PID_3, ... are other PIDs, the cost map | ||||
| may look like this: | may look like this: | |||
| <figure> | </t> | |||
| <artwork><![CDATA[ | ||||
| From \ To PID_1 PID_2 PID_X PID_3 | <table anchor="PID"> | |||
| PID_1 | 92 | <name>Cost Map</name> | |||
| PID_2 | 6 | <thead> | |||
| PID_X | 46 3 1 19 | <tr> | |||
| PID_3 | 38 | <th>From</th> | |||
| ]]></artwork> | <th>To PID_1</th> | |||
| </figure> | <th>PID_2</th> | |||
| In this example, all cells outside column "X" and row "X" are | <th>PID_X</th> | |||
| <th>PID_3</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>PID_1</td> | ||||
| <td></td> | ||||
| <td></td> | ||||
| <td>92</td> | ||||
| <td></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>PID_2</td> | ||||
| <td></td> | ||||
| <td></td> | ||||
| <td>6</td> | ||||
| <td></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>PID_X</td> | ||||
| <td>46</td> | ||||
| <td>3</td> | ||||
| <td>1</td> | ||||
| <td>19</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>PID_3</td> | ||||
| <td></td> | ||||
| <td></td> | ||||
| <td>38</td> | ||||
| <td></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t> | ||||
| 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 <xref target="sec.ecs"/>. | Service, Cases 1 and 2 in <xref target="sec.ecs" format="default"/>. | |||
| Accessing cells that are neither in column "X" nor row "X" | Accessing cells that are neither in Column X nor Row X | |||
| may not yield useful results. | may not yield useful results. | |||
| </t> | </t> | |||
| <t>Trying to assemble a more densely populated cost map from several | ||||
| <t>Trying to assemble a more densely populated cost map from several | cost maps with this very sparse structure may be a nontrivial | |||
| cost maps with this very sparse structure may be a non-trivial | ||||
| task, as different ALTO servers may use different PID definitions | task, as different ALTO servers may use different PID definitions | |||
| (i.e., network maps) and incompatible scales for the costs, | (i.e., network maps) and incompatible scales for the costs, | |||
| in particular for the "routingcost" metric. | in particular for the "routingcost" metric. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section anchor="sec.mfs" numbered="true" toc="default"> | |||
| <name>Map-Filtering Service</name> | ||||
| <section anchor="sec.mfs"title="Map-Filtering Service"> | <t> An ALTO client may invoke the ALTO Cross-Domain Server | |||
| <t> An ALTO client may invoke the ALTO Cross-Domain Server | ||||
| Discovery Procedure (as specified in | Discovery Procedure (as specified in | |||
| <xref target="sec.3pdisc-spec"/>) for an IP address | <xref target="sec.3pdisc-spec" format="default"/>) for an IP add | |||
| or prefix "X" | ress | |||
| and get a list of one or more IRD URI(s), including | or prefix X | |||
| and get a list of one or more IRD URIs, including | ||||
| order and preference values: | order and preference values: | |||
| IRD_URIS_X = XDOMDISC(X,"ALTO:https"). These IRD(s) | IRD_URIS_X = XDOMDISC(X,"ALTO:https"). These IRDs | |||
| may provide the optional Map-Filtering Service | may provide the optional Map-Filtering Service | |||
| (see Section 11.3 of <xref target="RFC7285"/>). | (see <xref target="RFC7285" sectionFormat="of" | |||
| section="11.3"/>). | ||||
| This service returns a subset of the full map, | This service returns a subset of the full map, | |||
| as specified by the client. As discussed in | as specified by the client. As discussed in | |||
| <xref target="sec.mapservice"/>, a cost map may | <xref target="sec.mapservice" format="default"/>, a cost map may | |||
| be very sparse in the envisioned deployment scenario. | be very sparse in the envisioned deployment scenario. | |||
| Therefore, depending on the filtering criteria provided | Therefore, depending on the filtering criteria provided | |||
| by the client, this service may return results similar | by the client, this service may return results similar | |||
| to the Endpoint Cost Service, or it may not return any | to the Endpoint Cost Service, or it may not return any | |||
| useful result. | useful result. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="sec.eps" numbered="true" toc="default"> | ||||
| <section anchor="sec.eps" title="Endpoint Property Service"> | <name>Endpoint Property Service</name> | |||
| <t> | <t> | |||
| If an ALTO client wants to query an Endpoint Property Service | If an ALTO client wants to query an Endpoint Property Service | |||
| (see <xref target="RFC7285">Section 11.4 of RFC 7285</xref>) | (see <xref target="RFC7285" sectionFormat="of" section="11.4" /> | |||
| about an endpoint with IP address "X" or a group of endpoints | ) | |||
| within IP prefix "X", respectively, it has to | about an endpoint with IP address X or a group of endpoints | |||
| within IP prefix X, respectively, it has to | ||||
| invoke the ALTO Cross-Domain Server Discovery Procedure | invoke the ALTO Cross-Domain Server Discovery Procedure | |||
| (as specified in <xref target="sec.3pdisc-spec"/>): | (as specified in <xref target="sec.3pdisc-spec" format="default" />): | |||
| IRD_URIS_X = XDOMDISC(X,"ALTO:https"). | IRD_URIS_X = XDOMDISC(X,"ALTO:https"). | |||
| The result IRD_URIS_X is a list of one or more URIs of | The result, IRD_URIS_X, is a list of one or more URIs of | |||
| Information Resource Directories | Information Resource Directories | |||
| (IRD, see Section 9 of <xref target="RFC7285"/>). | (IRDs, see <xref target="RFC7285" | |||
| sectionFormat="of" section="9"/>). | ||||
| Considering the order and preference values, the client has | Considering the order and preference values, the client has | |||
| to check these IRDs for a suitable Endpoint Property Service | to check these IRDs for a suitable Endpoint Property Service | |||
| and query it. | and query it. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the ALTO client wants to do a similar Endpoint Property | If the ALTO client wants to do a similar Endpoint Property | |||
| query for a different IP address or prefix "Y", the whole | query for a different IP address or prefix "Y", the whole | |||
| procedure has to be repeated, as IRD_URIS_Y = | procedure has to be repeated, as IRD_URIS_Y = | |||
| XDOMDISC(Y,"ALTO:https") may yield a different list of IRD | XDOMDISC(Y,"ALTO:https") may yield a different list of IRD | |||
| URIs. Of course, the results of individual DNS queries may | URIs. Of course, the results of individual DNS queries may | |||
| be cached as indicated by their respective time-to-live | be cached as indicated by their respective time-to-live | |||
| (TTL) values. | (TTL) values. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="sec.ecs" numbered="true" toc="default"> | ||||
| <section anchor="sec.ecs" title="Endpoint Cost Service"> | <name>Endpoint Cost Service</name> | |||
| <t> | <t> | |||
| The optional ALTO Endpoint Cost Service (ECS, | The optional ALTO Endpoint Cost Service (ECS; | |||
| see <xref target="RFC7285">Section 11.5 of RFC 7285</xref>) | see <xref target="RFC7285" sectionFormat="of" section="11.5" />) | |||
| provides information about costs between individual endpoints | provides information about costs between individual endpoints | |||
| and it also supports ranking. | and also supports ranking. | |||
| The ECS allows that endpoints may be denoted by IP | The ECS allows endpoints to be denoted by IP | |||
| addresses or prefixes. | addresses or prefixes. | |||
| The ECS is called with a list of | The ECS is called with a list of | |||
| one or more source IP addresses or prefixes, which we will call | one or more source IP addresses or prefixes, which we will call | |||
| (S1, S2, S3, ...), and a list of one or more destination | (S1, S2, S3, ...), and a list of one or more destination | |||
| IP addresses or prefixes, called (D1, D2, D3, ...). | IP addresses or prefixes, called (D1, D2, D3, ...). | |||
| </t> | </t> | |||
| <t>This specification distinguishes several cases, regarding | ||||
| <t>This specification distinguishes several cases, regarding | ||||
| the number of elements in the list of source and destination | the number of elements in the list of source and destination | |||
| addresses, respectively: | addresses, respectively: | |||
| <list style="numbers"> | </t> | |||
| <ol spacing="normal" type="1"> | ||||
| <t>Exactly one source address S1 and more than one | <li> | |||
| destination addresses D1, D2, D3, ... In this case, | <t>Exactly one source address S1 and more than one | |||
| destination addresses (D1, D2, D3, ...). In this case, | ||||
| the ALTO client has to invoke the ALTO Cross-Domain | the ALTO client has to invoke the ALTO Cross-Domain | |||
| Server Discovery Procedure (as specified in | Server Discovery Procedure (as specified in | |||
| <xref target="sec.3pdisc-spec"/>) with that single | <xref target="sec.3pdisc-spec" format="default"/>) with that single | |||
| source address as a parameter: | source address as a parameter: | |||
| IRD_URIS_S1 = XDOMDISC(S1,"ALTO:https"). | IRD_URIS_S1 = XDOMDISC(S1,"ALTO:https"). | |||
| The result IRD_URIS_S1 is a list of one or more URIs of | The result, IRD_URIS_S1, is a list of one or more URIs of | |||
| Information Resource Directories | Information Resource Directories | |||
| (IRD, see Section 9 of <xref target="RFC7285"/>). | (IRDs, see <xref target="RFC7285" | |||
| sectionFormat="of" section="9"/>). | ||||
| Considering the order and preference values, the client has | Considering the order and preference values, the client has | |||
| to check these IRDs for a suitable Endpoint Cost Service | to check these IRDs for a suitable Endpoint Cost Service | |||
| and query it. The ECS is an optional service (see | and query it. The ECS is an optional service (see | |||
| <xref target="RFC7285">Section 11.5.1 of RFC 7285</xref>) | <xref target="RFC7285" sectionFormat="of" section="11.5.1" | |||
| and therefore, it may well be that an IRD does not | />), and therefore, it may well be that an IRD does not | |||
| refer to an ECS. | refer to an ECS. | |||
| <vspace blankLines="1"/> <!-- new paragraph within | </t> | |||
| the same item of the numbered list --> | <t> | |||
| Calling the Cross-Domain Server Discovery Procedure | Calling the Cross-Domain Server Discovery Procedure | |||
| only once with the single source address as a parameter | only once with the single source address as a parameter | |||
| - as opposed to multiple calls, e.g., one for each | -- as opposed to multiple calls, e.g., one for each | |||
| destination address - is not only a matter of efficiency. | destination address -- is not only a matter of efficiency. | |||
| In the given scenario, it is advisable to send all | In the given scenario, it is advisable to send all | |||
| ECS queries to the same ALTO server. This ensures that | ECS queries to the same ALTO server. This ensures that | |||
| the results can be compared (e.g., for sorting | the results can be compared (e.g., for sorting | |||
| candidate resource providers), even with | candidate resource providers), even when | |||
| cost metrics without a well-defined base unit, e.g., | cost metrics lack a well-defined base unit -- e.g., | |||
| the "routingcost" metric. | the "routingcost" metric. | |||
| </t> | </t> | |||
| </li> | ||||
| <t>More than one source addresses S1, S2, S3, ... | <li>More than one source address (S1, S2, S3, ...) | |||
| and exactly one destination address D1. In this case, | and exactly one destination address D1. In this case, | |||
| the ALTO client has to invoke the ALTO Cross-Domain | the ALTO client has to invoke the ALTO Cross-Domain | |||
| Server Discovery Procedure with that single | Server Discovery Procedure with that single | |||
| destination address as a parameter: | destination address as a parameter: | |||
| IRD_URIS_D1 = XDOMDISC(D1,"ALTO:https"). | IRD_URIS_D1 = XDOMDISC(D1,"ALTO:https"). | |||
| The result IRD_URIS_D1 is a list of one or more URIs of | The result, IRD_URIS_D1, is a list of one or more URIs of | |||
| IRDs. | IRDs. | |||
| Considering the order and preference values, the client has | Considering the order and preference values, the client has | |||
| to check these IRDs for a suitable ECS and query it. | to check these IRDs for a suitable ECS and query it. | |||
| </t> | </li> | |||
| <li>Exactly one source address S1 | ||||
| <t>Exactly one source address S1 | ||||
| and exactly one destination address D1. | and exactly one destination address D1. | |||
| The ALTO client may perform the same steps as in | The ALTO client may perform the same steps as in | |||
| case 1, as specified above. As an alternative, | Case 1, as specified above. As an alternative, | |||
| it may also perform the same steps as in | it may also perform the same steps as in | |||
| case 2, as specified above. | Case 2, as specified above. | |||
| </t> | </li> | |||
| <li>More than one source address (S1, S2, S3, ...) | ||||
| <t>More than one source addresses S1, S2, S3, ... | and more than one destination address (D1, D2, D3, ...). | |||
| and more than one destination addresses D1, D2, D3, ... | ||||
| In this case, the ALTO client should split the | In this case, the ALTO client should split the | |||
| list of desired queries based on source addresses and perfor m separately | list of desired queries based on source addresses and perfor m separately | |||
| for each source address the same steps as in case 1, | for each source address the same steps as in Case 1, | |||
| as specified above. As an alternative, the ALTO | as specified above. As an alternative, the ALTO | |||
| client may also group the list based on destination | client may also group the list based on destination | |||
| addresses and perform separately for each destination | addresses and perform separately for each destination | |||
| address the same steps as in case 2, as specified | address the same steps as in Case 2, as specified | |||
| above. However, comparing results between these | above. However, comparing results between these | |||
| sub-queries may be difficult, in particular if | subqueries may be difficult, in particular if | |||
| the cost metric is a relative preference without | the cost metric is a relative preference without | |||
| a well-defined base unit (e.g., the "routingcost" | a well-defined base unit (e.g., the "routingcost" | |||
| metric). | metric). | |||
| </t> | </li> | |||
| </ol> | ||||
| </list> | <t> | |||
| See <xref target="apx.alto_p2p"/> for a | See <xref target="apx.alto_p2p" format="default"/> for a | |||
| detailed example showing the interaction of a | detailed example showing the interaction of a | |||
| tracker-based peer-to-peer application, the ALTO | tracker-based peer-to-peer application, the ALTO | |||
| Endpoint Cost Service, and the ALTO Cross-Domain | Endpoint Cost Service, and the ALTO Cross-Domain | |||
| Server Discovery Procedure. | Server Discovery Procedure. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section anchor="sec.ext" numbered="true" toc="default"> | |||
| <name>Summary and Further Extensions</name> | ||||
| <section anchor="sec.ext" title="Summary and Further Extensions"> | <t>Considering the four services defined in the ALTO base | |||
| protocol specification <xref target="RFC7285" format="default"/>, th | ||||
| <t>Considering the four services defined in the ALTO base | e | |||
| protocol specification <xref target="RFC7285"/>, the | ||||
| ALTO Cross-Domain Server Discovery Procedure works | ALTO Cross-Domain Server Discovery Procedure works | |||
| best with the Endpoint Property Service (EPS) and the | best with the Endpoint Property Service (EPS) and the | |||
| Endpoint Cost Service (ECS). Both the EPS and the ECS | Endpoint Cost Service (ECS). Both the EPS and the ECS | |||
| take one or more IP addresses as a parameter. The previous | take one or more IP addresses as a parameter. The previous | |||
| sections specify how the parameter for calling the | sections specify how the parameter for calling the | |||
| ALTO Cross-Domain Server Discovery Procedure has to be | ALTO Cross-Domain Server Discovery Procedure has to be | |||
| derived from these IP adresses.</t> | derived from these IP addresses.</t> | |||
| <t>In contrast, the ALTO Cross-Domain Server Discovery Procedure | ||||
| <t>In contrast, the ALTO Cross-Domain Server Discovery Procedure | ||||
| seems less useful if the goal is to retrieve network and cost | seems less useful if the goal is to retrieve network and cost | |||
| maps that cover the whole network topology. However, the | maps that cover the whole network topology. However, the | |||
| procedure may be useful if a map centered at a specific | procedure may be useful if a map centered at a specific | |||
| IP address is desired (i.e., a map detailing the vicinity | IP address is desired (i.e., a map detailing the vicinity | |||
| of said IP address or a map giving costs from said IP address | of said IP address or a map giving costs from said IP address | |||
| to all potential destinations).</t> | to all potential destinations).</t> | |||
| <t>The interaction between further ALTO services (and their | ||||
| <t>The interaction between further ALTO services (and their | ||||
| corresponding information resources) needs to be investigated | corresponding information resources) needs to be investigated | |||
| and defined once such further ALTO services are specified | and defined once such further ALTO services are specified | |||
| in an extension document.</t> | in an extension document.</t> | |||
| </section> | ||||
| </section> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Implementation, Deployment, and Operational Considerations"> | <name>Implementation, Deployment, and Operational Considerations</name> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Considerations for ALTO Clients"> | <name>Considerations for ALTO Clients</name> | |||
| <section anchor="sec.rcid" numbered="true" toc="default"> | ||||
| <section anchor="sec.rcid" title="Resource Consumer Initiated Discov | <name>Resource-Consumer-Initiated Discovery</name> | |||
| ery"> | <t>Resource-consumer-initiated | |||
| <t>Resource consumer initiated | ||||
| ALTO server discovery | ALTO server discovery | |||
| (c.f. ALTO requirement AR-32 <xref target="RFC6708"/>) | (cf. ALTO requirement AR-32 <xref target="RFC6708" format=" default"/>) | |||
| can be seen as a special case of | can be seen as a special case of | |||
| cross-domain ALTO server discovery. To that end, an ALTO | cross-domain ALTO server discovery. To that end, an ALTO | |||
| client embedded in a resource consumer would have to | client embedded in a resource consumer would have to | |||
| perform the ALTO Cross-Domain Server Discovery Procedure | perform the ALTO Cross-Domain Server Discovery Procedure | |||
| with its own IP address as a parameter. | 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 | Translators (NATs), additional protocols and mechanisms such | |||
| as STUN <xref target="RFC5389"/> are usually needed to | as Session Traversal Utilities for NAT (STUN) <xref | |||
| detect the client's "public" IP address, before it can | target="RFC5389" format="default"/> are usually needed to | |||
| be used as a parameter to the discovery procedure. | detect the client's "public" IP address before it can | |||
| be used as a parameter for the discovery procedure. | ||||
| Note that a different approach for | Note that a different approach for | |||
| resource consumer initiated ALTO server discovery, | resource-consumer-initiated ALTO server discovery, | |||
| which is based on DHCP, is | which is based on DHCP, is | |||
| specified in | specified in | |||
| <xref target="RFC7286"/>.</t> | <xref target="RFC7286" format="default"/>.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IPv4/v6 Dual Stack, Multihoming and | <name>IPv4/v6 Dual Stack, Multihoming and Host Mobilit | |||
| Host Mobility"> | y</name> | |||
| <t>The procedure specified in this document can discover | ||||
| <t>The procedure specified in this document can discover | ||||
| ALTO server URIs for a given IP address or prefix. | ALTO server URIs for a given IP address or prefix. | |||
| The intention is, that a third party (e.g., a | The intention is that a third party (e.g., a | |||
| resource directory) that receives query messages from | resource directory) that receives query messages from | |||
| a resource consumer can use the source address in | a resource consumer can use the source address in | |||
| these messages to discover suitable ALTO servers for this | these messages to discover suitable ALTO servers for this | |||
| specific resource consumer.</t> | specific resource consumer.</t> | |||
| <t>However, resource consumers (as defined in | ||||
| <t>However, resource consumers (as defined in Section 2 of | <xref target="RFC5693" format="default" sectionFormat="of" | |||
| <xref target="RFC5693"/>) may reside on hosts with more than | section="2"/>) may reside on hosts with more than | |||
| one IP address, e.g., due to IPv4/v6 dual stack operation | one IP address -- for example, due to IPv4/v6 dual stack operati | |||
| on | ||||
| and/or multihoming. | and/or multihoming. | |||
| IP packets sent with different source addresses may be | IP packets sent with different source addresses may be | |||
| subject to different routing policies and path costs. In | subject to different routing policies and path costs. In | |||
| some deployment scenarios, it may even be required to ask | some deployment scenarios, it may even be required to ask | |||
| different sets of ALTO servers for guidance. | different sets of ALTO servers for guidance. | |||
| Furthermore, source addresses in IP packets may be modified | Furthermore, source addresses in IP packets may be modified | |||
| en-route by Network Address Translators (NAT). | en route by Network Address Translators (NATs). | |||
| </t> | </t> | |||
| <t>If a resource consumer queries a resource directory for | ||||
| <t>If a resource consumer queries a resource directory for | ||||
| candidate resource providers, the locally selected (and | candidate resource providers, the locally selected (and | |||
| possibly en-route | possibly en-route-translated) source address of the query | |||
| translated) source address of the query message - as | message -- as | |||
| observed by the resource directory - will become the | observed by the resource directory -- will become the | |||
| basis for the ALTO server discovery and the subsequent | basis for the ALTO server discovery and the subsequent | |||
| optimization of the resource directory's reply. If, | optimization of the resource directory's reply. If, | |||
| however, the resource consumer then selects different source | however, the resource consumer then selects different source | |||
| addresses to contact returned resource providers, the | addresses to contact returned resource providers, the | |||
| desired better-than-random "ALTO effect" may not | desired better-than-random "ALTO effect" may not | |||
| occur.</t> | occur.</t> | |||
| <t>One solution approach for this problem is that | ||||
| <t>One solution approach for this problem is, that | a dual-stack or multihomed resource consumer could | |||
| a dual stack or multihomed resource consumer could | ||||
| always use the same address for contacting the | always use the same address for contacting the | |||
| resource directory and all resource providers, thus | resource directory and all resource providers, thus | |||
| overriding the operating system's automatic source | overriding the operating system's automatic selection of | |||
| IP address selection. For example, when using the | source IP addresses. | |||
| For example, when using the | ||||
| BSD socket API, one could always bind() the socket to one of | BSD socket API, one could always bind() the socket to one of | |||
| the local IP addresses before trying to connect() to the | the local IP addresses before trying to connect() to the | |||
| resource directory or the resource providers, respectively. | resource directory or the resource providers, respectively. | |||
| Another solution approach is to perform ALTO-influenced | Another solution approach is to perform ALTO-influenced | |||
| resource provider selection (and source address selection) | resource provider selection (and source-address selection) | |||
| locally in the resource consumer, | locally in the resource consumer, | |||
| in addition to or instead of performing it in the resource | in addition to, or instead of, performing it in the resource | |||
| directory. See <xref target="sec.rcid"/> for a discussion | directory. See <xref target="sec.rcid" format="default"/> for | |||
| a discussion of | ||||
| how to discover ALTO servers for local usage in the | how to discover ALTO servers for local usage in the | |||
| resource consumer.</t> | resource consumer.</t> | |||
| <t>Similarly, resource | ||||
| <t>Similarly, resource | consumers on mobile hosts <bcp14>SHOULD</bcp14> query the resour | |||
| consumers on mobile hosts SHOULD query the resource | ce | |||
| directory again after a change of IP address, in order to | directory again after a change of IP address, in order to | |||
| get a list of candidate resource providers that is optimized | get a list of candidate resource providers that is optimized | |||
| for the new IP address. | for the new IP address. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Interaction with Network Address Translation"> | <name>Interaction with Network Address Translation</name> | |||
| <t>The ALTO Cross-Domain Server Discovery Procedure has | ||||
| <t>The ALTO Cross-Domain Server Discovery Procedure has | ||||
| been designed to enable the ALTO-based optimization | been designed to enable the ALTO-based optimization | |||
| of applications such as large-scale overlay networks, that | of applications such as large-scale overlay networks, that | |||
| span - on the IP layer - multiple adminstrative domains, | span -- on the IP layer -- multiple administrative domains, | |||
| possibly the whole Internet. | possibly the whole Internet. | |||
| Due to the widespread usage of Network Address Translators | Due to the widespread usage of Network Address Translators | |||
| (NAT) it may well be that nodes of the overlay network | (NATs), it may well be that nodes of the overlay network | |||
| (i.e., resource consumers or resource providers) are located | (i.e., resource consumers or resource providers) are located | |||
| behind a NAT, maybe even behind several cascaded NATs.</t> | behind a NAT, maybe even behind several cascaded NATs.</t> | |||
| <t>If a resource directory is located in the public Internet | ||||
| <t>If a resource directory is located in the public Internet | (i.e., not behind a NAT) and | |||
| (i.e., not behind a NAT) and if it | ||||
| receives a message from a resource consumer behind one or | receives a message from a resource consumer behind one or | |||
| more NATs, the message's source address will be the | more NATs, the message's source address will be the | |||
| public IP address of the outermost NAT in front of the | public IP address of the outermost NAT in front of the | |||
| resource consumer. The same applies if the resource | resource consumer. The same applies if the resource | |||
| directory is behind a different NAT than the resource | directory is behind a different NAT than the resource | |||
| consumer. The resource directory may call the | consumer. The resource directory may call the | |||
| ALTO Cross-Domain Server Discovery Procedure with the | ALTO Cross-Domain Server Discovery Procedure with the | |||
| message's source address as a parameter. In effect, | message's source address as a parameter. In effect, | |||
| not the resource consumer's (private) IP address, but | not the resource consumer's (private) IP address, but | |||
| the public IP address of the outermost NAT in front of it | the public IP address of the outermost NAT in front of it, | |||
| will be used as a basis for ALTO-optimization. This will | will be used as a basis for ALTO optimization. This will | |||
| work fine as long as the network behind the NAT is not too | work fine as long as the network behind the NAT is not too | |||
| big (e.g., if the NAT is in a residential gateway). | big (e.g., if the NAT is in a residential gateway). | |||
| </t> | </t> | |||
| <t>If a resource directory receives a message from a resource | ||||
| <t>If a resource directory receives a message from a resource | ||||
| consumer and the message's source address is a "private" | consumer and the message's source address is a "private" | |||
| IP address <xref target="RFC1918"/>, this may be a sign | IP address <xref target="RFC1918" format="default"/>, this may b | |||
| that both of them are behind the same NAT. An invokation | e a sign | |||
| that both of them are behind the same NAT. An invocation | ||||
| of the ALTO Cross-Domain Server Discovery Procedure with | of the ALTO Cross-Domain Server Discovery Procedure with | |||
| this private address may be problematic, as this will only | this private address may be problematic, as this will only | |||
| yield usable results if a DNS "split horizon" and DNSSEC | yield usable results if a DNS "split horizon" and DNSSEC | |||
| trust anchors are configured correctly. In this situation | trust anchors are configured correctly. In this situation, | |||
| it may be more advisable to query an ALTO server that has | it may be more advisable to query an ALTO server that has | |||
| been discovered using <xref target="RFC7286"/> or any | been discovered using <xref target="RFC7286" format="default"/> or any | |||
| other local configuration. | other local configuration. | |||
| The interaction between intra-domain ALTO for | The interaction between intradomain ALTO for | |||
| large private domains (e.g., behind a "carrier-grade NAT") | large private domains (e.g., behind a "carrier-grade NAT") | |||
| and cross-domain, Internet-wide optimization, is beyond | and cross-domain, Internet-wide optimization, is beyond | |||
| the scope of this document. | the scope of this document. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | </section> | |||
| </section> | ||||
| <section title="Considerations for Network Operators"> | <section numbered="true" toc="default"> | |||
| <name>Considerations for Network Operators</name> | ||||
| <section title="Flexibility vs. Load on the DNS"> | <section numbered="true" toc="default"> | |||
| <name>Flexibility vs. Load on the DNS</name> | ||||
| <t>The ALTO Cross-Domain Server Discovery Procedu | <t>The ALTO Cross-Domain Server Discovery Procedure, as | |||
| re, as | specified in <xref target="sec.3pdisc-spec" | |||
| specified in <xref target="sec.3pdisc-spec"/>, fi | format="default"/>, first | |||
| rst | produces a list of domain names (Steps 1 and 2) and | |||
| produces a list of domain names (steps 1 and 2) and | ||||
| then looks for relevant NAPTR records associated with | then looks for relevant NAPTR records associated with | |||
| these names, until a useful result can be found (step 3). | these names, until a useful result can be found (Step 3). | |||
| The number of candidate domain names on this | The number of candidate domain names on this | |||
| list is a compromise between flexibility when installing | list is a compromise between flexibility when installing | |||
| NAPTR records and avoiding excess load on the DNS. | NAPTR records and avoiding excess load on the DNS. | |||
| </t> | </t> | |||
| <t>A single invocation of the ALTO Cross-Domain Server | ||||
| <t>A single invocation of the ALTO Cross-Domain Server | ||||
| Discovery Procedure, with an IPv6 address as a parameter, may | Discovery Procedure, with an IPv6 address as a parameter, may | |||
| cause up to, but no more than, six DNS lookups for NAPTR | cause up to, but no more than, six DNS lookups for NAPTR | |||
| records. For IPv4, the maximum is four lookups. | records. For IPv4, the maximum is four lookups. | |||
| Should the load on the DNS infrastructure caused by these | Should the load on the DNS infrastructure caused by these | |||
| lookups become a problem, one solution approach is to | lookups become a problem, one solution approach is to | |||
| actually populate the DNS with ALTO-specific NAPTR records. | populate the DNS with ALTO-specific NAPTR records. | |||
| If such records can be found for individual IP addresses | If such records can be found for individual IP addresses | |||
| (possibly installed using a wildcarding mechanism in | (possibly installed using a wildcarding mechanism in | |||
| the name server) or for long prefixes, the | the name server) or long prefixes, the | |||
| procedure will terminate successfully and not perform | procedure will terminate successfully and not perform | |||
| lookups for shorter prefix lengths, thus reducing the | lookups for shorter prefix lengths, thus reducing the | |||
| total number of DNS queries. | total number of DNS queries. | |||
| Another approach for reducing the load on the DNS | Another approach for reducing the load on the DNS | |||
| infrastructure is to increase the TTL for caching negative | infrastructure is to increase the TTL for caching negative | |||
| answers.</t> | answers.</t> | |||
| <t>On the other hand, the ALTO Cross-Domain Server Discovery | ||||
| <t>On the other hand, the ALTO Cross-Domain Server Discovery | Procedure trying to look up truncated domain names allows for | |||
| Procedure trying to lookup truncated domain names allows for | ||||
| efficient configuration of large-scale scenarios, where | efficient configuration of large-scale scenarios, where | |||
| discovery is to be enabled for a large number of IP | discovery is to be enabled for a large number of IP | |||
| addresses with a small number of additional DNS resource | addresses with a small number of additional DNS resource | |||
| records. | records. | |||
| Note that expressly, it has not been a design goal of this | Note that it expressly has not been a design goal of this | |||
| procedure to give clients a means to understand the IP | procedure to give clients a means of understanding the IP | |||
| prefix delegation structure. Furthermore, this specification | prefix delegation structure. Furthermore, this specification | |||
| does not assume or reccomend that prefix delegations should | does not assume or recommend that prefix delegations should | |||
| preferrably occur at those prefix lengths that are used | preferably occur at those prefix lengths that are used | |||
| in Step 2 of this procedure | in Step 2 of this procedure | |||
| (see <xref target="sec.3pdisc-spec-step2"/>). | (see <xref target="sec.3pdisc-spec-step2" format="default"/>). | |||
| A network operator that uses, for example, an IPv4 /18 | A network operator that uses, for example, an IPv4 /18 | |||
| prefix and wants to install the NAPTR records efficiently, | prefix and wants to install the NAPTR records efficiently | |||
| could either install 64 NAPTR records (one for each of the | could either install 64 NAPTR records (one for each of the | |||
| /24 prefixes contained within the /18 prefix), or they could | /24 prefixes contained within the /18 prefix), or they could | |||
| try to team up with the owners of the other fragments of the | try to team up with the owners of the other fragments of the | |||
| enclosing /16 prefix, in order to run a common ALTO server | enclosing /16 prefix, in order to run a common ALTO server | |||
| to which only one NAPTR would point.</t> | to which only one NAPTR would point.</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>BCP 20 and Missing Delegations of the Reverse DNS</name> | ||||
| <section title="BCP20 and missing delegations of the reverse DNS"> | <t><xref target="RFC2317" format="default"/>, also known as BCP 20, | |||
| <t>RFC2317 <xref target="RFC2317"/>, also known as BCP20, | ||||
| describes a way to delegate the "reverse DNS" (i.e., | describes a way to delegate the "reverse DNS" (i.e., | |||
| subdomains of in-addr.arpa.) for IPv4 address ranges | subdomains of "in-addr.arpa.") for IPv4 address ranges | |||
| with fewer than 256 addresses (i.e., less than a whole | with fewer than 256 addresses (i.e., less than a whole | |||
| /24 prefix). The ALTO Cross-Domain Server Discovery procedure | /24 prefix). The ALTO Cross-Domain Server Discovery Procedure | |||
| is compatible with this method.</t> | is compatible with this method.</t> | |||
| <t>In some deployment scenarios -- e.g., residential Internet | ||||
| <t>In some deployment scenarios, e.g., residential Internet | access -- where customers often dynamically receive a single | |||
| access, where customers often dynamically receive a single | ||||
| IPv4 address (and/or a small IPv6 address block) from a pool | IPv4 address (and/or a small IPv6 address block) from a pool | |||
| of addresses, ISPs typically will not delegate the "reverse | of addresses, ISPs typically will not delegate the "reverse | |||
| DNS" to their customers. This practice makes it impossible | DNS" to their customers. This practice makes it impossible | |||
| for these customers to populate the DNS with NAPTR resource | for these customers to populate the DNS with NAPTR resource | |||
| records that point to an ALTO server of their choice. Yet, | records that point to an ALTO server of their choice. Yet, | |||
| the ISP may publish NAPTR resource records in the | the ISP may publish NAPTR resource records in the | |||
| "reverse DNS" for individual addresses or larger | "reverse DNS" for individual addresses or larger | |||
| address pools (i.e., shorter prefix lengths).</t> | address pools (i.e., shorter prefix lengths).</t> | |||
| <t>While ALTO is by no means technologically tied | ||||
| <t>While ALTO is by no means technologically tied | ||||
| to the Border Gateway Protocol (BGP), | to the Border Gateway Protocol (BGP), | |||
| it is anticipated that BGP will be an important | it is anticipated that BGP will be an important | |||
| source of information for ALTO and that the operator of the | source of information for ALTO and that the operator of the | |||
| outermost BGP-enabled router will have a strong incentive to | outermost BGP-enabled router will have a strong incentive to | |||
| publish a digest of their routing policies and costs through | publish a digest of their routing policies and costs through | |||
| ALTO. In contrast, an individual user or an organization | ALTO. In contrast, an individual user or an organization | |||
| that has been assigned only a small address range | that has been assigned only a small address range | |||
| (i.e., an IPv4 prefix with a prefix length longer than /24) | (i.e., an IPv4 prefix with a prefix length longer than /24) | |||
| will typically connect to the Internet using only a single ISP, | will typically connect to the Internet using only a single ISP, | |||
| and they might not be interested in publishing their | and they might not be interested in publishing their | |||
| own ALTO information. Consequently, they might wish to leave | own ALTO information. Consequently, they might wish to leave | |||
| the operation of an ALTO server up to their ISP. | the operation of an ALTO server up to their ISP. | |||
| This ISP may install NAPTR resource records, which are | This ISP may install NAPTR resource records, which are | |||
| needed for the ALTO Cross-Domain Server Discovery procedure, | needed for the ALTO Cross-Domain Server Discovery Procedure, | |||
| in the subdomain of in-addr.arpa. that corresponds to | in the subdomain of "in-addr.arpa." that corresponds to | |||
| the whole /24 prefix (c.f., R24 in | the whole /24 prefix (cf. R24 in | |||
| <xref target="sec.3pdisc-spec-step2"/> of this document), | <xref target="sec.3pdisc-spec-step2" format="default"/> of this | |||
| even if BCP20-style | document), | |||
| delegations or no delegations at all are in use.</t> | even if delegations in the style of BCP 20 or no delegations | |||
| at all are in use.</t> | ||||
| </section> | ||||
| </section> | </section> | |||
| </section> | ||||
| </section> | </section> | |||
| <section anchor="seccons" numbered="true" toc="default"> | ||||
| <section anchor="seccons" title="Security Considerations"> | <name>Security Considerations</name> | |||
| <t>A high-level discussion of security issues related to ALTO | ||||
| <t>A high-level discussion of security issues related to ALTO | ||||
| is part of the ALTO problem statement | is part of the ALTO problem statement | |||
| <xref target="RFC5693"/>. A classification of unwanted | <xref target="RFC5693" format="default"/>. A classification of unwa nted | |||
| information disclosure risks, as well as specific | information disclosure risks, as well as specific | |||
| security-related requirements can be found in the ALTO | security-related requirements, can be found in the ALTO | |||
| requirements document <xref target="RFC6708"/>. | requirements document <xref target="RFC6708" format="default"/>. | |||
| </t> | </t> | |||
| <t>The remainder of this section focuses on security threats | ||||
| <t>The remainder of this section focuses on security threats | and protection mechanisms for the Cross-Domain ALTO Server Discovery | |||
| and protection mechanisms for the cross-domain ALTO server discovery | Procedure as such. Once the ALTO server's URI has been | |||
| procedure as such. Once the ALTO server's URI has been | discovered, and the communication between the ALTO client and | |||
| discovered and the communication between the ALTO client and | ||||
| the ALTO server starts, the security threats and protection | the ALTO server starts, the security threats and protection | |||
| mechanisms discussed in the ALTO protocol specification | mechanisms discussed in the ALTO protocol specification | |||
| <xref target="RFC7285"/> apply. | <xref target="RFC7285" format="default"/> apply. | |||
| </t> | </t> | |||
| <section anchor="sec.sec.integrity" numbered="true" toc="default"> | ||||
| <section anchor="sec.sec.integrity" | <name>Integrity of the ALTO Server's URI</name> | |||
| title="Integrity of the ALTO Server's URI"> | <dl newline="true" spacing="normal"> | |||
| <t><list style="hanging"> | <dt>Scenario Description</dt> | |||
| <t hangText="Scenario Description"> | <dd> | |||
| <vspace blankLines="0" /> | An attacker could compromise the ALTO server | |||
| An attacker could compromise the ALTO server | discovery procedure or the underlying infrastructure | |||
| discovery procedure or the underlying infrastructure | in such a way that ALTO clients would discover a "wrong" | |||
| in a way that ALTO clients would discover a "wrong" | ALTO server URI. | |||
| ALTO server URI. | </dd> | |||
| </t> | <dt>Threat Discussion</dt> | |||
| <t hangText="Threat Discussion"> | <dd> | |||
| <vspace blankLines="0" /> | The Cross-Domain ALTO Server Discovery Procedure | |||
| The cross-domain ALTO server discovery procedure | relies on a series of DNS lookups, in order to | |||
| relies on a series of DNS lookups, in order to | produce one or more URIs. | |||
| produce one or more URI(s). | If an attacker were able to modify or spoof any of | |||
| If an attacker was able to modify or spoof any of | the DNS records, the resulting | |||
| the DNS records, the resulting | URIs could be replaced by forged URIs. | |||
| URI(s) could be replaced by forged URI(s). | This is probably the most serious security | |||
| This is probably the most serious security | concern related to ALTO server discovery. The | |||
| concern related to ALTO server discovery. The | discovered "wrong" ALTO server might not be able | |||
| discovered "wrong" ALTO server might not be able | to give guidance to a given ALTO client at all, | |||
| to give guidance to a given ALTO client at all, | or it might give suboptimal or forged | |||
| or it might give suboptimal or forged | information. In the latter case, an attacker | |||
| information. In the latter case, an attacker | could try to use ALTO to affect the traffic | |||
| could try to use ALTO to affect the traffic | distribution in the network or the performance | |||
| distribution in the network or the performance | of applications (see also | |||
| of applications (see also Section 15.1. of | <xref target="RFC7285" format="default" | |||
| <xref target="RFC7285"/>). | sectionFormat="of" section="15.1"/>). | |||
| Furthermore, a hostile ALTO server could | Furthermore, a hostile ALTO server could | |||
| threaten user privacy (see also Section 5.2.1, | threaten user privacy (see also Case (5a) in <xref | |||
| case (5a) in <xref target="RFC6708"/>). | target="RFC6708" sectionFormat="of" section="5.2.1"/>). | |||
| </t> | </dd> | |||
| <dt>Protection Strategies and Mechanisms</dt> | ||||
| <t hangText="Protection Strategies and Mechanisms"> | <dd> | |||
| <vspace blankLines="0" /> | The application of DNS security (DNSSEC) | |||
| <xref target="RFC4033" format="default"/> provides a means of | ||||
| The application of DNS security (DNSSEC) | detecting and averting attacks that rely on modification | |||
| <xref target="RFC4033"/> provides a means to | of the DNS records while in transit. All | |||
| detect and avert attacks that rely on modification | implementations of the Cross-Domain ALTO Server | |||
| of the DNS records while in transit. All | Discovery Procedure <bcp14>MUST</bcp14> support DNSSEC or be able to | |||
| implementations of the cross-domain ALTO server | use such functionality provided by the underlying | |||
| discovery procedure MUST support DNSSEC or be able to | operating system. Network operators that publish | |||
| use such functionality provided by the underlying | U-NAPTR resource records to be used for the | |||
| operating system. Network operators that publish | Cross-Domain ALTO Server Discovery Procedure | |||
| U-NAPTR resource records to be used for the | <bcp14>SHOULD</bcp14> use DNSSEC to protect their subdomains | |||
| cross-domain ALTO server discovery procedure | of "in-addr.arpa." and/or "ip6.arpa.", respectively. | |||
| SHOULD use DNSSEC to protect their subdomains | Additional operational precautions for safely operating | |||
| of in-addr.arpa. and/or ip6.arpa., respectively. | the DNS infrastructure are required in order | |||
| Additional operational precautions for safely operating | to ensure that name servers do not sign forged | |||
| the DNS infrastructure are required in order | (or otherwise "wrong") resource records. | |||
| to ensure that name servers do not sign forged | Security considerations specific to U-NAPTR are | |||
| (or otherwise "wrong") resource records. | described in more detail in <xref target="RFC4848" format="default"/ | |||
| Security considerations specific to U-NAPTR are | >. | |||
| described in more detail in <xref target="RFC4848"/>. | </dd> | |||
| </t> | <dt/> | |||
| <t> | <dd> | |||
| In addition to active protection mechanisms, | In addition to active protection mechanisms, | |||
| users and network operators can monitor | users and network operators can monitor | |||
| application performance and network traffic | application performance and network traffic | |||
| patterns for poor performance or | patterns for poor performance or | |||
| abnormalities. If it turns out that relying on | abnormalities. If it turns out that relying on | |||
| the guidance of a specific ALTO server does not | the guidance of a specific ALTO server does not | |||
| result in better-than-random results, the usage | result in better-than-random results, the usage | |||
| of the ALTO server may be discontinued (see also | of the ALTO server may be discontinued (see also | |||
| Section 15.2 of <xref target="RFC7285"/>). | <xref target="RFC7285" | |||
| </t> | format="default" sectionFormat="of" section="15.2"/>). | |||
| <t hangText="Note"> | </dd> | |||
| <vspace blankLines="0" /> | <dt>Note</dt> | |||
| The cross-domain ALTO server discovery procedure | <dd> | |||
| finishes successfully when it has discovered one | The Cross-Domain ALTO Server Discovery Procedure | |||
| or more URI(s). Once an ALTO server's URI has been | finishes successfully when it has discovered one | |||
| discovered and the communication between the ALTO | or more URIs. Once an ALTO server's URI has been | |||
| client and the ALTO server starts, the security | discovered and the communication between the ALTO | |||
| threats and protection mechanisms discussed in the | client and the ALTO server starts, the security | |||
| ALTO protocol specification <xref target="RFC7285"/> | threats and protection mechanisms discussed in the | |||
| apply. | ALTO protocol specification <xref target="RFC7285" format="default"/ | |||
| </t> | > | |||
| <t> | apply. | |||
| A threat related to the one considered above is the | </dd> | |||
| impersonation of an ALTO server after its correct | <dt/> | |||
| URI has been discovered. This threat and protection | <dd> | |||
| strategies are discussed in Section 15.1 of | A threat related to the one considered above is the | |||
| <xref target="RFC7285"/>. | impersonation of an ALTO server after its correct | |||
| URI has been discovered. This threat and protection | ||||
| The ALTO protocol's primary mechanism for protecting | strategies are discussed in | |||
| authenticity and integrity (as well as confidentiality) | <xref target="RFC7285" format="default" | |||
| is the use of | sectionFormat="of" section="15.1"/>. | |||
| HTTPS-based transport, i.e., HTTP over TLS | ||||
| <xref target="RFC2818"/>. | ||||
| 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 communication with the server | ||||
| can begin. This last DNS lookup (for A or AAAA | ||||
| resource records) does not necessarily have to be | ||||
| protected by DNSSEC, as the server identity checks | ||||
| specified in <xref target="RFC2818"/> are able to | ||||
| detect DNS spoofing or similar attacks, after the | ||||
| connection to the (possibly wrong) host has been | ||||
| established. | ||||
| However, this validation, which is based on the | ||||
| server certificate, can only protect the steps that | ||||
| occur after the server URI has been discovered. | ||||
| It cannot detect attacks against the authenticity | ||||
| of the U-NAPTR lookups needed for the | ||||
| cross-domain ALTO server discovery procedure, | ||||
| and therefore, these resource records have to | ||||
| be secured using DNSSEC. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section title="Availability of the ALTO Server Discovery Procedure"> | The ALTO protocol's primary mechanism for protecting | |||
| <t><list style="hanging"> | authenticity and integrity (as well as confidentiality) | |||
| <t hangText="Scenario Description"> | is the use of | |||
| <vspace blankLines="0" /> | HTTPS-based transport -- i.e., HTTP over TLS | |||
| An attacker could compromise the cross-domain ALTO | <xref target="RFC2818" format="default"/>. | |||
| server discovery procedure or the underlying | ||||
| infrastructure in a way that ALTO clients would not | ||||
| be able to discover any ALTO server. | ||||
| </t> | ||||
| <t hangText="Threat Discussion"> | ||||
| <vspace blankLines="0" /> | ||||
| If no ALTO server can be discovered (although a | ||||
| suitable one exists) applications have to make | ||||
| their decisions without ALTO guidance. As ALTO | ||||
| could be temporarily unavailable for many | ||||
| reasons, applications must be prepared to do so. | ||||
| However, The resulting application performance | ||||
| and traffic distribution will correspond to a | ||||
| deployment scenario without ALTO. | ||||
| </t> | ||||
| <t hangText="Protection Strategies and Mechanisms"> | ||||
| <vspace blankLines="0" /> | ||||
| Operators should follow best current practices | ||||
| to secure their DNS and ALTO (see Section 15.5 of | ||||
| <xref target="RFC7285"/>) | ||||
| servers against Denial-of-Service (DoS) attacks. | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section title="Confidentiality of the ALTO Server's URI"> | Typically, when the URI's host component is a host | |||
| <t><list style="hanging"> | name, a further DNS lookup is needed to map it to an | |||
| <t hangText="Scenario Description"> | IP address before the communication with the server | |||
| <vspace blankLines="0"/> | can begin. This last DNS lookup (for A or AAAA | |||
| An unauthorized party could invoke the cross-domain ALTO | resource records) does not necessarily have to be | |||
| server discovery procedure, or intercept | protected by DNSSEC, as the server identity checks | |||
| discovery messages between an authorized ALTO | specified in <xref target="RFC2818" format="default"/> are able to | |||
| client and the DNS servers, in order to | detect DNS spoofing or similar attacks after the | |||
| acquire knowledge of the ALTO server URI for | connection to the (possibly wrong) host has been | |||
| a specific IP address. | established. | |||
| </t> | However, this validation, which is based on the | |||
| <t hangText="Threat Discussion"> | server certificate, can only protect the steps that | |||
| <vspace blankLines="0" /> | occur after the server URI has been discovered. | |||
| It cannot detect attacks against the authenticity | ||||
| of the U-NAPTR lookups needed for the | ||||
| Cross-Domain ALTO Server Discovery Procedure, | ||||
| and therefore, these resource records have to | ||||
| be secured using DNSSEC. | ||||
| </dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Availability of the ALTO Server Discovery Procedure</name> | ||||
| <dl newline="true" spacing="normal"> | ||||
| <dt>Scenario Description</dt> | ||||
| <dd> | ||||
| An attacker could compromise the Cross-Domain ALTO | ||||
| Server Discovery Procedure or the underlying | ||||
| infrastructure in such a way that ALTO clients would not | ||||
| be able to discover any ALTO server. | ||||
| </dd> | ||||
| <dt>Threat Discussion</dt> | ||||
| <dd> | ||||
| If no ALTO server can be discovered (although a | ||||
| suitable one exists), applications have to make | ||||
| their decisions without ALTO guidance. As ALTO | ||||
| could be temporarily unavailable for many | ||||
| reasons, applications must be prepared to do so. | ||||
| However, the resulting application performance | ||||
| and traffic distribution will correspond to a | ||||
| deployment scenario without ALTO. | ||||
| </dd> | ||||
| <dt>Protection Strategies and Mechanisms</dt> | ||||
| <dd> | ||||
| Operators should follow best current practices | ||||
| to secure their DNS and ALTO servers (see | ||||
| <xref target="RFC7285" format="default" | ||||
| sectionFormat="of" section="15.5"/>) | ||||
| against Denial-of-Service (DoS) attacks. | ||||
| </dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Confidentiality of the ALTO Server's URI</name> | ||||
| <dl newline="true" spacing="normal"> | ||||
| <dt>Scenario Description</dt> | ||||
| <dd> | ||||
| An unauthorized party could invoke the Cross-Domain ALTO | ||||
| Server Discovery Procedure or intercept | ||||
| discovery messages between an authorized ALTO | ||||
| client and the DNS servers, in order to | ||||
| acquire knowledge of the ALTO server URI for | ||||
| a specific IP address. | ||||
| </dd> | ||||
| <dt>Threat Discussion</dt> | ||||
| <dd> | ||||
| In the ALTO use cases that have been described | In the ALTO use cases that have been described | |||
| in the ALTO problem statement | in the ALTO problem statement | |||
| <xref target="RFC5693"/> and/or discussed in the | <xref target="RFC5693" format="default"/> and/or discuss ed in the | |||
| ALTO working group, the ALTO server's URI as | ALTO working group, the ALTO server's URI as | |||
| such has always been considered as public | such has always been considered as public | |||
| information that does not need protection of | information that does not need protection of | |||
| confidentiality. | confidentiality. | |||
| </t> | </dd> | |||
| <t hangText="Protection Strategies and Mechanisms"> | <dt>Protection Strategies and Mechanisms</dt> | |||
| <vspace blankLines="0" /> | <dd> | |||
| No protection mechanisms for this scenario have | No protection mechanisms for this scenario have | |||
| been provided, as it has not been identified as | been provided, as it has not been identified as | |||
| a relevant threat. However, if a new use case is | a relevant threat. However, if a new use case is | |||
| identified that requires this kind of | identified that requires this kind of | |||
| protection, the suitability of this ALTO server | protection, the suitability of this ALTO server | |||
| discovery procedure as well as possible security | discovery procedure as well as possible security | |||
| extensions have to be re-evaluated thoroughly. | extensions have to be re-evaluated thoroughly. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | </section> | |||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Privacy for ALTO Clients</name> | ||||
| <section title="Privacy for ALTO Clients"> | <dl newline="true" spacing="normal"> | |||
| <t><list style="hanging"> | <dt>Scenario Description</dt> | |||
| <t hangText="Scenario Description"> | <dd> | |||
| <vspace blankLines="0"/> | ||||
| An unauthorized party could eavesdrop on the | An unauthorized party could eavesdrop on the | |||
| messages between an ALTO client and the | messages between an ALTO client and the | |||
| DNS servers, and thereby find out the fact that | DNS servers and thereby find out the fact that | |||
| said ALTO client uses (or at least tries to use) | said ALTO client uses (or at least tries to use) | |||
| the ALTO service in order to optimize traffic | the ALTO service in order to optimize traffic | |||
| from/to a specific IP address. | from/to a specific IP address. | |||
| </t> | </dd> | |||
| <t hangText="Threat Discussion"> | <dt>Threat Discussion</dt> | |||
| <vspace blankLines="0" /> | <dd> | |||
| In the ALTO use cases that have been described | In the ALTO use cases that have been described | |||
| in the ALTO problem statement | in the ALTO problem statement | |||
| <xref target="RFC5693"/> and/or discussed in the | <xref target="RFC5693" format="default"/> and/or discuss ed in the | |||
| ALTO working group, this scenario has not been | ALTO working group, this scenario has not been | |||
| identified as a relevant threat. However, | identified as a relevant threat. However, | |||
| Pervasive Surveillance <xref target="RFC7624"/> | pervasive surveillance <xref target="RFC7624" | |||
| and DNS Privacy Considerations <xref target="RFC7626"/> | format="default"/> | |||
| and DNS privacy considerations <xref target="RFC7626" | ||||
| format="default"/> | ||||
| have seen significant attention in the Internet | have seen significant attention in the Internet | |||
| community in recent years. | community in recent years. | |||
| </t> | </dd> | |||
| <t hangText="Protection Strategies and Mechanisms"> | <dt>Protection Strategies and Mechanisms</dt> | |||
| <vspace blankLines="0" /> | <dd> | |||
| DNS over TLS <xref target="RFC7858"/> and | DNS over TLS <xref target="RFC7858" format="default"/> a | |||
| DNS over HTTPS <xref target="RFC8484"/> provide | nd | |||
| DNS over HTTPS <xref target="RFC8484" format="default"/> | ||||
| provide | ||||
| means for protecting confidentiality (and integrity) | means for protecting confidentiality (and integrity) | |||
| of DNS traffic between a client (stub) and its | of DNS traffic between a client (stub) and its | |||
| recursive name servers, including DNS queries | recursive name servers, including DNS queries | |||
| and replies caused by the ALTO Cross-Domain | and replies caused by the ALTO Cross-Domain | |||
| Server Discovery Procedure. | Server Discovery Procedure. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | </section> | |||
| </section> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <t>This document does not require any IANA action.</t> | <t>This document has no IANA actions.</t> | |||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | <displayreference target="I-D.kiesel-alto-alto4alto" to="ALTO4ALTO" /> | |||
| <?rfc include="reference.RFC.2119" ?> | <displayreference target="I-D.kiesel-alto-ip-based-srv-disc" to="ALTO-ANYCAST" / | |||
| <?rfc include="reference.RFC.3403" ?> | > | |||
| <?rfc include="reference.RFC.4848" ?> | ||||
| <?rfc include="reference.RFC.1035" ?> | ||||
| <?rfc include="reference.RFC.3596" ?> | ||||
| <?rfc include="reference.RFC.8174" ?> | ||||
| </references> | ||||
| <references title="Informative References"> | <references> | |||
| <?rfc include="reference.RFC.1918" ?> | <name>References</name> | |||
| <?rfc include="reference.RFC.2317" ?> | <references> | |||
| <?rfc include="reference.RFC.2818" ?> | <name>Normative References</name> | |||
| <?rfc include="reference.RFC.4033" ?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.4291" ?> | ence.RFC.2119.xml"/> | |||
| <?rfc include="reference.RFC.4632" ?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.5389" ?> | ence.RFC.3403.xml"/> | |||
| <?rfc include="reference.RFC.5693" ?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.6708" ?> | ence.RFC.4848.xml"/> | |||
| <?rfc include="reference.RFC.7216" ?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.7285" ?> | ence.RFC.1035.xml"/> | |||
| <?rfc include="reference.RFC.7286" ?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.7624" ?> | ence.RFC.3596.xml"/> | |||
| <?rfc include="reference.RFC.7626" ?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <?rfc include="reference.RFC.7858" ?> | ence.RFC.8174.xml"/> | |||
| <?rfc include="reference.RFC.7971" ?> | </references> | |||
| <?rfc include="reference.RFC.8484" ?> | <references> | |||
| <?rfc include="reference.I-D.kiesel-alto-ip-based-srv-disc" ?> | <name>Informative References</name> | |||
| <?rfc include="reference.I-D.kiesel-alto-alto4alto" ?> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| </references> | ence.RFC.1918.xml"/> | |||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2317.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2818.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4033.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4291.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4632.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5389.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5693.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6708.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7216.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7285.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7286.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7624.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7626.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7858.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7971.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8484.xml"/> | ||||
| <section anchor="sec.multiplesources" | <!-- draft-kiesel-alto-ip-based-srv-disc-03 is expired --> | |||
| title="Solution Approaches for Partitioned ALTO Knowledge"> | <xi:include | |||
| <t> | href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D | |||
| The ALTO base protocol document <xref target="RFC7285"/> | .kiesel-alto-ip-based-srv-disc.xml"/> | |||
| <!-- draft-kiesel-alto-alto4alto-00 is expired --> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refe | ||||
| rence.I-D.kiesel-alto-alto4alto.xml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="sec.multiplesources" numbered="true" toc="default"> | ||||
| <name>Solution Approaches for Partitioned ALTO Knowledge</name> | ||||
| <t> | ||||
| The ALTO base protocol document <xref target="RFC7285" format="defau | ||||
| lt"/> | ||||
| specifies the communication between an ALTO client and a | specifies the communication between an ALTO client and a | |||
| single ALTO server. It is implicitly assumed that this | single ALTO server. It is implicitly assumed that this | |||
| server can answer any query, possibly with some kind of | server can answer any query, possibly with some kind of | |||
| default value if no exact data is known. No special | default value if no exact data is known. No special | |||
| provisions were made for the case that the ALTO information | provisions were made for the case that the ALTO information | |||
| originates from multiple sources, which are possibly under | originates from multiple sources, which are possibly under | |||
| the control of different administrative entities (e.g., | the control of different administrative entities (e.g., | |||
| different ISPs) or that the overall ALTO information is | different ISPs) or that the overall ALTO information is | |||
| partitioned and stored on several ALTO servers. | partitioned and stored on several ALTO servers. | |||
| </t> | </t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Classification of Solution Approaches"> | <name>Classification of Solution Approaches</name> | |||
| <t> | <t> | |||
| Various protocol extensions and other solutions have been | Various protocol extensions and other solutions have been | |||
| proposed to deal with multiple information sources and | proposed to deal with multiple information sources and | |||
| partitioned knowledge. They can be classified as follows: | partitioned knowledge. They can be classified as follows: | |||
| <list style='hanging' hangIndent='5'> | </t> | |||
| <t hangText="1"> | ||||
| Ensure that all ALTO servers have the same | ||||
| knowledge | ||||
| </t> | ||||
| <t hangText="1.1"> | ||||
| Ensure data replication and synchronization | ||||
| within the provisioning protocol (cf. | ||||
| <xref target="RFC5693">RFC 5693, Fig 1</xref>). | ||||
| </t> | ||||
| <t hangText="1.2"> | ||||
| Use an Inter-ALTO-server data replication | ||||
| protocol. Possibly, the ALTO protocol itself - | ||||
| maybe with some extensions - could be used for | ||||
| that purpose; however, this has not been studied | ||||
| in detail so far. | ||||
| </t> | ||||
| <t hangText="2"> | ||||
| Accept that different ALTO servers (possibly | ||||
| operated by different organizations, e.g., ISPs) | ||||
| do not have the same knowledge | ||||
| </t> | ||||
| <t hangText="2.1"> | ||||
| Allow ALTO clients to send arbitrary queries to | ||||
| any ALTO server (e.g. the one discovered using | ||||
| <xref target="RFC7286"/>). If this server | ||||
| cannot answer the query itself, it will fetch | ||||
| the data on behalf of the client, using the ALTO | ||||
| protocol or a to-be-defined inter-ALTO-server | ||||
| request forwarding protocol. | ||||
| </t> | ||||
| <t hangText="2.2"> | ||||
| Allow ALTO clients to send arbitrary queries to | ||||
| any ALTO server (e.g. the one discovered using | ||||
| <xref target="RFC7286"/>). If this server | ||||
| cannot answer the query itself, it will redirect | ||||
| the client to the "right" ALTO server that has | ||||
| the desired information, using a small | ||||
| to-be-defined extension of the ALTO protocol. | ||||
| </t> | ||||
| <t hangText="2.3"> | ||||
| ALTO clients need to use some kind of "search | ||||
| engine" that indexes ALTO servers and redirects | ||||
| and/or gives cached results. | ||||
| </t> | ||||
| <t hangText="2.4"> | ||||
| ALTO clients need to use a new discovery mechanism | ||||
| to discover the ALTO server that has the desired | ||||
| information and contact it directly. | ||||
| </t> | ||||
| </list> | <ol> | |||
| </t> | <!-- Item 1 --> | |||
| </section> | <li><t> | |||
| Ensure that all ALTO servers have the same | ||||
| knowledge.</t> | ||||
| <!-- 1.1 --> | ||||
| <ol type="1.%d"> | ||||
| <li> | ||||
| Ensure data replication and synchronization | ||||
| within the provisioning protocol (cf. <xref target="RFC5693" format="de | ||||
| fault"/>, Figure 1). | ||||
| </li> | ||||
| <!-- 1.2 --> | ||||
| <li> | ||||
| Use an inter-ALTO-server data replication | ||||
| protocol. Possibly, the ALTO protocol itself -- | ||||
| maybe with some extensions -- could be used for | ||||
| that purpose; however, this has not been studied | ||||
| in detail so far. | ||||
| </li> | ||||
| </ol> | ||||
| </li> | ||||
| <!-- Item 2 --> | ||||
| <li><t> | ||||
| Accept that different ALTO servers (possibly | ||||
| operated by different organizations, e.g., ISPs) | ||||
| do not have the same knowledge.</t> | ||||
| <section title="Discussion of Solution Approaches"> | <!-- 2.1 --> | |||
| <t> | <ol type="2.%d"> | |||
| The provisioning or initialization protocol for | <li> | |||
| Allow ALTO clients to send arbitrary queries to | ||||
| any ALTO server (e.g., the one discovered using | ||||
| <xref target="RFC7286" format="default"/>). If this server | ||||
| cannot answer the query itself, it will fetch | ||||
| the data on behalf of the client, using the ALTO | ||||
| protocol or a to-be-defined inter-ALTO-server | ||||
| request forwarding protocol. | ||||
| </li> | ||||
| <!-- 2.2 --> | ||||
| <li> | ||||
| Allow ALTO clients to send arbitrary queries to | ||||
| any ALTO server (e.g., the one discovered using | ||||
| <xref target="RFC7286" format="default"/>). If this server | ||||
| cannot answer the query itself, it will redirect | ||||
| the client to the "right" ALTO server that has | ||||
| the desired information, using a small | ||||
| to-be-defined extension of the ALTO protocol. | ||||
| </li> | ||||
| <!-- 2.3 --> | ||||
| <li> | ||||
| ALTO clients need to use some kind of "search | ||||
| engine" that indexes ALTO servers and redirects | ||||
| and/or gives cached results. | ||||
| </li> | ||||
| <!-- 2.4 --> | ||||
| <li> | ||||
| ALTO clients need to use a new discovery mechanism | ||||
| to discover the ALTO server that has the desired | ||||
| information and contact it directly. | ||||
| </li> | ||||
| </ol> | ||||
| </li> | ||||
| </ol> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Discussion of Solution Approaches</name> | ||||
| <t> | ||||
| The provisioning or initialization protocol for | ||||
| ALTO servers | ALTO servers | |||
| (cf. <xref target="RFC5693">RFC 5693, Fig 1</xref>) | (cf. <xref target="RFC5693" format="default"/>, Figure 1) | |||
| is currently not standardized. It was a conscious | is currently not standardized. It was a conscious | |||
| decision not to include this in the scope of the | decision not to include this in the scope of the | |||
| IETF ALTO working group. The reason is that there | IETF ALTO working group. The reason is that there | |||
| are many different kinds of information sources. | are many different kinds of information sources. | |||
| This implementation specific protocol will adapt them | This implementation-specific protocol will adapt them | |||
| to the ALTO server, which offers a standardized protocol | to the ALTO server, which offers a standardized protocol | |||
| to the ALTO clients. However, adding the task of | to the ALTO clients. However, adding the task of | |||
| synchronization between ALTO servers to this protocol | synchronization between ALTO servers to this protocol | |||
| (i.e., approach 1.1) would overload this protocol with a | (i.e., Approach 1.1) would overload this protocol with a | |||
| second functionality that requires standardization for | second functionality that requires standardization for | |||
| seamless multi-domain operation. | seamless multidomain operation. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For the 1.? solution approaches, in addition to general | For Approaches 1.1 and 1.2, in addition to general technical | |||
| technical feasibility and issues like overhead and | feasibility and issues like overhead and caching efficiency, another | |||
| caching efficiency, another aspect to consider is | aspect to consider is legal liability. Operator "A" might prefer not to | |||
| legal liability. Operator "A" might prefer not to | publish information about nodes in, or paths between, | |||
| publish information about nodes in or paths between | ||||
| the networks of operators "B" and "C" through A's | the networks of operators "B" and "C" through A's | |||
| ALTO server, even if A knew that information. This is | ALTO server, even if A knew that information. This is | |||
| not only a question of map size and processing load on | not only a question of map size and processing load on | |||
| A's ALTO server. Operator A could also face legal | A's ALTO server. Operator A could also face legal | |||
| liability issues if that information had a bad | liability issues if that information had a bad | |||
| impact on the traffic engineering between B's and C's | impact on the traffic engineering between B's and C's | |||
| networks, or on their business models. | networks or on their business models. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| No specific actions to build a "search engine" based | No specific actions to build a solution based on a "search | |||
| solution (approach 2.3) are currently known and it is | engine" (Approach 2.3) are currently known, and it is | |||
| unclear what could be the incentives to operate such an | unclear what could be the incentives to operate such an | |||
| engine. Therefore, this approach is not considered in the | engine. Therefore, this approach is not considered in the | |||
| remainder of this document. | remainder of this document. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>The Need for Cross-Domain ALTO Server Discovery</name> | ||||
| <section title="The Need for Cross-Domain ALTO Server Discovery"> | <t> | |||
| <t> | Approaches 1.1, 1.2, 2.1, and 2.2 require more than just the | |||
| Approaches 1.1, 1.2, 2.1, and 2.2 do not only require the | specification of an ALTO protocol extension or a new protocol that | |||
| specification of an ALTO protocol extension or a new | runs between ALTO servers. A large-scale, | |||
| protocol that runs between ALTO servers. A large-scale, | maybe Internet-wide, multidomain deployment would also need | |||
| maybe Internet-wide, multi-domain deployment would also need | ||||
| mechanisms by which an ALTO server could discover other ALTO | mechanisms by which an ALTO server could discover other ALTO | |||
| servers, learn which information is available where, and | servers, learn which information is available where, and | |||
| ideally also who is authorized to publish information | ideally also who is authorized to publish information | |||
| related to a given part of the network. Approach 2.4 needs | related to a given part of the network. Approach 2.4 needs | |||
| the same mechanisms, except that they are used on the | the same mechanisms, except that they are used on the | |||
| client-side instead of the server-side. | client side instead of the server side. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| It is sometimes questioned whether there is a need for a | It is sometimes questioned whether there is a need for a | |||
| solution that allows clients to ask arbitrary queries, even | solution that allows clients to ask arbitrary queries, even | |||
| if the ALTO information is partitioned and stored on many | if the ALTO information is partitioned and stored on many | |||
| ALTO servers. The main argument is, that clients are | ALTO servers. The main argument is that clients are | |||
| supposed to optimize the traffic from and to themselves, and | supposed to optimize the traffic from and to themselves, and | |||
| that the information needed for that is most likely stored | that the information needed for that is most likely stored | |||
| on a "nearby" ALTO server, i.e., the one that can be | on a "nearby" ALTO server -- i.e., the one that can be | |||
| discovered using <xref target="RFC7286"/>. However, there | discovered using <xref target="RFC7286" format="default"/>. How | |||
| ever, there | ||||
| are scenarios where the ALTO client is not co-located with | are scenarios where the ALTO client is not co-located with | |||
| an endpoint of the to-be-optimized data transmission. | an endpoint of the to-be-optimized data transmission. | |||
| Instead, the ALTO client is located at a third party, which | Instead, the ALTO client is located at a third party that | |||
| takes part in the application signaling, e.g., a so-called | takes part in the application signaling -- e.g., a so-called | |||
| "tracker" in a peer-to-peer application. One such scenario, | "tracker" in a peer-to-peer application. One such scenario, | |||
| where it is advantageous to place the ALTO client not at an | where it is advantageous to place the ALTO client not at an | |||
| endpoint of the user data transmission, is analyzed in <xref | endpoint of the user data transmission, is analyzed in <xref tar | |||
| target="apx.alto_p2p"/>. | get="apx.alto_p2p" format="default"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Our Solution Approach"> | <name>Our Solution Approach</name> | |||
| <t> | <t> | |||
| Several solution approaches for cross-domain ALTO server | Several solution approaches for cross-domain ALTO server | |||
| discovery have been evaluated, using the criteria | discovery have been evaluated, using the criteria | |||
| documented in <xref target="sec.xdom-disc-reqs"/>. | documented in <xref target="sec.xdom-disc-reqs" format="default" />. | |||
| One of them was to use the ALTO protocol itself for | One of them was to use the ALTO protocol itself for | |||
| the exchange of information availability | the exchange of information availability | |||
| <xref target="I-D.kiesel-alto-alto4alto"/>. | <xref target="I-D.kiesel-alto-alto4alto" format="default"/>. | |||
| However, the drawback of that approach is that a new | However, the drawback of that approach is that a new | |||
| registration administration authority would have to | registration administration authority would have to | |||
| be established. | be established. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document specifies a DNS-based procedure for | This document specifies a DNS-based procedure for | |||
| cross-domain ALTO server discovery, which was inspired by | cross-domain ALTO server discovery, which was inspired by | |||
| "Location Information Server (LIS) Discovery Using IP | "Location Information Server (LIS) Discovery Using IP | |||
| Addresses and Reverse DNS" <xref target="RFC7216"/>. The | Addresses and Reverse DNS" <xref target="RFC7216" format="defaul t"/>. The | |||
| primary goal is that this procedure can be used on the | primary goal is that this procedure can be used on the | |||
| client-side (i.e., approach 2.4), but together with new | client side (i.e., Approach 2.4), but together with new | |||
| protocols or protocol extensions it could also be used to | protocols or protocol extensions, it could also be used to | |||
| implement the other solution approaches itemized above. | implement the other solution approaches itemized above. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Relation to the ALTO Requirements"> | <name>Relation to the ALTO Requirements</name> | |||
| <t>During the design phase of the overall ALTO solution, two | <t>During the design phase of the overall ALTO solution, two | |||
| different server discovery scenarios have been identified and | different server discovery scenarios were identified and | |||
| documented in the ALTO requirements document | documented in the ALTO requirements document | |||
| <xref target="RFC6708"/>. The first scenario, documented in | <xref target="RFC6708" format="default"/>. The first scenario, | |||
| documented in | ||||
| Req. AR-32, can be supported using the discovery mechanisms | Req. AR-32, can be supported using the discovery mechanisms | |||
| specified in <xref target="RFC7286"/>. | specified in <xref target="RFC7286" format="default"/>. | |||
| An alternative approach, based on IP anycast | An alternative approach, based on IP anycast | |||
| <xref target="I-D.kiesel-alto-ip-based-srv-disc"/>, | <xref target="I-D.kiesel-alto-ip-based-srv-disc" format="default"/>, | |||
| has also been studied. | has also been studied. | |||
| This document, in contrast, tries to address Req. AR-33. | This document, in contrast, tries to address Req. AR-33. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="sec.xdom-disc-reqs" numbered="true" toc="default"> | ||||
| <section anchor="sec.xdom-disc-reqs" | <name>Requirements for Cross-Domain Server Discovery</name> | |||
| title="Requirements for Cross-Domain Server Discovery"> | <t>This appendix itemizes requirements that were | |||
| collected before the design phase and are reflected | ||||
| <t>This appendix itemizes requirements that have been | in the design of the ALTO Cross-Domain Server Discovery Procedure. | |||
| collected before the design phase and that are reflected | </t> | |||
| by the design of the ALTO Cross-Domain Server Discovery Procedure. | <section numbered="true" toc="default"> | |||
| </t> | <name>Discovery Client Application Programming Interface</name> | |||
| <t>The discovery client will be called through some kind of | ||||
| <section title="Discovery Client Application Programming Interface"> | application programming interface (API), and the parameters | |||
| <t>The discovery client will be called through some kind of | ||||
| application programming interface (API) and the parameters | ||||
| will be an IP address and, for purposes of extensibility, | will be an IP address and, for purposes of extensibility, | |||
| a service identifier such as "ALTO". It will return one or more | a service identifier such as "ALTO". The client will return one or m | |||
| URI(s) that offers the requested service ("ALTO") for the given | ore | |||
| URIs that offer the requested service ("ALTO") for the given | ||||
| IP address. | IP address. | |||
| </t> | </t> | |||
| <t>In other words, the client would be used to retrieve a | ||||
| <t>In other words, the client would be used to retrieve a | ||||
| mapping:</t> | mapping:</t> | |||
| <t>(IP address, "ALTO") -> IRD-URI(s)</t> | <t>(IP address, "ALTO") -> IRD-URI(s)</t> | |||
| <t>where IRD-URI(s) is one or more URI(s) of | <t>where IRD-URI(s) is one or more URIs of | |||
| Information Resource Directories | Information Resource Directories | |||
| (IRD, see Section 9 of <xref target="RFC7285"/>) | (IRDs, see <xref target="RFC7285" format="default" | |||
| of ALTO server(s) that can give reasonable guidance | sectionFormat="of" section="9"/>) | |||
| of ALTO servers that can give reasonable guidance | ||||
| to a resource consumer with the indicated IP address.</t> | to a resource consumer with the indicated IP address.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Data Storage and Authority Requirements"> | <name>Data Storage and Authority Requirements</name> | |||
| <t>The information for mapping IP addresses and service | <t>The information for mapping IP addresses and service | |||
| parameters to URIs should be stored in a - preferably | parameters to URIs should be stored in a -- preferably | |||
| distributed - database. It must be possible to delegate | distributed -- database. It must be possible to delegate | |||
| administration of parts of this database. Usually, the | administration of parts of this database. Usually, the | |||
| mapping from a specific IP address to an URI is defined | mapping from a specific IP address to a URI is defined | |||
| by the authority that has administrative control over | by the authority that has administrative control over | |||
| this IP address, e.g., the ISP in residential access networks | this IP address -- e.g., the ISP in residential access networks | |||
| or the IT department in enterprise, university, or similar | or the IT department in enterprise, university, or similar | |||
| networks. | networks. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Cross-Domain Operations Requirements</name> | ||||
| <section title="Cross-Domain Operations Requirements"> | <t>The cross-domain server discovery mechanism should | |||
| <t>The cross-domain server discovery mechanism should | ||||
| be designed in such a way that it works across the | be designed in such a way that it works across the | |||
| public Internet and also in other IP-based networks. | public Internet and also in other IP-based networks. | |||
| This in turn means that such mechanisms cannot rely on | This, in turn, means that such mechanisms cannot rely on | |||
| protocols that are not widely deployed across the Internet | protocols that are not widely deployed across the Internet | |||
| or protocols that require special handling within | or protocols that require special handling within | |||
| participating networks. An example is multicast, which | participating networks. An example is multicast, which | |||
| is not generally available across the Internet. | is not generally available across the Internet. | |||
| </t> | </t> | |||
| <t>The ALTO Cross-Domain Server Discovery Protocol must | ||||
| <t>The ALTO Cross-Domain Server Discovery protocol must | ||||
| support gradual deployment without a network-wide flag day. | support gradual deployment without a network-wide flag day. | |||
| If the mechanism needs some kind of well-known "rendezvous | If the mechanism needs some kind of well-known "rendezvous | |||
| point", re-using an existing infrastructure (such as the DNS | point", reusing an existing infrastructure (such as the DNS | |||
| root servers or the WHOIS database) should be preferred over | root servers or the WHOIS database) should be preferred over | |||
| establishing a new one.</t> | establishing a new one.</t> | |||
| </section> | ||||
| </section> | <section numbered="true" toc="default"> | |||
| <name>Protocol Requirements</name> | ||||
| <section title="Protocol Requirements"> | <t>The protocol must be able to operate across middleboxes, | |||
| <t>The protocol must be able to operate across middleboxes, | especially NATs and firewalls. | |||
| especially across NATs and firewalls. | </t> | |||
| </t> | <t>The protocol shall not require any preknowledge from | |||
| <t>The protocol shall not require any pre-knowledge from | ||||
| the client other than any information that is known to | the client other than any information that is known to | |||
| a regular IP host on the Internet. | a regular IP host on the Internet. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Further Requirements"> | <name>Further Requirements</name> | |||
| <t>The ALTO cross domain server discovery cannot assume that | <t>The ALTO cross-domain server discovery cannot assume that | |||
| the server discovery client and the server discovery | the server-discovery client and the server-discovery | |||
| responding entity are under the same administrative | responding entity are under the same administrative | |||
| control. | control. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="apx.alto_p2p" numbered="true" toc="default"> | ||||
| <section anchor="apx.alto_p2p" title="ALTO and Tracker-based Peer-to-Peer Ap | <name>ALTO and Tracker-Based Peer-to-Peer Applications</name> | |||
| plications"> | <t>This appendix provides a complete example of using ALTO and | |||
| <t>This appendix provides a complete example of using ALTO and | ||||
| the ALTO Cross-Domain Server Discovery Procedure in one | the ALTO Cross-Domain Server Discovery Procedure in one | |||
| specific application scenario, namely a tracker-based peer-to-peer | specific application scenario -- namely, a tracker-based peer-to-peer | |||
| application. First, in | application. First, in | |||
| subsection <xref target="apx.alto_p2p_app" format="counter"/>, | <xref target="apx.alto_p2p_app"/>, | |||
| we introduce a generic model of such an | we introduce a generic model of such an | |||
| application and show why ALTO optimization is desirable. Then, | application and show why ALTO optimization is desirable. Then, | |||
| in <xref target="apx.alto_p2p_arch" format="counter"/>, | in <xref target="apx.alto_p2p_arch"/>, | |||
| we introduce two architectural options for integrating ALTO | we introduce two architectural options for integrating ALTO | |||
| into the tracker-based peer-to-peer application - one option | into the tracker-based peer-to-peer application; one option | |||
| is based on the "regular" ALTO server discovery | is based on the "regular" ALTO server discovery | |||
| procedure <xref target="RFC7286"/>, one relies on the | procedure <xref target="RFC7286" format="default"/>, and one relies on t he | |||
| ALTO Cross-Domain Server Discovery Procedure. | ALTO Cross-Domain Server Discovery Procedure. | |||
| In <xref target="apx.alto_p2p_eval" format="counter"/>, | In <xref target="apx.alto_p2p_eval"/>, | |||
| a simple mathematical | a simple mathematical | |||
| model is used to show that the latter approach is expected to | model is used to show that the latter approach is expected to | |||
| yield significantly better optimization results. The appendix concludes | yield significantly better optimization results. The appendix concludes | |||
| with subsection <xref target="apx.alto_p2p_example" format="counter"/>, | with <xref target="apx.alto_p2p_example" />, | |||
| which details an exemplary complete walk-through of the | which details an exemplary complete walk-through of the | |||
| ALTO Cross-Domain Server Discovery Procedure.</t> | ALTO Cross-Domain Server Discovery Procedure.</t> | |||
| <section anchor="apx.alto_p2p_app" numbered="true" toc="default"> | ||||
| <section anchor="apx.alto_p2p_app" | <name>A Generic Tracker-Based Peer-to-Peer Application</name> | |||
| title="A generic Tracker-based Peer-to-Peer Application"> | <t>The optimization of peer-to-peer (P2P) applications such | |||
| <t>The optimization of peer-to-peer (P2P) applications such | ||||
| as BitTorrent was one of the first use cases that lead to the | as BitTorrent was one of the first use cases that lead to the | |||
| inception of the IETF ALTO working group. Further use cases | inception of the IETF ALTO working group. Further use cases | |||
| have been identified as well, yet we will use this scenario | have been identified as well, yet we will use this scenario | |||
| to illustrate the operation and usefulness of the | to illustrate the operation and usefulness of the | |||
| ALTO Cross-Domain Server Discovery Procedure.</t> | ALTO Cross-Domain Server Discovery Procedure.</t> | |||
| <t>For the remainder of this chapter, we consider a generic, | ||||
| <t>For the remainder of this chapter we consider a generic, | tracker-based peer-to-peer file-sharing application. | |||
| tracker-based peer-to-peer file sharing application. | ||||
| The goal is the dissemination of a large file, without using one | The goal is the dissemination of a large file, without using one | |||
| large server with a correspondingly high upload bandwidth. | large server with a correspondingly high upload bandwidth. | |||
| The file is split into chunks. | The file is split into chunks. | |||
| So-called "peers" assume the role of both a client and a server. | So-called "peers" assume the role of both a client and a server. | |||
| That is, they may request chunks from other peers and they may | That is, they may request chunks from other peers, and they may | |||
| serve the chunks they already possess to other peers at the same | serve the chunks they already possess to other peers at the same | |||
| time, thereby contributing their upload bandwidth. | time, thereby contributing their upload bandwidth. | |||
| Peers that want to share the same file participate in a "swarm". | Peers that want to share the same file participate in a "swarm". | |||
| They use the peer-to-peer protocol to inform each other about | They use the peer-to-peer protocol to inform each other about | |||
| the availability of chunks and to request and transfer chunks | the availability of chunks and request and transfer chunks | |||
| from one peer to another. | from one peer to another. | |||
| A swarm may consist of a very large number of peers. | A swarm may consist of a very large number of peers. | |||
| Consequently, peers usually maintain logical connections only to | Consequently, peers usually maintain logical connections to only | |||
| a subset of all peers in the swarm. | a subset of all peers in the swarm. | |||
| If a new peer wants to join a swarm, it first contacts a | If a new peer wants to join a swarm, it first contacts a | |||
| well-known server, the "tracker", which provides a list of IP | well-known server, the "tracker", which provides a list of IP | |||
| addresses of peers in the swarm.</t> | addresses of peers in the swarm.</t> | |||
| <t>A swarm is an overlay network on top of the IP network. | ||||
| <t>A swarm is an overlay network on top of the IP network. | ||||
| Algorithms that determine the overlay topology and the traffic | Algorithms that determine the overlay topology and the traffic | |||
| distribution in the overlay may consider information about | distribution in the overlay may consider information about | |||
| the underlying IP network, such as topological distance, | the underlying IP network, such as topological distance, | |||
| link bandwidth, (monetary) costs for sending traffic from | link bandwidth, (monetary) costs for sending traffic from | |||
| one host to another, etc. | one host to another, etc. | |||
| ALTO is a protocol for retrieving such information. | ALTO is a protocol for retrieving such information. | |||
| The goal of such "topology aware" decisions is to improve | The goal of such "topology-aware" decisions is to improve | |||
| performance or Quality of Experience in the application while | performance or Quality of Experience in the application while | |||
| reducing the utilization of the underlying network | reducing the utilization of the underlying network | |||
| infrastructure. | infrastructure. | |||
| </t> | </t> | |||
| </section> | ||||
| </section> | <section anchor="apx.alto_p2p_arch" numbered="true" toc="default"> | |||
| <name>Architectural Options for Placing the ALTO Client</name> | ||||
| <section anchor="apx.alto_p2p_arch" | <t>The ALTO protocol specification <xref target="RFC7285" format="defaul | |||
| title="Architectural Options for Placing the ALTO Client"> | t"/> details how an ALTO client | |||
| <t>The ALTO protocol specification <xref | ||||
| target="RFC7285"/> details how an ALTO client | ||||
| can query an ALTO server for guiding information and receive | can query an ALTO server for guiding information and receive | |||
| the corresponding replies. However, in the considered | the corresponding replies. However, in the considered | |||
| scenario of a tracker-based P2P application, there are two | scenario of a tracker-based P2P application, there are two | |||
| fundamentally different possibilities where to place the | fundamentally different possible locations for where to place the | |||
| ALTO client: | ALTO client: | |||
| <list style='numbers'> | </t> | |||
| <t>ALTO client in the resource consumer ("peer")</t> | <ol spacing="normal" type="1"> | |||
| <t>ALTO client in the resource directory ("tracker")</t> | <li>ALTO client in the resource consumer ("peer")</li> | |||
| </list></t> | <li>ALTO client in the resource directory ("tracker")</li> | |||
| </ol> | ||||
| <t>In the following, both scenarios are compared in order to | <t>In the following, both scenarios are compared in order to | |||
| explain the need for ALTO queries on behalf of remote resource | explain the need for ALTO queries on behalf of remote resource | |||
| consumers.</t> | consumers.</t> | |||
| <t>In the first scenario (see <xref target="fig.rcq" format="default"/>) | ||||
| <t>In the first scenario (see <xref target="fig.rcq"/>), the | , the | |||
| resource consumer queries the resource directory for the | resource consumer queries the resource directory for the | |||
| desired resource (F1). The resource directory returns a | desired resource (F1). The resource directory returns a | |||
| list of potential resource providers without considering | list of potential resource providers without considering | |||
| ALTO (F2). It is then the duty of the resource consumer to | ALTO (F2). It is then the duty of the resource consumer to | |||
| invoke ALTO (F3/F4), in order to solicit guidance regarding | invoke ALTO (F3/F4), in order to solicit guidance regarding | |||
| this list.</t> | this list.</t> | |||
| <t>In the second scenario (see <xref target="fig.3pq" format="default"/> | ||||
| <t>In the second scenario (see <xref target="fig.3pq"/>), | ), | |||
| the resource directory has an embedded ALTO client. After | the resource directory has an embedded ALTO client. After | |||
| receiving a query for a given resource (F1) the resource directory | receiving a query for a given resource (F1), the resource directory | |||
| invokes this ALTO client to evaluate all resource providers it | invokes this ALTO client to evaluate all resource providers it | |||
| knows (F2/F3). Then it returns a, possibly shortened, list | knows (F2/F3). Then it returns a list, possibly shortened, | |||
| containing the "best" resource providers to the resource | containing the "best" resource providers to the resource | |||
| consumer (F4).</t> | consumer (F4).</t> | |||
| <figure anchor="fig.tracker_random_preselect"> | ||||
| <t><figure anchor="fig.tracker_random_preselect" | <name>Tracker-Based P2P Application with Random Peer Preselection</nam | |||
| title="Tracker-based P2P Application with random peer preselection"> | e> | |||
| <artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| ............................. ............................. | ............................. ............................. | |||
| : 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- | : | |||
| : | M good | | tion | : n peer : | select | n-k | nge | : | : | M good | | tion | : n peer : | select | n-k | nge | : | |||
| : +-______-+ +--------+ : IDs : +--------+ bad p.+------+ : | : +-______-+ +--------+ : IDs : +--------+ bad p.+------+ : | |||
| :...........................: :.....^.....................: | :...........................: :.....^.....................: | |||
| | | | | |||
| | ALTO protocol | | ALTO protocol | |||
| __|___ | __|___ | |||
| +-______-+ | +-______-+ | |||
| | | | | | | |||
| | ALTO | | | ALTO | | |||
| | server | | | server | | |||
| +-______-+ | +-______-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </figure> | |||
| <figure anchor="fig.rcq"> | ||||
| <t><figure anchor="fig.rcq" | <name>Basic Message Sequence Chart for Resource Consumer-Initiated ALT | |||
| title="Basic message sequence chart for resource consumer-initiated AL | O Query</name> | |||
| TO query"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| 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 | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </figure> | |||
| <figure anchor="fig.tracker_alto_client"> | ||||
| <t><figure anchor="fig.tracker_alto_client" | <name>Tracker-Based P2P Application with ALTO Client in Tracker</name> | |||
| title="Tracker-based P2P Application with ALTO client in tracker"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| ............................. ............................. | ............................. ............................. | |||
| : 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 | : | |||
| : +-______-+ +--------+ : IDs : +------+ : | : +-______-+ +--------+ : IDs : +------+ : | |||
| :.....................^.....: :...........................: | :.....................^.....: :...........................: | |||
| | | | | |||
| | ALTO protocol | | ALTO protocol | |||
| __|___ | __|___ | |||
| +-______-+ | +-______-+ | |||
| | | | | | | |||
| | ALTO | | | ALTO | | |||
| | server | | | server | | |||
| +-______-+ | +-______-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </figure> | |||
| <figure anchor="fig.3pq"> | ||||
| <t><figure anchor="fig.3pq" | <name>Basic Message Sequence Chart for ALTO Query on Behalf of Remote | |||
| title="Basic message sequence chart for ALTO query on behalf of remote | Resource Consumer</name> | |||
| resource consumer"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| 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 | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </figure> | |||
| <t>Note: the message sequences depicted in <xref | <aside><t>Note: The message sequences depicted in Figures <xref target=" | |||
| target="fig.rcq"/> and <xref target="fig.3pq"/> may occur | fig.rcq" | |||
| format="counter"/> and <xref target="fig.3pq" format="counter"/> may | ||||
| occur | ||||
| both in the target-aware and the target-independent query | both in the target-aware and the target-independent query | |||
| mode (c.f. <xref target="RFC6708"/>). In the | mode (cf. <xref target="RFC6708" format="default"/>). In the | |||
| target-independent query mode no message exchange with the | target-independent query mode, no message exchange with the | |||
| ALTO server might be needed after the tracker query, because | ALTO server might be needed after the tracker query, because | |||
| the candidate resource providers could be evaluated using a | the candidate resource providers could be evaluated using a | |||
| locally cached "map", which has been retrieved from the ALTO | locally cached "map", which has been retrieved from the ALTO | |||
| server some time ago.</t> | server some time ago.</t></aside> | |||
| </section> | ||||
| </section> | <section anchor="apx.alto_p2p_eval" numbered="true" toc="default"> | |||
| <name>Evaluation</name> | ||||
| <section anchor="apx.alto_p2p_eval" title="Evaluation"> | <t>The problem with the first approach is that while the | |||
| <t>The problem with the first approach is, that while the | ||||
| resource directory might know thousands of peers taking part | resource directory might know thousands of peers taking part | |||
| in a swarm, the list returned to the resource consumer is | in a swarm, the list returned to the resource consumer is | |||
| usually shortened for efficiency reasons. Therefore, the | usually shortened for efficiency reasons. Therefore, the | |||
| "best" (in the sense of ALTO) potential resource providers | "best" (in the sense of ALTO) potential resource providers | |||
| might not be contained in that list anymore, even before | might not be contained in that list anymore, even before | |||
| ALTO can consider them.</t> | ALTO can consider them.</t> | |||
| <t>For illustration, consider a simple model of a swarm, in | ||||
| <t>For illustration, consider a simple model of a swarm, in | ||||
| which all peers fall into one of only two categories: assume | which all peers fall into one of only two categories: assume | |||
| that there are "good" ("good" in the sense of ALTO's | that there are only "good" (in the sense of ALTO's | |||
| better-than-random peer selection, based on an arbitrary | better-than-random peer selection, based on an arbitrary | |||
| desired rating criterion) and "bad' peers only. Having more | desired rating criterion) and "bad" peers. Having more | |||
| different categories makes the maths more complex but does | different categories makes the math more complex but does | |||
| not change anything to the basic outcome of this analysis. | not change anything about the basic outcome of this analysis. | |||
| Assume that the swarm has a total number of N peers, out of | 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 | which there are M "good" and N-M "bad" peers, which are all known | |||
| to the tracker. A new peer wants to join the swarm and | to the tracker. A new peer wants to join the swarm and | |||
| therefore asks the tracker for a list of peers.</t> | therefore asks the tracker for a list of peers.</t> | |||
| <t>If, according to the first approach, the tracker randomly | ||||
| <t>If, according to the first approach, the tracker randomly | ||||
| picks n peers from the N known peers, the result can be | picks n peers from the N known peers, the result can be | |||
| described with the hypergeometric distribution. The | described with the hypergeometric distribution. The | |||
| probability that the tracker reply contains exactly k "good" | probability that the tracker reply contains exactly k "good" | |||
| peers (and n-k "bad" peers) is:</t> | peers (and n-k "bad" peers) is:</t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| <t><figure><artwork><![CDATA[ | ||||
| / 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)! | |||
| ]]></artwork> | ||||
| ]]></artwork></figure></t> | <t>The probability that the reply contains at most k "good" | |||
| peers is: P(X<=k) = P(X=0) + P(X=1) + .. + P&wj;(X=k).</t> | ||||
| <t>The probability that the reply contains at most k "good" | <t>For example, consider a swarm with N=10,000 peers known | |||
| peers is: P(X<=k)=P(X=0)+P(X=1)+..+P(X=k).</t> | ||||
| <t>For example, consider a swarm with N=10,000 peers known | ||||
| to the tracker, out of which M=100 are "good" peers. If the | to the tracker, out of which M=100 are "good" peers. If the | |||
| tracker randomly selects n=100 peers, the formula yields for | tracker randomly selects n=100 peers, the formula yields for | |||
| the reply: P(X=0)=36%, P(X<=4)=99%. That is, with a | the reply: P&wj;(X=0)=36%, P(X<=4)=99%. That is, with a | |||
| probability of approx. 36% this list does not contain a | probability of approximately 36%, this list does not contain a | |||
| single "good" peer, and with 99% probability there are only | single "good" peer, and with 99% probability, there are only | |||
| four or less of the "good" peers on the list. Processing | four or fewer of the "good" peers on the list. Processing | |||
| this list with the guiding ALTO information will ensure that | this list with the guiding ALTO information will ensure that | |||
| the few favorable peers are ranked to the top of the list; | the few favorable peers are ranked to the top of the list; | |||
| however, the benefit is rather limited as the number of | however, the benefit is rather limited as the number of | |||
| favorable peers in the list is just too small.</t> | favorable peers in the list is just too small.</t> | |||
| <t>Much better traffic optimization could be achieved if the | ||||
| <t>Much better traffic optimization could be achieved if the | tracker would evaluate all known peers using ALTO and | |||
| tracker would evaluate all known peers using ALTO, and | ||||
| return a list of 100 peers afterwards. This list would then | return a list of 100 peers afterwards. This list would then | |||
| include a significantly higher fraction of "good" | include a significantly higher fraction of "good" | |||
| peers. (Note, that if the tracker returned "good" peers | peers. (Note that if the tracker returned "good" peers | |||
| only, there might be a risk that the swarm might disconnect | only, there might be a risk that the swarm might disconnect | |||
| and split into several disjunct partitions. However, | and split into several disjunct partitions. However, | |||
| finding the right mix of ALTO-biased and random peer | finding the right mix of ALTO-biased and random peer | |||
| selection is out of the scope of this document.) </t> | selection is out of the scope of this document.) </t> | |||
| <t>Therefore, from an overall optimization perspective, the | ||||
| <t>Therefore, from an overall optimization perspective, the | ||||
| second scenario with the ALTO client embedded in the | second scenario with the ALTO client embedded in the | |||
| resource directory is advantageous, because it is ensured | resource directory is advantageous, because it is ensured | |||
| that the addresses of the "best" resource providers are | that the addresses of the "best" resource providers are | |||
| actually delivered to the resource consumer. An | actually delivered to the resource consumer. An | |||
| architectural implication of this insight is that the ALTO | architectural implication of this insight is that the ALTO | |||
| server discovery procedures must support ALTO queries on | server discovery procedures must support ALTO queries on | |||
| behalf of remote resource consumers. | behalf of remote resource consumers. | |||
| That is, as the tracker issues ALTO queries on | That is, as the tracker issues ALTO queries on | |||
| behalf of the peer which contacted the tracker, the tracker | behalf of the peer that contacted the tracker, the tracker | |||
| must be able to discover an ALTO server that can give | must be able to discover an ALTO server that can give | |||
| guidance suitable for that respective peer. | guidance suitable for that peer. | |||
| This task can be solved using the ALTO Cross-Domain Server | This task can be solved using the ALTO Cross-Domain Server | |||
| Discovery Procedure. | Discovery Procedure. | |||
| </t> | </t> | |||
| <t/> | ||||
| <!-- force a page break --> | </section> | |||
| <t><vspace blankLines="99"/></t> | <section anchor="apx.alto_p2p_example" numbered="true" toc="default"> | |||
| </section> | <name>Example</name> | |||
| <t>This section provides a complete example of the | ||||
| <section anchor="apx.alto_p2p_example" title="Example"> | ||||
| <t>This section provides a complete example of the | ||||
| ALTO Cross-Domain Server Discovery Procedure in a tracker-based | ALTO Cross-Domain Server Discovery Procedure in a tracker-based | |||
| peer-to-peer scenario.</t> | peer-to-peer scenario.</t> | |||
| <t>The example is based on the network topology shown in | ||||
| <t>The example is based on the network topology shown in | <xref target="fig.example_network_topology" format="default"/>. | |||
| <xref target="fig.example_network_topology"/>. | Five access networks -- Networks a, b, c, x, and t -- are | |||
| Five access networks - Networks a, b, c, x, and t - are | ||||
| operated by five different network operators. They are | operated by five different network operators. They are | |||
| interconnected by a backbone structure. | interconnected by a backbone structure. | |||
| Each network operator | Each network operator | |||
| runs an ALTO server in their network, i.e., ALTO_SRV_A, | runs an ALTO server in their network -- i.e., ALTO_SRV_A, | |||
| ALTO_SRV_B, ALTO_SRV_C, ALTO_SRV_X, and ALTO_SRV_T, | ALTO_SRV_B, ALTO_SRV_C, ALTO_SRV_X, and ALTO_SRV_T, | |||
| respectively. | respectively. | |||
| <figure anchor="fig.example_network_topology" | </t> | |||
| title="Example network topology"> | <figure anchor="fig.example_network_topology"> | |||
| <artwork><![CDATA[ | <name>Example Network Topology</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| _____ __ _____ __ _____ __ | _____ __ _____ __ _____ __ | |||
| __( )__( )_ __( )__( )_ __( )__( )_ | __( )__( )_ __( )__( )_ __( )__( )_ | |||
| ( 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 __) | |||
| (___)--(____) (___)--(____) | (___)--(____) (___)--(____) | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </figure> | |||
| <t>A new peer of a peer-to-peer application wants to join a | ||||
| <t>A new peer of a peer-to-peer application wants to join a | ||||
| specific swarm (overlay network), in order to access a specific | specific swarm (overlay network), in order to access a specific | |||
| resource. This new peer will be called "Resource Consumer X" | resource. This new peer will be called "Resource Consumer X", | |||
| in accordance to the terminology of <xref target="RFC6708"/> and it | in accordance with the terminology of <xref target="RFC6708" | |||
| is | format="default"/>, and is | |||
| located in Network x. It contacts the tracker ("Resource | located in Network x. It contacts the tracker ("Resource | |||
| Directory"), which is located in Network t. The mechanism by which | Directory"), which is located in Network t. The mechanism by which | |||
| the new peer discovers the tracker is out of the scope of this | the new peer discovers the tracker is out of the scope of this | |||
| document. The tracker maintains a list of peers that take part | document. The tracker maintains a list of peers that take part | |||
| in the overlay network, and hence it can determine that | in the overlay network, and hence it can determine that | |||
| Resource Providers A, B, and C are candidate peers for | Resource Providers A, B, and C are candidate peers for | |||
| Resource Consumer X.</t> | Resource Consumer X.</t> | |||
| <t>As shown in the previous section, a tracker-side ALTO | ||||
| <t>As shown in the previous section, a tracker-side ALTO | optimization (cf. Figures <xref target="fig.tracker_alto_client | |||
| optimization (c.f. <xref target="fig.tracker_alto_client"/> | " | |||
| and <xref target="fig.3pq"/>) | format="counter"/> | |||
| and <xref target="fig.3pq" format="counter"/>) | ||||
| is more efficient than a client-side optimization. | is more efficient than a client-side optimization. | |||
| Consequently, the tracker wants to use the ALTO Endpoint | Consequently, the tracker wants to use the ALTO Endpoint | |||
| Cost Service (ECS) to learn the routing costs between | 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 | X and A, X and B, and X and C, in order to sort | |||
| A, B, and C by their respective routing costs to X.</t> | A, B, and C by their respective routing costs to X.</t> | |||
| <t>In theory, there are many options for how the | ||||
| <t>In theory, there are many options how the | ||||
| ALTO Cross-Domain Server Discovery Procedure could be used. | ALTO Cross-Domain Server Discovery Procedure could be used. | |||
| For example, | For example, | |||
| the tracker could do the following steps: | the tracker could do the following steps: | |||
| <figure><artwork><![CDATA[ | </t> | |||
| <sourcecode type="pseudocode"> | ||||
| 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 | |||
| ]]></artwork></figure> | </sourcecode> | |||
| Maybe, the ALTO Cross-Domain Server Discovery Procedure | <t> | |||
| queries would yield in this scenario: IRD_URIS_A = ALTO_SRV_A, | ||||
| In this scenario, the ALTO Cross-Domain Server Discovery Procedure | ||||
| queries might yield: IRD_URIS_A = ALTO_SRV_A, | ||||
| IRD_URIS_B = ALTO_SRV_B, and IRD_URIS_C = ALTO_SRV_C. | IRD_URIS_B = ALTO_SRV_B, and IRD_URIS_C = ALTO_SRV_C. | |||
| That is, each ECS query would be sent to a different | That is, each ECS query would be sent to a different | |||
| ALTO server. The problem with this approach is that we are | ALTO server. The problem with this approach is that we are | |||
| not neccessarily able to | not necessarily able to | |||
| compare COST_X_A, COST_X_B, and COST_X_C with each | compare COST_X_A, COST_X_B, and COST_X_C with each | |||
| other. The specification of the routingcost metric | other. The specification of the routingcost metric | |||
| mandates that "A lower value indicates a higher preference", | mandates that "A lower value indicates a higher preference", | |||
| but "an ISP may internally compute routing cost using any method | but "an ISP may internally compute routing cost using any method | |||
| that it chooses" | that it chooses" | |||
| (see section 6.1.1.1. of <xref target="RFC7285"/>). | (see <xref target="RFC7285" format="default" | |||
| sectionFormat="of" section="6.1.1.1"/>). | ||||
| 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 | COST_X_B could be 200 (kilometers great circle distance | |||
| between the approximate geographic locations of the hosts) | between the approximate geographic locations of the hosts) | |||
| and COST_X_C could | and COST_X_C could | |||
| be 3 (router hops, corresponding to a decrease of the TTL field | be 3 (router hops, corresponding to a decrease of the TTL field | |||
| in the IP header). Each of these metrics fulfills the | in the IP header). Each of these metrics fulfills the | |||
| "lower value is more preferable" requirement on its own, | "lower value is more preferable" requirement on its own, | |||
| but obviously, | but they obviously cannot be compared with each other. Even if there | |||
| they cannot be compared with each other. Even if there was | were | |||
| a reasonable formula to compare, for example, kilometers | a reasonable formula to compare, for example, kilometers | |||
| with milliseconds, we could not use it, as the units of measurement | with milliseconds, we could not use it, as the units of measurement | |||
| (or any other information about the computation method | (or any other information about the computation method | |||
| for the routingcost) are | for the routingcost) are | |||
| not sent along with the value in the ECS reply.</t> | not sent along with the value in the ECS reply.</t> | |||
| <t>To avoid this problem, the tracker tries to send all | ||||
| <t>To avoid this problem, the tracker tries to send all | ||||
| ECS queries to the same ALTO server. As specified | ECS queries to the same ALTO server. As specified | |||
| in <xref target="sec.ecs"/> of this document, case 2, it uses | in <xref target="sec.ecs" format="default"/> of this document, Case | |||
| the IP address of Resource Consumer x as parameter to | 2, it uses | |||
| the IP address of Resource Consumer x as a parameter of | ||||
| the discovery procedure: | the discovery procedure: | |||
| <figure><artwork><![CDATA[ | </t> | |||
| <sourcecode type="pseudocode"> | ||||
| 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 | |||
| ]]></artwork></figure> | </sourcecode> | |||
| <t> | ||||
| This strategy ensures that COST_X_A, COST_X_B, and COST_X_C | This strategy ensures that COST_X_A, COST_X_B, and COST_X_C | |||
| can be compared with each other.</t> | can be compared with each other.</t> | |||
| <t/> | ||||
| <!-- force a page break --> | <t>As discussed above, the tracker calls the ALTO Cross-Domain | |||
| <t><vspace blankLines="99"/></t> | ||||
| <t>As discussed above, the tracker calls the ALTO Cross-Domain | ||||
| Server Discovery Procedure with IP address X as a | Server Discovery Procedure with IP address X as a | |||
| parameter. For the reminder of this example, we assume | parameter. For the remainder of this example, we assume | |||
| that X = 2001:DB8:1:2:227:eff:fe6a:de42. Thus, the | that X = 2001:DB8:1:2:227:eff:fe6a:de42. Thus, the | |||
| procedure call is <vspace blankLines="1"/> | 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"). | |||
| </t> | </t> | |||
| <t>The first parameter, 2001:DB8:1:2:227:eff:fe6a:de42, is a | ||||
| <t>The first parameter 2001:DB8:1:2:227:eff:fe6a:de42 is a | ||||
| single IPv6 address. Thus, we get AT = IPv6, | single IPv6 address. Thus, we get AT = IPv6, | |||
| A = 2001:DB8:1:2:227:eff:fe6a:de42, L = 128, | A = 2001:DB8:1:2:227:eff:fe6a:de42, L = 128, | |||
| and SP = "ALTO:https". | and SP = "ALTO:https". | |||
| </t> | </t> | |||
| <t>The procedure constructs | ||||
| (see Step 1 in <xref target="sec.3pdisc-spec-step1" | ||||
| format="default"/>) | ||||
| </t> | ||||
| <t>The procedure constructs | <sourcecode type="pseudocode"> | |||
| (see Step 1 in <xref target="sec.3pdisc-spec-step1"/>)<vspace/> | 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." | |||
| 8.B.D.0.1.0.0.2.IP6.ARPA.", as well as | </sourcecode> | |||
| (see Step 2 in <xref target="sec.3pdisc-spec-step2"/>)<vspace/> | <t>as well as the following | |||
| R64 = "2.0.0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.",<vspace/> | (see Step 2 in <xref target="sec.3pdisc-spec-step1" | |||
| R56 = "0.0.1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.",<vspace/> | format="default"/>): | |||
| R48 = "1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA.",<vspace/> | </t> | |||
| R40 = "0.0.8.B.D.0.1.0.0.2.IP6.ARPA.", and<vspace/> | <sourcecode type="pseudocode"> | |||
| R32 = "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." | |||
| </t> | 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." | ||||
| </sourcecode> | ||||
| <t>In order to illustrate the third step of the | <t>In order to illustrate the third step of the | |||
| ALTO Cross-Domain Server Discovery Procedure, we use | ALTO Cross-Domain Server Discovery Procedure, we use | |||
| the "dig" (domain information groper) DNS lookup utility | the "dig" (domain information groper) DNS lookup utility | |||
| that is available for many operating systems (e.g., Linux). | that is available for many operating systems (e.g., Linux). | |||
| A real implementation of the ALTO Cross-Domain Server Discovery | A real implementation of the ALTO Cross-Domain Server Discovery | |||
| Procedure would not be based on the "dig" utility, but use | Procedure would not be based on the "dig" utility but instead would | |||
| appropriate libraries and/or operating system APIs. | use | |||
| appropriate libraries and/or operating-system APIs. | ||||
| Please note that the following steps have been performed in a | Please note that the following steps have been performed in a | |||
| controlled lab environment with a appropriately configured | controlled lab environment with an appropriately configured | |||
| name server. A suitable DNS configuration will be needed | name server. A suitable DNS configuration will be needed | |||
| to reproduce these results. Please also note that the rather | to reproduce these results. Please also note that the rather | |||
| verbose output of the "dig" tool has been shortened to the | verbose output of the "dig" tool has been shortened to the | |||
| relevant lines.</t> | relevant lines.</t> | |||
| <t>Since AT = IPv6 and L = 128, in the table given | ||||
| <t>Since AT = IPv6 and L = 128, in the table given | in <xref target="sec.3pdisc-spec-step3" format="default"/>, the sixt | |||
| in <xref target="sec.3pdisc-spec-step3"/>, the sixth row | h row | |||
| (not counting the column headers) applies.</t> | (not counting the column headers) applies.</t> | |||
| <t>As mandated by the third column, we start with a lookup | ||||
| <t>As mandated by the third column, we start with a lookup | ||||
| of R128, looking for NAPTR resource records: | of R128, looking for NAPTR resource records: | |||
| <figure><artwork><![CDATA[ | </t> | |||
| <artwork> | ||||
| | 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. | |||
| | | | | |||
| | ;; Got answer: | | ;; Got answer: | |||
| | ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 26553 | | ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 26553 | |||
| | ;; 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 | |||
| ]]></artwork></figure> | </artwork> | |||
| <t> | ||||
| The domain name R128 does not exist (status: NXDOMAIN), so we | The domain name R128 does not exist (status: NXDOMAIN), so we | |||
| cannot get a useful result. Therefore, we continue with the | cannot get a useful result. Therefore, we continue with the | |||
| fourth column of the table and do a lookup of R64: | fourth column of the table and do a lookup of R64: | |||
| <figure><artwork><![CDATA[ | </t> | |||
| <artwork> | ||||
| | 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 | |||
| ]]></artwork></figure> | </artwork> | |||
| <t> | ||||
| The domain name R64 could be looked up (status: NOERROR), | The domain name R64 could be looked up (status: NOERROR), | |||
| but there are no NAPTR resource records associated with it (ANSWER: | but there are no NAPTR resource records associated with it (ANSWER: | |||
| 0). Maybe, there are some other resource records such as | 0). There may be some other resource records such as | |||
| PTR, NS, or SOA, but we are not interested in them. | PTR, NS, or SOA, but we are not interested in them. | |||
| Thus, we do not get a useful result and we continue with | Thus, we do not get a useful result, and we continue with | |||
| looking up R56: | looking up R56: | |||
| <figure><artwork><![CDATA[ | </t> | |||
| <artwork> | ||||
| | 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!" . | |||
| ]]></artwork></figure> | </artwork> | |||
| <t> | ||||
| The domain name R56 could be looked up and there are | The domain name R56 could be looked up, and there are | |||
| NAPTR resource records associated with it. However, | NAPTR resource records associated with it. However, | |||
| each of these records has a service parameter that | each of these records has a service parameter that | |||
| does not match our SP = "ALTO:https" | does not match our SP = "ALTO:https" | |||
| (see <xref target="RFC7216"/> for "LIS:HELD"), | (see <xref target="RFC7216" format="default"/> for "LIS:HELD"), | |||
| and therefore, we have to ignore them. | and therefore we have to ignore them. | |||
| Consequently, we still do not have a useful result and | Consequently, we still do not have a useful result and | |||
| continue with a lookup of R48: | continue with a lookup of R48: | |||
| <figure><artwork><![CDATA[ | </t> | |||
| <artwork> | ||||
| | 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: | |||
| | 1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. 604800 IN NAPTR 100 10 "u" | | 1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. 604800 IN NAPTR 100 10 "u" | |||
| | "ALTO:https" "!.*!https://alto1.example.net/ird!" . | | "ALTO:https" "!.*!https://alto1.example.net/ird!" . | |||
| | 1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. 604800 IN NAPTR 100 10 "u" | | 1.0.0.0.8.B.D.0.1.0.0.2.IP6.ARPA. 604800 IN NAPTR 100 10 "u" | |||
| | "LIS:HELD" "!.*!https://lis.example.net:4802/?c=ex!" . | | "LIS:HELD" "!.*!https://lis.example.net:4802/?c=ex!" . | |||
| ]]></artwork></figure> | </artwork> | |||
| <t> | ||||
| This lookup yields two NAPTR resource records. We have | This lookup yields two NAPTR resource records. We have | |||
| to ignore the second one as its service parameter does | to ignore the second one as its service parameter does | |||
| not match our SP, but the first NAPTR resource record has | not match our SP, but the first NAPTR resource record has | |||
| a matching service parameter. Therefore, the procedure | a matching service parameter. Therefore, the procedure | |||
| terminates successfully and the final outcome is: | terminates successfully and the final outcome is: | |||
| IRD_URIS_X = "https://alto1.example.net/ird". | IRD_URIS_X = "https://alto1.example.net/ird". | |||
| </t> | </t> | |||
| <t>The ALTO client that is embedded in the tracker will | ||||
| <t>The ALTO client that is embedded in the tracker will | ||||
| access the ALTO Information Resource Directory | access the ALTO Information Resource Directory | |||
| (IRD, see Section 9 of <xref target="RFC7285"/>) | (IRD, see <xref target="RFC7285" format="default" | |||
| sectionFormat="of" section="9"/>) | ||||
| at this URI, look for the Endpoint Cost Service | at this URI, look for the Endpoint Cost Service | |||
| (ECS, see Section 11.5 of <xref target="RFC7285"/>), | (ECS, see <xref target="RFC7285" format="default" | |||
| sectionFormat="of" section="11.5"/>), | ||||
| and query the ECS for the costs between A and X, | and query the ECS for the costs between A and X, | |||
| B and X, as well as C and X, before returning | B and X, and C and X, before returning | |||
| an ALTO-optimized list of candidate resource providers | an ALTO-optimized list of candidate resource providers | |||
| to resource consumer X.</t> | to resource consumer X.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section title="Contributors List and Acknowledgments"> | <!-- [rfced] FYI, we have changed the title from "Contributors List and | |||
| Acknowledgements" to simply "Acknowledgements", as those are typically | ||||
| <t>The initial version of this document was co-authored by | separate sections. Please let us know if you'd like to move text into a | |||
| Marco Tomsu (Alcatel-Lucent).</t> | "Contributors" section. | |||
| --> | ||||
| <t>This document borrows some text from <xref target="RFC7286"/>, | <section numbered="false" toc="default"> | |||
| as historically, it has been part of the draft that | <name>Acknowledgments</name> | |||
| <t>The initial draft version of this document was co-authored by | ||||
| <contact fullname="Marco Tomsu"/> (Alcatel-Lucent).</t> | ||||
| <t>This document borrows some text from <xref target="RFC7286" format="def | ||||
| ault"/>, | ||||
| as historically, it was part of the draft that | ||||
| eventually became said RFC. | eventually became said RFC. | |||
| Special thanks to Michael Scharf and Nico Schwan.</t> | Special thanks to <contact fullname="Michael Scharf"/> and <contact full | |||
| name="Nico Schwan"/>.</t> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 334 change blocks. | ||||
| 1203 lines changed or deleted | 1328 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/ | ||||