rfc9275.original | rfc9275.txt | |||
---|---|---|---|---|
ALTO K. Gao | Internet Engineering Task Force (IETF) K. Gao | |||
Internet-Draft Sichuan University | Request for Comments: 9275 Sichuan University | |||
Intended status: Experimental Y. Lee | Category: Experimental Y. Lee | |||
Expires: 21 September 2022 Samsung | ISSN: 2070-1721 Samsung | |||
S. Randriamasy | S. Randriamasy | |||
Nokia Bell Labs | Nokia Bell Labs | |||
Y.R. Yang | Y. Yang | |||
Yale University | Yale University | |||
J. Zhang | J. Zhang | |||
Tongji University | Tongji University | |||
20 March 2022 | August 2022 | |||
An ALTO Extension: Path Vector | An Extension for Application-Layer Traffic Optimization (ALTO): | |||
draft-ietf-alto-path-vector-25 | Path Vector | |||
Abstract | Abstract | |||
This document is an extension to the base Application-Layer Traffic | This document is an extension to the base Application-Layer Traffic | |||
Optimization (ALTO) protocol. It extends the ALTO Cost Map and ALTO | Optimization (ALTO) protocol. It extends the ALTO cost map and ALTO | |||
Property Map services so that an application can decide which | property map services so that an application can decide to which | |||
endpoint(s) to connect based on not only numerical/ordinal cost | endpoint(s) to connect based not only on numerical/ordinal cost | |||
values but also fine-grained abstract information of the paths. This | values but also on fine-grained abstract information regarding the | |||
is useful for applications whose performance is impacted by specified | paths. This is useful for applications whose performance is impacted | |||
components of a network on the end-to-end paths, e.g., they may infer | by specific components of a network on the end-to-end paths, e.g., | |||
that several paths share common links and prevent traffic bottlenecks | they may infer that several paths share common links and prevent | |||
by avoiding such paths. This extension introduces a new abstraction | traffic bottlenecks by avoiding such paths. This extension | |||
called Abstract Network Element (ANE) to represent these components | introduces a new abstraction called the "Abstract Network Element" | |||
and encodes a network path as a vector of ANEs. Thus, it provides a | (ANE) to represent these components and encodes a network path as a | |||
more complete but still abstract graph representation of the | vector of ANEs. Thus, it provides a more complete but still abstract | |||
underlying network(s) for informed traffic optimization among | graph representation of the underlying network(s) for informed | |||
endpoints. | traffic optimization among endpoints. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
Internet-Drafts are working documents of the Internet Engineering | This document defines an Experimental Protocol for the Internet | |||
Task Force (IETF). Note that other groups may also distribute | community. This document is a product of the Internet Engineering | |||
working documents as Internet-Drafts. The list of current Internet- | Task Force (IETF). It represents the consensus of the IETF | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | community. It has received public review and has been approved for | |||
publication by the Internet Engineering Steering Group (IESG). Not | ||||
all documents approved by the IESG are candidates for any level of | ||||
Internet Standard; see Section 2 of RFC 7841. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9275. | |||
material or to cite them other than as "work in progress." | ||||
This Internet-Draft will expire on 21 September 2022. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
2. Requirements Languages . . . . . . . . . . . . . . . . . . . 6 | 2. Requirements Language | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Terminology | |||
4. Requirements and Use Cases . . . . . . . . . . . . . . . . . 7 | 4. Requirements and Use Cases | |||
4.1. Design Requirements . . . . . . . . . . . . . . . . . . . 7 | 4.1. Design Requirements | |||
4.2. Sample Use Cases . . . . . . . . . . . . . . . . . . . . 10 | 4.2. Sample Use Cases | |||
4.2.1. Exposing Network Bottlenecks . . . . . . . . . . . . 11 | 4.2.1. Exposing Network Bottlenecks | |||
4.2.2. Resource Exposure for CDN and Service Edge . . . . . 15 | 4.2.2. Resource Exposure for CDNs and Service Edges | |||
5. Path Vector Extension: Overview . . . . . . . . . . . . . . . 17 | 5. Path Vector Extension: Overview | |||
5.1. Abstract Network Element (ANE) . . . . . . . . . . . . . 18 | 5.1. Abstract Network Element (ANE) | |||
5.1.1. ANE Entity Domain . . . . . . . . . . . . . . . . . . 19 | 5.1.1. ANE Entity Domain | |||
5.1.2. Ephemeral and Persistent ANEs . . . . . . . . . . . . 19 | 5.1.2. Ephemeral and Persistent ANEs | |||
5.1.3. Property Filtering . . . . . . . . . . . . . . . . . 20 | 5.1.3. Property Filtering | |||
5.2. Path Vector Cost Type . . . . . . . . . . . . . . . . . . 20 | 5.2. Path Vector Cost Type | |||
5.3. Multipart Path Vector Response . . . . . . . . . . . . . 21 | 5.3. Multipart Path Vector Response | |||
5.3.1. Identifying the Media Type of the Root Object . . . . 22 | 5.3.1. Identifying the Media Type of the Object Root | |||
5.3.2. References to Part Messages . . . . . . . . . . . . . 22 | 5.3.2. References to Part Messages | |||
6. Specification: Basic Data Types . . . . . . . . . . . . . . . 23 | 6. Specification: Basic Data Types | |||
6.1. ANE Name . . . . . . . . . . . . . . . . . . . . . . . . 23 | 6.1. ANE Name | |||
6.2. ANE Entity Domain . . . . . . . . . . . . . . . . . . . . 23 | 6.2. ANE Entity Domain | |||
6.2.1. Entity Domain Type . . . . . . . . . . . . . . . . . 23 | 6.2.1. Entity Domain Type | |||
6.2.2. Domain-Specific Entity Identifier . . . . . . . . . . 23 | 6.2.2. Domain-Specific Entity Identifier | |||
6.2.3. Hierarchy and Inheritance . . . . . . . . . . . . . . 23 | 6.2.3. Hierarchy and Inheritance | |||
6.2.4. Media Type of Defining Resource . . . . . . . . . . . 23 | 6.2.4. Media Type of Defining Resource | |||
6.3. ANE Property Name . . . . . . . . . . . . . . . . . . . . 24 | 6.3. ANE Property Name | |||
6.4. Initial ANE Property Types . . . . . . . . . . . . . . . 24 | 6.4. Initial ANE Property Types | |||
6.4.1. Maximum Reservable Bandwidth . . . . . . . . . . . . 24 | 6.4.1. Maximum Reservable Bandwidth | |||
6.4.2. Persistent Entity ID . . . . . . . . . . . . . . . . 25 | 6.4.2. Persistent Entity ID | |||
6.4.3. Examples . . . . . . . . . . . . . . . . . . . . . . 25 | 6.4.3. Examples | |||
6.5. Path Vector Cost Type . . . . . . . . . . . . . . . . . . 26 | 6.5. Path Vector Cost Type | |||
6.5.1. Cost Metric: ane-path . . . . . . . . . . . . . . . . 26 | 6.5.1. Cost Metric: "ane-path" | |||
6.5.2. Cost Mode: array . . . . . . . . . . . . . . . . . . 27 | 6.5.2. Cost Mode: "array" | |||
6.6. Part Resource ID and Part Content ID . . . . . . . . . . 27 | 6.6. Part Resource ID and Part Content ID | |||
7. Specification: Service Extensions . . . . . . . . . . . . . . 27 | 7. Specification: Service Extensions | |||
7.1. Notations . . . . . . . . . . . . . . . . . . . . . . . . 27 | 7.1. Notation | |||
7.2. Multipart Filtered Cost Map for Path Vector . . . . . . . 28 | 7.2. Multipart Filtered Cost Map for Path Vector | |||
7.2.1. Media Type . . . . . . . . . . . . . . . . . . . . . 28 | 7.2.1. Media Type | |||
7.2.2. HTTP Method . . . . . . . . . . . . . . . . . . . . . 28 | 7.2.2. HTTP Method | |||
7.2.3. Accept Input Parameters . . . . . . . . . . . . . . . 28 | 7.2.3. Accept Input Parameters | |||
7.2.4. Capabilities . . . . . . . . . . . . . . . . . . . . 29 | 7.2.4. Capabilities | |||
7.2.5. Uses . . . . . . . . . . . . . . . . . . . . . . . . 30 | 7.2.5. Uses | |||
7.2.6. Response . . . . . . . . . . . . . . . . . . . . . . 30 | 7.2.6. Response | |||
7.3. Multipart Endpoint Cost Service for Path Vector . . . . . 34 | 7.3. Multipart Endpoint Cost Service for Path Vector | |||
7.3.1. Media Type . . . . . . . . . . . . . . . . . . . . . 34 | 7.3.1. Media Type | |||
7.3.2. HTTP Method . . . . . . . . . . . . . . . . . . . . . 34 | 7.3.2. HTTP Method | |||
7.3.3. Accept Input Parameters . . . . . . . . . . . . . . . 34 | 7.3.3. Accept Input Parameters | |||
7.3.4. Capabilities . . . . . . . . . . . . . . . . . . . . 35 | 7.3.4. Capabilities | |||
7.3.5. Uses . . . . . . . . . . . . . . . . . . . . . . . . 35 | 7.3.5. Uses | |||
7.3.6. Response . . . . . . . . . . . . . . . . . . . . . . 35 | 7.3.6. Response | |||
8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | 8. Examples | |||
8.1. Sample Setup . . . . . . . . . . . . . . . . . . . . . . 39 | 8.1. Sample Setup | |||
8.2. Information Resource Directory . . . . . . . . . . . . . 39 | 8.2. Information Resource Directory | |||
8.3. Multipart Filtered Cost Map . . . . . . . . . . . . . . . 42 | 8.3. Multipart Filtered Cost Map | |||
8.4. Multipart Endpoint Cost Service Resource . . . . . . . . 43 | 8.4. Multipart Endpoint Cost Service Resource | |||
8.5. Incremental Updates . . . . . . . . . . . . . . . . . . . 48 | 8.5. Incremental Updates | |||
8.6. Multi-cost . . . . . . . . . . . . . . . . . . . . . . . 50 | 8.6. Multi-Cost | |||
9. Compatibility with Other ALTO Extensions . . . . . . . . . . 52 | 9. Compatibility with Other ALTO Extensions | |||
9.1. Compatibility with Legacy ALTO Clients/Servers . . . . . 53 | 9.1. Compatibility with Legacy ALTO Clients/Servers | |||
9.2. Compatibility with Multi-Cost Extension . . . . . . . . . 53 | 9.2. Compatibility with Multi-Cost Extension | |||
9.3. Compatibility with Incremental Update . . . . . . . . . . 53 | 9.3. Compatibility with Incremental Update Extension | |||
9.4. Compatibility with Cost Calendar . . . . . . . . . . . . 53 | 9.4. Compatibility with Cost Calendar Extension | |||
10. General Discussions . . . . . . . . . . . . . . . . . . . . . 54 | 10. General Discussion | |||
10.1. Constraint Tests for General Cost Types . . . . . . . . 54 | 10.1. Constraint Tests for General Cost Types | |||
10.2. General Multi-Resource Query . . . . . . . . . . . . . . 54 | 10.2. General Multi-Resource Query | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 55 | 11. Security Considerations | |||
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 57 | 12. IANA Considerations | |||
12.1. ALTO Cost Metric Registry . . . . . . . . . . . . . . . 57 | 12.1. "ALTO Cost Metrics" Registry | |||
12.2. ALTO Cost Mode Registry . . . . . . . . . . . . . . . . 58 | 12.2. "ALTO Cost Modes" Registry | |||
12.3. ALTO Entity Domain Type Registry . . . . . . . . . . . . 58 | 12.3. "ALTO Entity Domain Types" Registry | |||
12.4. ALTO Entity Property Type Registry . . . . . . . . . . . 59 | 12.4. "ALTO Entity Property Types" Registry | |||
12.4.1. New ANE Property Type: Maximum Reservable | 12.4.1. New ANE Property Type: Maximum Reservable Bandwidth | |||
Bandwidth . . . . . . . . . . . . . . . . . . . . . . 59 | 12.4.2. New ANE Property Type: Persistent Entity ID | |||
12.4.2. New ANE Property Type: Persistent Entity ID . . . . 60 | 13. References | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 60 | 13.1. Normative References | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 60 | 13.2. Informative References | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 61 | Acknowledgments | |||
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 64 | Authors' Addresses | |||
Appendix B. Revision Logs (To be removed before publication) . . 64 | ||||
B.1. Changes since -20 . . . . . . . . . . . . . . . . . . . . 64 | ||||
B.2. Changes since -19 . . . . . . . . . . . . . . . . . . . . 65 | ||||
B.3. Changes since -18 . . . . . . . . . . . . . . . . . . . . 65 | ||||
B.4. Changes since -17 . . . . . . . . . . . . . . . . . . . . 65 | ||||
B.5. Changes since -16 . . . . . . . . . . . . . . . . . . . . 65 | ||||
B.6. Changes since -15 . . . . . . . . . . . . . . . . . . . . 65 | ||||
B.7. Changes since -14 . . . . . . . . . . . . . . . . . . . . 65 | ||||
B.8. Changes since -13 . . . . . . . . . . . . . . . . . . . . 66 | ||||
B.9. Changes since -12 . . . . . . . . . . . . . . . . . . . . 66 | ||||
B.10. Changes since -11 . . . . . . . . . . . . . . . . . . . . 66 | ||||
B.11. Changes since -10 . . . . . . . . . . . . . . . . . . . . 66 | ||||
B.12. Changes since -09 . . . . . . . . . . . . . . . . . . . . 67 | ||||
B.13. Changes since -08 . . . . . . . . . . . . . . . . . . . . 67 | ||||
B.14. Changes Since Version -06 . . . . . . . . . . . . . . . . 67 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 68 | ||||
1. Introduction | 1. Introduction | |||
Network performance metrics are crucial to assess the Quality of | Network performance metrics are crucial for assessing the Quality of | |||
Experience (QoE) of applications. The ALTO protocol allows Internet | Experience (QoE) of applications. The Application-Layer Traffic | |||
Service Providers (ISPs) to provide guidance, such as topological | Optimization (ALTO) protocol allows Internet Service Providers (ISPs) | |||
distance between different end hosts, to overlay applications. Thus, | to provide guidance, such as topological distances between different | |||
the overlay applications can potentially improve the perceived QoE by | end hosts, to overlay applications. Thus, the overlay applications | |||
better orchestrating their traffic to utilize the resources in the | can potentially improve the perceived QoE by better orchestrating | |||
underlying network infrastructure. | their traffic to utilize the resources in the underlying network | |||
infrastructure. | ||||
Existing ALTO Cost Map (Section 11.2.3 of [RFC7285]) and Endpoint | The existing ALTO cost map (Section 11.2.3 of [RFC7285]) and Endpoint | |||
Cost Service (Section 11.5 of [RFC7285]) provide only cost | Cost Service (Section 11.5 of [RFC7285]) provide only cost | |||
information on an end-to-end path defined by its <source, | information for an end-to-end path defined by its <source, | |||
destination> endpoints: The base protocol [RFC7285] allows the | destination> endpoints: the base protocol [RFC7285] allows the | |||
services to expose the topological distances of end-to-end paths, | services to expose the topological distances of end-to-end paths, | |||
while various extensions have been proposed to extend the capability | while various extensions have been proposed to extend the capability | |||
of these services, e.g., to express other performance metrics | of these services, e.g., to express other performance metrics | |||
[I-D.ietf-alto-performance-metrics], to query multiple costs | [ALTO-PERF-METRICS], to query multiple costs simultaneously | |||
simultaneously [RFC8189], and to obtain the time-varying values | [RFC8189], and to obtain time-varying values [RFC8896]. | |||
[RFC8896]. | ||||
While the existing extensions are sufficient for many overlay | While numerical/ordinal cost values for end-to-end paths provided by | |||
applications, the QoE of some overlay applications depends not only | the existing extensions are sufficient to optimize the QoE of many | |||
on the cost information of end-to-end paths, but also on particular | overlay applications, the QoE of some overlay applications also | |||
components of a network on the paths and their properties. For | depends on the properties of particular components on the paths. For | |||
example, job completion time, which is an important QoE metric for a | example, job completion time, which is an important QoE metric for a | |||
large-scale data analytics application, is impacted by shared | large-scale data analytics application, is impacted by shared | |||
bottleneck links inside the carrier network as link capacity may | bottleneck links inside the carrier network, as link capacity may | |||
impact the rate of data input/output to the job. We refer to such | impact the rate of data input/output to the job. We refer to such | |||
components of a network as Abstract Network Elements (ANE). | components of a network as Abstract Network Elements (ANEs). | |||
Predicting such information can be very complex without the help of | Predicting such information can be very complex without the help of | |||
ISPs, for example, [BOXOPT] has shown that finding the optimal | ISPs; for example, [BOXOPT] has shown that finding the optimal | |||
bandwidth reservation for multiple flows can be NP-hard without | bandwidth reservation for multiple flows can be NP-hard without | |||
further information than whether a reservation succeeds. With proper | further information than whether a reservation succeeds. With proper | |||
guidance from the ISP, an overlay application may be able to schedule | guidance from the ISP, an overlay application may be able to schedule | |||
its traffic for better QoE. In the meantime, it may be helpful as | its traffic for better QoE. In the meantime, it may be helpful as | |||
well for ISPs if applications could avoid using bottlenecks or | well for ISPs if applications could avoid using bottlenecks or | |||
challenging the network with poorly scheduled traffic. | challenging the network with poorly scheduled traffic. | |||
Despite the claimed benefits, ISPs are not likely to expose raw | Despite the claimed benefits, ISPs are not likely to expose raw | |||
details on their network paths: first for the sake of topology hiding | details on their network paths: first because ISPs have requirements | |||
requirement, second because it may increase volume and computation | to hide their network topologies, second because these details may | |||
overhead, and last because applications do not necessarily need all | increase volume and computation overhead, and last because | |||
the network path details and are likely not able to understand them. | applications do not necessarily need all the network path details and | |||
are likely not able to understand them. | ||||
Therefore, it is beneficial for both ISPs and applications if an ALTO | Therefore, it is beneficial for both ISPs and applications if an ALTO | |||
server provides ALTO clients with an "abstract network state" that | server provides ALTO clients with an "abstract network state" that | |||
provides the necessary information to applications, while hiding the | provides the necessary information to applications, while hiding | |||
network complexity and confidential information. An "abstract | network complexity and confidential information. An "abstract | |||
network state" is a selected set of abstract representations of | network state" is a selected set of abstract representations of ANEs | |||
Abstract Network Elements traversed by the paths between <source, | traversed by the paths between <source, destination> pairs combined | |||
destination> pairs combined with properties of these Abstract Network | with properties of these ANEs that are relevant to the overlay | |||
Elements that are relevant to the overlay applications' QoE. Both an | applications' QoE. Both an application via its ALTO client and the | |||
application via its ALTO client and the ISP via the ALTO server can | ISP via the ALTO server can achieve better confidentiality and | |||
achieve better confidentiality and resource utilization by | resource utilization by appropriately abstracting relevant ANEs. | |||
appropriately abstracting relevant Abstract Network Elements. Server | Server scalability can also be improved by combining ANEs and their | |||
scalability can also be improved by combining Abstract Network | properties in a single response. | |||
Elements and their properties in a single response. | ||||
This document extends [RFC7285] to allow an ALTO server to convey | This document extends the ALTO base protocol [RFC7285] to allow an | |||
"abstract network state", for paths defined by their <source, | ALTO server to convey "abstract network state" for paths defined by | |||
destination> pairs. To this end, it introduces a new cost type | their <source, destination> pairs. To this end, it introduces a new | |||
called "Path Vector" following the cost metric registration specified | cost type called a "Path Vector", following the cost metric | |||
in [RFC7285] and the updated cost mode registration specified in | registration specified in [RFC7285] and the updated cost mode | |||
[I-D.bw-alto-cost-mode]. A Path Vector is an array of identifiers | registration specified in [RFC9274]. A Path Vector is an array of | |||
that identifies an Abstract Network Element, which can be associated | identifiers that identifies an ANE, which can be associated with | |||
with various properties. The associations between ANEs and their | various properties. The associations between ANEs and their | |||
properties are encoded in an ALTO information resource called Unified | properties are encoded in an ALTO information resource called the | |||
Property Map, which is specified in | "entity property map", which is specified in [RFC9240]. | |||
[I-D.ietf-alto-unified-props-new]. | ||||
For better confidentiality, this document aims to minimize | For better confidentiality, this document aims to minimize | |||
information exposure of an ALTO server when providing Path Vector | information exposure of an ALTO server when providing Path Vector | |||
service. In particular, this document enables and recommends that | services. In particular, this document enables the capability, and | |||
first ANEs are constructed on demand, and second an ANE is only | also recommends that 1) ANEs be constructed on demand and 2) an ANE | |||
associated with properties that are requested by an ALTO client. A | only be associated with properties that are requested by an ALTO | |||
Path Vector response involves two ALTO Maps: the Cost Map that | client. A Path Vector response involves two ALTO maps: the cost map, | |||
contains the Path Vector results and the up-to-date Unified Property | which contains the Path Vector results; and the up-to-date entity | |||
Map that contains the properties requested for these ANEs. To | property map, which contains the properties requested for these ANEs. | |||
enforce consistency and improve server scalability, this document | To enforce consistency and improve server scalability, this document | |||
uses the "multipart/related" content type defined in [RFC2387] to | uses the "multipart/related" content type as defined in [RFC2387] to | |||
return the two maps in a single response. | return the two maps in a single response. | |||
As a single ISP may not have the knowledge of the full Internet paths | As a single ISP may not have knowledge of the full Internet paths | |||
between arbitrary endpoints, this document is mainly applicable 1) | between arbitrary endpoints, this document is mainly applicable when | |||
when there is a single ISP between the requested source and | ||||
destination PIDs or endpoints, for example, ISP-hosted CDN/edge, | ||||
tenant interconnection in a single public cloud platform, etc.; or 2) | ||||
when the Path Vectors are generated from end-to-end measurement data. | ||||
2. Requirements Languages | * there is a single ISP between the requested source and destination | |||
Provider-defined Identifiers (PIDs) or endpoints -- for example, | ||||
ISP-hosted Content Delivery Network (CDN) / edge, tenant | ||||
interconnection in a single public cloud platform, etc., or | ||||
* the Path Vectors are generated from end-to-end measurement data. | ||||
2. Requirements Language | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
When the words appear in lower case, they are to be interpreted with | ||||
their natural language meanings. | ||||
3. Terminology | 3. Terminology | |||
This document extends the ALTO base protocol [RFC7285] and the | This document extends the ALTO base protocol [RFC7285] and the entity | |||
Unified Property Map extension [I-D.ietf-alto-unified-props-new]. In | property map extension [RFC9240]. In addition to the terms defined | |||
addition to the terms defined in these documents, this document also | in those documents, this document also uses the following terms: | |||
uses the following additional terms: | ||||
Abstract Network Element (ANE): An abstract representation for a | Abstract Network Element (ANE): An abstract representation for a | |||
component in a network that handles data packets and whose | component in a network that handles data packets and whose | |||
properties can potentially have an impact on the end-to-end | properties can potentially have an impact on the end-to-end | |||
performance of traffic. An ANE can be a physical device such as a | performance of traffic. An ANE can be a physical device such as a | |||
router, a link or an interface, or an aggregation of devices such | router, a link, or an interface; or an aggregation of devices such | |||
as a subnetwork or a data center. | as a subnetwork or a data center. | |||
The definition of Abstract Network Element is similar to Network | The definition of an ANE is similar to that for a network element | |||
Element defined in [RFC2216] in the sense that they both provide | as defined in [RFC2216] in the sense that they both provide an | |||
an abstract representation of specific components of a network. | abstract representation of specific components of a network. | |||
However, they have different criteria on how these particular | However, they have different criteria on how these particular | |||
components are selected. Specifically, a Network Element requires | components are selected. Specifically, a network element requires | |||
the components to be capable of exercising QoS control, while | the components to be capable of exercising QoS control, while an | |||
Abstract Network Element only requires the components to have an | ANE only requires the components to have an impact on end-to-end | |||
impact on the end-to-end performance. | performance. | |||
ANE Name: A string that uniquely identifies an ANE in a specific | ANE name: A string that uniquely identifies an ANE in a specific | |||
scope. An ANE can be constructed either statically in advance or | scope. An ANE can be constructed either statically in advance or | |||
on demand based on the requested information. Thus, different | on demand based on the requested information. Thus, different | |||
ANEs may only be valid within a particular scope, either ephemeral | ANEs may only be valid within a particular scope, either ephemeral | |||
or persistent. Within each scope, an ANE is uniquely identified | or persistent. Within each scope, an ANE is uniquely identified | |||
by an ANE Name, as defined in Section 6.1. Note that an ALTO | by an ANE name, as defined in Section 6.1. Note that an ALTO | |||
client must not assume ANEs in different scopes but with the same | client must not assume ANEs in different scopes but with the same | |||
ANE Name refer to the same component(s) of the network. | ANE name refer to the same component(s) of the network. | |||
Path Vector: Path Vector, or ANE Path Vector, refers to a JSON array | Path Vector (or ANE Path Vector): Refers to a JSON array of ANE | |||
of ANE Names. It is a generalization of BGP path vector. While | names. It is a generalization of a BGP path vector. While a | |||
standard BGP path vector (Section 5.1.2 of [RFC4271]) specifies a | standard BGP path vector (Section 5.1.2 of [RFC4271]) specifies a | |||
sequence of autonomous systems for a destination IP prefix, the | sequence of Autonomous Systems (ASes) for a destination IP prefix, | |||
Path Vector defined in this extension specifies a sequence of ANEs | the Path Vector defined in this extension specifies a sequence of | |||
either for a source Provider-Defined Identifier (PID) and a | ANEs for either 1) a source PID and a destination PID, as in the | |||
destination PID as in the CostMapData (11.2.3.6 in [RFC7285]), or | CostMapData object (Section 11.2.3.6 of [RFC7285]) or 2) a source | |||
for a source endpoint and a destination endpoint as in the | endpoint and a destination endpoint, as in the EndpointCostMapData | |||
EndpointCostMapData object (Section 11.5.1.6 of [RFC7285]). | object (Section 11.5.1.6 of [RFC7285]). | |||
Path Vector resource: An ALTO information resource (Section 8.1 of | Path Vector resource: An ALTO information resource (Section 8.1 of | |||
[RFC7285]) which supports the extension defined in this document. | [RFC7285]) that supports the extension defined in this document. | |||
Path Vector cost type: A special cost type, which is specified in | Path Vector cost type: A special cost type, which is specified in | |||
Section 6.5. When this cost type is present in an IRD entry, it | Section 6.5. When this cost type is present in an Information | |||
indicates that the information resource is a Path Vector resource. | Resource Directory (IRD) entry, it indicates that the information | |||
When this cost type is present in a Filtered Cost Map request or | resource is a Path Vector resource. When this cost type is | |||
an Endpoint Cost Service request, it indicates each cost value | present in a filtered cost map request or an Endpoint Cost Service | |||
must be interpreted as a Path Vector. | request, it indicates that each cost value must be interpreted as | |||
a Path Vector. | ||||
Path Vector request: The POST message sent to an ALTO Path Vector | Path Vector request: The POST message sent to an ALTO Path Vector | |||
resource. | resource. | |||
Path Vector response: A Path Vector response refers to the | Path Vector response: Refers to the multipart/related message | |||
multipart/related message returned by a Path Vector resource. | returned by a Path Vector resource. | |||
4. Requirements and Use Cases | 4. Requirements and Use Cases | |||
4.1. Design Requirements | 4.1. Design Requirements | |||
This section gives an illustrative example of how an overlay | This section gives an illustrative example of how an overlay | |||
application can benefit from the extension defined in this document. | application can benefit from the extension defined in this document. | |||
Assume that an application has control over a set of flows, which may | Assume that an application has control over a set of flows, which may | |||
go through shared links/nodes and share bottlenecks. The application | go through shared links/nodes and share bottlenecks. The application | |||
seeks to schedule the traffic among multiple flows to get better | seeks to schedule the traffic among multiple flows to get better | |||
performance. The constraints of feasible rate allocations of those | performance. The constraints of feasible rate allocations of those | |||
flows will benefit the scheduling. However, Cost Maps as defined in | flows will benefit the scheduling. However, cost maps as defined in | |||
[RFC7285] can not reveal such information. | [RFC7285] cannot reveal such information. | |||
Specifically, consider a network as shown in Figure 1. The network | Specifically, consider the example network shown in Figure 1. The | |||
has 7 switches (sw1 to sw7) forming a dumb-bell topology. Switches | network has seven switches ("sw1" to "sw7") forming a dumbbell | |||
"sw1", "sw2", "sw3" and "sw4" are access switches, and sw5-sw7 form | topology. Switches "sw1", "sw2", "sw3", and "sw4" are access | |||
the backbone. End hosts eh1 to eh4 are connected to access switches | switches, and "sw5-sw7" form the backbone. End hosts "eh1" to "eh4" | |||
sw1 to sw4 respectively. Assume that the bandwidth of link eh1 -> | are connected to access switches "sw1" to "sw4", respectively. | |||
sw1 and link sw1 -> sw5 is 150 Mbps, and the bandwidth of the other | Assume that the bandwidth of link "eh1 -> sw1" and link "sw1 -> sw5" | |||
links is 100 Mbps. | is 150 Mbps and the bandwidth of the other links is 100 Mbps. | |||
+-----+ | +-----+ | |||
| | | | | | |||
--+ sw6 +-- | --+ sw6 +-- | |||
/ | | \ | / | | \ | |||
PID1 +-----+ / +-----+ \ +-----+ PID2 | PID1 +-----+ / +-----+ \ +-----+ PID2 | |||
eh1__| |_ / \ ____| |__eh2 | eh1__| |_ / \ ____| |__eh2 | |||
192.0.2.2 | sw1 | \ +--|--+ +--|--+ / | sw2 | 192.0.2.3 | 192.0.2.2 | sw1 | \ +--|--+ +--|--+ / | sw2 | 192.0.2.3 | |||
+-----+ \ | | | |/ +-----+ | +-----+ \ | | | |/ +-----+ | |||
\_| sw5 +---------+ sw7 | | \_| sw5 +---------+ sw7 | | |||
skipping to change at page 8, line 35 ¶ | skipping to change at line 350 ¶ | |||
+-----+ +-----+ | +-----+ +-----+ | |||
bw(eh1--sw1) = bw(sw1--sw5) = 150 Mbps | bw(eh1--sw1) = bw(sw1--sw5) = 150 Mbps | |||
bw(eh2--sw2) = bw(eh3--sw3) = bw(eh4--sw4) = 100 Mbps | bw(eh2--sw2) = bw(eh3--sw3) = bw(eh4--sw4) = 100 Mbps | |||
bw(sw1--sw5) = bw(sw3--sw5) = bw(sw2--sw7) = bw(sw4--sw7) = 100 Mbps | bw(sw1--sw5) = bw(sw3--sw5) = bw(sw2--sw7) = bw(sw4--sw7) = 100 Mbps | |||
bw(sw5--sw6) = bw(sw5--sw7) = bw(sw6--sw7) = 100 Mbps | bw(sw5--sw6) = bw(sw5--sw7) = bw(sw6--sw7) = 100 Mbps | |||
Figure 1: Raw Network Topology | Figure 1: Raw Network Topology | |||
The base ALTO topology abstraction of the network is shown in | The base ALTO topology abstraction of the network is shown in | |||
Figure 2. Assume the cost map returns an hypothetical cost type | Figure 2. Assume that the cost map returns a hypothetical cost type | |||
representing the available bandwidth between a source and a | representing the available bandwidth between a source and a | |||
destination. | destination. | |||
+----------------------+ | +----------------------+ | |||
{eh1} | | {eh2} | {eh1} | | {eh2} | |||
PID1 | | PID2 | PID1 | | PID2 | |||
+------+ +------+ | +------+ +------+ | |||
| | | | | | |||
| | | | | | |||
{eh3} | | {eh4} | {eh3} | | {eh4} | |||
PID3 | | PID4 | PID3 | | PID4 | |||
+------+ +------+ | +------+ +------+ | |||
| | | | | | |||
+----------------------+ | +----------------------+ | |||
Figure 2: Base Topology Abstraction | Figure 2: Base Topology Abstraction | |||
Now assume the application wants to maximize the total rate of the | Now, assume that the application wants to maximize the total rate of | |||
traffic among a set of <source, destination> pairs, say "eh1 -> eh2" | the traffic among a set of <source, destination> pairs -- say, "eh1 | |||
and "eh1 -> eh4". Let "x" denote the transmission rate of "eh1 -> | -> eh2" and "eh1 -> eh4". Let "x" denote the transmission rate of | |||
eh2" and "y" denote the rate of "eh1 -> eh4". The objective function | "eh1 -> eh2" and "y" denote the rate of "eh1 -> eh4". The objective | |||
is | function is | |||
max(x + y). | max(x + y). | |||
With the ALTO Cost Map, the cost between PID1 and PID2 and between | With the ALTO cost map, the costs between PID1 and PID2 and between | |||
PID1 and PID4 will both be 100 Mbps. The client can get a capacity | PID1 and PID4 will both be 100 Mbps. The client can get a capacity | |||
region of | region of | |||
x <= 100 Mbps, | x <= 100 Mbps | |||
y <= 100 Mbps. | y <= 100 Mbps. | |||
With this information, the client may mistakenly think it can achieve | With this information, the client may mistakenly think it can achieve | |||
a maximum total rate of 200 Mbps. However, this rate is infeasible, | a maximum total rate of 200 Mbps. However, this rate is infeasible, | |||
as there are only two potential cases: | as there are only two potential cases: | |||
* Case 1: "eh1 -> eh2" and "eh1 -> eh4" take different path segments | Case 1: "eh1 -> eh2" and "eh1 -> eh4" take different path segments | |||
from "sw5" to "sw7". For example, if "eh1 -> eh2" uses path "eh1 | from "sw5" to "sw7". For example, if "eh1 -> eh2" uses path "eh1 | |||
-> sw1 -> sw5 -> sw6 -> sw7 -> sw2 -> eh2" and "eh1 -> eh4" uses | -> sw1 -> sw5 -> sw6 -> sw7 -> sw2 -> eh2" and "eh1 -> eh4" uses | |||
path "eh1 -> sw1 -> sw5 -> sw7 -> sw4 -> eh4", then the shared | path "eh1 -> sw1 -> sw5 -> sw7 -> sw4 -> eh4", then the shared | |||
bottleneck links are "eh1 -> sw1" and "sw1 -> sw5". In this case, | bottleneck links are "eh1 -> sw1" and "sw1 -> sw5". In this case, | |||
the capacity region is: | the capacity region is: | |||
x <= 100 Mbps | x <= 100 Mbps | |||
y <= 100 Mbps | y <= 100 Mbps | |||
x + y <= 150 Mbps | x + y <= 150 Mbps | |||
and the real optimal total rate is 150 Mbps. | and the real optimal total rate is 150 Mbps. | |||
* Case 2: "eh1 -> eh2" and "eh1 -> eh4" take the same path segment | Case 2: "eh1 -> eh2" and "eh1 -> eh4" take the same path segment | |||
from "sw5" to "sw7". For example, if "eh1 -> eh2" uses path "eh1 | from "sw5" to "sw7". For example, if "eh1 -> eh2" uses path "eh1 | |||
-> sw1 -> sw5 -> sw7 -> sw2 -> eh2" and "eh1 -> eh4" also uses | -> sw1 -> sw5 -> sw7 -> sw2 -> eh2" and "eh1 -> eh4" also uses | |||
path "eh1 -> sw1 -> sw5 -> sw7 -> sw4 -> eh4", then the shared | path "eh1 -> sw1 -> sw5 -> sw7 -> sw4 -> eh4", then the shared | |||
bottleneck link is "sw5 -> sw7". In this case, the capacity | bottleneck link is "sw5 -> sw7". In this case, the capacity | |||
region is: | region is: | |||
x <= 100 Mbps | x <= 100 Mbps | |||
y <= 100 Mbps | y <= 100 Mbps | |||
x + y <= 100 Mbps | x + y <= 100 Mbps | |||
and the real optimal total rate is 100 Mbps. | and the real optimal total rate is 100 Mbps. | |||
Clearly, with more accurate and fine-grained information, the | Clearly, with more accurate and fine-grained information, the | |||
application can gain a better prediction of its traffic and may | application can better predict its traffic and may orchestrate its | |||
orchestrate its resources accordingly. However, to provide such | resources accordingly. However, to provide such information, the | |||
information, the network needs to expose abstract information beyond | network needs to expose abstract information beyond the simple cost | |||
the simple cost map abstraction. In particular: | map abstraction. In particular: | |||
* The ALTO server must expose abstract information about the network | * The ALTO server must expose abstract information about the network | |||
paths that are traversed by the traffic between a source and a | paths that are traversed by the traffic between a source and a | |||
destination beyond a simple numerical value, which allows the | destination beyond a simple numerical value, which allows the | |||
overlay application to distinguish between Cases 1 and 2 and to | overlay application to distinguish between Cases 1 and 2 and to | |||
compute the optimal total rate accordingly. | compute the optimal total rate accordingly. | |||
* The ALTO server must allow the client to distinguish the common | * The ALTO server must allow the client to distinguish the common | |||
ANE shared by "eh1 -> eh2" and "eh1 -> eh4", e.g., "eh1 - sw1" and | ANE shared by "eh1 -> eh2" and "eh1 -> eh4", e.g., "eh1--sw1" and | |||
"sw1 - sw5" in Case 1. | "sw1--sw5" in Case 1. | |||
* The ALTO server must expose abstract information on the properties | * The ALTO server must expose abstract information on the properties | |||
of the ANEs used by "eh1 -> eh2" and "eh1 -> eh4". For example, | of the ANEs used by "eh1 -> eh2" and "eh1 -> eh4". For example, | |||
an ALTO server can either expose the available bandwidth between | an ALTO server can either expose the available bandwidth between | |||
"eh1 - sw1", "sw1 - sw5", "sw5 - sw7", "sw5 - sw6", "sw6 - sw7", | "eh1--sw1", "sw1--sw5", "sw5--sw7", "sw5--sw6", "sw6--sw7", | |||
"sw7 - sw2", "sw7 - sw4", "sw2 - eh2", "sw4 - eh4" in Case 1, or | "sw7--sw2", "sw7--sw4", "sw2--eh2", "sw4--eh4" in Case 1 or expose | |||
expose 3 abstract elements "A", "B" and "C", which represent the | three abstract elements "A", "B", and "C", which represent the | |||
linear constraints that define the same capacity region in Case 1. | linear constraints that define the same capacity region in Case 1. | |||
In general, we can conclude that to support the multiple flow | In general, we can conclude that to support the use case for multiple | |||
scheduling use case, the ALTO framework must be extended to satisfy | flow scheduling, the ALTO framework must be extended to satisfy the | |||
the following additional requirements: | following additional requirements (ARs): | |||
AR1: An ALTO server must provide the ANEs that are important to | AR1: An ALTO server must provide the ANEs that are important for | |||
assess the QoE of the overlay application on the path of a | assessing the QoE of the overlay application on the path of a | |||
<source, destination> pair. | <source, destination> pair. | |||
AR2: An ALTO server must provide information to identify how ANEs | AR2: An ALTO server must provide information to identify how ANEs | |||
are shared on the paths of different <source, destination> pairs. | are shared on the paths of different <source, destination> pairs. | |||
AR3: An ALTO server must provide information on the properties that | AR3: An ALTO server must provide information on the properties that | |||
are important to assess the QoE of the application for ANEs. | are important for assessing the QoE of the application for ANEs. | |||
The extension defined in this document specifies a solution to expose | The extension defined in this document specifies a solution to expose | |||
such abstract information. | such abstract information. | |||
4.2. Sample Use Cases | 4.2. Sample Use Cases | |||
While the multiple flow scheduling problem is used to help identify | While the problem related to multiple flow scheduling is used to help | |||
the additional requirements, the extension defined in this document | identify the additional requirements, the extension defined in this | |||
can be applied to a wide range of applications. This section | document can be applied to a wide range of applications. This | |||
highlights some use cases that are reported. | section highlights some of the reported use cases. | |||
4.2.1. Exposing Network Bottlenecks | 4.2.1. Exposing Network Bottlenecks | |||
An important use case of the Path Vector extension is to expose | One important use case for the Path Vector extension is to expose | |||
network bottlenecks. Applications which need to perform large scale | network bottlenecks. Applications that need to perform large-scale | |||
data transfers can benefit from being aware of the resource | data transfers can benefit from being aware of the resource | |||
constraints exposed by this extension even if they have different | constraints exposed by this extension even if they have different | |||
objectives. One such example is the Worldwide LHC Computing Grid | objectives. One such example is the Worldwide LHC Computing Grid | |||
(WLCG), the largest example of a distributed computation | (WLCG) (where "LHC" means "Large Hadron Collider"), which is the | |||
collaboration in the research and education world. | largest example of a distributed computation collaboration in the | |||
research and education world. | ||||
Figure 3 illustrates an example of using ALTO Path Vector as an | Figure 3 illustrates an example of using an ALTO Path Vector as an | |||
interface between the job optimizer for a data analytics system and | interface between the job optimizer for a data analytics system and | |||
the network manager. In particular, we assume the objective of the | the network manager. In particular, we assume that the objective of | |||
job optimizer is to minimize the job completion time. | the job optimizer is to minimize the job completion time. | |||
In such a setting, the network-aware job optimizer (e.g., [CLARINET]) | In such a setting, the network-aware job optimizer (e.g., [CLARINET]) | |||
takes a query and generates multiple query execution plans (QEP). It | takes a query and generates multiple query execution plans (QEPs). | |||
can encode the QEPs as Path Vector requests that are send to an ALTO | It can encode the QEPs as Path Vector requests that are sent to an | |||
server. The ALTO server obtains the routing information for the | ALTO server. The ALTO server obtains the routing information for the | |||
flows in a QEP and finds links, routers, or middleboxes (e.g., a | flows in a QEP and finds links, routers, or middleboxes (e.g., a | |||
stateful firewall) that can potentially become bottlenecks of the QEP | stateful firewall) that can potentially become bottlenecks for the | |||
(e.g., see [NOVA] and [G2] for mechanisms to identify bottleneck | QEP (e.g., see [NOVA] and [G2] for mechanisms to identify bottleneck | |||
links under different settings). The resource constraint information | links under different settings). The resource constraint information | |||
is encoded in a Path Vector response and returned to the ALTO client. | is encoded in a Path Vector response and returned to the ALTO client. | |||
With the network resource constraints, the job optimizer may choose | With the network resource constraints, the job optimizer may choose | |||
the QEP with the optimal job completion time to be executed. It must | the QEP with the optimal job completion time to be executed. It must | |||
be noted that the ALTO framework itself does not offer the capability | be noted that the ALTO framework itself does not offer the capability | |||
to control the traffic. However, certain network managers may offer | to control the traffic. However, certain network managers may offer | |||
ways to enforce resource guarantees, such as on-demand tunnels (e.g., | ways to enforce resource guarantees, such as on-demand tunnels (e.g., | |||
[SWAN]), demand vector (e.g., [HUG], [UNICORN]), etc. The traffic | [SWAN]), demand vectors (e.g., [HUG], [UNICORN]), etc. The traffic | |||
control interfaces and mechanisms are out of the scope of this | control interfaces and mechanisms are out of scope for this document. | |||
document. | ||||
Data schema Queries | Data schema Queries | |||
| | | | | | |||
\ / | \ / | |||
+-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
| ALTO Client | <===============> | Job Optimizer | | | ALTO Client | <===============> | Job Optimizer | | |||
+-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
PV | ^ PV | | PV | ^ PV | | |||
Request | | Response | | Request | | Response | | |||
| | On-demand resource | | | | On-demand resource | | |||
(Data | | (Network allocation, demand | | (Potential | | (Network allocation, demand | | |||
Transfer | | Resource vector, etc. | | Data | | Resource vectors, etc. | | |||
Intents) | | Constraints) (Non-ALTO interfaces)| | Transfers) | | Constraints) (Non-ALTO interfaces)| | |||
v | v | v | v | |||
+-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
| ALTO Server | <===============> | Network Manager | | | ALTO Server | <===============> | Network Manager | | |||
+-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
/ | \ | / | \ | |||
| | | | | | | | |||
WAN DC1 DC2 | WAN DC1 DC2 | |||
Figure 3: Example Use Case for Data Analytics | Figure 3: Example Use Case for Data Analytics | |||
Another example is as illustrated in Figure 4. Consider a network | Another example is illustrated in Figure 4. Consider a network | |||
consisting of multiple sites and a non-blocking core network, i.e., | consisting of multiple sites and a non-blocking core network, i.e., | |||
the links in the core network have sufficient bandwidth that they | the links in the core network have sufficient bandwidth that they | |||
will not become the bottleneck of the data transfers. | will not become a bottleneck for the data transfers. | |||
On-going transfers New transfer requests | Ongoing transfers New transfer requests | |||
\----\ | | \----\ | | |||
| | | | | | |||
v v | v v | |||
+-------------+ +---------------+ | +-------------+ +---------------+ | |||
| ALTO Client | <===========> | Data Transfer | | | ALTO Client | <===========> | Data Transfer | | |||
+-------------+ | Scheduler | | +-------------+ | Scheduler | | |||
^ | ^ | PV request +---------------+ | ^ | ^ | PV Request +---------------+ | |||
| | | \--------------\ | | | | \--------------\ | |||
| | \--------------\ | | | | \--------------\ | | |||
| v PV response | v | | v PV Response | v | |||
+-------------+ +-------------+ | +-------------+ +-------------+ | |||
| ALTO Server | | ALTO Server | | | ALTO Server | | ALTO Server | | |||
+-------------+ +-------------+ | +-------------+ +-------------+ | |||
|| || | || || | |||
+---------+ +---------+ | +---------+ +---------+ | |||
| Network | | Network | | | Network | | Network | | |||
| Manager | | Manager | | | Manager | | Manager | | |||
+---------+ +---------+ | +---------+ +---------+ | |||
. . | . . | |||
. _~_ __ . . . | . _~_ __ . . . | |||
. ( )( ) .___ | . ( )( ) .___ | |||
~v~v~ /--( )------------( ) | ~v~v~ /--( )------------( ) | |||
( )-----/ ( ) ( ) | ( )-----/ ( ) ( ) | |||
~w~w~ ~^~^~^~ ~v~v~ | ~w~w~ ~^~^~^~ ~v~v~ | |||
Site 1 Non-blocking Core Site 2 | Site 1 Non-blocking Core Site 2 | |||
Figure 4: Example Use Case for Cross-site Bottleneck Discovery | Figure 4: Example Use Case for Cross-Site Bottleneck Discovery | |||
With the Path Vector extension, a site can reveal the bottlenecks | ||||
inside its own network with necessary information (such as link | ||||
capacities) to the ALTO client, instead of providing the full | ||||
topology and routing information, or no bottleneck information at | ||||
all. The bottleneck information can be used to analyze the impact of | ||||
adding/removing data transfer flows, e.g., using the framework | ||||
defined in [G2]. For example, assume that hosts "a", "b", and "c" | ||||
are in Site 1 and hosts "d", "e", and "f" are in Site 2, and there | ||||
are three flows in two sites: "a -> b", "c -> d", and "e -> f" | ||||
(Figure 5). | ||||
Site 1: | Site 1: | |||
[c] | [c] | |||
. | . | |||
........................................> [d] | ........................................> [d] | |||
+---+ 10 Gbps +---+ 10 Gbps +----+ 50 Gbps | +---+ 10 Gbps +---+ 10 Gbps +----+ 50 Gbps | |||
| A |---------| B |---------| GW |--------- Core | | A |---------| B |---------| GW |--------- Core | |||
+---+ +---+ +----+ | +---+ +---+ +----+ | |||
................... | ................... | |||
skipping to change at page 14, line 31 ¶ | skipping to change at line 588 ¶ | |||
+---+ 5 Gbps +---+ 10 Gbps +----+ 20 Gbps | +---+ 5 Gbps +---+ 10 Gbps +----+ 20 Gbps | |||
| X |--------| Y |---------| GW |--------- Core | | X |--------| Y |---------| GW |--------- Core | |||
+---+ +---+ +----+ | +---+ +---+ +----+ | |||
.................... | .................... | |||
. . | . . | |||
. v | . v | |||
[e] [f] | [e] [f] | |||
Figure 5: Example: Three Flows in Two Sites | Figure 5: Example: Three Flows in Two Sites | |||
With the Path Vector extension, a site can reveal the bottlenecks | For these flows, Site 1 returns: | |||
inside its own network with necessary information (such as link | ||||
capacities) to the ALTO client, instead of providing the full | ||||
topology and routing information, or no bottleneck information at | ||||
all. The bottleneck information can be used to analyze the impact of | ||||
adding/removing data transfer flows, e.g., using the [G2] framework. | ||||
For example, assume hosts "a", "b", "c" are in site 1 and hosts "d", | ||||
"e", "f" are in site 2, and there are 3 flows in two sites: "a -> b", | ||||
"c -> d", "e -> f". For these flows, site 1 returns: | ||||
a: { b: [ane1] }, | a: { b: [ane1] }, | |||
c: { d: [ane1, ane2, ane3] } | c: { d: [ane1, ane2, ane3] } | |||
ane1: bw = 10 Gbps (link: A->B) | ane1: bw = 10 Gbps (link: A->B) | |||
ane2: bw = 10 Gbps (link: B->GW) | ane2: bw = 10 Gbps (link: B->GW) | |||
ane3: bw = 50 Gbps (link: GW->Core) | ane3: bw = 50 Gbps (link: GW->Core) | |||
and site 2 returns: | and Site 2 returns: | |||
c: { d: [anei, aneii, aneiii] } | c: { d: [anei, aneii, aneiii] } | |||
e: { f: [aneiv] } | e: { f: [aneiv] } | |||
anei: bw = 5 Gbps (link Y->X) | anei: bw = 5 Gbps (link Y->X) | |||
aneii: bw = 10 Gbps (link GW->Y) | aneii: bw = 10 Gbps (link GW->Y) | |||
aneiii: bw = 20 Gbps (link Core->GW) | aneiii: bw = 20 Gbps (link Core->GW) | |||
aneiv: bw = 10 Gbps (link Y->GW) | aneiv: bw = 10 Gbps (link Y->GW) | |||
With the information, the data transfer scheduler can use algorithms | With this information, the data transfer scheduler can use algorithms | |||
such as the theory on bottleneck structure [G2] to predict the | such as the theory on bottleneck structure [G2] to predict the | |||
potential throughput of the flows. | potential throughput of the flows. | |||
4.2.2. Resource Exposure for CDN and Service Edge | 4.2.2. Resource Exposure for CDNs and Service Edges | |||
A growing trend in today's applications (2021) is to bring storage | At the time of this writing, a growing trend in today's applications | |||
and computation closer to the end users for better QoE, such as | is to bring storage and computation closer to the end users for | |||
Content Delivery Network (CDN), AR/VR, and cloud gaming, as reported | better QoE, such as CDNs, augmented reality / virtual reality, and | |||
in various documents (e.g., [SEREDGE] and [MOWIE]). Internet Service | cloud gaming, as reported in various documents (e.g., [SEREDGE] and | |||
Providers may deploy multiple layers of CDN caches, or more generally | [MOWIE]). ISPs may deploy multiple layers of CDN caches or, more | |||
service edges, with different latency and available resources | generally, service edges, with different latencies and available | |||
including number of CPU cores, memory, and storage. | resources, including the number of CPU cores, memory, and storage. | |||
For example, Figure 6 illustrates a typical edge-cloud scenario where | For example, Figure 6 illustrates a typical edge-cloud scenario where | |||
memory is measured in Gigabytes (G) and storage is measured in | memory is measured in gigabytes (GB) and storage is measured in | |||
Terabytes (T). The "on-premise" edge nodes are closest to the end | terabytes (TB). The "on-premise" edge nodes are closest to the end | |||
hosts and have the smallest latency, and the site-radio edge node and | hosts and have the lowest latency, and the site-radio edge node and | |||
access central office (CO) have larger latency but more available | access central office (CO) have higher latencies but more available | |||
resources. | resources. | |||
+-------------+ +----------------------+ | +-------------+ +----------------------+ | |||
| ALTO Client | <==========> | Application Provider | | | ALTO Client | <==========> | Application Provider | | |||
+-------------+ +----------------------+ | +-------------+ +----------------------+ | |||
PV | ^ PV | | PV | ^ PV | | |||
Request | | Response | Resource allocation, | Request | | Response | Resource allocation, | |||
| | | service establishment, | | | | service establishment, | |||
(End hosts | | (Edge nodes | etc. | (End hosts | | (Edge nodes | etc. | |||
and cloud | | and metrics) | | and cloud | | and metrics) | | |||
skipping to change at page 17, line 5 ¶ | skipping to change at line 665 ¶ | |||
Site-radio /_\ / | Site-radio /_\ / | |||
Edge Node 2(/\_/\)-----/ | Edge Node 2(/\_/\)-----/ | |||
/(_____)\ | /(_____)\ | |||
___ / \ --- | ___ / \ --- | |||
b--|_| -/ \--|_|--c | b--|_| -/ \--|_|--c | |||
/---\ /---\ | /---\ /---\ | |||
On premise On premise | On premise On premise | |||
Figure 6: Example Use Case for Service Edge Exposure | Figure 6: Example Use Case for Service Edge Exposure | |||
With the extension defined in this document, an ALTO server can | ||||
selectively reveal the CDNs and service edges that reside along the | ||||
paths between different end hosts and/or the cloud servers, together | ||||
with their properties (e.g., storage capabilities or Graphics | ||||
Processing Unit (GPU) capabilities) and available Service Level | ||||
Agreement (SLA) plans. See Figure 7 for an example where the query | ||||
is made for sources [a, b] and destinations [b, c, DC]. Here, each | ||||
ANE represents a service edge, and the properties include access | ||||
latency, available resources, etc. Note that the properties here are | ||||
only used for illustration purposes and are not part of this | ||||
extension. | ||||
a: { b: [ane1, ane2, ane3, ane4, ane5], | a: { b: [ane1, ane2, ane3, ane4, ane5], | |||
c: [ane1, ane2, ane3, ane4, ane6], | c: [ane1, ane2, ane3, ane4, ane6], | |||
DC: [ane1, ane2, ane3] } | DC: [ane1, ane2, ane3] } | |||
b: { c: [ane5, ane4, ane6], DC: [ane5, ane4, ane3] } | b: { c: [ane5, ane4, ane6], DC: [ane5, ane4, ane3] } | |||
ane1: latency=5ms cpu=2 memory=8G storage=10T | ane1: latency = 5 ms cpu = 2 memory = 8 GB storage = 10 TB | |||
(on premise, a) | (On premise, a) | |||
ane2: latency=20ms cpu=4 memory=8G storage=10T | ane2: latency = 20 ms cpu = 4 memory = 8 GB storage = 10 TB | |||
(Site-radio Edge Node 1) | (Site-radio Edge Node 1) | |||
ane3: latency=100ms cpu=8 memory=128G storage=100T | ane3: latency = 100 ms cpu = 8 memory = 128 GB storage = 100 TB | |||
(Access CO) | (Access CO) | |||
ane4: latency=20ms cpu=4 memory=8G storage=10T | ane4: latency = 20 ms cpu = 4 memory = 8 GB storage = 10 TB | |||
(Site-radio Edge Node 2) | (Site-radio Edge Node 2) | |||
ane5: latency=5ms cpu=2 memory=8G storage=10T | ane5: latency = 5 ms cpu = 2 memory = 8 GB storage = 10 TB | |||
(on premise, b) | (On premise, b) | |||
ane6: latency=5ms cpu=2 memory=8G storage=10T | ane6: latency = 5 ms cpu = 2 memory = 8 GB storage = 10 TB | |||
(on premise, c) | (On premise, c) | |||
Figure 7: Example Service Edge Query Results | Figure 7: Example Service Edge Query Results | |||
With the extension defined in this document, an ALTO server can | ||||
selectively reveal the CDNs and service edges that reside along the | ||||
paths between different end hosts and/or the cloud servers, together | ||||
with their properties such as capabilities (e.g., storage, GPU) and | ||||
available Service Level Agreement (SLA) plans. See Figure 7 for an | ||||
example where the query is made for sources [a, b] and destinations | ||||
[b, c, DC]. Here each ANE represents a service edge and the | ||||
properties include access latency, available resources, etc. Note | ||||
the properties here are only used for illustration purposes and are | ||||
not part of this extension. | ||||
With the service edge information, an ALTO client may better conduct | With the service edge information, an ALTO client may better conduct | |||
CDN request routing or offload functionalities from the user | CDN request routing or offload functionalities from the user | |||
equipment to the service edge, with considerations on customized | equipment to the service edge, with considerations in place for | |||
quality of experience. | customized quality of experience. | |||
5. Path Vector Extension: Overview | 5. Path Vector Extension: Overview | |||
This section provides a non-normative overview of the Path Vector | This section provides a non-normative overview of the Path Vector | |||
extension defined in this document. It is assumed that the readers | extension defined in this document. It is assumed that readers are | |||
are familiar with both the base protocol [RFC7285] and the Unified | familiar with both the base protocol [RFC7285] and the entity | |||
Property Map extension [I-D.ietf-alto-unified-props-new]. | property map extension [RFC9240]. | |||
To satisfy the additional requirements listed in Section 4.1, this | To satisfy the additional requirements listed in Section 4.1, this | |||
extension: | extension: | |||
1. introduces the concept of Abstract Network Element (ANE) as the | 1. introduces the concept of an ANE as the abstraction of components | |||
abstraction of components in a network whose properties may have | in a network whose properties may have an impact on end-to-end | |||
an impact on the end-to-end performance of the traffic handled by | performance of the traffic handled by those components, | |||
those components, | ||||
2. extends the Cost Map and Endpoint Cost Service to convey the ANEs | 2. extends the cost map and Endpoint Cost Service to convey the ANEs | |||
traversed by the path of a <source, destination> pair as Path | traversed by the path of a <source, destination> pair as Path | |||
Vectors, and | Vectors, and | |||
3. uses the Unified Property Map to convey the association between | 3. uses the entity property map to convey the association between | |||
the ANEs and their properties. | the ANEs and their properties. | |||
Thus, an ALTO client can learn about the ANEs that are important to | Thus, an ALTO client can learn about the ANEs that are important for | |||
assess the QoE of different <source, destination> pairs by | assessing the QoE of different <source, destination> pairs by | |||
investigating the corresponding Path Vector value (AR1), identify | investigating the corresponding Path Vector value (AR1) and can also | |||
common ANEs if an ANE appears in the Path Vectors of multiple | (1) identify common ANEs if an ANE appears in the Path Vectors of | |||
<source, destination> pairs (AR2), and retrieve the properties of the | multiple <source, destination> pairs (AR2) and (2) retrieve the | |||
ANEs by searching the Unified Property Map (AR3). | properties of the ANEs by searching the entity property map (AR3). | |||
5.1. Abstract Network Element (ANE) | 5.1. Abstract Network Element (ANE) | |||
This extension introduces ANE as an indirect and network-agnostic way | This extension introduces the ANE as an indirect and network-agnostic | |||
to specify a component or an aggregation of components of a network | way to specify a component or an aggregation of components of a | |||
whose properties have an impact on the end-to-end performance for | network whose properties have an impact on end-to-end performance for | |||
application traffic between endpoints. | application traffic between endpoints. | |||
ANEs allow ALTO servers to focus on common properties of different | ANEs allow ALTO servers to focus on common properties of different | |||
types of network components. For example, the throughput of a flow | types of network components. For example, the throughput of a flow | |||
can be constrained by different components in a network: the capacity | can be constrained by different components in a network: the capacity | |||
of a physical link, the maximum throughput of a firewall, the | of a physical link, the maximum throughput of a firewall, the | |||
reserved bandwidth of an MPLS tunnel, etc. See the example below, | reserved bandwidth of an MPLS tunnel, etc. In the example below, | |||
assume the throughput of the firewall is 100 Mbps and the capacity | assume that the throughput of the firewall is 100 Mbps and the | |||
for link (A, B) is also 100 Mbps, they result in the same constraint | capacity for link (A, B) is also 100 Mbps; they result in the same | |||
on the total throughput of f1 and f2. Thus, they are identical when | constraint on the total throughput of f1 and f2. Thus, they are | |||
treated as an ANE. | identical when treated as an ANE. | |||
f1 | ^ f1 | f1 | ^ f1 | |||
| | -----------------> | | | -----------------> | |||
+----------+ +---+ +---+ | +----------+ +---+ +---+ | |||
| Firewall | | A |-----| B | | | Firewall | | A |-----| B | | |||
+----------+ +---+ +---+ | +----------+ +---+ +---+ | |||
| | -----------------> | | | -----------------> | |||
v | f2 f2 | v | f2 f2 | |||
When an ANE is defined by an ALTO server, it is assigned an | When an ANE is defined by an ALTO server, it is assigned an | |||
identifier by the ALTO server, i.e., a string of type ANEName as | identifier by the ALTO server, i.e., a string of type ANEName as | |||
specified in Section 6.1, and a set of associated properties. | specified in Section 6.1, and a set of associated properties. | |||
5.1.1. ANE Entity Domain | 5.1.1. ANE Entity Domain | |||
In this extension, the associations between ANE and the properties | In this extension, the associations between ANEs and their properties | |||
are conveyed in a Unified Property Map. Thus, ANEs must constitute an | are conveyed in an entity property map. Thus, ANEs must constitute | |||
entity domain (Section 5.1 of [I-D.ietf-alto-unified-props-new]), and | an "entity domain" (Section 5.1 of [RFC9240]), and each ANE property | |||
each ANE property must be an entity property (Section 5.2 of | must be an entity property (Section 5.2 of [RFC9240]). | |||
[I-D.ietf-alto-unified-props-new]). | ||||
Specifically, this document defines a new entity domain called "ane" | Specifically, this document defines a new entity domain called "ane" | |||
as specified in Section 6.2 and defines two initial properties for | as specified in Section 6.2; Section 6.4 defines two initial property | |||
the ANE entity domain. | types for the ANE entity domain. | |||
5.1.2. Ephemeral and Persistent ANEs | 5.1.2. Ephemeral and Persistent ANEs | |||
By design, ANEs are ephemeral and not to be used in further requests | By design, ANEs are ephemeral and not to be used in further requests | |||
to other ALTO resources. More precisely, the corresponding ANE names | to other ALTO resources. More precisely, the corresponding ANE names | |||
are no longer valid beyond the scope of a Path Vector response or the | are no longer valid beyond the scope of a Path Vector response or the | |||
incremental update stream for a Path Vector request. Compared with | incremental update stream for a Path Vector request. Compared with | |||
globally unique ANE names, ephemeral ANE has several benefits | globally unique ANE names, ephemeral ANEs have several benefits, | |||
including better privacy of the ISP's internal structure and more | including better privacy for the ISP's internal structure and more | |||
flexible ANE computation. | flexible ANE computation. | |||
For example, an ALTO server may define an ANE for each aggregated | For example, an ALTO server may define an ANE for each aggregated | |||
bottleneck link between the sources and destinations specified in the | bottleneck link between the sources and destinations specified in the | |||
request. For requests with different sources and destinations, the | request. For requests with different sources and destinations, the | |||
bottlenecks may be different but can safely reuse the same ANE names. | bottlenecks may be different but can safely reuse the same ANE names. | |||
The client can still adjust its traffic based on the information but | The client can still adjust its traffic based on the information, but | |||
is difficult to infer the underlying topology with multiple queries. | it is difficult to infer the underlying topology with multiple | |||
queries. | ||||
However, sometimes an ISP may intend to selectively reveal some | However, sometimes an ISP may intend to selectively reveal some | |||
"persistent" network components which, opposite to being ephemeral, | "persistent" network components that, as opposed to being ephemeral, | |||
have a longer life cycle. For example, an ALTO server may define an | have a longer life cycle. For example, an ALTO server may define an | |||
ANE for each service edge cluster. Once a client chooses to use a | ANE for each service edge cluster. Once a client chooses to use a | |||
service edge, e.g., by deploying some user-defined functions, it may | service edge, e.g., by deploying some user-defined functions, it may | |||
want to stick to the service edge to avoid the complexity of state | want to stick to the service edge to avoid the complexity of state | |||
transition or synchronization, and continuously query the properties | transition or synchronization, and continuously query the properties | |||
of the edge cluster. | of the edge cluster. | |||
This document provides a mechanism to expose such network components | This document provides a mechanism to expose such network components | |||
as persistent ANEs. A persistent ANE has a persistent ID that is | as persistent ANEs. A persistent ANE has a persistent ID that is | |||
registered in a Property Map, together with their properties. See | registered in a property map, together with its properties. See | |||
Section 6.2.4 and Section 6.4.2 for more detailed instructions on how | Sections 6.2.4 and 6.4.2 for more detailed instructions on how to | |||
to identify ephemeral ANEs and persistent ANEs. | identify ephemeral ANEs and persistent ANEs. | |||
5.1.3. Property Filtering | 5.1.3. Property Filtering | |||
Resource-constrained ALTO clients (see Section 4.1.2 of [RFC7285]) | Resource-constrained ALTO clients (see Section 4.1.2 of [RFC7285]) | |||
may benefit from the filtering of Path Vector query results at the | may benefit from the filtering of Path Vector query results at the | |||
ALTO server, as an ALTO client may only require a subset of the | ALTO server, as an ALTO client may only require a subset of the | |||
available properties. | available properties. | |||
Specifically, the available properties for a given resource are | Specifically, the available properties for a given resource are | |||
announced in the Information Resource Directory as a new capability | announced in the Information Resource Directory (IRD) as a new | |||
called "ane-property-names". The properties selected by a client as | filtering capability called "ane-property-names". The properties | |||
being of interest are specified in the subsequent Path Vector queries | selected by a client as being of interest are specified in the | |||
using the filter called 'ane-property-names'. The response includes | subsequent Path Vector queries using the "ane-property-names" filter. | |||
and only includes the selected properties for the ANEs in the | The response only includes the selected properties for the ANEs. | |||
response. | ||||
The "ane-property-names" capability for Cost Map and for Endpoint | The "ane-property-names" capability for the cost map and the Endpoint | |||
Cost Service is specified in Section 7.2.4 and Section 7.3.4 | Cost Service is specified in Sections 7.2.4 and 7.3.4, respectively. | |||
respectively. The "ane-property-names" filter for Cost Map and | The "ane-property-names" filter for the cost map and the Endpoint | |||
Endpoint Cost Service is specified in Section 7.2.3 and Section 7.3.3 | Cost Service is specified in Sections 7.2.3 and 7.3.3 accordingly. | |||
accordingly. | ||||
5.2. Path Vector Cost Type | 5.2. Path Vector Cost Type | |||
For an ALTO client to correctly interpret the Path Vector, this | For an ALTO client to correctly interpret the Path Vector, this | |||
extension specifies a new cost type called the Path Vector cost type. | extension specifies a new cost type called the "Path Vector cost | |||
type". | ||||
The Path Vector cost type must convey both the interpretation and | The Path Vector cost type must convey both the interpretation and | |||
semantics in the "cost-mode" and "cost-metric" respectively. | semantics in the "cost-mode" and "cost-metric" parameters, | |||
Unfortunately, a single "cost-mode" value cannot fully specify the | respectively. Unfortunately, a single "cost-mode" value cannot fully | |||
interpretation of a Path Vector, which is a compound data type. For | specify the interpretation of a Path Vector, which is a compound data | |||
example, in programming languages such as C++ where there existed a | type. For example, in programming languages such as C++, if there | |||
JSON array type named JSONArray, a Path Vector will have the type of | existed a JSON array type named JSONArray, a Path Vector would have | |||
JSONArray<ANEName>. | the type of JSONArray<ANEName>. | |||
Instead of extending the "type system" of ALTO, this document takes a | Instead of extending the "type system" of ALTO, this document takes a | |||
simple and backward compatible approach. Specifically, the "cost- | simple and backward-compatible approach. Specifically, the "cost- | |||
mode" of the Path Vector cost type is "array", which indicates the | mode" of the Path Vector cost type is "array", which indicates that | |||
value is a JSON array. Then, an ALTO client must check the value of | the value is a JSON array. Then, an ALTO client must check the value | |||
the "cost-metric". If the value is "ane-path", it means that the | of the "cost-metric" parameter. If the value is "ane-path", it means | |||
JSON array should be further interpreted as a path of ANENames. | that the JSON array should be further interpreted as a path of | |||
ANENames. | ||||
The Path Vector cost type is specified in Section 6.5. | The Path Vector cost type is specified in Section 6.5. | |||
5.3. Multipart Path Vector Response | 5.3. Multipart Path Vector Response | |||
For a basic ALTO information resource, a response contains only one | For a basic ALTO information resource, a response contains only one | |||
type of ALTO resources, e.g., Network Map, Cost Map, or Property Map. | type of ALTO resource, e.g., network map, cost map, or property | |||
Thus, only one round of communication is required: An ALTO client | map. Thus, only one round of communication is required: an ALTO | |||
sends a request to an ALTO server, and the ALTO server returns a | client sends a request to an ALTO server, and the ALTO server returns | |||
response, as shown in Figure 8. | a response, as shown in Figure 8. | |||
ALTO client ALTO server | ALTO client ALTO server | |||
|-------------- Request ---------------->| | |-------------- Request ---------------->| | |||
|<------------- Response ----------------| | |<------------- Response ----------------| | |||
Figure 8: A Typical ALTO Request and Response | Figure 8: A Typical ALTO Request and Response | |||
The extension defined in this document, on the other hand, involves | The extension defined in this document, on the other hand, involves | |||
two types of information resources: Path Vectors conveyed in an | two types of information resources: Path Vectors conveyed in an | |||
InfoResourceCostMap (defined in Section 11.2.3.6 of [RFC7285]) or an | InfoResourceCostMap data component (defined in Section 11.2.3.6 of | |||
InfoResourceEndpointCostMap (defined in Section 11.5.1.6 of | [RFC7285]) or an InfoResourceEndpointCostMap data component (defined | |||
[RFC7285]), and ANE properties conveyed in an InfoResourceProperties | in Section 11.5.1.6 of [RFC7285]), and ANE properties conveyed in an | |||
(defined in Section 7.6 of [I-D.ietf-alto-unified-props-new]). | InfoResourceProperties data component (defined in Section 7.6 of | |||
[RFC9240]). | ||||
Instead of two consecutive message exchanges, the extension defined | Instead of two consecutive message exchanges, the extension defined | |||
in this document enforces one round of communication. Specifically, | in this document enforces one round of communication. Specifically, | |||
the ALTO client must include the source and destination pairs and the | the ALTO client must include the source and destination pairs and the | |||
requested ANE properties in a single request, and the ALTO server | requested ANE properties in a single request, and the ALTO server | |||
must return a single response containing both the Path Vectors and | must return a single response containing both the Path Vectors and | |||
properties associated with the ANEs in the Path Vectors, as shown in | properties associated with the ANEs in the Path Vectors, as shown in | |||
Figure 9. Since the two parts are bundled together in one response | Figure 9. Since the two parts are bundled together in one response | |||
message, their orders are interchangeable. See Section 7.2.6 and | message, their orders are interchangeable. See Sections 7.2.6 and | |||
Section 7.3.6 for details. | 7.3.6 for details. | |||
ALTO client ALTO server | ALTO client ALTO server | |||
|------------- PV Request -------------->| | |------------- PV Request -------------->| | |||
|<----- PV Response (Cost Map Part) -----| | |<----- PV Response (Cost Map Part) -----| | |||
|<--- PV Response (Property Map Part) ---| | |<--- PV Response (Property Map Part) ---| | |||
Figure 9: The Path Vector Extension Request and Response | Figure 9: The Path Vector Extension Request and Response | |||
This design is based on the following considerations: | This design is based on the following considerations: | |||
1. ANEs may be constructed on demand, and potentially based on the | 1. ANEs may be constructed on demand and, potentially, based on the | |||
requested properties (See Section 5.1 for more details). If | requested properties (see Section 5.1 for more details). If | |||
sources and destinations are not in the same request as the | sources and destinations are not in the same request as the | |||
properties, an ALTO server either cannot construct ANEs on- | properties, an ALTO server either cannot construct ANEs on demand | |||
demand, or must wait until both requests are received. | or must wait until both requests are received. | |||
2. As ANEs may be constructed on demand, mappings of each ANE to its | 2. As ANEs may be constructed on demand, mappings of each ANE to its | |||
underlying network devices and resources can be specific to the | underlying network devices and resources can be specific to the | |||
request. In order to respond to the Property Map request | request. In order to respond to the property map request | |||
correctly, an ALTO server must store the mapping of each Path | correctly, an ALTO server must store the mapping of each Path | |||
Vector request until the client fully retrieves the property | Vector request until the client fully retrieves the property | |||
information. The "stateful" behavior may substantially harm the | information. This "stateful" behavior may substantially harm | |||
server scalability and potentially lead to Denial-of-Service | server scalability and potentially lead to denial-of-service | |||
attacks. | attacks. | |||
One approach to realize the one-round communication is to define a | One approach for realizing the one-round communication is to define a | |||
new media type to contain both objects, but this violates modular | new media type to contain both objects, but this violates modular | |||
design. This document follows the standard-conforming usage of | design. This document follows the standard-conforming usage of the | |||
"multipart/related" media type defined in [RFC2387] to elegantly | "multipart/related" media type as defined in [RFC2387] to elegantly | |||
combine the objects. Path Vectors are encoded in an | combine the objects. Path Vectors are encoded in an | |||
InfoResourceCostMap or an InfoResourceEndpointCostMap, and the | InfoResourceCostMap data component or InfoResourceEndpointCostMap | |||
Property Map is encoded in an InfoResourceProperties. They are | data component, and the property map is encoded in an | |||
encapsulated as parts of a multipart message. The modular | InfoResourceProperties data component. They are encapsulated as | |||
composition allows ALTO servers and clients to reuse the data models | parts of a multipart message. This modular composition allows ALTO | |||
of the existing information resources. Specifically, this document | servers and clients to reuse the data models of the existing | |||
addresses the following practical issues using "multipart/related". | information resources. Specifically, this document addresses the | |||
following practical issues using "multipart/related". | ||||
5.3.1. Identifying the Media Type of the Root Object | 5.3.1. Identifying the Media Type of the Object Root | |||
ALTO uses media type to indicate the type of an entry in the | ALTO uses a media type to indicate the type of an entry in the IRD | |||
Information Resource Directory (IRD) (e.g., "application/alto- | (e.g., "application/alto-costmap+json" for the cost map and | |||
costmap+json" for Cost Map and "application/alto-endpointcost+json" | "application/alto-endpointcost+json" for the Endpoint Cost Service). | |||
for Endpoint Cost Service). Simply putting "multipart/related" as | Simply using "multipart/related" as the media type, however, makes it | |||
the media type, however, makes it impossible for an ALTO client to | impossible for an ALTO client to identify the type of service | |||
identify the type of service provided by related entries. | provided by related entries. | |||
To address this issue, this document uses the "type" parameter to | To address this issue, this document uses the "type" parameter to | |||
indicate the root object of a multipart/related message. For a Cost | indicate the object root of a multipart/related message. For a cost | |||
Map resource, the "media-type" field in the IRD entry is "multipart/ | map resource, the "media-type" field in the IRD entry is "multipart/ | |||
related" with the parameter "type=application/alto-costmap+json"; for | related" with the parameter "type=application/alto-costmap+json"; for | |||
an Endpoint Cost Service, the parameter is "type=application/alto- | an Endpoint Cost Service, the parameter is "type=application/alto- | |||
endpointcost+json". | endpointcost+json". | |||
5.3.2. References to Part Messages | 5.3.2. References to Part Messages | |||
As the response of a Path Vector resource is a multipart message with | As the response of a Path Vector resource is a multipart message with | |||
two different parts, it is important that each part can be uniquely | two different parts, it is important that each part can be uniquely | |||
identified. Following the designs of [RFC8895], this extension | identified. Following the design provided in [RFC8895], this | |||
requires that an ALTO server assigns a unique identifier to each part | extension requires that an ALTO server assign a unique identifier to | |||
of the multipart response message. This identifier, referred to as a | each part of the multipart response message. This identifier, | |||
Part Resource ID (See Section 6.6 for details), is present in the | referred to as a Part Resource ID (see Section 6.6 for details), is | |||
part message's "Content-ID" header. By concatenating the Part | present in the part message's "Content-ID" header field. By | |||
Resource ID to the identifier of the Path Vector request, an ALTO | concatenating the Part Resource ID to the identifier of the Path | |||
server/client can uniquely identify the Path Vector Part or the | Vector request, an ALTO server/client can uniquely identify the Path | |||
Property Map part. | Vector part or the property map part. | |||
6. Specification: Basic Data Types | 6. Specification: Basic Data Types | |||
6.1. ANE Name | 6.1. ANE Name | |||
An ANE Name is encoded as a JSON string with the same format as that | An ANE name is encoded as a JSON string with the same format as that | |||
of the type PIDName (Section 10.1 of [RFC7285]). | of the type PIDName (Section 10.1 of [RFC7285]). | |||
The type ANEName is used in this document to indicate a string of | The type ANEName is used in this document to indicate a string of | |||
this format. | this format. | |||
6.2. ANE Entity Domain | 6.2. ANE Entity Domain | |||
The ANE entity domain associates property values with the Abstract | The ANE entity domain associates property values with the ANEs in a | |||
Network Elements in a Property Map. Accordingly, the ANE entity | property map. Accordingly, the ANE entity domain always depends on a | |||
domain always depends on a Property Map. | property map. | |||
It must be noted that the term "domain" here does not refer to a | It must be noted that the term "domain" here does not refer to a | |||
network domain. Rather, it is inherited from the "entity domain" | network domain. Rather, it is inherited from the entity domain as | |||
defined in Sec 3.2 in [I-D.ietf-alto-unified-props-new] that | defined in Section 3.2 of [RFC9240]; the entity domain represents the | |||
represents the set of valid entities defined by an ALTO information | set of valid entities defined by an ALTO information resource (called | |||
resource (called the defining information resource). | the "defining information resource"). | |||
6.2.1. Entity Domain Type | 6.2.1. Entity Domain Type | |||
The Entity Domain Type is "ane". | The entity domain type is "ane". | |||
6.2.2. Domain-Specific Entity Identifier | 6.2.2. Domain-Specific Entity Identifier | |||
The entity identifiers are the ANE Names in the associated Property | The entity identifiers are the ANE names in the associated property | |||
Map. | map. | |||
6.2.3. Hierarchy and Inheritance | 6.2.3. Hierarchy and Inheritance | |||
There is no hierarchy or inheritance for properties associated with | There is no hierarchy or inheritance for properties associated with | |||
ANEs. | ANEs. | |||
6.2.4. Media Type of Defining Resource | 6.2.4. Media Type of Defining Resource | |||
The defining resource for entity domain type "ane" MUST be a Property | The defining resource for entity domain type "ane" MUST be a property | |||
Map, i.e., the media type of defining resources is: | map, i.e., the media type of defining resources is: | |||
application/alto-propmap+json | application/alto-propmap+json | |||
Specifically, for ephemeral ANEs that appear in a Path Vector | Specifically, for ephemeral ANEs that appear in a Path Vector | |||
response, their entity domain names MUST be exactly ".ane" and the | response, their entity domain names MUST be exactly ".ane", and the | |||
defining resource of these ANEs is the Property Map part of the | defining resource of these ANEs is the property map part of the | |||
multipart response. Meanwhile, for any persistent ANE whose defining | multipart response. Meanwhile, for any persistent ANE whose defining | |||
resource is a Property Map resource, its entity domain name MUST have | resource is a property map resource, its entity domain name MUST have | |||
the format of "PROPMAP.ane" where PROPMAP is the resource ID of the | the format of "PROPMAP.ane", where PROPMAP is the resource ID of the | |||
defining resource. Persistent entities are "persistent" because | defining resource. Persistent entities are "persistent" because | |||
standalone queries can be made by an ALTO client to their defining | standalone queries can be made by an ALTO client to their defining | |||
resource(s) when the connection to the Path Vector service is closed. | resource(s) when the connection to the Path Vector service is closed. | |||
For example, the defining resource of an ephemeral ANE whose entity | For example, the defining resource of an ephemeral ANE whose entity | |||
identifier is ".ane:NET1" is the Property Map part that contains this | identifier is ".ane:NET1" is the property map part that contains this | |||
identifier. The defining resource of a persistent ANE whose entity | identifier. The defining resource of a persistent ANE whose entity | |||
identifier is "dc-props.ane:DC1" is the Property Map with the | identifier is "dc-props.ane:DC1" is the property map with the | |||
resource ID "dc-props". | resource ID "dc-props". | |||
6.3. ANE Property Name | 6.3. ANE Property Name | |||
An ANE Property Name is encoded as a JSON string with the same format | An ANE property name is encoded as a JSON string with the same format | |||
as that of Entity Property Name (Section 5.2.2 of | as that of an entity property name (Section 5.2.2 of [RFC9240]). | |||
[I-D.ietf-alto-unified-props-new]). | ||||
6.4. Initial ANE Property Types | 6.4. Initial ANE Property Types | |||
Two initial ANE property types are specified, "max-reservable- | Two initial ANE property types are specified: "max-reservable- | |||
bandwidth" and "persistent-entity-id". | bandwidth" and "persistent-entity-id". | |||
Note that these property types do not depend on any information | Note that these property types do not depend on any information | |||
resource. As such, the EntityPropertyName MUST only have the | resources. As such, the "EntityPropertyName" parameter MUST only | |||
EntityPropertyType part. | have the EntityPropertyType part. | |||
6.4.1. Maximum Reservable Bandwidth | 6.4.1. Maximum Reservable Bandwidth | |||
The maximum reservable bandwidth property ("max-reservable- | The maximum reservable bandwidth property ("max-reservable- | |||
bandwidth") stands for the maximum bandwidth that can be reserved for | bandwidth") stands for the maximum bandwidth that can be reserved for | |||
all the traffic that traverses an ANE. The value MUST be encoded as | all the traffic that traverses an ANE. The value MUST be encoded as | |||
a non-negative numerical cost value as defined in Section 6.1.2.1 of | a non-negative numerical cost value as defined in Section 6.1.2.1 of | |||
[RFC7285] and the unit is bit per second (bps). If this property is | [RFC7285], and the unit is bits per second (bps). If this property | |||
requested by the ALTO client but not present for an ANE in the server | is requested by the ALTO client but is not present for an ANE in the | |||
response, it MUST be interpreted as that the property is not defined | server response, it MUST be interpreted as meaning that the property | |||
for the ANE. | is not defined for the ANE. | |||
This property can be offered in a setting where the ALTO server is | This property can be offered in a setting where the ALTO server is | |||
part of a network system that provides on-demand resource allocation | part of a network system that provides on-demand resource allocation | |||
and the ALTO client is part of a user application. One existing | and the ALTO client is part of a user application. One existing | |||
example is [NOVA]: the ALTO server is part of an SDN controller and | example is [NOVA]: the ALTO server is part of a Software-Defined | |||
exposes a list of traversed network elements and associated link | Networking (SDN) controller and exposes a list of traversed network | |||
bandwidth to the client. The encoding in [NOVA] differs from the | elements and associated link bandwidth to the client. The encoding | |||
Path Vector response defined in this document that the Path Vector | in [NOVA] differs from the Path Vector response defined in this | |||
part and Property Map part are put in the same JSON object. | document in that the Path Vector part and property map part are | |||
placed in the same JSON object. | ||||
In such a framework, the ALTO server exposes resource (e.g., | In such a framework, the ALTO server exposes resource availability | |||
reservable bandwidth) availability information to the ALTO client. | information (e.g., reservable bandwidth) to the ALTO client. How the | |||
How the client makes resource requests based on the information and | client makes resource requests based on the information, and how the | |||
how the resource allocation is achieved respectively depend on | resource allocation is achieved, respectively, depend on interfaces | |||
interfaces between the management system and the users or a higher- | between the management system and the users or a higher-layer | |||
layer protocol (e.g., SDN network intents or MPLS tunnels), which are | protocol (e.g., SDN network intents [INTENT-BASED-NETWORKING] or MPLS | |||
out of the scope of this document. | tunnels), which are out of scope for this document. | |||
6.4.2. Persistent Entity ID | 6.4.2. Persistent Entity ID | |||
The persistent entity ID property is the entity identifier of the | This document enables the discovery of a persistent ANE by exposing | |||
persistent ANE which an ephemeral ANE presents (See Section 5.1.2 for | its entity identifier as the persistent entity ID property of an | |||
details). The value of this property is encoded with the format | ephemeral ANE in the path vector response. The value of this | |||
EntityID defined in Section 5.1.3 of | property is encoded with the EntityID format defined in Section 5.1.3 | |||
[I-D.ietf-alto-unified-props-new]. | of [RFC9240]. | |||
In this format, the entity ID combines: | In this format, the entity ID combines: | |||
* a defining information resource for the ANE on which a | * a defining information resource for the ANE on which a | |||
"persistent-entity-id" is queried, which is the Property Map | "persistent-entity-id" is queried, which is the property map | |||
resource defining the ANE as a persistent entity, together with | resource defining the ANE as a persistent entity, together with | |||
the properties; | the properties. | |||
* the persistent name of the ANE in that Property Map. | * the persistent name of the ANE in that property map. | |||
With this format, the client has all the needed information for | With this format, the client has all the needed information for | |||
further standalone query properties on the persistent ANE. | further standalone query properties on the persistent ANE. | |||
6.4.3. Examples | 6.4.3. Examples | |||
To illustrate the use of "max-reservable-bandwidth", consider the | To illustrate the use of "max-reservable-bandwidth", consider the | |||
following network with 5 nodes. Assume the client wants to query the | following network with five nodes. Assume that the client wants to | |||
maximum reservable bandwidth from H1 to H2. An ALTO server may split | query the maximum reservable bandwidth from H1 to H2. An ALTO server | |||
the network into two ANEs: "ane1" that represents the subnetwork with | may split the network into two ANEs: "ane1", which represents the | |||
routers A, B, and C, and "ane2" that represents the subnetwork with | subnetwork with routers A, B, and C; and "ane2", which represents the | |||
routers B, D and E. The maximum reservable bandwidth for "ane1" is | subnetwork with routers B, D, and E. The maximum reservable | |||
15 Mbps (using path A->C->B) and the maximum reservable bandwidth for | bandwidth for "ane1" is 15 Mbps (using path A->C->B), and the maximum | |||
"ane2" is 20 Mbps (using path B->D->E). | reservable bandwidth for "ane2" is 20 Mbps (using path B->D->E). | |||
20 Mbps 20 Mbps | 20 Mbps 20 Mbps | |||
10 Mbps +---+ +---+ +---+ | 10 Mbps +---+ +---+ +---+ | |||
/----| B |---| D |----| E |---- H2 | /----| B |---| D |----| E |---- H2 | |||
+---+/ +---+ +---+ +---+ | +---+/ +---+ +---+ +---+ | |||
H1 ----| A | 15 Mbps| | H1 ----| A | 15 Mbps| | |||
+---+\ +---+ | +---+\ +---+ | |||
\----| C | | \----| C | | |||
15 Mbps +---+ | 15 Mbps +---+ | |||
To illustrate the use of "persistent-entity-id", consider the | To illustrate the use of "persistent-entity-id", consider the | |||
scenario in Figure 6. As the life cycle of service edges are | scenario in Figure 6. As the life cycles of service edges are | |||
typically long, they may contain information that is not specific to | typically long, the service edges may contain information that is not | |||
the query. Such information can be stored in an individual unified | specific to the query. Such information can be stored in an | |||
property map and later be accessed by an ALTO client. | individual entity property map and can later be accessed by an ALTO | |||
client. | ||||
For example, "ane1" in Figure 7 represents the on-premise service | For example, "ane1" in Figure 7 represents the on-premise service | |||
edge closest to host a. Assume the properties of the service edges | edge closest to host "a". Assume that the properties of the service | |||
are provided in a unified property map called "se-props" and the ID | edges are provided in an entity property map called "se-props" and | |||
of the on-premise service edge is "9a0b55f7-7442-4d56-8a2c- | the ID of the on-premise service edge is "9a0b55f7-7442-4d56-8a2c- | |||
b4cc6a8e3aa1", the "persistent-entity-id" of "ane1" will be "se- | b4cc6a8e3aa1"; the "persistent-entity-id" setting for "ane1" will be | |||
props.ane:9a0b55f7-7442-4d56-8a2c-b4cc6a8e3aa1". With this | "se-props.ane:9a0b55f7-7442-4d56-8a2c-b4cc6a8e3aa1". With this | |||
persistent entity ID, an ALTO client may send queries to the "se- | persistent entity ID, an ALTO client may send queries to the "se- | |||
props" resource with the entity ID ".ane:9a0b55f7-7442-4d56-8a2c- | props" resource with the entity ID ".ane:9a0b55f7-7442-4d56-8a2c- | |||
b4cc6a8e3aa1". | b4cc6a8e3aa1". | |||
6.5. Path Vector Cost Type | 6.5. Path Vector Cost Type | |||
This document defines a new cost type, which is referred to as the | This document defines a new cost type, which is referred to as the | |||
Path Vector cost type. An ALTO server MUST offer this cost type if | Path Vector cost type. An ALTO server MUST offer this cost type if | |||
it supports the extension defined in this document. | it supports the extension defined in this document. | |||
6.5.1. Cost Metric: ane-path | 6.5.1. Cost Metric: "ane-path" | |||
The cost metric "ane-path" indicates the value of such a cost type | The cost metric "ane-path" indicates that the value of such a cost | |||
conveys an array of ANE names, where each ANE name uniquely | type conveys an array of ANE names, where each ANE name uniquely | |||
represents an ANE traversed by traffic from a source to a | represents an ANE traversed by traffic from a source to a | |||
destination. | destination. | |||
An ALTO client MUST interpret the Path Vector as if the traffic | An ALTO client MUST interpret the Path Vector as if the traffic | |||
between a source and a destination logically traverses the ANEs in | between a source and a destination logically traverses the ANEs in | |||
the same order as they appear in the Path Vector. | the same order as they appear in the Path Vector. | |||
When the Path Vector procedures defined in this document are in use, | When the Path Vector procedures defined in this document are in use, | |||
an ALTO server using the "ane-path" cost metric and the "array" cost | an ALTO server using the "ane-path" cost metric and the "array" cost | |||
mode (see Section 6.5.2) MUST return as the cost value a JSON array | mode (see Section 6.5.2) MUST return as the cost value a JSON array | |||
of ANEName and the client MUST also check that each element contained | of data type ANEName, and the client MUST also check that each | |||
in the array is an ANEName (Section 6.1). Otherwise, the client MUST | element contained in the array is an ANEName (Section 6.1). | |||
discard the response and SHOULD follow the instructions in | Otherwise, the client MUST discard the response and SHOULD follow the | |||
Section 8.3.4.3 of [RFC7285] to handle the error. | guidance in Section 8.3.4.3 of [RFC7285] to handle the error. | |||
6.5.2. Cost Mode: array | 6.5.2. Cost Mode: "array" | |||
The cost mode "array" indicates that every cost value in the response | The cost mode "array" indicates that every cost value in the response | |||
body of a (Filtered) Cost Map or an Endpoint Cost Service MUST be | body of a (filtered) cost map or an Endpoint Cost Service MUST be | |||
interpreted as a JSON array object. While this cost mode can be | interpreted as a JSON array object. While this cost mode can be | |||
applied to all cost metrics, additional specifications will be needed | applied to all cost metrics, additional specifications will be needed | |||
to clarify the semantics of the array cost mode when combined with | to clarify the semantics of the "array" cost mode when combined with | |||
cost metrics other than 'ane-path'. | cost metrics other than "ane-path". | |||
6.6. Part Resource ID and Part Content ID | 6.6. Part Resource ID and Part Content ID | |||
A Part Resource ID is encoded as a JSON string with the same format | A Part Resource ID is encoded as a JSON string with the same format | |||
as that of the type ResourceID (Section 10.2 of [RFC7285]). | as that of the type ResourceID (Section 10.2 of [RFC7285]). | |||
Even though the client-id assigned to a Path Vector request and the | Even though the "client-id" assigned to a Path Vector request and the | |||
Part Resource ID MAY contain up to 64 characters by their own | Part Resource ID MAY contain up to 64 characters by their own | |||
definition, their concatenation (see Section 5.3.2) MUST also conform | definition, their concatenation (see Section 5.3.2) MUST also conform | |||
to the same length constraint. The same requirement applies to the | to the same length constraint. The same requirement applies to the | |||
resource ID of the Path Vector resource, too. Thus, it is | resource ID of the Path Vector resource, too. Thus, it is | |||
RECOMMENDED to limit the length of resource ID and client ID related | RECOMMENDED to limit the length of the resource ID and client ID | |||
to a Path Vector resource to 31 characters. | related to a Path Vector resource to 31 characters. | |||
A Part Content ID conforms to the format of msg-id as specified in | A Part Content ID conforms to the format of "msg-id" as specified in | |||
[RFC2387] and [RFC5322]. Specifically, it has the following format: | [RFC2387] and [RFC5322]. Specifically, it has the following format: | |||
"<" PART-RESOURCE-ID "@" DOMAIN-NAME ">" | "<" PART-RESOURCE-ID "@" DOMAIN-NAME ">" | |||
PART-RESOURCE-ID: PART-RESOURCE-ID has the same format as the Part | PART-RESOURCE-ID: PART-RESOURCE-ID has the same format as the Part | |||
Resource ID. It is used to identify whether a part message is a | Resource ID. It is used to identify whether a part message is a | |||
Path Vector or a Property Map. | Path Vector or a property map. | |||
DOMAIN-NAME: DOMAIN-NAME has the same format as dot-atom-text | DOMAIN-NAME: DOMAIN-NAME has the same format as "dot-atom-text" as | |||
specified in Section 3.2.3 of [RFC5322]. It must be the domain | specified in Section 3.2.3 of [RFC5322]. It must be the domain | |||
name of the ALTO server. | name of the ALTO server. | |||
7. Specification: Service Extensions | 7. Specification: Service Extensions | |||
7.1. Notations | 7.1. Notation | |||
This document uses the same syntax and notations as introduced in | This document uses the same syntax and notation as those introduced | |||
Section 8.2 of RFC 7285 [RFC7285] to specify the extensions to | in Section 8.2 of [RFC7285] to specify the extensions to existing | |||
existing ALTO resources and services. | ALTO resources and services. | |||
7.2. Multipart Filtered Cost Map for Path Vector | 7.2. Multipart Filtered Cost Map for Path Vector | |||
This document introduces a new ALTO resource called multipart | This document introduces a new ALTO resource called the "multipart | |||
Filtered Cost Map resource, which allows an ALTO server to provide | filtered cost map resource", which allows an ALTO server to provide | |||
other ALTO resources associated with the Cost Map resource in the | other ALTO resources associated with the cost map resource in the | |||
same response. | same response. | |||
7.2.1. Media Type | 7.2.1. Media Type | |||
The media type of the multipart Filtered Cost Map resource is | The media type of the multipart filtered cost map resource is | |||
"multipart/related" and the required "type" parameter MUST have a | "multipart/related", and the required "type" parameter MUST have a | |||
value of "application/alto-costmap+json". | value of "application/alto-costmap+json". | |||
7.2.2. HTTP Method | 7.2.2. HTTP Method | |||
The multipart Filtered Cost Map is requested using the HTTP POST | The multipart filtered cost map is requested using the HTTP POST | |||
method. | method. | |||
7.2.3. Accept Input Parameters | 7.2.3. Accept Input Parameters | |||
The input parameters of the multipart Filtered Cost Map are supplied | The input parameters of the multipart filtered cost map are supplied | |||
in the body of an HTTP POST request. This document extends the input | in the body of an HTTP POST request. This document extends the input | |||
parameters to a Filtered Cost Map, which is defined as a JSON object | parameters to a filtered cost map, which is defined as a JSON object | |||
of type ReqFilteredCostMap in Section 4.1.2 of RFC 8189 [RFC8189], | of type ReqFilteredCostMap in Section 4.1.2 of [RFC8189], with a data | |||
with a data format indicated by the media type "application/alto- | format indicated by the media type "application/alto- | |||
costmapfilter+json", which is a JSON object of type | costmapfilter+json", which is a JSON object of type | |||
PVReqFilteredCostMap: | PVReqFilteredCostMap: | |||
object { | object { | |||
[EntityPropertyName ane-property-names<0..*>;] | [EntityPropertyName ane-property-names<0..*>;] | |||
} PVReqFilteredCostMap : ReqFilteredCostMap; | } PVReqFilteredCostMap : ReqFilteredCostMap; | |||
with fields: | with field: | |||
ane-property-names: A list of selected ANE properties to be included | ane-property-names: This field provides a list of selected ANE | |||
in the response. Each property in this list MUST match one of the | properties to be included in the response. Each property in this | |||
supported ANE properties indicated in the resource's "ane- | list MUST match one of the supported ANE properties indicated in | |||
property-names" capability (Section 7.2.4). If the field is not | the resource's "ane-property-names" capability (Section 7.2.4). | |||
present, it MUST be interpreted as an empty list. | If the field is not present, it MUST be interpreted as an empty | |||
list. | ||||
Example: Consider the network in Figure 1. If an ALTO client wants | Example: Consider the network in Figure 1. If an ALTO client wants | |||
to query the "max-reservable-bandwidth" between PID1 and PID2, it can | to query the "max-reservable-bandwidth" setting between PID1 and | |||
submit the following request. | PID2, it can submit the following request. | |||
POST /costmap/pv HTTP/1.1 | POST /costmap/pv HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: multipart/related;type=application/alto-costmap+json, | Accept: multipart/related;type=application/alto-costmap+json, | |||
application/alto-error+json | application/alto-error+json | |||
Content-Length: 201 | Content-Length: 212 | |||
Content-Type: application/alto-costmapfilter+json | Content-Type: application/alto-costmapfilter+json | |||
{ | { | |||
"cost-type": { | "cost-type": { | |||
"cost-mode": "array", | "cost-mode": "array", | |||
"cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
}, | }, | |||
"pids": { | "pids": { | |||
"srcs": [ "PID1" ], | "srcs": [ "PID1" ], | |||
"dsts": [ "PID2" ] | "dsts": [ "PID2" ] | |||
}, | }, | |||
"ane-property-names": [ "max-reservable-bandwidth" ] | "ane-property-names": [ "max-reservable-bandwidth" ] | |||
} | } | |||
7.2.4. Capabilities | 7.2.4. Capabilities | |||
The multipart Filtered Cost Map resource extends the capabilities | The multipart filtered cost map resource extends the capabilities | |||
defined in Section 4.1.1 of [RFC8189]. The capabilities are defined | defined in Section 4.1.1 of [RFC8189]. The capabilities are defined | |||
by a JSON object of type PVFilteredCostMapCapabilities: | by a JSON object of type PVFilteredCostMapCapabilities: | |||
object { | object { | |||
[EntityPropertyName ane-property-names<0..*>;] | [EntityPropertyName ane-property-names<0..*>;] | |||
} PVFilteredCostMapCapabilities : FilteredCostMapCapabilities; | } PVFilteredCostMapCapabilities : FilteredCostMapCapabilities; | |||
with fields: | with field: | |||
ane-property-names: Defines a list of ANE properties that can be | ane-property-names: This field provides a list of ANE properties | |||
returned. If the field is not present, it MUST be interpreted as | that can be returned. If the field is not present, it MUST be | |||
an empty list, indicating the ALTO server cannot provide any ANE | interpreted as an empty list, indicating that the ALTO server | |||
property. | cannot provide any ANE properties. | |||
This extension also introduces additional restrictions for the | This extension also introduces additional restrictions for the | |||
following fields: | following fields: | |||
cost-type-names: The "cost-type-names" field MUST include the Path | cost-type-names: The "cost-type-names" field MUST include the Path | |||
Vector cost type, unless explicitly documented by a future | Vector cost type, unless explicitly documented by a future | |||
extension. This also implies that the Path Vector cost type MUST | extension. This also implies that the Path Vector cost type MUST | |||
be defined in the "cost-types" of the Information Resource | be defined in the "cost-types" of the IRD's "meta" field. | |||
Directory's "meta" field. | ||||
cost-constraints: If the "cost-type-names" field includes the Path | cost-constraints: If the "cost-type-names" field includes the Path | |||
Vector cost type, "cost-constraints" field MUST be "false" or not | Vector cost type, the "cost-constraints" field MUST be either | |||
present unless specifically instructed by a future document. | "false" or not present, unless specifically instructed by a future | |||
document. | ||||
testable-cost-type-names (Section 4.1.1 of [RFC8189]): If the "cost- | testable-cost-type-names (Section 4.1.1 of [RFC8189]): If the "cost- | |||
type-names" field includes the Path Vector cost type and the | type-names" field includes the Path Vector cost type and the | |||
"testable-cost-type-names" field is present, the Path Vector cost | "testable-cost-type-names" field is present, the Path Vector cost | |||
type MUST NOT be included in the "testable-cost-type-names" field | type MUST NOT be included in the "testable-cost-type-names" field | |||
unless specifically instructed by a future document. | unless specifically instructed by a future document. | |||
7.2.5. Uses | 7.2.5. Uses | |||
This member MUST include the resource ID of the network map based on | This member MUST include the resource ID of the network map based on | |||
which the PIDs are defined. If this resource supports "persistent- | which the PIDs are defined. If this resource supports "persistent- | |||
entity-id", it MUST also include the defining resources of persistent | entity-id", it MUST also include the defining resources of persistent | |||
ANEs that may appear in the response. | ANEs that may appear in the response. | |||
7.2.6. Response | 7.2.6. Response | |||
The response MUST indicate an error, using ALTO protocol error | The response MUST indicate an error, using ALTO Protocol error | |||
handling, as defined in Section 8.5 of [RFC7285], if the request is | handling as defined in Section 8.5 of [RFC7285], if the request is | |||
invalid. | invalid. | |||
The "Content-Type" header of the response MUST be "multipart/related" | The "Content-Type" header field of the response MUST be "multipart/ | |||
as defined by [RFC2387] with the following parameters: | related" as defined by [RFC2387], with the following parameters: | |||
type: The type parameter is mandatory and MUST be "application/alto- | type: The "type" parameter is mandatory and MUST be "application/ | |||
costmap+json". Note that [RFC2387] permits both parameters with | alto-costmap+json". Note that [RFC2387] permits parameters both | |||
and without the double quotes. | with and without double quotes. | |||
start: The start parameter is as defined in [RFC2387] and is | start: The "start" parameter is as defined in [RFC2387] and is | |||
optional. If present, it MUST have the same value as the | optional. If present, it MUST have the same value as the | |||
"Content-ID" header of the Path Vector part. | "Content-ID" header field of the Path Vector part. | |||
boundary: The boundary parameter is as defined in Section 5.1.1 of | boundary: The "boundary" parameter is as defined in Section 5.1.1 of | |||
[RFC2046] and is mandatory. | [RFC2046] and is mandatory. | |||
The body of the response MUST consist of two parts: | The body of the response MUST consist of two parts: | |||
* The Path Vector part MUST include "Content-ID" and "Content-Type" | * The Path Vector part MUST include "Content-ID" and "Content-Type" | |||
in its header. The "Content-Type" MUST be "application/alto- | in its header. The "Content-Type" MUST be "application/alto- | |||
costmap+json". The value of "Content-ID" MUST have the same | costmap+json". The value of "Content-ID" MUST have the same | |||
format as the Part Content ID as specified in Section 6.6. | format as the Part Content ID as specified in Section 6.6. | |||
The body of the Path Vector part MUST be a JSON object with the | The body of the Path Vector part MUST be a JSON object with the | |||
same format as defined in Section 11.2.3.6 of [RFC7285] when the | same format as that defined in Section 11.2.3.6 of [RFC7285] when | |||
"cost-type" field is present in the input parameters and MUST be a | the "cost-type" field is present in the input parameters and MUST | |||
JSON object with the same format as defined in Section 4.1.3 of | be a JSON object with the same format as that defined in | |||
[RFC8189] if the "multi-cost-types" field is present. The JSON | Section 4.1.3 of [RFC8189] if the "multi-cost-types" field is | |||
object MUST include the "vtag" field in the "meta" field, which | present. The JSON object MUST include the "vtag" field in the | |||
provides the version tag of the returned CostMapData. The | "meta" field, which provides the version tag of the returned | |||
resource ID of the version tag MUST follow the format of | CostMapData object. The resource ID of the version tag MUST | |||
follow the format of | ||||
resource-id '.' part-resource-id | resource-id '.' part-resource-id | |||
where "resource-id" is the resource Id of the Path Vector | where "resource-id" is the resource ID of the Path Vector resource | |||
resource, and "part-resource-id" has the same value as the PART- | and "part-resource-id" has the same value as the PART-RESOURCE-ID | |||
RESOURCE-ID in the "Content-ID" of the Path Vector part. The | in the "Content-ID" of the Path Vector part. The "meta" field | |||
"meta" field MUST also include the "dependent-vtags" field, whose | MUST also include the "dependent-vtags" field, whose value is a | |||
value is a single-element array to indicate the version tag of the | single-element array to indicate the version tag of the network | |||
network map used, where the network map is specified in the "uses" | map used, where the network map is specified in the "uses" | |||
attribute of the multipart Filtered Cost Map resource in IRD. | attribute of the multipart filtered cost map resource in the IRD. | |||
* The Unified Property Map part MUST also include "Content-ID" and | * The entity property map part MUST also include "Content-ID" and | |||
"Content-Type" in its header. The "Content-Type" MUST be | "Content-Type" in its header. The "Content-Type" MUST be | |||
"application/alto-propmap+json". The value of "Content-ID" MUST | "application/alto-propmap+json". The value of "Content-ID" MUST | |||
have the same format as the Part Content ID as specified in | have the same format as the Part Content ID as specified in | |||
Section 6.6. | Section 6.6. | |||
The body of the Unified Property Map part is a JSON object with | The body of the entity property map part is a JSON object with the | |||
the same format as defined in Section 7.6 of | same format as that defined in Section 7.6 of [RFC9240]. The JSON | |||
[I-D.ietf-alto-unified-props-new]. The JSON object MUST include | object MUST include the "dependent-vtags" field in the "meta" | |||
the "dependent-vtags" field in the "meta" field. The value of the | field. The value of the "dependent-vtags" field MUST be an array | |||
"dependent-vtags" field MUST be an array of VersionTag objects as | of VersionTag objects as defined by Section 10.3 of [RFC7285]. | |||
defined by Section 10.3 of [RFC7285]. The "vtag" of the Path | The "vtag" of the Path Vector part MUST be included in the | |||
Vector part MUST be included in the "dependent-vtags". If | "dependent-vtags" field. If "persistent-entity-id" is requested, | |||
"persistent-entity-id" is requested, the version tags of the | the version tags of the dependent resources that may expose the | |||
dependent resources that may expose the entities in the response | entities in the response MUST also be included. | |||
MUST also be included. | ||||
The PropertyMapData has one member for each ANEName that appears | The PropertyMapData object has one member for each ANEName that | |||
in the Path Vector part, which is an entity identifier belonging | appears in the Path Vector part, which is an entity identifier | |||
to the self-defined entity domain as defined in Section 5.1.2.3 of | belonging to the self-defined entity domain as defined in | |||
[I-D.ietf-alto-unified-props-new]. The EntityProps for each ANE | Section 5.1.2.3 of [RFC9240]. The EntityProps object for each ANE | |||
has one member for each property that is both 1) associated with | has one member for each property that is both 1) associated with | |||
the ANE, and 2) specified in the "ane-property-names" in the | the ANE and 2) specified in the "ane-property-names" field in the | |||
request. If the Path Vector cost type is not included in the | request. If the Path Vector cost type is not included in the | |||
"cost-type" field or the "multi-cost-type" field, the "property- | "cost-type" field or the "multi-cost-type" field, the "property- | |||
map" field MUST be present and the value MUST be an empty object | map" field MUST be present and the value MUST be an empty object | |||
({}). | ({}). | |||
A complete and valid response MUST include both the Path Vector part | A complete and valid response MUST include both the Path Vector part | |||
and the Property Map part in the multipart message. If any part is | and the property map part in the multipart message. If any part is | |||
NOT present, the client MUST discard the received information and | *not* present, the client MUST discard the received information and | |||
send another request if necessary. | send another request if necessary. | |||
According to [RFC2387], the Path Vector part, whose media type is the | The Path Vector part, whose media type is the same as the "type" | |||
same as the "type" parameter of the multipart response message, is | parameter of the multipart response message, is the root body part as | |||
the root object. Thus, it is the element the application processes | defined in [RFC2387]. Thus, it is the element that the application | |||
first. Even though the "start" parameter allows it to be placed | processes first. Even though the "start" parameter allows it to be | |||
anywhere in the part sequence, it is RECOMMENDED that the parts | placed anywhere in the part sequence, it is RECOMMENDED that the | |||
arrive in the same order as they are processed, i.e., the Path Vector | parts arrive in the same order as they are processed, i.e., the Path | |||
part is always put as the first part, followed by the Property Map | Vector part is always placed as the first part, followed by the | |||
part. When doing so, an ALTO server MAY choose not to set the | property map part. When doing so, an ALTO server MAY choose not to | |||
"start" parameter, which implies the first part is the root object. | set the "start" parameter, which implies that the first part is the | |||
object root. | ||||
Example: Consider the network in Figure 1. The response of the | Example: Consider the network in Figure 1. The response to the | |||
example request in Section 7.2.3 is as follows, where "ANE1" | example request in Section 7.2.3 is as follows, where "ANE1" | |||
represents the aggregation of all the switches in the network. | represents the aggregation of all the switches in the network. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 859 | Content-Length: 911 | |||
Content-Type: multipart/related; boundary=example-1; | Content-Type: multipart/related; boundary=example-1; | |||
type=application/alto-costmap+json | type=application/alto-costmap+json | |||
--example-1 | --example-1 | |||
Content-ID: <costmap@alto.example.com> | Content-ID: <costmap@alto.example.com> | |||
Content-Type: application/alto-costmap+json | Content-Type: application/alto-costmap+json | |||
{ | { | |||
"meta": { | "meta": { | |||
"vtag": { | "vtag": { | |||
skipping to change at page 33, line 29 ¶ | skipping to change at line 1401 ¶ | |||
}, | }, | |||
"dependent-vtags": [ | "dependent-vtags": [ | |||
{ | { | |||
"resource-id": "my-default-networkmap", | "resource-id": "my-default-networkmap", | |||
"tag": "75ed013b3cb58f896e839582504f6228" | "tag": "75ed013b3cb58f896e839582504f6228" | |||
} | } | |||
], | ], | |||
"cost-type": { "cost-mode": "array", "cost-metric": "ane-path" } | "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" } | |||
}, | }, | |||
"cost-map": { | "cost-map": { | |||
"PID1": { "PID2": ["ANE1"] } | "PID1": { "PID2": [ "ANE1" ] } | |||
} | } | |||
} | } | |||
--example-1 | --example-1 | |||
Content-ID: <propmap@alto.example.com> | Content-ID: <propmap@alto.example.com> | |||
Content-Type: application/alto-propmap+json | Content-Type: application/alto-propmap+json | |||
{ | { | |||
"meta": { | "meta": { | |||
"dependent-vtags": [ | "dependent-vtags": [ | |||
{ | { | |||
"resource-id": "filtered-cost-map-pv.costmap", | "resource-id": "filtered-cost-map-pv.costmap", | |||
"tag": "fb20b76204814e9db37a51151faaaef2" | "tag": "fb20b76204814e9db37a51151faaaef2" | |||
} | } | |||
] | ] | |||
}, | }, | |||
"property-map": { | "property-map": { | |||
".ane:ANE1": { "max-reservable-bandwidth": 100000000 } | ".ane:ANE1": { "max-reservable-bandwidth": 100000000 } | |||
} | } | |||
} | } | |||
--example-1 | ||||
7.3. Multipart Endpoint Cost Service for Path Vector | 7.3. Multipart Endpoint Cost Service for Path Vector | |||
This document introduces a new ALTO resource called multipart | This document introduces a new ALTO resource called the "multipart | |||
Endpoint Cost Service, which allows an ALTO server to provide other | Endpoint Cost Service", which allows an ALTO server to provide other | |||
ALTO resources associated with the Endpoint Cost Service resource in | ALTO resources associated with the Endpoint Cost Service resource in | |||
the same response. | the same response. | |||
7.3.1. Media Type | 7.3.1. Media Type | |||
The media type of the multipart Endpoint Cost Service resource is | The media type of the multipart Endpoint Cost Service resource is | |||
"multipart/related" and the required "type" parameter MUST have a | "multipart/related", and the required "type" parameter MUST have a | |||
value of "application/alto-endpointcost+json". | value of "application/alto-endpointcost+json". | |||
7.3.2. HTTP Method | 7.3.2. HTTP Method | |||
The multipart Endpoint Cost Service resource is requested using the | The multipart Endpoint Cost Service resource is requested using the | |||
HTTP POST method. | HTTP POST method. | |||
7.3.3. Accept Input Parameters | 7.3.3. Accept Input Parameters | |||
The input parameters of the multipart Endpoint Cost Service resource | The input parameters of the multipart Endpoint Cost Service resource | |||
are supplied in the body of an HTTP POST request. This document | are supplied in the body of an HTTP POST request. This document | |||
extends the input parameters to an Endpoint Cost Service, which is | extends the input parameters to an Endpoint Cost Service, which is | |||
defined as a JSON object of type ReqEndpointCost in Section 4.2.2 of | defined as a JSON object of type ReqEndpointCostMap in Section 4.2.2 | |||
[RFC8189], with a data format indicated by the media type | of [RFC8189], with a data format indicated by the media type | |||
"application/alto-endpointcostparams+json", which is a JSON object of | "application/alto-endpointcostparams+json", which is a JSON object of | |||
type PVReqEndpointCost: | type PVReqEndpointCostMap: | |||
object { | object { | |||
[EntityPropertyName ane-property-names<0..*>;] | [EntityPropertyName ane-property-names<0..*>;] | |||
} PVReqEndpointcost : ReqEndpointcostMap; | } PVReqEndpointCostMap : ReqEndpointCostMap; | |||
with fields: | with field: | |||
ane-property-names: This document defines the "ane-property-names" | ane-property-names: This document defines the "ane-property-names" | |||
in PVReqEndpointcost as the same as in PVReqFilteredCostMap. See | field in PVReqEndpointCostMap as being the same as in | |||
Section 7.2.3. | PVReqFilteredCostMap. See Section 7.2.3. | |||
Example: Consider the network in Figure 1. If an ALTO client wants | Example: Consider the network in Figure 1. If an ALTO client wants | |||
to query the "max-reservable-bandwidth" between eh1 and eh2, it can | to query the "max-reservable-bandwidth" setting between "eh1" and | |||
submit the following request. | "eh2", it can submit the following request. | |||
POST /ecs/pv HTTP/1.1 | POST /ecs/pv HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: multipart/related;type=application/alto-endpointcost+json, | Accept: multipart/related;type=application/alto-endpointcost+json, | |||
application/alto-error+json | application/alto-error+json | |||
Content-Length: 227 | Content-Length: 238 | |||
Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
{ | { | |||
"cost-type": { | "cost-type": { | |||
"cost-mode": "array", | "cost-mode": "array", | |||
"cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
}, | }, | |||
"endpoints": { | "endpoints": { | |||
"srcs": [ "ipv4:192.0.2.2" ], | "srcs": [ "ipv4:192.0.2.2" ], | |||
"dsts": [ "ipv4:192.0.2.18" ] | "dsts": [ "ipv4:192.0.2.18" ] | |||
}, | }, | |||
"ane-property-names": [ "max-reservable-bandwidth" ] | "ane-property-names": [ "max-reservable-bandwidth" ] | |||
} | } | |||
7.3.4. Capabilities | 7.3.4. Capabilities | |||
The capabilities of the multipart Endpoint Cost Service resource are | The capabilities of the multipart Endpoint Cost Service resource are | |||
defined by a JSON object of type PVEndpointcostCapabilities, which is | defined by a JSON object of type PVEndpointCostCapabilities, which is | |||
defined as the same as PVFilteredCostMapCapabilities. See | defined as being the same as PVFilteredCostMapCapabilities. See | |||
Section 7.2.4. | Section 7.2.4. | |||
7.3.5. Uses | 7.3.5. Uses | |||
If this resource supports "persistent-entity-id", it MUST also | If this resource supports "persistent-entity-id", it MUST also | |||
include the defining resources of persistent ANEs that may appear in | include the defining resources of persistent ANEs that may appear in | |||
the response. | the response. | |||
7.3.6. Response | 7.3.6. Response | |||
The response MUST indicate an error, using ALTO protocol error | The response MUST indicate an error, using ALTO Protocol error | |||
handling, as defined in Section 8.5 of [RFC7285], if the request is | handling as defined in Section 8.5 of [RFC7285], if the request is | |||
invalid. | invalid. | |||
The "Content-Type" header of the response MUST be "multipart/related" | The "Content-Type" header field of the response MUST be "multipart/ | |||
as defined by [RFC7285] with the following parameters: | related" as defined by [RFC2387], with the following parameters: | |||
type: The type parameter MUST be "application/alto- | type: The "type" parameter MUST be "application/alto- | |||
endpointcost+json" and is mandatory. | endpointcost+json" and is mandatory. | |||
start: The start parameter is as defined in Section 7.2.6. | start: The "start" parameter is as defined in Section 7.2.6. | |||
boundary: The boundary parameter is as defined in Section 5.1.1 of | boundary: The "boundary" parameter is as defined in Section 5.1.1 of | |||
[RFC2046] and is mandatory. | [RFC2046] and is mandatory. | |||
The body MUST consist of two parts: | The body of the response MUST consist of two parts: | |||
* The Path Vector part MUST include "Content-ID" and "Content-Type" | * The Path Vector part MUST include "Content-ID" and "Content-Type" | |||
in its header. The "Content-Type" MUST be "application/alto- | in its header. The "Content-Type" MUST be "application/alto- | |||
endpointcost+json". The value of "Content-ID" MUST have the same | endpointcost+json". The value of "Content-ID" MUST have the same | |||
format as the Part Content ID as specified in Section 6.6. | format as the Part Content ID as specified in Section 6.6. | |||
The body of the Path Vector part MUST be a JSON object with the | The body of the Path Vector part MUST be a JSON object with the | |||
same format as defined in Section 11.5.1.6 of [RFC7285] when the | same format as that defined in Section 11.5.1.6 of [RFC7285] when | |||
"cost-type" field is present in the input parameters and MUST be a | the "cost-type" field is present in the input parameters and MUST | |||
JSON object with the same format as defined in Section 4.2.3 of | be a JSON object with the same format as that defined in | |||
[RFC8189] if the "multi-cost-types" field is present. The JSON | Section 4.2.3 of [RFC8189] if the "multi-cost-types" field is | |||
object MUST include the "vtag" field in the "meta" field, which | present. The JSON object MUST include the "vtag" field in the | |||
provides the version tag of the returned EndpointCostMapData. The | "meta" field, which provides the version tag of the returned | |||
resource ID of the version tag MUST follow the format of | EndpointCostMapData object. The resource ID of the version tag | |||
MUST follow the format of | ||||
resource-id '.' part-resource-id | resource-id '.' part-resource-id | |||
where "resource-id" is the resource Id of the Path Vector | where "resource-id" is the resource ID of the Path Vector resource | |||
resource, and "part-resource-id" has the same value as the PART- | and "part-resource-id" has the same value as the PART-RESOURCE-ID | |||
RESOURCE-ID in the "Content-ID" of the Path Vector part. | in the "Content-ID" of the Path Vector part. | |||
* The Unified Property Map part MUST also include "Content-ID" and | * The entity property map part MUST also include "Content-ID" and | |||
"Content-Type" in its header. The "Content-Type" MUST be | "Content-Type" in its header. The "Content-Type" MUST be | |||
"application/alto-propmap+json". The value of "Content-ID" MUST | "application/alto-propmap+json". The value of "Content-ID" MUST | |||
have the same format as the Part Content ID as specified in | have the same format as the Part Content ID as specified in | |||
Section 6.6. | Section 6.6. | |||
The body of the Unified Property Map part MUST be a JSON object | The body of the entity property map part MUST be a JSON object | |||
with the same format as defined in Section 7.6 of | with the same format as that defined in Section 7.6 of [RFC9240]. | |||
[I-D.ietf-alto-unified-props-new]. The JSON object MUST include | The JSON object MUST include the "dependent-vtags" field in the | |||
the "dependent-vtags" field in the "meta" field. The value of the | "meta" field. The value of the "dependent-vtags" field MUST be an | |||
"dependent-vtags" field MUST be an array of VersionTag objects as | array of VersionTag objects as defined by Section 10.3 of | |||
defined by Section 10.3 of [RFC7285]. The "vtag" of the Path | [RFC7285]. The "vtag" of the Path Vector part MUST be included in | |||
Vector part MUST be included in the "dependent-vtags". If | the "dependent-vtags" field. If "persistent-entity-id" is | |||
"persistent-entity-id" is requested, the version tags of the | requested, the version tags of the dependent resources that may | |||
dependent resources that may expose the entities in the response | expose the entities in the response MUST also be included. | |||
MUST also be included. | ||||
The PropertyMapData has one member for each ANEName that appears | The PropertyMapData object has one member for each ANEName that | |||
in the Path Vector part, which is an entity identifier belonging | appears in the Path Vector part, which is an entity identifier | |||
to the self-defined entity domain as defined in Section 5.1.2.3 of | belonging to the self-defined entity domain as defined in | |||
[I-D.ietf-alto-unified-props-new]. The EntityProps for each ANE | Section 5.1.2.3 of [RFC9240]. The EntityProps object for each ANE | |||
has one member for each property that is both 1) associated with | has one member for each property that is both 1) associated with | |||
the ANE, and 2) specified in the "ane-property-names" in the | the ANE and 2) specified in the "ane-property-names" field in the | |||
request. If the Path Vector cost type is not included in the | request. If the Path Vector cost type is not included in the | |||
"cost-type" field or the "multi-cost-type" field, the "property- | "cost-type" field or the "multi-cost-type" field, the "property- | |||
map" field MUST be present and the value MUST be an empty object | map" field MUST be present and the value MUST be an empty object | |||
({}). | ({}). | |||
A complete and valid response MUST include both the Path Vector part | A complete and valid response MUST include both the Path Vector part | |||
and the Property Map part in the multipart message. If any part is | and the property map part in the multipart message. If any part is | |||
NOT present, the client MUST discard the received information and | *not* present, the client MUST discard the received information and | |||
send another request if necessary. | send another request if necessary. | |||
According to [RFC2387], the Path Vector part, whose media type is the | The Path Vector part, whose media type is the same as the "type" | |||
same as the "type" parameter of the multipart response message, is | parameter of the multipart response message, is the root body part as | |||
the root object. Thus, it is the element the application processes | defined in [RFC2387]. Thus, it is the element that the application | |||
first. Even though the "start" parameter allows it to be placed | processes first. Even though the "start" parameter allows it to be | |||
anywhere in the part sequence, it is RECOMMENDED that the parts | placed anywhere in the part sequence, it is RECOMMENDED that the | |||
arrive in the same order as they are processed, i.e., the Path Vector | parts arrive in the same order as they are processed, i.e., the Path | |||
part is always put as the first part, followed by the Property Map | Vector part is always placed as the first part, followed by the | |||
part. When doing so, an ALTO server MAY choose not to set the | property map part. When doing so, an ALTO server MAY choose not to | |||
"start" parameter, which implies the first part is the root object. | set the "start" parameter, which implies that the first part is the | |||
object root. | ||||
Example: Consider the network in Figure 1. The response of the | Example: Consider the network in Figure 1. The response to the | |||
example request in Section 7.3.3 is as follows. | example request in Section 7.3.3 is as follows. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 845 | Content-Length: 899 | |||
Content-Type: multipart/related; boundary=example-1; | Content-Type: multipart/related; boundary=example-1; | |||
type=application/alto-endpointcost+json | type=application/alto-endpointcost+json | |||
--example-1 | --example-1 | |||
Content-ID: <ecs@alto.example.com> | Content-ID: <ecs@alto.example.com> | |||
Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
{ | { | |||
"meta": { | "meta": { | |||
"vtag": { | "vtag": { | |||
skipping to change at page 38, line 29 ¶ | skipping to change at line 1607 ¶ | |||
}, | }, | |||
"dependent-vtags": [ | "dependent-vtags": [ | |||
{ | { | |||
"resource-id": "my-default-networkmap", | "resource-id": "my-default-networkmap", | |||
"tag": "677fe5f4066848d282ece213a84f9429" | "tag": "677fe5f4066848d282ece213a84f9429" | |||
} | } | |||
], | ], | |||
"cost-type": { "cost-mode": "array", "cost-metric": "ane-path" } | "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" } | |||
}, | }, | |||
"cost-map": { | "cost-map": { | |||
"ipv4:192.0.2.2": { "ipv4:192.0.2.18": ["ANE1"] } | "ipv4:192.0.2.2": { "ipv4:192.0.2.18": [ "ANE1" ] } | |||
} | } | |||
} | } | |||
--example-1 | --example-1 | |||
Content-ID: <propmap@alto.example.com> | Content-ID: <propmap@alto.example.com> | |||
Content-Type: application/alto-propmap+json | Content-Type: application/alto-propmap+json | |||
{ | { | |||
"meta": { | "meta": { | |||
"dependent-vtags": [ | "dependent-vtags": [ | |||
{ | { | |||
"resource-id": "ecs-pv.ecs", | "resource-id": "ecs-pv.ecs", | |||
"tag": "ec137bb78118468c853d5b622ac003f1" | "tag": "ec137bb78118468c853d5b622ac003f1" | |||
} | } | |||
] | ] | |||
}, | }, | |||
"property-map": { | "property-map": { | |||
".ane:ANE1": { "max-reservable-bandwidth": 100000000 } | ".ane:ANE1": { "max-reservable-bandwidth": 100000000 } | |||
} | } | |||
} | } | |||
--example-1 | ||||
8. Examples | 8. Examples | |||
This section lists some examples of Path Vector queries and the | This section lists some examples of Path Vector queries and the | |||
corresponding responses. Some long lines are truncated for better | corresponding responses. Some long lines are truncated for better | |||
readability. | readability. | |||
8.1. Sample Setup | 8.1. Sample Setup | |||
Figure 10 illustrates the network properties and thus the message | ||||
contents. There are three subnetworks (NET1, NET2, and NET3) and two | ||||
interconnection links (L1 and L2). It is assumed that each | ||||
subnetwork has sufficiently large bandwidth to be reserved. | ||||
----- L1 | ----- L1 | |||
/ | / | |||
PID1 +----------+ 10 Gbps +----------+ PID3 | PID1 +----------+ 10 Gbps +----------+ PID3 | |||
192.0.2.0/28+-+ +------+ +---------+ +--+192.0.2.32/28 | 192.0.2.0/28+-+ +------+ +---------+ +--+192.0.2.32/28 | |||
| | MEC1 | | | | 2001:db8::3:0/16 | | | MEC1 | | | | 2001:db8::3:0/16 | |||
| +------+ | +-----+ | | | +------+ | +-----+ | | |||
PID2 | | | +----------+ | PID2 | | | +----------+ | |||
192.0.2.16/28+-+ | | NET3 | 192.0.2.16/28+-+ | | NET3 | |||
| | | 15 Gbps | | | | 15 Gbps | |||
| | | \ | | | | \ | |||
skipping to change at page 39, line 34 ¶ | skipping to change at line 1663 ¶ | |||
NET1 | | NET1 | | |||
+----------+ | +----------+ | |||
| +------+ | PID4 | | +------+ | PID4 | |||
| | MEC2 | +--+192.0.2.48/28 | | | MEC2 | +--+192.0.2.48/28 | |||
| +------+ | 2001:db8::4:0/16 | | +------+ | 2001:db8::4:0/16 | |||
+----------+ | +----------+ | |||
NET2 | NET2 | |||
Figure 10: Examples of ANE Properties | Figure 10: Examples of ANE Properties | |||
In this document, Figure 10 is used to illustrate the message | ||||
contents. There are 3 sub-networks (NET1, NET2 and NET3) and two | ||||
interconnection links (L1 and L2). It is assumed that each sub- | ||||
network has sufficiently large bandwidth to be reserved. | ||||
8.2. Information Resource Directory | 8.2. Information Resource Directory | |||
To give a comprehensive example of the extension defined in this | To give a comprehensive example of the extension defined in this | |||
document, we consider the network in Figure 10. Assume that the ALTO | document, we consider the network in Figure 10. Assume that the ALTO | |||
server provides the following information resources: | server provides the following information resources: | |||
* "my-default-networkmap": A Network Map resource which contains the | "my-default-networkmap": A network map resource that contains the | |||
PIDs in the network. | PIDs in the network. | |||
* "filtered-cost-map-pv": A Multipart Filtered Cost Map resource for | "filtered-cost-map-pv": A multipart filtered cost map resource for | |||
Path Vector, which exposes the "max-reservable-bandwidth" property | the Path Vector. Exposes the "max-reservable-bandwidth" property | |||
for the PIDs in "my-default-networkmap". | for the PIDs in "my-default-networkmap". | |||
* "ane-props": A filtered Unified Property resource that exposes the | "ane-props": A filtered entity property resource that exposes the | |||
information for persistent ANEs in the network. | information for persistent ANEs in the network. | |||
* "endpoint-cost-pv": A Multipart Endpoint Cost Service for Path | "endpoint-cost-pv": A multipart Endpoint Cost Service for the Path | |||
Vector, which exposes the "max-reservable-bandwidth" and the | Vector. Exposes the "max-reservable-bandwidth" and "persistent- | |||
"persistent-entity-id" properties. | entity-id" properties. | |||
* "update-pv": An Update Stream service, which provides the | "update-pv": An update stream service that provides the incremental | |||
incremental update service for the "endpoint-cost-pv" service. | update service for the "endpoint-cost-pv" service. | |||
* "multicost-pv": A Multipart Endpoint Cost Service with both Multi- | "multicost-pv": A multipart Endpoint Cost Service with both the | |||
Cost and Path Vector. | Multi-Cost extension and Path Vector extension enabled. | |||
Below is the Information Resource Directory of the example ALTO | Below is the IRD of the example ALTO server. To enable the extension | |||
server. To enable the extension defined in this document, the "path- | defined in this document, the Path Vector cost type (Section 6.5), | |||
vector" cost type (Section 6.5) is defined in the "cost-types" of the | represented by "path-vector" below, is defined in the "cost-types" of | |||
"meta" field, and is included in the "cost-type-names" of resources | the "meta" field and is included in the "cost-type-names" of | |||
"filtered-cost-map-pv" and "endpoint-cost-pv". | resources "filtered-cost-map-pv" and "endpoint-cost-pv". | |||
{ | { | |||
"meta": { | "meta": { | |||
"cost-types": { | "cost-types": { | |||
"path-vector": { | "path-vector": { | |||
"cost-mode": "array", | "cost-mode": "array", | |||
"cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
}, | }, | |||
"num-rc": { | "num-rc": { | |||
"cost-mode": "numerical", | "cost-mode": "numerical", | |||
skipping to change at page 42, line 4 ¶ | skipping to change at line 1772 ¶ | |||
"cost-type-names": [ "path-vector", "num-rc" ], | "cost-type-names": [ "path-vector", "num-rc" ], | |||
"max-cost-types": 2, | "max-cost-types": 2, | |||
"testable-cost-type-names": [ "num-rc" ], | "testable-cost-type-names": [ "num-rc" ], | |||
"ane-property-names": [ | "ane-property-names": [ | |||
"max-reservable-bandwidth", "persistent-entity-id" | "max-reservable-bandwidth", "persistent-entity-id" | |||
] | ] | |||
}, | }, | |||
"uses": [ "ane-props" ] | "uses": [ "ane-props" ] | |||
} | } | |||
} | } | |||
} | } | |||
8.3. Multipart Filtered Cost Map | 8.3. Multipart Filtered Cost Map | |||
The following examples demonstrate the request to the "filtered-cost- | The following examples demonstrate the request to the "filtered-cost- | |||
map-pv" resource and the corresponding response. | map-pv" resource and the corresponding response. | |||
The request uses the "path-vector" cost type in the "cost-type" | The request uses the "path-vector" cost type in the "cost-type" | |||
field. The "ane-property-names" field is missing, indicating that | field. The "ane-property-names" field is missing, indicating that | |||
the client only requests for the Path Vector but not the ANE | the client only requests the Path Vector and not the ANE properties. | |||
properties. | ||||
The response consists of two parts. The first part returns the array | The response consists of two parts: | |||
of ANEName for each source and destination pair. There are two ANEs, | ||||
where "L1" represents the interconnection link L1, and "L2" | ||||
represents the interconnection link L2. | ||||
The second part returns an empty Property Map. Note that the ANE | * The first part returns the array of data type ANEName for each | |||
entries are omitted since they have no properties (See Section 3.1 of | source and destination pair. There are two ANEs, where "L1" | |||
[I-D.ietf-alto-unified-props-new]). | represents interconnection link L1 and "L2" represents | |||
interconnection link L2. | ||||
* The second part returns the property map. Note that the | ||||
properties of the ANE entries are equal to the literal string "{}" | ||||
(see Section 8.3 of [RFC9240]). | ||||
POST /costmap/pv HTTP/1.1 | POST /costmap/pv HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: multipart/related;type=application/alto-costmap+json, | Accept: multipart/related;type=application/alto-costmap+json, | |||
application/alto-error+json | application/alto-error+json | |||
Content-Length: 153 | Content-Length: 163 | |||
Content-Type: application/alto-costmapfilter+json | Content-Type: application/alto-costmapfilter+json | |||
{ | { | |||
"cost-type": { | "cost-type": { | |||
"cost-mode": "array", | "cost-mode": "array", | |||
"cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
}, | }, | |||
"pids": { | "pids": { | |||
"srcs": [ "PID1" ], | "srcs": [ "PID1" ], | |||
"dsts": [ "PID3", "PID4" ] | "dsts": [ "PID3", "PID4" ] | |||
} | } | |||
} | } | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 855 | Content-Length: 952 | |||
Content-Type: multipart/related; boundary=example-1; | Content-Type: multipart/related; boundary=example-1; | |||
type=application/alto-costmap+json | type=application/alto-costmap+json | |||
--example-1 | --example-1 | |||
Content-ID: <costmap@alto.example.com> | Content-ID: <costmap@alto.example.com> | |||
Content-Type: application/alto-costmap+json | Content-Type: application/alto-costmap+json | |||
{ | { | |||
"meta": { | "meta": { | |||
"vtag": { | "vtag": { | |||
"resource-id": "filtered-cost-map-pv.costmap", | "resource-id": "filtered-cost-map-pv.costmap", | |||
"tag": "d827f484cb66ce6df6b5077cb8562b0a" | "tag": "d827f484cb66ce6df6b5077cb8562b0a" | |||
}, | }, | |||
"dependent-vtags": [ | "dependent-vtags": [ | |||
{ | { | |||
"resource-id": "my-default-networkmap", | "resource-id": "my-default-networkmap", | |||
"tag": "c04bc5da49534274a6daeee8ea1dec62" | "tag": "c04bc5da49534274a6daeee8ea1dec62" | |||
skipping to change at page 43, line 42 ¶ | skipping to change at line 1859 ¶ | |||
{ | { | |||
"meta": { | "meta": { | |||
"dependent-vtags": [ | "dependent-vtags": [ | |||
{ | { | |||
"resource-id": "filtered-cost-map-pv.costmap", | "resource-id": "filtered-cost-map-pv.costmap", | |||
"tag": "d827f484cb66ce6df6b5077cb8562b0a" | "tag": "d827f484cb66ce6df6b5077cb8562b0a" | |||
} | } | |||
] | ] | |||
}, | }, | |||
"property-map": { | "property-map": { | |||
".ane:L1": {}, | ||||
".ane:L2": {} | ||||
} | } | |||
} | } | |||
--example-1 | ||||
8.4. Multipart Endpoint Cost Service Resource | 8.4. Multipart Endpoint Cost Service Resource | |||
The following examples demonstrate the request to the "endpoint-cost- | The following examples demonstrate the request to the "endpoint-cost- | |||
pv" resource and the corresponding response. | pv" resource and the corresponding response. | |||
The request uses the Path Vector cost type in the "cost-type" field, | The request uses the "path-vector" cost type in the "cost-type" field | |||
and queries the Maximum Reservable Bandwidth ANE property and the | and queries the maximum reservable bandwidth ANE property and the | |||
Persistent Entity property for two IPv4 source and destination pairs | persistent entity ID property for two IPv4 source and destination | |||
(192.0.2.34 -> 192.0.2.2 and 192.0.2.34 -> 192.0.2.50) and one IPv6 | pairs (192.0.2.34 -> 192.0.2.2 and 192.0.2.34 -> 192.0.2.50) and one | |||
source and destination pair (2001:db8::3:1 -> 2001:db8::4:1). | IPv6 source and destination pair (2001:db8::3:1 -> 2001:db8::4:1). | |||
The response consists of two parts. The first part returns the array | The response consists of two parts: | |||
of ANEName for each valid source and destination pair. As one can | ||||
see in Figure 10, flow 192.0.2.34 -> 192.0.2.2 traverses NET2, L1 and | ||||
NET1, and flows 192.0.2.34 -> 192.0.2.50 and 2001:db8::3:1 -> | ||||
2001:db8::4:1 traverse NET2, L2 and NET3. | ||||
The second part returns the requested properties of ANEs. Assume | * The first part returns the array of data type ANEName for each | |||
NET1, NET2 and NET3 has sufficient bandwidth and their "max- | valid source and destination pair. As one can see in Figure 10, | |||
reservable-bandwidth" values are set to a sufficiently large number | flow 192.0.2.34 -> 192.0.2.2 traverses NET3, L1, and NET1; and | |||
(50 Gbps in this case). On the other hand, assume there are no prior | flows 192.0.2.34 -> 192.0.2.50 and 2001:db8::3:1 -> 2001:db8::4:1 | |||
reservation on L1 and L2, and their "max-reservable-bandwidth" values | traverse NET2, L2, and NET3. | |||
are the corresponding link capacity (10 Gbps for L1 and 15 Gbps for | ||||
L2). | * The second part returns the requested properties of ANEs. Assume | |||
that NET1, NET2, and NET3 have sufficient bandwidth and their | ||||
"max-reservable-bandwidth" values are set to a sufficiently large | ||||
number (50 Gbps in this case). On the other hand, assume that | ||||
there are no prior reservations on L1 and L2 and their "max- | ||||
reservable-bandwidth" values are the corresponding link capacity | ||||
(10 Gbps for L1 and 15 Gbps for L2). | ||||
Both NET1 and NET2 have a mobile edge deployed, i.e., MEC1 in NET1 | Both NET1 and NET2 have a mobile edge deployed, i.e., MEC1 in NET1 | |||
and MEC2 in NET2. Assume the ANEName for MEC1 and MEC2 are "MEC1" | and MEC2 in NET2. Assume that the ANEName values for MEC1 and MEC2 | |||
and "MEC2" and their properties can be retrieved from the Property | are "MEC1" and "MEC2" and their properties can be retrieved from the | |||
Map "ane-props". Thus, the "persistent-entity-id" property of NET1 | property map "ane-props". Thus, the "persistent-entity-id" property | |||
and NET3 are "ane-props.ane:MEC1" and "ane-props.ane:MEC2" | values for NET1 and NET2 are "ane-props.ane:MEC1" and "ane- | |||
respectively. | props.ane:MEC2", respectively. | |||
POST /endpointcost/pv HTTP/1.1 | POST /endpointcost/pv HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: multipart/related; | Accept: multipart/related; | |||
type=application/alto-endpointcost+json, | type=application/alto-endpointcost+json, | |||
application/alto-error+json | application/alto-error+json | |||
Content-Length: 362 | Content-Length: 383 | |||
Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
{ | { | |||
"cost-type": { | "cost-type": { | |||
"cost-mode": "array", | "cost-mode": "array", | |||
"cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
}, | }, | |||
"endpoints": { | "endpoints": { | |||
"srcs": [ | "srcs": [ | |||
"ipv4:192.0.2.34", | "ipv4:192.0.2.34", | |||
skipping to change at page 45, line 36 ¶ | skipping to change at line 1930 ¶ | |||
"ipv6:2001:db8::4:1" | "ipv6:2001:db8::4:1" | |||
] | ] | |||
}, | }, | |||
"ane-property-names": [ | "ane-property-names": [ | |||
"max-reservable-bandwidth", | "max-reservable-bandwidth", | |||
"persistent-entity-id" | "persistent-entity-id" | |||
] | ] | |||
} | } | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 1432 | Content-Length: 1508 | |||
Content-Type: multipart/related; boundary=example-2; | Content-Type: multipart/related; boundary=example-2; | |||
type=application/alto-endpointcost+json | type=application/alto-endpointcost+json | |||
--example-2 | --example-2 | |||
Content-ID: <ecs@alto.example.com> | Content-ID: <ecs@alto.example.com> | |||
Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
{ | { | |||
"meta": { | "meta": { | |||
"vtags": { | "vtags": { | |||
skipping to change at page 47, line 4 ¶ | skipping to change at line 1995 ¶ | |||
".ane:NET3": { | ".ane:NET3": { | |||
"max-reservable-bandwidth": 50000000000 | "max-reservable-bandwidth": 50000000000 | |||
}, | }, | |||
".ane:L1": { | ".ane:L1": { | |||
"max-reservable-bandwidth": 10000000000 | "max-reservable-bandwidth": 10000000000 | |||
}, | }, | |||
".ane:L2": { | ".ane:L2": { | |||
"max-reservable-bandwidth": 15000000000 | "max-reservable-bandwidth": 15000000000 | |||
} | } | |||
} | } | |||
} | } | |||
--example-2 | ||||
Under certain scenarios where the traversal order is not crucial, an | In certain scenarios where the traversal order is not crucial, an | |||
ALTO server implementation may choose to not follow strictly the | ALTO server implementation may choose not to strictly follow the | |||
physical traversal order and may even obfuscate the order | physical traversal order and may even obfuscate the order | |||
intentionally to preserve its own privacy or conform to its own | intentionally to preserve its own privacy or conform to its own | |||
policies. For example, an ALTO server may choose to aggregate NET1 | policies. For example, an ALTO server may choose to aggregate NET1 | |||
and L1 as a new ANE with ANE name "AGGR1", and aggregate NET2 and L2 | and L1 as a new ANE with ANE name "AGGR1" and aggregate NET2 and L2 | |||
as a new ANE with ANE name "AGGR2". The "max-reservable-bandwidth" | as a new ANE with ANE name "AGGR2". The "max-reservable-bandwidth" | |||
of "AGGR1" takes the value of L1, which is smaller than that of NET1, | property of "AGGR1" takes the value of L1, which is smaller than that | |||
and the "persistent-entity-id" of "AGGR1" takes the value of NET1. | of NET1, and the "persistent-entity-id" property of "AGGR1" takes the | |||
The properties of "AGGR2" are computed in a similar way and the | value of NET1. The properties of "AGGR2" are computed in a similar | |||
obfuscated response is as shown below. Note that the obfuscation of | way; the obfuscated response is as shown below. Note that the | |||
Path Vector responses is implementation-specific and is out of the | obfuscation of Path Vector responses is implementation specific and | |||
scope of this document, and developers may refer to Section 11 for | is out of scope for this document. Developers may refer to | |||
further references. | Section 11 for further references. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 1263 | Content-Length: 1333 | |||
Content-Type: multipart/related; boundary=example-2; | Content-Type: multipart/related; boundary=example-2; | |||
type=application/alto-endpointcost+json | type=application/alto-endpointcost+json | |||
--example-2 | --example-2 | |||
Content-ID: <ecs@alto.example.com> | Content-ID: <ecs@alto.example.com> | |||
Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
{ | { | |||
"meta": { | "meta": { | |||
"vtags": { | "vtags": { | |||
skipping to change at page 48, line 34 ¶ | skipping to change at line 2074 ¶ | |||
}, | }, | |||
".ane:AGGR2": { | ".ane:AGGR2": { | |||
"max-reservable-bandwidth": 15000000000, | "max-reservable-bandwidth": 15000000000, | |||
"persistent-entity-id": "ane-props.ane:MEC2" | "persistent-entity-id": "ane-props.ane:MEC2" | |||
}, | }, | |||
".ane:NET3": { | ".ane:NET3": { | |||
"max-reservable-bandwidth": 50000000000 | "max-reservable-bandwidth": 50000000000 | |||
} | } | |||
} | } | |||
} | } | |||
--example-2 | ||||
8.5. Incremental Updates | 8.5. Incremental Updates | |||
In this example, an ALTO client subscribes to the incremental update | In this example, an ALTO client subscribes to the incremental update | |||
for the multipart Endpoint Cost Service resource "endpoint-cost-pv". | for the multipart Endpoint Cost Service resource "endpoint-cost-pv". | |||
POST /updates/pv HTTP/1.1 | POST /updates/pv HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: text/event-stream | Accept: text/event-stream | |||
Content-Type: application/alto-updatestreamparams+json | Content-Type: application/alto-updatestreamparams+json | |||
Content-Length: 112 | Content-Length: 120 | |||
{ | { | |||
"add": { | "add": { | |||
"ecspvsub1": { | "ecspvsub1": { | |||
"resource-id": "endpoint-cost-pv", | "resource-id": "endpoint-cost-pv", | |||
"input": <ecs-input> | "input": <ecs-input> | |||
} | } | |||
} | } | |||
} | } | |||
Based on the server-side process defined in [RFC8895], the ALTO | Based on the server-side process defined in [RFC8895], the ALTO | |||
server will send the "control-uri" first using Server-Sent Event | server will send the "control-uri" first, using a Server-Sent Event | |||
(SSE), followed by the full response of the multipart message. | (SSE) followed by the full response of the multipart message. | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Connection: keep-alive | Connection: keep-alive | |||
Content-Type: text/event-stream | Content-Type: text/event-stream | |||
event: application/alto-updatestreamcontrol+json | event: application/alto-updatestreamcontrol+json | |||
data: {"control-uri": "https://alto.example.com/updates/streams/123"} | data: {"control-uri": "https://alto.example.com/updates/streams/123"} | |||
event: multipart/related;boundary=example-3; | event: multipart/related;boundary=example-3; | |||
type=application/alto-endpointcost+json,ecspvsub1 | type=application/alto-endpointcost+json,ecspvsub1 | |||
skipping to change at page 50, line 5 ¶ | skipping to change at line 2125 ¶ | |||
data: Content-ID: <propmap@alto.example.com> | data: Content-ID: <propmap@alto.example.com> | |||
data: Content-Type: application/alto-propmap+json | data: Content-Type: application/alto-propmap+json | |||
data: | data: | |||
data: <property-map-entry> | data: <property-map-entry> | |||
data: --example-3-- | data: --example-3-- | |||
When the contents change, the ALTO server will publish the updates | When the contents change, the ALTO server will publish the updates | |||
for each node in this tree separately, based on Section 6.7.3 of | for each node in this tree separately, based on Section 6.7.3 of | |||
[RFC8895]. | [RFC8895]. | |||
event: application/merge-patch+json, ecspvsub1.ecsmap@alto.example.com | event: application/merge-patch+json, | |||
data: <Merge patch for endpoint-cost-map-update> | ecspvsub1.ecsmap@alto.example.com | |||
data: <Merge patch for endpoint-cost-map-update> | ||||
event: application/merge-patch+json, ecspvsub1.propmap@alto.example.com | event: application/merge-patch+json, | |||
data: <Merge patch for property-map-update> | ecspvsub1.propmap@alto.example.com | |||
data: <Merge patch for property-map-update> | ||||
8.6. Multi-cost | 8.6. Multi-Cost | |||
The following examples demonstrate the request to the "multicost-pv" | The following examples demonstrate the request to the "multicost-pv" | |||
resource and the corresponding response. | resource and the corresponding response. | |||
The request asks for two cost types: the first is the Path Vector | The request asks for two cost types: the first is the Path Vector | |||
cost type, and the second is a numerical routing cost. It also | cost type, and the second is a numerical routing cost. It also | |||
queries the Maximum Reservable Bandwidth ANE property and the | queries the maximum reservable bandwidth ANE property and the | |||
Persistent Entity property for two IPv4 source and destination pairs | persistent entity ID property for two IPv4 source and destination | |||
(192.0.2.34 -> 192.0.2.2 and 192.0.2.34 -> 192.0.2.50) and one IPv6 | pairs (192.0.2.34 -> 192.0.2.2 and 192.0.2.34 -> 192.0.2.50) and one | |||
source and destination pair (2001:db8::3:1 -> 2001:db8::4:1). | IPv6 source and destination pair (2001:db8::3:1 -> 2001:db8::4:1). | |||
The response consists of two parts. The first part returns a | The response consists of two parts: | |||
JSONArray that contains two JSONValue for each requested source and | ||||
destination pair: the first JSONValue is a JSONArray of ANENames, | * The first part returns a JSONArray that contains two JSONValue | |||
which is the value of the Path Vector cost type, and the second | entries for each requested source and destination pair: the first | |||
JSONValue is a JSONNumber which is the value of the routing cost. | JSONValue is a JSONArray of ANENames, which is the value of the | |||
The second part contains a Property Map that maps the ANEs to their | Path Vector cost type; and the second JSONValue is a JSONNumber, | |||
requested properties. | which is the value of the routing cost. | |||
* The second part contains a property map that maps the ANEs to | ||||
their requested properties. | ||||
POST /endpointcost/mcpv HTTP/1.1 | POST /endpointcost/mcpv HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: multipart/related; | Accept: multipart/related; | |||
type=application/alto-endpointcost+json, | type=application/alto-endpointcost+json, | |||
application/alto-error+json | application/alto-error+json | |||
Content-Length: 433 | Content-Length: 454 | |||
Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
{ | { | |||
"multi-cost-types": [ | "multi-cost-types": [ | |||
{ "cost-mode": "array", "cost-metric": "ane-path" }, | { "cost-mode": "array", "cost-metric": "ane-path" }, | |||
{ "cost-mode": "numerical", "cost-metric": "routingcost" } | { "cost-mode": "numerical", "cost-metric": "routingcost" } | |||
], | ], | |||
"endpoints": { | "endpoints": { | |||
"srcs": [ | "srcs": [ | |||
"ipv4:192.0.2.34", | "ipv4:192.0.2.34", | |||
skipping to change at page 51, line 36 ¶ | skipping to change at line 2187 ¶ | |||
"ipv6:2001:db8::4:1" | "ipv6:2001:db8::4:1" | |||
] | ] | |||
}, | }, | |||
"ane-property-names": [ | "ane-property-names": [ | |||
"max-reservable-bandwidth", | "max-reservable-bandwidth", | |||
"persistent-entity-id" | "persistent-entity-id" | |||
] | ] | |||
} | } | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 1350 | Content-Length: 1419 | |||
Content-Type: multipart/related; boundary=example-4; | Content-Type: multipart/related; boundary=example-4; | |||
type=application/alto-endpointcost+json | type=application/alto-endpointcost+json | |||
--example-4 | --example-4 | |||
Content-ID: <ecs@alto.example.com> | Content-ID: <ecs@alto.example.com> | |||
Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
{ | { | |||
"meta": { | "meta": { | |||
"vtags": { | "vtags": { | |||
skipping to change at page 52, line 48 ¶ | skipping to change at line 2247 ¶ | |||
}, | }, | |||
".ane:AGGR2": { | ".ane:AGGR2": { | |||
"max-reservable-bandwidth": 15000000000, | "max-reservable-bandwidth": 15000000000, | |||
"persistent-entity-id": "ane-props.ane:MEC2" | "persistent-entity-id": "ane-props.ane:MEC2" | |||
}, | }, | |||
".ane:NET3": { | ".ane:NET3": { | |||
"max-reservable-bandwidth": 50000000000 | "max-reservable-bandwidth": 50000000000 | |||
} | } | |||
} | } | |||
} | } | |||
--example-4 | ||||
9. Compatibility with Other ALTO Extensions | 9. Compatibility with Other ALTO Extensions | |||
9.1. Compatibility with Legacy ALTO Clients/Servers | 9.1. Compatibility with Legacy ALTO Clients/Servers | |||
The multipart Filtered Cost Map resource and the multipart Endpoint | The multipart filtered cost map resource and the multipart Endpoint | |||
Cost Service resource has no backward compatibility issue with legacy | Cost Service resource have no backward-compatibility issues with | |||
ALTO clients and servers. Although these two types of resources | legacy ALTO clients and servers. Although these two types of | |||
reuse the media types defined in the base ALTO protocol for the | resources reuse the media types defined in the base ALTO Protocol for | |||
accept input parameters, they have different media types for | the "Accept" input parameters, they have different media types for | |||
responses. If the ALTO server provides these two types of resources, | responses. If the ALTO server provides these two types of resources | |||
but the ALTO client does not support them, the ALTO client will | but the ALTO client does not support them, the ALTO client will | |||
ignore the resources without incurring any incompatibility problem. | ignore the resources without incurring any incompatibility problems. | |||
9.2. Compatibility with Multi-Cost Extension | 9.2. Compatibility with Multi-Cost Extension | |||
The extension defined in this document is compatible with the multi- | The extension defined in this document is compatible with the multi- | |||
cost extension [RFC8189]. Such a resource has a media type of either | cost extension [RFC8189]. Such a resource has a media type of either | |||
"multipart/related; type=application/alto-costmap+json" or | "multipart/related; type=application/alto-costmap+json" or | |||
"multipart/related; type=application/alto-endpointcost+json". Its | "multipart/related; type=application/alto-endpointcost+json". Its | |||
"cost-constraints" field must either be "false" or not present and | "cost-constraints" field must be either "false" or not present, and | |||
the Path Vector cost type must be present in the "cost-type-names" | the Path Vector cost type must be present in the "cost-type-names" | |||
capability field but must not be present in the "testable-cost-type- | capability field but must not be present in the "testable-cost-type- | |||
names" field, as specified in Section 7.2.4 and Section 7.3.4. | names" field, as specified in Sections 7.2.4 and 7.3.4. | |||
9.3. Compatibility with Incremental Update | 9.3. Compatibility with Incremental Update Extension | |||
This extension is compatible with the incremental update extension | This extension is compatible with the incremental update extension | |||
[RFC8895]. ALTO clients and servers MUST follow the specifications | [RFC8895]. ALTO clients and servers MUST follow the specifications | |||
given in Sections 5.2 and 6.7.3 of [RFC8895] to support incremental | given in Sections 5.2 and 6.7.3 of [RFC8895] to support incremental | |||
updates for a Path Vector resource. | updates for a Path Vector resource. | |||
9.4. Compatibility with Cost Calendar | 9.4. Compatibility with Cost Calendar Extension | |||
The extension specified in this document is compatible with the Cost | The extension specified in this document is compatible with the Cost | |||
Calendar extension [RFC8896]. When used together with the Cost | Calendar extension [RFC8896]. When used together with the Cost | |||
Calendar extension, the cost value between a source and a destination | Calendar extension, the cost value between a source and a destination | |||
is an array of Path Vectors, where the k-th Path Vector refers to the | is an array of Path Vectors, where the k-th Path Vector refers to the | |||
abstract network paths traversed in the k-th time interval by traffic | abstract network paths traversed in the k-th time interval by traffic | |||
from the source to the destination. | from the source to the destination. | |||
When used with time-varying properties, e.g., maximum reservable | When used with time-varying properties, e.g., maximum reservable | |||
bandwidth, a property of a single ANE may also have different values | bandwidth, a property of a single ANE may also have different values | |||
in different time intervals. In this case, if such an ANE has | in different time intervals. In this case, if such an ANE has | |||
different property values in two time intervals, it MUST be treated | different property values in two time intervals, it MUST be treated | |||
as two different ANEs, i.e., with different entity identifiers. | as two different ANEs, i.e., with different entity identifiers. | |||
However, if it has the same property values in two time intervals, it | However, if it has the same property values in two time intervals, it | |||
MAY use the same identifier. | MAY use the same identifier. | |||
This rule allows the Path Vector extension to represent both changes | This rule allows the Path Vector extension to represent both changes | |||
of ANEs and changes of the ANEs' properties in a uniform way. The | of ANEs and changes of the ANEs' properties in a uniform way. The | |||
Path Vector part is calendared in a compatible way, and the Property | Path Vector part is calendared in a compatible way, and the property | |||
Map part is not affected by the calendar extension. | map part is not affected by the Cost Calendar extension. | |||
The two extensions combined together can provide the historical | The two extensions combined together can provide the historical | |||
network correlation information for a set of source and destination | network correlation information for a set of source and destination | |||
pairs. A network broker or client may use this information to derive | pairs. A network broker or client may use this information to derive | |||
other resource requirements such as Time-Block-Maximum Bandwidth, | other resource requirements such as Time-Block-Maximum Bandwidth, | |||
Bandwidth-Sliding-Window, and Time-Bandwidth-Product (TBP) (See | Bandwidth-Sliding-Window, and Time-Bandwidth-Product (TBP) (see | |||
[SENSE] for details). | [SENSE] for details). | |||
10. General Discussions | 10. General Discussion | |||
10.1. Constraint Tests for General Cost Types | 10.1. Constraint Tests for General Cost Types | |||
The constraint test is a simple approach to query the data. It | The constraint test is a simple approach for querying the data. It | |||
allows users to filter the query result by specifying some boolean | allows users to filter query results by specifying some boolean | |||
tests. This approach is already used in the ALTO protocol. | tests. This approach is already used in the ALTO Protocol. ALTO | |||
[RFC7285] and [RFC8189] allow ALTO clients to specify the | clients are permitted to specify either the "constraints" test | |||
"constraints" and "or-constraints" tests to better filter the result. | [RFC7285] [RFC8189] or the "or-constraints" test [RFC8189] to better | |||
filter the results. | ||||
However, the current syntax can only be used to test scalar cost | However, the current syntax can only be used to test scalar cost | |||
types, and cannot easily express constraints on complex cost types, | types and cannot easily express constraints on complex cost types, | |||
e.g., the Path Vector cost type defined in this document. | e.g., the Path Vector cost type defined in this document. | |||
In practice, developing a bespoke language for general-purpose | In practice, developing a bespoke language for general-purpose | |||
boolean tests can be a complex undertaking, and it is conceivable | boolean tests can be a complex undertaking, and it is conceivable | |||
that there are some existing implementations already (the authors | that such implementations already exist (the authors have not done an | |||
have not done an exhaustive search to determine whether there are | exhaustive search to determine whether such implementations exist). | |||
such implementations). One avenue to develop such a language may be | One avenue for developing such a language may be to explore extending | |||
to explore extending current query languages like XQuery [XQuery] or | current query languages like XQuery [XQuery] or JSONiq [JSONiq] and | |||
JSONiq [JSONiq] and integrating these with ALTO. | integrating these with ALTO. | |||
Filtering the Path Vector results or developing a more sophisticated | Filtering the Path Vector results or developing a more sophisticated | |||
filtering mechanism is beyond the scope of this document. | filtering mechanism is beyond the scope of this document. | |||
10.2. General Multi-Resource Query | 10.2. General Multi-Resource Query | |||
Querying multiple ALTO information resources continuously is a | Querying multiple ALTO information resources continuously is a | |||
general requirement. Enabling such a capability, however, must | general requirement. Enabling such a capability, however, must | |||
address general issues like efficiency and consistency. The | address general issues like efficiency and consistency. The | |||
incremental update extension [RFC8895] supports submitting multiple | incremental update extension [RFC8895] supports submitting multiple | |||
queries in a single request, and allows flexible control over the | queries in a single request and allows flexible control over the | |||
queries. However, it does not cover the case introduced in this | queries. However, it does not cover the case introduced in this | |||
document where multiple resources are needed for a single request. | document where multiple resources are needed for a single request. | |||
This extension gives an example of using a multipart message to | The extension specified in this document gives an example of using a | |||
encode the responses from two specific ALTO information resources: a | multipart message to encode the responses from two specific ALTO | |||
Filtered Cost Map or an Endpoint Cost Service, and a Property Map. By | information resources: a filtered cost map or an Endpoint Cost | |||
packing multiple resources in a single response, the implication is | Service, and a property map. By packing multiple resources in a | |||
that servers may proactively push related information resources to | single response, the implication is that servers may proactively push | |||
clients. | related information resources to clients. | |||
Thus, it is worth looking into the direction of extending the SSE | Thus, it is worth looking into extending the SSE mechanism as used in | |||
mechanism as used in the incremental update extension [RFC8895], or | the incremental update extension [RFC8895]; or upgrading to HTTP/2 | |||
upgrading to HTTP/2 [I-D.ietf-httpbis-http2bis] and HTTP/3 | [RFC9113] and HTTP/3 [RFC9114], which provides the ability to | |||
[I-D.ietf-quic-http], which provides the ability to multiplex queries | multiplex queries and to allow servers to proactively send related | |||
and to allow servers proactively send related information resources. | information resources. | |||
Defining a general multi-resource query mechanism is out of the scope | Defining a general multi-resource query mechanism is out of scope for | |||
of this document. | this document. | |||
11. Security Considerations | 11. Security Considerations | |||
This document is an extension of the base ALTO protocol, so the | This document is an extension of the base ALTO Protocol, so the | |||
Security Considerations [RFC7285] of the base ALTO protocol fully | security considerations provided for the base ALTO Protocol [RFC7285] | |||
apply when this extension is provided by an ALTO server. | fully apply when this extension is provided by an ALTO server. | |||
The Path Vector extension requires additional scrutiny on three | The Path Vector extension requires additional scrutiny of three | |||
security considerations discussed in the base protocol: | security considerations discussed in the base protocol: | |||
confidentiality of ALTO information (Section 15.3 of [RFC7285]), | confidentiality of ALTO information (Section 15.3 of [RFC7285]), | |||
potential undesirable guidance from authenticated ALTO information | potential undesirable guidance from authenticated ALTO information | |||
(Section 15.2 of [RFC7285]), and availability of ALTO service | (Section 15.2 of [RFC7285]), and availability of ALTO services | |||
(Section 15.5 of [RFC7285]). | (Section 15.5 of [RFC7285]). | |||
For confidentiality of ALTO information, a network operator should be | For confidentiality of ALTO information, a network operator should be | |||
aware that this extension may introduce a new risk: the Path Vector | aware that this extension may introduce a new risk: the Path Vector | |||
information, when used together with sensitive ANE properties such as | information, when used together with sensitive ANE properties such as | |||
capacities of bottleneck links, may make network attacks easier. For | capacities of bottleneck links, may make network attacks easier. For | |||
example, as the Path Vector information may reveal more fine-grained | example, as the Path Vector information may reveal more fine-grained | |||
internal network structures than the base protocol, an attacker may | internal network structures than the base protocol, an attacker may | |||
identify the bottleneck link and start a distributed denial-of- | identify the bottleneck link or links and start a distributed denial- | |||
service (DDoS) attack involving minimal flows to conduct the in- | of-service (DDoS) attack involving minimal flows, triggering in- | |||
network congestion. Given the potential risk of leaking sensitive | network congestion. Given the potential risk of leaking sensitive | |||
information, the Path Vector extension is mainly applicable in | information, the Path Vector extension is mainly applicable in | |||
scenarios where 1) the ANE structures and ANE properties do not | scenarios where 1) the ANE structures and ANE properties do not | |||
impose security risks to the ALTO service provider, e.g., not | impose security risks on the ALTO service provider (e.g., they do not | |||
carrying sensitive information, or 2) the ALTO server and client have | carry sensitive information) or 2) the ALTO server and client have | |||
established a reliable trust relationship, for example, operated in | established a reliable trust relationship (e.g., they operate in the | |||
the same administrative domain, or managed by business partners with | same administrative domain or are managed by business partners with | |||
legal contracts. | legal contracts). | |||
Three risk types are identified in Section 15.3.1 of [RFC7285]: | ||||
(1) excess disclosure of the ALTO service provider's data to an | ||||
unauthorized ALTO client, | ||||
(2) disclosure of the ALTO service provider's data (e.g., network | ||||
topology information or endpoint addresses) to an unauthorized | ||||
third party, and | ||||
(3) excess retrieval of the ALTO service provider's data by | ||||
collaborating ALTO clients. | ||||
Three risk types are identified in Section 15.3.1 of [RFC7285]: (1) | ||||
Excess disclosure of the ALTO service provider's data to an | ||||
unauthorized ALTO client; (2) Disclosure of the ALTO service | ||||
provider's data (e.g., network topology information or endpoint | ||||
addresses) to an unauthorized third party; and (3) Excess retrieval | ||||
of the ALTO service provider's data by collaborating ALTO clients. | ||||
To mitigate these risks, an ALTO server MUST follow the guidelines in | To mitigate these risks, an ALTO server MUST follow the guidelines in | |||
Section 15.3.2 of [RFC7285]. Furthermore, an ALTO server MUST follow | Section 15.3.2 of [RFC7285]. Furthermore, an ALTO server MUST follow | |||
the following additional protections strategies for risk types (1) | the following additional protections strategies for risk types (1) | |||
and (3). | and (3). | |||
For risk type (1), an ALTO server MUST use the authentication methods | For risk type (1), an ALTO server MUST use the authentication methods | |||
specified in Section 15.3.2 of [RFC7285] to authenticate the identify | specified in Section 15.3.2 of [RFC7285] to authenticate the identity | |||
of an ALTO client, and apply access control techniques to restrict | of an ALTO client and apply access control techniques to restrict the | |||
unprivileged ALTO clients from retrieving sensitive Path Vector | retrieval of sensitive Path Vector information by unprivileged ALTO | |||
information. For settings where the ALTO server and client are not | clients. For settings where the ALTO server and client are not in | |||
in the same trust domain, the ALTO server should reach agreements | the same trust domain, the ALTO server should reach agreements with | |||
with the ALTO client on protecting the confidentiality before | the ALTO client regarding protection of confidentiality before | |||
granting the access to Path Vector service with sensitive | granting access to Path Vector services with sensitive information. | |||
information. Such agreements may include legal contracts or Digital | Such agreements may include legal contracts or Digital Rights | |||
Right Management (DRM) techniques. Otherwise, the ALTO server MUST | Management (DRM) techniques. Otherwise, the ALTO server MUST NOT | |||
NOT offer the Path Vector service carrying sensitive information to | offer Path Vector services that carry sensitive information to the | |||
the clients unless the potential risks are fully assessed and | clients, unless the potential risks are fully assessed and mitigated. | |||
mitigated. | ||||
For risk type (3), an ALTO service provider must be aware that | For risk type (3), an ALTO service provider must be aware that | |||
persistent ANEs may be used as "landmarks" in collaborative | persistent ANEs may be used as "landmarks" in collaborative | |||
inferences. Thus, they should only be used when exposing public | inferences. Thus, they should only be used when exposing public | |||
service access points (e.g., API gateways, CDNi) and/or when the | service access points (e.g., API gateways, CDN Interconnections) and/ | |||
granularity is coarse-grained (e.g., when an ANE represents an AS, a | or when the granularity is coarse grained (e.g., when an ANE | |||
data center or a WAN). Otherwise, an ALTO server MUST use dynamic | represents an AS, a data center, or a WAN). Otherwise, an ALTO | |||
mappings from ephemeral ANE names to underlying physical entities. | server MUST use dynamic mappings from ephemeral ANE names to | |||
Specifically, for the same physical entity, an ALTO server SHOULD | underlying physical entities. Specifically, for the same physical | |||
assign a different ephemeral ANE name when the entity appears in the | entity, an ALTO server SHOULD assign a different ephemeral ANE name | |||
responses to different clients or even for different request from the | when the entity appears in the responses to different clients or even | |||
same client. A RECOMMENDED assignment strategy is to generate ANE | for different requests from the same client. A RECOMMENDED | |||
names from random numbers. | assignment strategy is to generate ANE names from random numbers. | |||
Further, to protect the network topology from graph reconstruction | Further, to protect the network topology from graph reconstruction | |||
(e.g., through isomorphic graph identification [BONDY]), the ALTO | (e.g., through isomorphic graph identification [BONDY]), the ALTO | |||
server SHOULD consider protection mechanisms to reduce information | server SHOULD consider protection mechanisms to reduce information | |||
exposure or obfuscate the real information. When doing so, the ALTO | exposure or obfuscate the real information. When doing so, the ALTO | |||
server must be aware that information reduction/obfuscation may lead | server must be aware that information reduction/obfuscation may lead | |||
to potential Undesirable Guidance from Authenticated ALTO Information | to a potential risk of undesirable guidance from authenticated ALTO | |||
risk (Section 15.2 of [RFC7285]). | information (Section 15.2 of [RFC7285]). | |||
Thus, implementations of ALTO servers involving reduction or | Thus, implementations of ALTO servers involving reduction or | |||
obfuscation of the Path Vector information SHOULD consider reduction/ | obfuscation of the Path Vector information SHOULD consider reduction/ | |||
obfuscation mechanisms that can preserve the integrity of ALTO | obfuscation mechanisms that can preserve the integrity of ALTO | |||
information, for example, by using minimal feasible region | information -- for example, by using minimal feasible region | |||
compression algorithms [NOVA] or obfuscation protocols | compression algorithms [NOVA] or obfuscation protocols [RESA] | |||
[RESA][MERCATOR]. However, these obfuscation methods are | [MERCATOR]. However, these obfuscation methods are experimental, and | |||
experimental and their practical applicability of these methods to | their practical applicability to the generic capability provided by | |||
the generic capability provided by this extension is not fully | this extension has not been fully assessed. The ALTO server MUST | |||
assessed. The ALTO server MUST carefully verify that the deployment | carefully verify that the deployment scenario satisfies the security | |||
scenario satisfies the security assumptions of these methods before | assumptions of these methods before applying them to protect Path | |||
applying them to protect Path Vector services with sensitive network | Vector services with sensitive network information. | |||
information. | ||||
For availability of ALTO service, an ALTO server should be cognizant | For availability of ALTO services, an ALTO server should be cognizant | |||
that using Path Vector extension might have a new risk: frequent | that using a Path Vector extension might introduce a new risk: | |||
requesting for Path Vectors might consume intolerable amounts of the | frequent requests for Path Vectors might consume intolerable amounts | |||
server-side computation and storage, which can break the ALTO server. | of server-side computation and storage. This behavior can break the | |||
For example, if an ALTO server implementation dynamically computes | ALTO server. For example, if an ALTO server implementation | |||
the Path Vectors for each request, the service providing Path Vectors | dynamically computes the Path Vectors for each request, the service | |||
may become an entry point for denial-of-service attacks on the | that provides the Path Vectors may become an entry point for denial- | |||
availability of an ALTO server. | of-service attacks on the availability of an ALTO server. | |||
To mitigate this risk, an ALTO server may consider using | To mitigate this risk, an ALTO server may consider using such | |||
optimizations such as precomputation-and-projection mechanisms | optimizations as precomputation-and-projection mechanisms [MERCATOR] | |||
[MERCATOR] to reduce the overhead for processing each query. Also, | to reduce the overhead for processing each query. An ALTO server may | |||
an ALTO server may also protect itself from malicious clients by | also protect itself from malicious clients by monitoring client | |||
monitoring the behaviors of clients and stopping serving clients with | behavior and stopping service to clients that exhibit suspicious | |||
suspicious behaviors (e.g., sending requests at a high frequency). | behavior (e.g., sending requests at a high frequency). | |||
The ALTO service providers must be aware that providing incremental | The ALTO service providers must be aware that providing incremental | |||
updates of the "max-reservable-bandwidth" may provide information | updates of "max-reservable-bandwidth" may provide information about | |||
about other consumers of the network. For example, a change of the | other consumers of the network. For example, a change in value may | |||
value may indicate one or more reservations has been made or changed. | indicate that one or more reservations have been made or changed. To | |||
To mitigate this risk, an ALTO server can batch the updates and/or | mitigate this risk, an ALTO server can batch the updates and/or add a | |||
add a random delay before publishing the updates. | random delay before publishing the updates. | |||
12. IANA Considerations | 12. IANA Considerations | |||
12.1. ALTO Cost Metric Registry | 12.1. "ALTO Cost Metrics" Registry | |||
This document registers a new entry to the ALTO Cost Metric Registry, | This document registers a new entry in the "ALTO Cost Metrics" | |||
as instructed by Section 14.2 of [RFC7285]. The new entry is as | registry, per Section 14.2 of [RFC7285]. The new entry is as shown | |||
shown below in Table 1. | below in Table 1. | |||
+============+====================+=========================+ | +============+====================+===========+ | |||
| Identifier | Intended Semantics | Security Considerations | | | Identifier | Intended Semantics | Reference | | |||
+============+====================+=========================+ | +============+====================+===========+ | |||
| ane-path | See Section 6.5.1 | See Section 11 | | | ane-path | See Section 6.5.1 | RFC 9275 | | |||
+------------+--------------------+-------------------------+ | +------------+--------------------+-----------+ | |||
Table 1: ALTO Cost Metric Registry | Table 1: "ALTO Cost Metrics" Registry | |||
12.2. ALTO Cost Mode Registry | 12.2. "ALTO Cost Modes" Registry | |||
This document registers a new entry to the ALTO Cost Mode Registry, | This document registers a new entry in the "ALTO Cost Modes" | |||
as instructed by Section 4 of [I-D.bw-alto-cost-mode]. The new entry | registry, per Section 5 of [RFC9274]. The new entry is as shown | |||
is as shown below in Table 2. | below in Table 2. | |||
+============+====================+ | +============+=========================+=============+===========+ | |||
| Identifier | Intended Semantics | | | Identifier | Description | Intended | Reference | | |||
+============+====================+ | | | | Semantics | | | |||
| array | See Section 6.5.2 | | +============+=========================+=============+===========+ | |||
+------------+--------------------+ | | array | Indicates that the cost | See Section | RFC 9275 | | |||
| | value is a JSON array | 6.5.2 | | | ||||
+------------+-------------------------+-------------+-----------+ | ||||
Table 2: ALTO Cost Mode Registry | Table 2: "ALTO Cost Modes" Registry | |||
12.3. ALTO Entity Domain Type Registry | 12.3. "ALTO Entity Domain Types" Registry | |||
This document registers a new entry to the ALTO Domain Entity Type | This document registers a new entry in the "ALTO Entity Domain Types" | |||
Registry, as instructed by Section 12.2 of | registry, per Section 12.3 of [RFC9240]. The new entry is as shown | |||
[I-D.ietf-alto-unified-props-new]. The new entry is as shown below | below in Table 3. | |||
in Table 3. | ||||
+============+============+=============+===================+=======+ | +============+============+=============+===================+=======+ | |||
| Identifier |Entity | Hierarchy & |Media Type of |Mapping| | | Identifier |Entity |Hierarchy and| Media Type of |Mapping| | |||
| |Identifier | Inheritance |Defining Resoucrce |to ALTO| | | |Identifier |Inheritance | Defining Resource |to ALTO| | |||
| |Encoding | | |Address| | | |Encoding | | |Address| | |||
| | | | |Type | | | | | | |Type | | |||
+============+============+=============+===================+=======+ | +============+============+=============+===================+=======+ | |||
| ane |See Section | None |application/alto- |false | | | ane |See Section |None | application/alto- |false | | |||
| |6.2.2 | |propmap+json | | | | |6.2.2 | | propmap+json | | | |||
+------------+------------+-------------+-------------------+-------+ | +------------+------------+-------------+-------------------+-------+ | |||
Table 3: ALTO Entity Domain Type Registry | Table 3: "ALTO Entity Domain Types" Registry | |||
Identifier: See Section 6.2.1. | Identifier: See Section 6.2.1. | |||
Entity Identifier Encoding: See Section 6.2.2. | Entity Identifier Encoding: See Section 6.2.2. | |||
Hierarchy: None | Hierarchy: None | |||
Inheritance: None | Inheritance: None | |||
Media Type of Defining Resource: See Section 6.2.4. | Media Type of Defining Resource: See Section 6.2.4. | |||
Mapping to ALTO Address Type: This entity type does not map to ALTO | Mapping to ALTO Address Type: This entity type does not map to an | |||
address type. | ALTO address type. | |||
Security Considerations: In some usage scenarios, ANE addresses | Security Considerations: In some usage scenarios, ANE addresses | |||
carried in ALTO Protocol messages may reveal information about an | carried in ALTO Protocol messages may reveal information about an | |||
ALTO client or an ALTO service provider. Applications and ALTO | ALTO client or an ALTO service provider. If a naming schema is | |||
service providers using addresses of ANEs will be made aware of | used to generate ANE names, either used privately or standardized | |||
how (or if) the addressing scheme relates to private information | by a future extension, how (or if) the naming schema relates to | |||
and network proximity, in further iterations of this document. | private information and network proximity must be explained to | |||
ALTO implementers and service providers. | ||||
12.4. ALTO Entity Property Type Registry | 12.4. "ALTO Entity Property Types" Registry | |||
Two initial entries "max-reservable-bandwidth" and "persistent- | Two initial entries -- "max-reservable-bandwidth" and "persistent- | |||
entity-id" are registered to the ALTO Domain "ane" in the "ALTO | entity-id" -- are registered for the ALTO domain "ane" in the "ALTO | |||
Entity Property Type Registry", as instructed by Section 12.3 of | Entity Property Types" registry, per Section 12.4 of [RFC9240]. The | |||
[I-D.ietf-alto-unified-props-new]. The two new entries are shown | two new entries are shown below in Table 4, and their details can be | |||
below in Table 4 and their details can be found in Section 12.4.1 and | found in Sections 12.4.1 and 12.4.2 of this document. | |||
Section 12.4.2. | ||||
+==========================+====================+===================+ | +==========================+====================+===================+ | |||
| Identifier | Intended | Media Type of | | | Identifier | Intended | Media Type of | | |||
| | Semantics | Defining Resource | | | | Semantics | Defining Resource | | |||
+==========================+====================+===================+ | +==========================+====================+===================+ | |||
| max-reservable-bandwidth | See Section | application/alto- | | | max-reservable-bandwidth | See Section | application/alto- | | |||
| | 6.4.1 | propmap+json | | | | 6.4.1 | propmap+json | | |||
+--------------------------+--------------------+-------------------+ | +--------------------------+--------------------+-------------------+ | |||
| persistent-entity-id | See Section | application/alto- | | | persistent-entity-id | See Section | application/alto- | | |||
| | 6.4.2 | propmap+json | | | | 6.4.2 | propmap+json | | |||
+--------------------------+--------------------+-------------------+ | +--------------------------+--------------------+-------------------+ | |||
Table 4: Initial Entries for ane Domain in the ALTO Entity | Table 4: Initial Entries for the "ane" Domain in the "ALTO Entity | |||
Property Types Registry | Property Types" Registry | |||
12.4.1. New ANE Property Type: Maximum Reservable Bandwidth | 12.4.1. New ANE Property Type: Maximum Reservable Bandwidth | |||
Identifier: "max-reservable-bandwidth" | Identifier: "max-reservable-bandwidth" | |||
Intended Semantics: See Section 6.4.1. | Intended Semantics: See Section 6.4.1. | |||
Media Type of Defining Resource: application/alto-propmap+json | Media Type of Defining Resource: application/alto-propmap+json | |||
Security Considerations: This property is essential for applications | Security Considerations: To make better choices regarding bandwidth | |||
such as large-scale data transfers or overlay network | reservation, this property is essential for applications such as | |||
interconnection to make better choice of bandwidth reservation. | large-scale data transfers or an overlay network interconnection. | |||
It may reveal the bandwidth usage of the underlying network and | It may reveal the bandwidth usage of the underlying network and | |||
can potentially be leveraged to reduce the cost of conducting | can potentially be leveraged to reduce the cost of conducting | |||
denial-of-service attacks. Thus, the ALTO server MUST consider | denial-of-service attacks. Thus, the ALTO server MUST consider | |||
protection mechanisms including only providing the information to | such protection mechanisms as providing the information to | |||
authorized clients, and information reduction and obfuscation as | authorized clients only and applying information reduction and | |||
introduced in Section 11. | obfuscation as discussed in Section 11. | |||
12.4.2. New ANE Property Type: Persistent Entity ID | 12.4.2. New ANE Property Type: Persistent Entity ID | |||
Identifier: "persistent-entity-id" | Identifier: "persistent-entity-id" | |||
Intended Semantics: See Section 6.4.2. | Intended Semantics: See Section 6.4.2. | |||
Media Type of Defining Resource: application/alto-propmap+json | Media Type of Defining Resource: application/alto-propmap+json | |||
Security Considerations: This property is useful when an ALTO server | Security Considerations: This property is useful when an ALTO server | |||
wants to selectively expose certain service points whose detailed | wants to selectively expose certain service points whose detailed | |||
properties can be further queried by applications. The entity IDs | properties can be further queried by applications. As mentioned | |||
may consider sensitive information about the underlying network, | in Section 12.3.2 of [RFC9240], the entity IDs may reveal | |||
and an ALTO server should follow the security considerations in | sensitive information about the underlying network. An ALTO | |||
Section 11 of [I-D.ietf-alto-unified-props-new]. | server should follow the security considerations provided in | |||
Section 11 of [RFC9240]. | ||||
13. References | 13. References | |||
13.1. Normative References | 13.1. Normative References | |||
[I-D.bw-alto-cost-mode] | ||||
Boucadair, M. and Q. Wu, "A Cost Mode Registry for the | ||||
Application-Layer Traffic Optimization (ALTO) Protocol", | ||||
Work in Progress, Internet-Draft, draft-bw-alto-cost-mode- | ||||
01, 4 March 2022, <https://datatracker.ietf.org/doc/html/ | ||||
draft-bw-alto-cost-mode-01>. | ||||
[I-D.ietf-alto-unified-props-new] | ||||
Roome, W., Randriamasy, S., Yang, Y. R., Zhang, J. J., and | ||||
K. Gao, "An ALTO Extension: Entity Property Maps", Work in | ||||
Progress, Internet-Draft, draft-ietf-alto-unified-props- | ||||
new-24, 28 February 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-alto- | ||||
unified-props-new-24>. | ||||
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
Extensions (MIME) Part Two: Media Types", RFC 2046, | Extensions (MIME) Part Two: Media Types", RFC 2046, | |||
DOI 10.17487/RFC2046, November 1996, | DOI 10.17487/RFC2046, November 1996, | |||
<https://www.rfc-editor.org/rfc/rfc2046>. | <https://www.rfc-editor.org/info/rfc2046>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC2387] Levinson, E., "The MIME Multipart/Related Content-type", | [RFC2387] Levinson, E., "The MIME Multipart/Related Content-type", | |||
RFC 2387, DOI 10.17487/RFC2387, August 1998, | RFC 2387, DOI 10.17487/RFC2387, August 1998, | |||
<https://www.rfc-editor.org/rfc/rfc2387>. | <https://www.rfc-editor.org/info/rfc2387>. | |||
[RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, | [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, | |||
DOI 10.17487/RFC5322, October 2008, | DOI 10.17487/RFC5322, October 2008, | |||
<https://www.rfc-editor.org/rfc/rfc5322>. | <https://www.rfc-editor.org/info/rfc5322>. | |||
[RFC7285] Alimi, R., Ed., Penno, R., Ed., Yang, Y., Ed., Kiesel, S., | [RFC7285] Alimi, R., Ed., Penno, R., Ed., Yang, Y., Ed., Kiesel, S., | |||
Previdi, S., Roome, W., Shalunov, S., and R. Woundy, | Previdi, S., Roome, W., Shalunov, S., and R. Woundy, | |||
"Application-Layer Traffic Optimization (ALTO) Protocol", | "Application-Layer Traffic Optimization (ALTO) Protocol", | |||
RFC 7285, DOI 10.17487/RFC7285, September 2014, | RFC 7285, DOI 10.17487/RFC7285, September 2014, | |||
<https://www.rfc-editor.org/rfc/rfc7285>. | <https://www.rfc-editor.org/info/rfc7285>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8189] Randriamasy, S., Roome, W., and N. Schwan, "Multi-Cost | [RFC8189] Randriamasy, S., Roome, W., and N. Schwan, "Multi-Cost | |||
Application-Layer Traffic Optimization (ALTO)", RFC 8189, | Application-Layer Traffic Optimization (ALTO)", RFC 8189, | |||
DOI 10.17487/RFC8189, October 2017, | DOI 10.17487/RFC8189, October 2017, | |||
<https://www.rfc-editor.org/rfc/rfc8189>. | <https://www.rfc-editor.org/info/rfc8189>. | |||
[RFC8895] Roome, W. and Y. Yang, "Application-Layer Traffic | [RFC8895] Roome, W. and Y. Yang, "Application-Layer Traffic | |||
Optimization (ALTO) Incremental Updates Using Server-Sent | Optimization (ALTO) Incremental Updates Using Server-Sent | |||
Events (SSE)", RFC 8895, DOI 10.17487/RFC8895, November | Events (SSE)", RFC 8895, DOI 10.17487/RFC8895, November | |||
2020, <https://www.rfc-editor.org/rfc/rfc8895>. | 2020, <https://www.rfc-editor.org/info/rfc8895>. | |||
[RFC8896] Randriamasy, S., Yang, R., Wu, Q., Deng, L., and N. | [RFC8896] Randriamasy, S., Yang, R., Wu, Q., Deng, L., and N. | |||
Schwan, "Application-Layer Traffic Optimization (ALTO) | Schwan, "Application-Layer Traffic Optimization (ALTO) | |||
Cost Calendar", RFC 8896, DOI 10.17487/RFC8896, November | Cost Calendar", RFC 8896, DOI 10.17487/RFC8896, November | |||
2020, <https://www.rfc-editor.org/rfc/rfc8896>. | 2020, <https://www.rfc-editor.org/info/rfc8896>. | |||
[RFC9240] Roome, W., Randriamasy, S., Yang, Y., Zhang, J., and K. | ||||
Gao, "An Extension for Application-Layer Traffic | ||||
Optimization (ALTO): Entity Property Maps", RFC 9240, | ||||
DOI 10.17487/RFC9240, July 2022, | ||||
<https://www.rfc-editor.org/info/rfc9240>. | ||||
[RFC9274] Boucadair, M. and Q. Wu, "A Cost Mode Registry for the | ||||
Application-Layer Traffic Optimization (ALTO) Protocol", | ||||
RFC 9274, DOI 10.17487/RFC9274, July 2022, | ||||
<https://www.rfc-editor.org/info/rfc9274>. | ||||
13.2. Informative References | 13.2. Informative References | |||
[BONDY] Bondy, J.A. and R.L. Hemminger, "Graph reconstruction—a | [ALTO-PERF-METRICS] | |||
survey", Journal of Graph Theory, Volume 1, Issue 3, pp | Wu, Q., Yang, Y., Lee, Y., Dhody, D., Randriamasy, S., and | |||
227-268 , 1977, <https://doi.org/10.1002/jgt.3190010306>. | L. Contreras, "ALTO Performance Cost Metrics", Work in | |||
Progress, Internet-Draft, draft-ietf-alto-performance- | ||||
metrics-28, 21 March 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-alto- | ||||
performance-metrics-28>. | ||||
[BONDY] Bondy, J.A. and R.L. Hemminger, "Graph reconstruction--a | ||||
survey", Journal of Graph Theory, Volume 1, Issue 3, pp. | ||||
227-268, DOI 10.1002/jgt.3190010306, 1977, | ||||
<https://onlinelibrary.wiley.com/doi/10.1002/ | ||||
jgt.3190010306>. | ||||
[BOXOPT] Xiang, Q., Yu, H., Aspnes, J., Le, F., Kong, L., and Y.R. | [BOXOPT] Xiang, Q., Yu, H., Aspnes, J., Le, F., Kong, L., and Y.R. | |||
Yang, "Optimizing in the dark: Learning an optimal | Yang, "Optimizing in the Dark: Learning an Optimal | |||
solution through a simple request interface", Proceedings | Solution through a Simple Request Interface", Proceedings | |||
of the AAAI Conference on Artificial Intelligence 33, | of the AAAI Conference on Artificial Intelligence 33, | |||
1674-1681 , 2019, | 1674-1681, DOI 10.1609/aaai.v33i01.33011674, July 2019, | |||
<https://doi.org/10.1609/aaai.v33i01.33011674>. | <https://ojs.aaai.org//index.php/AAAI/article/view/3984>. | |||
[CLARINET] Viswanathan, R., Ananthanarayanan, G., and A. Akella, | [CLARINET] Viswanathan, R., Ananthanarayanan, G., and A. Akella, | |||
"CLARINET: WAN-Aware Optimization for Analytics Queries", | "CLARINET: WAN-aware optimization for analytics queries", | |||
In 12th USENIX Symposium on Operating Systems Design and | Proceedings of the 12th USENIX conference on Operating | |||
Implementation (OSDI 16), USENIX Association, Savannah, | Systems Design and Implementation (OSDI'16), Savannah, GA, | |||
GA, 435-450 , 2016, | pp. 435-450, November 2016, | |||
<https://dl.acm.org/doi/abs/10.5555/3026877.3026911>. | <https://dl.acm.org/doi/abs/10.5555/3026877.3026911>. | |||
[G2] Ros-Giralt, J., Bohara, A., Yellamraju, S., Langston, | [G2] Ros-Giralt, J., Bohara, A., Yellamraju, S., Langston, | |||
M.H., Lethin, R., Jiang, Y., Tassiulas, L., Li, J., Tan, | M.H., Lethin, R., Jiang, Y., Tassiulas, L., Li, J., Tan, | |||
Y., and M. Veeraraghavan, "On the Bottleneck Structure of | Y., and M. Veeraraghavan, "On the Bottleneck Structure of | |||
Congestion-Controlled Networks", Proceedings of the ACM on | Congestion-Controlled Networks", Proceedings of the ACM on | |||
Measurement and Analysis of Computing Systems, Volume 3, | Measurement and Analysis of Computing Systems, Volume 3, | |||
Issue 3, pp 1-31 , 2019, | Issue 3, pp. 1-31, DOI 10.1145/3366707, December 2019, | |||
<https://dl.acm.org/doi/10.1145/3366707>. | <https://dl.acm.org/doi/10.1145/3366707>. | |||
[HUG] Chowdhury, M., Liu, Z., Ghodsi, A., and I. Stoica, "HUG: | [HUG] Chowdhury, M., Liu, Z., Ghodsi, A., and I. Stoica, "HUG: | |||
Multi-Resource Fairness for Correlated and Elastic | multi-resource fairness for correlated and elastic | |||
Demands", 13th USENIX Symposium on Networked Systems | demands", Proceedings of the 13th USENIX Conference on | |||
Design and Implementation (NSDI 16) (Santa Clara, CA, | Networked Systems Design and Implementation (NSDI'16), | |||
2016), 407-424. , 2016, | Santa Clara, CA, pp. 407-424, March 2016, | |||
<https://dl.acm.org/doi/10.5555/2930611.2930638>. | <https://dl.acm.org/doi/10.5555/2930611.2930638>. | |||
[I-D.ietf-alto-performance-metrics] | [INTENT-BASED-NETWORKING] | |||
Wu, Q., Yang, Y. R., Lee, Y., Dhody, D., Randriamasy, S., | Clemm, A., Ciavaglia, L., Granville, L. Z., and J. | |||
and L. M. C. Murillo, "ALTO Performance Cost Metrics", | Tantsura, "Intent-Based Networking - Concepts and | |||
Work in Progress, Internet-Draft, draft-ietf-alto- | Definitions", Work in Progress, Internet-Draft, draft- | |||
performance-metrics-26, 2 March 2022, | irtf-nmrg-ibn-concepts-definitions-09, 24 March 2022, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-alto- | <https://datatracker.ietf.org/doc/html/draft-irtf-nmrg- | |||
performance-metrics-26>. | ibn-concepts-definitions-09>. | |||
[I-D.ietf-httpbis-http2bis] | ||||
Thomson, M. and C. Benfield, "HTTP/2", Work in Progress, | ||||
Internet-Draft, draft-ietf-httpbis-http2bis-07, 24 January | ||||
2022, <https://datatracker.ietf.org/doc/html/draft-ietf- | ||||
httpbis-http2bis-07>. | ||||
[I-D.ietf-quic-http] | ||||
Bishop, M., "Hypertext Transfer Protocol Version 3 | ||||
(HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- | ||||
quic-http-34, 2 February 2021, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-quic- | ||||
http-34>. | ||||
[JSONiq] "The JSON Query language", 2020, | [JSONiq] JSONiq, "The JSON Query Language", 2022, | |||
<https://www.jsoniq.org/>. | <https://www.jsoniq.org/>. | |||
[MERCATOR] Xiang, Q., Zhang, J., Wang, X., Liu, Y., Guok, C., Le, F., | [MERCATOR] Xiang, Q., Zhang, J., Wang, X., Liu, Y., Guok, C., Le, F., | |||
MacAuley, J., Newman, H., and Y.R. Yang, "Toward Fine- | MacAuley, J., Newman, H., and Y.R. Yang, "Toward Fine- | |||
Grained, Privacy-Preserving, Efficient Multi-Domain | Grained, Privacy-Preserving, Efficient Multi-Domain | |||
Network Resource Discovery", IEEE/ACM IEEE Journal on | Network Resource Discovery", IEEE/ACM, IEEE Journal on | |||
Selected Areas of Communication 37(8): 1924-1940, 2019, | Selected Areas in Communications, Volume 37, Issue 8, pp. | |||
<https://doi.org/10.1109/JSAC.2019.2927073>. | 1924-1940, DOI 10.1109/JSAC.2019.2927073, August 2019, | |||
<https://ieeexplore.ieee.org/document/8756056>. | ||||
[MOWIE] Zhang, Y., Li, G., Xiong, C., Lei, Y., Huang, W., Han, Y., | [MOWIE] Zhang, Y., Li, G., Xiong, C., Lei, Y., Huang, W., Han, Y., | |||
Walid, A., Yang, Y.R., and Z. Zhang, "MoWIE: Toward | Walid, A., Yang, Y.R., and Z. Zhang, "MoWIE: Toward | |||
Systematic, Adaptive Network Information Exposure as an | Systematic, Adaptive Network Information Exposure as an | |||
Enabling Technique for Cloud-Based Applications over 5G | Enabling Technique for Cloud-Based Applications over 5G | |||
and Beyond", In Proceedings of the Workshop on Network | and Beyond", Proceedings of the Workshop on Network | |||
Application Integration/CoDesign, ACM, Virtual Event USA, | Application Integration/CoDesign (NAI '20), ACM, Virtual | |||
20-27. , 2020, <https://doi.org/10.1145/3405672.3409489>. | Event USA, pp. 20-27, DOI 10.1145/3405672.3409489, August | |||
2020, <https://dl.acm.org/doi/10.1145/3405672.3409489>. | ||||
[NOVA] Gao, K., Xiang, Q., Wang, X., Yang, Y.R., and J. Bi, "An | [NOVA] Gao, K., Xiang, Q., Wang, X., Yang, Y.R., and J. Bi, "An | |||
objective-driven on-demand network abstraction for | Objective-Driven On-Demand Network Abstraction for | |||
adaptive applications", IEEE/ACM Transactions on | Adaptive Applications", IEEE/ACM Transactions on | |||
Networking (TON) Vol 27, no. 2 (2019): 805-818., 2019, | Networking (TON) Vol. 27, Issue 2, pp. 805-818, | |||
<https://doi.org/10.1109/IWQoS.2017.7969117>. | DOI 10.1109/TNET.2019.2899905, April 2019, | |||
<https://doi.org/10.1109/TNET.2019.2899905>. | ||||
[RESA] Xiang, Q., Zhang, J., Wang, X., Liu, Y., Guok, C., Le, F., | [RESA] Xiang, Q., Zhang, J., Wang, X., Liu, Y., Guok, C., Le, F., | |||
MacAuley, J., Newman, H., and Y.R. Yang, "Fine-grained, | MacAuley, J., Newman, H., and Y.R. Yang, "Fine-Grained, | |||
multi-domain network resource abstraction as a fundamental | Multi-Domain Network Resource Abstraction as a Fundamental | |||
primitive to enable high-performance, collaborative data | Primitive to Enable High-Performance, Collaborative Data | |||
sciences", Proceedings of the Super Computing 2018, | Sciences", SC18: International Conference for High | |||
5:1-5:13 , 2019, <https://doi.org/10.1109/SC.2018.00008>. | Performance Computing, Networking, Storage and Analysis, | |||
pp. 58-70, DOI 10.1109/SC.2018.00008, November 2018, | ||||
<https://ieeexplore.ieee.org/document/8665783>. | ||||
[RFC2216] Shenker, S. and J. Wroclawski, "Network Element Service | [RFC2216] Shenker, S. and J. Wroclawski, "Network Element Service | |||
Specification Template", RFC 2216, DOI 10.17487/RFC2216, | Specification Template", RFC 2216, DOI 10.17487/RFC2216, | |||
September 1997, <https://www.rfc-editor.org/rfc/rfc2216>. | September 1997, <https://www.rfc-editor.org/info/rfc2216>. | |||
[RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | |||
Border Gateway Protocol 4 (BGP-4)", RFC 4271, | Border Gateway Protocol 4 (BGP-4)", RFC 4271, | |||
DOI 10.17487/RFC4271, January 2006, | DOI 10.17487/RFC4271, January 2006, | |||
<https://www.rfc-editor.org/rfc/rfc4271>. | <https://www.rfc-editor.org/info/rfc4271>. | |||
[SENSE] "Software Defined Networking (SDN) for End-to-End | [RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | |||
DOI 10.17487/RFC9113, June 2022, | ||||
<https://www.rfc-editor.org/info/rfc9113>. | ||||
[RFC9114] Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114, | ||||
June 2022, <https://www.rfc-editor.org/info/rfc9114>. | ||||
[SENSE] ESnet, "Software Defined Networking (SDN) for End-to-End | ||||
Networked Science at the Exascale", 2019, | Networked Science at the Exascale", 2019, | |||
<https://www.es.net/network-r-and-d/sense/>. | <https://www.es.net/network-r-and-d/sense/>. | |||
[SEREDGE] Contreras, L., Baliosian, J., Martı́nez-Julia, P., and J. | [SEREDGE] Contreras, L., Baliosian, J., Martínez-Julia, P., and J. | |||
Serrat, "Computing at the Edge: But, what Edge?", In | Serrat, "Computing at the Edge: But, what Edge?", | |||
proceedings of the NOMS 2020 - 2020 IEEE/IFIP Network | Proceedings of NOMS 2020 - 2020 IEEE/IFIP Network | |||
Operations and Management Symposium. pp. 1-9. , 2020, | Operations and Management Symposium, pp. 1-9, | |||
<https://doi.org/10.1109/NOMS47738.2020.9110342>. | DOI 10.1109/NOMS47738.2020.9110342, April 2020, | |||
<https://ieeexplore.ieee.org/document/9110342>. | ||||
[SWAN] Hong, C., Kandula, S., Mahajan, R., Zhang, M., Gill, V., | [SWAN] Hong, C., Kandula, S., Mahajan, R., Zhang, M., Gill, V., | |||
Nanduri, M., and R. Wattenhofer, "Achieving High | Nanduri, M., and R. Wattenhofer, "Achieving high | |||
Utilization with Software-driven WAN", In Proceedings of | utilization with software-driven WAN", Proceedings of the | |||
the ACM SIGCOMM 2013 Conference on SIGCOMM (SIGCOMM '13), | ACM SIGCOMM 2013 conference on SIGCOMM (SIGCOMM '13), New | |||
ACM, New York, NY, USA, 15-26. , 2013, | York, NY, pp. 15-26, DOI 10.1145/2486001.2486012, August | |||
<http://doi.acm.org/10.1145/2486001.2486012>. | 2013, <https://dl.acm.org/doi/10.1145/2486001.2486012>. | |||
[UNICORN] Xiang, Q., Chen, S., Gao, K., Newman, H., Taylor, I., | [UNICORN] Xiang, Q., Wang, T., Zhang, J., Newman, H., Yang, Y.R., | |||
Zhang, J., and Y.R. Yang, "Unicorn: Unified Resource | and Y. Liu, "Unicorn: Unified resource orchestration for | |||
Orchestration for Multi-Domain, Geo-Distributed Data | multi-domain, geo-distributed data analytics", Future | |||
Analytics", 2017 IEEE SmartWorld, Ubiquitous Intelligence | Generation Computer Systems, Volume 93, pp. 188-197, | |||
Computing, Advanced Trusted Computed, Scalable Computing | DOI 10.1016/j.future.2018.09.048, April 2019, | |||
Communications, Cloud Big Data Computing, Internet of | <https://www.sciencedirect.com/science/article/abs/pii/ | |||
People and Smart City Innovation | S0167739X18302413?via%3Dihub>. | |||
(SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI) (Aug. 2017), | ||||
1-6. , 2017, | ||||
<https://doi.org/10.1016/j.future.2018.09.048>. | ||||
[XQuery] "XQuery 3.1: An XML Query Language", 2017, | [XQuery] Robie, J., Ed., Dyck, M., Ed., and J. Spiegel, Ed., | |||
<https://www.w3.org/TR/xquery-31/>. | "XQuery 3.1: An XML Query Language", W3C Recommendation, | |||
March 2017, <https://www.w3.org/TR/xquery-31/>. | ||||
Appendix A. Acknowledgments | Acknowledgments | |||
The authors would like to thank discussions with Andreas Voellmy, | The authors would like to thank Andreas Voellmy, Erran Li, Haibin | |||
Erran Li, Haibin Song, Haizhou Du, Jiayuan Hu, Qiao Xiang, Tianyuan | Song, Haizhou Du, Jiayuan Hu, Tianyuan Liu, Xiao Shi, Xin Wang, and | |||
Liu, Xiao Shi, Xin Wang, and Yan Luo. The authors thank Greg | Yan Luo for fruitful discussions. The authors thank Greg Bernstein, | |||
Bernstein, Dawn Chen, Wendy Roome, and Michael Scharf for their | Dawn Chen, Wendy Roome, and Michael Scharf for their contributions to | |||
contributions to earlier drafts. | earlier draft versions of this document. | |||
The authors would also like to thank Tim Chown, Luis Contreras, Roman | The authors would also like to thank Tim Chown, Luis Contreras, Roman | |||
Danyliw, Benjamin Kaduk, Erik Kline, Suresh Krishnan, Murray | Danyliw, Benjamin Kaduk, Erik Kline, Suresh Krishnan, Murray | |||
Kucherawy, Warren Kumari, Danny Lachos, Francesca Palombini, Eric | Kucherawy, Warren Kumari, Danny Lachos, Francesca Palombini, Éric | |||
Vyncke, Samuel Weiler, and Qiao Xiang whose feedback and suggestions | Vyncke, Samuel Weiler, and Qiao Xiang, whose feedback and suggestions | |||
are invaluable to improve the practicability and conciseness of this | were invaluable for improving the practicability and conciseness of | |||
document, and Mohamed Boucadair, Martin Duke, Vijay Gurbani, Jan | this document; and Mohamed Boucadair, Martin Duke, Vijay Gurbani, Jan | |||
Seedorf, and Qin Wu who provide great support and guidance. | Seedorf, and Qin Wu, who provided great support and guidance. | |||
Appendix B. Revision Logs (To be removed before publication) | ||||
B.1. Changes since -20 | ||||
Reivision -21 | ||||
* changes the normative requirement on protecting confidentiality of | ||||
PV information with softer language | ||||
B.2. Changes since -19 | ||||
Revision -20 | ||||
* changes the IANA registry information | ||||
* adopts the comments from IESG reviews | ||||
B.3. Changes since -18 | ||||
Revision -19 | ||||
* adds detailed examples for use cases | ||||
* clarify terms with ambiguous meanings | ||||
B.4. Changes since -17 | ||||
Revision -18 | ||||
* changes the specification for content-id to conform to [RFC2387] | ||||
and [RFC5322] | ||||
* adds IPv6 examples | ||||
B.5. Changes since -16 | ||||
Revision -17 | ||||
* adds items for media type of defining resources in IANA | ||||
considerations | ||||
B.6. Changes since -15 | ||||
Revision -16 | ||||
* resolves the compatibility with the Multi-Cost extension (RFC | ||||
8189) | ||||
* adds media types of defining resources for ANE property types (for | ||||
IANA registration) | ||||
B.7. Changes since -14 | ||||
Revision -15 | ||||
* fixes the IDNits warnings, | ||||
* fixes grammar issues, | ||||
* addresses the comments in the AD review. | ||||
B.8. Changes since -13 | ||||
Revision -14 | ||||
* addresses the comments in the chair review, | ||||
* fixes most issues raised by IDNits. | ||||
B.9. Changes since -12 | ||||
Revision -13 | ||||
* changes the abstract based on the chairs' reviews | ||||
* integrates Richard's responds to WGLC reviews | ||||
B.10. Changes since -11 | ||||
Revision -12 | ||||
* clarifies the definition of ANEs in a similar way as how Network | ||||
Elements is defined in [RFC2216] | ||||
* restructures several paragraphs that are not clear (Sec 3, Path | ||||
Vector bullet, Sec 4.2, Sec 5.1.3, Sec 6.2.4, Sec 6.4.2, Sec 9.3) | ||||
* uses "ALTO Entity Domain Type Registry" | ||||
B.11. Changes since -10 | ||||
Revision -11 | ||||
* replaces "part" with "components" in the abstract; | ||||
* identifies additional requirements (AR) derived from the flow | ||||
scheduling example, and introduces how the extension addresses the | ||||
additional requirements | ||||
* fixes the inconsistent use of "start" parameter in multipart | ||||
responses; | ||||
* specifies explicitly how to handle "cost-constraints"; | ||||
* uses the latest IANA registration mechanism defined in | ||||
[I-D.ietf-alto-unified-props-new]; | ||||
* renames "persistent-entities" to "persistent-entity-id"; | ||||
* makes "application/alto-propmap+json" as the media type of | ||||
defining resources for the "ane" domain; | ||||
* updates the examples; | ||||
* adds the discussion on ephemeral and persistent ANEs. | ||||
B.12. Changes since -09 | ||||
Revision -10 | ||||
* revises the introduction which | ||||
- extends the scope where the PV extension can be applied beyond | ||||
the "path correlation" information | ||||
* brings back the capacity region use case to better illustrate the | ||||
problem | ||||
* revises the overview to explain and defend the concepts and | ||||
decision choices | ||||
* fixes inconsistent terms, typos | ||||
B.13. Changes since -08 | ||||
This revision | ||||
* fixes a few spelling errors | ||||
* emphasizes that abstract network elements can be generated on | ||||
demand in both introduction and motivating use cases | ||||
B.14. Changes Since Version -06 | ||||
* We emphasize the importance of the path vector extension in two | ||||
aspects: | ||||
1. It expands the problem space that can be solved by ALTO, from | ||||
preferences of network paths to correlations of network paths. | ||||
2. It is motivated by new usage scenarios from both application's | ||||
and network's perspectives. | ||||
* More use cases are included, in addition to the original capacity | ||||
region use case. | ||||
* We add more discussions to fully explore the design space of the | ||||
path vector extension and justify our design decisions, including | ||||
the concept of abstract network element, cost type (reverted to | ||||
-05), newer capabilities and the multipart message. | ||||
* Fix the incremental update process to be compatible with SSE -16 | ||||
draft, which uses client-id instead of resource-id to demultiplex | ||||
updates. | ||||
* Register an additional ANE property (i.e., persistent-entities) to | ||||
cover all use cases mentioned in the draft. | ||||
Authors' Addresses | Authors' Addresses | |||
Kai Gao | Kai Gao | |||
Sichuan University | Sichuan University | |||
No.24 South Section 1, Yihuan Road | No.24 South Section 1, Yihuan Road | |||
Chengdu | Chengdu | |||
610000 | 610000 | |||
China | China | |||
Email: kaigao@scu.edu.cn | Email: kaigao@scu.edu.cn | |||
Young Lee | Young Lee | |||
Samsung | Samsung | |||
South Korea | Republic of Korea | |||
Email: younglee.tx@gmail.com | Email: younglee.tx@gmail.com | |||
Sabine Randriamasy | Sabine Randriamasy | |||
Nokia Bell Labs | Nokia Bell Labs | |||
Route de Villejust | Route de Villejust | |||
91460 Nozay | 91460 Nozay | |||
France | France | |||
Email: sabine.randriamasy@nokia-bell-labs.com | Email: sabine.randriamasy@nokia-bell-labs.com | |||
Yang Richard Yang | Yang Richard Yang | |||
Yale University | Yale University | |||
51 Prospect Street | 51 Prospect Street | |||
New Haven, CT | New Haven, CT 06511 | |||
United States of America | United States of America | |||
Email: yry@cs.yale.edu | Email: yry@cs.yale.edu | |||
Jingxuan Jensen Zhang | Jingxuan Jensen Zhang | |||
Tongji University | Tongji University | |||
4800 Caoan Road | 4800 Caoan Road | |||
Shanghai | Shanghai | |||
201804 | 201804 | |||
China | China | |||
Email: jingxuan.n.zhang@gmail.com | Email: jingxuan.n.zhang@gmail.com | |||
End of changes. 339 change blocks. | ||||
1221 lines changed or deleted | 1080 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |