<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-giraltyellamraju-alto-bsg-multidomain-00" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.0 -->
  <front>
    <title>Bottleneck Structure Graphs in Multidomain Networks: Introduction and Requirements for ALTO</title>
    <seriesInfo name="Internet-Draft" value="draft-giraltyellamraju-alto-bsg-multidomain-00"/>
    <author initials="J." surname="Ros-Giralt" fullname="Jordi Ros-Giralt">
      <organization>Qualcomm Europe, Inc.</organization>
      <address>
        <email>jros@qti.qualcomm.com</email>
      </address>
    </author>
    <author initials="S." surname="Yellamraju" fullname="Sruthi Yellamraju">
      <organization>Qualcomm Technologies, Inc.</organization>
      <address>
        <email>yellamra@qti.qualcomm.com</email>
      </address>
    </author>
    <author initials="Q." surname="Wu" fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <author initials="L. M." surname="Contreras" fullname="Luis Miguel Contreras">
      <organization>Telefonica</organization>
      <address>
        <email>luismiguel.contrerasmurillo@telefonica.com</email>
      </address>
    </author>
    <author initials="R." surname="Yang" fullname="Richard Yang">
      <organization>Yale University</organization>
      <address>
        <email>yry@cs.yale.edu</email>
      </address>
    </author>
    <author initials="K." surname="Gao" fullname="Kai Gao">
      <organization>Sichuan University</organization>
      <address>
        <email>kaigao@scu.edu.cn</email>
      </address>
    </author>
    <date year="2022" month="October" day="24"/>
    <area>Transport</area>
    <workgroup>Application-Layer Traffic Optimization</workgroup>
    <keyword>ALTO</keyword>
    <abstract>
      <t>This document proposes an extension to the base Application-Layer
Traffic Optimization(ALTO) protocol to support the computation
of bottleneck structure graphs
<xref target="I-D.draft-giraltyellamraju-alto-bsg-requirements"/> under
partial information. A primary application corresponds to the
case of multi-domain networks, whereby each network domain
is administered separately and lacks information about the
other domains. A proposed border protocol is introduced
that ensures each domain's independent convergence to the correct
bottleneck substructure graph without the need to know
private flow and topology information from other domains.
Initial discussions are presented on the necessary
requirements to integrate the proposed capability into the
ALTO standard.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://giralt.github.io/draft-ietf-alto-gradientgraph-multidomain/draft-giraltyellamraju-alto-bsg-multidomain.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-giraltyellamraju-alto-bsg-multidomain/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Application-Layer Traffic Optimization Working Group mailing list (<eref target="mailto:alto@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/alto/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/alto/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/giralt/draft-ietf-alto-gradientgraph-multidomain"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Bottleneck structures have been recently introduced in <xref target="G2-SIGCOMM"/> and
<xref target="G2-SIGMETRICS"/> as efficient computational graphs that embed information about
the topology, routing and flow information of a network. These
computational graphs allow network operators and application service
providers to compute network derivatives that can be used
to make traffic optimization decisions. For instance, using
the bottleneck structure of a network, a real-time communication (RTC)
application can efficiently estimate the multi-hop end-to-end available
bandwidth, and use that information to tune the encoder's transmission
rate and optimize the user's Quality of Experience (QoE).
Bottleneck structures can be used by the application to address a wide
variety of communication optimization problems, including routing,
flow control, flow scheduling, bandwidth prediction, and network slicing,
among others.</t>
      <t>The ALTO draft <xref target="I-D.draft-giraltyellamraju-alto-bsg-requirements"/> introduces
a new abstraction called Bottleneck Structure Graph
(BSG) and the necessary initial requirements to integrate it into the existing
ALTO services (Network Map, Cost Map, Entity Property Map and Endpoint
Cost Map) exposing the properties of the bottleneck structure
to help optimize application performance. When the ALTO server has full
visibility of the network (i.e., all of its links, routes, and flows),
the bottleneck structure can be computed using the algorithm introduced
in <xref target="G2-SIGCOMM"/> <xref target="G2-SIGMETRICS"/>. In many scenarios, however, flows traverse multiple
autonomous systems (ASs), and thus an ALTO server deployed in one AS may not
have access to topological and flow information from the other domains.
In this document, we describe a border protocol that allows ALTO servers
in each AS to share their local path metrics
dictionary (obtained via their local computation of the bottleneck
structure graph) with their neighbouring ASs. Using the algorithm
introduced in this document, this information alone is enough to ensure
independent convergence by each AS to the correct bottleneck
structure. This cooperative solution presents similar properties
as those found in well-known IETF protocols
such as BGP, including the properties of scalability (since metrics
only need to be shared on a per-path rather than per-flow basis, and
only between neighboring ASs) and privacy
(since no sensitive flow or topology information needs to be shared).</t>
      <t>We also present initial discussions on the necessary
requirements to integrate the proposed capability into the
ALTO standard.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <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>
    </section>
    <section anchor="distributed-protocol-to-compute-the-bottleneck-structure-of-an-as">
      <name>Distributed Protocol to Compute the Bottleneck Structure of an AS</name>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>In many real-world communication problems, data flows need to traverse
multiple network domains, each one administered by a different operator
that is responsible for (1) maintaining its own (and only its own)
domain and (2) ensuring interoperability with the other domains.
The quintessential example of multi-domain networks is the Internet,
designed as a "network of interconnected networks", commonly
known as <em>autonomous systems</em> (ASs).</t>
        <t>In multi-domain networking environments, the operator in each domain
