| rfc8896.original | rfc8896.txt | |||
|---|---|---|---|---|
| Network Working Group S. Randriamasy | Internet Engineering Task Force (IETF) S. Randriamasy | |||
| Internet-Draft Nokia Bell Labs | Request for Comments: 8896 Nokia Bell Labs | |||
| Intended status: Standards Track R. Yang | Category: Standards Track Y. Yang | |||
| Expires: September 18, 2020 Yale University | ISSN: 2070-1721 Yale University | |||
| Q. Wu | Q. Wu | |||
| Huawei | Huawei | |||
| L. Deng | L. Deng | |||
| China Mobile | China Mobile | |||
| N. Schwan | N. Schwan | |||
| Thales Deutschland | Thales Deutschland | |||
| March 17, 2020 | October 2020 | |||
| Application-Layer Traffic Optimization (ALTO) Cost Calendar | Application-Layer Traffic Optimization (ALTO) Cost Calendar | |||
| draft-ietf-alto-cost-calendar-21 | ||||
| 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 information | Optimization (ALTO) protocol. It extends the ALTO cost information | |||
| service so that applications decide not only 'where' to connect, but | service so that applications decide not only 'where' to connect but | |||
| also 'when'. This is useful for applications that need to perform | also 'when'. This is useful for applications that need to perform | |||
| bulk data transfer and would like to schedule these transfers during | bulk data transfer and would like to schedule these transfers during | |||
| an off-peak hour, for example. This extension introduces ALTO Cost | an off-peak hour, for example. This extension introduces the ALTO | |||
| Calendar, with which an ALTO Server exposes ALTO cost values in JSON | Cost Calendar with which an ALTO Server exposes ALTO cost values in | |||
| arrays where each value corresponds to a given time interval. The | JSON arrays where each value corresponds to a given time interval. | |||
| time intervals as well as other Calendar attributes, are specified in | The time intervals, as well as other Calendar attributes, are | |||
| the Information Resources Directory and ALTO Server responses. | specified in the Information Resources Directory and ALTO Server | |||
| responses. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on September 18, 2020. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc8896. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Some recent known uses . . . . . . . . . . . . . . . . . 4 | 1.1. Some Recent Known Uses | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2. Terminology | |||
| 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 5 | 2. Requirements Language | |||
| 3. Overview of ALTO Cost Calendars and terminology . . . . . . . 5 | 3. Overview of ALTO Cost Calendars and Terminology | |||
| 3.1. ALTO Cost Calendar overview . . . . . . . . . . . . . . . 6 | 3.1. ALTO Cost Calendar Overview | |||
| 3.2. ALTO Cost Calendar information features . . . . . . . . . 6 | 3.2. ALTO Cost Calendar Information Features | |||
| 3.3. ALTO Calendar design characteristics . . . . . . . . . . 7 | 3.3. ALTO Calendar Design Characteristics | |||
| 3.3.1. ALTO Cost Calendar for all cost modes . . . . . . . . 9 | 3.3.1. ALTO Cost Calendar for All Cost Modes | |||
| 3.3.2. Compatibility with legacy ALTO Clients . . . . . . . 10 | 3.3.2. Compatibility with Legacy ALTO Clients | |||
| 4. ALTO Calendar specification: IRD extensions . . . . . . . . . 10 | 4. ALTO Calendar Specification: IRD Extensions | |||
| 4.1. Calendar attributes in the IRD resource capabilities . . 11 | 4.1. Calendar Attributes in the IRD Resource Capabilities | |||
| 4.2. Calendars in a delegate IRD . . . . . . . . . . . . . . . 12 | 4.2. Calendars in a Delegate IRD | |||
| 4.3. Example IRD with ALTO Cost Calendars . . . . . . . . . . 13 | 4.3. Example IRD with ALTO Cost Calendars | |||
| 5. ALTO Calendar specification: Service Information Resources . 17 | 5. ALTO Calendar Specification: Service Information Resources | |||
| 5.1. Calendar extensions for Filtered Cost Maps (FCM) . . . . 17 | 5.1. Calendar Extensions for Filtered Cost Maps (FCM) | |||
| 5.1.1. Calendar extensions in Filtered Cost Map requests . . 17 | 5.1.1. Calendar Extensions in Filtered Cost Map Requests | |||
| 5.1.2. Calendar extensions in Filtered Cost Map responses . 18 | 5.1.2. Calendar Extensions in Filtered Cost Map Responses | |||
| 5.1.3. Use case and example: FCM with a bandwidth Calendar . 21 | 5.1.3. Use Case and Example: FCM with a Bandwidth Calendar | |||
| 5.2. Calendar extensions in the Endpoint Cost Service . . . . 23 | 5.2. Calendar Extensions in the Endpoint Cost Service | |||
| 5.2.1. Calendar specific input in Endpoint Cost requests . . 23 | 5.2.1. Calendar-Specific Input in Endpoint Cost Requests | |||
| 5.2.2. Calendar attributes in the Endpoint Cost response . . 24 | 5.2.2. Calendar Attributes in the Endpoint Cost Response | |||
| 5.2.3. Use case and example: ECS with a routingcost Calendar 25 | 5.2.3. Use Case and Example: ECS with a routingcost Calendar | |||
| 5.2.4. Use case and example: ECS with a multi-cost Calendar | 5.2.4. Use Case and Example: ECS with a Multi-cost Calendar | |||
| for routingcost and owdelay . . . . . . . . . . . . . 27 | for routingcost and owdelay | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 | 6. IANA Considerations | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 29 | 7. Security Considerations | |||
| 8. Operational Considerations . . . . . . . . . . . . . . . . . 31 | 8. Operational Considerations | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | 9. References | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 9.1. Normative References | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 32 | 9.2. Informative References | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 33 | Acknowledgments | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| The base Application-Layer Traffic Optimization (ALTO) protocol | The base Application-Layer Traffic Optimization (ALTO) protocol | |||
| specified in [RFC7285] provides guidance to overlay applications that | specified in [RFC7285] provides guidance to overlay applications that | |||
| need to select one or several hosts from a set of candidates able to | need to select one or several hosts from a set of candidates able to | |||
| provide a desired resource. This guidance is based on parameters | provide a desired resource. This guidance is based on parameters | |||
| that affect performance and efficiency of the data transmission | that affect performance and efficiency of the data transmission | |||
| between the hosts such as the topological distance. The goal of ALTO | between the hosts, such as the topological distance. The goal of | |||
| is to improve the Quality of Experience (QoE) in the application | ALTO is to improve the Quality of Experience (QoE) in the application | |||
| while optimizing resource usage in the underlying network | while optimizing resource usage in the underlying network | |||
| infrastructure. | infrastructure. | |||
| The ALTO protocol in [RFC7285] specifies a network map which defines | The ALTO protocol in [RFC7285] specifies a network map that defines | |||
| groupings of endpoints in provider-defined network regions identified | groupings of endpoints in provider-defined network regions identified | |||
| by Provider-defined Identifiers (PIDs). The Cost Map Service, | by Provider-defined Identifiers (PIDs). The Cost Map Service, | |||
| Endpoint Cost Service (ECS) and Endpoint Ranking Service then provide | Endpoint Cost Service (ECS), and Endpoint Ranking Service then | |||
| ISP-defined costs and rankings for connections among the specified | provide ISP-defined costs and rankings for connections among the | |||
| endpoints and PIDs and thus incentives for application clients to | specified endpoints and PIDs and thus incentives for application | |||
| connect to ISP preferred locations, for instance, to reduce their | clients to connect to ISP-preferred locations, for instance, to | |||
| costs. For the reasons outlined in the ALTO problem statement | reduce their costs. For the reasons outlined in the ALTO problem | |||
| [RFC5693] and requirement AR-14 of [RFC6708], ALTO does not | statement [RFC5693] and requirement AR-14 of [RFC6708], ALTO does not | |||
| disseminate network metrics that change frequently. In a network, | disseminate network metrics that change frequently. In a network, | |||
| the costs can fluctuate for many reasons having to do with | the costs can fluctuate for many reasons having to do with | |||
| instantaneous traffic load or due to diurnal patterns of traffic | instantaneous traffic load or diurnal patterns of traffic demand or | |||
| demand or planned events such as network maintenance, holidays or | planned events, such as network maintenance, holidays, or highly | |||
| highly publicized events. Thus, an ALTO application wishing to use | publicized events. Thus, an ALTO application wishing to use the Cost | |||
| the Cost Map and Endpoint Cost Service at some future time will have | Map and Endpoint Cost Service at some future time will have to | |||
| to estimate the state of the network at that time, a process that is, | estimate the state of the network at that time, a process that is, at | |||
| at best, fragile and brittle since the application does not have any | best, fragile and brittle, since the application does not have any | |||
| visibility into the state of the network. Providing network costs | visibility into the state of the network. Providing network costs | |||
| for only the current time thus may not be sufficient, in particular | for only the current time thus may not be sufficient, in particular | |||
| for applications that can schedule their traffic in a span of time, | for applications that can schedule their traffic in a span of time, | |||
| for example by deferring backups or other background traffic to off- | for example, by deferring backups or other background traffic to off- | |||
| peak hours. | peak hours. | |||
| In case the ALTO Cost value changes are predictable over a certain | In case the ALTO cost value changes are predictable over a certain | |||
| period of time and the application does not require immediate data | period of time and the application does not require immediate data | |||
| transfer, it can save time to get the whole set of cost values over | transfer, it can save time to get the whole set of cost values over | |||
| this period in one single ALTO response. Using this set to schedule | this period in one single ALTO response. Using this set to schedule | |||
| data transfers allows optimizing the network resources usage and QoE. | data transfers allows optimizing the network resources usage and QoE. | |||
| ALTO Clients and Servers can also minimize their workload by reducing | ALTO Clients and Servers can also minimize their workload by reducing | |||
| and accordingly scheduling their data exchanges. | and accordingly scheduling their data exchanges. | |||
| This document extends [RFC7285] to allow an ALTO Server to provide | This document extends [RFC7285] to allow an ALTO Server to provide | |||
| network costs for a given duration of time. A sequence of network | network costs for a given duration of time. A sequence of network | |||
| costs across a time span for a given pair of network locations is | costs across a time span for a given pair of network locations is | |||
| named an "ALTO Cost Calendar". The Filtered Cost Map Service and | named an "ALTO Cost Calendar". The Filtered Cost Map Service and | |||
| Endpoint Cost Service are extended to provide Cost Calendars. In | Endpoint Cost Service are extended to provide Cost Calendars. In | |||
| addition to this functional ALTO enhancement, we expect to further | addition to this functional ALTO enhancement, we expect to further | |||
| save network and storage resources by gathering multiple Cost Values | save network and storage resources by gathering multiple cost values | |||
| for one cost type into one single ALTO Server response. | for one cost type into one single ALTO Server response. | |||
| In this document, an "ALTO Cost Calendar" is specified in terms of | In this document, an "ALTO Cost Calendar" is specified in terms of | |||
| information resource capabilities that are applicable to time- | information resource capabilities that are applicable to time- | |||
| sensitive ALTO metrics. An ALTO Cost Calendar exposes ALTO Cost | sensitive ALTO metrics. An ALTO Cost Calendar exposes ALTO cost | |||
| Values in JSON arrays, see [RFC8259], where each value corresponds to | values in JSON arrays, see [RFC8259], where each value corresponds to | |||
| a given time interval. The time intervals as well as other Calendar | a given time interval. The time intervals, as well as other Calendar | |||
| attributes are specified in the Information Resources Directory (IRD) | attributes, are specified in the Information Resources Directory | |||
| and in the Server response to allow the ALTO Client to interpret the | (IRD) and in the Server response to allow the ALTO Client to | |||
| received ALTO values. Last, the extensions for ALTO Calendars are | interpret the received ALTO values. Last, the extensions for ALTO | |||
| applicable to any Cost Mode and they ensure backwards compatibility | Calendars are applicable to any cost mode, and they ensure backwards | |||
| with legacy ALTO Clients - those that only support [RFC7285]. | compatibility with legacy ALTO Clients -- those that only support | |||
| [RFC7285]. | ||||
| In the rest of this document, Section 3 provides the design | In the rest of this document, Section 3 provides the design | |||
| characteristics. Sections Section 4 and Section 5 define the formal | characteristics. Sections 4 and 5 define the formal specifications | |||
| specifications for the IRD and the information resources. IANA, | for the IRD and the information resources. IANA, security | |||
| security and operational considerations are addressed respectively in | considerations, and operational considerations are addressed | |||
| sections Section 6, Section 7 and Section 8. | respectively in Sections 6, 7, and 8. | |||
| 1.1. Some recent known uses | 1.1. Some Recent Known Uses | |||
| A potential use case is implementing smart network services that | A potential use case is implementing smart network services that | |||
| allow applications to dynamically build end-to-end, virtual networks, | allow applications to dynamically build end-to-end, virtual networks | |||
| to satisfy given demands, with no manual intervention. For example, | to satisfy given demands with no manual intervention. For example, | |||
| data-transfer automation applications may need a network service to | data-transfer automation applications may need a network service to | |||
| determine on the availability of bandwidth resources, to decide when | determine the availability of bandwidth resources to decide when to | |||
| to transfer their data sets. The SENSE project [SENSE-sdn-e2e-net] | transfer their data sets. The SENSE project [SENSE] supports such | |||
| supports such applications by requiring that a network provides | applications by requiring that a network provides services such as | |||
| services such as the Time-Bandwidth-Product (TBP) service, which | the Time-Bandwidth-Product (TBP) service, which informs applications | |||
| informs applications of bandwidth availability during a specific time | of bandwidth availability during a specific time period. ALTO | |||
| period. ALTO Calendars can support this service if the Calendar | Calendars can support this service if the Calendar start date and | |||
| start date and duration cover the period of interest of the | duration cover the period of interest of the requesting application. | |||
| requesting application. | ||||
| The need of future scheduling of large scale traffic that can be | The need of future scheduling of large-scale traffic that can be | |||
| addressed by the ALTO protocol is also motivated by Unicorn, a | addressed by the ALTO protocol is also motivated by Unicorn, a | |||
| unified resource orchestration framework for multi-domain, geo- | unified resource orchestration framework for multi-domain, geo- | |||
| distributed data analytics, see [Unicorn-fgcs]. | distributed data analytics, see [UNICORN-FGCS]. | |||
| 1.2. Terminology | 1.2. Terminology | |||
| o ALTO transaction: A request/response exchange between an ALTO | ALTO transaction: | |||
| Client and an ALTO Server. | A request/response exchange between an ALTO Client and an ALTO | |||
| Server. | ||||
| o Client: When used with a capital "C", this term refers to an ALTO | Client: | |||
| Client. | When used with a capital "C", this term refers to an ALTO Client. | |||
| o Calendar, Cost Calendar: When used with capitalized words, these | Calendar, Cost Calendar, ALTO Calendar: | |||
| terms refer to an ALTO Cost Calendar. | When used with capitalized words, these terms refer to an ALTO | |||
| Cost Calendar. | ||||
| o Calendared: this adjective qualifies information resources | Calendared: | |||
| providing Cost Calendars and information on costs that are | This adjective qualifies information resources providing Cost | |||
| provided in the form of a Cost Calendar. | Calendars and information on costs that are provided in the form | |||
| of a Cost Calendar. | ||||
| o Endpoint (EP): An endpoint is defined as in Section 2.1 of | Endpoint (EP): | |||
| [RFC7285]. It can be, for example, a peer, a CDN storage | An endpoint is defined as in Section 2.1 of [RFC7285]. It can be, | |||
| location, a physical server involved in a virtual server-supported | for example, a peer, a CDN storage location, a physical server | |||
| application, a party in a resource-sharing swarm such as a | involved in a virtual server-supported application, a party in a | |||
| computation grid, or an online multi-party game. | resource-sharing swarm such as a computation grid, or an online | |||
| multi-party game. | ||||
| o ECM: Is an abbreviation for Endpoint Cost Map. | ECM: | |||
| An abbreviation for Endpoint Cost Map. | ||||
| o FCM: Is an abbreviation for Filtered Cost Map. | FCM: | |||
| An abbreviation for Filtered Cost Map. | ||||
| o Server: When used with a capital "S", this term refers to an ALTO | Server: | |||
| Server. | When used with a capital "S", this term refers to an ALTO Server. | |||
| 2. Requirements Language | 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 | When the words appear in lower case, they are to be interpreted with | |||
| their natural language meanings. | their natural language meanings. | |||
| 3. Overview of ALTO Cost Calendars and terminology | 3. Overview of ALTO Cost Calendars and Terminology | |||
| This section gives a high-level overview of the design. It assumes | This section gives a high-level overview of the design. It assumes | |||
| the reader is familiar with the ALTO protocol [RFC7285] and its | the reader is familiar with the ALTO protocol [RFC7285] and its | |||
| Multi-Cost ALTO extension [RFC8189]. | Multi-Cost ALTO extension [RFC8189]. | |||
| 3.1. ALTO Cost Calendar overview | 3.1. ALTO Cost Calendar Overview | |||
| An ALTO Cost Calendar provided by the ALTO Server provides 2 | An ALTO Cost Calendar provided by the ALTO Server provides 2 | |||
| information items: | information items: | |||
| o an array of values for a given metric, where each value specifies | * an array of values for a given metric, where each value specifies | |||
| the metric corresponding to a time interval, where the value array | the metric corresponding to a time interval, where the value array | |||
| can sometimes be a cyclic pattern that repeats a certain number of | can sometimes be a cyclic pattern that repeats a certain number of | |||
| times. | times and | |||
| o attributes describing the time scope of the Calendar, including | * attributes describing the time scope of the Calendar, including | |||
| the size and number of the intervals and the date of the starting | the size and number of the intervals and the date of the starting | |||
| point of the Calendar, allowing an ALTO Client to interpret the | point of the Calendar, allowing an ALTO Client to interpret the | |||
| values properly. | values properly. | |||
| An ALTO Cost Calendar can be used like a "time table" to figure out | An ALTO Cost Calendar can be used like a "time table" to figure out | |||
| the best time to schedule data transfers and also to proactively | the best time to schedule data transfers and also to proactively | |||
| manage application traffic given predictable events such as expected | manage application traffic given predictable events, such as an | |||
| spike in traffic due to crowd gathering (concerts, sports, etc.), | expected spike in traffic due to crowd gathering (concerts, sports, | |||
| traffic-intensive holidays and network maintenance. A Calendar may | etc.), traffic-intensive holidays, and network maintenance. A | |||
| be viewed as a synthetic abstraction of, for example, real | Calendar may be viewed as a synthetic abstraction of, for example, | |||
| measurements gathered over previous periods on which statistics have | real measurements gathered over previous periods on which statistics | |||
| been computed. However, like for any schedule, unexpected network | have been computed. However, like for any schedule, unexpected | |||
| incidents may require the current ALTO Calendar to be updated and re- | network incidents may require the current ALTO Calendar to be updated | |||
| sent to the ALTO Clients needing it. The "ALTO Incremental Updates | and resent to the ALTO Clients needing it. The "ALTO Incremental | |||
| Using Server-Sent Events (SSE)" Service | Updates Using Server-Sent Events (SSE)" Service [RFC8895] can be used | |||
| [I-D.ietf-alto-incr-update-sse] can be used to directly update the | to directly update the Calendar upon value changes if supported by | |||
| Calendar upon value changes, if supported by both the Server and the | both the Server and the Client. | |||
| Client. | ||||
| Most likely, the ALTO Cost Calendar would be used for the Endpoint | Most likely, the ALTO Cost Calendar would be used for the Endpoint | |||
| Cost Service, assuming that a limited set of feasible Endpoints for a | Cost Service, assuming that a limited set of feasible endpoints for a | |||
| non-real time application is already identified, that they do not | non-real time application is already identified, and that those | |||
| need to be accessed immediately and that their access can be | endpoints do not need to be accessed immediately and that their | |||
| scheduled within a given time period. The Filtered Cost Map Service | access can be scheduled within a given time period. The Filtered | |||
| is also applicable as long as the size of the Map allows it. | Cost Map Service is also applicable as long as the size of the Map | |||
| allows it. | ||||
| 3.2. ALTO Cost Calendar information features | 3.2. ALTO Cost Calendar Information Features | |||
| The Calendar attributes are provided in the Information Resources | The Calendar attributes are provided in the Information Resources | |||
| Directory (IRD) and in ALTO Server responses. The IRD announces | Directory (IRD) and in ALTO Server responses. The IRD announces | |||
| attributes without date values in its information resources | attributes without date values in its information resources | |||
| capabilities, whereas attributes with time dependent values are | capabilities, whereas attributes with time-dependent values are | |||
| provided in the "meta" section of Server responses. The ALTO Cost | provided in the "meta" section of Server responses. The ALTO Cost | |||
| Calendar attributes provide the following information: | Calendar attributes provide the following information: | |||
| o attributes to describe the time scope of the Calendar value array: | * attributes to describe the time scope of the Calendar value array: | |||
| * "time-interval-size": the applicable time interval size for | - "time-interval-size": the applicable time interval size for | |||
| each Calendar value, defined in seconds, that can cover a wide | each Calendar value, defined in seconds, that can cover a wide | |||
| range of values. | range of values. | |||
| * "number-of-intervals": the number of intervals provided in the | - "number-of-intervals": the number of intervals provided in the | |||
| Calendar. | Calendar. | |||
| o "calendar-start-time": specifying when the Calendar starts, that | * "calendar-start-time": specifying when the Calendar starts; that | |||
| is to which date the first value of the Cost Calendar is | is, to which date the first value of the Cost Calendar is | |||
| applicable. | applicable. | |||
| o "repeated": an optional attribute indicating how many iterations | * "repeated": an optional attribute indicating how many iterations | |||
| of the provided Calendar will have the same values. The Server | of the provided Calendar will have the same values. The Server | |||
| may use it to allow the Client to schedule its next request and | may use it to allow the Client to schedule its next request and | |||
| thus save its own workload by reducing processing of similar | thus save its own workload by reducing processing of similar | |||
| requests. | requests. | |||
| Attribute "repeated" may take a very high value if a Calendar | Attribute "repeated" may take a very high value if a Calendar | |||
| represents a cyclic value pattern that the Server considers valid for | represents a cyclic value pattern that the Server considers valid for | |||
| a long period. In this case, the Server will only update the | a long period. In this case, the Server will only update the | |||
| Calendar values once this period has elapsed or if an unexpected | Calendar values once this period has elapsed or if an unexpected | |||
| event occurs on the network. See Section 8 for more discussion. | event occurs on the network. See Section 8 for more discussion. | |||
| 3.3. ALTO Calendar design characteristics | 3.3. ALTO Calendar Design Characteristics | |||
| The present document uses the notations defined in Section "8.2 | The present document uses the notations defined in "Notation" | |||
| Notation" of [RFC7285]. | (Section 8.2 of [RFC7285]). | |||
| The extensions in this document encode requests and responses using | The extensions in this document encode requests and responses using | |||
| JSON [RFC8259]. | JSON [RFC8259]. | |||
| In the base protocol [RFC7285] section 11.2.3.6, an ALTO cost is | In the base protocol [RFC7285], an ALTO cost is specified as a | |||
| specified as a generic JSONValue [RFC8259], to allow extensions. | generic JSONValue [RFC8259] to allow extensions. However, that | |||
| However, that section 11.2.3.6 states: "An implementation of the | section (Section 11.2.3.6 of [RFC7285]) states: | |||
| protocol in this document ([RFC7285]) SHOULD assume that the cost is | ||||
| a JSONNumber and fail to parse if it is not, unless the | | An implementation of the protocol in this document SHOULD assume | |||
| implementation is using an extension to this document that indicates | | that the cost is a JSONNumber and fail to parse if it is not, | |||
| when and how costs of other data types are signaled". | | unless the implementation is using an extension to this document | |||
| | that indicates when and how costs of other data types are | ||||
| | signaled. | ||||
| The present document extends the definition of a legacy cost map | The present document extends the definition of a legacy cost map | |||
| given in [RFC7285] to allow a cost entry to be an array of values, | given in [RFC7285] to allow a cost entry to be an array of values, | |||
| with one value per time interval, instead of being just one number, | with one value per time interval, instead of being just one number, | |||
| when the Cost Calendar functionality is activated on this cost. | when the Cost Calendar functionality is activated on this cost. | |||
| Therefore the implementor of this extension MUST consider that a cost | Therefore, the implementor of this extension MUST consider that a | |||
| entry is an array of values if this cost has been queried as a | cost entry is an array of values if this cost has been queried as a | |||
| Calendar. | Calendar. | |||
| Specifically, an implementation of this extension MUST parse the | Specifically, an implementation of this extension MUST parse the | |||
| "number-of-intervals" attribute of the Calendar attributes in an IRD | "number-of-intervals" attribute of the Calendar attributes in an IRD | |||
| entry announcing a service providing a Cost Calendar for a given cost | entry announcing a service providing a Cost Calendar for a given cost | |||
| type. The implementation then will know that a cost entry of the | type. The implementation then will know that a cost entry of the | |||
| service will be an array of values, and the expected size of the | service will be an array of values, and the expected size of the | |||
| array is that specified by the "number-of-intervals" attribute. The | array is that specified by the "number-of-intervals" attribute. The | |||
| following rules attempt to ensure consistency between the array size | following rules attempt to ensure consistency between the array size | |||
| announced by the Server and the actual size of the array received by | announced by the Server and the actual size of the array received by | |||
| the Client: | the Client: | |||
| o The size of the array of values conveyed in a Cost Calendar and | * The size of the array of values conveyed in a Cost Calendar and | |||
| received by the Client MUST be equal to the value of attribute | received by the Client MUST be equal to the value of attribute | |||
| "number-of-intervals" indicated in the IRD for the requested cost | "number-of-intervals" indicated in the IRD for the requested cost | |||
| type. | type. | |||
| o When the size of the array received by the Client is different | * When the size of the array received by the Client is different | |||
| from the expected size, the Client SHOULD ignore the received | from the expected size, the Client SHOULD ignore the received | |||
| array. | array. | |||
| To realize an ALTO Calendar, this document extends the IRD and the | To realize an ALTO Calendar, this document extends the IRD and the | |||
| ALTO requests and responses for Cost Calendars. | ALTO requests and responses for Cost Calendars. | |||
| This extension is designed to be lightweight and to ensure backwards | This extension is designed to be lightweight and to ensure backwards | |||
| compatibility with base protocol ALTO Clients and with other | compatibility with base protocol ALTO Clients and with other | |||
| extensions. It relies on section 8.3.7 "Parsing of Unknown Fields" | extensions. It relies on "Parsing of Unknown Fields" (Section 8.3.7 | |||
| of [RFC7285] that writes: "Extensions may include additional fields | of [RFC7285]), which states: "Extensions may include additional | |||
| within JSON objects defined in this document. ALTO implementations | fields within JSON objects defined in this document. ALTO | |||
| MUST ignore unknown fields when processing ALTO messages." | implementations MUST ignore unknown fields when processing ALTO | |||
| messages." | ||||
| The Calendar-specific capabilities are integrated in the information | The Calendar-specific capabilities are integrated in the information | |||
| resources of the IRD and in the "meta" member of ALTO responses to | resources of the IRD and in the "meta" member of ALTO responses to | |||
| Cost Calendars requests. A Calendar and its capabilities are | Cost Calendars requests. A Calendar and its capabilities are | |||
| associated with a given information resource and within this | associated with a given information resource and within this | |||
| information resource, with a given cost type. This design has | information resource with a given cost type. This design has several | |||
| several advantages: | advantages: | |||
| o it does not introduce a new mode, | * it does not introduce a new mode, | |||
| o it does not introduce new media types, | * it does not introduce new media types, and | |||
| o it allows an ALTO Server to offer, for a cost type, different | * it allows an ALTO Server to offer, for a cost type, different | |||
| Calendars with attributes that are specific to the information | Calendars with attributes that are specific to the information | |||
| resources providing a Calendar for this cost type, instead of | resources providing a Calendar for this cost type, instead of | |||
| being globally specific to the cost type. | being globally specific to the cost type. | |||
| The applicable Calendared information resources are: | The applicable Calendared information resources are: | |||
| o the Filtered Cost Map, | * the Filtered Cost Map and | |||
| o the Endpoint Cost Map. | ||||
| * the Endpoint Cost Map. | ||||
| The ALTO Server can choose in which frequency it provides cost | The ALTO Server can choose in which frequency it provides cost | |||
| Calendars to ALTO Clients. It may either provide Calendar updates | Calendars to ALTO Clients. It may either provide Calendar updates | |||
| starting at the request date, or carefully schedule its updates so as | starting at the request date or carefully schedule its updates so as | |||
| to take profit from a potential repetition/periodicity of Calendar | to take profit from a potential repetition/periodicity of Calendar | |||
| values. | values. | |||
| Since Calendar attributes are specific to an information resource, a | Since Calendar attributes are specific to an information resource, a | |||
| Server may adapt the granularity of the calendared information so as | Server may adapt the granularity of the calendared information so as | |||
| to moderate the volume of exchanged data. For example: suppose a | to moderate the volume of exchanged data. For example, suppose a | |||
| Server provides a Calendar for cost type name "routingcost". The | Server provides a Calendar for cost type name "routingcost". The | |||
| Server may offer a Calendar in a Cost Map resource, which may be a | Server may offer a Calendar in a Cost Map resource, which may be a | |||
| voluminous resource, as an array of 6 intervals lasting each 4 hours. | voluminous resource, as an array of 6 intervals lasting each 4 hours. | |||
| It may also offer a Calendar in an Endpoint Cost Map resource, which | It may also offer a Calendar in an Endpoint Cost Map resource, which | |||
| is potentially less voluminous, as a finer-grained array of 24 | is potentially less voluminous, as a finer-grained array of 24 | |||
| intervals lasting 1 hour each. | intervals lasting 1 hour each. | |||
| The ALTO Server does not support constraints on Calendars, provided | The ALTO Server does not support constraints on Calendars, provided | |||
| Calendars are requested for numerical values, for two main reasons: | Calendars are requested for numerical values, for two main reasons: | |||
| o constraints on an array of values may be various: for instance, | * Constraints on an array of values may be various. For instance, | |||
| some Clients may refuse Calendars with one single value violating | some Clients may refuse Calendars with one single value violating | |||
| a constraint, where as other ones may tolerate Calendars with | a constraint, whereas other ones may tolerate Calendars with | |||
| values violating constraints for example at given times. | values violating constraints, for example, at given times. | |||
| Therefore, expressing constraints in a way that covers all | Therefore, expressing constraints in a way that covers all | |||
| possible Client preferences is challenging, | possible Client preferences is challenging. | |||
| o if constraints were to be supported, the processing overhead would | * If constraints were to be supported, the processing overhead would | |||
| be substantial for the Server as it would have to parse alle the | be substantial for the Server as it would have to parse all the | |||
| values of the Calendar array before returning a response. | values of the Calendar array before returning a response. | |||
| As providing the constraint functionality in conjunction with the | As providing the constraint functionality in conjunction with the | |||
| Calendar functionality is not feasible for the reasons described | Calendar functionality is not feasible for the reasons described | |||
| above, the two features are mutually exclusive. The absence of | above, the two features are mutually exclusive. The absence of | |||
| constraints on Filtered Cost Map and Endpoint Cost Map Calendars | constraints on Filtered Cost Map and Endpoint Cost Map Calendars | |||
| reflects a divergence from the non-calendared information resources | reflects a divergence from the non-calendared information resources | |||
| defined in [RFC7285] and extended in [RFC8189], that support optional | defined in [RFC7285] and extended in [RFC8189], which support | |||
| constraints. | optional constraints. | |||
| 3.3.1. ALTO Cost Calendar for all cost modes | 3.3.1. ALTO Cost Calendar for All Cost Modes | |||
| An ALTO Cost Calendar is well-suited for values encoded in the | An ALTO Cost Calendar is well suited for values encoded in the | |||
| "numerical" mode. Actually, a Calendar can also represent metrics in | "numerical" mode. Actually, a Calendar can also represent metrics in | |||
| other modes considered as compatible with time-varying values. For | other modes considered as compatible with time-varying values. For | |||
| example, types of Cost values such as JSONBool can also be | example, types of cost values (such as JSONBool) can also be | |||
| calendared, as their value may be 'true' or 'false' depending on | calendared (as their value may be 'true' or 'false' depending on | |||
| given time periods or likewise, values represented by strings, such | given time periods or likewise) values represented by strings, such | |||
| as "medium", "high", "low", "blue", "open". | as "medium", "high", "low", "blue", and "open". | |||
| Note also that a Calendar is suitable as well for time-varying | Note also that a Calendar is suitable as well for time-varying | |||
| metrics provided in the "ordinal" mode, if these values are time- | metrics provided in the "ordinal" mode if these values are time- | |||
| varying and the ALTO Server provides updates of cost value based | varying and the ALTO Server provides updates of cost-value-based | |||
| preferences. | preferences. | |||
| 3.3.2. Compatibility with legacy ALTO Clients | 3.3.2. Compatibility with Legacy ALTO Clients | |||
| The ALTO protocol extensions for Cost Calendars have been defined so | The ALTO protocol extensions for Cost Calendars have been defined so | |||
| as to ensure that Calendar-capable ALTO Servers can provide legacy | as to ensure that Calendar-capable ALTO Servers can provide legacy | |||
| ALTO Clients with legacy information resources as well. That is, a | ALTO Clients with legacy information resources as well. That is, a | |||
| legacy ALTO Client can request resources and receive responses as | legacy ALTO Client can request resources and receive responses as | |||
| specified in [RFC7285]. | specified in [RFC7285]. | |||
| A Calendar-aware ALTO Server MUST implement the base protocol | A Calendar-aware ALTO Server MUST implement the base protocol | |||
| specified in [RFC7285]. | specified in [RFC7285]. | |||
| A Calendar-aware ALTO Client MUST implement the base protocol | A Calendar-aware ALTO Client MUST implement the base protocol | |||
| specified in [RFC7285]. | specified in [RFC7285]. | |||
| As a consequence, when a metric is available as a Calendar array, it | As a consequence, when a metric is available as a Calendar array, it | |||
| also MUST be available as a single value as required by [RFC7285]. | also MUST be available as a single value, as required by [RFC7285]. | |||
| The Server, in this case, provides the current value of the metric to | The Server, in this case, provides the current value of the metric to | |||
| either Calendar-aware Clients not interested in future or time-based | either Calendar-aware Clients not interested in future or time-based | |||
| values, or Clients implementing [RFC7285] only. | values or Clients implementing [RFC7285] only. | |||
| For compatibility with legacy ALTO Clients specified in [RFC7285], | For compatibility with legacy ALTO Clients specified in [RFC7285], | |||
| calendared information resources are not applicable for full cost | calendared information resources are not applicable for full cost | |||
| maps for the following reason: a legacy ALTO Client would receive a | maps for the following reason: a legacy ALTO Client would receive a | |||
| calendared cost map via an HTTP 'GET' command. As specified in | calendared cost map via an HTTP 'GET' command. As specified in | |||
| section 8.3.7 of [RFC7285], it will ignore the Calendar Attributes | Section 8.3.7 of [RFC7285], it will ignore the Calendar attributes | |||
| indicated in the "meta" of the responses. Therefore, lacking | indicated in the "meta" of the responses. Therefore, lacking | |||
| information on Calendar attributes, it will not be able to correctly | information on Calendar attributes, it will not be able to correctly | |||
| interpret and process the values of the received array of Calendar | interpret and process the values of the received array of Calendar | |||
| cost values. | cost values. | |||
| Therefore, calendared information resources MUST be requested via the | Therefore, calendared information resources MUST be requested via the | |||
| Filtered Cost Map Service or the Endpoint Cost Service, using a POST | Filtered Cost Map Service or the Endpoint Cost Service using a POST | |||
| method. | method. | |||
| 4. ALTO Calendar specification: IRD extensions | 4. ALTO Calendar Specification: IRD Extensions | |||
| The Calendar attributes in the IRD information resources capabilities | The Calendar attributes in the IRD information resources capabilities | |||
| carry dateless values. A Calendar is associated with an information | carry dateless values. A Calendar is associated with an information | |||
| resource rather than a cost type. For example, a Server can provide | resource rather than a cost type. For example, a Server can provide | |||
| a "routingcost" Calendar for the Filtered Cost Map Service at a | a "routingcost" Calendar for the Filtered Cost Map Service at a | |||
| granularity of one day and a "routingcost" Calendar for the Endpoint | granularity of one day and a "routingcost" Calendar for the Endpoint | |||
| Cost Service at a finer granularity but for a limited number of | Cost Service at a finer granularity but for a limited number of | |||
| endpoints. An example IRD with Calendar specific features is | endpoints. An example IRD with Calendar-specific features is | |||
| provided in Section 4.3. | provided in Section 4.3. | |||
| 4.1. Calendar attributes in the IRD resource capabilities | 4.1. Calendar Attributes in the IRD Resource Capabilities | |||
| A Cost Calendar for a given cost type MUST be indicated in the IRD by | A Cost Calendar for a given cost type MUST be indicated in the IRD by | |||
| an object of type CalendarAttributes. A CalendarAttributes object is | an object of type CalendarAttributes. A CalendarAttributes object is | |||
| represented by the "calendar-attributes" member of a resource entry. | represented by the "calendar-attributes" member of a resource entry. | |||
| Member "calendar-attributes" is an array of CalendarAttributes | Member "calendar-attributes" is an array of CalendarAttributes | |||
| objects. Each CalendarAttributes object lists a set of one or more | objects. Each CalendarAttributes object lists a set of one or more | |||
| cost types it applies to. A cost type name MUST NOT appear more than | cost types it applies to. A cost type name MUST NOT appear more than | |||
| once in the "calendar-attributes" member of a resource entry; | once in the "calendar-attributes" member of a resource entry; | |||
| multiple appearances of a cost type name in the CalendarAttributes | multiple appearances of a cost type name in the CalendarAttributes | |||
| object of the "calendar-attributes" member MUST cause the ALTO Client | object of the "calendar-attributes" member MUST cause the ALTO Client | |||
| to ignore any occurrences of this name beyond the first encountered | to ignore any occurrences of this name beyond the first encountered | |||
| occurrence. The Client SHOULD consider the CalendarAttributes object | occurrence. The Client SHOULD consider the CalendarAttributes object | |||
| in the array containing the first encountered occurrence of a cost | in the array containing the first encountered occurrence of a cost | |||
| type as the valid one for this cost type. As an alternative, the | type as the valid one for this cost type. As an alternative, the | |||
| Client may want to avoid the risks of erroneous guidance associated | Client may want to avoid the risks of erroneous guidance associated | |||
| to the use of potentially invalid Calendar values. In this case, the | to the use of potentially invalid Calendar values. In this case, the | |||
| Client MAY ignore the totality of occurences of CalendarAttributes | Client MAY ignore the totality of occurrences of CalendarAttributes | |||
| objects containing the cost type name and query the cost type using | objects containing the cost type name and query the cost type using | |||
| [RFC7285]. | [RFC7285]. | |||
| The encoding format for object CalendarAttributes, using JSON | The encoding format for object CalendarAttributes using JSON | |||
| [RFC8259], is as follows: | [RFC8259] is as follows: | |||
| CalendarAttributes calendar-attributes <1..*>; | CalendarAttributes calendar-attributes <1..*>; | |||
| object{ | object{ | |||
| JSONString cost-type-names <1..*>; | JSONString cost-type-names <1..*>; | |||
| JSONNumber time-interval-size; | JSONNumber time-interval-size; | |||
| JSONNumber number-of-intervals; | JSONNumber number-of-intervals; | |||
| } CalendarAttributes; | } CalendarAttributes; | |||
| o "cost-type-names": | "cost-type-names": | |||
| An array of one or more elements indicating the cost type names in | ||||
| * An array of one or more elements indicating the cost type names | the IRD entry to which the values of "time-interval-size" and | |||
| in the IRD entry to which the values of "time-interval-size" | "number-of-intervals" apply. | |||
| and "number-of-intervals" apply. | ||||
| o "time-interval-size": | ||||
| * is the duration of an ALTO Calendar time interval in a unit of | ||||
| seconds. A "time-interval-size" value contains a non-negative | ||||
| JSONNumber. Example values are: 300 and 7200, meaning that | ||||
| each Calendar value applies on a time interval that lasts 5 | ||||
| minutes and 2 hours, respectively. Since an interval size | ||||
| (e.g., 100 ms) can be smaller than the unit, the value | ||||
| specified may be a floating point (e.g., 0.1). Both ALTO | ||||
| Clients and Servers should be aware of potential precision | ||||
| issues caused by using floating point numbers; for example, the | ||||
| floating number 0.1 cannot be represented precisely using a | ||||
| finite number of binary bits. To improve interoperability and | ||||
| be consistent with [RFC7285] on the use of floating point | ||||
| numbers, the Server and the Client SHOULD use IEEE 754 double- | ||||
| precision floating point [IEEE.754.2008] to store this value. | ||||
| o "number-of-intervals": | "time-interval-size": | |||
| The duration of an ALTO Calendar time interval in a unit of | ||||
| seconds. A "time-interval-size" value contains a non-negative | ||||
| JSONNumber. Example values are 300 and 7200, meaning that each | ||||
| Calendar value applies on a time interval that lasts 5 minutes and | ||||
| 2 hours, respectively. Since an interval size (e.g., 100 ms) can | ||||
| be smaller than the unit, the value specified may be a floating | ||||
| point (e.g., 0.1). Both ALTO Clients and Servers should be aware | ||||
| of potential precision issues caused by using floating point | ||||
| numbers; for example, the floating number 0.1 cannot be | ||||
| represented precisely using a finite number of binary bits. To | ||||
| improve interoperability and be consistent with [RFC7285] on the | ||||
| use of floating point numbers, the Server and the Client SHOULD | ||||
| use IEEE 754 double-precision floating point [IEEE.754.2019] to | ||||
| store this value. | ||||
| * is a strictly positive integer (greater or equal to 1), that | "number-of-intervals": | |||
| indicates the number of values of the Cost Calendar array. | A strictly positive integer (greater or equal to 1) that indicates | |||
| the number of values of the Cost Calendar array. | ||||
| - An ALTO Server SHOULD specify the "time-interval-size" in the IRD | * An ALTO Server SHOULD specify the "time-interval-size" in the IRD | |||
| as the smallest it is able to provide. A Client that needs a longer | as the smallest it is able to provide. A Client that needs a | |||
| interval can aggregate multiple cost values to obtain it. | longer interval can aggregate multiple cost values to obtain it. | |||
| - Attribute "cost-type-names" is associated with "time-interval-size" | * Attribute "cost-type-names" is associated with "time-interval- | |||
| and "number-of-intervals", because multiple cost types may share the | size" and "number-of-intervals", because multiple cost types may | |||
| same values for attributes "time-interval-size" and "number-of- | share the same values for attributes "time-interval-size" and | |||
| intervals". To avoid redundancies, cost type names sharing the same | "number-of-intervals". To avoid redundancies, cost type names | |||
| values for "time-interval-size" and "number-of-intervals" are grouped | sharing the same values for "time-interval-size" and "number-of- | |||
| in the "cost-type-names" attribute. In the example IRD provided in | intervals" are grouped in the "cost-type-names" attribute. In the | |||
| Section 4.3, the information resource "filtered-cost-map-calendar" | example IRD provided in Section 4.3, the information resource | |||
| provides a Calendar for cost type names "num-routingcost", "num- | "filtered-cost-map-calendar" provides a Calendar for cost type | |||
| throughputrating" and "string-servicestatus". Cost type names "num- | names "num-routingcost", "num-throughputrating", and "string- | |||
| routingcost" and "num-throughputrating" are grouped in the "cost- | servicestatus". Cost type names "num-routingcost" and "num- | |||
| type-names" attribute because they share the same values for "time- | throughputrating" are grouped in the "cost-type-names" attribute | |||
| interval-size" and "number-of-intervals", which are respectively 7200 | because they share the same values for "time-interval-size" and | |||
| and 12. | "number-of-intervals", which are respectively 7200 and 12. | |||
| - Multiplying "time-interval-size" by "number-of-intervals" provides | * Multiplying "time-interval-size" by "number-of-intervals" provides | |||
| the duration of the provided Calendar. For example, an ALTO Server | the duration of the provided Calendar. For example, an ALTO | |||
| may provide a Calendar for ALTO values changing every "time-interval- | Server may provide a Calendar for ALTO values changing every | |||
| size" equal to 5 minutes. If "number-of-intervals" has the value 12, | "time-interval-size" equal to 5 minutes. If "number-of-intervals" | |||
| then the duration of the provided Calendar is 1 hour. | has the value 12, then the duration of the provided Calendar is 1 | |||
| hour. | ||||
| 4.2. Calendars in a delegate IRD | 4.2. Calendars in a Delegate IRD | |||
| It may be useful to distinguish IRD resources supported by the base | It may be useful to distinguish IRD resources supported by the base | |||
| ALTO protocol from resources supported by its extensions. To achieve | ALTO protocol from resources supported by its extensions. To achieve | |||
| this, one option, is that a "root" ALTO Server implementing [RFC7285] | this, one option is that a "root" ALTO Server implementing [RFC7285] | |||
| resources and running at a given domain, delegates "specialized" | resources and running at a given domain delegates "specialized" | |||
| information resources such as the ones providing Cost Calendars, to | information resources, such as the ones providing Cost Calendars, to | |||
| another ALTO Server running in a subdomain. The "root" ALTO Server | another ALTO Server running in a subdomain. The "root" ALTO Server | |||
| can provide a Calendar-specific resource entry, that has a media-type | can provide a Calendar-specific resource entry that has a media-type | |||
| of "application/alto-directory+json" and that specifies the URI | of "application/alto-directory+json" and that specifies the URI | |||
| allowing to retrieve the location of a Calendar-aware Server and | allowing to retrieve the location of a Calendar-aware Server and | |||
| discover its resources. This option is described in Section 9.2.4 | discover its resources. This option is described in "Delegation | |||
| "Delegation using IRDs" of [RFC7285]. | Using IRD" (Section 9.2.4 of [RFC7285]). | |||
| This document provides an example, where a "root" ALTO Server runs in | This document provides an example where a "root" ALTO Server runs in | |||
| a domain called "alto.example.com". It delegates the announcement of | a domain called "alto.example.com". It delegates the announcement of | |||
| Calendars capabilities to an ALTO Server running in a subdomain | Calendars capabilities to an ALTO Server running in a subdomain | |||
| called "custom.alto.example.com". The location of the "delegate | called "custom.alto.example.com". The location of the "delegate | |||
| Calendar IRD" is assumed to be indicated in the "root" IRD by the | Calendar IRD" is assumed to be indicated in the "root" IRD by the | |||
| resource entry: "custom-calendared-resources". | resource entry: "custom-calendared-resources". | |||
| Another benefit of delegation is that some cost types for some | Another benefit of delegation is that some cost types for some | |||
| resources may be more advantageous as Cost Calendars and it makes | resources may be more advantageous as Cost Calendars, and it makes | |||
| little sense to get them as a single value. For example, if a cost | little sense to get them as a single value. For example, if a cost | |||
| type has predictable and frequently changing values, calendared in | type has predictable and frequently changing values calendared in | |||
| short time intervals such as a minute, it saves time and network | short time intervals, such as a minute, it saves time and network | |||
| resources to track the cost values via a focused delegate Server | resources to track the cost values via a focused delegate Server | |||
| rather than the more general "root" Server. | rather than the more general "root" Server. | |||
| 4.3. Example IRD with ALTO Cost Calendars | 4.3. Example IRD with ALTO Cost Calendars | |||
| This section provides an example ALTO Server IRD that supports | This section provides an example ALTO Server IRD that supports | |||
| various cost metrics and cost modes. In particular, since [RFC7285] | various cost metrics and cost modes. In particular, since [RFC7285] | |||
| makes it mandatory, the Server uses metric "routingcost" in the | makes it mandatory, the Server uses metric "routingcost" in the | |||
| "numerical" mode. | "numerical" mode. | |||
| For illustrative purposes, this section introduces 3 other fictitious | For illustrative purposes, this section introduces 3 other fictitious | |||
| example metrics and modes that should be understood as examples and | example metrics and modes that should be understood as examples and | |||
| should not be used or considered as normative. | should not be used or considered as normative. | |||
| The cost type names used in the example IRD are as follows: | The cost type names used in the example IRD are as follows: | |||
| o "num-routingcost": refers to metric "routingcost" in the numerical | "num-routingcost": | |||
| mode as defined in [RFC7285] and registered with IANA. | Refers to metric "routingcost" in the numerical mode, as defined | |||
| in [RFC7285] and registered with IANA. | ||||
| o "num-owdelay": refers to fictitious performance metric "owdelay" | "num-owdelay": | |||
| in the "numerical" mode, to reflect the one-way packet | Refers to fictitious performance metric "owdelay" in the | |||
| transmission delay on a path. A related performance metric is | "numerical" mode to reflect the one-way packet transmission delay | |||
| currently under definition in [I-D.ietf-alto-performance-metrics]. | on a path. A related performance metric is currently under | |||
| definition in [ALTO_METRICS]. | ||||
| o "num-throughputrating": refers to fictitious metric | "num-throughputrating": | |||
| "throughputrating" in the "numerical" mode, to reflect the | Refers to fictitious metric "throughputrating" in the "numerical" | |||
| provider preference in terms of end to end throughput. | mode to reflect the provider preference in terms of end-to-end | |||
| throughput. | ||||
| o "string-servicestatus": refers to fictitious metric | "string-servicestatus": | |||
| "servicestatus" containing a string, to reflect the availability, | Refers to fictitious metric "servicestatus" containing a string to | |||
| defined by the provider, of for instance path connectivity. | reflect the availability, defined by the provider, of, for | |||
| instance, path connectivity. | ||||
| The example IRD includes 2 particular URIs providing Calendars: | The example IRD includes 2 particular URIs providing Calendars: | |||
| o "https://custom.alto.example.com/calendar/costmap/filtered": a | "https://custom.alto.example.com/calendar/costmap/filtered": | |||
| Filtered Cost Map in which Calendar capabilities are indicated for | A Filtered Cost Map in which Calendar capabilities are indicated | |||
| cost type names: "num-routingcost", "num-throughputrating" and | for cost type names "num-routingcost", "num-throughputrating", and | |||
| "string-servicestatus", | "string-servicestatus" and | |||
| o "https://custom.alto.example.com/calendar/endpointcost/lookup": an | "https://custom.alto.example.com/calendar/endpointcost/lookup": | |||
| Endpoint Cost Map in which Calendar capabilities are indicated for | An Endpoint Cost Map in which Calendar capabilities are indicated | |||
| cost type names: "num-routingcost", "num-owdelay", "num- | for cost type names "num-routingcost", "num-owdelay", "num- | |||
| throughputrating", "string-servicestatus". | throughputrating", and "string-servicestatus". | |||
| The design of the Calendar capabilities allows some Calendars with | The design of the Calendar capabilities allows some Calendars with | |||
| the same cost type name to be available in several information | the same cost type name to be available in several information | |||
| resources with different Calendar Attributes. This is the case for | resources with different Calendar attributes. This is the case for | |||
| Calendars on "num-routingcost", "num-throughputrating" and "string- | Calendars on "num-routingcost", "num-throughputrating", and "string- | |||
| servicestatus", available in both the Filtered Cost map and Endpoint | servicestatus", available in both the Filtered Cost Map and Endpoint | |||
| Cost Service, but with different time interval sizes for "num- | Cost Service but with different time interval sizes for "num- | |||
| throughputrating" and "string-servicestatus". | throughputrating" and "string-servicestatus". | |||
| --- Client to Server request for IRD ---------- | --- Client to Server request for IRD ---------- | |||
| GET /calendars-directory HTTP/1.1 | GET /calendars-directory HTTP/1.1 | |||
| Host: custom.alto.example.com | Host: custom.alto.example.com | |||
| Accept: application/alto-directory+json,application/alto-error+json | Accept: application/alto-directory+json,application/alto-error+json | |||
| --- Server response to Client ----------------- | --- Server response to Client ----------------- | |||
| skipping to change at page 16, line 27 ¶ | skipping to change at line 741 ¶ | |||
| "number-of-intervals" : 30 | "number-of-intervals" : 30 | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| In this example IRD, for the Filtered Cost Map Service: | In this example IRD, for the Filtered Cost Map Service: | |||
| o the Calendar for "num-routingcost" and "num-throughputrating" is | * the Calendar for "num-routingcost" and "num-throughputrating" is | |||
| an array of 12 values each provided on a time interval lasting | an array of 12 values, each provided on a time interval lasting | |||
| 7200 seconds (2 hours). | 7200 seconds (2 hours) and | |||
| o the Calendar for "string-servicestatus": "is an array of 48 values | * the Calendar for "string-servicestatus" is an array of 48 values, | |||
| each provided on a time interval lasting 1800 seconds (30 | each provided on a time interval lasting 1800 seconds (30 | |||
| minutes). | minutes). | |||
| For the Endpoint Cost Service: | For the Endpoint Cost Service: | |||
| o the Calendar for "num-routingcost": is an array of 24 values each | * the Calendar for "num-routingcost" is an array of 24 values, each | |||
| provided on a time interval lasting 3600 seconds (1 hour). | provided on a time interval lasting 3600 seconds (1 hour), | |||
| o the Calendar for "num-owdelay": is an array of 12 values each | * the Calendar for "num-owdelay" is an array of 12 values, each | |||
| provided on a time interval lasting 300 seconds (5 minutes). | provided on a time interval lasting 300 seconds (5 minutes), | |||
| o the Calendar for "num-throughputrating": is an array of 60 values | * the Calendar for "num-throughputrating" is an array of 60 values, | |||
| each provided on a time interval lasting 60 seconds (1 minute). | each provided on a time interval lasting 60 seconds (1 minute), | |||
| and | ||||
| o the Calendar for "string-servicestatus": "is an array of 30 values | * the Calendar for "string-servicestatus" is an array of 30 values, | |||
| each provided on a time interval lasting 120 seconds (2 minutes). | each provided on a time interval lasting 120 seconds (2 minutes). | |||
| Note that in this example IRD, member "cost-constraints" is present | Note that in this example IRD, member "cost-constraints" is present | |||
| with a value set to "true" in both information resources "filtered- | with a value set to "true" in both information resources "filtered- | |||
| cost-map-calendar" and "endpoint-cost-map-calendar". Although a | cost-map-calendar" and "endpoint-cost-map-calendar". Although a | |||
| Calendar-aware ALTO Server does not support constraints for the | Calendar-aware ALTO Server does not support constraints for the | |||
| reasons explained in section Section 3.3, it MUST support constraints | reasons explained in Section 3.3, it MUST support constraints on cost | |||
| on cost types that are not requested as Calendars but are requested | types that are not requested as Calendars but are requested as | |||
| as specified in [RFC7285] and [RFC8189]. | specified in [RFC7285] and [RFC8189]. | |||
| 5. ALTO Calendar specification: Service Information Resources | 5. ALTO Calendar Specification: Service Information Resources | |||
| This section documents extensions to two basic ALTO information | This section documents extensions to two basic ALTO information | |||
| resources (Filtered Cost Maps and Endpoint Cost Service) to provide | resources (Filtered Cost Maps and Endpoint Cost Service) to provide | |||
| calendared information services for them. | calendared information services for them. | |||
| Both extensions return calendar start time (calendar-start-time, a | Both extensions return calendar start time (calendar-start-time, a | |||
| point in time), which MUST be specified as an HTTP "Date" header | point in time), which MUST be specified as an HTTP "Date" header | |||
| field using the IMF-fixdate format specified in Section 7.1.1.1 of | field using the IMF-fixdate format specified in Section 7.1.1.1 of | |||
| [RFC7231]. Note that the IMF-fixdate format uses "GMT", not "UTC", | [RFC7231]. Note that the IMF-fixdate format uses "GMT", not "UTC", | |||
| to designate the time zone, as in this example: | to designate the time zone, as in this example: | |||
| Date: Tue, 15 Nov 2019 08:12:31 GMT | Date: Tue, 15 Nov 2019 08:12:31 GMT | |||
| 5.1. Calendar extensions for Filtered Cost Maps (FCM) | 5.1. Calendar Extensions for Filtered Cost Maps (FCM) | |||
| A legacy ALTO Client requests and gets Filtered Cost Map responses as | A legacy ALTO Client requests and gets Filtered Cost Map responses, | |||
| specified in [RFC7285]. | as specified in [RFC7285]. | |||
| 5.1.1. Calendar extensions in Filtered Cost Map requests | 5.1.1. Calendar Extensions in Filtered Cost Map Requests | |||
| The input parameters of a "legacy" request for a Filtered Cost Map, | The input parameters of a "legacy" request for a Filtered Cost Map, | |||
| defined by object ReqFilteredCostMap in section 11.3.2 of [RFC7285], | defined by object ReqFilteredCostMap in Section 11.3.2 of [RFC7285], | |||
| are augmented with one additional member. The same augmentation | are augmented with one additional member. The same augmentation | |||
| applies to object ReqFilteredCostMap defined in section 4.1.2 of | applies to object ReqFilteredCostMap defined in Section 4.1.2 of | |||
| [RFC8189]. | [RFC8189]. | |||
| A Calendar-aware ALTO Client requesting a Calendar on a given Cost | A Calendar-aware ALTO Client requesting a Calendar on a given cost | |||
| Type for a Filtered Cost Map resource having Calendar capabilities | type for a Filtered Cost Map resource having Calendar capabilities | |||
| MUST add the following field to its input parameters: | MUST add the following field to its input parameters: | |||
| JSONBoolean calendared<1..*>; | JSONBoolean calendared<1..*>; | |||
| This field is an array of 1 to N boolean values, where N is the | This field is an array of 1 to N boolean values, where N is the | |||
| number of requested metrics. N is greater than 1 when the Client and | number of requested metrics. N is greater than 1 when the Client and | |||
| the Server also implement [RFC8189]. | the Server also implement [RFC8189]. | |||
| Each entry corresponds to the requested metric at the same array | Each entry corresponds to the requested metric at the same array | |||
| position. Each boolean value indicates whether or not the ALTO | position. Each boolean value indicates whether or not the ALTO | |||
| Server should provide the values for this cost type as a Calendar. | Server should provide the values for this cost type as a Calendar. | |||
| The array MUST contain exactly N boolean values, otherwise, the | The array MUST contain exactly N boolean values, otherwise, the | |||
| Server returns an error. | Server returns an error. | |||
| This field MUST NOT be included if no member "calendar-attributes" is | This field MUST NOT be included if no member "calendar-attributes" is | |||
| specified in this information resource. | specified in this information resource. | |||
| If a value of field "calendared" is 'true' for a cost type name for | If a value of field "calendared" is 'true' for a cost type name for | |||
| which no Calendar attributes have been specified: an ALTO Server, | which no Calendar attributes have been specified, an ALTO Server, | |||
| whether it implements the extensions of this document or only | whether it implements the extensions of this document or only | |||
| implements [RFC7285], MUST ignore it and return a response with a | implements [RFC7285], MUST ignore it and return a response with a | |||
| single cost value as specified in [RFC7285]. | single cost value, as specified in [RFC7285]. | |||
| If this field is not present, it MUST be assumed to have only values | If this field is not present, it MUST be assumed to have only values | |||
| equal to 'false'. | equal to 'false'. | |||
| A Calendar-aware ALTO Client that supports requests for only one cost | A Calendar-aware ALTO Client that supports requests for only one cost | |||
| type at a time and wants to request a Calendar MUST provide an array | type at a time and wants to request a Calendar MUST provide an array | |||
| of 1 element: | of 1 element: | |||
| "calendared" : [true], | "calendared" : [true], | |||
| A Calendar-aware ALTO Client that supports requests for more than one | A Calendar-aware ALTO Client that supports requests for more than one | |||
| cost types at a time, as specified in [RFC8189] MUST provide an array | cost type at a time, as specified in [RFC8189], MUST provide an array | |||
| of N values set to 'true' or 'false', depending whether it wants the | of N values set to 'true' or 'false', depending whether it wants the | |||
| applicable cost type values as a single or calendared value. | applicable cost type values as a single or calendared value. | |||
| 5.1.2. Calendar extensions in Filtered Cost Map responses | 5.1.2. Calendar Extensions in Filtered Cost Map Responses | |||
| In a calendared ALTO Filtered Cost Map, a cost value between a source | In a calendared ALTO Filtered Cost Map, a cost value between a source | |||
| and a destination is a JSON array of JSON values. An ALTO Calendar | and a destination is a JSON array of JSON values. An ALTO Calendar | |||
| values array has a number of values equal to the value of member | values array has a number of values equal to the value of member | |||
| "number-of-intervals" of the Calendar attributes that are indicated | "number-of-intervals" of the Calendar attributes that are indicated | |||
| in the IRD. These attributes will be conveyed as metadata in the | in the IRD. These attributes will be conveyed as metadata in the | |||
| Filtered Cost Map response. Each element of the array is valid for | Filtered Cost Map response. Each element of the array is valid for | |||
| the time-interval that matches its array position. | the time interval that matches its array position. | |||
| The FCM response conveys metadata among which: | The FCM response conveys metadata, among which: | |||
| o some are not specific to Calendars and ensure compatibility with | * some are not specific to Calendars and ensure compatibility with | |||
| [RFC7285] and [RFC8189] | [RFC7285] and [RFC8189] and | |||
| o some are specific to Calendars. | * some are specific to Calendars. | |||
| The non Calendar-specific "meta" fields of a calendared Filtered Cost | The non-Calendar-specific "meta" fields of a calendared Filtered Cost | |||
| Map response MUST include at least: | Map response MUST include at least: | |||
| o if the ALTO Client requests cost values for one cost type at a | * if the ALTO Client requests cost values for one cost type at a | |||
| time only: the "meta" fields specified in [RFC7285] for these | time, only the "meta" fields specified in [RFC7285] for these | |||
| information service responses: | information service responses: | |||
| * "dependent-vtags ", | - "dependent-vtags" and | |||
| * "cost-type" field. | ||||
| o if the ALTO Client implements the Multi-Cost ALTO extension | - "cost-type" field. | |||
| * if the ALTO Client implements the Multi-Cost ALTO extension | ||||
| specified in [RFC8189] and requests cost values for several cost | specified in [RFC8189] and requests cost values for several cost | |||
| types at a time: the "meta" fields specified in [RFC8189] for | types at a time, the "meta" fields specified in [RFC8189] for | |||
| these information service responses: | these information service responses: | |||
| * "dependent-vtags ", | - "dependent-vtags", | |||
| * "cost-type" field with value set to '{}', for backwards | - "cost-type" field with value set to '{}', for backwards | |||
| compatibility with [RFC7285]. | compatibility with [RFC7285], and | |||
| * "multi-cost-types" field. | - "multi-cost-types" field. | |||
| If the Client request does not provide member "calendared" or if it | If the Client request does not provide member "calendared" or if it | |||
| provides it with a value equal to 'false', for all the requested cost | provides it with a value equal to 'false' for all the requested cost | |||
| types, then the ALTO Server response is exactly as specified in | types, then the ALTO Server response is exactly as specified in | |||
| [RFC7285] and [RFC8189]. | [RFC7285] and [RFC8189]. | |||
| If the value of member "calendared" is equal to 'false' for a given | If the value of member "calendared" is equal to 'false' for a given | |||
| requested cost type, the ALTO Server MUST return, for this cost type, | requested cost type, the ALTO Server MUST return, for this cost type, | |||
| a single cost value as specified in [RFC7285]. | a single cost value as specified in [RFC7285]. | |||
| If the value of member "calendared" is equal to 'true' for a given | If the value of member "calendared" is equal to 'true' for a given | |||
| requested cost type, the ALTO Server returns, for this cost type, a | requested cost type, the ALTO Server returns, for this cost type, a | |||
| cost value Calendar as specified above in this section. In addition | cost value Calendar, as specified above in this section. In addition | |||
| to the above cited non Calendar specific "meta" members, the Server | to the above cited non-Calendar-specific "meta" members, the Server | |||
| MUST provide a Calendar specific metadata field. | MUST provide a Calendar-specific metadata field. | |||
| The Calendar-specific "meta" field that a calendared Filtered Cost | The Calendar-specific "meta" field that a calendared Filtered Cost | |||
| Map response MUST include is a member called "calendar-response- | Map response MUST include is a member called "calendar-response- | |||
| attributes", that describes properties of the Calendar and where: | attributes", which describes properties of the Calendar and where: | |||
| o member "calendar-response-attributes" is an array of one or more | * member "calendar-response-attributes" is an array of one or more | |||
| objects of type "CalendarResponseAttributes". | objects of type "CalendarResponseAttributes", | |||
| o each "CalendarResponseAttributes" object in the array is specified | * each "CalendarResponseAttributes" object in the array is specified | |||
| for one or more cost types for which the value of member | for one or more cost types for which the value of member | |||
| "calendared", in object ReqFilteredCostMap provided in the Client | "calendared", in object ReqFilteredCostMap provided in the Client | |||
| request, is equal to 'true' and for which a Calendar is provided | request, is equal to 'true' and for which a Calendar is provided | |||
| for the requested information resource. | for the requested information resource, and | |||
| o the "CalendarResponseAttributes" object that applies to a cost | * the "CalendarResponseAttributes" object that applies to a cost | |||
| type name has a corresponding "CalendarAttributes" object defined | type name has a corresponding "CalendarAttributes" object defined | |||
| for this cost type name in the IRD capabilities of the requested | for this cost type name in the IRD capabilities of the requested | |||
| information resource. This object is the entry, in the "calendar- | information resource. This object is the entry in the "calendar- | |||
| attributes" array member of the IRD resource entry, that includes | attributes" array member of the IRD resource entry, which includes | |||
| the name of the requested cost type. This corresponding | the name of the requested cost type. This corresponding | |||
| "CalendarAttributes" object has the same values as object | "CalendarAttributes" object has the same values as object | |||
| "CalendarResponseAttributes" for members "time-interval-size" and | "CalendarResponseAttributes" for members "time-interval-size" and | |||
| "number-of-intervals". The members of the | "number-of-intervals". The members of the | |||
| "CalendarResponseAttributes" object include all the members of the | "CalendarResponseAttributes" object include all the members of the | |||
| corresponding "CalendarAttributes" object. | corresponding "CalendarAttributes" object. | |||
| The format of member "CalendarResponseAttributes is defined as | The format of member "CalendarResponseAttributes is defined as | |||
| follows: | follows: | |||
| skipping to change at page 20, line 25 ¶ | skipping to change at line 933 ¶ | |||
| object{ | object{ | |||
| [JSONString cost-type-names <1..*>;] | [JSONString cost-type-names <1..*>;] | |||
| JSONString calendar-start-time; | JSONString calendar-start-time; | |||
| JSONNumber time-interval-size; | JSONNumber time-interval-size; | |||
| JSONNumber number-of-intervals; | JSONNumber number-of-intervals; | |||
| [JSONNumber repeated;] | [JSONNumber repeated;] | |||
| } CalendarResponseAttributes; | } CalendarResponseAttributes; | |||
| Object CalendarResponseAttributes has the following attributes: | Object CalendarResponseAttributes has the following attributes: | |||
| o "cost-type-names": is an array of one or more cost-type-names to | "cost-type-names": | |||
| which the value of the other members of CalendarResponseAttributes | An array of one or more cost type names to which the value of the | |||
| apply and for which a Calendar has been requested. The value of | other members of CalendarResponseAttributes apply and for which a | |||
| this member is a subset of the "cost-type-names" member of the | Calendar has been requested. The value of this member is a subset | |||
| abovementioned corresponding "CalendarAttributes" object in the | of the "cost-type-names" member of the abovementioned | |||
| "calendar-attributes" array member in the IRD. This member MUST | corresponding "CalendarAttributes" object in the "calendar- | |||
| be present when Cost Calendars are provided for more than one cost | attributes" array member in the IRD. This member MUST be present | |||
| type. | when Cost Calendars are provided for more than one cost type. | |||
| o "calendar-start-time": indicates the date at which the first value | "calendar-start-time": | |||
| of the Calendar applies. The value is a string that, as specified | Indicates the date at which the first value of the Calendar | |||
| in Section 5, contains an HTTP "Date" header field using the IMF- | applies. The value is a string that, as specified in Section 5, | |||
| fixdate format specified in Section 7.1.1.1 of [RFC7231]. The | contains an HTTP "Date" header field using the IMF-fixdate format | |||
| value provided for attribute "calendar-start-time" SHOULD NOT be | specified in Section 7.1.1.1 of [RFC7231]. The value provided for | |||
| later than the request date. | attribute "calendar-start-time" SHOULD NOT be later than the | |||
| request date. | ||||
| o "time-interval-size": as specified in Section 4.1 and with the | "time-interval-size": | |||
| same value as in the abovementioned corresponding | As specified in Section 4.1 and with the same value as in the | |||
| "CalendarAttributes" object. | abovementioned corresponding "CalendarAttributes" object. | |||
| o "number-of-intervals": as specified in Section 4.1 and with the | "number-of-intervals": | |||
| same value as in the abovementioned corresponding | As specified in Section 4.1 and with the same value as in the | |||
| "CalendarAttributes" object. | abovementioned corresponding "CalendarAttributes" object. | |||
| o "repeated": is an optional field provided for Calendars. It is an | "repeated": | |||
| integer N greater or equal to '1' that indicates how many | An optional field provided for Calendars. It is an integer N | |||
| iterations of the Calendar value array starting at the date | greater or equal to '1' that indicates how many iterations of the | |||
| indicated by "calendar-start-time" have the same values. The | Calendar value array starting at the date indicated by "calendar- | |||
| number N includes the iteration provided in the returned response. | start-time" have the same values. The number N includes the | |||
| iteration provided in the returned response. | ||||
| For example: suppose the "calendar-start-time" member has value "Mon, | For example, suppose the "calendar-start-time" member has value "Mon, | |||
| 30 Jun 2019 00:00:00 GMT", the "time-interval-size" member has value | 30 Jun 2019 00:00:00 GMT", the "time-interval-size" member has value | |||
| '3600', the "number-of-intervals" member has value '24' and the value | '3600', the "number-of-intervals" member has value '24', and the | |||
| of member "repeated" is equal to '4'. This means that the Calendar | value of member "repeated" is equal to '4'. This means that the | |||
| values are the same on Monday, Tuesday, Wednesday and Thursday on a | Calendar values are the same on Monday, Tuesday, Wednesday, and | |||
| period of 24 hours starting at 00:00:00 GMT. The ALTO Client thus | Thursday on a period of 24 hours starting at 00:00:00 GMT. The ALTO | |||
| may use the same Calendar for the next 4 days starting at "calendar- | Client thus may use the same Calendar for the next 4 days starting at | |||
| start-time" and will only need to request a new one for Friday July | "calendar-start-time" and will only need to request a new one for | |||
| 4th at 00:00:00 GMT. | Friday, July 4th at 00:00:00 GMT. | |||
| Attribute "repeated" may take a very high value if a Calendar | Attribute "repeated" may take a very high value if a Calendar | |||
| represents a cyclic value pattern that the Server considers valid for | represents a cyclic value pattern that the Server considers valid for | |||
| a long period and hence will only update once this period has elapsed | a long period and hence will only update once this period has elapsed | |||
| or if an unexpected event occurs on the network. In the latter case, | or if an unexpected event occurs on the network. In the latter case, | |||
| the Client will be notified if it uses the "ALTO Incremental Updates | the Client will be notified if it uses the "ALTO Incremental Updates | |||
| Using Server-Sent Events (SSE)" Service, specified in | Using Server-Sent Events (SSE)" Service, specified in [RFC8895]. To | |||
| [I-D.ietf-alto-incr-update-sse]. To this end, it is RECOMMENDED that | this end, it is RECOMMENDED that ALTO Servers providing ALTO | |||
| ALTO Servers providing ALTO Calendars also provide the "ALTO | Calendars also provide the "ALTO Incremental Updates Using Server- | |||
| Incremental Updates Using Server-Sent Events (SSE)" Service that is | Sent Events (SSE)" Service, which is specified in [RFC8895]. | |||
| specified in [I-D.ietf-alto-incr-update-sse]. Likewise, ALTO Clients | Likewise, ALTO Clients capable of using ALTO Calendars SHOULD also | |||
| capable of using ALTO Calendars SHOULD also use the SSE Service. See | use the SSE Service. See also discussion in Section 8 "Operational | |||
| also discussion in Section 8 "Operational Considerations". | Considerations". | |||
| 5.1.3. Use case and example: FCM with a bandwidth Calendar | 5.1.3. Use Case and Example: FCM with a Bandwidth Calendar | |||
| An example of non-real-time information that can be provisioned in a | An example of non-real-time information that can be provisioned in a | |||
| Calendar is the expected path throughput. While the transmission | Calendar is the expected path throughput. While the transmission | |||
| rate can be measured in real time by end systems, the operator of a | rate can be measured in real time by end systems, the operator of a | |||
| data center is in the position of formulating preferences for given | data center is in the position of formulating preferences for given | |||
| paths, at given time periods to avoid traffic peaks due to diurnal | paths at given time periods to avoid traffic peaks due to diurnal | |||
| usage patterns. In this example, we assume that an ALTO Client | usage patterns. In this example, we assume that an ALTO Client | |||
| requests a Calendar of network-provider-defined throughput ratings, | requests a Calendar of network-provider-defined throughput ratings as | |||
| as specified in the IRD, to schedule its bulk data transfers as | specified in the IRD to schedule its bulk data transfers as described | |||
| described in the use cases. | in the use cases. | |||
| In the example IRD, Calendars for cost type name "num- | In the example IRD, Calendars for cost type name "num- | |||
| throughputrating" are available for the information resources: | throughputrating" are available for the information resources | |||
| "filtered-cost-calendar-map" and "endpoint-cost-map-calendar". The | "filtered-cost-calendar-map" and "endpoint-cost-map-calendar". The | |||
| ALTO Client requests a Calendar for "num-throughputrating" via a POST | ALTO Client requests a Calendar for "num-throughputrating" via a POST | |||
| request for a Filtered Cost Map. | request for a Filtered Cost Map. | |||
| We suppose in the present example that the ALTO Client sends its | We suppose in the present example that the ALTO Client sends its | |||
| request on Tuesday July 1st 2019 at 13:15. The Server returns | request on Tuesday, July 1st 2019 at 13:15. The Server returns | |||
| Calendars with arrays of 12 numbers for each source and destination | Calendars with arrays of 12 numbers for each source and destination | |||
| pair. The values for metric "throughputrating", in this example, are | pair. The values for metric "throughputrating", in this example, are | |||
| assumed to be encoded in 2 digits. | assumed to be encoded in 2 digits. | |||
| POST /calendar/costmap/filtered HTTP/1.1 | POST /calendar/costmap/filtered HTTP/1.1 | |||
| Host: custom.alto.example.com | Host: custom.alto.example.com | |||
| Content-Length: 217 | Content-Length: 217 | |||
| Content-Type: application/alto-costmapfilter+json | Content-Type: application/alto-costmapfilter+json | |||
| Accept: application/alto-costmap+json,application/alto-error+json | Accept: application/alto-costmap+json,application/alto-error+json | |||
| skipping to change at page 23, line 10 ¶ | skipping to change at line 1063 ¶ | |||
| 14, 14, 12, 12, 14, 16] }, | 14, 14, 12, 12, 14, 16] }, | |||
| "PID2": { "PID1": [17, 18, 19, 10, 11, 12, | "PID2": { "PID1": [17, 18, 19, 10, 11, 12, | |||
| 13, 14, 15, 16, 17, 18], | 13, 14, 15, 16, 17, 18], | |||
| "PID2": [20, 20, 18, 16, 14, 14, | "PID2": [20, 20, 18, 16, 14, 14, | |||
| 14, 16, 16, 16, 14, 16], | 14, 16, 16, 16, 14, 16], | |||
| "PID3": [20, 20, 18, 14, 12, 12, | "PID3": [20, 20, 18, 14, 12, 12, | |||
| 14, 14, 12, 12, 14, 16] } | 14, 14, 12, 12, 14, 16] } | |||
| } | } | |||
| } | } | |||
| 5.2. Calendar extensions in the Endpoint Cost Service | 5.2. Calendar Extensions in the Endpoint Cost Service | |||
| This document extends the Endpoint Cost Service, as defined in | This document extends the Endpoint Cost Service, as defined in | |||
| {11.5.1} of [RFC7285], by adding new input parameters and | Section 11.5.1 of [RFC7285], by adding new input parameters and | |||
| capabilities, and by returning JSONArrays instead of JSONNumbers as | capabilities and by returning JSONArrays instead of JSONNumbers as | |||
| the cost values. The media type {11.5.1.1} and HTTP method | the cost values. The media type (Section 11.5.1.1 of [RFC7285]) and | |||
| {11.5.1.2} are unchanged. | HTTP method (Section 11.5.1.2 of [RFC7285]) are unchanged. | |||
| 5.2.1. Calendar specific input in Endpoint Cost requests | 5.2.1. Calendar-Specific Input in Endpoint Cost Requests | |||
| The extensions to the requests for calendared Endpoint Cost Maps are | The extensions to the requests for calendared Endpoint Cost Maps are | |||
| the same as for the Filtered Cost Map Service, specified in | the same as for the Filtered Cost Map Service, specified in | |||
| Section 5.1.1 of this document. Likewise, the rules defined around | Section 5.1.1 of this document. Likewise, the rules defined around | |||
| the extensions to ECM requests are the same as those defined in | the extensions to ECM requests are the same as those defined in | |||
| Section 5.1.1 for FCM requests. | Section 5.1.1 for FCM requests. | |||
| The ReqEndpointCostMap object for a calendared ECM request will have | The ReqEndpointCostMap object for a calendared ECM request will have | |||
| the following format: | the following format: | |||
| skipping to change at page 23, line 43 ¶ | skipping to change at line 1096 ¶ | |||
| EndpointFilter endpoints; | EndpointFilter endpoints; | |||
| } ReqEndpointCostMap; | } ReqEndpointCostMap; | |||
| object { | object { | |||
| [TypedEndpointAddr srcs<0..*>;] | [TypedEndpointAddr srcs<0..*>;] | |||
| [TypedEndpointAddr dsts<0..*>;] | [TypedEndpointAddr dsts<0..*>;] | |||
| } EndpointFilter; | } EndpointFilter; | |||
| Member "cost-type" is optional because, in the ReqEndpointCostMap | Member "cost-type" is optional because, in the ReqEndpointCostMap | |||
| object definition of this document, it is jointly present with member | object definition of this document, it is jointly present with member | |||
| "multi-cost-types", to ensure compatibility with RFC 8189. In | "multi-cost-types" to ensure compatibility with [RFC8189]. In | |||
| RFC8189, members "cost-type" and "multi-cost-types" are both optional | [RFC8189], members "cost-type" and "multi-cost-types" are both | |||
| and have to obey the rule specified in section 4.1.2 of 8189 saying | optional and have to obey the rule specified in Section 4.1.2 of | |||
| that: "the Client MUST specify either "cost-type" or "multi-cost- | [RFC8189] stating that "the Client MUST specify either "cost-type" or | |||
| types" but MUST NOT specify both". | "multi-cost-types" but MUST NOT specify both". | |||
| The interpretation of member "calendared" is the same as for the | The interpretation of member "calendared" is the same as for the | |||
| ReqFilteredCostMap object defined in Section 5.1.1 of this document. | ReqFilteredCostMap object defined in Section 5.1.1 of this document. | |||
| The interpretation of the other members is the same as for object | The interpretation of the other members is the same as for object | |||
| ReqEndpointCostMap is defined in [RFC7285] and [RFC8189]. The type | ReqEndpointCostMap defined in [RFC7285] and [RFC8189]. The type | |||
| TypedEndpointAddr is defined in section 10.4.1 of [RFC7285]. | TypedEndpointAddr is defined in Section 10.4.1 of [RFC7285]. | |||
| For the reasons explained in section Section 3.3, a Calendar-aware | For the reasons explained in Section 3.3, a Calendar-aware ALTO | |||
| ALTO Server does not support constraints. Therefore, member | Server does not support constraints. Therefore, member | |||
| "[constraints]" is not present in the ReqEndpointCostMap object and | "[constraints]" is not present in the ReqEndpointCostMap object, and | |||
| member "constraints" MUST NOT be present in the input parameters of a | member "constraints" MUST NOT be present in the input parameters of a | |||
| request for an Endpoint Cost Calendar. If this member is present, | request for an Endpoint Cost Calendar. If this member is present, | |||
| the Server MUST ignore it. | the Server MUST ignore it. | |||
| 5.2.2. Calendar attributes in the Endpoint Cost response | 5.2.2. Calendar Attributes in the Endpoint Cost Response | |||
| The "meta" field of a calendared Endpoint Cost response MUST include | The "meta" field of a calendared Endpoint Cost response MUST include | |||
| at least: | at least: | |||
| o if the ALTO Client supports cost values for one cost type at a | * if the ALTO Client supports cost values for one cost type at a | |||
| time only: the "meta" fields specified in {11.5.1.6} of [RFC7285] | time only, the "meta" fields specified in Section 11.5.1.6 of | |||
| for the Endpoint Cost response: | [RFC7285] for the Endpoint Cost response: | |||
| * "cost-type" field. | - "cost-type" field. | |||
| o if the ALTO Client supports cost values for several cost types at | * if the ALTO Client supports cost values for several cost types at | |||
| a time, as specified in [RFC8189] : the "meta" fields specified in | a time, as specified in [RFC8189], the "meta" fields specified in | |||
| [RFC8189] for the the Endpoint Cost response: | [RFC8189] for the Endpoint Cost response: | |||
| * "cost-type" field with value set to '{}', for backwards | - "cost-type" field with value set to '{}', for backwards | |||
| compatibility with [RFC7285]. | compatibility with [RFC7285]. | |||
| * "multi-cost-types" field. | - "multi-cost-types" field. | |||
| If the Client request does not provide member "calendared" or if it | If the Client request does not provide member "calendared" or if it | |||
| provides it with a value equal to 'false', for all the requested Cost | provides it with a value equal to 'false', for all the requested cost | |||
| Types, then the ALTO Server response is exactly as specified in | types, then the ALTO Server response is exactly as specified in | |||
| [RFC7285] and [RFC8189]. | [RFC7285] and [RFC8189]. | |||
| If the ALTO Client provides member "calendared" in the input | If the ALTO Client provides member "calendared" in the input | |||
| parameters with a value equal to 'true' for given requested Cost | parameters with a value equal to 'true' for given requested cost | |||
| Types, the "meta" member of a calendared Endpoint Cost response MUST | types, the "meta" member of a calendared Endpoint Cost response MUST | |||
| include, for these cost types, an additional member "calendar- | include, for these cost types, an additional member "calendar- | |||
| response-attributes", the contents of which obey the same rules as | response-attributes", the contents of which obey the same rules as | |||
| for the Filtered Cost Map Service, specified in Section 5.1.2. The | for the Filtered Cost Map Service, specified in Section 5.1.2. The | |||
| Server response is thus changed as follows, with respect to [RFC7285] | Server response is thus changed as follows, with respect to [RFC7285] | |||
| and [RFC8189]: | and [RFC8189]: | |||
| o the "meta" member has one additional field | * the "meta" member has one additional field | |||
| "CalendarResponseAttributes", as specified for the Filtered Cost | "CalendarResponseAttributes", as specified for the Filtered Cost | |||
| Map Service, | Map Service, and | |||
| o the calendared costs are JSONArrays instead of the JSONNumbers | * the calendared costs are JSONArrays instead of the JSONNumbers | |||
| format used by legacy ALTO implementations. All arrays have a | format used by legacy ALTO implementations. All arrays have a | |||
| number of values equal to 'number-of-intervals'. Each value | number of values equal to 'number-of-intervals'. Each value | |||
| corresponds to the cost in that interval. | corresponds to the cost in that interval. | |||
| If the value of member "calendared" is equal to 'false' for a given | If the value of member "calendared" is equal to 'false' for a given | |||
| requested cost type, the ALTO Server MUST return, for this cost type, | requested cost type, the ALTO Server MUST return, for this cost type, | |||
| a single cost value as specified in [RFC7285]. | a single cost value as specified in [RFC7285]. | |||
| 5.2.3. Use case and example: ECS with a routingcost Calendar | 5.2.3. Use Case and Example: ECS with a routingcost Calendar | |||
| Let us assume an Application Client is located in an end system with | Let us assume an Application Client is located in an end system with | |||
| limited resources and having access to the network that is either | limited resources and has access to the network that is either | |||
| intermittent or provides an acceptable quality in limited but | intermittent or provides an acceptable quality in limited but | |||
| predictable time periods. Therefore, it needs to schedule both its | predictable time periods. Therefore, it needs to schedule both its | |||
| resource-greedy networking activities and its ALTO transactions. | resource-greedy networking activities and its ALTO transactions. | |||
| The Application Client has the choice to trade content or resources | The Application Client has the choice to trade content or resources | |||
| with a set of Endpoints and needs to decide with which one it will | with a set of endpoints and needs to decide with which one it will | |||
| connect and at what time. For instance, the Endpoints are spread in | connect and at what time. For instance, the endpoints are spread in | |||
| different time-zones, or have intermittent access. In this example, | different time zones or have intermittent access. In this example, | |||
| the 'routingcost' is assumed to be time-varying, with values provided | the 'routingcost' is assumed to be time-varying, with values provided | |||
| as ALTO Calendars. | as ALTO Calendars. | |||
| The ALTO Client associated with the Application Client queries an | The ALTO Client associated with the Application Client queries an | |||
| ALTO Calendar on 'routingcost' and will get the Calendar covering the | ALTO Calendar on 'routingcost' and will get the Calendar covering the | |||
| 24 hours time period "containing" the date and time of the ALTO | 24-hour time period "containing" the date and time of the ALTO Client | |||
| Client request. | request. | |||
| For cost type "num-routingcost", the solicited ALTO Server has | For cost type "num-routingcost", the solicited ALTO Server has | |||
| defined 3 different daily patterns each represented by a Calendar, to | defined 3 different daily patterns, each represented by a Calendar to | |||
| cover the week of Monday June 30th at 00:00 to Sunday July 6th 23:59: | cover the week of Monday, June 30th at 00:00 to Sunday, July 6th | |||
| 23:59: | ||||
| o C1 for Monday, Tuesday, Wednesday, Thursday, (weekdays) | * C1 for Monday, Tuesday, Wednesday, and Thursday (weekdays) | |||
| o C2 for Saturday, Sunday, (weekend) | * C2 for Saturday and Sunday (weekends) | |||
| o C3 for Friday (maintenance outage on July 4, 2019 from 02:00:00 | * C3 for Friday (maintenance outage on July 4, 2019 from 02:00:00 | |||
| GMT to 04:00:00 GMT, or big holiday such as New Year evening). | GMT to 04:00:00 GMT or a big holiday that is widely celebrated and | |||
| generates massive connections). | ||||
| In the following example, the ALTO Client sends its request on | In the following example, the ALTO Client sends its request on | |||
| Tuesday July 1st 2019 at 13:15. | Tuesday, July 1st 2019 at 13:15. | |||
| The "routingcost" values are assumed to be encoded in 3 digits. | The "routingcost" values are assumed to be encoded in 3 digits. | |||
| POST /calendar/endpointcost/lookup HTTP/1.1 | POST /calendar/endpointcost/lookup HTTP/1.1 | |||
| Host: custom.alto.example.com | Host: custom.alto.example.com | |||
| Content-Length: 304 | Content-Length: 304 | |||
| Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
| Accept: application/alto-endpointcost+json,application/alto-error+json | Accept: application/alto-endpointcost+json, | |||
| application/alto-error+json | ||||
| { | { | |||
| "cost-type" : {"cost-mode" : "numerical", | "cost-type" : {"cost-mode" : "numerical", | |||
| "cost-metric" : "routingcost"}, | "cost-metric" : "routingcost"}, | |||
| "calendared" : [true], | "calendared" : [true], | |||
| "endpoints" : { | "endpoints" : { | |||
| "srcs": [ "ipv4:192.0.2.2" ], | "srcs": [ "ipv4:192.0.2.2" ], | |||
| "dsts": [ | "dsts": [ | |||
| "ipv4:192.0.2.89", | "ipv4:192.0.2.89", | |||
| "ipv4:198.51.100.34", | "ipv4:198.51.100.34", | |||
| "ipv4:203.0.113.45", | "ipv4:203.0.113.45", | |||
| "ipv6:2001:db8::10" | "ipv6:2001:db8::10" | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: 1351 | Content-Length: 1351 | |||
| Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
| { | { | |||
| "meta" : { | "meta" : { | |||
| "cost-type" : {"cost-mode" : "numerical", | "cost-type" : {"cost-mode" : "numerical", | |||
| "cost-metric" : "routingcost"}, | "cost-metric" : "routingcost"}, | |||
| "calendar-response-attributes" : [ | "calendar-response-attributes" : [ | |||
| {"calendar-start-time" : "Mon, 30 Jun 2019 00:00:00 GMT", | {"calendar-start-time" : "Mon, 30 Jun 2019 00:00:00 GMT", | |||
| "time-interval-size" : 3600, | "time-interval-size" : 3600, | |||
| "number-of-intervals" : 24, | "number-of-intervals" : 24, | |||
| "repeated": 4 | "repeated": 4 | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "endpoint-cost-map" : { | "endpoint-cost-map" : { | |||
| "ipv4:192.0.2.2": { | "ipv4:192.0.2.2": { | |||
| "ipv4:192.0.2.89" : [100, 100, 100, 100, 100, 150, | "ipv4:192.0.2.89" : [100, 100, 100, 100, 100, 150, | |||
| 200, 300, 300, 300, 300, 250, | 200, 300, 300, 300, 300, 250, | |||
| 250, 300, 300, 300, 300, 300, | 250, 300, 300, 300, 300, 300, | |||
| 400, 250, 250, 200, 150, 150], | 400, 250, 250, 200, 150, 150], | |||
| "ipv4:198.51.100.34" : [ 80, 80, 80, 80, 150, 150, | "ipv4:198.51.100.34" : [ 80, 80, 80, 80, 150, 150, | |||
| 250, 400, 400, 450, 400, 200, | 250, 400, 400, 450, 400, 200, | |||
| 200, 350, 400, 400, 400, 350, | 200, 350, 400, 400, 400, 350, | |||
| 500, 200, 200, 200, 100, 100], | 500, 200, 200, 200, 100, 100], | |||
| "ipv4:203.0.113.45" : [300, 400, 250, 250, 200, 150, | "ipv4:203.0.113.45" : [300, 400, 250, 250, 200, 150, | |||
| 150, 100, 100, 100, 100, 100, | 150, 100, 100, 100, 100, 100, | |||
| 100, 100, 100, 100, 100, 150, | 100, 100, 100, 100, 100, 150, | |||
| 200, 300, 300, 300, 300, 250], | 200, 300, 300, 300, 300, 250], | |||
| "ipv6:2001:db8::10" : [200, 250, 300, 300, 300, 300, | "ipv6:2001:db8::10" : [200, 250, 300, 300, 300, 300, | |||
| 250, 300, 300, 300, 300, 350, | 250, 300, 300, 300, 300, 350, | |||
| 300, 400, 250, 150, 100, 100, | 300, 400, 250, 150, 100, 100, | |||
| 100, 150, 200, 250, 250, 300] | 100, 150, 200, 250, 250, 300] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| When the Client gets the Calendar for "routingcost", it sees that the | When the Client gets the Calendar for "routingcost", it sees that the | |||
| "calendar-start-time" is Monday at 00h00 GMT and member "repeated" is | "calendar-start-time" is Monday at 00h00 GMT and member "repeated" is | |||
| equal to '4'. It understands that the provided values are valid | equal to '4'. It understands that the provided values are valid | |||
| until Thursday included and will only need to get a Calendar update | until Thursday and will only need to get a Calendar update on Friday. | |||
| on Friday. | ||||
| 5.2.4. Use case and example: ECS with a multi-cost Calendar for | 5.2.4. Use Case and Example: ECS with a Multi-cost Calendar for | |||
| routingcost and owdelay | routingcost and owdelay | |||
| In this example, it is assumed that the ALTO Server implements multi- | In this example, it is assumed that the ALTO Server implements multi- | |||
| cost capabilities, as specified in [RFC8189] . That is, an ALTO | cost capabilities, as specified in [RFC8189] . That is, an ALTO | |||
| Client can request and receive values for several cost types in one | Client can request and receive values for several cost types in one | |||
| single transaction. An illustrating use case is a path selection | single transaction. An illustrating use case is a path selection | |||
| done on the basis of 2 metrics: routing cost and owdelay. | done on the basis of 2 metrics: routingcost and owdelay. | |||
| As in the previous example, the IRD indicates that the ALTO Server | As in the previous example, the IRD indicates that the ALTO Server | |||
| provides "routingcost" Calendars in terms of 24 time intervals of 1 | provides "routingcost" Calendars in terms of 24 time intervals of 1 | |||
| hour (3600 seconds) each. | hour (3600 seconds) each. | |||
| For metric "owdelay", the IRD indicates that the ALTO Server provides | For metric "owdelay", the IRD indicates that the ALTO Server provides | |||
| Calendars in terms of 12 time intervals values lasting each 5 minutes | Calendars in terms of 12 time interval values lasting 5 minutes (300 | |||
| (300 seconds). | seconds) each. | |||
| In the following example transaction, the ALTO Client sends its | In the following example transaction, the ALTO Client sends its | |||
| request on Tuesday July 1st 2019 at 13:15. | request on Tuesday, July 1st 2019 at 13:15. | |||
| This example assumes that the values of metric "owdelay" and | This example assumes that the values of metric "owdelay" and | |||
| "routingcost" are encoded in 3 digits. | "routingcost" are encoded in 3 digits. | |||
| POST calendar/endpointcost/lookup HTTP/1.1 | POST calendar/endpointcost/lookup HTTP/1.1 | |||
| Host: custom.alto.example.com | Host: custom.alto.example.com | |||
| Content-Length: 390 | Content-Length: 390 | |||
| Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
| Accept: application/alto-endpointcost+json,application/alto-error+json | Accept: application/alto-endpointcost+json, | |||
| application/alto-error+json | ||||
| { | ||||
| "cost-type" : {}, | ||||
| "multi-cost-types" : [ | ||||
| {"cost-mode" : "numerical", "cost-metric" : "routingcost"}, | ||||
| {"cost-mode" : "numerical", "cost-metric" : "owdelay"} | ||||
| ], | ||||
| "calendared" : [true, true], | ||||
| "endpoints" : { | ||||
| "srcs": [ "ipv4:192.0.2.2" ], | ||||
| "dsts": [ | ||||
| "ipv4:192.0.2.89", | ||||
| "ipv4:198.51.100.34", | ||||
| "ipv4:203.0.113.45", | ||||
| "ipv6:2001:db8::10" | ||||
| ] | ||||
| } | ||||
| } | ||||
| HTTP/1.1 200 OK | { | |||
| Content-Length: 2165 | "cost-type" : {}, | |||
| Content-Type: application/alto-endpointcost+json | "multi-cost-types" : [ | |||
| {"cost-mode" : "numerical", "cost-metric" : "routingcost"}, | ||||
| {"cost-mode" : "numerical", "cost-metric" : "owdelay"} | ||||
| ], | ||||
| "calendared" : [true, true], | ||||
| "endpoints" : { | ||||
| "srcs": [ "ipv4:192.0.2.2" ], | ||||
| "dsts": [ | ||||
| "ipv4:192.0.2.89", | ||||
| "ipv4:198.51.100.34", | ||||
| "ipv4:203.0.113.45", | ||||
| "ipv6:2001:db8::10" | ||||
| ] | ||||
| } | ||||
| } | ||||
| { | HTTP/1.1 200 OK | |||
| "meta" : { | Content-Length: 2165 | |||
| "multi-cost-types" : [ | Content-Type: application/alto-endpointcost+json | |||
| {"cost-mode" : "numerical", "cost-metric" : "routingcost"}, | ||||
| {"cost-mode" : "numerical", "cost-metric" : "owdelay"} | ||||
| ], | ||||
| "calendar-response-attributes" : [ | ||||
| {"cost-type-names" : [ "num-routingcost" ], | ||||
| "calendar-start-time" : "Mon, 30 Jun 2019 00:00:00 GMT", | ||||
| "time-interval-size" : 3600, | ||||
| "number-of-intervals" : 24, | ||||
| "repeated": 4 }, | ||||
| {"cost-type-names" : [ "num-owdelay" ], | ||||
| "calendar-start-time" : "Tue, 1 Jul 2019 13:00:00 GMT", | ||||
| "time-interval-size" : 300, | ||||
| "number-of-intervals" : 12} | ||||
| ] | ||||
| }, | ||||
| "endpoint-cost-map" : { | ||||
| "ipv4:192.0.2.2": { | ||||
| "ipv4:192.0.2.89" : [[100, 100, 100, 100, 100, 150, | ||||
| 200, 300, 300, 300, 300, 250, | ||||
| 250, 300, 300, 300, 300, 300, | ||||
| 400, 250, 250, 200, 150, 150], | ||||
| [ 20, 400, 20, 80, 80, 90, | ||||
| 100, 90, 60, 40, 30, 20]], | ||||
| "ipv4:198.51.100.34" : [[ 80, 80, 80, 80, 150, 150, | ||||
| 250, 400, 400, 450, 400, 200, | ||||
| 200, 350, 400, 400, 400, 350, | ||||
| 500, 200, 200, 200, 100, 100], | ||||
| [ 20, 20, 50, 30, 30, 30, | { | |||
| 30, 40, 40, 30, 20, 20]], | "meta" : { | |||
| "ipv4:203.0.113.45" : [[300, 400, 250, 250, 200, 150, | "multi-cost-types" : [ | |||
| 150, 100, 100, 100, 100, 100, | {"cost-mode" : "numerical", "cost-metric" : "routingcost"}, | |||
| 100, 100, 100, 100, 100, 150, | {"cost-mode" : "numerical", "cost-metric" : "owdelay"} | |||
| 200, 300, 300, 300, 300, 250], | ], | |||
| [100, 90, 80, 60, 50, 50, | "calendar-response-attributes" : [ | |||
| 40, 40, 60, 90, 100, 80]], | {"cost-type-names" : [ "num-routingcost" ], | |||
| "ipv6:2001:db8::10" : [[200, 250, 300, 300, 300, 300, | "calendar-start-time" : "Mon, 30 Jun 2019 00:00:00 GMT", | |||
| 250, 300, 300, 300, 300, 350, | "time-interval-size" : 3600, | |||
| 300, 400, 250, 150, 100, 100, | "number-of-intervals" : 24, | |||
| 100, 150, 200, 250, 250, 300], | "repeated": 4 }, | |||
| [ 40, 40, 40, 40, 50, 50, | {"cost-type-names" : [ "num-owdelay" ], | |||
| 50, 20, 10, 15, 30, 40]] | "calendar-start-time" : "Tue, 1 Jul 2019 13:00:00 GMT", | |||
| } | "time-interval-size" : 300, | |||
| } | "number-of-intervals" : 12} | |||
| } | ] | |||
| }, | ||||
| "endpoint-cost-map" : { | ||||
| "ipv4:192.0.2.2": { | ||||
| "ipv4:192.0.2.89" : [[100, 100, 100, 100, 100, 150, | ||||
| 200, 300, 300, 300, 300, 250, | ||||
| 250, 300, 300, 300, 300, 300, | ||||
| 400, 250, 250, 200, 150, 150], | ||||
| [ 20, 400, 20, 80, 80, 90, | ||||
| 100, 90, 60, 40, 30, 20]], | ||||
| "ipv4:198.51.100.34" : [[ 80, 80, 80, 80, 150, 150, | ||||
| 250, 400, 400, 450, 400, 200, | ||||
| 200, 350, 400, 400, 400, 350, | ||||
| 500, 200, 200, 200, 100, 100], | ||||
| [ 20, 20, 50, 30, 30, 30, | ||||
| 30, 40, 40, 30, 20, 20]], | ||||
| "ipv4:203.0.113.45" : [[300, 400, 250, 250, 200, 150, | ||||
| 150, 100, 100, 100, 100, 100, | ||||
| 100, 100, 100, 100, 100, 150, | ||||
| 200, 300, 300, 300, 300, 250], | ||||
| [100, 90, 80, 60, 50, 50, | ||||
| 40, 40, 60, 90, 100, 80]], | ||||
| "ipv6:2001:db8::10" : [[200, 250, 300, 300, 300, 300, | ||||
| 250, 300, 300, 300, 300, 350, | ||||
| 300, 400, 250, 150, 100, 100, | ||||
| 100, 150, 200, 250, 250, 300], | ||||
| [ 40, 40, 40, 40, 50, 50, | ||||
| 50, 20, 10, 15, 30, 40]] | ||||
| } | ||||
| } | ||||
| } | ||||
| When receiving the response, the Client sees that the Calendar values | When receiving the response, the Client sees that the Calendar values | |||
| for metric "routingcost" are repeated for 4 iterations. Therefore, | for metric "routingcost" are repeated for 4 iterations. Therefore, | |||
| in its next requests until the "routingcost" Calendar is expected to | in its next requests until the "routingcost" Calendar is expected to | |||
| change, the Client will only need to request a Calendar for | change, the Client will only need to request a Calendar for | |||
| "owdelay". | "owdelay". | |||
| Without the ALTO Calendar extensions, the ALTO Client would have no | Without the ALTO Calendar extensions, the ALTO Client would have no | |||
| clue on the dynamicity of the metric value change and would spend | clue on the dynamicity of the metric value change and would spend | |||
| needless time requesting values at an inappropriate pace. In | needless time requesting values at an inappropriate pace. In | |||
| addition, without the Multi-Cost ALTO capabilities, the ALTO Client | addition, without the Multi-Cost ALTO capabilities, the ALTO Client | |||
| would duplicate this waste of time as it would need to send one | would duplicate this waste of time as it would need to send one | |||
| request per cost metric. | request per cost metric. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| This document does not define any new media types or introduce any | This document has no IANA actions. | |||
| new IANA considerations. | ||||
| 7. Security Considerations | 7. Security Considerations | |||
| As an extension of the base ALTO protocol [RFC7285], this document | As an extension of the base ALTO protocol [RFC7285], this document | |||
| fits into the architecture of the base protocol, and hence the | fits into the architecture of the base protocol and hence the | |||
| Security Considerations (Section 15) of [RFC7285] fully apply when | security considerations (Section 15 of [RFC7285]) fully apply when | |||
| this extension is provided by an ALTO Server. For example, the same | this extension is provided by an ALTO Server. For example, the same | |||
| authenticity and integrity considerations (Section 15.1 of [RFC7285] | authenticity and integrity considerations (Section 15.1 of [RFC7285]) | |||
| still fully apply; the same considerations for the privacy of ALTO | still fully apply; the same considerations for the privacy of ALTO | |||
| users (Section 15.4 of [RFC7285]) also still fully apply. | users (Section 15.4 of [RFC7285]) also still fully apply. | |||
| The calendaring information provided by this extension requires | The calendaring information provided by this extension requires | |||
| additional considerations on three security considerations discussed | additional considerations on three security considerations discussed | |||
| in [RFC7285]: potential undesirable guidance to Clients (Section 15.2 | in [RFC7285]: potential undesirable guidance to Clients (Section 15.2 | |||
| of [RFC7285]), confidentiality of ALTO information (Section 15.2 of | of [RFC7285]), confidentiality of ALTO information (Section 15.3 of | |||
| [RFC7285]), and availability of ALTO (Section 15.5 of [RFC7285]). | [RFC7285]), and availability of ALTO (Section 15.5 of [RFC7285]). | |||
| For example, by providing network information in the future in a | For example, by providing network information in the future in a | |||
| Calendar, this extension may improve availability of ALTO, when the | Calendar, this extension may improve availability of ALTO when the | |||
| ALTO Server is unavailable but related information is already | ALTO Server is unavailable but related information is already | |||
| provided in the Calendar. | provided in the Calendar. | |||
| For confidentiality of ALTO information, an operator should be | For confidentiality of ALTO information, an operator should be | |||
| cognizant that this extension may introduce a new risk: a malicious | cognizant that this extension may introduce a new risk, a malicious | |||
| ALTO Client may get information for future events that are scheduled | ALTO Client may get information for future events that are scheduled | |||
| through Calendaring. Possessing such information, the malicious | through Calendaring. Possessing such information, the malicious | |||
| Client may use it to generate massive connections to the network at | Client may use it to generate massive connections to the network at | |||
| times where its load is expected to be high. | times where its load is expected to be high. | |||
| To mitigate this risk, the operator should address the risk of ALTO | To mitigate this risk, the operator should address the risk of ALTO | |||
| information being leaked to malicious Clients or third parties. As | information being leaked to malicious Clients or third parties. As | |||
| specified in Section 15.3.2 ("Protection Strategies") of [RFC7285], | specified in "Protection Strategies" (Section 15.3.2 of [RFC7285]), | |||
| the ALTO Server should authenticate ALTO Clients and use the | the ALTO Server should authenticate ALTO Clients and use the | |||
| Transport Layer Security (TLS) protocol so that Man In The Middle | Transport Layer Security (TLS) protocol so that man-in-the-middle | |||
| (MITM) attacks to intercept an ALTO Calendar are not possible. | (MITM) attacks to intercept an ALTO Calendar are not possible. | |||
| [RFC7285] ensures the availability of such a solution in its | "Authentication and Encryption" (Section 8.3.5 of [RFC7285]) ensures | |||
| Section 8.3.5. "Authentication and Encryption", which specifies | the availability of such a solution. It specifies that "ALTO Server | |||
| that: "ALTO Server implementations as well as ALTO Client | implementations as well as ALTO Client implementations MUST support | |||
| implementations MUST support the "https" URI scheme of [RFC2818] and | the "https" URI scheme of [RFC2818] and Transport Layer Security | |||
| Transport Layer Security (TLS) of [RFC5246]". | (TLS) of [RFC5246]". | |||
| [RFC8446] specifies TLS 1.3 and writes in its section 1: "While TLS | Section 1 of TLS 1.3 [RFC8446] states: "While TLS 1.3 is not directly | |||
| 1.3 is not directly compatible with previous versions, all versions | compatible with previous versions, all versions of TLS incorporate a | |||
| of TLS incorporate a versioning mechanism which allows Clients and | versioning mechanism which allows Clients and Servers to | |||
| Servers to interoperably negotiate a common version if one is | interoperably negotiate a common version if one is supported by both | |||
| supported by both peers". ALTO Clients and Servers SHOULD support | peers". ALTO Clients and Servers SHOULD support both TLS 1.3 | |||
| both TLS 1.3 [RFC8446] and TLS 1.2 [RFC5246], and MAY support and use | [RFC8446] and TLS 1.2 [RFC5246] and MAY support and use newer | |||
| newer versions of TLS as long as the negotiation process succeeds. | versions of TLS as long as the negotiation process succeeds. | |||
| The operator should be cognizant that the preceding mechanisms do not | The operator should be cognizant that the preceding mechanisms do not | |||
| address all security risks. In particular, they will not help in the | address all security risks. In particular, they will not help in the | |||
| case of "malicious Clients" possessing valid authentication | case of "malicious Clients" possessing valid authentication | |||
| credentials. The threat here is that legitimate Clients have become | credentials. The threat here is that legitimate Clients have become | |||
| subverted by an attacker and are now 'bots' being asked to | subverted by an attacker and are now 'bots' being asked to | |||
| participate in a DDoS attack. The Calendar information now becomes | participate in a DDoS attack. The Calendar information now becomes | |||
| valuable in knowing exactly when to perpetrate a DDoS attack. A | valuable in knowing exactly when to perpetrate a DDoS attack. A | |||
| mechanism such as a monitoring system that detects abnormal behaviors | mechanism, such as a monitoring system that detects abnormal | |||
| may still be needed. | behaviors, may still be needed. | |||
| To avoid malicious or erroneous guidance from ALTO information, an | To avoid malicious or erroneous guidance from ALTO information, an | |||
| ALTO Client should be cognizant that using calendaring information | ALTO Client should be cognizant that using calendaring information | |||
| can have risks: (1) Calendar values, especially in "repeated" | can have risks: (1) Calendar values, especially in "repeated" | |||
| Calendars may be only statistical, and (2) future events may change. | Calendars, may be only statistical and (2) future events may change. | |||
| Hence, a more robust ALTO Client should adapt and extend protection | Hence, a more robust ALTO Client should adapt and extend protection | |||
| strategies specified in Section 15.2 of [RFC7285]. For example, to | strategies specified in Section 15.2 of [RFC7285]. For example, to | |||
| be notified immediately when a particular ALTO value that the Client | be notified immediately when a particular ALTO value that the Client | |||
| depends on changes, it is RECOMMENDED that both the ALTO Client and | depends on changes, it is RECOMMENDED that both the ALTO Client and | |||
| ALTO Server using this extension support "ALTO Incremental Updates | ALTO Server using this extension support "Application-Layer Traffic | |||
| Using Server-Sent Events(SSE)" Service | Optimization (ALTO) Incremental Updates Using Server-Sent Events | |||
| [I-D.ietf-alto-incr-update-sse]. | (SSE)" [RFC8895]. | |||
| Another risk of erroneous guidance appears when the Server exposes an | Another risk of erroneous guidance appears when the Server exposes an | |||
| occurrence of a same cost type name in different elements of the | occurrence of a same cost type name in different elements of the | |||
| Calendar objects array associated to an information resource. In | Calendar objects array associated to an information resource. In | |||
| this case, there is no way for the Client to figure out which | this case, there is no way for the Client to figure out which | |||
| Calendar object in the array is valid. The specification in this | Calendar object in the array is valid. The specification in this | |||
| document recommends, in this case, that the Client uses the first | document recommends, in this case, that the Client uses the first | |||
| encountered Calendar object occurrence containing the cost type name. | encountered Calendar object occurrence containing the cost type name. | |||
| However, the Client may want to avoid the risks of erroneous guidance | However, the Client may want to avoid the risks of erroneous guidance | |||
| associated to the use of potentially invalid Calendar values. To | associated to the use of potentially invalid Calendar values. To | |||
| this end, as an alternative to the recommendation in this document, | this end, as an alternative to the recommendation in this document, | |||
| the Client MAY ignore the totality of occurences of | the Client MAY ignore the totality of occurrences of | |||
| CalendarAttributes objects containing the cost type name and query | CalendarAttributes objects containing the cost type name and query | |||
| this cost type using [RFC7285]. | this cost type using [RFC7285]. | |||
| 8. Operational Considerations | 8. Operational Considerations | |||
| It is important that both the operator of the network and the | It is important that both the operator of the network and the | |||
| operator of the applications consider both the feedback aspect and | operator of the applications consider both the feedback aspect and | |||
| the prediction-based (uncertainty) aspect of using the Cost Calendar. | the prediction-based (uncertainty) aspect of using the Cost Calendar. | |||
| First consider the feedback aspect and consider the Cost Calendar as | First, consider the feedback aspect and consider the Cost Calendar as | |||
| a traffic-aware map service (e.g., Google Maps). Using the service | a traffic-aware map service (e.g., Google Maps). Using the service | |||
| without considering its own effect, a large fleet can turn a not- | without considering its own effect, a large fleet can turn a not- | |||
| congested road into a congested one; a large number of individual | congested road into a congested one; a large number of individual | |||
| cars each choosing a road with light traffic ("cheap link") can also | cars each choosing a road with light traffic ("cheap link") can also | |||
| result in congestion or result in a less optimal global outcome | result in congestion or result in a less-optimal global outcome | |||
| (e.g., the Braess' Paradox [Braess-paradox]). | (e.g., the Braess' Paradox [BRAESS_PARADOX]). | |||
| Next consider the prediction aspect. Conveying ALTO Cost Calendars | Next, consider the prediction aspect. Conveying ALTO Cost Calendars | |||
| tends to reduce the on-the-wire data exchange volume compared to | tends to reduce the on-the-wire data exchange volume compared to | |||
| multiple single cost ALTO transactions. An application using | multiple single-cost ALTO transactions. An application using | |||
| Calendars has a set of time-dependent values upon which it can plan | Calendars has a set of time-dependent values upon which it can plan | |||
| its connections in advance with no need for the ALTO Client to query | its connections in advance with no need for the ALTO Client to query | |||
| information at each time. Additionally, the Calendar response | information at each time. Additionally, the Calendar response | |||
| attribute "repeated", when provided, saves additional data exchanges | attribute "repeated", when provided, saves additional data exchanges | |||
| in that it indicates that the ALTO Client does not need to query | in that it indicates that the ALTO Client does not need to query | |||
| Calendars during a period indicated by this attribute. The preceding | Calendars during a period indicated by this attribute. The preceding | |||
| is true only when "accidents" do not happen. | is true only when "accidents" do not happen. | |||
| Although individual network operators and application operators can | Although individual network operators and application operators can | |||
| choose their own approaches to address the aforementioned issues, | choose their own approaches to address the aforementioned issues, | |||
| this document recommends the following considerations. First, a | this document recommends the following considerations. First, a | |||
| typical approach to reducing instability and handling uncertainty is | typical approach to reducing instability and handling uncertainty is | |||
| to ensure timely update of information. The SSE Service as discussed | to ensure timely update of information. The SSE Service, as | |||
| in Section 7 can handle updates, if supported by both the Server and | discussed in Section 7, can handle updates if supported by both the | |||
| the Client. Second, when a network operator updates the Cost | Server and the Client. Second, when a network operator updates the | |||
| Calendar and when an application reacts to the update, they should | Cost Calendar and when an application reacts to the update, they | |||
| consider the feedback effects. This is the best approach even though | should consider the feedback effects. This is the best approach even | |||
| there is theoretical analysis [Selfish-routing-Roughgarden-thesis] | though there is theoretical analysis [SELFISH_RTG_2002] and Internet- | |||
| and Internet based evaluation [Selfish-routing-Internet-eval] showing | based evaluation [SELFISH_RTG_2003] showing that uncoordinated | |||
| that uncoordinated behaviors do not always cause substantial sub- | behaviors do not always cause substantial suboptimal results. | |||
| optimal results. | ||||
| High-resolution intervals may be needed when values change, sometimes | High-resolution intervals may be needed when values change, sometimes | |||
| during very small time intervals but in a significant manner. A way | during very small time intervals but in a significant manner. A way | |||
| to avoid conveying too many entries is to leverage on the "repeated" | to avoid conveying too many entries is to leverage on the "repeated" | |||
| feature. A Server can smartly set the Calendar start time and number | feature. A Server can smartly set the Calendar start time and number | |||
| of intervals so as to declare them "repeated" for a large number of | of intervals so as to declare them "repeated" for a large number of | |||
| periods, until the Calendar values change and are conveyed to | periods until the Calendar values change and are conveyed to | |||
| requesting Clients. | requesting Clients. | |||
| The newer JSON Data Interchange Format specification [RFC8259] used | The newer JSON Data Interchange Format specification [RFC8259] used | |||
| in ALTO Calendars replaces the older one [RFC7159] used in the base | in ALTO Calendars replaces the older one [RFC7159] used in the base | |||
| ALTO protocol [RFC7285]. The newer JSON mandates UTF-8 text encoding | ALTO protocol [RFC7285]. The newer JSON mandates UTF-8 text encoding | |||
| to improve interoperability. Therefore, ALTO Clients and Servers | to improve interoperability. Therefore, ALTO Clients and Servers | |||
| implementations using UTF-{16,32} need to be cognizant of the | implementations using UTF-{16,32} need to be cognizant of the | |||
| subsequent interoperability risks and MUST switch to UTF-8 encoding, | subsequent interoperability risks and MUST switch to UTF-8 encoding | |||
| if they want to interoperate with Calendar-aware Servers and Clients. | if they want to interoperate with Calendar-aware Servers and Clients. | |||
| 9. Acknowledgements | 9. References | |||
| The authors would like to thank Fred Baker, Li Geng, Diego Lopez, He | ||||
| Peng and Haibin Song for fruitful discussions and feedback on earlier | ||||
| draft versions. Dawn Chan, Kai Gao, Vijay Gurbani, Yichen Qian, | ||||
| Juergen Schoenwaelder, and Brian Weis and Jensen Zhang provided | ||||
| substantial review feedback and suggestions to the protocol design. | ||||
| 10. References | 9.1. Normative References | |||
| 10.1. Normative References | [IEEE.754.2019] | |||
| IEEE, "IEEE Standard for Floating-Point Arithmetic", | ||||
| IEEE 754-2019, DOI 10.1109/IEEESTD.2019.8766229, June | ||||
| 2019, <https://doi.org/10.1109/IEEESTD.2019.8766229>. | ||||
| [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/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | ||||
| (TLS) Protocol Version 1.2", RFC 5246, | ||||
| DOI 10.17487/RFC5246, August 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5246>. | ||||
| [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
| DOI 10.17487/RFC7231, June 2014, | DOI 10.17487/RFC7231, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7231>. | <https://www.rfc-editor.org/info/rfc7231>. | |||
| [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/info/rfc7285>. | <https://www.rfc-editor.org/info/rfc7285>. | |||
| skipping to change at page 33, line 30 ¶ | skipping to change at line 1564 ¶ | |||
| [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/info/rfc8189>. | <https://www.rfc-editor.org/info/rfc8189>. | |||
| [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
| Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
| DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
| <https://www.rfc-editor.org/info/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | ||||
| (TLS) Protocol Version 1.2", RFC 5246, | ||||
| DOI 10.17487/RFC5246, August 2008, | ||||
| <https://www.rfc-editor.org/info/rfc5246>. | ||||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [I-D.ietf-alto-incr-update-sse] | [RFC8895] Roome, W. and Y. Yang, "Application-Layer Traffic | |||
| Roome, W. and Y. Yang, "ALTO Incremental Updates Using | Optimization (ALTO) Incremental Updates Using Server-Sent | |||
| Server-Sent Events (SSE)", draft-ietf-alto-incr-update- | Events (SSE)", RFC 8895, DOI 10.17487/RFC8895, October | |||
| sse-20 (work in progress), February 2020. | 2020, <https://www.rfc-editor.org/info/rfc8895>. | |||
| [IEEE.754.2008] | 9.2. Informative References | |||
| "Standard for Binary Floating-Point Arithmetic, IEEE | ||||
| Standard 754", August 2008. | ||||
| 10.2. Informative References | [ALTO_METRICS] | |||
| Wu, Q., Yang, Y. R., Dhody, D., Randriamasy, S., and L. M. | ||||
| Contreras, "ALTO Performance Cost Metrics", Work in | ||||
| Progress, Internet-Draft, draft-ietf-alto-performance- | ||||
| metrics-09, 9 March 2020, <https://tools.ietf.org/html/ | ||||
| draft-ietf-alto-performance-metrics-09>. | ||||
| [BRAESS_PARADOX] | ||||
| Steinberg, R. and W. Zangwill, "The Prevalence of Braess' | ||||
| Paradox", Transportation Science Vol. 17, No. 3, | ||||
| DOI 10.1287/trsc.17.3.301, 1 August 1983, | ||||
| <https://doi.org/10.1287/trsc.17.3.301>. | ||||
| [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, | [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, | |||
| DOI 10.17487/RFC2818, May 2000, | DOI 10.17487/RFC2818, May 2000, | |||
| <https://www.rfc-editor.org/info/rfc2818>. | <https://www.rfc-editor.org/info/rfc2818>. | |||
| [RFC5693] Seedorf, J. and E. Burger, "Application-Layer Traffic | [RFC5693] Seedorf, J. and E. Burger, "Application-Layer Traffic | |||
| Optimization (ALTO) Problem Statement", RFC 5693, | Optimization (ALTO) Problem Statement", RFC 5693, | |||
| DOI 10.17487/RFC5693, October 2009, | DOI 10.17487/RFC5693, October 2009, | |||
| <https://www.rfc-editor.org/info/rfc5693>. | <https://www.rfc-editor.org/info/rfc5693>. | |||
| [RFC6708] Kiesel, S., Ed., Previdi, S., Stiemerling, M., Woundy, R., | [RFC6708] Kiesel, S., Ed., Previdi, S., Stiemerling, M., Woundy, R., | |||
| and Y. Yang, "Application-Layer Traffic Optimization | and Y. Yang, "Application-Layer Traffic Optimization | |||
| (ALTO) Requirements", RFC 6708, DOI 10.17487/RFC6708, | (ALTO) Requirements", RFC 6708, DOI 10.17487/RFC6708, | |||
| September 2012, <https://www.rfc-editor.org/info/rfc6708>. | September 2012, <https://www.rfc-editor.org/info/rfc6708>. | |||
| [RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
| Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March | Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March | |||
| 2014, <https://www.rfc-editor.org/info/rfc7159>. | 2014, <https://www.rfc-editor.org/info/rfc7159>. | |||
| [I-D.ietf-alto-performance-metrics] | [SELFISH_RTG_2002] | |||
| WU, Q., Yang, Y., Dhody, D., Randriamasy, S., and L. | Roughgarden, T., "Selfish Routing", Dissertation Thesis, | |||
| Contreras, "ALTO Performance Cost Metrics", draft-ietf- | Cornell, May 2002. | |||
| alto-performance-metrics-09 (work in progress), March | ||||
| 2020. | ||||
| [I-D.xiang-alto-multidomain-analytics] | ||||
| Xiang, Q., Zhang, J., Le, F., Yang, Y., and H. Newman, | ||||
| "Resource Orchestration for Multi-Domain, Exascale, Geo- | ||||
| Distributed Data Analytics", draft-xiang-alto-multidomain- | ||||
| analytics-03 (work in progress), March 2020. | ||||
| [SENSE-sdn-e2e-net] | [SELFISH_RTG_2003] | |||
| "SDN for End-to-End Networked Science at the Exascale | Qiu, L., Yang, Y., Zhang, Y., and S. Shenker, "Selfish | |||
| (SENSE), http://sense.es.net/overview". | Routing in Internet-LIke Environments", Proceedings of | |||
| SIGCOMM '03, DOI 10.1145/863955.863974, August 2003, | ||||
| <https://doi.org/10.1145/863955.863974>. | ||||
| [Braess-paradox] | [SENSE] Department of Energy Office of Science Advanced Scientific | |||
| Steinberg, R. and W. Zangwill, "The Prevalence of Braess' | Computing Research (ASCR) Program, "SDN for End-to-End | |||
| Paradox", Transportation Science Vol. 17 No. 3, August | Networked Science at the Exascale (SENSE)", | |||
| 1983. | <http://sense.es.net/overview>. | |||
| [Unicorn-fgcs] | [UNICORN-FGCS] | |||
| Xiang, Q., Wang, T., Zhang, J., Newman, H., and Y. Liu, | Xiang, Q., Wang, T., Zhang, J., Newman, H., Yang, Y., and | |||
| "Unicorn: Unified resource orchestration for multi-domain, | Y. Liu, "Unicorn: Unified resource orchestration for | |||
| geo-distributed data analytics", Future Generation of | multi-domain, geo-distributed data analytics", Future | |||
| Computer Systems (FGCS) Volume 93, Pages 188-197, April | Generation Computer Systems (FGCS), Vol. 93, Pages | |||
| 2019. | 188-197, DOI 10.1016/j.future.2018.09.048, ISSN 0167-739X, | |||
| March 2019, | ||||
| <https://doi.org/10.1016/j.future.2018.09.048>. | ||||
| [Selfish-routing-Roughgarden-thesis] | Acknowledgments | |||
| Roughgarden, T., "Selfish Routing", Dissertation Thesis, | ||||
| Cornell 2002, May 2002. | ||||
| [Selfish-routing-Internet-eval] | The authors would like to thank Fred Baker, Li Geng, Diego Lopez, He | |||
| Qiu, L., Yang, Y., Zhang, Y., and S. Shenker, "Selfish | Peng, and Haibin Song for fruitful discussions and feedback on | |||
| Routing in Internet-LIke Environments", Proceedings of ACM | earlier draft versions. Dawn Chan, Kai Gao, Vijay Gurbani, Yichen | |||
| SIGCOMM 2001, August 2001. | Qian, Jürgen Schönwälder, Brian Weis, and Jensen Zhang provided | |||
| substantial review feedback and suggestions to the protocol design. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Sabine Randriamasy | Sabine Randriamasy | |||
| Nokia Bell Labs | Nokia Bell Labs | |||
| Route de Villejust | Route de Villejust | |||
| NOZAY 91460 | 91460 Nozay | |||
| FRANCE | France | |||
| Email: Sabine.Randriamasy@nokia-bell-labs.com | Email: Sabine.Randriamasy@nokia-bell-labs.com | |||
| Richard Yang | Y. Richard Yang | |||
| Yale University | Yale University | |||
| 51 Prospect st | 51 Prospect St. | |||
| New Haven, CT 06520 | New Haven, CT 06520 | |||
| USA | United States of America | |||
| Email: yry@cs.yale.edu | Email: yry@cs.yale.edu | |||
| Qin Wu | Qin Wu | |||
| Huawei | Huawei | |||
| 101 Software Avenue, Yuhua District | Yuhua District | |||
| Nanjing, Jiangsu 210012 | 101 Software Avenue | |||
| Nanjing | ||||
| Jiangsu, 210012 | ||||
| China | China | |||
| Email: sunseawq@huawei.com | Email: sunseawq@huawei.com | |||
| Lingli Deng | Lingli Deng | |||
| China Mobile | China Mobile | |||
| China | China | |||
| Email: denglingli@chinamobile.com | Email: denglingli@chinamobile.com | |||
| Nico Schwan | Nico Schwan | |||
| Thales Deutschland | Thales Deutschland | |||
| Lorenzstrasse 10 | Lorenzstrasse 10 | |||
| Stuttgart 70435 | 70435 Stuttgart | |||
| Germany | Germany | |||
| Email: nico.schwan@thalesgroup.com | Email: nico.schwan@thalesgroup.com | |||
| End of changes. 230 change blocks. | ||||
| 676 lines changed or deleted | 692 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||