rfc-7285

Application-Layer Traffic Optimization (ALTO) Protocol

R. Alimi (Editor), R. Penno (Editor), Y. Yang (Editor), S. Kiesel, S. Previdi, W. Roome, S. Shalunov, R. Woundy
date2014-09 streamIETF areaops wgalto statusPROPOSED STANDARD pages91 canonicalhttps://www.rfc-editor.org/rfc/rfc7285 doi10.17487/RFC7285 errataview
Applications using the Internet already have access to some topology information of Internet Service Provider (ISP) networks. For example, views to Internet routing tables at Looking Glass servers are available and can be practically downloaded to many network application clients. What is missing is knowledge of the underlying network topologies from the point of view of ISPs. In other words, what an ISP prefers in terms of traffic optimization -- and a way to distribute it. The Application-Layer Traffic Optimization (ALTO) services defined in this document provide network information (e.g., basic network location structure and preferences of network paths) with the goal of modifying network resource consumption patterns while maintaining or improving application performance. The basic information of ALTO is based on abstract maps of a network. These maps provide a simplified view, yet enough information about a network for applications to effectively utilize them. Additional services are built on top of the maps. This document describes a protocol implementing the ALTO services. Although the ALTO services would primarily be provided by ISPs, other entities, such as content service providers, could also provide ALTO services. Applications that could use the ALTO services are those that have a choice to which end points to connect. Examples of such applications are peer-to-peer (P2P) and content delivery networks.

updated by

Extracted elements (33)

design-rationale §6

Network maps and cost maps are separated so they can be updated at different timescales: PID groupings are stable over longer periods while cost maps may change frequently to reflect dynamic conditions. This separation also allows cost information to be compactly represented without re-transmitting endpoint-to-PID mappings.

json

design-rationale §5.1

PIDs provide a network-agnostic, indirect abstraction layer so that ALTO information remains stable and compact even as fine-grained topology changes. This abstraction also allows an ISP to protect sensitive internal topology by exposing only policy-level groupings rather than raw routing state.

ip

design-rationale §1.2

The ALTO Protocol uses a RESTful design with JSON encoding specifically to leverage existing HTTP infrastructure, caching intermediaries, and deployment experience at scale. Using specific 'application/alto-*+json' media types (rather than generic application/json) allows easy versioning and extensibility of individual components.

http, json

interoperability-note §11.2.2

When mapping an endpoint IP address to a PID for 'ipv4' or 'ipv6' network maps, the ALTO server uses a longest-prefix-match algorithm over the IP prefixes associated with each PID. A catch-all PID entry (e.g., 0.0.0.0/0 or ::/0) may be used to cover endpoints not otherwise listed.

ip

normative-requirement §8.3.7 MUST

ALTO implementations MUST ignore unknown fields when processing ALTO messages. This forward-compatibility requirement allows extensions to add JSON fields without breaking existing clients or servers.

http, json

normative-requirement §8.3.5 MUST

ALTO server and client implementations MUST support the 'https' URI scheme and TLS. Where client authentication is desired, HTTP Digest Authentication MUST be supported; TLS Client Authentication is preferred when available.

security, http

normative-requirement §8.5.2 MUST

An ALTO error response MUST include a 'code' field in the 'meta' object with one of the defined ALTO error code strings. The ALTO server MUST also set an appropriate HTTP status code independent of whether ALTO-layer error info is included.

http, json

normative-requirement §7.1.1 MUST

An ALTO server MUST define the 'pid' endpoint property type for each ALTO network map it provides, using the longest-prefix-match algorithm specified in Section 11.2.2 to determine the PID for a given endpoint IP address.

ip

normative-requirement §9.2 MUST

An ALTO server MUST make one information resource directory available via HTTP GET at a discoverable URI. For a Root IRD, the 'meta' field MUST include 'default-alto-network-map' specifying the resource ID of a default network map.

http, json

normative-requirement §6.1 MUST NOT

An ALTO server MUST NOT define two ALTO cost maps with the same cost type and network map pair; the (cost-type, network-map) combination is a unique key per ALTO server.

json

normative-requirement §6.1.1.1 MUST

An ALTO server MUST offer the 'routingcost' cost metric, conveying a generic measure for the cost of routing traffic from source to destination where a lower value indicates higher preference. The internal computation method (e.g., air miles or hop-count) is left to the provider.

http, json

normative-requirement §6.1.2 MUST

An ALTO server MUST support at least one cost mode: 'numerical' or 'ordinal'. A client desiring numerical costs MAY adjust its behavior if only ordinal is available, and may construct ordinal rankings from numerical values if only numerical is available.

http, json

normative-requirement §8.3.3 MUST

The ALTO server MUST indicate the type of its response using the Content-Type HTTP header. ALTO clients and servers MUST be compliant with HTTP as specified in RFC 7230.

http

normative-requirement §8.3.2 MUST

When requesting an ALTO information resource that requires input parameters, the ALTO client MUST use the HTTP POST method and MUST set the Content-Type header to the appropriate media type. An ALTO client MUST NOT assume GET and POST are interchangeable.

http

normative-requirement §6.3 MUST

Whenever the content of an ALTO network map changes, its version tag MUST also be changed. The tag may be set to a last-modified timestamp or a hash of the map's contents.