only has visibility of its own network. In particular, the operator
may know with precision the topology, the capacity of each link,
the classes of quality of service (QoS) to serve, and the flows
currently active in their network, but usually has no knowledge
about the structure and state of any other network in the
multi-domain environment. For instance, a data flow may need to cross
two network domains, one operated by Operator O1 and another one
operated by Operator O2. O1 has no visibility into the network operated by O2,
while O2 has no visibility into the network operated by O1.
Yet both networks need to cooperate in order to ensure the end-to-end
QoS required by the flow.</t>
        <t>Bottleneck structures (<xref target="G2-SIGCOMM"/>, <xref target="G2-SIGMETRICS"/>) are computational
graphs that characterize the state of a communication network allowing
human operators and machines to compute network derivatives very fast.
These derivatives are core building blocks that enable the optimization
of networks in a variety of problems including traffic engineering,
routing, flow scheduling, capacity planning, resilience analysis and
network design. In order to compute the bottleneck structure of a network,
information of the set of links traversed by each flow and the
capacity of the links is required. In a multi-domain networking
environment, however, such information is only known partially. For
instance, in the example above, operator O1 can know the set of links
traversed by a flow that reside in its own network, but may not
know the set of links traversed by a flow that reside in the operator O2
network. Moreover, in many cases, such information is considered confidential
for security, privacy and competitiveness reasons.</t>
        <t>In this document, we introduce a distributed protocol that addresses the
above problem, enabling the computation of bottleneck structures
under the scenario of partial information. In particular,
an algorithm to compute the bottleneck structure of a network
domain--referred as the <em>bottleneck substructure</em>--is introduced that
only requires a simple, scalable, and secure cooperative exchange of a
path metric between neighboring autonomous systems to ensure global
convergence to the correct state. Because network
operators do have the ability to cooperate (provided that the exchange
is simple, secure and guarantees privacy), the algorithm provides
a practical methodology to optimize system-wide flow performance
in a multi-domain network.</t>
      </section>
      <section anchor="base-protocol-definitions">
        <name>Base Protocol Definitions</name>
        <t>In this section, we briefly state the basic definition of
bottleneck structure and introduce a few simple additional definitions
that are necessary to understand the proposed protocol. For a more
thorough description of the bottleneck structure framework,
please refer to <xref target="I-D.draft-giraltyellamraju-alto-bsg-requirements"/>.</t>
        <t>Let L and F be the set of links and flows of a network, respectively.
Its bottleneck structure is defined as follows:</t>
        <ul spacing="normal">
          <li>Links and flows are represented by vertices in the graph.</li>
          <li>There is a directed edge from a link l to a flow f if and only if flow f is bottlenecked at link l.</li>
          <li>There is a directed edge from a flow f to a link l if and only if flow f traverses link l.</li>
        </ul>
        <t>Since the above definition corresponds to a graph, we use the terms <em>bottleneck
structure</em> and <em>bottleneck structure graph</em> (BSG) interchangeably.</t>
        <t>As shown in <xref target="I-D.draft-giraltyellamraju-alto-bsg-requirements"/>, the BSG
explains how perturbations in a network (e.g., the arrival
or departure of a flow, the change in link capacity of a network,
a link failure, etc.) propagate through the
network. Mathematically, these perturbations
can be understood as network derivatives. Because these derivates
can be computed in the graph as simple delta calculations, the BSG
enables a computationally scalable mechanism to optimize a network for
a variety of use cases such as optimal path computation, bandwidth
prediction, service placement, or network topology reconfiguration, among
others (<xref target="G2-SIGCOMM"/>, <xref target="G2-SIGMETRICS"/>).</t>
        <t>To achieve scalability, the protocol proposed in this document uses a
version of the bottleneck structure graph called <em>Path Gradient Graph</em>
(PGG) (see <xref target="I-D.draft-giraltyellamraju-alto-bsg-requirements"/>).
The PGG significantly reduces the size of the bottleneck
structure graph by collapsing all the vertices of the flows that
follow the same path into a single vertex called the <em>path vertex</em>.
This technique leads to a more compact representation
of the bottleneck structure graph (thus, significantly reducing
computational complexity and memory storage) without affecting
its accuracy.</t>
        <t>The following table introduces additional
