<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com)
     by Daniel M Kohn (private) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-yang-alto-multi-domain-02" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" version="3" consensus="true">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

  <front>
    <title abbrev="ALTO Multi-Domain">ALTO Multi-Domain Use Cases and Services</title>
    <seriesInfo name="Internet-Draft" value="draft-yang-alto-multi-domain-02"/>

    <author fullname="Danny Lachos" initials="D." surname="Lachos">
      <organization>Benocs</organization>
      <address>
        <postal>
          <street/>
          <city>Berlin</city>
          <country>Germany</country>
        </postal>
        <email>dlachos@benocs.com</email>
      </address>
    </author>

    <author fullname="Ingmar Poese" initials="I." surname="Poese">
      <organization>Benocs</organization>
      <address>
        <postal>
          <street/>
          <city>Berlin</city>
          <country>Germany</country>
        </postal>
        <email>ingmar@benocs.com</email>
      </address>
    </author>

    <author fullname="Mario Lassnig" initials="M." surname="Lassnig">
      <organization>CERN</organization>
      <address>
        <postal>
          <street/>
          <city>Geneva 23</city>
          <code>1211</code>
          <country>Switzerland</country>
        </postal>
        <email>mario.lassnig@cern.ch</email>
      </address>
    </author>

    <author fullname="Annie Gu" initials="A." surname="Gu">
      <organization>Yale University</organization>
      <address>
        <postal>
          <street>51 Prospect St</street>
          <city>New Haven</city>
          <region>CT</region>
          <code>06520</code>
          <country>USA</country>
        </postal>
        <email>annie.gu@yale.edu</email>
      </address>
    </author>

    <author fullname="Y. Richard Yang" initials="Y." surname="Yang">
      <organization>Yale University</organization>
      <address>
        <postal>
          <street>51 Prospect St</street>
          <city>New Haven</city>
          <region>CT</region>
          <code>06520</code>
          <country>USA</country>
        </postal>
        <email>yry@cs.yale.edu</email>
      </address>
    </author>

    <author fullname="Jordi Ros Giralt" initials="J." surname="Ros Giralt">
      <organization>Qualcomm</organization>
      <address>
        <postal>
          <street/>
          <city>Madrid</city>
          <country>Spain</country>
        </postal>
        <email>jros@qti.qualcomm.com</email>
      </address>
    </author>

    <date day="10" month="July" year="2023"/>
    <area>TSV Area</area>
    <workgroup>ALTO Working Group</workgroup>
    <keyword>RFC</keyword>
    <keyword>Request for Comments</keyword>
    <keyword>I-D</keyword>
    <keyword>Internet-Draft</keyword>
    <keyword>Application-Layer Traffic Optimization, Multi-Domain, BGP</keyword>
    <abstract>
      <t>Application-Layer Traffic Optimization (ALTO) provides means for network 
        applications to obtain network information. Although ALTO is inherently 
        multi-domain, in that the ALTO server representing the network and the ALTO client requesting the network information belong to different trust domains, 
        there are more general cases where the path from the source and the destination spans multiple autonomous networks, which we call multi-domain settings. This document first gives 3 multi-domain use cases, and the challenges to address the challenges. It then gives a brief update on the implementation solutions that we explored to address the challenges.
      </t>
    </abstract>
    <note>
      <name>Requirements Language</name>
      <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" format="default"/>
          <xref target="RFC8174" format="default"/> when,
          and only when, they appear in all capitals, as shown here.
      </t>
    </note>
  </front>

  <middle>
    <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>

      <t>Application-Layer Traffic Optimization (ALTO) provides means 
         for network applications to obtain network information. For 
         example, the Endpoint Cost Service (ECS) and the Cost Map 
         Service (CMS) defined by ALTO in 
         <xref target="RFC7285" format="default"/> can provide the 
         network-path properties (e.g., routing costs, or relative 
         ranking) of data transmissions from a set of source network 
         locations to a set of destination network locations. The 
         Path Vector Service allows ALTO to provide bandwidth 
         availability (bottlenecks) for a given set of flows defined
         by a set of source-destination pairs. </t>

      <t>Although such services can provide values when only a single
         network, called a single-domain, provides these services, there
         are many use cases where multiple networks, called multi-domains, 
         can be involved from a given source to a given destination. 
         <xref target="RFC7971" format="default"/> states that "The 
         ALTO protocol is designed for use cases where the ALTO server 
         and client can be located in different organizations or trust 
         domains. ALTO is inherently designed for use in multi-domain 
         environments. Most importantly, ALTO is designed to enable 
         deployments in which the ALTO server and the ALTO client are not 
         located within the same administrative domain.”</t>

      <t>This document first specifies three multi-domain use cases. It
         then discuss the two challenges when deploying ALTO in multi-domain
         settings. At the end, this document provides initial designs, 
         based on current implementation experiences to start the design 
         conversation. </t>

    </section>

    <section anchor="use-cases" numbered="true" toc="default">
      <name>Multi-domain Use Cases</name>
      <t>To be concrete, this document uses 3 use cases from the context of
         data-intensive sciences for CERN/WLCG. </t>

      <section anchor="usecase-rucio" numbered="true" toc="default">
        <name>Multi-domain Path Distance/Ranking for Rucio</name>

        <t>The data orchestration system of CERN/WLCG is Rucio, which 
           selects a source for a given downloading client, when multiple sources 
           provide the data set. Rucio also conducts destination selection, when 
           multiple destinations can be the target locations for replication.</t> 

        <t>The main mechanism of source/destination selection in Rucio is distance, 
           which is a perfect match for ALTO cost services; see appendix for a review 
           of the full source/destination mecahnism of Rucio. Specifically, consider 
           the following ECS query realizing ALTO ECS for Rucio to do destination 
           selection. The source is located at CERN and the destination candidates 
           are at multiple locations of the LHCONE network (BNL, Caltech, and KIT, 
           for example).</t>

        <artwork name="" type="" align="left" alt=""><![CDATA[        
  POST /endpointcost/lookup HTTP/1.1
  Host: alto.example.com
  Content-Length: 248
  Content-Type: application/alto-endpointcostparams+json
  Accept: 
     application/alto-endpointcost+json,application/alto-error+json

  {
    "cost-type": {"cost-mode" : "numerical",
                  "cost-metric" : "routingcost"},
    "endpoints" : {
      "srcs": [ "ipv4:128.141.201.74" ],
      "dsts": [
        "ipv4:130.199.4.27",
        "ipv4:104.18.24.74",
        "ipv4:141.3.128.6"        
      ]
    }
  }


  HTTP/1.1 200 OK
  Content-Length: 274
  Content-Type: application/alto-endpointcost+json

  {
    "meta" : {
      "cost-type": {"cost-mode" : "numerical",
                    "cost-metric" : "routingcost"
      }
    },
    "endpoint-cost-map" : {
      "ipv4:128.141.201.74": {
        "ipv4:130.199.4.27" : 20,
        "ipv4:104.18.24.74" : 30,
        "ipv4:141.3.128.6"  : 10
      }
    }
  }
      ]]></artwork>
        
        <t>The use case provide an example of a multi-domain setting, because 
           the source and the desintations are located at different networks and
           the network paths span multiple autonomous networks. Figure 1 below
           illustrates a network path from src to dst spanning 4 networks.
        </t>

        <artwork name="" type="" align="left" alt=""><![CDATA[                                                                                       
      AS S              AS A        AS B         AS D            
+-------------+se1  +---------+   +-----+   +------------+     
| src       --|-----|ai1   ae1|---|     |---|di1     dst |     
|+--+    --/  |     |         |   |     |   |       +--+ |     
||  | --/     |     |         |   |     |   |       |  | |     
|+--+    \    |se2  |         |   |     |   |       +--+ |     
|         \__ |_____|ai2   ae2|---|     |---|di2         |     
+-------------+     +---------+   +-----+   +------------+     

              Figure 1. Multi-domain Network.

       ]]></artwork>
        
      </section> <!-- Rucio Use Case --> 

      <section anchor="usecase-fts" numbered="true" toc="default">
        <name>Multi-domain Path -> Link Mapping for FTS</name>

        <t>The data transport scheduling system of CERN/WLCG is FTS, which 
           schedules given transfers, where a transfer has a fixed dataset,
           a source and a destination (for example, chosen by Rucio).</t> 

        <t>One main function of FTS is to satisfy operator resource constraints. 
           As an example, FTS may schedule concurrent transfers
           from CERN to CalTech and KIT, under the constraint that the total
           transmission rate for a given link should be within a threshold. </t>

        <t>Consider Figure 1. Assume S is CERN and D is CalTech. The network path 
          from CERN to CalTech uses the top inter-AS link (se1->ai1), and 
          the network path from CERN to KIT uses the lower inter-AS 
          link (se2->ai2). For FTS to know how much demand it is placing on each
          one of these two links to stay within the constraint of each link, FTS
          needs to know the network paths, and the paths span multiple autonomous networks.</t>
      
      </section> <!-- FTS Use Case --> 

      <section anchor="usecase-noted" numbered="true" toc="default">
        <name>Multi-domain Resource Discovery for NOTED/SENSE</name>

        <t>An emerging capacity for LHCONE/WLCG is the ability to create new
           paths to obtain additional capacity when there is high demand from
           a given source storage element (SE) to a destination element (SE). 
           In particular, the NOTED project monitors the backlog at Rucio/FTS
           for each source SE, destination SE pair, and may decide to create
           a path if one pair has a large backlog. </t>

        <t>To identify available networking capacity, ALTO Path Vector Service 
          (PVS) is an ideal service. However, as we see from Figure 1, the setting
           can be a multi-domain setting. </t>   

      </section> <!-- NOTED Use Case --> 

    </section><!-- Use Cases -->

    <section anchor="challenges" numbered="true" toc="default">
      <name>Multi-domain Challenges</name>
      
      <t>Although implementing ECS/CMS/PVS is relatively straightforward in a 
         single domain, there are challenges implementing these services in
         multi-domain settings.</t>

      <section anchor="problem-challenge-distinfo" numbered="true" toc="default">
        <name>Challenge: Distributed Information</name>

        <t>Consider Figure 1, to compute the total routing cost of the path from 
           the src to the dst. The routing costs will consist of multiple segments
           spanning 4 autonomous networks: (1) from src to the link connecting the 
           egress of AS S (se1) and the ingress of AS A (ia1); (2) from the ingress
           of A to the ingress of B; (3) from the ingress of B to the ingress of D; (
           4) from the ingress of D to dst.</t>

        <t>One may think that BGP collects information from multiple autonomous 
           networks through back propagation from the destination, and hence 
           includes information for all 4 segments. But BGP information is 
           distributed, coarse-grained, and incomplete.
        </t>

        <t>Source: The BGP router at AS S knows that the path from src to dst
           consists of the AS-PATH [S A B D]. Combining BGP and intradomain routing, AS S will also know which one of the two egress routers (se1, se2) that it will use to forward traffic to dst. However, AS S does not know more details downstream: for example, it does not know whether the packet will use ae1 or ae2 as the egress router at AS A to enter AS B; neither does it know the internal routing inside AS A. Hence, an ALTO server provided by AS S cannot provide all of the information for the example ECS query.
        </t>

        <t>Non-Source AS: A non-source AS knows the AS-PATH starting from itself to dst. But it may not know the ingress point. For example, AS A does not know whether the packet will come in from ai1 or ai2. Hence, an ALTO server provided by AS A may consider the example ECS query as an ambiguous query (because it gives only source (src) and destination (dst), but it does not in general know the ingress point). 
        </t>
      </section>

      <section anchor="problem-challenge-partial-deploy" numbered="true" toc="default">
        <name>Challenge: Partial Deployment</name>
        <t>It is possible to design protocol extensions to collect the aforementioned distributed information to provide complete information (see below), but one challenge is that the deployment may be only incremental and hence is partially deployed during the process.</t>
      </section>

    </section> <!-- problem -->

    <section anchor="solutions" numbered="true" toc="default">
      <name>Solution Space Exploration</name>
      <t>During the process of integrating ALTO to support the Rucio and FTS use 
         cases, multiple potential solutions are implemented. Below we discuss them briefly to motivate discussions.
      </t>

      <section anchor="solution-space" numbered="true" toc="default">
        <name>Solution Space to Obtain Forwarding Information Bases (FIBs)</name>

        <t>Obtaining FIBs is a basic building block of implementing ALTO route-related visibility services. At a high-level, FIBs have the following 
          life cycle:</t>

        <dl newline="true">
          <dt>FIB-Configure/input:</dt>
            <dd>Consider a network as a distributed system. Then the input to the 
                distributed system is the input to the components: the routers. 
                The input to each router is its configuration, and external input such as BGP routes from peers outside the network.
            </dd>

          <dt>FIB-Compute:</dt>
            <dd>The distributed system computes the FIBs using a distributed 
                protocol (or configured by a logically centralized control plane). 
                During the computing process, the vendor specific 
                configuration may be turned into standard format such as IGP 
                information model.
            </dd>

          <dt>FIB-Apply:</dt>
            <dd>The FIBs are computed and then applied. When FIBs are applied to 
                data packets, the application may be observed by NetFlow/sFlow or 
                similar capturing capabilities; it may also be applied to control 
                mechanisms such as traceoute, which can be observed.
            </dd>
        </dl>

      </section>
      
      <section anchor="solution-routing-layer" numbered="true" toc="default">
        <name>FIB-Compute Based Design</name>
        <t>This is a type of solution that makes it possible to extends FIB-Compute 
           to compute all needed network information at a single autonomous network, 
           addressing the distributed information challenge. Assume that 
           use an ALTO server at the source network to abstract and expose 
           the information. One natural candidate is to modify the routing control 
           plane itself: BGP extensions, which can be extended to collect needed 
           information and propagate upstream. For example, when a BGP router at AS A 
           (e.g., ai1) propagates BGP info to its peer at AS S (se1), it includes not 
           only the AS-PATH [A, B, D], but also additional information so that the 
           upstream can construct the complete path cost (distance) metrics. </t>

        <t>The upside of this design is that it integrates with routing system 
           and hence may even extend routing capabilities. However, routing protocol 
           extensions can be complex in deployment. Further, it provides a different 
           trust model: the original ALTO model is a star trust model, with the 
           application (e.g., Rucio/FTS) at the hub and each AS needs to trust the 
           application. The BGP extension model requires the trust of peers and 
           recursive peers (BGP community may be used to impose policies).</t>
      </section>

      <section anchor="solution-data-path-sampling" numbered="true" toc="default">
        <name>FIB-Apply Based Design</name>
        
        <t>This is a type of solution that allows data path to collect control 
           plane information. For example, a traceroute based system called PerfSonar 
           is widely deployed in our setting. It is also natural to use NetFlow/sFlow 
           to identify ingress points. Such a system can collect other network 
           information such as delay and loss naturally as 
           measurements. </t>

        <t>However, this type of solutions can have many issues. For example, 
           traceoute has issues including anonymous routers, uncertain router IP 
           resulting in node aliasing; load balancing routing resulting in link 
           aliasing.
        </t>
      </section>


      <section anchor="solution-x-alto" numbered="true" toc="default">
        <name>Multi-Domain Cascading ALTO</name>

        <t>This is a model that is presented by Ingmar Poese as Cascading 
          ALTO at IETF 116. For Cascading ALTO by Poese, please see his IETF 116 slides.</t>

        <t>In the ALTO base model, a network is a container, which we call a big 
             switch, with endpoints attached to the big switch. In the multi-domain
             model, each network (represented by an ALTO server) has a set of ingress 
             points (in-1 to in-m) and a set of egress points (e-1 to e-n). An 
             endpoint belonging to the network will be attached to an ingress point 
             and an egress point. Hence, a single-domain ALTO query will specify 
             ingress and egress directly attached to an ingress point and an egress 
             point. A source network, to a destination that is not in the same 
             network, however, will only return the egress point; a destination 
             network, when the source is from a different network, will need an 
             ingress point. A general transit network will need an ingress point and 
             return egress point. For consistency, the egress point must be a valid 
             ingress point, represented by a unique address, of the peer.
        </t>  

        <artwork name="" type="" align="left" alt=""><![CDATA[

                                                                                
            in-1   +-------------+  e-1                                         
               ----|             |----                                          
                   |             |                                              
               ----|             |----                                          
                   |             |                                              
               ----|             |----                                          
                   |             |                                              
               ----|             |----                                          
            in-m   +-------------+  e-n                                         
        ]]></artwork>

        <t>ALTO Server Multi-domain Query Model: Each ECS query, if the src is not in the home domain of the ALTO 
        server, should include an ingress point, where the ingress point is returned by the 
        ALTO server of the previous domain. If the domain of the ALTO server is not the home domain of the destination, the ALTO server should return the egress point of the home domain and the ingress of the network domain.</t>

        <t>As an optional feature, the query should allow indication of iterative or recursive queries.</t>

        <t>To support incremental deployment, an ALTO server may respond to a query without specifying an ingress point and the source is not in the domain of the ALTO server. In this case, the ALTO server will return the results from each potential ingress points. For each ingress point indicated, the server indicates information of the previous hop (e.g., peer AS number and potential address).</t>

      </section> <!-- x-alto -->

      <section anchor="solution-alto-general-path" numbered="true" toc="default">
        <name>General-Path Model Supporting Partial Deployment</name>

        <t>Complementing the cascading model, we introduced a generic-path model at 
           ALTO clients so that they can use the acquired information to gradually 
           refine network information.
        </t>

        <t>In particular, it allows the path from a src to a dst to be a directed acyclic graph, with the following components:</t>

        <t>A set of nodes, where each node has both a type, and attributes, where the type 
            can be 
            (1) host: such as src/dst, with attributes such as IP address; 
            (2) AS: which is a group of nodes, i.e., subgraph, with attributes including ASN; 
            (3) router, with subtypes such as BGP-router, with attributes such as IP address. </t>

        <t>A set of links, where each link has a head and a tail; hence the types of links 
            will be the unique combinations of head-type x tail type. A link can have its attributes as well.</t>

        <t>Now, some examples of this representation in our deployment use case:</t>

        <t>For the geo-distance ALTO cost derived from geo-ip: the src is a host and the dst is also a host, and the metric is the geo distance;</t>


        <t>For CERN looking glass ALTO server, from a src host in CERN to a dst host in another network, say KIT, the src is a host, with two links, one for each of the two looking glass BGP routers from cern; each of these BGP routers links to its BGP peer, and each such BGP peer links to the next AS, in the AS-PATH exposed by CERN.</t>
        
      </section> <!-- general path model -->

    </section> <!-- solution -->


    <section anchor="ianaconsider" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>Some of the solutions will need IANA registrations. 
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>The authors of this document would also like to thank many
      for the reviews and comments.</t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>


         <reference anchor="RFC7285" target="https://www.rfc-editor.org/info/rfc7285" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7285.xml">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author initials="R." surname="Alimi" fullname="R. Alimi" role="editor">
              <organization/>
            </author>
            <author initials="R." surname="Penno" fullname="R. Penno" role="editor">
              <organization/>
            </author>
            <author initials="Y." surname="Yang" fullname="Y. Yang" role="editor">
              <organization/>
            </author>
            <author initials="S." surname="Kiesel" fullname="S. Kiesel">
              <organization/>
            </author>
            <author initials="S." surname="Previdi" fullname="S. Previdi">
              <organization/>
            </author>
            <author initials="W." surname="Roome" fullname="W. Roome">
              <organization/>
            </author>
            <author initials="S." surname="Shalunov" fullname="S. Shalunov">
              <organization/>
            </author>
            <author initials="R." surname="Woundy" fullname="R. Woundy">
              <organization/>
            </author>
            <date year="2014" month="September"/>
            <abstract>
              <t>Applications using the Internet already have access to some topology information of Internet Service Provider (ISP) networks.  For example, views to Internet routing tables at Looking Glass servers are available and can be practically downloaded to many network application clients.  What is missing is knowledge of the underlying network topologies from the point of view of ISPs.  In other words, what an ISP prefers in terms of traffic optimization -- and a way to distribute it.</t>
              <t>The Application-Layer Traffic Optimization (ALTO) services defined in this document provide network information (e.g., basic network location structure and preferences of network paths) with the goal of modifying network resource consumption patterns while maintaining or improving application performance.  The basic information of ALTO is based on abstract maps of a network.  These maps provide a simplified view, yet enough information about a network for applications to effectively utilize them.  Additional services are built on top of the maps.</t>
              <t>This document describes a protocol implementing the ALTO services. Although the ALTO services would primarily be provided by ISPs, other entities, such as content service providers, could also provide ALTO services.  Applications that could use the ALTO services are those that have a choice to which end points to connect.  Examples of such applications are peer-to-peer (P2P) and content delivery networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7285"/>
          <seriesInfo name="DOI" value="10.17487/RFC7285"/>
        </reference>
        <!-- alto base -->


        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <!-- requirements words -->
       </references>    

       <references>
        <name>Informative References</name>

        <reference anchor="RFC7971" target="https://www.rfc-editor.org/info/rfc7971" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7971.xml">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Deployment Considerations</title>
            <author initials="M." surname="Stiemerling" fullname="M. Stiemerling">
              <organization/>
            </author>
            <author initials="S." surname="Kiesel" fullname="S. Kiesel">
              <organization/>
            </author>
            <author initials="M." surname="Scharf" fullname="M. Scharf">
              <organization/>
            </author>
            <author initials="H." surname="Seidel" fullname="H. Seidel">
              <organization/>
            </author>
            <author initials="S." surname="Previdi" fullname="S. Previdi">
              <organization/>
            </author>
            <date year="2016" month="October"/>
            <abstract>
              <t>Many Internet applications are used to access resources such as pieces of information or server processes that are available in several equivalent replicas on different hosts.  This includes, but is not limited to, peer-to-peer file sharing applications.  The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This memo discusses deployment-related issues of ALTO.  It addresses different use cases of ALTO such as peer-to-peer file sharing and Content Delivery Networks (CDNs) and presents corresponding examples. The document also includes recommendations for network administrators and application designers planning to deploy ALTO, such as recommendations on how to generate ALTO map information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7971"/>
          <seriesInfo name="DOI" value="10.17487/RFC7971"/>
        </reference>
        <!-- requirements -->

    </references>
    </references>

  </back>
</rfc>
