rfc8896xml2.original.xml | rfc8896.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<!ENTITY I-D.ietf-alto-incr-update-sse SYSTEM "https://xml2rfc.ietf.org/public/r | ||||
fc/bibxml3/reference.I-D.ietf-alto-incr-update-sse.xml"> | ||||
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.2119.xml"> | ||||
<!ENTITY RFC7285 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7285.xml"> | ||||
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8174.xml"> | ||||
<!ENTITY RFC8189 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8189.xml"> | ||||
<!ENTITY RFC8259 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8259.xml"> | ||||
<!ENTITY I-D.ietf-alto-performance-metrics SYSTEM "https://xml2rfc.ietf.org/publ | ||||
ic/rfc/bibxml3/reference.I-D.ietf-alto-performance-metrics.xml"> | ||||
<!ENTITY I-D.xiang-alto-multidomain-analytics SYSTEM "https://xml2rfc.ietf.org/p | ||||
ublic/rfc/bibxml3/reference.I-D.xiang-alto-multidomain-analytics.xml"> | ||||
<!ENTITY IEEE.754.2008 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml6/refer | ||||
ence.IEEE.754.2008.xml"> | ||||
<!ENTITY RFC2818 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.2818.xml"> | ||||
<!ENTITY RFC5246 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5246.xml"> | ||||
<!ENTITY RFC5693 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.5693.xml"> | ||||
<!ENTITY RFC6708 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.6708.xml"> | ||||
<!ENTITY RFC7159 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7159.xml"> | ||||
<!ENTITY RFC7231 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.7231.xml"> | ||||
<!ENTITY RFC8446 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
C.8446.xml"> | ||||
]> | ||||
<rfc submissionType="IETF" docName="draft-ietf-alto-cost-calendar-21" category=" | ||||
std" ipr="trust200902"> | ||||
<!-- Generated by id2xml 1.5.0 on 2020-02-23T20:23:49Z --> | ||||
<?rfc compact="yes"?> | ||||
<?rfc text-list-symbols="o*+-"?> | ||||
<?rfc subcompact="no"?> | ||||
<?rfc sortrefs="no"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc strict="yes"?> | ||||
<?rfc toc="yes"?> | ||||
<front> | ||||
<title abbrev="ALTO Cost Calendar">Application-Layer Traffic Optimization | ||||
(ALTO) Cost Calendar</title> | ||||
<author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy" | ||||
> | ||||
<organization>Nokia Bell Labs</organization> | ||||
<address><postal><street>Route de Villejust</street> | ||||
<street>NOZAY 91460</street> | ||||
<street>FRANCE</street> | ||||
</postal> | ||||
<email>Sabine.Randriamasy@nokia-bell-labs.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Richard Yang" initials="R." surname="Yang"> | ||||
<organization>Yale University</organization> | ||||
<address><postal><street>51 Prospect st</street> | ||||
<street>New Haven, CT 06520</street> | ||||
<street>USA</street> | ||||
</postal> | ||||
<email>yry@cs.yale.edu</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Qin Wu" initials="Q." surname="Wu"> | ||||
<organization>Huawei</organization> | ||||
<address><postal><street>101 Software Avenue, Yuhua District</street> | ||||
<street>Nanjing, Jiangsu 210012</street> | ||||
<street>China</street> | ||||
</postal> | ||||
<email>sunseawq@huawei.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Lingli Deng" initials="L." surname="Deng"> | ||||
<organization>China Mobile</organization> | ||||
<address><postal><street>China</street> | ||||
</postal> | ||||
<email>denglingli@chinamobile.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Nico Schwan" initials="N." surname="Schwan"> | ||||
<organization>Thales Deutschland</organization> | ||||
<address><postal><street>Lorenzstrasse 10</street> | ||||
<street>Stuttgart 70435</street> | ||||
<street>Germany</street> | ||||
</postal> | ||||
<email>nico.schwan@thalesgroup.com</email> | ||||
</address> | ||||
</author> | ||||
<date day="17" month="March" year="2020"/> | ||||
<abstract><t> | ||||
This document is an extension to the base Application-Layer Traffic | ||||
Optimization (ALTO) protocol. It extends the ALTO cost information | ||||
service so that applications decide not only 'where' to connect, but | ||||
also 'when'. This is useful for applications that need to perform | ||||
bulk data transfer and would like to schedule these transfers during | ||||
an off-peak hour, for example. This extension introduces ALTO Cost | ||||
Calendar, with which an ALTO Server exposes ALTO cost values in JSON | ||||
arrays where each value corresponds to a given time interval. The | ||||
time intervals as well as other Calendar attributes, are specified in | ||||
the Information Resources Directory and ALTO Server responses.</t> | ||||
</abstract> | ||||
</front> | ||||
<middle> | ||||
<section title="Introduction" anchor="sect-1"><t> | ||||
The base Application-Layer Traffic Optimization (ALTO) protocol | ||||
specified in <xref target="RFC7285"/> provides guidance to overlay applicatio | ||||
ns that | ||||
need to select one or several hosts from a set of candidates able to | ||||
provide a desired resource. This guidance is based on parameters | ||||
that affect performance and efficiency of the data transmission | ||||
between the hosts such as the topological distance. The goal of ALTO | ||||
is to improve the Quality of Experience (QoE) in the application | ||||
while optimizing resource usage in the underlying network | ||||
infrastructure.</t> | ||||
<t> | ||||
The ALTO protocol in <xref target="RFC7285"/> specifies a network map which d | ||||
efines | ||||
groupings of endpoints in provider-defined network regions identified | ||||
by Provider-defined Identifiers (PIDs). The Cost Map Service, | ||||
Endpoint Cost Service (ECS) and Endpoint Ranking Service then provide | ||||
ISP-defined costs and rankings for connections among the specified | ||||
endpoints and PIDs and thus incentives for application clients to | ||||
connect to ISP preferred locations, for instance, to reduce their | ||||
costs. For the reasons outlined in the ALTO problem statement | ||||
<xref target="RFC5693"/> and requirement AR-14 of <xref target="RFC6708"/>, A | ||||
LTO does not | ||||
disseminate network metrics that change frequently. In a network, | ||||
the costs can fluctuate for many reasons having to do with | ||||
instantaneous traffic load or due to diurnal patterns of traffic | ||||
demand or planned events such as network maintenance, holidays or | ||||
highly publicized events. Thus, an ALTO application wishing to use | ||||
the Cost Map and Endpoint Cost Service at some future time will have | ||||
to estimate the state of the network at that time, a process that is, | ||||
at best, fragile and brittle since the application does not have any | ||||
visibility into the state of the network. Providing network costs | ||||
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 example by deferring backups or other background traffic to off- | ||||
peak hours.</t> | ||||
<t> | ||||
In case the ALTO Cost value changes are predictable over a certain | ||||
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 | ||||
this period in one single ALTO response. Using this set to schedule | ||||
data transfers allows optimizing the network resources usage and QoE. | ||||
ALTO Clients and Servers can also minimize their workload by reducing | ||||
and accordingly scheduling their data exchanges.</t> | ||||
<t> | ||||
This document extends <xref target="RFC7285"/> to allow an ALTO Server to pro | ||||
vide | ||||
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 | ||||
named an "ALTO Cost Calendar". The Filtered Cost Map Service and | ||||
Endpoint Cost Service are extended to provide Cost Calendars. In | ||||
addition to this functional ALTO enhancement, we expect to further | ||||
save network and storage resources by gathering multiple Cost Values | ||||
for one cost type into one single ALTO Server response.</t> | ||||
<t> | ||||
In this document, an "ALTO Cost Calendar" is specified in terms of | ||||
information resource capabilities that are applicable to time- | ||||
sensitive ALTO metrics. An ALTO Cost Calendar exposes ALTO Cost | ||||
Values in JSON arrays, see <xref target="RFC8259"/>, where each value corresp | ||||
onds to | ||||
a given time interval. The time intervals as well as other Calendar | ||||
attributes are specified in the Information Resources Directory (IRD) | ||||
and in the Server response to allow the ALTO Client to interpret the | ||||
received ALTO values. Last, the extensions for ALTO Calendars are | ||||
applicable to any Cost Mode and they ensure backwards compatibility | ||||
with legacy ALTO Clients - those that only support <xref target="RFC7285"/>.< | ||||
/t> | ||||
<t> | ||||
In the rest of this document, <xref target="sect-3"/> provides the design | ||||
characteristics. Sections <xref target="sect-4"/> and <xref target="sect-5"/ | ||||
> | ||||
define the formal specifications for the IRD and the information resources. | ||||
IANA, security and operational considerations are addressed respectively in s | ||||
ections | ||||
<xref target="sect-6"/>, <xref target="sect-7"/> and <xref target="sect-8"/>. | ||||
</t> | ||||
<section title="Some recent known uses" anchor="sect-1.1"> | ||||
<t> A potential use case is implementing smart network services that | ||||
allow applications to dynamically build end-to-end, virtual networks, | ||||
to satisfy given demands, with no manual intervention. For | ||||
example, data-transfer automation applications may need a network | ||||
service to determine on the availability of bandwidth resources, | ||||
to decide when to transfer their data sets. The SENSE project | ||||
[SENSE-sdn-e2e-net] supports such applications by requiring that | ||||
a network provides services such as the Time-Bandwidth-Product (TBP) | ||||
service, which informs applications of bandwidth availability during | ||||
a specific time period. ALTO Calendars can support this service if the | ||||
Calendar start date and duration cover the period of interest of the | ||||
requesting application. | ||||
</t> | ||||
<t> | ||||
The need of future scheduling of large scale traffic that can be | ||||
addressed by the ALTO protocol is also motivated by Unicorn, a | ||||
unified resource orchestration framework for multi-domain, geo- | ||||
distributed data analytics, see | ||||
<xref target="Unicorn-fgcs"/>. | ||||
</t> | ||||
</section> | ||||
<section title="Terminology" anchor="sect-1.2"><t><list style="symbols"> | ||||
<t>ALTO transaction: A request/response exchange between an ALTO | ||||
Client and an ALTO Server.</t> | ||||
<t>Client: When used with a capital "C", this term refers to an ALTO | ||||
Client.</t> | ||||
<t>Calendar, Cost Calendar: When used with capitalized words, these | ||||
terms refer to an ALTO Cost Calendar.</t> | ||||
<t>Calendared: this adjective qualifies information resources providing Co | ||||
st Calendars | ||||
and information on costs that are provided in the form of a Cost Calendar. | ||||
</t> | ||||
<t>Endpoint (EP): An endpoint is defined as in Section 2.1 of | ||||
<xref target="RFC7285"/>. It can be, for example, a peer, a CDN storage | ||||
location, a physical server involved in a virtual server-supported | ||||
application, a party in a resource-sharing swarm such as a | ||||
computation grid, or an online multi-party game.</t> | ||||
<t>ECM: Is an abbreviation for Endpoint Cost Map.</t> | ||||
<t>FCM: Is an abbreviation for Filtered Cost Map.</t> | ||||
<t>Server: When used with a capital "S", this term refers to an ALTO | ||||
Server.</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section title="Requirements Language" anchor="sect-2"><t> | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
"OPTIONAL" in this document are to be interpreted as described in | ||||
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, | ||||
they appear in all | ||||
capitals, as shown here.</t> | ||||
<t> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" | |||
When the words appear in lower case, they are to be interpreted with | category="std" consensus="true" | |||
their natural language meanings.</t> | docName="draft-ietf-alto-cost-calendar-21" number="8896" | |||
ipr="trust200902" obsoletes="" updates="" xml:lang="en" sortRefs="true" | ||||
symRefs="true" tocInclude="true" version="3"> | ||||
</section> | <!-- xml2rfc v2v3 conversion 2.42.0 --> | |||
<!-- Generated by id2xml 1.5.0 on 2020-02-23T20:23:49Z --> | ||||
<front> | ||||
<title abbrev="ALTO Cost Calendar">Application-Layer Traffic Optimization | ||||
(ALTO) Cost Calendar</title> | ||||
<seriesInfo name="RFC" value="8896"/> | ||||
<author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy"> | ||||
<organization>Nokia Bell Labs</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Route de Villejust</street> | ||||
<city>Nozay</city> | ||||
<code>91460</code> | ||||
<country>France</country> | ||||
</postal> | ||||
<email>Sabine.Randriamasy@nokia-bell-labs.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Y. Richard Yang" initials="Y." surname="Yang"> | ||||
<organization>Yale University</organization> | ||||
<address> | ||||
<postal> | ||||
<street>51 Prospect St.</street> | ||||
<city>New Haven</city> | ||||
<region>CT</region> | ||||
<code>06520</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>yry@cs.yale.edu</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Qin Wu" initials="Q." surname="Wu"> | ||||
<organization>Huawei</organization> | ||||
<address> | ||||
<postal> | ||||
<street>101 Software Avenue</street> | ||||
<extaddr>Yuhua District</extaddr> | ||||
<city>Nanjing</city> | ||||
<region>Jiangsu</region> | ||||
<code>210012</code> | ||||
<country>China</country> | ||||
</postal> | ||||
<email>sunseawq@huawei.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Lingli Deng" initials="L." surname="Deng"> | ||||
<organization>China Mobile</organization> | ||||
<address> | ||||
<postal> | ||||
<country>China</country> | ||||
</postal> | ||||
<email>denglingli@chinamobile.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Nico Schwan" initials="N." surname="Schwan"> | ||||
<organization>Thales Deutschland</organization> | ||||
<address> | ||||
<postal> | ||||
<street>Lorenzstrasse 10</street> | ||||
<city>Stuttgart</city><code>70435</code> | ||||
<country>Germany</country> | ||||
</postal> | ||||
<email>nico.schwan@thalesgroup.com</email> | ||||
</address> | ||||
</author> | ||||
<date year="2020" month="November" /> | ||||
<section title="Overview of ALTO Cost Calendars and terminology" anchor=" | <abstract> | |||
sect-3"> | <t>This document is an extension to the base Application-Layer Traffic | |||
Optimization (ALTO) protocol. It extends the ALTO cost information | ||||
service so that applications decide not only 'where' to connect but | ||||
also 'when'. This is useful for applications that need to perform bulk | ||||
data transfer and would like to schedule these transfers during an | ||||
off-peak hour, for example. This extension introduces the ALTO Cost | ||||
Calendar with which an ALTO Server exposes ALTO cost values in JSON | ||||
arrays where each value corresponds to a given time interval. The time | ||||
intervals, as well as other Calendar attributes, are specified in the | ||||
Information Resources Directory and ALTO Server responses.</t> | ||||
</abstract> | ||||
</front> | ||||
<middle> | ||||
<section anchor="sect-1" numbered="true" toc="default"> | ||||
<name>Introduction</name> | ||||
<t>The base Application-Layer Traffic Optimization (ALTO) protocol | ||||
specified in <xref target="RFC7285" format="default"/> provides guidance | ||||
to overlay applications that need to select one or several hosts from a | ||||
set of candidates able to provide a desired resource. This guidance is | ||||
based on parameters that affect performance and efficiency of the data | ||||
transmission between the hosts, such as the topological distance. The | ||||
goal of ALTO is to improve the Quality of Experience (QoE) in the | ||||
application while optimizing resource usage in the underlying network | ||||
infrastructure.</t> | ||||
<t>The ALTO protocol in <xref target="RFC7285" format="default"/> | ||||
specifies a network map that defines groupings of endpoints in | ||||
provider-defined network regions identified by Provider-defined | ||||
Identifiers (PIDs). The Cost Map Service, Endpoint Cost Service (ECS), | ||||
and Endpoint Ranking Service then provide ISP-defined costs and rankings | ||||
for connections among the specified endpoints and PIDs and thus | ||||
incentives for application clients to connect to ISP-preferred | ||||
locations, for instance, to reduce their costs. For the reasons | ||||
outlined in the ALTO problem statement <xref target="RFC5693" | ||||
format="default"/> and requirement AR-14 of <xref target="RFC6708" | ||||
format="default"/>, ALTO does not disseminate network metrics that | ||||
change frequently. In a network, the costs can fluctuate for many | ||||
reasons having to do with instantaneous traffic load or diurnal | ||||
patterns of traffic demand or planned events, such as network | ||||
maintenance, holidays, or highly publicized events. Thus, an ALTO | ||||
application wishing to use the Cost Map and Endpoint Cost Service at | ||||
some future time will have to estimate the state of the network at that | ||||
time, a process that is, at best, fragile and brittle, since the | ||||
application does not have any visibility into the state of the network. | ||||
Providing network costs 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 example, by deferring backups or other | ||||
background traffic to off- peak hours.</t> | ||||
<t>In case the ALTO cost value changes are predictable over a certain | ||||
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 this | ||||
period in one single ALTO response. Using this set to schedule data | ||||
transfers allows optimizing the network resources usage and QoE. ALTO | ||||
Clients and Servers can also minimize their workload by reducing and | ||||
accordingly scheduling their data exchanges.</t> | ||||
<t>This document extends <xref target="RFC7285" format="default"/> to | ||||
allow an ALTO Server to provide 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 named an "ALTO Cost Calendar". The Filtered | ||||
Cost Map Service and Endpoint Cost Service are extended to provide Cost | ||||
Calendars. In addition to this functional ALTO enhancement, we expect | ||||
to further save network and storage resources by gathering multiple cost | ||||
values for one cost type into one single ALTO Server response.</t> | ||||
<t>In this document, an "ALTO Cost Calendar" is specified in terms of | ||||
information resource capabilities that are applicable to time-sensitive | ||||
ALTO metrics. An ALTO Cost Calendar exposes ALTO cost values in JSON | ||||
arrays, see <xref target="RFC8259" format="default"/>, where each value | ||||
corresponds to a given time interval. The time intervals, as well as | ||||
other Calendar attributes, are specified in the Information Resources | ||||
Directory (IRD) and in the Server response to allow the ALTO Client to | ||||
interpret the received ALTO values. Last, the extensions for ALTO | ||||
Calendars are applicable to any cost mode, and they ensure backwards | ||||
compatibility with legacy ALTO Clients -- those that only support <xref | ||||
target="RFC7285" format="default"/>.</t> | ||||
<t>In the rest of this document, <xref target="sect-3" | ||||
format="default"/> provides the design characteristics. Sections <xref | ||||
target="sect-4" format="counter"/> and <xref target="sect-5" | ||||
format="counter"/> define the formal specifications for the IRD and the | ||||
information resources. IANA, security considerations, and operational | ||||
considerations are addressed respectively in Sections <xref | ||||
target="sect-6" format="counter"/>, <xref target="sect-7" | ||||
format="counter"/>, and <xref target="sect-8" format="counter"/>.</t> | ||||
<section anchor="sect-1.1" numbered="true" toc="default"> | ||||
<name>Some Recent Known Uses</name> | ||||
<t> A potential use case is implementing smart network services that | ||||
allow applications to dynamically build end-to-end, virtual networks | ||||
to satisfy given demands with no manual intervention. For example, | ||||
data-transfer automation applications may need a network service to | ||||
determine the availability of bandwidth resources to decide when | ||||
to transfer their data sets. The SENSE project <xref | ||||
target="SENSE" format="default"/> supports such | ||||
applications by requiring that a network provides services such as the | ||||
Time-Bandwidth-Product (TBP) service, which informs applications of | ||||
bandwidth availability during a specific time period. ALTO Calendars | ||||
can support this service if the Calendar start date and duration cover | ||||
the period of interest of the requesting application.</t> | ||||
<t>The need of future scheduling of large-scale traffic that can be | ||||
addressed by the ALTO protocol is also motivated by Unicorn, a unified | ||||
resource orchestration framework for multi-domain, geo-distributed | ||||
data analytics, see <xref target="UNICORN-FGCS" | ||||
format="default"/>.</t> | ||||
</section> | ||||
<section anchor="sect-1.2" numbered="true" toc="default"> | ||||
<name>Terminology</name> | ||||
<dl newline="true" spacing="normal"> | ||||
<dt>ALTO transaction:</dt> | ||||
<dd>A request/response exchange between an ALTO | ||||
Client and an ALTO Server.</dd> | ||||
<dt>Client:</dt> | ||||
<dd>When used with a capital "C", this term refers to an ALTO | ||||
Client.</dd> | ||||
<dt>Calendar, Cost Calendar, ALTO Calendar:</dt> | ||||
<dd>When used with capitalized words, these terms refer to an ALTO | ||||
Cost Calendar.</dd> | ||||
<dt>Calendared:</dt> | ||||
<dd>This adjective qualifies information resources providing Cost | ||||
Calendars and information on costs that are provided in the form of | ||||
a Cost Calendar.</dd> | ||||
<dt>Endpoint (EP):</dt> | ||||
<dd>An endpoint is defined as in <xref target="RFC7285" | ||||
sectionFormat="of" section="2.1"/>. It can be, for example, a peer, | ||||
a CDN storage location, a physical server involved in a virtual | ||||
server-supported application, a party in a resource-sharing swarm | ||||
such as a computation grid, or an online multi-party game.</dd> | ||||
<dt>ECM:</dt> | ||||
<dd>An abbreviation for Endpoint Cost Map.</dd> | ||||
<dt>FCM:</dt> | ||||
<dd>An abbreviation for Filtered Cost Map.</dd> | ||||
<dt>Server:</dt> | ||||
<dd>When used with a capital "S", this term refers to an ALTO Server.</ | ||||
dd> | ||||
</dl> | ||||
</section> | ||||
</section> | ||||
<section anchor="sect-2" numbered="true" toc="default"> | ||||
<name>Requirements Language</name> | ||||
<t> | ||||
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | ||||
to be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t>When the words appear in lower case, they are to be interpreted with | ||||
their natural language meanings.</t> | ||||
</section> | ||||
<section anchor="sect-3" numbered="true" toc="default"> | ||||
<name>Overview of ALTO Cost Calendars and Terminology</name> | ||||
<t>This section gives a high-level overview of the design. | <t>This section gives a high-level overview of the design. | |||
<!--It sets rules to ensure backwards compatibility with legacy ALTO Clien | ||||
ts | ||||
in <xref target="sect-3.3.2"/> .--> | ||||
It assumes the reader is familiar with the ALTO protocol <xref target="RFC | ||||
7285"/> and | ||||
its Multi-Cost ALTO extension <xref target="RFC8189"/>. | ||||
</t> | ||||
<section title="ALTO Cost Calendar overview" anchor="sect-3.1"> | It assumes the reader is familiar with the ALTO protocol <xref | |||
<t>An ALTO Cost Calendar provided by the ALTO Server provides 2 | target="RFC7285" format="default"/> and its Multi-Cost ALTO extension | |||
<xref target="RFC8189" format="default"/>.</t> | ||||
<section anchor="sect-3.1" numbered="true" toc="default"> | ||||
<name>ALTO Cost Calendar Overview</name> | ||||
<t>An ALTO Cost Calendar provided by the ALTO Server provides 2 | ||||
information items:</t> | information items:</t> | |||
<ul spacing="normal"> | ||||
<t> | <li>an array of values for a given metric, where each value | |||
<list style="symbols"><t>an array of values for a given metric, | specifies the metric corresponding to a time interval, where the | |||
where each value | value array can sometimes be a cyclic pattern that repeats a certain | |||
specifies the metric corresponding to a time interval, where the | number of times and</li> | |||
value array can | <li>attributes describing the time scope of the Calendar, including | |||
sometimes be a cyclic pattern that repeats a certain number of | the size and number of the intervals and the date of the starting | |||
times.</t> | point of the Calendar, allowing an ALTO Client to interpret the | |||
values properly.</li> | ||||
<t>attributes describing the time scope of the Calendar, includ | </ul> | |||
ing the | <t>An ALTO Cost Calendar can be used like a "time table" to figure out | |||
size and number of the intervals and the date of the starting | the best time to schedule data transfers and also to proactively | |||
point of the Calendar, allowing an ALTO Client to interpret the | manage application traffic given predictable events, such as an expected | |||
values properly.</t> | spike in traffic due to crowd gathering (concerts, sports, etc.), | |||
</list> | traffic-intensive holidays, and network maintenance. A Calendar may be | |||
</t> | viewed as a synthetic abstraction of, for example, real measurements | |||
gathered over previous periods on which statistics have been computed. | ||||
<t> | However, like for any schedule, unexpected network incidents may | |||
An ALTO Cost Calendar can be used like a "time table" to figure out | require the current ALTO Calendar to be updated and resent to the | |||
the best time to schedule data transfers and also to proactively | ALTO Clients needing it. The "ALTO Incremental Updates Using | |||
manage application traffic given predictable events such as expected | Server-Sent Events (SSE)" Service <xref target="RFC8895" | |||
spike in traffic due to crowd gathering (concerts, sports, etc.), | format="default"/> can be used to directly update the Calendar upon | |||
traffic-intensive holidays and network maintenance. A Calendar may | value changes if supported by both the Server and the Client.</t> | |||
be viewed as a synthetic abstraction of, for example, real | <t> | |||
measurements gathered over previous periods on which statistics have | ||||
been computed. However, like for any schedule, unexpected network | ||||
incidents may require the current ALTO Calendar to be updated and re- | ||||
sent to the ALTO Clients needing it. The "ALTO Incremental Updates | ||||
Using Server-Sent Events (SSE)" Service | ||||
<xref target="I-D.ietf-alto-incr-update-sse"/> can be used to | ||||
directly update the Calendar upon value changes, | ||||
if supported by both the Server and the Client.</t> | ||||
<t> | ||||
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. | |||
is also applicable as long as the size of the Map allows it.</t> | The Filtered Cost Map Service is also | |||
applicable as long as the size of the Map allows it.</t> | ||||
</section> | </section> | |||
<section anchor="sect-3.2" numbered="true" toc="default"> | ||||
<section title="ALTO Cost Calendar information features" anchor="sect-3.2 | <name>ALTO Cost Calendar Information Features</name> | |||
"><t> | <t> | |||
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 | attributes without date values | |||
in its information resources capabilities, whereas attributes with | in its information resources capabilities, whereas attributes with | |||
time dependent values are provided in the "meta" section of Server responses. | time-dependent values are provided in the "meta" section of Server responses. | |||
The ALTO Cost Calendar attributes provide the following information:</t> | The ALTO Cost Calendar attributes provide the following information:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li> | |||
<t>attributes to describe the time scope of the Calendar value array: | <t>attributes to describe the time scope of the Calendar value array | |||
<list style="symbols"> | : | |||
<!-- <t>The time is always expressed in UTC, </t> --> | ||||
<t>"time-interval-size": the applicable time interval size | ||||
for each Calendar value, defined in seconds, that can cover a wi | ||||
de range of values. | ||||
</t> | ||||
<t>"number-of-intervals": the number of intervals | ||||
provided in the Calendar. | ||||
</t> | </t> | |||
</list> | <ul spacing="normal"> | |||
</t> | ||||
<t>"calendar-start-time": specifying when the Calendar starts, that | ||||
is to which date the first value of the Cost Calendar is | ||||
applicable.</t> | ||||
<t>"repeated": an optional attribute indicating how many iterations | ||||
of the provided Calendar will have the same values. The Server | ||||
may use it to allow the Client to schedule its next request and | ||||
thus save its own workload by reducing processing of similar | ||||
requests.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
Attribute "repeated" may take a very high value if a Calendar | ||||
represents a cyclic value pattern that the Server considers valid for | ||||
a long period. In this case, the Server will only update the | ||||
Calendar values once this period has elapsed or if an unexpected | ||||
event occurs on the network. See <xref target="sect-8"/> for more | ||||
discussion.</t> | ||||
</section> | ||||
<section title="ALTO Calendar design characteristics" anchor="sect-3.3"> | ||||
<t>The present document uses the notations defined in Section "8.2 Notati | ||||
on" of | ||||
<xref target="RFC7285"/>.</t> | ||||
<t>The extensions in this document encode requests and responses | ||||
using JSON <xref target="RFC8259"/>.</t> | ||||
<t> | ||||
In the base protocol <xref target="RFC7285"/> section 11.2.3.6, an ALTO cost | ||||
is | ||||
specified as a generic JSONValue <xref target="RFC8259"/>, to allow extension | ||||
s. | ||||
However, that section 11.2.3.6 states: "An implementation of | ||||
the protocol in this document (<xref target="RFC7285"/>) SHOULD assume that | ||||
the cost is a JSONNumber and fail to parse if it is not, unless the implement | ||||
ation | ||||
is using an extension to this document that indicates when and how costs of o | ||||
ther | ||||
data types are signaled". </t> | ||||
<t> | ||||
The present document extends the | ||||
definition of a legacy cost map given in <xref target="RFC7285"/> to allow a | ||||
cost | ||||
entry to be an array of values, with one value per time interval, instead of | ||||
being just one number, when the Cost Calendar functionality is activated on t | ||||
his cost. | ||||
Therefore the implementor of this extension MUST consider that a cost entry i | ||||
s an array of values | ||||
if this cost has been queried as a Calendar. </t> | ||||
<t> Specifically, an implementation of this extension MUST parse the | ||||
"number-of-intervals" attribute of the Calendar attributes | ||||
in an IRD entry announcing a service providing a Cost Calendar for a given | ||||
cost 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 array is that specified by the "number-of-intervals" attribute. | ||||
The following rules attempt to ensure consistency between the array size anno | ||||
unced by the Server and the | ||||
actual size of the array received by the Client: | ||||
<list style="symbols"> | ||||
<t>The size of the array of values conveyed in a Cost Calendar and received b | ||||
y the Client MUST | ||||
be equal to the value of attribute "number-of-intervals" indicated in the IRD | ||||
for the | ||||
requested cost type.</t> | ||||
<t>When the size of the array received by the Client is different from the ex | ||||
pected size, | ||||
the Client SHOULD ignore the received array.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
To realize an ALTO Calendar, this document extends the IRD and the ALTO | ||||
requests and responses for Cost Calendars.</t> | ||||
<t> | ||||
This extension is designed to be lightweight and to ensure backwards | ||||
compatibility with base protocol ALTO Clients and with other | ||||
extensions. It relies on section 8.3.7 "Parsing of Unknown Fields" | ||||
of <xref target="RFC7285"/> that writes: "Extensions may include additional f | ||||
ields within JSON objects defined in this document. ALTO implementations MUST i | ||||
gnore unknown fields when processing ALTO messages."</t> | ||||
<t> | ||||
The Calendar-specific capabilities are integrated in the information | ||||
resources of the IRD and in the "meta" member of ALTO responses to | ||||
Cost Calendars requests. A Calendar and its capabilities are | ||||
associated with a given information resource and within this | ||||
information resource, with a given cost type. This design has several | ||||
advantages:</t> | ||||
<t><list style="symbols"><t>it does not introduce a new mode,</t> | ||||
<t>it does not introduce new media types,</t> | ||||
<t>it allows an ALTO Server to offer, for a cost type, different Calendar | ||||
s | ||||
with attributes that are specific to the information resources providing | ||||
a Calendar for this cost type, instead of being globally specific to the | ||||
cost type. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
The applicable Calendared information resources are:</t> | ||||
<t><list style="symbols"><t>the Filtered Cost Map,</t> | ||||
<t>the Endpoint Cost Map.</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
The ALTO Server can choose in which frequency it provides cost | ||||
Calendars to ALTO Clients. It may either provide Calendar updates | ||||
starting at the request date, or carefully schedule its updates so as | ||||
to take profit from a potential repetition/periodicity of Calendar | ||||
values.</t> | ||||
<t>Since Calendar attributes are specific to an information resource, a Serve | ||||
r may adapt | ||||
the granularity of the calendared information so as to moderate the volume of | ||||
exchanged data. | ||||
For example: suppose a Server provides a Calendar for cost type name "routing | ||||
cost". | ||||
The Server may offer a Calendar in a Cost Map resource, which may be a volumi | ||||
nous resource, | ||||
as an array of 6 intervals lasting each 4 hours. It may also offer a Calendar | ||||
in an Endpoint Cost Map resource, | ||||
which is potentially less voluminous, as a finer-grained array of 24 interval | ||||
s lasting 1 hour each. | ||||
</t> | ||||
<t>The ALTO Server does not support constraints on Calendars, | ||||
provided Calendars are requested for numerical values, for two main reasons: | ||||
<list style="symbols"> | ||||
<t>constraints on an array of values may be various: for instance, some Clien | ||||
ts may | ||||
refuse Calendars with one single value violating a constraint, where as | ||||
other ones may tolerate Calendars with values violating constraints for examp | ||||
le | ||||
at given times. Therefore, expressing constraints in a way that covers all po | ||||
ssible | ||||
Client preferences is challenging, </t> | ||||
<t>if constraints were to be supported, the processing overhead would be subs | ||||
tantial | ||||
for the Server as it would have to parse alle the values of the Calendar arra | ||||
y before | ||||
returning a response. </t> | ||||
</list> | ||||
</t> | ||||
<t>As providing the constraint functionality in conjunction | ||||
with the Calendar functionality is not feasible for the reasons described abo | ||||
ve, | ||||
the two features are mutually exclusive. The absence of constraints on | ||||
Filtered Cost Map and Endpoint Cost Map Calendars | ||||
reflects a divergence from the non-calendared information resources defined i | ||||
n | ||||
<xref target="RFC7285"/> and extended in <xref target="RFC8189"/>, | ||||
that support optional constraints. </t> | ||||
<section title="ALTO Cost Calendar for all cost modes" anchor="sect-3.3.1 | ||||
"><t> | ||||
An ALTO Cost Calendar is well-suited for values encoded in the | ||||
"numerical" mode. Actually, a Calendar can also represent metrics in | ||||
other modes considered as compatible with time-varying values. For | ||||
example, types of Cost values such as JSONBool can also be | ||||
calendared, as their value may be 'true' or 'false' depending on | ||||
given time periods or likewise, values represented by strings, such | ||||
as "medium", "high", "low", "blue", "open".</t> | ||||
<t> | ||||
Note also that a Calendar is suitable as well for time-varying | ||||
metrics provided in the "ordinal" mode, if these values are time- | ||||
varying and the ALTO Server provides updates of cost value based | ||||
preferences.</t> | ||||
</section> | ||||
<section title="Compatibility with legacy ALTO Clients" anchor="sect-3.3. | ||||
2"><t> | ||||
The ALTO protocol extensions for Cost Calendars have been defined so | ||||
as to ensure that Calendar-capable ALTO Servers can provide legacy | ||||
ALTO Clients with legacy information resources as well. That is, a | ||||
legacy ALTO Client can request resources and receive responses as | ||||
specified in <xref target="RFC7285"/>.</t> | ||||
<t> | ||||
A Calendar-aware ALTO Server MUST implement the base protocol | ||||
specified in <xref target="RFC7285"/>.</t> | ||||
<t> | ||||
A Calendar-aware ALTO Client MUST implement the base protocol | ||||
specified in <xref target="RFC7285"/>.</t> | ||||
<t> | ||||
As a consequence, when a metric is available as a Calendar array, it | ||||
also MUST be available as a single value as required by <xref target="RFC7285 | ||||
"/>. | ||||
The Server, in this case, provides the current value of the metric to | ||||
either Calendar-aware Clients not interested in future or time-based | ||||
values, or Clients implementing <xref target="RFC7285"/> only.</t> | ||||
<t> | ||||
For compatibility with legacy ALTO Clients specified in <xref target="RFC7285 | ||||
"/>, | ||||
calendared information resources are not applicable for full cost | ||||
maps for the following reason: a legacy ALTO Client would receive a | ||||
calendared cost map via an HTTP 'GET' command. As specified in | ||||
section 8.3.7 of <xref target="RFC7285"/>, it will ignore the Calendar Attrib | ||||
utes | ||||
indicated in the "meta" of the responses. Therefore, lacking | ||||
information on Calendar attributes, it will not be able to correctly | ||||
interpret and process the values of the received array of Calendar | ||||
cost values.</t> | ||||
<t> | ||||
Therefore, calendared information resources MUST be requested via the | ||||
Filtered Cost Map Service or the Endpoint Cost Service, using a POST | ||||
method.</t> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section title="ALTO Calendar specification: IRD extensions" anchor="sect | ||||
-4"><t> | ||||
The Calendar attributes in the IRD information resources capabilities | ||||
carry dateless values. A Calendar is associated with an | ||||
information resource rather than a cost type. For example, a Server | ||||
can provide a "routingcost" Calendar for the Filtered Cost Map | ||||
Service at a granularity of one day and a "routingcost" Calendar for | ||||
the Endpoint Cost Service at a finer granularity but for a limited | ||||
number of endpoints. An example IRD with Calendar specific features | ||||
is provided in <xref target="sect-4.3"/>.</t> | ||||
<section title="Calendar attributes in the IRD resource capabilities" anc | ||||
hor="sect-4.1"><t> | ||||
A Cost Calendar for a given cost type MUST be indicated in the IRD by | ||||
an object of type CalendarAttributes. A CalendarAttributes object is | ||||
represented by the "calendar-attributes" member of a resource entry. | ||||
Member "calendar-attributes" is an array of CalendarAttributes 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 once in the | ||||
"calendar-attributes" member of a resource entry; multiple | ||||
appearances of a cost type name in the CalendarAttributes object of the | ||||
"calendar-attributes" member MUST cause the ALTO Client to ignore any | ||||
occurrences of this name beyond the first encountered occurrence. | ||||
The Client SHOULD consider the CalendarAttributes object in the array | ||||
containing the first encountered occurrence of a cost type as the | ||||
valid one for this cost type. As an alternative, the Client may want to avoid | ||||
the risks of erroneous guidance associated to the use | ||||
of potentially invalid Calendar values. In this case, the Client MAY ignore | ||||
the totality of occurences of CalendarAttributes objects containing the cost | ||||
type name | ||||
and query the cost type using <xref target="RFC7285"/>. </t> | ||||
<t> | ||||
The encoding format for object CalendarAttributes, using JSON | ||||
<xref target="RFC8259"/>, is as follows:</t> | ||||
<t> | <li>"time-interval-size": the applicable time interval size for | |||
CalendarAttributes calendar-attributes <1..*>;</t> | each Calendar value, defined in seconds, that can cover a wide | |||
range of values.</li> | ||||
<li>"number-of-intervals": the number of intervals provided in | ||||
the Calendar.</li> | ||||
</ul> | ||||
</li> | ||||
<li>"calendar-start-time": specifying when the Calendar starts; that | ||||
is, to which date the first value of the Cost Calendar is | ||||
applicable.</li> | ||||
<li>"repeated": an optional attribute indicating how many iterations | ||||
of the provided Calendar will have the same values. The Server may | ||||
use it to allow the Client to schedule its next request and thus | ||||
save its own workload by reducing processing of similar | ||||
requests.</li> | ||||
</ul> | ||||
<t>Attribute "repeated" may take a very high value if a Calendar | ||||
represents a cyclic value pattern that the Server considers valid for | ||||
a long period. In this case, the Server will only update the Calendar | ||||
values once this period has elapsed or if an unexpected event occurs | ||||
on the network. See <xref target="sect-8" format="default"/> for more | ||||
discussion.</t> | ||||
</section> | ||||
<section anchor="sect-3.3" numbered="true" toc="default"> | ||||
<name>ALTO Calendar Design Characteristics</name> | ||||
<t>The present document uses the notations defined in "Notation" | ||||
(<xref target="RFC7285" sectionFormat="of" section="8.2"/>).</t> | ||||
<t>The extensions in this document encode requests and responses using | ||||
JSON <xref target="RFC8259" format="default"/>.</t> | ||||
<figure><artwork><![CDATA[ | <t>In the base protocol <xref target="RFC7285"/>, an ALTO cost is | |||
specified as a generic JSONValue <xref target="RFC8259" | ||||
format="default"/> to allow extensions. However, that section (<xref | ||||
target="RFC7285" sectionFormat="of" section="11.2.3.6"/>) states:</t> | ||||
<blockquote>An implementation of the protocol in | ||||
this document | ||||
<bcp14>SHOULD</bcp14> assume that the cost is a JSONNumber and fail to | ||||
parse if it is not, unless the implementation is using an extension to | ||||
this document that indicates when and how costs of other data types | ||||
are signaled.</blockquote> | ||||
<t>The present document extends the definition of a legacy cost map | ||||
given in <xref target="RFC7285" format="default"/> to allow a cost | ||||
entry to be an array of values, with one value per time interval, | ||||
instead of being just one number, when the Cost Calendar functionality | ||||
is activated on this cost. Therefore, the implementor of this extension | ||||
<bcp14>MUST</bcp14> consider that a cost entry is an array of values | ||||
if this cost has been queried as a Calendar. </t> | ||||
<t> Specifically, an implementation of this extension | ||||
<bcp14>MUST</bcp14> parse the "number-of-intervals" attribute of the | ||||
Calendar attributes in an IRD entry announcing a service providing a | ||||
Cost Calendar for a given cost 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 array is that specified by the | ||||
"number-of-intervals" attribute. The following rules attempt to ensure | ||||
consistency between the array size announced by the Server and the | ||||
actual size of the array received by the Client:</t> | ||||
<ul spacing="normal"> | ||||
<li>The size of the array of values conveyed in a Cost Calendar and | ||||
received by the Client <bcp14>MUST</bcp14> be equal to the value of | ||||
attribute "number-of-intervals" indicated in the IRD for the | ||||
requested cost type.</li> | ||||
<li>When the size of the array received by the Client is different | ||||
from the expected size, the Client <bcp14>SHOULD</bcp14> ignore the | ||||
received array.</li> | ||||
</ul> | ||||
<t>To realize an ALTO Calendar, this document extends the IRD and the | ||||
ALTO requests and responses for Cost Calendars.</t> | ||||
<t>This extension is designed to be lightweight and to ensure | ||||
backwards compatibility with base protocol ALTO Clients and with other | ||||
extensions. It relies on "Parsing of Unknown Fields" (<xref | ||||
target="RFC7285" sectionFormat="of" section="8.3.7"/>), which states: | ||||
"Extensions may include additional fields within JSON objects defined | ||||
in this document. ALTO implementations <bcp14>MUST</bcp14> ignore | ||||
unknown fields when processing ALTO messages."</t> | ||||
<t>The Calendar-specific capabilities are integrated in the | ||||
information resources of the IRD and in the "meta" member of ALTO | ||||
responses to Cost Calendars requests. A Calendar and its capabilities | ||||
are associated with a given information resource and within this | ||||
information resource with a given cost type. This design has several | ||||
advantages:</t> | ||||
<ul spacing="normal"> | ||||
<li>it does not introduce a new mode,</li> | ||||
<li>it does not introduce new media types, and</li> | ||||
<li>it allows an ALTO Server to offer, for a cost type, different | ||||
Calendars with attributes that are specific to the information | ||||
resources providing a Calendar for this cost type, instead of being | ||||
globally specific to the cost type.</li> | ||||
</ul> | ||||
<t>The applicable Calendared information resources are:</t> | ||||
<ul spacing="normal"> | ||||
<li>the Filtered Cost Map and</li> | ||||
<li>the Endpoint Cost Map.</li> | ||||
</ul> | ||||
<t>The ALTO Server can choose in which frequency it provides cost | ||||
Calendars to ALTO Clients. It may either provide Calendar updates | ||||
starting at the request date or carefully schedule its updates so as | ||||
to take profit from a potential repetition/periodicity of Calendar | ||||
values.</t> | ||||
<t>Since Calendar attributes are specific to an information resource, | ||||
a Server may adapt the granularity of the calendared information so as | ||||
to moderate the volume of exchanged data. For example, suppose a | ||||
Server provides a Calendar for cost type name "routingcost". The | ||||
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. It may also offer a Calendar in an Endpoint Cost Map resource, | ||||
which is potentially less voluminous, as a finer-grained array of 24 | ||||
intervals lasting 1 hour each.</t> | ||||
<t>The ALTO Server does not support constraints on Calendars, provided | ||||
Calendars are requested for numerical values, for two main | ||||
reasons:</t> | ||||
<ul spacing="normal"> | ||||
<li>Constraints on an array of values may be various. For instance, | ||||
some Clients may refuse Calendars with one single value violating a | ||||
constraint, whereas other ones may tolerate Calendars with values | ||||
violating constraints, for example, at given times. Therefore, | ||||
expressing constraints in a way that covers all possible Client | ||||
preferences is challenging.</li> | ||||
<li>If constraints were to be supported, the processing overhead | ||||
would be substantial for the Server as it would have to parse all | ||||
the values of the Calendar array before returning a response. </li> | ||||
</ul> | ||||
<t>As providing the constraint functionality in conjunction with the | ||||
Calendar functionality is not feasible for the reasons described | ||||
above, the two features are mutually exclusive. The absence of | ||||
constraints on Filtered Cost Map and Endpoint Cost Map Calendars | ||||
reflects a divergence from the non-calendared information resources | ||||
defined in <xref target="RFC7285" format="default"/> and extended in | ||||
<xref target="RFC8189" format="default"/>, which support optional | ||||
constraints. </t> | ||||
<section anchor="sect-3.3.1" numbered="true" toc="default"> | ||||
<name>ALTO Cost Calendar for All Cost Modes</name> | ||||
<t>An ALTO Cost Calendar is well suited for values encoded in the | ||||
"numerical" mode. Actually, a Calendar can also represent metrics | ||||
in other modes considered as compatible with time-varying | ||||
values. For example, types of cost values (such as JSONBool) can also | ||||
be calendared (as their value may be 'true' or 'false' depending on | ||||
given time periods or likewise) values represented by strings, such | ||||
as "medium", "high", "low", "blue", and "open".</t> | ||||
<t>Note also that a Calendar is suitable as well for time-varying | ||||
metrics provided in the "ordinal" mode if these values are | ||||
time-varying and the ALTO Server provides updates of | ||||
cost-value-based preferences.</t> | ||||
</section> | ||||
<section anchor="sect-3.3.2" numbered="true" toc="default"> | ||||
<name>Compatibility with Legacy ALTO Clients</name> | ||||
<t>The ALTO protocol extensions for Cost Calendars have been defined | ||||
so as to ensure that Calendar-capable ALTO Servers can provide | ||||
legacy ALTO Clients with legacy information resources as well. That | ||||
is, a legacy ALTO Client can request resources and receive responses | ||||
as specified in <xref target="RFC7285" format="default"/>.</t> | ||||
<t>A Calendar-aware ALTO Server <bcp14>MUST</bcp14> implement the | ||||
base protocol specified in <xref target="RFC7285" | ||||
format="default"/>.</t> | ||||
<t>A Calendar-aware ALTO Client <bcp14>MUST</bcp14> implement the | ||||
base protocol specified in <xref target="RFC7285" | ||||
format="default"/>.</t> | ||||
<t>As a consequence, when a metric is available as a Calendar array, | ||||
it also <bcp14>MUST</bcp14> be available as a single value, as | ||||
required by <xref target="RFC7285" format="default"/>. The Server, | ||||
in this case, provides the current value of the metric to either | ||||
Calendar-aware Clients not interested in future or time-based values | ||||
or Clients implementing <xref target="RFC7285" format="default"/> | ||||
only.</t> | ||||
<t>For compatibility with legacy ALTO Clients specified in <xref | ||||
target="RFC7285" format="default"/>, calendared information | ||||
resources are not applicable for full cost maps for the following | ||||
reason: a legacy ALTO Client would receive a calendared cost map via | ||||
an HTTP 'GET' command. As specified in <xref target="RFC7285" | ||||
sectionFormat="of" section="8.3.7"/>, it will ignore the Calendar | ||||
attributes indicated in the "meta" of the responses. Therefore, | ||||
lacking information on Calendar attributes, it will not be able to | ||||
correctly interpret and process the values of the received array of | ||||
Calendar cost values.</t> | ||||
<t>Therefore, calendared information resources <bcp14>MUST</bcp14> | ||||
be requested via the Filtered Cost Map Service or the Endpoint Cost | ||||
Service using a POST method.</t> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section anchor="sect-4" numbered="true" toc="default"> | ||||
<name>ALTO Calendar Specification: IRD Extensions</name> | ||||
<t>The Calendar attributes in the IRD information resources capabilities | ||||
carry dateless values. A Calendar is associated with an information | ||||
resource rather than a cost type. For example, a Server can provide a | ||||
"routingcost" Calendar for the Filtered Cost Map Service at a | ||||
granularity of one day and a "routingcost" Calendar for the Endpoint | ||||
Cost Service at a finer granularity but for a limited number of | ||||
endpoints. An example IRD with Calendar-specific features is provided | ||||
in <xref target="sect-4.3" format="default"/>.</t> | ||||
<section anchor="sect-4.1" numbered="true" toc="default"> | ||||
<name>Calendar Attributes in the IRD Resource Capabilities</name> | ||||
<t>A Cost Calendar for a given cost type <bcp14>MUST</bcp14> be | ||||
indicated in the IRD by an object of type CalendarAttributes. A | ||||
CalendarAttributes object is represented by the "calendar-attributes" | ||||
member of a resource entry. Member "calendar-attributes" is an array | ||||
of CalendarAttributes objects. Each CalendarAttributes object lists a | ||||
set of one or more cost types it applies to. A cost type name | ||||
<bcp14>MUST NOT</bcp14> appear more than once in the | ||||
"calendar-attributes" member of a resource entry; multiple appearances | ||||
of a cost type name in the CalendarAttributes object of the | ||||
"calendar-attributes" member <bcp14>MUST</bcp14> cause the ALTO Client | ||||
to ignore any occurrences of this name beyond the first encountered | ||||
occurrence. The Client <bcp14>SHOULD</bcp14> consider the | ||||
CalendarAttributes object in the array containing the first | ||||
encountered occurrence of a cost type as the valid one for this cost | ||||
type. As an alternative, the Client may want to avoid the risks of | ||||
erroneous guidance associated to the use of potentially invalid | ||||
Calendar values. In this case, the Client <bcp14>MAY</bcp14> ignore | ||||
the totality of occurrences of CalendarAttributes objects containing | ||||
the cost type name and query the cost type using <xref | ||||
target="RFC7285" format="default"/>.</t> | ||||
<t>The encoding format for object CalendarAttributes using JSON <xref | ||||
target="RFC8259" format="default"/> is as follows:</t> | ||||
<t>CalendarAttributes calendar-attributes <1..*>;</t> | ||||
<sourcecode><![CDATA[ | ||||
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; | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <dl newline="true" spacing="normal"> | |||
<t><list style="symbols"><t>"cost-type-names": | <dt>"cost-type-names":</dt> | |||
<list style="symbols"><t>An array of one or more elements indicating the | <dd>An array of one or more elements indicating the cost type | |||
cost type names | names in the IRD entry to which the values of "time-interval-size" | |||
in the IRD entry to which the values of "time-interval-size" and | and "number-of-intervals" apply.</dd> | |||
"number-of-intervals" apply.</t> | <dt>"time-interval-size":</dt> | |||
</list> | <dd>The duration of an ALTO Calendar time interval in a unit of | |||
</t> | seconds. A "time-interval-size" value contains a non-negative | |||
JSONNumber. Example values are 300 and 7200, meaning that each | ||||
<t>"time-interval-size":<list style="symbols"><t>is the duration of an | Calendar value applies on a time interval that lasts 5 minutes and | |||
ALTO Calendar time interval in a unit of seconds. A "time-interval-size | 2 hours, respectively. Since an interval size (e.g., 100 ms) can | |||
" value | be smaller than the unit, the value specified may be a floating | |||
contains a non-negative JSONNumber. Example values are: 300 and | point (e.g., 0.1). Both ALTO Clients and Servers should be aware | |||
7200, meaning that each Calendar value applies on a time | of potential precision issues caused by using floating point | |||
interval that lasts 5 minutes and 2 hours, respectively. Since an | numbers; for example, the floating number 0.1 cannot be | |||
interval size (e.g., 100 ms) can be smaller than the unit, the value | represented precisely using a finite number of binary bits. To | |||
specified may be a floating point (e.g., 0.1). Both ALTO Clients and | improve interoperability and be consistent with <xref | |||
Servers should be aware of potential precision issues caused by using | target="RFC7285" format="default"/> on the | |||
floating point numbers; for example, | use of floating point numbers, the Server and the Client | |||
the floating number 0.1 cannot be represented precisely using a finite | <bcp14>SHOULD</bcp14> use IEEE 754 double-precision floating point | |||
number of binary bits. To improve interoperability and be consistent wi | <xref target="IEEE.754.2019" format="default"/> to store this | |||
th | value.</dd> | |||
[RFC7285] on the use of floating point numbers, the Server and the Clie | ||||
nt | ||||
SHOULD use IEEE 754 | ||||
double-precision floating point <xref target="IEEE.754.2008"/> to store | ||||
this value. | ||||
</t> | ||||
<!-- | ||||
, if the client and the server use different storage, they may encounte | ||||
r | ||||
interop issues (see Sectio) | ||||
the server may have an internal, integer representation in ms, and stor | ||||
e | ||||
100 as an int (0.1 sec) in the local storage; the sever sends "0.1" as | ||||
the interval size to the client; the client may use a float/double to s | ||||
tore | ||||
the JSON number, which may not represent 0.1 precisely. To improve | ||||
interoperability, the server and the client SHOULD use IEEE 754 | ||||
double-precision floating point <xref target="IEEE.754.2008"/> to store | ||||
this value, in unit of seconds.</t> | ||||
--> | ||||
</list> | ||||
</t> | ||||
<t>"number-of-intervals":<list style="symbols"> | ||||
<t>is a strictly positive integer (greater or equal to 1), that indicates | ||||
the number of values of the Cost Calendar array.</t> | ||||
</list> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | <dt>"number-of-intervals":</dt> | |||
- An ALTO Server SHOULD specify the "time-interval-size" in the IRD | <dd>A strictly positive integer (greater or equal to 1) that | |||
indicates the number of values of the Cost Calendar array.</dd> | ||||
</dl> | ||||
<ul spacing="normal"> | ||||
<li>An ALTO Server <bcp14>SHOULD</bcp14> specify the "time-interval-siz | ||||
e" in the IRD | ||||
as the smallest it is able to provide. A Client that needs | as the smallest it is able to provide. A Client that needs | |||
a longer interval can aggregate multiple cost values to obtain it.</t> | a longer interval can aggregate multiple cost values to obtain it.</li> | |||
<t> | <li>Attribute "cost-type-names" is associated with | |||
- Attribute "cost-type-names" is associated with "time-interval-size" and | "time-interval-size" and "number-of-intervals", because multiple cost | |||
"number-of-intervals", because multiple cost types may share the same | types may share the same values for attributes "time-interval-size" | |||
values for attributes "time-interval-size" and "number-of-intervals". | and "number-of-intervals". To avoid redundancies, cost type names | |||
To avoid redundancies, cost type names sharing the same values for "time-inte | sharing the same values for "time-interval-size" and | |||
rval-size" | "number-of-intervals" are grouped in the "cost-type-names" | |||
and "number-of-intervals" are grouped in the "cost-type-names" attribute. | attribute. In the example IRD provided in <xref target="sect-4.3" | |||
In the example IRD provided in <xref target="sect-4.3"/>, the information res | format="default"/>, the information resource | |||
ource | "filtered-cost-map-calendar" provides a Calendar for cost type names | |||
“filtered-cost-map-calendar” provides a Calendar for cost type names | "num-routingcost", "num-throughputrating", and | |||
"num-routingcost", "num-throughputrating" and "string-servicestatus". | "string-servicestatus". Cost type names "num-routingcost" and | |||
Cost type names "num-routingcost" and "num-throughputrating" are | "num-throughputrating" are grouped in the "cost-type-names" attribute | |||
grouped in the "cost-type-names" attribute because they share the | because they share the same values for "time-interval-size" and | |||
same values for "time-interval-size" and "number-of-intervals", | "number-of-intervals", which are respectively 7200 and 12.</li> | |||
which are respectively 7200 and 12. | <li>Multiplying "time-interval-size" by "number-of-intervals" provides | |||
</t> | the duration of the provided Calendar. For example, an ALTO Server | |||
may provide a Calendar for ALTO values changing every | ||||
<t> | "time-interval-size" equal to 5 minutes. If "number-of-intervals" has | |||
- Multiplying "time-interval-size" by "number-of-intervals" provides | the value 12, then the duration of the provided Calendar is 1 | |||
the duration of the provided Calendar. For example, an ALTO Server | hour.</li> | |||
may provide a Calendar for ALTO values changing every "time-interval- | </ul> | |||
size" equal to 5 minutes. If "number-of-intervals" has the value 12, | </section> | |||
then the duration of the provided Calendar is 1 hour.</t> | <section anchor="sect-4.2" numbered="true" toc="default"> | |||
<name>Calendars in a Delegate IRD</name> | ||||
</section> | <t>It may be useful to distinguish IRD resources supported by the base | |||
ALTO protocol from resources supported by its extensions. To achieve | ||||
<section title="Calendars in a delegate IRD" anchor="sect-4.2"><t> | this, one option is that a "root" ALTO Server implementing <xref | |||
It may be useful to distinguish IRD resources supported by the base | target="RFC7285" format="default"/> resources and running at a given | |||
ALTO protocol from resources supported by its extensions. To achieve | domain delegates "specialized" information resources, such as the ones | |||
this, one option, is that a "root" ALTO Server implementing | providing Cost Calendars, to another ALTO Server running in a | |||
<xref target="RFC7285"/> resources and running at a given domain, delegates " | subdomain. The "root" ALTO Server can provide a Calendar-specific | |||
specialized" | resource entry that has a media-type of | |||
information resources such as the ones providing Cost Calendars, | "application/alto-directory+json" and that specifies the URI allowing | |||
to another ALTO Server running in a subdomain. The "root" ALTO Server | to retrieve the location of a Calendar-aware Server and discover its | |||
can provide a Calendar-specific resource entry, that has a media-type | resources. This option is described in "Delegation Using IRD" (<xref | |||
of "application/alto-directory+json" and that specifies the | target="RFC7285" sectionFormat="of" section="9.2.4"/>).</t> | |||
URI allowing to retrieve the location of a Calendar-aware Server and | <t>This document provides an example where a "root" ALTO Server runs | |||
discover its resources. | in a domain called "alto.example.com". It delegates the announcement | |||
of Calendars capabilities to an ALTO Server running in a subdomain | ||||
This option is described in Section 9.2.4 "Delegation using IRDs" | called "custom.alto.example.com". The location of the "delegate | |||
of <xref target="RFC7285"/>.</t> | Calendar IRD" is assumed to be indicated in the "root" IRD by the | |||
resource entry: "custom-calendared-resources".</t> | ||||
<t> | <t> | |||
This document provides an example, where a "root" ALTO Server runs in | ||||
a domain called "alto.example.com". It delegates the announcement of | ||||
Calendars capabilities to an ALTO Server running in a subdomain | ||||
called "custom.alto.example.com". The location of the "delegate Calendar IRD | ||||
" is | ||||
assumed to be indicated in the "root" IRD by the | ||||
resource entry: "custom-calendared-resources".</t> | ||||
<t> | ||||
Another benefit of delegation is that some cost types for some resources | Another benefit of delegation is that some cost types for some resources | |||
may be more advantageous as Cost Calendars and it makes little sense to g et them | may be more advantageous as Cost Calendars, and it makes little sense to get them | |||
as a single value. For example, if a cost type has predictable and freque ntly | as a single value. For example, if a cost type has predictable and freque ntly | |||
changing values, calendared in short time intervals such as a minute, | changing values calendared in short time intervals, such as a minute, | |||
it saves time and network resources to track the cost values via a focuse d | it saves time and network resources to track the cost values via a focuse d | |||
delegate Server rather than the more general "root" Server.</t> | delegate Server rather than the more general "root" Server.</t> | |||
</section> | ||||
</section> | <section anchor="sect-4.3" numbered="true" toc="default"> | |||
<name>Example IRD with ALTO Cost Calendars</name> | ||||
<section title="Example IRD with ALTO Cost Calendars" anchor="sect-4.3">< | <t>This section provides an example ALTO Server IRD that supports | |||
t> | various cost metrics and cost modes. In particular, since <xref | |||
This section provides an example ALTO Server IRD that supports | target="RFC7285" format="default"/> makes it mandatory, the Server | |||
various cost metrics and cost modes. In particular, since <xref target="RFC7 | uses metric "routingcost" in the "numerical" mode.</t> | |||
285"/> | <t>For illustrative purposes, this section introduces 3 other | |||
makes it mandatory, the Server uses metric "routingcost" in the | fictitious example metrics and modes that should be understood as | |||
"numerical" mode.</t> | examples and should not be used or considered as normative.</t> | |||
<t>The cost type names used in the example IRD are as follows:</t> | ||||
<t> | <dl newline="true" spacing="normal"> | |||
For illustrative purposes, this section introduces 3 other fictitious | <dt>"num-routingcost":</dt> | |||
example metrics and modes that should be understood as examples and | <dd>Refers to metric "routingcost" in the | |||
should not be used or considered as normative.</t> | numerical mode, as defined in <xref target="RFC7285" | |||
format="default"/> and registered with IANA.</dd> | ||||
<t> | <dt>"num-owdelay":</dt> | |||
The cost type names used in the example IRD are as follows:</t> | <dd>Refers to fictitious performance metric "owdelay" | |||
in the "numerical" mode to reflect the one-way packet transmission | ||||
<t><list style="symbols"><t>"num-routingcost": refers to metric "routingc | delay on a path. A related performance metric is currently under | |||
ost" in the numerical | definition in <xref target="I-D.ietf-alto-performance-metrics" | |||
mode as defined in <xref target="RFC7285"/> and registered with IANA.</t> | format="default"/>.</dd> | |||
<dt>"num-throughputrating":</dt> | ||||
<t>"num-owdelay": refers to fictitious performance metric "owdelay" | <dd>Refers to fictitious metric | |||
in the "numerical" mode, to reflect the one-way packet transmission | "throughputrating" in the "numerical" mode to reflect the provider | |||
delay on a path. A related performance metric is currently under | preference in terms of end-to-end throughput.</dd> | |||
definition in <xref target="I-D.ietf-alto-performance-metrics"/>.</t> | <dt>"string-servicestatus":</dt> | |||
<dd>Refers to fictitious metric | ||||
<t>"num-throughputrating": refers to fictitious metric | "servicestatus" containing a string to reflect the availability, | |||
"throughputrating" in the "numerical" mode, to reflect the | defined by the provider, of, for instance, path connectivity.</dd> | |||
provider preference in terms of end to end throughput.</t> | </dl> | |||
<t>The example IRD includes 2 particular URIs providing Calendars:</t> | ||||
<t>"string-servicestatus": refers to fictitious metric | <dl newline="true" spacing="normal"> | |||
"servicestatus" containing a string, to reflect the availability, | <dt>"https://custom.alto.example.com/calendar/costmap/filtered":</dt> | |||
defined by the provider, of for instance path connectivity.</t> | <dd>A Filtered Cost Map in which Calendar capabilities are indicated | |||
for cost type names "num-routingcost", "num-throughputrating", and | ||||
</list> | "string-servicestatus" and</dd> | |||
</t> | <dt>"https://custom.alto.example.com/calendar/endpointcost/lookup":</d | |||
t> | ||||
<t> | <dd>An Endpoint Cost Map in which Calendar capabilities are indicated | |||
The example IRD includes 2 particular URIs providing Calendars:</t> | for cost type names "num-routingcost", "num-owdelay", | |||
"num-throughputrating", and "string-servicestatus".</dd> | ||||
<t><list style="symbols"><t>"https://custom.alto.example.com/calendar/cos | </dl> | |||
tmap/filtered": a | <t>The design of the Calendar capabilities allows some Calendars with | |||
Filtered Cost Map in which Calendar capabilities are indicated for | the same cost type name to be available in several information | |||
cost type names: "num-routingcost", "num-throughputrating" and | resources with different Calendar attributes. This is the case for | |||
"string-servicestatus",</t> | Calendars on "num-routingcost", "num-throughputrating", and | |||
"string-servicestatus", available in both the Filtered Cost Map and | ||||
<t>"https://custom.alto.example.com/calendar/endpointcost/lookup": an | Endpoint Cost Service but with different time interval sizes for | |||
Endpoint Cost Map in which Calendar capabilities are indicated for | "num-throughputrating" and "string-servicestatus".</t> | |||
cost type names: "num-routingcost", "num-owdelay", "num-throughputrating", | <sourcecode><![CDATA[ | |||
"string-servicestatus".</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
The design of the Calendar capabilities allows some Calendars with | ||||
the same cost type name to be available in several information | ||||
resources with different Calendar Attributes. This is the case for | ||||
Calendars on "num-routingcost", "num-throughputrating" and "string-servicesta | ||||
tus", available in both the Filtered Cost map and Endpoint | ||||
Cost Service, but with different time interval sizes for "num-throughputratin | ||||
g" and "string-servicestatus".</t> | ||||
<figure><artwork><![CDATA[ | ||||
--- 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 ----------------- | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 2622 | Content-Length: 2622 | |||
skipping to change at line 823 ¶ | skipping to change at line 726 ¶ | |||
}, | }, | |||
{"cost-type-names" : [ "string-servicestatus" ], | {"cost-type-names" : [ "string-servicestatus" ], | |||
"time-interval-size" : 120, | "time-interval-size" : 120, | |||
"number-of-intervals" : 30 | "number-of-intervals" : 30 | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
]]></sourcecode> | ||||
<t>In this example IRD, for the Filtered Cost Map Service:</t> | ||||
<ul spacing="normal"> | ||||
<li>the Calendar for "num-routingcost" and "num-throughputrating" is | ||||
an array of 12 values, each provided on a time interval lasting 7200 | ||||
seconds (2 hours) and</li> | ||||
<li>the Calendar for "string-servicestatus" is an array of 48 | ||||
values, each provided on a time interval lasting 1800 seconds (30 | ||||
minutes).</li> | ||||
</ul> | ||||
<t>For the Endpoint Cost Service:</t> | ||||
<ul spacing="normal"> | ||||
<li>the Calendar for "num-routingcost" is an array of 24 values, each | ||||
provided on a time interval lasting 3600 seconds (1 hour),</li> | ||||
<li>the Calendar for "num-owdelay" is an array of 12 values, each | ||||
provided on a time interval lasting 300 seconds (5 minutes),</li> | ||||
<li>the Calendar for "num-throughputrating" is an array of 60 | ||||
values, each provided on a time interval lasting 60 seconds (1 | ||||
minute), and</li> | ||||
<li>the Calendar for "string-servicestatus" is an array of 30 | ||||
values, each provided on a time interval lasting 120 seconds (2 | ||||
minutes).</li> | ||||
</ul> | ||||
<t>Note that in this example IRD, member "cost-constraints" is present | ||||
with a value set to "true" in both information resources | ||||
"filtered-cost-map-calendar" and | ||||
"endpoint-cost-map-calendar". Although a Calendar-aware ALTO Server | ||||
does not support constraints for the reasons explained in | ||||
<xref target="sect-3.3" format="default"/>, it <bcp14>MUST</bcp14> | ||||
support constraints on cost types that are not requested as Calendars | ||||
but are requested as specified in <xref target="RFC7285" | ||||
format="default"/> and <xref target="RFC8189" format="default"/>.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="sect-5" numbered="true" toc="default"> | ||||
<name>ALTO Calendar Specification: Service Information Resources</name> | ||||
<t>This section documents extensions to two basic ALTO information | ||||
resources (Filtered Cost Maps and Endpoint Cost Service) to provide | ||||
calendared information services for them.</t> | ||||
In this example IRD, for the Filtered Cost Map Service: | <t>Both extensions return calendar start time (calendar-start-time, a | |||
]]></artwork> | point in time), which <bcp14>MUST</bcp14> be specified as an HTTP | |||
</figure> | "Date" header field using the IMF-fixdate format specified in | |||
<t><list style="symbols"><t>the Calendar for "num-routingcost" and "num-t | <xref target="RFC7231" sectionFormat="of" section="7.1.1.1"/>. Note that | |||
hroughputrating" is | the | |||
an array of 12 values each provided on a time interval lasting | IMF-fixdate format uses "GMT", not "UTC", to designate the time zone, | |||
7200 seconds (2 hours).</t> | as in this example:</t> | |||
<sourcecode><![CDATA[ | ||||
<t>the Calendar for "string-servicestatus": "is an array of 48 values eac | Date: Tue, 15 Nov 2019 08:12:31 GMT | |||
h provided on a time interval lasting 1800 seconds (30 minutes).</t> | ]]></sourcecode> | |||
</list> | ||||
</t> | ||||
<t> | ||||
For the Endpoint Cost Service:</t> | ||||
<t><list style="symbols"><t>the Calendar for "num-routingcost": is an arr | ||||
ay of 24 values each | ||||
provided on a time interval lasting 3600 seconds (1 hour).</t> | ||||
<t>the Calendar for "num-owdelay": is an array of 12 values each provided | ||||
on a time interval lasting 300 seconds (5 minutes).</t> | ||||
<t>the Calendar for "num-throughputrating": is an array of 60 values | ||||
each provided on a time interval lasting 60 seconds (1 minute).</t> | ||||
<t>the Calendar for "string-servicestatus": "is an array of 30 values eac | ||||
h provided on a time interval lasting 120 seconds (2 minutes).</t> | ||||
</list> | ||||
</t> | ||||
<t>Note that in this example IRD, member "cost-constraints" is present with | ||||
a value set to "true" in | ||||
both information resources "filtered-cost-map-calendar" and "endpoint-cost- | ||||
map-calendar". | ||||
Although a Calendar-aware ALTO Server does not support constraints | ||||
for the reasons explained in section <xref target="sect-3.3"/>, it MUST sup | ||||
port constraints on | ||||
cost types that are not requested as Calendars but are requested as specifi | ||||
ed in <xref target="RFC7285"/> and | ||||
<xref target="RFC8189"/>.</t> | ||||
</section> | ||||
</section> | ||||
<section title="ALTO Calendar specification: Service Information Resource | ||||
s" anchor="sect-5"><t> | ||||
This section documents extensions to two basic ALTO information resources (Fi | ||||
ltered Cost | ||||
Maps and Endpoint Cost Service) to provide calendared information services fo | ||||
r them.</t> | ||||
<!-- old | ||||
The reference time zone for the provided time values is UTC. The | ||||
option chosen to express the time format is the HTTP header fields | ||||
format specified in [RFC7231] where, however, timestamps are still | ||||
displayed with the acronym "GMT" rather than "UTC": | ||||
--> | ||||
<t> | ||||
Both extensions return calendar start time (calendar-start-time, a point in t | ||||
ime), | ||||
which MUST be specified as an HTTP "Date" header field using the IMF-fixdate | ||||
format | ||||
specified in Section 7.1.1.1 of <xref target="RFC7231"/>. | ||||
Note that the IMF-fixdate format uses "GMT", not "UTC", to designate the time | ||||
zone, | ||||
as in this example:</t> | ||||
<t><list hangIndent="17" style="hanging"><t> | ||||
Date: Tue, 15 Nov 2019 08:12:31 GMT</t> | ||||
</list> | ||||
</t> | ||||
<!-- <t>The value of a Calendar time interval size is expressed in second | ||||
s.</t> --> | ||||
<section title="Calendar extensions for Filtered Cost Maps (FCM)" anchor= | ||||
"sect-5.1"><t> | ||||
A legacy ALTO Client requests and gets Filtered Cost Map responses as | ||||
specified in <xref target="RFC7285"/>.</t> | ||||
<section title="Calendar extensions in Filtered Cost Map requests" anchor | ||||
="sect-5.1.1"><t> | ||||
The input parameters of a "legacy" request for a Filtered Cost Map, | ||||
defined by object ReqFilteredCostMap in section 11.3.2 of <xref target="RFC72 | ||||
85"/>, | ||||
are augmented with one additional member. The same augmentation applies to ob | ||||
ject ReqFilteredCostMap | ||||
defined in section 4.1.2 of <xref target="RFC8189"/>.</t> | ||||
<t> | ||||
A Calendar-aware ALTO Client requesting a Calendar on a given Cost | ||||
Type for a Filtered Cost Map resource having Calendar capabilities | ||||
MUST add the following field to its input parameters:</t> | ||||
<t><list hangIndent="23" style="hanging"><t> | ||||
JSONBoolean calendared<1..*>;</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
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 the | ||||
Server also implement <xref target="RFC8189"/>. </t> | ||||
<t> Each entry corresponds to the requested | ||||
metric at the same array position. Each boolean value indicates | ||||
whether or not the ALTO Server should provide the values for this | ||||
cost type as a Calendar. The array MUST contain exactly N boolean | ||||
values, otherwise, the Server returns an error.</t> | ||||
<t> | ||||
This field MUST NOT be included if no member "calendar-attributes" is | ||||
specified in this information resource.</t> | ||||
<t> | ||||
If a value of field "calendared" is 'true' for a cost type name for | ||||
which no Calendar attributes have been specified: an ALTO Server, | ||||
whether it implements the extensions of this document or only | ||||
implements <xref target="RFC7285"/>, MUST ignore it and return a response wit | ||||
h a | ||||
single cost value as specified in <xref target="RFC7285"/>.</t> | ||||
<t> | ||||
If this field is not present, it MUST be assumed to have only values | ||||
equal to 'false'.</t> | ||||
<t> | ||||
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 | ||||
of 1 element:</t> | ||||
<t><list hangIndent="23" style="hanging"><t> | ||||
"calendared" : [true],</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
A Calendar-aware ALTO Client that supports requests for more than one | ||||
cost types at a time, as specified in <xref target="RFC8189"/> MUST provide a | ||||
n array | ||||
of N values set to 'true' or 'false', depending whether it wants the | ||||
applicable cost type values as a single or calendared value.</t> | ||||
</section> | ||||
<section title="Calendar extensions in Filtered Cost Map responses" ancho | <section anchor="sect-5.1" numbered="true" toc="default"> | |||
r="sect-5.1.2"><t> | <name>Calendar Extensions for Filtered Cost Maps (FCM)</name> | |||
<t>A legacy ALTO Client requests and gets Filtered Cost Map responses, | ||||
as specified in <xref target="RFC7285" format="default"/>.</t> | ||||
<section anchor="sect-5.1.1" numbered="true" toc="default"> | ||||
<name>Calendar Extensions in Filtered Cost Map Requests</name> | ||||
<t>The input parameters of a "legacy" request for a Filtered Cost | ||||
Map, defined by object ReqFilteredCostMap in <xref target="RFC7285" | ||||
sectionFormat="of" section="11.3.2"/>, are augmented with one | ||||
additional member. The same augmentation applies to object | ||||
ReqFilteredCostMap defined in <xref target="RFC8189" | ||||
sectionFormat="of" section="4.1.2"/>.</t> | ||||
<t>A Calendar-aware ALTO Client requesting a Calendar on a given | ||||
cost type for a Filtered Cost Map resource having Calendar | ||||
capabilities <bcp14>MUST</bcp14> add the following field to its | ||||
input parameters:</t> | ||||
<sourcecode><![CDATA[ | ||||
JSONBoolean calendared<1..*>; | ||||
]]></sourcecode> | ||||
<t>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 | ||||
the Server also implement <xref target="RFC8189" | ||||
format="default"/>.</t> | ||||
<t> Each entry corresponds to the requested metric at the same array | ||||
position. Each boolean value indicates whether or not the ALTO | ||||
Server should provide the values for this cost type as a Calendar. | ||||
The array <bcp14>MUST</bcp14> contain exactly N boolean values, | ||||
otherwise, the Server returns an error.</t> | ||||
<t>This field <bcp14>MUST NOT</bcp14> be included if no member | ||||
"calendar-attributes" is specified in this information resource.</t> | ||||
<t>If a value of field "calendared" is 'true' for a cost type name | ||||
for which no Calendar attributes have been specified, an ALTO | ||||
Server, whether it implements the extensions of this document or | ||||
only implements <xref target="RFC7285" format="default"/>, | ||||
<bcp14>MUST</bcp14> ignore it and return a response with a single | ||||
cost value, as specified in <xref target="RFC7285" | ||||
format="default"/>.</t> | ||||
<t>If this field is not present, it <bcp14>MUST</bcp14> be assumed | ||||
to have only values equal to 'false'.</t> | ||||
<t>A Calendar-aware ALTO Client that supports requests for only one | ||||
cost type at a time and wants to request a Calendar | ||||
<bcp14>MUST</bcp14> provide an array of 1 element:</t> | ||||
<sourcecode><![CDATA[ | ||||
"calendared" : [true], | ||||
]]></sourcecode> | ||||
<t>A Calendar-aware ALTO Client that supports requests for more than | ||||
one cost type at a time, as specified in <xref target="RFC8189" | ||||
format="default"/>, <bcp14>MUST</bcp14> provide an array of N values | ||||
set to 'true' or 'false', depending whether it wants the applicable | ||||
cost type values as a single or calendared value.</t> | ||||
</section> | ||||
<section anchor="sect-5.1.2" numbered="true" toc="default"> | ||||
<name>Calendar Extensions in Filtered Cost Map Responses</name> | ||||
<t> | ||||
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.</t> | the time interval that matches its array position.</t> | |||
<t> | ||||
<t> | The FCM response conveys metadata, among which:</t> | |||
The FCM response conveys metadata among which:</t> | <ul spacing="normal"> | |||
<li>some are not specific to Calendars and ensure compatibility | ||||
<t><list style="symbols"><t>some are not specific to Calendars and ensure | with <xref target="RFC7285" format="default"/> and <xref | |||
compatibility with | target="RFC8189" format="default"/> and</li> | |||
<xref target="RFC7285"/> and <xref target="RFC8189"/></t> | <li>some are specific to Calendars.</li> | |||
</ul> | ||||
<t>some are specific to Calendars.</t> | <t>The non-Calendar-specific "meta" fields of a calendared Filtered | |||
Cost Map response <bcp14>MUST</bcp14> include at least:</t> | ||||
</list> | <ul spacing="normal"> | |||
</t> | <li> | |||
<t>if the ALTO Client requests cost values for one cost type at | ||||
<t> | a time, only the "meta" fields specified in <xref | |||
The non Calendar-specific "meta" fields of a calendared Filtered Cost | target="RFC7285" format="default"/> for these information | |||
Map response MUST include at least:</t> | service responses:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"><t>if the ALTO Client requests cost values for o | <li>"dependent-vtags" and</li> | |||
ne cost type at a | <li>"cost-type" field.</li> | |||
time only: the "meta" fields specified in <xref target="RFC7285"/> for the | </ul> | |||
se | </li> | |||
information service responses:<list style="symbols"><t>"dependent-vtags ", | <li> | |||
</t> | <t>if the ALTO Client implements the Multi-Cost ALTO extension | |||
specified in <xref target="RFC8189" format="default"/> and | ||||
<t>"cost-type" field.</t> | requests cost values for several cost types at a time, the | |||
"meta" fields specified in <xref target="RFC8189" | ||||
</list> | format="default"/> for these information service responses:</t> | |||
</t> | <ul spacing="normal"> | |||
<li>"dependent-vtags",</li> | ||||
<t>if the ALTO Client implements the Multi-Cost ALTO extension | <li>"cost-type" field with value set to '{}', for backwards | |||
specified in <xref target="RFC8189"/> and requests cost values for several | compatibility with <xref target="RFC7285" format="default"/>, | |||
cost | and</li> | |||
types at a time: the "meta" fields specified in <xref target="RFC8189"/> f | <li>"multi-cost-types" field.</li> | |||
or | </ul> | |||
these information service responses:<list style="symbols"><t>"dependent-vt | </li> | |||
ags ",</t> | </ul> | |||
<t>If the Client request does not provide member "calendared" or if | ||||
<t>"cost-type" field with value set to '{}', for backwards | it provides it with a value equal to 'false' for all the requested | |||
compatibility with <xref target="RFC7285"/>.</t> | cost types, then the ALTO Server response is exactly as specified in | |||
<xref target="RFC7285" format="default"/> and <xref target="RFC8189" | ||||
<t>"multi-cost-types" field.</t> | format="default"/>.</t> | |||
<t> | ||||
</list> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
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 | ||||
types, then the ALTO Server response is exactly as specified in | ||||
<xref target="RFC7285"/> and <xref target="RFC8189"/>.</t> | ||||
<t> | ||||
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 <bcp14>MUST</bcp14> return, for this cos | |||
a single cost value as specified in <xref target="RFC7285"/>.</t> | t type, | |||
a single cost value as specified in <xref target="RFC7285" format="default"/> | ||||
<t> | .</t> | |||
<t> | ||||
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.</t> | <bcp14>MUST</bcp14> provide a Calendar-specific metadata field.</t> | |||
<t> | ||||
<t> | ||||
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-attributes", | Map response <bcp14>MUST</bcp14> include is a member called "calendar-respons | |||
that describes properties of the Calendar and where:</t> | e-attributes", | |||
which describes properties of the Calendar and where:</t> | ||||
<t><list style="symbols"> | <ul spacing="normal"> | |||
<t>member "calendar-response-attributes" is an array of one or more | <li>member "calendar-response-attributes" is an array of one or | |||
objects of type "CalendarResponseAttributes".</t> | more objects of type "CalendarResponseAttributes",</li> | |||
<li>each "CalendarResponseAttributes" object in the array is specifi | ||||
<t>each "CalendarResponseAttributes" object in the array is specified | ed | |||
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 request, | "calendared", in object ReqFilteredCostMap provided in the Client request, | |||
is equal to 'true' and for which a Calendar is | is equal to 'true' and for which a Calendar is | |||
provided for the requested information resource.</t> | provided for the requested information resource, and</li> | |||
<li>the "CalendarResponseAttributes" object that applies to a cost | ||||
<t>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 | |||
information resource. This object is the entry, in the "calendar-attribute | "calendar-attributes" array member of the IRD resource entry, | |||
s" | which includes the name of the requested cost type. This | |||
array member of the IRD resource entry, that includes the name of the requ | corresponding "CalendarAttributes" object has the same values as | |||
ested cost type. | object "CalendarResponseAttributes" for members | |||
This corresponding "CalendarAttributes" object has the same values | "time-interval-size" and "number-of-intervals". The members of the | |||
as object "CalendarResponseAttributes" for members "time-interval-size" | "CalendarResponseAttributes" object include all the members of the | |||
and "number-of-intervals". The members of the "CalendarResponseAttributes" | corresponding "CalendarAttributes" object.</li> | |||
object | </ul> | |||
include all the members of the corresponding "CalendarAttributes" object.< | <t> | |||
/t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
The format of member "CalendarResponseAttributes is defined as follows:</t> | The format of member "CalendarResponseAttributes is defined as follows:</t> | |||
<t> | ||||
<t> | ||||
CalendarResponseAttributes calendar-response-attributes <1..*>;</t> | CalendarResponseAttributes calendar-response-attributes <1..*>;</t> | |||
<sourcecode><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
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: | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <dl newline="true" spacing="normal"> | |||
<t><list style="symbols"> | <dt>"cost-type-names":</dt> | |||
<t>"cost-type-names": is an array of one or more cost-type-names to | <dd>An array of one or more cost type names to which the value | |||
which the value of the other members of CalendarResponseAttributes apply | of the other members of CalendarResponseAttributes apply and for | |||
and for which a Calendar has been requested. | which a Calendar has been requested. The value of this member is a | |||
The value of this member is a subset of the "cost-type-names" member of th | subset of the "cost-type-names" member of the abovementioned | |||
e | corresponding "CalendarAttributes" object in the | |||
abovementioned corresponding "CalendarAttributes" object in the "calendar- | "calendar-attributes" array member in the IRD. This member | |||
attributes" | <bcp14>MUST</bcp14> be present when Cost Calendars are provided | |||
array member in the IRD. This member MUST be present when Cost Calendars a | for more than one cost type.</dd> | |||
re provided for | <dt>"calendar-start-time":</dt> | |||
more than one cost type.</t> | <dd>Indicates the date at which the first value of the Calendar | |||
applies. The value is a string that, as specified in <xref | ||||
<t>"calendar-start-time": indicates the date at which the first value | target="sect-5" format="default"/>, contains an HTTP "Date" header | |||
of the Calendar applies. The value is a string that, as specified in | field using the IMF-fixdate format specified in <xref | |||
<xref target="sect-5"/>, contains an HTTP "Date" header field using the | target="RFC7231" sectionFormat="of" section="7.1.1.1"/>. The | |||
IMF-fixdate format specified in Section 7.1.1.1 of <xref target="RFC7231"/ | value provided for attribute "calendar-start-time" <bcp14>SHOULD | |||
>. | NOT</bcp14> be later than the request date.</dd> | |||
The value provided for attribute "calendar-start-time" SHOULD NOT be later | <dt>"time-interval-size":</dt> | |||
than the request date.</t> | <dd>As specified in <xref target="sect-4.1" format="default"/> and | |||
with the same value as in the abovementioned corresponding | ||||
<t>"time-interval-size": as specified in <xref target="sect-4.1"/> and wi | "CalendarAttributes" object.</dd> | |||
th the | <dt>"number-of-intervals":</dt> | |||
same value as in the abovementioned corresponding "CalendarAttributes" obj | <dd>As specified in <xref target="sect-4.1" format="default"/> and | |||
ect.</t> | with the same value as in the abovementioned corresponding | |||
"CalendarAttributes" object.</dd> | ||||
<t>"number-of-intervals": as specified in <xref target="sect-4.1"/> and w | <dt>"repeated":</dt> | |||
ith the | <dd>An optional field provided for Calendars. It is an integer | |||
same value as in the abovementioned corresponding "CalendarAttributes" obj | N greater or equal to '1' that indicates how many iterations of | |||
ect.</t> | the Calendar value array starting at the date indicated by | |||
"calendar-start-time" have the same values. The number N includes | ||||
<t>"repeated": is an optional field provided for Calendars. It is an | the iteration provided in the returned response.</dd> | |||
integer N greater or equal to '1' that indicates how many | </dl> | |||
iterations of the Calendar value array starting at the date | <t>For example, suppose the "calendar-start-time" member has value | |||
indicated by "calendar-start-time" have the same values. The | "Mon, 30 Jun 2019 00:00:00 GMT", the "time-interval-size" member has | |||
number N includes the iteration provided in the returned response.</t> | value '3600', the "number-of-intervals" member has value '24', and | |||
the value of member "repeated" is equal to '4'. This means that the | ||||
</list> | Calendar values are the same on Monday, Tuesday, Wednesday, and | |||
</t> | Thursday on a period of 24 hours starting at 00:00:00 GMT. The ALTO | |||
Client thus may use the same Calendar for the next 4 days starting | ||||
<t> | at "calendar-start-time" and will only need to request a new one for | |||
For example: suppose the "calendar-start-time" member has value | Friday, July 4th at 00:00:00 GMT.</t> | |||
"Mon, 30 Jun 2019 00:00:00 GMT", the "time-interval-size" member has | <t>Attribute "repeated" may take a very high value if a Calendar | |||
value '3600', the "number-of-intervals" member has value '24' and the | represents a cyclic value pattern that the Server considers valid | |||
value of member "repeated" is equal to '4'. This means that the | for a long period and hence will only update once this period has | |||
Calendar values are the same on Monday, Tuesday, Wednesday and | elapsed or if an unexpected event occurs on the network. In the | |||
Thursday on a period of 24 hours starting at 00:00:00 GMT. The ALTO | latter case, the Client will be notified if it uses the "ALTO | |||
Client thus may use the same Calendar for the next 4 days starting at | Incremental Updates Using Server-Sent Events (SSE)" Service, | |||
"calendar-start-time" and will only need to request a new one for | specified in <xref target="RFC8895" format="default"/>. To this | |||
Friday July 4th at 00:00:00 GMT.</t> | end, it is <bcp14>RECOMMENDED</bcp14> that ALTO Servers providing | |||
ALTO Calendars also provide the "ALTO Incremental Updates Using | ||||
<t> | Server-Sent Events (SSE)" Service, which is specified in <xref | |||
Attribute "repeated" may take a very high value if a Calendar | target="RFC8895" format="default"/>. Likewise, ALTO Clients capable | |||
represents a cyclic value pattern that the Server considers valid for | of using ALTO Calendars <bcp14>SHOULD</bcp14> also use the SSE | |||
a long period and hence will only update once this period has elapsed | Service. See also discussion in <xref target="sect-8" | |||
or if an unexpected event occurs on the network. In the latter case, | format="default"/> "Operational Considerations".</t> | |||
the Client will be notified if it uses the "ALTO Incremental Updates Using Se | </section> | |||
rver-Sent Events (SSE)" Service, specified in | <section anchor="sect-5.1.3" numbered="true" toc="default"> | |||
<xref target="I-D.ietf-alto-incr-update-sse"/>. To this end, it is RECOMMEND | <name>Use Case and Example: FCM with a Bandwidth Calendar</name> | |||
ED | <t>An example of non-real-time information that can be provisioned | |||
that ALTO Servers providing ALTO Calendars also provide the "ALTO Incremental | in a Calendar is the expected path throughput. While the | |||
Updates Using Server-Sent Events (SSE)" Service that is | transmission rate can be measured in real time by end systems, the | |||
specified in <xref target="I-D.ietf-alto-incr-update-sse"/>. Likewise, ALTO | operator of a data center is in the position of formulating | |||
Clients capable of using ALTO Calendars SHOULD also use the SSE | preferences for given paths at given time periods to avoid traffic | |||
Service. See also discussion in <xref target="sect-8"/> "Operational Conside | peaks due to diurnal usage patterns. In this example, we assume | |||
rations".</t> | that an ALTO Client requests a Calendar of network-provider-defined | |||
throughput ratings as specified in the IRD to schedule its bulk | ||||
</section> | data transfers as described in the use cases.</t> | |||
<t>In the example IRD, Calendars for cost type name | ||||
<section title="Use case and example: FCM with a bandwidth Calendar" anch | "num-throughputrating" are available for the information resources | |||
or="sect-5.1.3"><t> | "filtered-cost-calendar-map" and "endpoint-cost-map-calendar". The | |||
An example of non-real-time information that can be provisioned in a | ALTO Client requests a Calendar for "num-throughputrating" via a | |||
Calendar is the expected path throughput. While the transmission | POST request for a Filtered Cost Map.</t> | |||
rate can be measured in real time by end systems, the operator of a | <t> | |||
data center is in the position of formulating preferences for given | ||||
paths, at given time periods to avoid traffic peaks due to diurnal | ||||
usage patterns. In this example, we assume that an ALTO Client | ||||
requests a Calendar of network-provider-defined throughput ratings, | ||||
as specified in the IRD, to schedule its bulk data transfers as | ||||
described in the use cases.</t> | ||||
<t> | ||||
In the example IRD, Calendars for cost type name "num-throughputrating" are a | ||||
vailable for the information resources: | ||||
"filtered-cost-calendar-map" and "endpoint-cost-map-calendar". The | ||||
ALTO Client requests a Calendar for "num-throughputrating" via a POST | ||||
request for a Filtered Cost Map.</t> | ||||
<t> | ||||
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.</t> | assumed to be encoded in 2 digits.</t> | |||
<sourcecode><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
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 | |||
{ | { | |||
"cost-type" : {"cost-mode" : "numerical", | "cost-type" : {"cost-mode" : "numerical", | |||
"cost-metric" : "throughputrating"}, | "cost-metric" : "throughputrating"}, | |||
"calendared" : [true], | "calendared" : [true], | |||
skipping to change at line 1197 ¶ | skipping to change at line 1057 ¶ | |||
"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] }, | |||
"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] } | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | </section> | |||
</section> | </section> | |||
<section anchor="sect-5.2" numbered="true" toc="default"> | ||||
</section> | <name>Calendar Extensions in the Endpoint Cost Service</name> | |||
<t>This document extends the Endpoint Cost Service, as defined in | ||||
<section title="Calendar extensions in the Endpoint Cost Service" anchor= | <xref target="RFC7285" sectionFormat="of" section="11.5.1"/>, by adding n | |||
"sect-5.2"><t> | ew | |||
This document extends the Endpoint Cost Service, as defined in | input parameters and capabilities and by returning JSONArrays instead | |||
{11.5.1} of <xref target="RFC7285"/>, by adding new input parameters and | of JSONNumbers as the cost values. The media type (<xref | |||
capabilities, and by returning JSONArrays instead of JSONNumbers as | target="RFC7285" sectionFormat="of" section="11.5.1.1"/>) and HTTP | |||
the cost values. The media type {11.5.1.1} and HTTP method | method (<xref target="RFC7285" sectionFormat="of" | |||
{11.5.1.2} are unchanged.</t> | section="11.5.1.2"/>) are unchanged.</t> | |||
<section anchor="sect-5.2.1" numbered="true" toc="default"> | ||||
<section title="Calendar specific input in Endpoint Cost requests" anchor | <name>Calendar-Specific Input in Endpoint Cost Requests</name> | |||
="sect-5.2.1"><t> | <t>The extensions to the requests for calendared Endpoint Cost Maps | |||
The extensions to the requests for calendared Endpoint Cost Maps are | are the same as for the Filtered Cost Map Service, specified in | |||
the same as for the Filtered Cost Map Service, specified in <xref target="sec | <xref target="sect-5.1.1" format="default"/> of this | |||
t-5.1.1"/> | document. Likewise, the rules defined around the extensions to ECM | |||
of this document. Likewise, the rules defined around the extensions to ECM re | requests are the same as those defined in <xref target="sect-5.1.1" | |||
quests | format="default"/> for FCM requests. </t> | |||
are the same as those defined in <xref target="sect-5.1.1"/> for FCM requests | <t> | |||
. </t> | ||||
<t> | ||||
The ReqEndpointCostMap object for a calendared ECM request will have | The ReqEndpointCostMap object for a calendared ECM request will have | |||
the following format:</t> | the following format:</t> | |||
<sourcecode><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
object { | object { | |||
[CostType cost-type;] | [CostType cost-type;] | |||
[CostType multi-cost-types<1..*>;] | [CostType multi-cost-types<1..*>;] | |||
[JSONBoolean calendared<1..*>;] | [JSONBoolean calendared<1..*>;] | |||
EndpointFilter endpoints; | EndpointFilter endpoints; | |||
} ReqEndpointCostMap; | } ReqEndpointCostMap; | |||
object { | object { | |||
[TypedEndpointAddr srcs<0..*>;] | [TypedEndpointAddr srcs<0..*>;] | |||
[TypedEndpointAddr dsts<0..*>;] | [TypedEndpointAddr dsts<0..*>;] | |||
} EndpointFilter; | } EndpointFilter; | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t>Member "cost-type" is optional because, in the ReqEndpointCostMap | |||
object definition of this document, it is jointly present with | ||||
<t>Member "cost-type" is optional because, | member "multi-cost-types" to ensure compatibility with <xref | |||
in the ReqEndpointCostMap object definition of this document, it is jointly pres | target="RFC8189" format="default"/>. In <xref target="RFC8189" | |||
ent | format="default"/>, members "cost-type" and "multi-cost-types" are | |||
with member "multi-cost-types", to ensure compatibility with RFC 8189. In RFC818 | both optional and have to obey the rule specified in <xref | |||
9, | target="RFC8189" sectionFormat="of" section="4.1.2"/> stating that | |||
members "cost-type" and "multi-cost-types" are both optional and have to obey th | "the Client <bcp14>MUST</bcp14> specify either "cost-type" or | |||
e rule | "multi-cost-types" but <bcp14>MUST NOT</bcp14> specify both".</t> | |||
specified in section 4.1.2 of 8189 saying that: "the Client MUST specify either | <t>The interpretation of member "calendared" is the same as for the | |||
"cost-type" or "multi-cost-types" but MUST NOT specify both".</t> | ReqFilteredCostMap object defined in <xref target="sect-5.1.1" | |||
format="default"/> of this document. The interpretation of the other | ||||
<t>The interpretation of member "calendared" is the same as for the ReqFilteredC | members is the same as for object ReqEndpointCostMap defined in | |||
ostMap | <xref target="RFC7285" format="default"/> and <xref target="RFC8189" | |||
object defined in <xref target="sect-5.1.1"/> of this document. The interpretati | format="default"/>. The type TypedEndpointAddr is defined in <xref | |||
on of the | target="RFC7285" sectionFormat="of" section="10.4.1"/>.</t> | |||
other members is the same as for object ReqEndpointCostMap is defined in <xref t | <t>For the reasons explained in <xref target="sect-3.3" | |||
arget="RFC7285"/> | format="default"/>, a Calendar-aware ALTO Server does not support | |||
and <xref target="RFC8189"/>. The type TypedEndpointAddr is defined in section 1 | constraints. Therefore, member "[constraints]" is not present in the | |||
0.4.1 | ReqEndpointCostMap object, and member "constraints" <bcp14>MUST | |||
of <xref target="RFC7285"/>. </t> | NOT</bcp14> be present in the input parameters of a request for an | |||
Endpoint Cost Calendar. If this member is present, the Server | ||||
<t>For the reasons explained in section <xref target="sect-3.3"/>, | <bcp14>MUST</bcp14> ignore it.</t> | |||
a Calendar-aware ALTO Server does not support constraints. | </section> | |||
Therefore, member "[constraints]" is not present in the ReqEndpointCostMap objec | <section anchor="sect-5.2.2" numbered="true" toc="default"> | |||
t and | <name>Calendar Attributes in the Endpoint Cost Response</name> | |||
member "constraints" MUST NOT be present in the input | <t>The "meta" field of a calendared Endpoint Cost response | |||
parameters of a request for an Endpoint Cost Calendar. | <bcp14>MUST</bcp14> include at least:</t> | |||
If this member is present, the Server MUST ignore it.</t> | <ul spacing="normal"> | |||
<li> | ||||
</section> | <t>if the ALTO Client supports cost values for one cost type at | |||
a time only, the "meta" fields specified in <xref | ||||
<section title="Calendar attributes in the Endpoint Cost response" anchor | target="RFC7285" sectionFormat="of" section="11.5.1.6"/> for the | |||
="sect-5.2.2"><t> | Endpoint Cost response:</t> | |||
The "meta" field of a calendared Endpoint Cost response MUST include | <ul spacing="normal"> | |||
at least:</t> | <li>"cost-type" field.</li> | |||
</ul> | ||||
<t><list style="symbols"><t>if the ALTO Client supports cost values for o | </li> | |||
ne cost type at a | <li> | |||
time only: the "meta" fields specified in {11.5.1.6} of <xref target="RFC7 | <t>if the ALTO Client supports cost values for several cost | |||
285"/> | types at a time, as specified in <xref target="RFC8189" | |||
for the Endpoint Cost response:<list style="symbols"><t>"cost-type" field. | format="default"/>, the "meta" fields specified in <xref | |||
</t> | target="RFC8189" format="default"/> for the Endpoint Cost | |||
response:</t> | ||||
</list> | <ul spacing="normal"> | |||
</t> | <li>"cost-type" field with value set to '{}', for backwards | |||
compatibility with <xref target="RFC7285" | ||||
<t>if the ALTO Client supports cost values for several cost types at | format="default"/>.</li> | |||
a time, as specified in <xref target="RFC8189"/> : the "meta" fields speci | <li>"multi-cost-types" field.</li> | |||
fied in | </ul> | |||
<xref target="RFC8189"/> for the the Endpoint Cost response: | </li> | |||
<list style="symbols"> | </ul> | |||
<t>"cost-type" field with value set to '{}', for backwards compatibility | <t>If the Client request does not provide member "calendared" or if | |||
with <xref target="RFC7285"/>.</t> | it provides it with a value equal to 'false', for all the requested | |||
cost types, then the ALTO Server response is exactly as specified in | ||||
<t>"multi-cost-types" field.</t> | <xref target="RFC7285" format="default"/> and <xref target="RFC8189" | |||
format="default"/>.</t> | ||||
</list> | <t>If the ALTO Client provides member "calendared" in the input | |||
</t> | parameters with a value equal to 'true' for given requested cost | |||
types, the "meta" member of a calendared Endpoint Cost response | ||||
</list> | <bcp14>MUST</bcp14> include, for these cost types, an additional | |||
</t> | member "calendar-response-attributes", the contents of which obey | |||
the same rules as for the Filtered Cost Map Service, specified in | ||||
<t> | <xref target="sect-5.1.2" format="default"/>. The Server response | |||
If the Client request does not provide member "calendared" or if it | is thus changed as follows, with respect to <xref target="RFC7285" | |||
provides it with a value equal to 'false', for all the requested Cost | format="default"/> and <xref target="RFC8189" | |||
Types, then the ALTO Server response is exactly as specified in | format="default"/>:</t> | |||
<xref target="RFC7285"/> and <xref target="RFC8189"/>.</t> | <ul spacing="normal"> | |||
<li>the "meta" member has one additional field | ||||
<t> | "CalendarResponseAttributes", as specified for the Filtered Cost | |||
If the ALTO Client provides member "calendared" in the input | Map Service, and</li> | |||
parameters with a value equal to 'true' for given requested Cost | <li>the calendared costs are JSONArrays instead of the JSONNumbers | |||
Types, the "meta" member of a calendared Endpoint Cost response MUST | format used by legacy ALTO implementations. All arrays have a | |||
include, for these cost types, an additional member "calendar-response-attrib | number of values equal to 'number-of-intervals'. Each value | |||
utes", the contents of which obey the same rules as | corresponds to the cost in that interval.</li> | |||
for the Filtered Cost Map Service, specified in <xref target="sect-5.1.2"/>. | </ul> | |||
The | <t>If the value of member "calendared" is equal to 'false' for a | |||
Server response is thus changed as follows, with respect to <xref target="RFC | given requested cost type, the ALTO Server <bcp14>MUST</bcp14> | |||
7285"/> and | return, for this cost type, a single cost value as specified in | |||
<xref target="RFC8189"/>:</t> | <xref target="RFC7285" format="default"/>.</t> | |||
</section> | ||||
<t><list style="symbols"><t>the "meta" member has one additional field | <section anchor="sect-5.2.3" numbered="true" toc="default"> | |||
"CalendarResponseAttributes", as specified for the Filtered Cost | <name>Use Case and Example: ECS with a routingcost Calendar</name> | |||
Map Service,</t> | <t>Let us assume an Application Client is located in an end system | |||
with limited resources and has access to the network that is either | ||||
<t>the calendared costs are JSONArrays instead of the JSONNumbers | intermittent or provides an acceptable quality in limited but | |||
format used by legacy ALTO implementations. All arrays have a | predictable time periods. Therefore, it needs to schedule both its | |||
number of values equal to 'number-of-intervals'. | resource-greedy networking activities and its ALTO transactions.</t> | |||
Each value corresponds to the cost in that interval.</t> | <t>The Application Client has the choice to trade content or | |||
resources with a set of endpoints and needs to decide with which one | ||||
</list> | it will connect and at what time. For instance, the endpoints are | |||
</t> | spread in different time zones or have intermittent access. In | |||
this example, the 'routingcost' is assumed to be time-varying, with | ||||
<t> | values provided as ALTO Calendars.</t> | |||
If the value of member "calendared" is equal to 'false' for a given | <t>The ALTO Client associated with the Application Client queries an | |||
requested cost type, the ALTO Server MUST return, for this cost type, | ALTO Calendar on 'routingcost' and will get the Calendar covering | |||
a single cost value as specified in <xref target="RFC7285"/>.</t> | the 24-hour time period "containing" the date and time of the ALTO | |||
Client request.</t> | ||||
</section> | <t> | |||
<section title="Use case and example: ECS with a routingcost Calendar" an | ||||
chor="sect-5.2.3"><t> | ||||
Let us assume an Application Client is located in an end system with | ||||
limited resources and having access to the network that is either | ||||
intermittent or provides an acceptable quality in limited but | ||||
predictable time periods. Therefore, it needs to schedule both its | ||||
resource-greedy networking activities and its ALTO transactions.</t> | ||||
<t> | ||||
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 | ||||
connect and at what time. For instance, the Endpoints are spread in | ||||
different time-zones, or have intermittent access. In this example, | ||||
the 'routingcost' is assumed to be time-varying, with values provided | ||||
as ALTO Calendars.</t> | ||||
<t> | ||||
The ALTO Client associated with the Application Client queries an | ||||
ALTO Calendar on 'routingcost' and will get the Calendar covering the | ||||
24 hours time period "containing" the date and time of the ALTO | ||||
Client request.</t> | ||||
<t> | ||||
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:</t> | cover the week of Monday, June 30th at 00:00 to Sunday, July 6th 23:59:</t> | |||
<ul spacing="normal"> | ||||
<t><list style="symbols"> | <li>C1 for Monday, Tuesday, Wednesday, and Thursday (weekdays)</li> | |||
<t>C1 for Monday, Tuesday, Wednesday, Thursday, (weekdays)</t> | <li>C2 for Saturday and Sunday (weekends)</li> | |||
<li>C3 for Friday (maintenance outage on July 4, 2019 from | ||||
<t>C2 for Saturday, Sunday, (weekend)</t> | 02:00:00 GMT to 04:00:00 GMT or a big holiday that | |||
is widely celebrated and generates a large number of connections).</l | ||||
<t>C3 for Friday (maintenance outage on July 4, 2019 from 02:00:00 GMT | i> | |||
to 04:00:00 GMT, or big holiday such as New Year evening).</t> | </ul> | |||
</list> | <t>In the following example, the ALTO Client sends its request on | |||
</t> | Tuesday, July 1st 2019 at 13:15.</t> | |||
<t>The "routingcost" values are assumed to be encoded in 3 | ||||
<t> | digits.</t> | |||
In the following example, the ALTO Client sends its request on | <sourcecode><![CDATA[ | |||
Tuesday July 1st 2019 at 13:15.</t> | ||||
<t> | ||||
The "routingcost" values are assumed to be encoded in 3 digits.</t> | ||||
<figure><artwork><![CDATA[ | ||||
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", | |||
skipping to change at line 1420 ¶ | skipping to change at line 1267 ¶ | |||
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] | |||
} | } | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | <t>When the Client gets the Calendar for "routingcost", it sees that | |||
<t> | the "calendar-start-time" is Monday at 00h00 GMT and member | |||
When the Client gets the Calendar for "routingcost", it sees that the | "repeated" is equal to '4'. It understands that the provided values | |||
"calendar-start-time" is Monday at 00h00 GMT and member "repeated" is | are valid until Thursday and will only need to get a Calendar update | |||
equal to '4'. It understands that the provided values are valid | on Friday.</t> | |||
until Thursday included and will only need to get a Calendar update | </section> | |||
on Friday.</t> | <section anchor="sect-5.2.4" numbered="true" toc="default"> | |||
<name>Use Case and Example: ECS with a Multi-cost Calendar for | ||||
</section> | routingcost and owdelay</name> | |||
<t>In this example, it is assumed that the ALTO Server implements | ||||
<section title="Use case and example: ECS with a multi-cost Calendar for | multi-cost capabilities, as specified in <xref target="RFC8189" | |||
routingcost and owdelay" anchor="sect-5.2.4"><t> | format="default"/> . That is, an ALTO Client can request and receive | |||
In this example, it is assumed that the ALTO Server implements multi- | values for several cost types in one single transaction. An | |||
cost capabilities, as specified in <xref target="RFC8189"/> . That is, an ALT | illustrating use case is a path selection done on the basis of 2 | |||
O | metrics: routingcost and owdelay.</t> | |||
Client can request and receive values for several cost types in one | <t>As in the previous example, the IRD indicates that the ALTO | |||
single transaction. An illustrating use case is a path selection | Server provides "routingcost" Calendars in terms of 24 time | |||
done on the basis of 2 metrics: routing cost and owdelay.</t> | intervals of 1 hour (3600 seconds) each.</t> | |||
<t>For metric "owdelay", the IRD indicates that the ALTO Server | ||||
<t> | provides Calendars in terms of 12 time interval values lasting 5 | |||
As in the previous example, the IRD indicates that the ALTO Server | minutes (300 seconds) each.</t> | |||
provides "routingcost" Calendars in terms of 24 time intervals of 1 | <t>In the following example transaction, the ALTO Client sends its | |||
hour (3600 seconds) each.</t> | request on Tuesday, July 1st 2019 at 13:15.</t> | |||
<t> | ||||
<t> | ||||
For metric "owdelay", the IRD indicates that the ALTO Server provides | ||||
Calendars in terms of 12 time intervals values lasting each 5 minutes | ||||
(300 seconds).</t> | ||||
<t> | ||||
In the following example transaction, the ALTO Client sends its | ||||
request on Tuesday July 1st 2019 at 13:15.</t> | ||||
<t> | ||||
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.</t> | "routingcost" are encoded in 3 digits.</t> | |||
<figure><artwork><![CDATA[ | <sourcecode><![CDATA[ | |||
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" : {}, | "cost-type" : {}, | |||
"multi-cost-types" : [ | "multi-cost-types" : [ | |||
{"cost-mode" : "numerical", "cost-metric" : "routingcost"}, | {"cost-mode" : "numerical", "cost-metric" : "routingcost"}, | |||
{"cost-mode" : "numerical", "cost-metric" : "owdelay"} | {"cost-mode" : "numerical", "cost-metric" : "owdelay"} | |||
], | ], | |||
"calendared" : [true, true], | "calendared" : [true, true], | |||
"endpoints" : { | "endpoints" : { | |||
"srcs": [ "ipv4:192.0.2.2" ], | "srcs": [ "ipv4:192.0.2.2" ], | |||
skipping to change at line 1532 ¶ | skipping to change at line 1372 ¶ | |||
40, 40, 60, 90, 100, 80]], | 40, 40, 60, 90, 100, 80]], | |||
"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], | |||
[ 40, 40, 40, 40, 50, 50, | [ 40, 40, 40, 40, 50, 50, | |||
50, 20, 10, 15, 30, 40]] | 50, 20, 10, 15, 30, 40]] | |||
} | } | |||
} | } | |||
} | } | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | ||||
<t> | ||||
When receiving the response, the Client sees that the Calendar values | ||||
for metric "routingcost" are repeated for 4 iterations. Therefore, | ||||
in its next requests until the "routingcost" Calendar is expected to | ||||
change, the Client will only need to request a Calendar for | ||||
"owdelay".</t> | ||||
<t> | <t>When receiving the response, the Client sees that the Calendar | |||
values for metric "routingcost" are repeated for 4 iterations. | ||||
Therefore, in its next requests until the "routingcost" Calendar is | ||||
expected to change, the Client will only need to request a Calendar | ||||
for "owdelay".</t> | ||||
<t> | ||||
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.</t> | request per cost metric.</t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sect-6" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | ||||
</section> | <t>This document has no IANA actions.</t> | |||
</section> | ||||
<section title="IANA Considerations" anchor="sect-6"><t> | <section anchor="sect-7" numbered="true" toc="default"> | |||
This document does not define any new media types or introduce any | <name>Security Considerations</name> | |||
new IANA considerations.</t> | <t>As an extension of the base ALTO protocol <xref target="RFC7285" | |||
format="default"/>, this document fits into the architecture of the base | ||||
</section> | protocol and hence the security considerations (<xref target="RFC7285" | |||
sectionFormat="of" section="15"/>) fully apply when this extension is | ||||
<section title="Security Considerations" anchor="sect-7"><t> | provided by an ALTO Server. For example, the same authenticity and | |||
As an extension of the base ALTO protocol <xref target="RFC7285"/>, this docu | integrity considerations (<xref target="RFC7285" sectionFormat="of" | |||
ment | section="15.1"/>) still fully apply; the same considerations for the | |||
fits into the architecture of the base protocol, and hence the | privacy of ALTO users (<xref target="RFC7285" sectionFormat="of" | |||
Security Considerations (Section 15) of <xref target="RFC7285"/> fully apply | section="15.4"/>) also still fully apply.</t> | |||
when this extension is provided by an ALTO Server. For example, the | <t> | |||
same authenticity and integrity considerations (Section 15.1 of | ||||
<xref target="RFC7285"/> still fully apply; the same considerations for the p | ||||
rivacy | ||||
of ALTO users (Section 15.4 of <xref target="RFC7285"/>) also still fully app | ||||
ly.</t> | ||||
<t> | ||||
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 <xref target="RFC7285"/>: potential undesirable guidance to Clients | in <xref target="RFC7285" format="default"/>: potential undesirable guidance | |||
(Section 15.2 of <xref target="RFC7285"/>), confidentiality of ALTO informati | to Clients | |||
on | (<xref target="RFC7285" sectionFormat="of" section="15.2"/>), confidentiality | |||
(Section 15.2 of <xref target="RFC7285"/>), and availability of ALTO (Section | of ALTO information | |||
15.5 | (<xref target="RFC7285" sectionFormat="of" section="15.3"/>), and | |||
of <xref target="RFC7285"/>). For example, by providing network information | availability of ALTO (<xref target="RFC7285" | |||
in the | sectionFormat="of" section="15.5"/>). For example, by providing network info | |||
rmation in the | ||||
future in a Calendar, this extension may improve availability of | future in a Calendar, this extension may improve availability of | |||
ALTO, when the ALTO Server is unavailable but related information is | ALTO when the ALTO Server is unavailable but related information is | |||
already provided in the Calendar.</t> | already provided in the Calendar.</t> | |||
<t> | ||||
<t> | ||||
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 ALTO | cognizant that this extension may introduce a new risk, a malicious ALTO | |||
Client may get information for future events that are scheduled | Client may get information for future events that are scheduled | |||
through Calendaring. Possessing such information, the malicious Client may u se | through Calendaring. Possessing such information, the malicious Client may u se | |||
it to generate massive connections to the network at times where its load | it to generate massive connections to the network at times where its load | |||
is expected to be high.</t> | is expected to be high.</t> | |||
<t>To mitigate this risk, the operator should address the risk of ALTO | ||||
information being leaked to malicious Clients or third parties. As | ||||
specified in "Protection Strategies" (<xref target="RFC7285" sectionFormat | ||||
="of" | ||||
section="15.3.2"/>), the ALTO Server should | ||||
authenticate ALTO Clients and use the Transport Layer Security (TLS) | ||||
protocol so that man-in-the-middle (MITM) attacks to intercept an ALTO | ||||
Calendar are not possible. "Authentication and Encryption" (<xref target=" | ||||
RFC7285" sectionFormat="of" | ||||
section="8.3.5"/>) ensures the availability of such a | ||||
solution. It specifies that "ALTO | ||||
Server implementations as well as ALTO Client implementations | ||||
<bcp14>MUST</bcp14> support the "https" URI scheme of <xref | ||||
target="RFC2818" format="default"/> and Transport Layer Security (TLS) | ||||
of <xref target="RFC5246" format="default"/>".</t> | ||||
<t>Section <xref target="RFC8446" sectionFormat="bare" section="1"/> of | ||||
TLS 1.3 <xref target="RFC8446"/> states: "While TLS 1.3 is not directly co | ||||
mpatible with previous | ||||
versions, all versions of TLS incorporate a versioning mechanism which | ||||
allows Clients and Servers to interoperably negotiate a common version | ||||
if one is supported by both peers". ALTO Clients and Servers | ||||
<bcp14>SHOULD</bcp14> support both TLS 1.3 <xref target="RFC8446" | ||||
format="default"/> and TLS 1.2 <xref target="RFC5246" format="default"/> | ||||
and <bcp14>MAY</bcp14> support and use newer versions of TLS as long as | ||||
the negotiation process succeeds.</t> | ||||
<t>The operator should be cognizant that the preceding mechanisms do not | ||||
address all security risks. In particular, they will not help in the | ||||
case of "malicious Clients" possessing valid authentication | ||||
credentials. The threat here is that legitimate Clients have become | ||||
subverted by an attacker and are now 'bots' being asked to participate | ||||
in a DDoS attack. The Calendar information now becomes valuable in | ||||
knowing exactly when to perpetrate a DDoS attack. A mechanism, such as a | ||||
monitoring system that detects abnormal behaviors, may still be needed.</t | ||||
> | ||||
<t> | <t>To avoid malicious or erroneous guidance from ALTO information, an | |||
To mitigate this risk, the operator should address the risk of ALTO | ALTO Client should be cognizant that using calendaring information can | |||
information being leaked to malicious Clients or third parties. As | have risks: (1) Calendar values, especially in "repeated" Calendars, may | |||
specified in Section 15.3.2 ("Protection Strategies") of <xref target="RFC728 | be only statistical and (2) future events may change. Hence, a more | |||
5"/>, | robust ALTO Client should adapt and extend protection strategies | |||
the ALTO Server should authenticate ALTO Clients and use the | specified in <xref target="RFC7285" sectionFormat="of" section="15.2"/>. | |||
Transport Layer Security (TLS) protocol so that Man In The Middle | For example, to be notified immediately when a particular ALTO value | |||
(MITM) attacks to intercept an ALTO Calendar are not possible. | that the Client depends on changes, it is <bcp14>RECOMMENDED</bcp14> | |||
<xref target="RFC7285"/> ensures the availability of such a solution in its | that both the ALTO Client and ALTO Server using this extension support | |||
Section 8.3.5. "Authentication and Encryption", which specifies | "Application-Layer Traffic | |||
that: "ALTO Server implementations as well as ALTO Client implementations | Optimization (ALTO) Incremental Updates Using Server-Sent | |||
MUST support the "https" URI scheme of <xref target="RFC2818"/> and Transport | Events (SSE)" <xref | |||
Layer | target="RFC8895" format="default"/>.</t> | |||
Security (TLS) of <xref target="RFC5246"/>".</t> | <t>Another risk of erroneous guidance appears when the Server exposes an | |||
occurrence of a same cost type name in different elements of the | ||||
<t> | Calendar objects array associated to an information resource. In this | |||
<xref target="RFC8446"/> specifies TLS 1.3 and writes in its section 1: | case, there is no way for the Client to figure out which Calendar object | |||
"While TLS 1.3 is not directly compatible with previous versions, all | in the array is valid. The specification in this document recommends, in | |||
versions of TLS incorporate a versioning mechanism which allows Clients | this case, that the Client uses the first encountered Calendar object | |||
and Servers to interoperably negotiate a common version if one is | occurrence containing the cost type name. However, the Client may want | |||
supported by both peers". | to avoid the risks of erroneous guidance associated to the use of | |||
ALTO Clients and Servers SHOULD support both TLS 1.3 [RFC8446] and | potentially invalid Calendar values. To this end, as an alternative to | |||
TLS 1.2 [RFC5246], and MAY support and use newer versions of TLS | the recommendation in this document, the Client <bcp14>MAY</bcp14> | |||
as long as the negotiation process succeeds. | ignore the totality of occurrences of CalendarAttributes objects | |||
</t> | containing the cost type name and query this cost type using <xref | |||
target="RFC7285" format="default"/>.</t> | ||||
<t> | </section> | |||
The operator should be cognizant that the preceding mechanisms | <section anchor="sect-8" numbered="true" toc="default"> | |||
do not address all security risks. In particular, they will not help in | <name>Operational Considerations</name> | |||
the case of “malicious Clients” possessing valid authentication credentials. | <t>It is important that both the operator of the network and the | |||
The threat here is that legitimate Clients have | operator of the applications consider both the feedback aspect and the | |||
become subverted by an attacker and are now ‘bots’ being asked to | prediction-based (uncertainty) aspect of using the Cost Calendar.</t> | |||
participate in a DDoS attack. The Calendar information now becomes valuable | <t>First, consider the feedback aspect and consider the Cost Calendar as | |||
in knowing exactly when to perpetrate a DDoS attack. A mechanism such as | a traffic-aware map service (e.g., Google Maps). Using the service | |||
a monitoring system that detects abnormal behaviors may still be needed. | without considering its own effect, a large fleet can turn a | |||
</t> | not-congested road into a congested one; a large number of individual | |||
cars each choosing a road with light traffic ("cheap link") can also | ||||
<t> | result in congestion or result in a less-optimal global outcome (e.g., | |||
To avoid malicious or erroneous guidance from ALTO information, an | the Braess' Paradox <xref target="BRAESS_PARADOX" | |||
ALTO Client should be cognizant that using calendaring information | format="default"/>).</t> | |||
can have risks: (1) Calendar values, especially in "repeated" | <t>Next, consider the prediction aspect. Conveying ALTO Cost Calendars | |||
Calendars may be only statistical, and (2) future events may change. | tends to reduce the on-the-wire data exchange volume compared to | |||
Hence, a more robust ALTO Client should adapt and extend protection | multiple single-cost ALTO transactions. An application using Calendars | |||
strategies specified in Section 15.2 of <xref target="RFC7285"/>. For | has a set of time-dependent values upon which it can plan its | |||
example, to be notified immediately when a particular ALTO value that | connections in advance with no need for the ALTO Client to query | |||
the Client depends on changes, it is RECOMMENDED that both the ALTO | information at each time. Additionally, the Calendar response attribute | |||
Client and ALTO Server using this extension support "ALTO Incremental | "repeated", when provided, saves additional data exchanges in that it | |||
Updates Using Server-Sent Events(SSE)" Service <xref target="I-D.ietf-alto-in | indicates that the ALTO Client does not need to query Calendars during a | |||
cr-update-sse"/>.</t> | period indicated by this attribute. The preceding is true only when | |||
"accidents" do not happen.</t> | ||||
<t>Another risk of erroneous guidance appears when the Server exposes an occu | <t>Although individual network operators and application operators can | |||
rrence of | choose their own approaches to address the aforementioned issues, this | |||
a same cost type name in different elements of the Calendar objects array ass | document recommends the following considerations. First, a typical | |||
ociated | approach to reducing instability and handling uncertainty is to ensure | |||
to an information resource. In this case, there is no way for the Client to f | timely update of information. The SSE Service, as discussed in <xref | |||
igure out | target="sect-7" format="default"/>, can handle updates if supported by | |||
which Calendar object in the array is valid. | both the Server and the Client. Second, when a network operator updates | |||
The specification in this document recommends, in this case, that the Client | the Cost Calendar and when an application reacts to the update, they | |||
uses the | should consider the feedback effects. This is the best approach even | |||
first encountered Calendar object occurrence containing the cost type name. | though there is theoretical analysis <xref | |||
However, the Client may want to avoid the risks of erroneous guidance associa | target="SELFISH_RTG_2002" format="default"/> and | |||
ted to | Internet-based evaluation <xref target="SELFISH_RTG_2003" | |||
the use of potentially invalid Calendar values. To this end, as an alternativ | format="default"/> showing that uncoordinated behaviors do not always | |||
e to the | cause substantial suboptimal results.</t> | |||
recommendation in this document, the Client MAY ignore the totality of occure | ||||
nces of | ||||
CalendarAttributes objects containing the cost type name and query this cost | ||||
type | ||||
using <xref target="RFC7285"/>.</t> | ||||
</section> | ||||
<section title="Operational Considerations" anchor="sect-8"> | ||||
<t> | ||||
It is important that both the operator of the network and the operator | ||||
of | ||||
the applications consider both the feedback aspect and the prediction-b | ||||
ased | ||||
(uncertainty) aspect of using the Cost Calendar. | ||||
</t> | ||||
<t> | ||||
First consider the feedback aspect and consider the Cost Calendar as a | ||||
traffic-aware map service (e.g., | ||||
Google Maps). Using the service | ||||
without considering its own effect, a large fleet can turn a not-conges | ||||
ted | ||||
road into a congested one; a large number of individual cars each choos | ||||
ing | ||||
a road with light traffic ("cheap link") can also result in congestion | ||||
or | ||||
result in a less optimal global outcome (e.g., the Braess' Paradox | ||||
<xref target="Braess-paradox"/>). | ||||
</t> | ||||
<t> | ||||
Next consider the prediction aspect. Conveying ALTO Cost Calendars | ||||
tends to reduce the on-the-wire data exchange volume compared to multip | ||||
le | ||||
single cost ALTO transactions. An application using 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 information at each time. | ||||
Additionally, the Calendar response attribute "repeated", when provided | ||||
, saves | ||||
additional data exchanges in that it indicates that the ALTO Client | ||||
does not need to query Calendars during a period indicated by this | ||||
attribute. The preceding is true only when "accidents" do not happen. | ||||
</t> | ||||
<t> | <t> | |||
Although individual network operators and application operators can cho | ||||
ose | ||||
their own approaches to address the aforementioned issues, this documen | ||||
t | ||||
recommends the following considerations. First, a typical approach to | ||||
reducing instability and handling uncertainty is to ensure timely updat | ||||
e of | ||||
information. The SSE Service as discussed in <xref target="sect-7"/> ca | ||||
n handle | ||||
updates, if supported by both the Server and the Client. | ||||
Second, when a network operator updates the Cost Calendar and when an | ||||
application reacts to the update, they should consider the feedback eff | ||||
ects. | ||||
This is the best approach even though there is theoretical analysis | ||||
<xref target="Selfish-routing-Roughgarden-thesis"/> and Internet based | ||||
evaluation | ||||
<xref target="Selfish-routing-Internet-eval"/> showing that uncoordinat | ||||
ed behaviors | ||||
do not always cause substantial sub-optimal results. | ||||
</t> | ||||
<t> | ||||
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. | |||
</t> | </t> | |||
<t>The newer JSON Data Interchange Format specification <xref | ||||
target="RFC8259" format="default"/> used in ALTO Calendars replaces the | ||||
older one <xref target="RFC7159" format="default"/> used in the base | ||||
ALTO protocol <xref target="RFC7285" format="default"/>. The newer JSON | ||||
mandates UTF-8 text encoding to improve interoperability. Therefore, | ||||
ALTO Clients and Servers implementations using UTF-{16,32} need to be | ||||
cognizant of the subsequent interoperability risks and | ||||
<bcp14>MUST</bcp14> switch to UTF-8 encoding if they want to | ||||
interoperate with Calendar-aware Servers and Clients.</t> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<t> | <displayreference target="I-D.ietf-alto-performance-metrics" to="ALTO_METRICS"/> | |||
The newer JSON Data Interchange Format specification <xref target="RF | <references> | |||
C8259"/> used in | <name>References</name> | |||
ALTO Calendars replaces the older one <xref target="RFC7159"/> used in | <references> | |||
the base ALTO | <name>Normative References</name> | |||
protocol <xref target="RFC7285"/>. The newer JSON mandates UTF-8 text e | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
ncoding to | ence.RFC.2119.xml"/> | |||
improve interoperability. | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
Therefore, ALTO Clients and Servers implementations using UTF-{16,32} | ence.RFC.7231.xml"/> | |||
need to be cognizant of the subsequent interoperability risks and | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
MUST switch to UTF-8 encoding, if they want to | ence.RFC.7285.xml"/> | |||
interoperate with Calendar-aware Servers and Clients. | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
</t> | ence.RFC.8174.xml"/> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
</section> | ence.RFC.8189.xml"/> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
<section title="Acknowledgements" anchor="sect-9"><t> | ence.RFC.8259.xml"/> | |||
The authors would like to thank Fred Baker, Li Geng, Diego Lopez, He | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
Peng and Haibin Song for fruitful discussions and feedback on earlier | ence.RFC.5246.xml"/> | |||
draft versions. Dawn Chan, Kai Gao, Vijay Gurbani, Yichen Qian, | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
Jürgen Schönwälder, and Brian Weis and Jensen Zhang provided substantial | ence.RFC.8446.xml"/> | |||
review feedback and suggestions to the protocol design.</t> | <!-- draft-ietf-alto-incr-update-sse-22 --> | |||
<reference anchor="RFC8895" target="https://www.rfc-editor.org/info/rfc8895"> | ||||
</section> | <front> | |||
<title>Application-Layer Traffic Optimization (ALTO) Incremental Updates Using | ||||
</middle> | Server-Sent Events (SSE)</title> | |||
<author initials="W" surname="Roome" fullname="Wendy Roome"> | ||||
<back> | <organization/> | |||
<references title="Normative References"> | </author> | |||
&RFC2119; | <author initials="Y" surname="Yang" fullname="Y. Yang"> | |||
&RFC7231; | <organization/> | |||
&RFC7285; | </author> | |||
&RFC8174; | <date month='November' year='2020'/> | |||
&RFC8189; | </front> | |||
&RFC8259; | <seriesInfo name="RFC" value="8895"/> | |||
&RFC5246; | <seriesInfo name="DOI" value="10.17487/RFC8895"/> | |||
&RFC8446; | </reference> | |||
&I-D.ietf-alto-incr-update-sse; | ||||
<reference anchor="IEEE.754.2008"> | ||||
<front> | ||||
<title>Standard for Binary Floating-Point Arithmetic, IEEE Standard 75 | ||||
4</title> | ||||
<author surname="Institute of Electrical and Electronics Engineers"> | ||||
<organization/> | ||||
</author> | ||||
<date day="" month="August" year="2008"/> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
&RFC2818; | ||||
&RFC5693; | ||||
&RFC6708; | ||||
&RFC7159; | ||||
&I-D.ietf-alto-performance-metrics; | ||||
&I-D.xiang-alto-multidomain-analytics; | ||||
<reference anchor="SENSE-sdn-e2e-net"> | ||||
<front> | ||||
<title>SDN for End-to-End Networked Science at the Exascale (SENSE), | ||||
http://sense.es.net/overview</title> | ||||
<author surname="project supported by the Department of Energy Office | ||||
of | ||||
Science Advanced Scientific Computing Research (ASCR) Program"> | ||||
<organization/> | ||||
</author> | ||||
<date day="" month="" year=""/> | <reference anchor="IEEE.754.2019"> | |||
</front> | <front> | |||
</reference> | <title>IEEE Standard for Floating-Point Arithmetic</title> | |||
<author> | ||||
<organization>IEEE</organization> | ||||
</author> | ||||
<date month="June" year="2019"/> | ||||
</front> | ||||
<seriesInfo name="IEEE" value="754-2019"/> | ||||
<seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/> | ||||
</reference> | ||||
</references> | ||||
<references> | ||||
<reference anchor="Braess-paradox"> | <name>Informative References</name> | |||
<front> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
<title>The Prevalence of Braess' Paradox</title> | ence.RFC.2818.xml"/> | |||
<author initials="R." surname="Steinberg" fullname="Richard Steinberg" | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
/> | ence.RFC.5693.xml"/> | |||
<author initials="W." surname="Zangwill" fullname="Willard I. Zangwill | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
"/> | ence.RFC.6708.xml"/> | |||
<date day="1" month="August" year="1983"/> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
</front> | ence.RFC.7159.xml"/> | |||
<seriesInfo name="Transportation Science" value="Vol. 17 No. 3"/> | ||||
</reference> | ||||
<reference anchor="Unicorn-fgcs"> | <!-- draft-ietf-alto-performance-metrics-09: I-D Exists --> | |||
<front> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
<title>Unicorn: Unified resource orchestration for multi-domain, geo-d | .draft-ietf-alto-performance-metrics-09.xml"/> | |||
istributed data analytics</title> | ||||
<author initials="Q." surname="Xiang" fullname="Qiao Xiang"/> | <reference anchor="SENSE" target="http://sense.es.net/overview"> | |||
<author initials="T." surname="Wang" fullname="Tony Wang"/> | <front> | |||
<author initials="J." surname="Zhang" fullname="Jensen Zhang"/> | <title>SDN for End-to-End Networked Science at the Exascale (SENSE)< | |||
<author initials="H." surname="Newman" fullname="Harvey Newman"/> | /title> | |||
<author initials="Y." surname="Liu" fullname="Jace Liu"/> | <author> | |||
<date day="" month="April" year="2019"/> | <organization>Department of Energy Office of Science Advanced | |||
</front> | Scientific Computing Research (ASCR) Program</organization> | |||
<seriesInfo name="Future Generation of Computer Systems (FGCS)" value=" | </author> | |||
Volume 93, Pages 188-197"/> | <date/> | |||
</reference> | </front> | |||
</reference> | ||||
<reference anchor="Selfish-routing-Roughgarden-thesis"> | <reference anchor="BRAESS_PARADOX"> | |||
<front> | <front> | |||
<title>Selfish Routing</title> | <title>The Prevalence of Braess' Paradox</title> | |||
<author initials="R." surname="Steinberg" fullname="Richard Steinber | ||||
g"/> | ||||
<author initials="W." surname="Zangwill" fullname="Willard I. Zangwi | ||||
ll"/> | ||||
<date day="1" month="August" year="1983"/> | ||||
</front> | ||||
<refcontent>Transportation Science Vol. 17, No. 3</refcontent> | ||||
<seriesInfo name="DOI" value="10.1287/trsc.17.3.301"/> | ||||
</reference> | ||||
<author initials="T." surname="Roughgarden" fullname="Tim Roughgarden" | <reference anchor="UNICORN-FGCS"> | |||
/> | <front> | |||
<date day="1" month="May" year="2002"/> | <title>Unicorn: Unified resource orchestration for multi-domain, | |||
</front> | geo-distributed data analytics</title> | |||
<seriesInfo name="Dissertation Thesis, Cornell" value="2002"/> | <author initials="Q." surname="Xiang" fullname="Qiao Xiang"/> | |||
</reference> | <author initials="T." surname="Wang" fullname="Tony Wang"/> | |||
<author initials="J." surname="Zhang" fullname="Jensen Zhang"/> | ||||
<author initials="H." surname="Newman" fullname="Harvey Newman"/> | ||||
<author initials="Y." surname="Yang" fullname="Yang Richard Yang"/> | ||||
<author initials="Y." surname="Liu" fullname="Jace Liu"/> | ||||
<date month="March" year="2019"/> | ||||
</front> | ||||
<refcontent>Future Generation Computer Systems (FGCS), Vol. 93, | ||||
Pages 188-197</refcontent> | ||||
<seriesInfo name="DOI" value="10.1016/j.future.2018.09.048"/> | ||||
<seriesInfo name="ISSN" value="0167-739X"/> | ||||
</reference> | ||||
<reference anchor="Selfish-routing-Internet-eval"> | <reference anchor="SELFISH_RTG_2002"> | |||
<front> | <front> | |||
<title>Selfish Routing in Internet-LIke Environments</title> | <title>Selfish Routing</title> | |||
<author initials="T." surname="Roughgarden" fullname="Tim Roughgarde | ||||
n"/> | ||||
<date month="May" year="2002"/> | ||||
</front> | ||||
<refcontent>Dissertation Thesis, Cornell</refcontent> | ||||
</reference> | ||||
<author initials="L." surname="Qiu" fullname="Lili Qiu"/> | <reference anchor="SELFISH_RTG_2003"> | |||
<author initials="Y." surname="Yang" fullname="Y. Richard Yang"/> | <front> | |||
<author initials="Y." surname="Zhang" fullname="Yin Zhang"/> | <title>Selfish Routing in Internet-LIke Environments</title> | |||
<author initials="S." surname="Shenker" fullname="Scott Shenker"/> | <author initials="L." surname="Qiu" fullname="Lili Qiu"/> | |||
<date day="1" month="August" year="2001"/> | <author initials="Y." surname="Yang" fullname="Yang Richard Yang"/> | |||
</front> | <author initials="Y." surname="Zhang" fullname="Yin Zhang"/> | |||
<seriesInfo name="Proceedings of ACM SIGCOMM" value="2001"/> | <author initials="S." surname="Shenker" fullname="Scott Shenker"/> | |||
</reference> | <date month="August" year="2003"/> | |||
</front> | ||||
<seriesInfo name="DOI" value="10.1145/863955.863974"/> | ||||
<refcontent>Proceedings of SIGCOMM '03</refcontent> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
</references> | <section anchor="acks" numbered="false" toc="default"> | |||
</back> | <name>Acknowledgments</name> | |||
<t> | ||||
The authors would like to thank <contact fullname="Fred Baker"/>, <contact | ||||
fullname="Li Geng"/>, <contact fullname="Diego Lopez"/>, <contact | ||||
fullname="He Peng"/>, and <contact fullname="Haibin Song"/> for fruitful | ||||
discussions and feedback on earlier draft versions. <contact | ||||
fullname="Dawn Chan"/>, <contact fullname="Kai Gao"/>, <contact | ||||
fullname="Vijay Gurbani"/>, <contact fullname="Yichen Qian"/>, <contact | ||||
fullname="Jürgen Schönwälder"/>, <contact fullname="Brian Weis"/>, and | ||||
<contact fullname="Jensen Zhang"/> provided substantial review feedback and | ||||
suggestions to the protocol design.</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 63 change blocks. | ||||
1646 lines changed or deleted | 1322 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/ |