conventions and definitions that are used
in the description of the distributed protocol in the next section:</t>
        <table anchor="proto_defs">
          <name>Conventions and definitions used in the description of the distributed protocol.</name>
          <thead>
            <tr>
              <th align="right">Notation</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">A</td>
              <td align="left">The set of autonomous systems (ASs).</td>
            </tr>
            <tr>
              <td align="right">A_i</td>
              <td align="left">An AS in A, for i = 1, ..., |A|.</td>
            </tr>
            <tr>
              <td align="right">P(A_i) = {p_1, ..., p_|P(A_i)|}</td>
              <td align="left">The set of active paths found in A_i. These are paths for which there exist 0traffic flowing through them.</td>
            </tr>
            <tr>
              <td align="right">L(A_i) = {l_1, ..., l_|L(A_i)|}</td>
              <td align="left">The set of active links found in A_i. These are links for which there exists traffic flowing through them.</td>
            </tr>
            <tr>
              <td align="right">B</td>
              <td align="left">The global bottleneck structure graph. The form of bottleneck structure used by the distributed algorithm introduced in this document is the Path Gradient Graph <xref target="I-D.draft-giraltyellamraju-alto-bsg-requirements"/>.</td>
            </tr>
            <tr>
              <td align="right">B.BW(p)</td>
              <td align="left">The bandwidth available to path p according to the global bottleneck structure. This is always the globally correct available bandwidth for path p.</td>
            </tr>
            <tr>
              <td align="right">B(A_i)</td>
              <td align="left">The bottleneck substructure of A_i, corresponding to the subgraph of B that includes (1) the vertices corresponding to the paths in P(A_i), (2) the vertices corresponding to the links in L(A_i) and (3) all the edges in B that connect them. If a path p in P(A_i) is bottlenecked at a link not in L(A_i), then B(P, L) includes a virtual link v with capacity equal to B.BW(p) and a directed edge from v to p.</td>
            </tr>
            <tr>
              <td align="right">B(A_i).BW(p)</td>
              <td align="left">The bandwidth available to path p according to the bottleneck substructure of A_i. This value is equal to B.BW(p) when the distributed algorithm terminates.</td>
            </tr>
            <tr>
              <td align="right">PL(A_i)</td>
              <td align="left">A dictionary mapping every path in P(A_i) with the subset of links in L(A_i) that it traverses. Note that a path p can traverse one or more links not in L(A_i).  This reflects the notion of partial information inherent to multi-domain networking environments. That is, A_i may not know all the links traversed by its active paths; in particular, it only knows the subset of links that are in A_i.</td>
            </tr>
            <tr>
              <td align="right">C(A_i)</td>
              <td align="left">A dictionary mapping each link in A_i with its capacity (in bps).</td>
            </tr>
            <tr>
              <td align="right">N(A_i)</td>
              <td align="left">The set of ASs that are neighbors of A_i.</td>
            </tr>
            <tr>
              <td align="right">PM(A_i)(p)</td>
              <td align="left">The current bandwidth available to path p as computed by A_i. This is also known as the path metric of p according to A_i.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="description-of-the-distributed-protocol">
        <name>Description of The Distributed Protocol</name>
        <t>The algorithm run by each autonomous system AS_i, 1 &lt;= i &lt;= |A|,
consists of two independently executed events as follows:</t>
        <t><strong>Event: TIMER</strong></t>
        <artwork><![CDATA[
    - Every s seconds, perform the following tasks:

        1. B(A_i) = COMPUTE_BOTTLENECK_SUBSTRUCTURE(L(A_i), PL(A_i), C(A_i), PM(A_i));

        2. PM(A_i)(p) = B(A_i).BW(p), for all p in P(A_i);

        3. For all A_j in N(A_i):

            3.1 Send to A_j a PATH_METRIC_ANNOUNCEMENT message including (AS_i, PM(A_i));
]]></artwork>
        <t><strong>Event: PATH_METRIC_EXCHANGE</strong></t>
        <artwork><![CDATA[
    - Upon receiving a PATH_METRIC_ANNOUNCEMENT from AS_j carrying (AS_j, PM(A_j)):

        1. PM(A_i)(p) = min{PM(A_i)(p), PM(A_j)(p)}, for all p in P(A_i) and p in P(A_j);
]]></artwork>
        <t>As shown above, using a PATH_METRIC_ANNOUNCEMENT message, each AS periodically shares
local path metric information with its neighbor ASs. It can be shown
that this information alone is enough to ensure the convergence of
all the participating ASs to their correct bottleneck substructure.
(This is similar to the way BGP <xref target="RFC4271"/> sends <em>Update
Messages</em> to converge to a globally correct routing table
by only exchanging local knowledge between neighbor ASs.)</t>
        <t>The procedure COMPUTE_BOTTLENECK_SUBSTRUCTURE is called from
the TIMER event, and it is responsible for computing the bottleneck
substructure. It can be proven that this procedure converges
to the correct bottleneck substructure within a finite number
of PATH_METRIC_ANNOUNCEMENT messages:</t>
        <t><strong>Procedure: COMPUTE_BOTTLENECK_SUBSTRUCTURE(L, PL, C, PM):</strong></t>
        <artwork><![CDATA[
    1. i = 0; L_0 = L; PL_0 = PL;

    2. While True:

            2.1. B_i = COMPUTE_BOTTLENECK_STRUCTURE(L_i, PL_i, C);

            2.2. If B_i.BW(p) == PM(p) for all path p in PL_i:

                    2.2.1. Break;

            2.3. For all path p in PL_i such that B_i.BW(p) > PM(p):

                    2.3.1. If PL_i[p] has no virtual link:

                            2.3.1.1. Add a new virtual link v to the set of links PL_i[p];

                            2.3.1.2. Add virtual link v to the set L_i;

                    2.3.2.  Set C(v) = PM(p);

            2.2. i = i + 1;

            2.5. L_i = L_{i-1};

            2.6. PL_i = PL_{i-1};

    3. Return B_i;
]]></artwork>
        <t>In the above procedure, the function COMPUTE_BOTTLENECK_STRUCTURE
corresponds to the GradientGraph algorithm introduced in <xref target="G2-TREP"/>.</t>
        <t>The termination condition of this procedure is found in line 2.2.1:</t>
        <artwork><![CDATA[
    B_i.BW(p) == PM(p) for all path p in PL_i
]]></artwork>
        <t>When the distributed algorithm
