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/ |