http, json

privacy-consideration §15.4

ALTO clients reveal the IP addresses of endpoints they query (e.g., candidate peers in a P2P application) to the ALTO server, enabling the server to track client associations and activity patterns. Clients should use trusted ALTO servers and consider the privacy implications of the endpoint addresses included in queries.

privacy, security

protocol-element §6.1

A Cost Type is the combination of a cost metric (e.g., 'routingcost', 'hopcount') and a cost mode ('numerical' or 'ordinal'). Cost types are named in the IRD's 'meta.cost-types' field for reuse across resource entries.

json

protocol-element §5.1

A Provider-Defined Identifier (PID) is an opaque string identifying an aggregation of network endpoints (e.g., a subnet, POP, or AS). PIDs are defined in an ALTO network map and serve as the primary abstraction for compactly expressing path costs between groups of endpoints.

ip, json

protocol-element §6.3

A version tag is a tuple of (resource ID, opaque string tag) that allows an ALTO client to correlate a cost map with the exact version of the network map on which it is based. Both network maps and cost maps carry version tags in their 'meta' field.

json

protocol-element §8.5.2

ALTO error responses carry four defined error codes in the 'meta.code' field: E_SYNTAX (request parse failure), E_MISSING_FIELD (required field absent), E_INVALID_FIELD_TYPE (wrong JSON type for a field), and E_INVALID_FIELD_VALUE (semantically invalid value). Optional 'field' and 'value' fields provide debugging detail.

http, json

protocol-element §9.2

The Information Resource Directory (IRD) maps ResourceIDs to IRDResourceEntry objects, each containing a URI, media-type, optional 'accepts' (POST input media type), optional 'capabilities', and optional 'uses' (list of dependent resource IDs). ALTO clients traverse IRDs recursively to discover all available resources.

http, json

registry §14.4

This document creates the ALTO Address Type Registry for endpoint address type name strings (e.g., 'ipv4', 'ipv6'). New address types require IETF Review, allowing extension documents to define additional address families.

registry, ip

registry §14.2

This document creates the ALTO Cost Metric Registry for cost metric name strings. New entries require IETF Review. The registry is seeded with 'routingcost' (generic routing preference, lower is preferred) and 'hopcount' (number of IP hops).

registry

registry §14.3

This document creates the ALTO Endpoint Property Type Registry for endpoint property type name strings. New entries require IETF Review. The registry is seeded with 'pid' (the PID of an endpoint relative to a specific network map resource).

registry

registry §14.5

This document creates the ALTO Error Code Registry for ALTO error code strings used in the 'meta.code' field of error responses. New codes require IETF Review. Seeded with E_SYNTAX, E_MISSING_FIELD, E_INVALID_FIELD_TYPE, and E_INVALID_FIELD_VALUE.

registry

registry §14.1

This document registers multiple 'application/alto-*+json' media types with IANA: alto-directory+json, alto-networkmap+json, alto-networkmapfilter+json, alto-costmap+json, alto-costmapfilter+json, alto-endpointprop+json, alto-endpointpropparams+json, alto-endpointcost+json, alto-endpointcostparams+json, and alto-error+json.

registry, http, json

security-consideration §15.1

ALTO information authenticity and integrity may be compromised by an on-path attacker modifying responses. The primary protection is HTTPS/TLS; however, cached or redistributed ALTO information is not protected by the original TLS session, and future mechanisms such as digital signatures for cached content are identified as needed work.

security

security-consideration §15.3

ALTO information may reveal sensitive network topology or business relationships (e.g., peering structures, internal cost policies). ALTO servers should use HTTPS and consider access control to limit exposure to authorized clients only.

security

security-consideration §15.2

An authenticated but malicious or misconfigured ALTO server could provide guidance that directs traffic in ways harmful to the client (e.g., overloading specific peers, steering traffic to monitored paths). Clients should only trust ALTO servers that are operated by or vetted by a trusted party.

security

wire-format §10.1

A PID Name is a JSON string constrained to a specific syntax (Section 10.1). A ResourceID similarly is a constrained JSONString (Section 10.2). Both are used as keys in object-maps and must not be reused across different resources over time.

json

wire-format §8.4

All ALTO server responses share the base JSON type ResponseEntityBase, which contains a 'meta' field of type ResponseMeta (an object-map of JSONString to JSONValue). Service-specific types derive from this base and add a typed data field (e.g., 'network-map', 'cost-map', 'endpoint-cost').

http, json

wire-format §9.2.2

An IRDResourceEntry is a JSON object with fields: 'uri' (string, resolved per RFC 3986), 'media-type' (string), optional 'accepts' (string), optional 'capabilities' (JSON object), and optional 'uses' (array of ResourceID strings). A URI MUST support GET if 'accepts' is absent, and MUST support POST if 'accepts' is non-empty.

http, json

wire-format §10.4

Typed endpoint addresses are encoded as strings of the form 'type:value' (e.g., 'ipv4:192.0.2.1', 'ipv6:2001:db8::1'). Endpoint prefixes use CIDR notation (e.g., 'ipv4:192.0.2.0/24'). An EndpointAddrGroup is a JSON object mapping address-type strings to arrays of typed endpoint address strings.

ip, json