converges to a final solution, the invocation of the procedure
COMPUTE_BOTTLENECK_SUBSTRUCTURE returns immediately at this
condition, and the path metric dictionaries
for all the autonomous systems (PM(A_i) for 1 &lt;= i &lt;= |A|)
no longer change, provided that the network state does
not change. Further, upon
termination, the distributed algorithm ensures that all the path
metric values for all the autonomous systems are in agreement:</t>
        <artwork><![CDATA[
    PM(A_i)(p) == PM(A_j)(p) for all p in A_i, p in A_j, A_i in A and A_j in A
]]></artwork>
        <t>We call this the <em>convergence condition</em>, to denote the fact that
upon termination, all the path metrics from all the ASs are
in agreement.</t>
      </section>
      <section anchor="example-global-convergence-to-the-correct-bottleneck-substructures">
        <name>Example: Global Convergence to the Correct Bottleneck Substructures</name>
        <t>Figure 1 shows an example of a multidomain network with two autonomous
systems, AS1 (the upper subdomain) and AS2 (the lower subdomain).
Each link li is represented by a squared box and has a capacity ci.
For instance, link l1 is represented by the top most squared box
and has a capacity of c1=25 units of bandwidth. In addition, each
path is represented by a line that passes through the set of links it
traverses. For instance, path p6 traverses links l1, l2 and l3.</t>
        <figure anchor="net">
          <name>Multi-domain network example with two autonomous systems.</name>
          <artwork><![CDATA[
                         p3 p6 p1
                          | | |
                          | | |
                       +--+-+-+---+
                       |  | | |   |
                       |  | | +---+---   l1
                       |  | |     |      c1=25
                       |  | |     |
                       +--+-+-----+
                          | |
                          | | +----- p2
                          | | |
                       +--+-+-+---+
                       |  | | |   |
                   ----+--+ | |   |      l2
                       |    | |   |      c2=50
                p4 ----+--+ | |   |
                       |    | |   |
                       +--+-+-+---+
                          | | |
      AS1                 | | |
     .............................................
      AS2                 | | |
                          | | +-----
                          | |
                       +--+-+-----+
                       |  | |     |
                   ----+--+ +-----+----  l3
                       |          |      c3=100
                   ----+----+     |
                       |    |     |
                       +----+-----+
                            |
                            |
                       +----+-----+
                       |    |     |      l4
                 p5 ---+----+     |      c4=75
                       |          |
                       |          |
                       +----------+
]]></artwork>
        </figure>
        <t>The global bottleneck structure of this network corresponds to the following
digraph (see <xref target="I-D.draft-giraltyellamraju-alto-bsg-requirements"/>
for details on how a bottleneck structure is computed):</t>
        <figure anchor="fgg">
          <name>Global bottleneck structure of the network in Figure 1.</name>
          <artwork><![CDATA[
   +------+  +------+               +------+
   |      |  |      |               |      |
   |  p1  <-->  l1  <--------------->  p6  |
   |      |  |      |  +------------+      |
   +------+  +--^---+  |            +---+--+
                |      |                |
                |      |                |
             +--v---+  |                |
             |      |  |                |
             |  p3  |  |                |
             |      |  |                |
             +--+---+  |                |
                |      |                |
                |      |                |
             +--v---+  |  +------+   +--v---+  +------+
             |      <--+  |      |   |      |  |      |
             |  l2  <---->|  p4  +--->  l3  |  |  l4  |
             |      |     |      |   |      |  |      |
             +--^---+     +------+   +--^---+  +---^--+
                |                       |          |
             +--v---+                   | +------+ |
             |      |                   | |      | |
             |  p2  |                   +->  p5  <-+
             |      |                     |      |
             +------+                     +------+
]]></artwork>
        </figure>
        <t>Using the definitions introduced in <xref target="proto_defs"/>, we have that the
bottleneck substructure for AS1 and AS2 (that is, B(AS1) and B(AS2))
are as shown in <xref target="bss_as1"/> and <xref target="bss_as2"/>, respectively.</t>
        <figure anchor="bss_as1">
          <name>B(AS1): Bottleneck substructure of AS1.</name>
          <artwork><![CDATA[
   +------+  +------+               +------+
   |      |  |      |               |      |
   |  p1  <-->  l1  <--------------->  p6  |
   |      |  |      |  +------------+      |
   +------+  +--^---+  |            +------+
                |      |
                |      |
             +--v---+  |
             |      |  |
             |  p3  |  |
             |      |  |
             +--+---+  |
                |      |
                |      |
             +--v---+  |  +------+
             |      <--+  |      |
             |  l2  <---->|  p4  |
             |      |     |      |
             +--^---+     +------+
                |
             +--v---+
             |      |
             |  p2  |
             |      |
             +------+
]]></artwork>
        </figure>
        <figure anchor="bss_as2">
          <name>B(AS2): Bottleneck substructure of AS2.</name>
          <artwork><![CDATA[
              +------+               +------+
              |      |               |      |
              |  v1  <--------------->  p6  |
              |      |               |      |
              +------+               +--+---+
                                        |
                                        |
              +------+    +------+   +--v---+  +------+
              |      |    |      |   |      |  |      |
              |  v2  <--->|  p4  +--->  l3  |  |  l4  |
              |      |    |      |   |      |  |      |
              +------+    +------+   +--^---+  +---^--+
                                        |          |
                                        | +------+ |
                                        | |      | |
                                        +->  p5  <-+
                                          |      |
                                          +------+
]]></artwork>
        </figure>
        <t>Note that according to the definition in <xref target="proto_defs"/>,
