< draft-ietf-alto-protocol-08.txt   draft-ietf-alto-protocol-09.txt >
ALTO WG R. Alimi, Ed. ALTO WG R. Alimi, Ed.
Internet-Draft Google Internet-Draft Google
Intended status: Standards Track R. Penno, Ed. Intended status: Standards Track R. Penno, Ed.
Expires: November 21, 2011 Juniper Networks Expires: December 29, 2011 Juniper Networks
Y. Yang, Ed. Y. Yang, Ed.
Yale University Yale University
May 20, 2011 June 27, 2011
ALTO Protocol ALTO Protocol
draft-ietf-alto-protocol-08.txt draft-ietf-alto-protocol-09.txt
Abstract Abstract
Networking applications today already have access to a great amount Networking applications today already have access to a great amount
of Inter-Provider network topology information. For example, views of Inter-Provider network topology information. For example, views
of the Internet routing table are easily available at looking glass of the Internet routing table are easily available at looking glass
servers and entirely practical to be downloaded by clients. What is servers and entirely practical to be downloaded by clients. What is
missing is knowledge of the underlying network topology from the ISP missing is knowledge of the underlying network topology from the ISP
or Content Provider (henceforth referred as Provider) point of view. or Content Provider (henceforth referred as Provider) point of view.
In other words, what a Provider prefers in terms of traffic In other words, what a Provider prefers in terms of traffic
skipping to change at page 2, line 16 skipping to change at page 2, line 16
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on November 21, 2011. This Internet-Draft will expire on December 29, 2011.
Copyright Notice Copyright Notice
Copyright (c) 2011 IETF Trust and the persons identified as the Copyright (c) 2011 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 3, line 38 skipping to change at page 3, line 38
4. Network Map . . . . . . . . . . . . . . . . . . . . . . . . . 12 4. Network Map . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.1. PID . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.1. PID . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.2. Endpoint Addresses . . . . . . . . . . . . . . . . . . . . 13 4.2. Endpoint Addresses . . . . . . . . . . . . . . . . . . . . 13
4.2.1. IP Addresses . . . . . . . . . . . . . . . . . . . . . 13 4.2.1. IP Addresses . . . . . . . . . . . . . . . . . . . . . 13
4.3. Example Network Map . . . . . . . . . . . . . . . . . . . 13 4.3. Example Network Map . . . . . . . . . . . . . . . . . . . 13
5. Cost Map . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5. Cost Map . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.1. Cost Attributes . . . . . . . . . . . . . . . . . . . . . 14 5.1. Cost Attributes . . . . . . . . . . . . . . . . . . . . . 14
5.1.1. Cost Type . . . . . . . . . . . . . . . . . . . . . . 15 5.1.1. Cost Type . . . . . . . . . . . . . . . . . . . . . . 15
5.1.2. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 15 5.1.2. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 15
5.2. Cost Map Structure . . . . . . . . . . . . . . . . . . . . 16 5.2. Cost Map Structure . . . . . . . . . . . . . . . . . . . . 16
5.3. Network Map and Cost Map Dependency . . . . . . . . . . . 16 5.3. Network Map and Cost Map Dependency . . . . . . . . . . . 17
6. Protocol Design Overview . . . . . . . . . . . . . . . . . . . 17 6. Protocol Design Overview . . . . . . . . . . . . . . . . . . . 17
6.1. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . 17 6.1. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . 17
6.1.1. Existing Infrastructure . . . . . . . . . . . . . . . 17 6.1.1. Existing Infrastructure . . . . . . . . . . . . . . . 17
6.1.2. ALTO Information Reuse and Redistribution . . . . . . 17 6.1.2. ALTO Information Reuse and Redistribution . . . . . . 18
6.2. Protocol Design . . . . . . . . . . . . . . . . . . . . . 18 6.2. Protocol Design . . . . . . . . . . . . . . . . . . . . . 18
7. Protocol Specification . . . . . . . . . . . . . . . . . . . . 18 7. Protocol Specification . . . . . . . . . . . . . . . . . . . . 18
7.1. Notation . . . . . . . . . . . . . . . . . . . . . . . . . 18 7.1. Notation . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.2. Basic Operation . . . . . . . . . . . . . . . . . . . . . 19 7.2. Basic Operation . . . . . . . . . . . . . . . . . . . . . 19
7.2.1. Discovering Information Resources . . . . . . . . . . 19 7.2.1. Discovering Information Resources . . . . . . . . . . 19
7.2.2. Requesting Information Resources . . . . . . . . . . . 19 7.2.2. Requesting Information Resources . . . . . . . . . . . 19
7.2.3. Response . . . . . . . . . . . . . . . . . . . . . . . 20 7.2.3. Response . . . . . . . . . . . . . . . . . . . . . . . 20
7.2.4. Client Behavior . . . . . . . . . . . . . . . . . . . 20 7.2.4. Client Behavior . . . . . . . . . . . . . . . . . . . 20
7.2.5. Authentication and Encryption . . . . . . . . . . . . 20 7.2.5. Authentication and Encryption . . . . . . . . . . . . 21
7.2.6. HTTP Cookies . . . . . . . . . . . . . . . . . . . . . 20 7.2.6. HTTP Cookies . . . . . . . . . . . . . . . . . . . . . 21
7.2.7. Parsing . . . . . . . . . . . . . . . . . . . . . . . 21 7.2.7. Parsing . . . . . . . . . . . . . . . . . . . . . . . 21
7.3. Information Resource . . . . . . . . . . . . . . . . . . . 21 7.3. Information Resource . . . . . . . . . . . . . . . . . . . 21
7.3.1. Capabilities . . . . . . . . . . . . . . . . . . . . . 21 7.3.1. Capabilities . . . . . . . . . . . . . . . . . . . . . 21
7.3.2. Input Parameters Media Type . . . . . . . . . . . . . 21 7.3.2. Input Parameters Media Type . . . . . . . . . . . . . 21
7.3.3. Media Type . . . . . . . . . . . . . . . . . . . . . . 21 7.3.3. Media Type . . . . . . . . . . . . . . . . . . . . . . 21
7.3.4. Encoding . . . . . . . . . . . . . . . . . . . . . . . 21 7.3.4. Encoding . . . . . . . . . . . . . . . . . . . . . . . 22
7.4. ALTO Errors . . . . . . . . . . . . . . . . . . . . . . . 23 7.4. ALTO Errors . . . . . . . . . . . . . . . . . . . . . . . 23
7.4.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 23 7.4.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 23
7.4.2. Resource Format . . . . . . . . . . . . . . . . . . . 23 7.4.2. Resource Format . . . . . . . . . . . . . . . . . . . 23
7.4.3. Error Codes . . . . . . . . . . . . . . . . . . . . . 24 7.4.3. Error Codes . . . . . . . . . . . . . . . . . . . . . 24
7.5. ALTO Types . . . . . . . . . . . . . . . . . . . . . . . . 25 7.5. ALTO Types . . . . . . . . . . . . . . . . . . . . . . . . 25
7.5.1. PID Name . . . . . . . . . . . . . . . . . . . . . . . 25 7.5.1. PID Name . . . . . . . . . . . . . . . . . . . . . . . 25
7.5.2. Endpoints . . . . . . . . . . . . . . . . . . . . . . 25 7.5.2. Endpoints . . . . . . . . . . . . . . . . . . . . . . 25
7.5.3. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 27 7.5.3. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 27
7.5.4. Cost Type . . . . . . . . . . . . . . . . . . . . . . 27 7.5.4. Cost Type . . . . . . . . . . . . . . . . . . . . . . 28
7.5.5. Endpoint Property . . . . . . . . . . . . . . . . . . 27 7.5.5. Endpoint Property . . . . . . . . . . . . . . . . . . 28
7.6. Information Resource Directory . . . . . . . . . . . . . . 28 7.6. Information Resource Directory . . . . . . . . . . . . . . 28
7.6.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 28 7.6.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 29
7.6.2. Encoding . . . . . . . . . . . . . . . . . . . . . . . 28 7.6.2. Encoding . . . . . . . . . . . . . . . . . . . . . . . 29
7.6.3. Example . . . . . . . . . . . . . . . . . . . . . . . 30 7.6.3. Example . . . . . . . . . . . . . . . . . . . . . . . 30
7.6.4. Usage Considerations . . . . . . . . . . . . . . . . . 33 7.6.4. Usage Considerations . . . . . . . . . . . . . . . . . 33
7.7. Information Resources . . . . . . . . . . . . . . . . . . 34 7.7. Information Resources . . . . . . . . . . . . . . . . . . 34
7.7.1. Server Information Service . . . . . . . . . . . . . . 34 7.7.1. Server Information Service . . . . . . . . . . . . . . 34
7.7.2. Map Service . . . . . . . . . . . . . . . . . . . . . 36 7.7.2. Map Service . . . . . . . . . . . . . . . . . . . . . 36
7.7.3. Map Filtering Service . . . . . . . . . . . . . . . . 41 7.7.3. Map Filtering Service . . . . . . . . . . . . . . . . 41
7.7.4. Endpoint Property Service . . . . . . . . . . . . . . 46 7.7.4. Endpoint Property Service . . . . . . . . . . . . . . 46
7.7.5. Endpoint Cost Service . . . . . . . . . . . . . . . . 49 7.7.5. Endpoint Cost Service . . . . . . . . . . . . . . . . 49
8. Redistributable Responses . . . . . . . . . . . . . . . . . . 52 8. Redistributable Responses . . . . . . . . . . . . . . . . . . 53
8.1. Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 53 8.1. Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.1.1. Service ID . . . . . . . . . . . . . . . . . . . . . . 53 8.1.1. Service ID . . . . . . . . . . . . . . . . . . . . . . 53
8.1.2. Expiration Time . . . . . . . . . . . . . . . . . . . 54 8.1.2. Expiration Time . . . . . . . . . . . . . . . . . . . 54
8.1.3. Signature . . . . . . . . . . . . . . . . . . . . . . 54 8.1.3. Signature . . . . . . . . . . . . . . . . . . . . . . 54
8.2. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 56 8.2. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.2.1. Response Redistribution Descriptor Fields . . . . . . 57 8.2.1. Response Redistribution Descriptor Fields . . . . . . 57
8.2.2. Signature . . . . . . . . . . . . . . . . . . . . . . 57 8.2.2. Signature . . . . . . . . . . . . . . . . . . . . . . 57
9. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 58 9. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 58
9.1. ALTO Client Embedded in P2P Tracker . . . . . . . . . . . 58 9.1. ALTO Client Embedded in P2P Tracker . . . . . . . . . . . 58
9.2. ALTO Client Embedded in P2P Client: Numerical Costs . . . 59 9.2. ALTO Client Embedded in P2P Client: Numerical Costs . . . 60
9.3. ALTO Client Embedded in P2P Client: Ranking . . . . . . . 60 9.3. ALTO Client Embedded in P2P Client: Ranking . . . . . . . 61
10. Discussions . . . . . . . . . . . . . . . . . . . . . . . . . 61 10. Discussions . . . . . . . . . . . . . . . . . . . . . . . . . 61
10.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 61 10.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 62
10.2. Hosts with Multiple Endpoint Addresses . . . . . . . . . . 62 10.2. Hosts with Multiple Endpoint Addresses . . . . . . . . . . 62
10.3. Network Address Translation Considerations . . . . . . . . 62 10.3. Network Address Translation Considerations . . . . . . . . 62
10.4. Mapping IPs to ASNs . . . . . . . . . . . . . . . . . . . 63 10.4. Mapping IPs to ASNs . . . . . . . . . . . . . . . . . . . 63
10.5. Endpoint and Path Properties . . . . . . . . . . . . . . . 63 10.5. Endpoint and Path Properties . . . . . . . . . . . . . . . 63
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 63 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 63
11.1. application/alto-* Media Types . . . . . . . . . . . . . . 63 11.1. application/alto-* Media Types . . . . . . . . . . . . . . 63
11.2. ALTO Cost Type Registry . . . . . . . . . . . . . . . . . 65 11.2. ALTO Cost Type Registry . . . . . . . . . . . . . . . . . 65
11.3. ALTO Endpoint Property Registry . . . . . . . . . . . . . 66 11.3. ALTO Endpoint Property Registry . . . . . . . . . . . . . 66
12. Security Considerations . . . . . . . . . . . . . . . . . . . 67 12. Security Considerations . . . . . . . . . . . . . . . . . . . 67
12.1. Privacy Considerations for ISPs . . . . . . . . . . . . . 67 12.1. Privacy Considerations for ISPs . . . . . . . . . . . . . 67
skipping to change at page 16, line 19 skipping to change at page 16, line 19
This Cost Mode is indicated by the string 'numerical'. This mode This Cost Mode is indicated by the string 'numerical'. This mode
indicates that it is safe to perform numerical operations (e.g. indicates that it is safe to perform numerical operations (e.g.
summation) on the returned costs. summation) on the returned costs.
5.1.2.2. Cost Mode: ordinal 5.1.2.2. Cost Mode: ordinal
This Cost Mode is indicated by the string 'ordinal'. This mode This Cost Mode is indicated by the string 'ordinal'. This mode
indicates that the costs values to a set of Destination Network indicates that the costs values to a set of Destination Network
Locations from a particular Source Network Location are a ranking, Locations from a particular Source Network Location are a ranking,
with lower values indicating a higher preference. with lower values indicating a higher preference. The values are
non-negative integers. Ordinal cost values from a particular Source
Network Location to a set of Destination Network Locations need not
be unique nor contiguous. In particular, from the perspective of a
particular Source Network Location, two Destination Network Locations
may have an identical rank (ordinal cost value). This document does
not specify any behavior by an ALTO Client in this case; an ALTO
Client may decide to break ties by random selection, other
application knowledge, or some other means.
It is important to note that the values in the Cost Map provided with It is important to note that the values in the Cost Map provided with
the ordinal Cost Mode are not necessarily the actual cost known to the ordinal Cost Mode are not necessarily the actual cost known to
the ALTO Server. the ALTO Server.
5.2. Cost Map Structure 5.2. Cost Map Structure
A query for a Cost Map either explicitly or implicitly includes a A query for a Cost Map either explicitly or implicitly includes a
list of Source Network Locations and a list of Destination Network list of Source Network Locations and a list of Destination Network
Locations. (Recall that a Network Location can be an endpoint Locations. (Recall that a Network Location can be an endpoint
skipping to change at page 24, line 30 skipping to change at page 24, line 36
it MUST indicate one of the corresponding HTTP status codes in it MUST indicate one of the corresponding HTTP status codes in
Table 1in the HTTP response. Table 1in the HTTP response.
If multiple errors are present in a single request (e.g., a request If multiple errors are present in a single request (e.g., a request
uses a JSONString when a JSONInteger is expected and a required field uses a JSONString when a JSONInteger is expected and a required field
is missing), then the ALTO Server MUST return exactly one of the is missing), then the ALTO Server MUST return exactly one of the
detected errors. However, the reported error is implementation detected errors. However, the reported error is implementation
defined, since specifying a particular order for message processing defined, since specifying a particular order for message processing
encroaches needlessly on implementation technique. encroaches needlessly on implementation technique.
+-------------------------+-----------------+-----------------------+ +-------------------------+-------------+---------------------------+
| ALTO Error Code | HTTP Status | Description | | ALTO Error Code | HTTP Status | Description |
| | Code(s) | | | | Code(s) | |
+-------------------------+-----------------+-----------------------+ +-------------------------+-------------+---------------------------+
| E_JSON_SYNTAX | 400 | JSON parsing error in | | E_SYNTAX | 400 | Parsing error in request |
| | | request | | | | (including identifiers) |
| | | | | | | |
| E_JSON_FIELD_MISSING | 400 | Required field | | E_JSON_FIELD_MISSING | 400 | Required field missing |
| | | missing | | | | |
| | | | | E_JSON_VALUE_TYPE | 400 | JSON Value of unexpected |
| E_JSON_VALUE_TYPE | 400 | JSON Value of | | | | type |
| | | unexpected type | | | | |
| | | | | E_INVALID_COST_MODE | 400 | Invalid cost mode |
| E_INVALID_COST_MODE | 400 | Invalid cost mode | | | | |
| | | | | E_INVALID_COST_TYPE | 400 | Invalid cost type |
| E_INVALID_COST_TYPE | 400 | Invalid cost type | | | | |
| | | | | E_INVALID_PROPERTY_TYPE | 400 | Invalid property type |
| E_INVALID_PROPERTY_TYPE | 400 | Invalid property type | +-------------------------+-------------+---------------------------+
+-------------------------+-----------------+-----------------------+
Table 1: Defined ALTO Error Codes Table 1: Defined ALTO Error Codes
7.5. ALTO Types 7.5. ALTO Types
This section details the format for particular data values used in This section details the format for particular data values used in
the ALTO Protocol. the ALTO Protocol.
7.5.1. PID Name 7.5.1. PID Name
skipping to change at page 25, line 23 skipping to change at page 25, line 27
more than 64 characters, and MUST NOT contain characters other than more than 64 characters, and MUST NOT contain characters other than
alphanumeric characters or the '.' separator. The '.' separator is alphanumeric characters or the '.' separator. The '.' separator is
reserved for future use and MUST NOT be used unless specifically reserved for future use and MUST NOT be used unless specifically
indicated by a companion or extension document. indicated by a companion or extension document.
The type 'PIDName' is used in this document to indicate a string of The type 'PIDName' is used in this document to indicate a string of
this format. this format.
7.5.2. Endpoints 7.5.2. Endpoints
This section defines formats used to encode addresses for Endpoints.
In a case that multiple textual representations encode the same
Endpoint address or prefix (within the guidelines outlined in this
document), the ALTO Protocol does not require ALTO Clients or ALTO
Servers to use a particular textual representation, nor does it
require that ALTO Servers reply to requests using the same textual
representation used by requesting ALTO Clients. ALTO Clients must be
cognizant of this.
7.5.2.1. Address Type 7.5.2.1. Address Type
Address Types are encoded as US-ASCII strings consisting of only Address Types are encoded as US-ASCII strings consisting of only
alphanumeric characters. This document defines the address type alphanumeric characters. This document defines the address type
"ipv4" to refer to IPv4 addresses, and "ipv6" to refer to IPv6 "ipv4" to refer to IPv4 addresses, and "ipv6" to refer to IPv6
addresses. Extension documents may define additional Address Types. addresses. Extension documents may define additional Address Types.
The type 'AddressType' is used in this document to indicate a string The type 'AddressType' is used in this document to indicate a string
of this format. of this format.
skipping to change at page 29, line 35 skipping to change at page 29, line 46
Each entry MUST indicate a URI that either directly provides the Each entry MUST indicate a URI that either directly provides the
indicated Information Resource, or responds to a HTTP OPTIONS request indicated Information Resource, or responds to a HTTP OPTIONS request
which provides an Information Resource Directory with entries of which provides an Information Resource Directory with entries of
additional Information Resources. additional Information Resources.
If an ALTO Client makes a GET or POST request to a URI that does not If an ALTO Client makes a GET or POST request to a URI that does not
directly provide an indicated Information Resource, the ALTO Server directly provide an indicated Information Resource, the ALTO Server
MUST either reply with an HTTP 300 status code ("Multiple Choices") MUST either reply with an HTTP 300 status code ("Multiple Choices")
and an Information Resource Directory in the HTTP response's entity and an Information Resource Directory in the HTTP response's entity
body, or indicate an appropriate HTTP status code. body, or indicate an appropriate HTTP status code. Note that in
general, it is preferred that ALTO Clients use HTTP OPTIONS requests
to discover additional Information Resources.
A URI that directly provides an Information Resource MAY also respond A URI that directly provides an Information Resource MAY also respond
to HTTP OPTIONS requests, but it is not required to do so (in which to HTTP OPTIONS requests, but it is not required to do so (in which
case, it MUST respond with HTTP 405 status code ("Method Not case, it MUST respond with HTTP 405 status code ("Method Not
Allowed"). This allows certain Information Resources to be Allowed"). This allows certain Information Resources to be
configured as static files with minimal configuration on some HTTP configured as static files with minimal configuration on some HTTP
servers. servers.
Each entry in the directory specifies: Each entry in the directory specifies:
skipping to change at page 30, line 23 skipping to change at page 30, line 36
capabilities A JSON Object enumerating capabilities of an ALTO capabilities A JSON Object enumerating capabilities of an ALTO
Server in providing the Information Resource at the corresponding Server in providing the Information Resource at the corresponding
URI and Information Resources discoverable via the URI. If this URI and Information Resources discoverable via the URI. If this
member is not present, it MUST be assumed to be an empty array. member is not present, it MUST be assumed to be an empty array.
If a capability for one of the offered Information Resources is If a capability for one of the offered Information Resources is
not explicitly listed here, an ALTO Client may either issue an not explicitly listed here, an ALTO Client may either issue an
OPTIONS HTTP request to the corresponding URI to determine if the OPTIONS HTTP request to the corresponding URI to determine if the
capability is supported, or assume its default value. capability is supported, or assume its default value.
If an entry has an empty list for "accepts", then the corresponding
URI MUST support GET requests. If an entry has a non-empty list for
"accepts", then the corresponding URI MUST support POST requests. If
an ALTO Server wishes to support both GET and POST on a single URI,
it MUST specify two entries in the Information Resource Directory.
7.6.3. Example 7.6.3. Example
The following is an example Information Resource Directory returned The following is an example Information Resource Directory returned
by an ALTO Server. In this example, the ALTO Server provides by an ALTO Server. In this example, the ALTO Server provides
additional Network and Cost Maps via a separate subdomain, additional Network and Cost Maps via a separate subdomain,
"custom.alto.example.com". The maps available via this subdomain are "custom.alto.example.com". The maps available via this subdomain are
Filtered Network and Cost Maps as well as pre-generated maps for the Filtered Network and Cost Maps as well as pre-generated maps for the
"hopcount" and "routingcost" Cost Types in the "ordinal" Cost Mode. "hopcount" and "routingcost" Cost Types in the "ordinal" Cost Mode.
An ALTO Client could discover the maps available via An ALTO Client can discover the maps available by
"custom.alto.example.com" by either: "custom.alto.example.com" by successfully performing an OPTIONS
request to "http://custom.alto.example.com/maps".
o Successfully performing an OPTIONS request to
"http://custom.alto.example.com/maps", or
o Attempting a POST request for a desired Network or Cost Map to
"http://custom.alto.example.com/maps" and receiving a HTTP 300
status code ("Multiple Choices") response with an Information
Resource Directory.
GET /directory HTTP/1.1 GET /directory HTTP/1.1
Host: alto.example.com Host: alto.example.com
Accept: application/alto-directory+json Accept: application/alto-directory+json,application/alto-error+json
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-directory+json Content-Type: application/alto-directory+json
{ {
"resources" : [ "resources" : [
{ {
"uri" : "http://alto.example.com/serverinfo", "uri" : "http://alto.example.com/serverinfo",
"media-types" : [ "application/alto-serverinfo+json" ] "media-types" : [ "application/alto-serverinfo+json" ]
skipping to change at page 31, line 38 skipping to change at page 31, line 45
} }
}, { }, {
"uri" : "http://custom.alto.example.com/maps", "uri" : "http://custom.alto.example.com/maps",
"media-types" : [ "media-types" : [
"application/alto-networkmap+json", "application/alto-networkmap+json",
"application/alto-costmap+json" "application/alto-costmap+json"
], ],
"accepts" : [ "accepts" : [
"application/alto-networkmapfilter+json", "application/alto-networkmapfilter+json",
"application/alto-costmapfilter+json" "application/alto-costmapfilter+json"
], ]
}, { }, {
"uri" : "http://alto.example.com/endpointprop/lookup", "uri" : "http://alto.example.com/endpointprop/lookup",
"media-types" : [ "application/alto-endpointprop+json" ], "media-types" : [ "application/alto-endpointprop+json" ],
"accepts" : [ "application/alto-endpointpropparams+json" ], "accepts" : [ "application/alto-endpointpropparams+json" ],
"capabilities" : { "capabilities" : {
"prop-types" : [ "pid" ] "prop-types" : [ "pid" ]
} }
}, { }, {
"uri" : "http://alto.example.com/endpointcost/lookup", "uri" : "http://alto.example.com/endpointcost/lookup",
"media-types" : [ "application/alto-endpointcost+json" ], "media-types" : [ "application/alto-endpointcost+json" ],
skipping to change at page 32, line 13 skipping to change at page 32, line 24
"cost-constraints" : true, "cost-constraints" : true,
"cost-modes" : [ "ordinal", "numerical" ], "cost-modes" : [ "ordinal", "numerical" ],
"cost-types" : [ "routingcost", "hopcount" ] "cost-types" : [ "routingcost", "hopcount" ]
} }
} }
] ]
} }
OPTIONS /maps HTTP/1.1 OPTIONS /maps HTTP/1.1
Host: custom.alto.example.com Host: custom.alto.example.com
Accept: application/alto-directory+json Accept: application/alto-directory+json,application/alto-error+json
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-directory+json Content-Type: application/alto-directory+json
{ {
"resources" : [ "resources" : [
{ {
"uri" : "http://custom.alto.example.com/networkmap/filtered", "uri" : "http://custom.alto.example.com/networkmap/filtered",
"media-types" : [ "application/alto-networkmap+json" ], "media-types" : [ "application/alto-networkmap+json" ],
"accepts" : [ "application/alto-networkmapfilter+json" ] "accepts" : [ "application/alto-networkmapfilter+json" ]
skipping to change at page 35, line 32 skipping to change at page 35, line 32
If an ALTO Server has the possibility of marking any response as If an ALTO Server has the possibility of marking any response as
redistributable, the 'service-id' and 'certificates' fields are redistributable, the 'service-id' and 'certificates' fields are
REQUIRED instead of OPTIONAL. See Section 8&$160;for detailed REQUIRED instead of OPTIONAL. See Section 8&$160;for detailed
specification. specification.
7.7.1.1.6. Example 7.7.1.1.6. Example
GET /serverinfo HTTP/1.1 GET /serverinfo HTTP/1.1
Host: alto.example.com Host: alto.example.com
Accept: application/alto-serverinfo+json Accept: application/alto-serverinfo+json,application/alto-error+json
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-serverinfo+json Content-Type: application/alto-serverinfo+json
{ {
"meta" : {}, "meta" : {},
"data" : { "data" : {
"service-id" : "c89ca72f-dead-41b5-9e2b-b65455ace1ee", "service-id" : "c89ca72f-dead-41b5-9e2b-b65455ace1ee",
"certificates" : [ ... ] "certificates" : [ ... ]
skipping to change at page 37, line 20 skipping to change at page 37, line 20
single PID and its associated set of endpoint addresses. A member's single PID and its associated set of endpoint addresses. A member's
name is a string of type PIDName. name is a string of type PIDName.
The returned Network Map MUST include all PIDs known to the ALTO The returned Network Map MUST include all PIDs known to the ALTO
Server. Server.
7.7.2.1.6. Example 7.7.2.1.6. Example
GET /networkmap HTTP/1.1 GET /networkmap HTTP/1.1
Host: alto.example.com Host: alto.example.com
Accept: application/alto-networkmap+json Accept: application/alto-networkmap+json,application/alto-error+json
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-networkmap+json Content-Type: application/alto-networkmap+json
{ {
"meta" : {}, "meta" : {},
"data" : { "data" : {
"map-vtag" : "1266506139", "map-vtag" : "1266506139",
"map" : { "map" : {
"PID1" : { "PID1" : {
skipping to change at page 38, line 31 skipping to change at page 38, line 31
"198.51.100.128/25" "198.51.100.128/25"
] ]
}, },
"PID3" : { "PID3" : {
"ipv4" : [ "ipv4" : [
"0.0.0.0/0" "0.0.0.0/0"
], ],
"ipv6" : [ "ipv6" : [
"::/0" "::/0"
] ]
] }
} }
} }
} }
7.7.2.2. Cost Map 7.7.2.2. Cost Map
The Cost Map resource lists the Path Cost for each pair of source/ The Cost Map resource lists the Path Cost for each pair of source/
destination PID defined by the ALTO Server for a given Cost Type and destination PID defined by the ALTO Server for a given Cost Type and
Cost Mode. This resource MUST be provided for at least the Cost Mode. This resource MUST be provided for at least the
'routingcost' Cost Type and 'numerical' Cost Mode. 'routingcost' Cost Type and 'numerical' Cost Mode.
skipping to change at page 40, line 48 skipping to change at page 40, line 48
string identifying the corresponding Destination PID. DstCosts MUST string identifying the corresponding Destination PID. DstCosts MUST
have a single member for each Destination PID in the map. have a single member for each Destination PID in the map.
The returned Cost Map MUST include Path Costs for each pair of Source The returned Cost Map MUST include Path Costs for each pair of Source
PID and Destination PID known to the ALTO Server. PID and Destination PID known to the ALTO Server.
7.7.2.2.6. Example 7.7.2.2.6. Example
GET /costmap/num/routingcost HTTP/1.1 GET /costmap/num/routingcost HTTP/1.1
Host: alto.example.com Host: alto.example.com
Accept: application/alto-costmap+json Accept: application/alto-costmap+json,application/alto-error+json
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-costmap+json Content-Type: application/alto-costmap+json
{ {
"meta" : {}, "meta" : {},
"data" : { "data" : {
"cost-mode" : "numerical", "cost-mode" : "numerical",
"cost-type" : "routingcost", "cost-type" : "routingcost",
"map-vtag" : "1266506139", "map-vtag" : "1266506139",
skipping to change at page 42, line 14 skipping to change at page 42, line 14
object { object {
PIDName pids<0..*>; PIDName pids<0..*>;
} ReqFilteredNetworkMap; } ReqFilteredNetworkMap;
with members: with members:
pids Specifies list of PIDs to be included in the returned Filtered pids Specifies list of PIDs to be included in the returned Filtered
Network Map. If the list of PIDs is empty, the ALTO Server MUST Network Map. If the list of PIDs is empty, the ALTO Server MUST
interpret the list as if it contained a list of all currently- interpret the list as if it contained a list of all currently-
defined PIDs. defined PIDs. The ALTO Server MUST interpret entries appearing
multiple times as if they appeared only once.
7.7.3.1.4. Capabilities 7.7.3.1.4. Capabilities
None. None.
7.7.3.1.5. Response 7.7.3.1.5. Response
See Section 7.7.2.1.5 for the format. See Section 7.7.2.1.5 for the format.
The ALTO Server MUST only include PIDs in the response that were The ALTO Server MUST only include PIDs in the response that were
skipping to change at page 43, line 11 skipping to change at page 43, line 11
parameters contain a PID name that is not currently defined by the parameters contain a PID name that is not currently defined by the
ALTO Server, the ALTO Server MUST behave as if the PID did not appear ALTO Server, the ALTO Server MUST behave as if the PID did not appear
in the input parameters. in the input parameters.
7.7.3.1.6. Example 7.7.3.1.6. Example
POST /networkmap/filtered HTTP/1.1 POST /networkmap/filtered HTTP/1.1
Host: custom.alto.example.com Host: custom.alto.example.com
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-networkmapfilter+json Content-Type: application/alto-networkmapfilter+json
Accept: application/alto-networkmap+json Accept: application/alto-networkmap+json,application/alto-error+json
{ {
pids: [ "PID1", "PID2" ] "pids": [ "PID1", "PID2" ]
} }
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-networkmap+json Content-Type: application/alto-networkmap+json
{ {
"meta" : {}, "meta" : {},
"data" : { "data" : {
"map-vtag" : "1266506139", "map-vtag" : "1266506139",
skipping to change at page 45, line 13 skipping to change at page 45, line 13
type parameter. ALTO Servers SHOULD use at least IEEE 754 double- type parameter. ALTO Servers SHOULD use at least IEEE 754 double-
precision floating point [IEEE.754.2008] to store the numerical precision floating point [IEEE.754.2008] to store the numerical
cost, and SHOULD perform internal computations using double- cost, and SHOULD perform internal computations using double-
precision floating-point arithmetic. If multiple 'constraint' precision floating-point arithmetic. If multiple 'constraint'
parameters are specified, they are interpreted as being related to parameters are specified, they are interpreted as being related to
each other with a logical AND. each other with a logical AND.
pids A list of Source PIDs and a list of Destination PIDs for which pids A list of Source PIDs and a list of Destination PIDs for which
Path Costs are to be returned. If a list is empty, the ALTO Path Costs are to be returned. If a list is empty, the ALTO
Server MUST interpret it as the full set of currently-defined Server MUST interpret it as the full set of currently-defined
PIDs. If the "pids" member is not present, both lists MUST be PIDs. The ALTO Server MUST interpret entries appearing in a list
interpreted by the ALTO Server as containing the full set of multiple times as if they appeared only once. If the "pids"
currently-defined PIDs. member is not present, both lists MUST be interpreted by the ALTO
Server as containing the full set of currently-defined PIDs.
7.7.3.2.4. Capabilities 7.7.3.2.4. Capabilities
See Section 7.7.2.2.4. The URI providing this resource supports all capabilities documented
in Section 7.7.2.2.4 (with identical semantics), plus additional
capabilities. In particular, the capabilities are defined by a JSON
object of type FilteredCostMapCapability:
object {
CostMode cost-modes<0..*>;
CostType cost-types<0..*>;
JSONBool cost-constraints;
} FilteredCostMapCapability;
with members:
cost-modes See Section 7.7.2.2.4.
cost-types See Section 7.7.2.2.4.
cost-constraints If true, then the ALTO Server allows cost
constraints to be included in requests to the corresponding URI.
If not present, this member MUST be interpreted as if it specified
false.
7.7.3.2.5. Response 7.7.3.2.5. Response
See Section 7.7.2.2.5 for the format. See Section 7.7.2.2.5 for the format.
The returned Cost Map MUST NOT contain any source/destination pair The returned Cost Map MUST NOT contain any source/destination pair
that was not indicated (implicitly or explicitly) in the input that was not indicated (implicitly or explicitly) in the input
parameters. If the input parameters contain a PID name that is not parameters. If the input parameters contain a PID name that is not
currently defined by the ALTO Server, the ALTO Server MUST behave as currently defined by the ALTO Server, the ALTO Server MUST behave as
if the PID did not appear in the input parameters. if the PID did not appear in the input parameters.
skipping to change at page 46, line 10 skipping to change at page 46, line 16
If any constraints are specified, Source/Destination pairs that do If any constraints are specified, Source/Destination pairs that do
for which the Path Costs do not meet the constraints MUST NOT be for which the Path Costs do not meet the constraints MUST NOT be
included in the returned Cost Map. If no constraints were specified, included in the returned Cost Map. If no constraints were specified,
then all Path Costs are assumed to meet the constraints. then all Path Costs are assumed to meet the constraints.
7.7.3.2.6. Example 7.7.3.2.6. Example
POST /costmap/filtered HTTP/1.1 POST /costmap/filtered HTTP/1.1
Host: custom.alto.example.com Host: custom.alto.example.com
Content-Type: application/alto-costmapfilter+json Content-Type: application/alto-costmapfilter+json
Accept: application/alto-costmap+json Accept: application/alto-costmap+json,application/alto-error+json
{ {
"cost-mode" : "numerical", "cost-mode" : "numerical",
"cost-type" : "routingcost", "cost-type" : "routingcost",
"pids" : { "pids" : {
"srcs" : [ "PID1" ], "srcs" : [ "PID1" ],
"dsts" : [ "PID1", "PID2", "PID3" ] "dsts" : [ "PID1", "PID2", "PID3" ]
} }
} }
skipping to change at page 47, line 21 skipping to change at page 47, line 28
This resource is requested using the HTTP POST method. This resource is requested using the HTTP POST method.
7.7.4.1.3. Input Parameters 7.7.4.1.3. Input Parameters
Input parameters are supplied in the entity body of the POST request. Input parameters are supplied in the entity body of the POST request.
This document specifies the data format of input parameteres with the This document specifies the data format of input parameteres with the
media type "application/alto-endpointpropparams+json", which is a media type "application/alto-endpointpropparams+json", which is a
JSON Object of type ReqEndpointProp: JSON Object of type ReqEndpointProp:
object { object {
EndpointProperty properties<0..*>; EndpointProperty properties<1..*>;
TypedEndpointAddr endpoints<0..*>; TypedEndpointAddr endpoints<1..*>;
} ReqEndpointProp; } ReqEndpointProp;
with members: with members:
properties List of endpoint properties to returned for each properties List of endpoint properties to returned for each
endpoint. Each specified property MUST be included in the list of endpoint. Each specified property MUST be included in the list of
supported properties indicated by this resource's capabilities ( supported properties indicated by this resource's capabilities (
Section 7.7.4.1.4). Section 7.7.4.1.4). The ALTO Server MUST interpret entries
appearing multiple times as if they appeared only once.
endpoints List of endpoint addresses for which the specified endpoints List of endpoint addresses for which the specified
properties are to be returned. properties are to be returned. The ALTO Server MUST interpret
entries appearing multiple times as if they appeared only once.
7.7.4.1.4. Capabilities 7.7.4.1.4. Capabilities
This resource may be defined across multiple types of endpoint This resource may be defined across multiple types of endpoint
properties. The capabilities of an ALTO Server URI providing properties. The capabilities of an ALTO Server URI providing
Endpoint Properties are defined by a JSON Object of type Endpoint Properties are defined by a JSON Object of type
EndpointPropertyCapability: EndpointPropertyCapability:
object { object {
EndpointProperty prop-types<0..*>; EndpointProperty prop-types<0..*>;
skipping to change at page 49, line 7 skipping to change at page 49, line 7
The ALTO Server returns the value for each of the requested endpoint The ALTO Server returns the value for each of the requested endpoint
properties for each of the endpoints listed in the input parameters. properties for each of the endpoints listed in the input parameters.
If the ALTO Server does not define a requested property for a If the ALTO Server does not define a requested property for a
particular endpoint, then it MUST omit it from the response for only particular endpoint, then it MUST omit it from the response for only
that endpoint. that endpoint.
7.7.4.1.6. Example 7.7.4.1.6. Example
POST /endpointprop/lookup HTTP/1.1 POST /endpointprop/lookup HTTP/1.1
Host: alto.example.com Host: alto.example.com
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-endpointpropparams+json Content-Type: application/alto-endpointpropparams+json
Accept: application/alto-endpointprop+json Accept: application/alto-endpointprop+json,application/alto-error+json
{ {
"properties" : [ "pid" ], "properties" : [ "pid" ],
"endpoints" : [ "ipv4:192.0.2.34", "ipv4:203.0.113.129" ] "endpoints" : [ "ipv4:192.0.2.34", "ipv4:203.0.113.129" ]
} }
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-endpointprop+json Content-Type: application/alto-endpointprop+json
{ {
"meta" : {}, "meta" : {},
"data": { "data": {
"ipv4:192.0.2.34" : { "pid": "PID1" }, "ipv4:192.0.2.34" : { "pid": "PID1" },
"ipv4:203.0.113.129" : { "pid": "PID3" } "ipv4:203.0.113.129" : { "pid": "PID3" }
} }
} }
7.7.5. Endpoint Cost Service 7.7.5. Endpoint Cost Service
The Endpoint Cost Service provides information about costs between The Endpoint Cost Service provides information about costs between
individual endpoints. individual endpoints.
In particular, this service allows lists of Endpoint prefixes (and In particular, this service allows lists of Endpoint prefixes (and
addresses, as a special case) to be ranked (ordered) by an ALTO addresses, as a special case) to be ranked (ordered) by an ALTO
Server. Server.
skipping to change at page 50, line 49 skipping to change at page 50, line 49
cost-type The Cost Type ( Section 5.1.1) to use for returned costs. cost-type The Cost Type ( Section 5.1.1) to use for returned costs.
This MUST be one of the Cost Types indicated in this resource's This MUST be one of the Cost Types indicated in this resource's
capabilities ( Section 7.7.5.1.4). capabilities ( Section 7.7.5.1.4).
constraints Defined equivalently to the "constraints" input constraints Defined equivalently to the "constraints" input
parameter of a Filtered Cost Map (see Section 7.7.3.2). parameter of a Filtered Cost Map (see Section 7.7.3.2).
endpoints A list of Source Endpoints and Destination Endpoints for endpoints A list of Source Endpoints and Destination Endpoints for
which Path Costs are to be returned. If the list of Source which Path Costs are to be returned. If the list of Source
Endpoints is empty (or not included), the ALTO Server MUST Endpoints is empty (or not included), the ALTO Server MUST
interpret it as if it contained the Endpoint Address of the interpret it as if it contained the Endpoint Address corresponding
requesting client. The list of destination Endpoints MUST NOT be to the client IP address from the incoming connection (see
empty. Section 10.3 for discussion and considerations regarding this
mode). The list of destination Endpoints MUST NOT be empty. The
ALTO Server MUST interpret entries appearing multiple times in a
list as if they appeared only once.
7.7.5.1.4. Capabilities 7.7.5.1.4. Capabilities
See Section 7.7.2.2.4. See Section 7.7.3.2.4.
7.7.5.1.5. Response 7.7.5.1.5. Response
The returned InfoResourceEntity object has "data" member equal to The returned InfoResourceEntity object has "data" member equal to
InfoResourceEndpointCostMap, where: InfoResourceEndpointCostMap, where:
object EndpointDstCosts { object EndpointDstCosts {
JSONNumber [TypedEndpointAddr]; JSONNumber [TypedEndpointAddr];
... ...
}; };
skipping to change at page 52, line 7 skipping to change at page 52, line 8
single Source Endpoint specified in the input parameters; the name single Source Endpoint specified in the input parameters; the name
for a member is the TypedEndpointAddr string identifying the for a member is the TypedEndpointAddr string identifying the
corresponding Source Endpoint. For each Source Endpoint, a corresponding Source Endpoint. For each Source Endpoint, a
EndpointDstCosts object denotes the associated cost to each EndpointDstCosts object denotes the associated cost to each
Destination Endpoint specified in the input parameters; the name for Destination Endpoint specified in the input parameters; the name for
each member in the object is the TypedEndpointAddr string identifying each member in the object is the TypedEndpointAddr string identifying
the corresponding Destination Endpoint. the corresponding Destination Endpoint.
7.7.5.1.6. Example 7.7.5.1.6. Example
POST /endpointcost/lookup HTTP/1.1 POST /endpointcost/lookup HTTP/1.1
Host: alto.example.com Host: alto.example.com
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-endpointcostparams+json Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json Accept: application/alto-endpointcost+json,application/alto-error+json
{ {
"cost-mode" : "ordinal", "cost-mode" : "ordinal",
"cost-type" : "routingcost", "cost-type" : "routingcost",
"endpoints" : { "endpoints" : {
"srcs": [ "ipv4:192.0.2.2" ], "srcs": [ "ipv4:192.0.2.2" ],
"dsts": [ "dsts": [
"ipv4:192.0.2.89", "ipv4:192.0.2.89",
"ipv4:198.51.100.34", "ipv4:198.51.100.34",
"ipv4:203.0.113.45" "ipv4:203.0.113.45"
] ]
} }
} }
HTTP/1.1 200 OK HTTP/1.1 200 OK
Content-Length: [TODO] Content-Length: [TODO]
Content-Type: application/alto-endpointcost+json Content-Type: application/alto-endpointcost+json
{ {
"meta" : {}, "meta" : {},
"data" : { "data" : {
"map" : { "cost-mode" : "ordinal",
"ipv4:192.0.2.2": { "cost-type" : "routingcost",
"ipv4:192.0.2.89" : 1, "map" : {
"ipv4:198.51.100.34" : 2, "ipv4:192.0.2.2": {
"ipv4:203.0.113.45" : 3 "ipv4:192.0.2.89" : 1,
} "ipv4:198.51.100.34" : 2,
} "ipv4:203.0.113.45" : 3
} }
} }
}
}
8. Redistributable Responses 8. Redistributable Responses
This section defines how an ALTO Server enables certain Information This section defines how an ALTO Server enables certain Information
Resources to be redistributed by ALTO Clients. Concepts are first Resources to be redistributed by ALTO Clients. Concepts are first
introduced, followed by the protocol specification. introduced, followed by the protocol specification.
8.1. Concepts 8.1. Concepts
8.1.1. Service ID 8.1.1. Service ID
skipping to change at page 56, line 30 skipping to change at page 56, line 36
mechanism for redistributing such information is not specified by the mechanism for redistributing such information is not specified by the
ALTO Protocol, but one possibility is to add additional messages or ALTO Protocol, but one possibility is to add additional messages or
fields to the application's native protocol. fields to the application's native protocol.
8.2. Protocol 8.2. Protocol
An ALTO Server MAY indicate that a response is suitable for An ALTO Server MAY indicate that a response is suitable for
redistribution by including the "redistribution" member in the redistribution by including the "redistribution" member in the
RspMetaData JSON object of an Information Resource. This additional RspMetaData JSON object of an Information Resource. This additional
member, called the Response Redistribution Descriptor, has type member, called the Response Redistribution Descriptor, has type
RspRedistDesc: InfoResourceRedistDesc:
object { object {
JSONString service-id; JSONString service-id;
JSONString request-uri; JSONString request-uri;
JSONValue request-body; JSONValue request-body;
JSONString media-type; JSONString media-type;
JSONString expires; JSONString expires;
} RspRedistDesc; } InfoResourceRedistDesc;
The fields encoded in the Response Redistribution Descriptor allows The fields encoded in the Response Redistribution Descriptor allows
an ALTO Client receiving redistributed ALTO Information to understand an ALTO Client receiving redistributed ALTO Information to understand
the context of the query (the ALTO Service generating the response the context of the query (the ALTO Service generating the response
and any input parameters) and to interpret the results. and any input parameters) and to interpret the results.
Information about ALTO Client performing the request and any HTTP Information about ALTO Client performing the request and any HTTP
Headers passed in the request are not included in the Response Headers passed in the request are not included in the Response
Redistribution Descriptor. If any such information or headers Redistribution Descriptor. If any such information or headers
influence the response generated by the ALTO Server, the response influence the response generated by the ALTO Server, the response
skipping to change at page 62, line 39 skipping to change at page 62, line 47
10.3. Network Address Translation Considerations 10.3. Network Address Translation Considerations
At this day and age of NAT v4<->v4, v4<->v6 [RFC6144], and possibly At this day and age of NAT v4<->v4, v4<->v6 [RFC6144], and possibly
v6<->v6[I-D.mrw-nat66], a protocol should strive to be NAT friendly v6<->v6[I-D.mrw-nat66], a protocol should strive to be NAT friendly
and minimize carrying IP addresses in the payload, or provide a mode and minimize carrying IP addresses in the payload, or provide a mode
of operation where the source IP address provide the information of operation where the source IP address provide the information
necessary to the server. necessary to the server.
The protocol specified in this document provides a mode of operation The protocol specified in this document provides a mode of operation
where the source network location is computed by the ALTO Server (via where the source network location is computed by the ALTO Server
the Endpoint Property Lookup interface) from the source IP address (i.e., the the Endpoint Cost Service) from the source IP address
found in the ALTO Client query packets. This is similar to how some found in the ALTO Client query packets. This is similar to how some
P2P Trackers (e.g., BitTorrent Trackers - see "Tracker HTTP/HTTPS P2P Trackers (e.g., BitTorrent Trackers - see "Tracker HTTP/HTTPS
Protocol" in [BitTorrent]) operate. Protocol" in [BitTorrent]) operate.
The ALTO client SHOULD use the Session Traversal Utilities for NAT The ALTO client SHOULD use the Session Traversal Utilities for NAT
(STUN) [RFC5389] to determine a public IP address to use as a source (STUN) [RFC5389] to determine a public IP address to use as a source
Endpoint address. If using this method, the host MUST use the Endpoint address. If using this method, the host MUST use the
"Binding Request" message and the resulting "XOR-MAPPED-ADDRESS" "Binding Request" message and the resulting "XOR-MAPPED-ADDRESS"
parameter that is returned in the response. Using STUN requires parameter that is returned in the response. Using STUN requires
cooperation from a publicly accessible STUN server. Thus, the ALTO cooperation from a publicly accessible STUN server. Thus, the ALTO
 End of changes. 49 change blocks. 
127 lines changed or deleted 173 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/