the bottleneck substructure of each AS corresponds
to the subgraph of the global bottleneck structure B
that includes all the vertices and edges
in B that correspond to paths and vertices observed in the AS,
plus an additional virtual link for each path that is
bottlenecked outside the AS. In particular, AS2 has two virtual
links v1 and v2 associated with paths p6 and p4, respectively,
since these two paths are bottlenecked outside AS2. Similarly,
AS1 has no virtual links because all of its paths are
bottlenecked in its own domain.</t>
        <t>The objective consists in computing the bottleneck substructure
of all the ASs in a distributed manner when each AS
only has local information about the state of its links and paths.
The distributed protocol introduced in this document provides
a solution to this problem.</t>
        <t><xref target="dist_proto_as1"/> and <xref target="dist_proto_as2"/> present the
step-by-step execution of the distributed protocol as run
by AS1 and AS2, respectively. For each iteration of the
protocol, the state of the local path metric dictionary
PM(AS) and of the bottleneck substructure B(AS) are presented.</t>
        <figure anchor="dist_proto_as1">
          <name>Execution of the distributed protocol by AS1.</name>
          <artwork><![CDATA[
   Iteration 1:
   ------------

   State of the path metric dictionary PM(AS1):

   +====================+
   | PM(AS1)(p1) = 8.3  |
   +--------------------+
   | PM(AS1)(p2) = 16.6 |
   +--------------------+
   | PM(AS1)(p3) = 8.3  |
   +--------------------+
   | PM(AS1)(p4) = 16.6 |
   +--------------------+
   | PM(AS1)(p6) = 8.3  |
   +====================+

   State of the bottleneck substructure B(AS1):

   +------+  +------+               +------+
   |      |  |      |               |      |
   |  p1  <-->  l1  <--------------->  p6  |
   |      |  |      |  +------------+      |
   +------+  +--^---+  |            +---+--+
                |      |
                |      |
             +--v---+  |
             |      |  |
             |  p3  |  |
             |      |  |
             +--+---+  |
                |      |
                |      |
             +--v---+  |  +------+
             |      <--+  |      |
             |  l2  <---->|  p4  +
             |      |     |      |
             +--^---+     +------+
                |
             +--v---+
             |      |
             |  p2  |
             |      |
             +------+
]]></artwork>
        </figure>
        <figure anchor="dist_proto_as2">
          <name>Execution of the distributed protocol by AS2.</name>
          <artwork><![CDATA[
   Iteration 1:
   ------------

   State of the path metric dictionary PM(AS2):

   +====================+
   | PM(AS2)(p4) = 33.3 |
   +--------------------+
   | PM(AS2)(p5) = 33.3 |
   +--------------------+
   | PM(AS2)(p6) = 33.3 |
   +====================+

   State of the bottleneck substructure B(AS2):

   +------+  +------+   +------+
   |      |  |      |   |      |
   |  p4  <-->  l3  <--->  p6  |
   |      |  |      |   +      |
   +------+  +--^---+   +---+--+
                |
                |
             +--v---+
             |      |
             |  p5  |
             |      |
             +--+---+
                |
                |
             +--v---+
             |      |
             |  l4  |
             |      |
             +------+

   Iteration 2:
   ------------

   State of the path metric dictionary PM(AS2):

   +====================+
   | PM(AS2)(p4) = 16.6 |
   +--------------------+
   | PM(AS2)(p5) = 75   |
   +--------------------+
   | PM(AS2)(p6) = 8.3  |
   +====================+

   State of the bottleneck substructure B(AS2):

   +------+              +------+
   |      |              |      |
   |  v1  <-------------->  p6  |
   |      |              |      |
   +------+              +---+--+
                             |
                             |
   +------+    +------+   +--v---+  +------+
   |      |    |      |   |      |  |      |
   |  v2  <--->|  p4  +--->  l3  |  |  l4  |
   |      |    |      |   |      |  |      |
   +------+    +------+   +--^---+  +---^--+
                             |          |
                             | +------+ |
                             | |      | |
                             +->  p5  <-+
                               |      |
                               +------+
]]></artwork>
        </figure>
        <t>Note that at the end of the execution of the distributed
algorithm, the convergence condition</t>
        <artwork><![CDATA[
    PM(A_i)(p) = PM(A_j)(p) for all p in A_i, p in A_j, A_i in A and A_j in A
]]></artwork>
        <t>is satisfied, as shown in <xref target="convergence"/>.</t>
        <table anchor="convergence">
          <name>Verification of the convergence condition.</name>
          <thead>
            <tr>
              <th align="right">p</th>
              <th align="left">PM(A1)(p)</th>
              <th align="left">PM(A2)(p)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">p1</td>
              <td align="left">8.3</td>
              <td align="left">--</td>
            </tr>
            <tr>
              <td align="right">p2</td>
              <td align="left">16.6</td>
              <td align="left">--</td>
            </tr>
            <tr>
              <td align="right">p3</td>
              <td align="left">8.3</td>
              <td align="left">--</td>
            </tr>
            <tr>
              <td align="right">p4</td>
              <td align="left">16.6</td>
              <td align="left">16.6</td>
            </tr>
            <tr>
              <td align="right">p5</td>
              <td align="left">--</td>
              <td align="left">75</td>
            </tr>
            <tr>
              <td align="right">p6</td>
              <td align="left">8.3</td>
              <td align="left">8.3</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="requirements">
      <name>Requirements</name>
      <t>This section provides a discussion on the necessary requirements
to integrate the proposed distributed protocol into the ALTO
standard. Throughout this discussion, we assume without loss
of generality that each AS is managed by an ALTO server,
and that each server only has visibility of the topology,
links and flow state of the AS it is managing.
We also assume that the TIMER and the
PATH_METRIC_EXCHANGE events are executed by each ALTO server.
An alternative architecture could consider executing these
events in a separated engine, and have the ALTO server
query this engine to obtain the final bottleneck structures,
decoupling the distributed protocol from the ALTO standard.
While this approach might be
desirable in some cases, we currently omit it from this
discussion since it is relatively simpler from an integration
requirements standpoint.</t>
      <t>To implement the proposed distributed protocol using ALTO, two
broad requirements are necessary:</t>
      <ul spacing="normal">
        <li>Requirement 1: The capability for each ALTO server to
compute bottleneck substructures of its own AS.</li>
        <li>Requirement 2: The capability for each ALTO server to communicate with
its neighboring ASs.</li>
      </ul>
      <section anchor="requirement-1-computation-of-bottleneck-substructures">
        <name>Requirement 1: Computation of Bottleneck Substructures</name>
        <t>The requirements for an ALTO server to compute the bottleneck
substructure of its associated AS are the same as the
requirements to compute the bottleneck structure in the case
the network consists of a single autonomous system.
These requirements are discussed in the Requirements Section
of <xref target="I-D.draft-giraltyellamraju-alto-bsg-requirements"/>.
Refer to this document for further details.</t>
      </section>
      <section anchor="requirement-2-communication-between-neighboring-ass">
        <name>Requirement 2: Communication Between Neighboring ASs</name>
        <t>The TIMER event executed by each ALTO server needs to
periodically transmit a PATH_METRIC_ANNOUNCEMENT message to its
neighboring ASs. This leads to the following requirement:</t>
        <ul spacing="normal">
          <li>Requirement 2.1: ALTO servers managing
neighboring ASs need to be reachable to each other.</li>
          <li>Requirement 2.2: The sharing of algorithmic state
between ALTO servers requires extending the base ALTO
protocol to support server-to-server communication
semantics.</li>
        </ul>
        <t>This requirement constitutes a new capability, since the
current ALTO standard only supports client-to-server
communication semantics <xref target="RFC7285"/>.</t>
        <t>We note that <xref target="I-D.draft-zhang-alto-oam-yang"/>
discusses mechanisms
for cross-ALTO server communication with the objective
to facilitate Operations and Management (OAM) of multi-server
deployments.
The distributed protocol proposed in this document
could be used as a use case to help drive the
specifications of the inter-server communication protocol
discussed in <xref target="I-D.draft-zhang-alto-oam-yang"/>
 or in any future ALTO RFCs that
may focus on sharing of algorithmic state.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Future versions of this document may extend the base ALTO
protocol, so the Security Considerations <xref target="RFC7285"/> of the
base ALTO protocol fully apply when this proposed extension
is provided by an ALTO server.</t>
      <t>The Bottleneck Structure Graph extension requires additional scrutiny
on three security considerations discussed in the base protocol:
Confidentiality of ALTO information (Section 15.3 of <xref target="RFC7285"/>),
potential undesirable guidance from authenticated ALTO information
(Section 15.2 of <xref target="RFC7285"/>), and availability of ALTO service
(Section 15.5 of <xref target="RFC7285"/>).</t>
      <t>For confidentiality of ALTO information, a network operator should be
aware that this extension may introduce a new risk:
As the Bottleneck Structure information may reveal more fine-grained
internal network structures than the base protocol, an attacker may
identify the bottleneck link and start a distributed denial-of-service
(DDoS) attack involving minimal flows to conduct in-network
congestion. Given the potential risk of leaking sensitive
information, the BSG extension is mainly applicable in
scenarios where:</t>
      <ul spacing="normal">
        <li>The properties of the Bottleneck Structure Graph
do not impose security risks to the ALTO service provider; e.g., by
not carrying sensitive information.</li>
        <li>The ALTO server and client have
established a reliable trust relationship, for example, operated in
the same administrative domain, or managed by business partners with
legal contracts and proper authentication and privacy protocols.</li>
        <li>The ALTO server implements protection mechanisms to reduce
information exposure or obfuscate the real
information. Implementations involving reduction or
obfuscation of the Bottleneck Structure information <bcp14>SHOULD</bcp14> consider
reduction/obfuscation mechanisms that can preserve the integrity of
ALTO information, for example, by using minimal feasible region
compression algorithms <xref target="NOVA"/> or obfuscation protocols
<xref target="MERCATOR">RESA</xref>. We note that these obfuscation methods are
experimental and their practical applicability to
the generic capability provided by this extension is not fully
assessed.</li>
      </ul>
      <t>We note that for operators that are sensitive about disclosing
flow-level information (even if it is anonymized), then
they <bcp14>SHOULD</bcp14> consider using the Path Gradient Graph (PGG) or
the QoS-Path Gradient Graph (Q-PGG) since these objects provide
the additional security advantage of hiding flow-level
information from the graph.</t>
      <t>For undesirable guidance, the ALTO server must be aware that,
if information reduction/obfuscation methods are implemented,
they may lead to potential misleading information from
Authenticated ALTO Information. In such cases, the Protection
Strategies described in Section 15.2.2 of <xref target="RFC7285"/> <bcp14>MUST</bcp14> be considered.</t>
      <t>For availability of ALTO service, an ALTO server should be cognizant
that using Bottleneck Structures might have a new risk: frequently
querying the BSG service might consume intolerable amounts of
computation and storage on the server side.
For example, if an ALTO server implementation dynamically computes
the Bottleneck Structure for each request, the BSG service
may become an entry point for denial-of-service attacks on the
availability of an ALTO server. To mitigate this risk,
an ALTO server may consider using
optimizations such as precomputation-and-projection mechanisms
<xref target="MERCATOR"/> to reduce the overhead for processing each query.
An ALTO server may also protect itself from malicious clients by
monitoring the behaviors of clients and stopping serving clients with
suspicious behaviors (e.g., sending requests at a high frequency).</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Future versions of this document may register new entries
to the ALTO Cost Metric Registry, the ALTO Cost Mode Registry,
the ALTO Domain Entity Type Registry and the
ALTO Entity Property Type Registry.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7285">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author fullname="R. Alimi" initials="R." role="editor" surname="Alimi">
              <organization/>
            </author>
            <author fullname="R. Penno" initials="R." role="editor" surname="Penno">
              <organization/>
            </author>
            <author fullname="Y. Yang" initials="Y." role="editor" surname="Yang">
              <organization/>
            </author>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel">
              <organization/>
            </author>
            <author fullname="S. Previdi" initials="S." surname="Previdi">
              <organization/>
            </author>
            <author fullname="W. Roome" initials="W." surname="Roome">
              <organization/>
            </author>
            <author fullname="S. Shalunov" initials="S." surname="Shalunov">
              <organization/>
            </author>
            <author fullname="R. Woundy" initials="R." surname="Woundy">
              <organization/>
            </author>
            <date month="September" year="2014"/>
            <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>
        <reference anchor="RFC4271">
          <front>
            <title>A Border Gateway Protocol 4 (BGP-4)</title>
            <author fullname="Y. Rekhter" initials="Y." role="editor" surname="Rekhter">
              <organization/>
            </author>
            <author fullname="T. Li" initials="T." role="editor" surname="Li">
              <organization/>
            </author>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares">
              <organization/>
            </author>
            <date month="January" year="2006"/>
            <abstract>
              <t>This document discusses the Border Gateway Protocol (BGP), which is an inter-Autonomous System routing protocol.</t>
              <t>The primary function of a BGP speaking system is to exchange network reachability information with other BGP systems.  This network reachability information includes information on the list of Autonomous Systems (ASes) that reachability information traverses. This information is sufficient for constructing a graph of AS connectivity for this reachability from which routing loops may be pruned, and, at the AS level, some policy decisions may be enforced.</t>
              <t>BGP-4 provides a set of mechanisms for supporting Classless Inter-Domain Routing (CIDR).  These mechanisms include support for advertising a set of destinations as an IP prefix, and eliminating the concept of network "class" within BGP.  BGP-4 also introduces mechanisms that allow aggregation of routes, including aggregation of AS paths.</t>
              <t>This document obsoletes RFC 1771.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4271"/>
          <seriesInfo name="DOI" value="10.17487/RFC4271"/>
        </reference>
        <reference anchor="I-D.draft-giraltyellamraju-alto-bsg-requirements">
          <front>
            <title>Supporting Bottleneck Structure Graphs in ALTO: Use Cases and Requirements</title>
            <author fullname="Jordi Ros-Giralt" initials="J." surname="Ros-Giralt">
              <organization>Qualcomm</organization>
            </author>
            <author fullname="Sruthi Yellamraju" initials="S." surname="Yellamraju">
              <organization>Qualcomm</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras">
              <organization>Telefonica</organization>
            </author>
            <author fullname="Y. Richard Yang" initials="Y. R." surname="Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Kai Gao" initials="K." surname="Gao">
              <organization>Sichuan University</organization>
            </author>
            <date day="23" month="September" year="2022"/>
            <abstract>
              <t>   This document proposes an extension to the base Application-Layer
   Traffic Optimization (ALTO) protocol to support bottleneck structures
   as an efficient representation of the state of a network.  Bottleneck
   structures are efficient computational graphs that allow network
   operators and application service providers to optimize application
   performance in a variety of communication problems including routing,
   flow control, flow scheduling, bandwidth prediction, and network
   slicing, among others.  This document introduces a new abstraction
   called Bottleneck Structure Graph (BSG) and the necessary
   requirements to integrate it into the ALTO standard.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-giraltyellamraju-alto-bsg-requirements-03"/>
        </reference>
        <reference anchor="I-D.draft-zhang-alto-oam-yang">
          <front>
            <title>A Yang Data Model for OAM and Management of ALTO Protocol</title>
            <author fullname="Jingxuan Zhang" initials="J." surname="Zhang">
              <organization>Tongji University</organization>
            </author>
            <author fullname="Dhruv Dhody" initials="D." surname="Dhody">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Kai Gao" initials="K." surname="Gao">
              <organization>Sichuan University</organization>
            </author>
            <author fullname="Roland Schott" initials="R." surname="Schott">
              <organization>Deutsche Telekom</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   This document defines a YANG data model for Operations,
   Administration, and Maintenance (OAM) &amp; Management of Application-
   Layer Traffic Optimization (ALTO) Protocol.  The operator can use the
   data model to create and update ALTO information resources, manage
   the access control, configure server-to-server communication and
   server discovery, and collect statistical data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-zhang-alto-oam-yang-02"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="G2-SIGMETRICS">
          <front>
            <title>On the Bottleneck Structure of Congestion-Controlled Networks</title>
            <author initials="J." surname="Ros-Giralt" fullname="Jordi Ros-Giralt">
              <organization>Reservoir Labs</organization>
            </author>
            <author initials="A." surname="Bohara">
              <organization/>
            </author>
            <author initials="S." surname="Yellamraju">
              <organization/>
            </author>
            <author initials="H." surname="Langston">
              <organization/>
            </author>
            <author initials="R." surname="Lethin">
              <organization/>
            </author>
            <author initials="Y." surname="Jiang">
              <organization/>
            </author>
            <author initials="L." surname="Tassiulas">
              <organization/>
            </author>
            <author initials="J." surname="Li">
              <organization/>
            </author>
            <author initials="Y." surname="Tan">
              <organization/>
            </author>
            <author initials="M." surname="Veeraraghavan">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="ACM SIGMETRICS" value=""/>
        </reference>
        <reference anchor="G2-SIGCOMM">
          <front>
            <title>Designing data center networks using bottleneck structures</title>
            <author initials="J." surname="Ros-Giralt" fullname="Jordi Ros-Giralt">
              <organization>Reservoir Labs</organization>
            </author>
            <author initials="N." surname="Amsel">
              <organization/>
            </author>
            <author initials="S." surname="Yellamraju">
              <organization/>
            </author>
            <author initials="J." surname="Ezick">
              <organization/>
            </author>
            <author initials="R." surname="Lethin">
              <organization/>
            </author>
            <author initials="Y." surname="Jiang">
              <organization/>
            </author>
            <author initials="A." surname="Feng">
              <organization/>
            </author>
            <author initials="L." surname="Tassiulas">
              <organization/>
            </author>
            <author initials="Z." surname="Wu">
              <organization/>
            </author>
            <author initials="K." surname="Bergman">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="ACM SIGCOMM" value=""/>
        </reference>
        <reference anchor="G2-TREP">
          <front>
            <title>A Quantitative Theory of Bottleneck Structures for Data Networks</title>
            <author initials="J." surname="Ros-Giralt" fullname="Jordi Ros-Giralt">
              <organization>Qualcomm Europe Inc.</organization>
            </author>
            <author initials="N." surname="Amsel">
              <organization/>
            </author>
            <author initials="S." surname="Yellamraju">
              <organization/>
            </author>
            <author initials="J." surname="Ezick">
              <organization/>
            </author>
            <author initials="R." surname="Lethin">
              <organization/>
            </author>
            <author initials="Y." surname="Jiang">
              <organization/>
            </author>
            <author initials="A." surname="Feng">
              <organization/>
            </author>
            <author initials="L." surname="Tassiulas">
              <organization/>
            </author>
            <author initials="Z." surname="Wu">
              <organization/>
            </author>
            <author initials="K." surname="Bergman">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="Qualcomm Technologies Inc., Technical Report" value=""/>
        </reference>
        <reference anchor="NOVA" target="https://doi.org/10.1109/IWQoS.2017.7969117">
          <front>
            <title>An objective-driven on-demand network abstraction for adaptive applications</title>
            <author initials="K." surname="Gao">
              <organization/>
            </author>
            <author initials="Q." surname="Xiang">
              <organization/>
            </author>
            <author initials="X." surname="Wang">
              <organization/>
            </author>
            <author initials="Y." surname="Yang">
              <organization/>
            </author>
            <author initials="J." surname="Bi">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="IEEE/ACM" value="IEEE/ACM Transactions on Networking (TON) Vol 27, no. 2 (2019): 805-818."/>
        </reference>
        <reference anchor="MERCATOR" target="https://doi.org/10.1109/JSAC.2019.2927073">
          <front>
            <title>Toward Fine- Grained, Privacy-Preserving, Efficient Multi-Domain Network Resource Discovery</title>
            <author initials="Q." surname="Xiang">
              <organization/>
            </author>
            <author initials="J." surname="Zhang">
              <organization/>
            </author>
            <author initials="X." surname="Wang">
              <organization/>
            </author>
            <author initials="C." surname="Guok">
              <organization/>
            </author>
            <author initials="F." surname="Le">
              <organization/>
            </author>
            <author initials="J." surname="MacAuley">
              <organization/>
            </author>
            <author initials="H." surname="Newman">
              <organization/>
            </author>
            <author initials="Y." surname="Yang">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="IEEE/ACM" value="IEEE/ACM IEEE Journal on Selected Areas of Communication 37(8): 1924-1940"/>
        </reference>
      </references>
    </references>
    <!--
# Acknowledgments
{:numbered="false"}

TODO acknowledge.
-->



  </back>
  <!-- ##markdown-source:
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
JLBht/u9+D+dIFl3Do8AAA==

-->

</rfc>
