| < draft-ietf-alto-protocol-09.txt | draft-ietf-alto-protocol-10.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: December 29, 2011 Juniper Networks | Expires: May 3, 2012 Juniper Networks | |||
| Y. Yang, Ed. | Y. Yang, Ed. | |||
| Yale University | Yale University | |||
| June 27, 2011 | October 31, 2011 | |||
| ALTO Protocol | ALTO Protocol | |||
| draft-ietf-alto-protocol-09.txt | draft-ietf-alto-protocol-10.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 | |||
| optimization -- and a way to distribute it. | optimization -- and a way to distribute it. | |||
| The ALTO Service provides information such as preferences of network | The ALTO Service provides network information (e.g., basic network | |||
| resources with the goal of modifying network resource consumption | location structure, preferences of network paths) with the goal of | |||
| patterns while maintaining or improving application performance. | 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 simplified, | ||||
| yet enough information of a network for applications to effectively | ||||
| utilize. Additional services are built on top the maps. | ||||
| This document describes a protocol implementing the ALTO Service. | This document describes a protocol implementing the ALTO Service. | |||
| While such service would primarily be provided by the network (i.e., | Although the ALTO service would primarily be provided by the network | |||
| the ISP), content providers and third parties could also operate this | (i.e., the ISP), content providers and third parties could also | |||
| service. Applications that could use this service are those that | operate this service. Applications that could use this service are | |||
| have a choice in connection endpoints. Examples of such applications | those that have a choice in connection endpoints. Examples of such | |||
| are peer-to-peer (P2P) and content delivery networks. | applications are peer-to-peer (P2P) and content delivery networks. | |||
| Requirements Language | Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
| Status of this Memo | Status of this Memo | |||
| This Internet-Draft is submitted to IETF in full conformance with the | This Internet-Draft is submitted to IETF in full conformance with the | |||
| skipping to change at page 2, line 16 ¶ | skipping to change at page 2, line 21 ¶ | |||
| 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 December 29, 2011. | This Internet-Draft will expire on May 3, 2012. | |||
| 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 10 ¶ | skipping to change at page 3, line 10 ¶ | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the BSD License. | described in the BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 1.1. Background and Problem Statement . . . . . . . . . . . . . 6 | 1.1. Background and Problem Statement . . . . . . . . . . . . . 6 | |||
| 1.2. Design History and Merged Proposals . . . . . . . . . . . 6 | 1.2. Design History and Merged Proposals . . . . . . . . . . . 6 | |||
| 1.3. Solution Benefits . . . . . . . . . . . . . . . . . . . . 6 | 1.3. Solution Benefits . . . . . . . . . . . . . . . . . . . . 7 | |||
| 1.3.1. Service Providers . . . . . . . . . . . . . . . . . . 7 | 1.3.1. Service Providers . . . . . . . . . . . . . . . . . . 7 | |||
| 1.3.2. Applications . . . . . . . . . . . . . . . . . . . . . 7 | 1.3.2. Applications . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2. Architecture . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Architecture . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.1.1. Endpoint Address . . . . . . . . . . . . . . . . . . . 7 | 2.1.1. Endpoint Address . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.1.2. ASN . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.1.2. ASN . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.1.3. Network Location . . . . . . . . . . . . . . . . . . . 8 | 2.1.3. Network Location . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.1.4. ALTO Information . . . . . . . . . . . . . . . . . . . 8 | 2.1.4. ALTO Information . . . . . . . . . . . . . . . . . . . 8 | |||
| 2.1.5. ALTO Information Base . . . . . . . . . . . . . . . . 8 | 2.1.5. ALTO Information Base . . . . . . . . . . . . . . . . 8 | |||
| 2.2. ALTO Service and Protocol Scope . . . . . . . . . . . . . 8 | 2.2. ALTO Service and Protocol Scope . . . . . . . . . . . . . 8 | |||
| 3. Protocol Structure . . . . . . . . . . . . . . . . . . . . . . 10 | 3. Protocol Structure . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.1. Server Information Service . . . . . . . . . . . . . . . . 11 | 3.1. Server Information Service . . . . . . . . . . . . . . . . 11 | |||
| 3.2. ALTO Information Services . . . . . . . . . . . . . . . . 11 | 3.2. ALTO Information Services . . . . . . . . . . . . . . . . 11 | |||
| 3.2.1. Map Service . . . . . . . . . . . . . . . . . . . . . 11 | 3.2.1. Map Service . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.2.2. Map Filtering Service . . . . . . . . . . . . . . . . 11 | 3.2.2. Map Filtering Service . . . . . . . . . . . . . . . . 12 | |||
| 3.2.3. Endpoint Property Service . . . . . . . . . . . . . . 11 | 3.2.3. Endpoint Property Service . . . . . . . . . . . . . . 12 | |||
| 3.2.4. Endpoint Cost Service . . . . . . . . . . . . . . . . 12 | 3.2.4. Endpoint Cost Service . . . . . . . . . . . . . . . . 12 | |||
| 4. Network Map . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4. Network Map . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.1. PID . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1. PID . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.2. Endpoint Addresses . . . . . . . . . . . . . . . . . . . . 13 | 4.2. Endpoint Addresses . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.2.1. IP Addresses . . . . . . . . . . . . . . . . . . . . . 13 | 4.2.1. IP Addresses . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 4.3. Example Network Map . . . . . . . . . . . . . . . . . . . 13 | 4.3. Example Network Map . . . . . . . . . . . . . . . . . . . 14 | |||
| 5. Cost Map . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 5. Cost Map . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1. Cost Attributes . . . . . . . . . . . . . . . . . . . . . 14 | 5.1. Cost Attributes . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1.1. Cost Type . . . . . . . . . . . . . . . . . . . . . . 15 | 5.1.1. Cost Type . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1.2. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 15 | 5.1.2. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.2. Cost Map Structure . . . . . . . . . . . . . . . . . . . . 16 | 5.2. Cost Map Structure . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.3. Network Map and Cost Map Dependency . . . . . . . . . . . 17 | 5.3. Network Map and Cost Map Dependency . . . . . . . . . . . 17 | |||
| 6. Protocol Design Overview . . . . . . . . . . . . . . . . . . . 17 | 6. Protocol Design Overview . . . . . . . . . . . . . . . . . . . 18 | |||
| 6.1. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 6.1. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 6.1.1. Existing Infrastructure . . . . . . . . . . . . . . . 17 | 6.1.1. Existing Infrastructure . . . . . . . . . . . . . . . 18 | |||
| 6.1.2. ALTO Information Reuse and Redistribution . . . . . . 18 | 6.1.2. ALTO Information Reuse and Redistribution . . . . . . 18 | |||
| 6.2. Protocol Design . . . . . . . . . . . . . . . . . . . . . 18 | 6.2. Protocol Design . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7. Protocol Specification . . . . . . . . . . . . . . . . . . . . 18 | 7. Protocol Specification . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.1. Notation . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 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 . . . . . . . . . . 20 | |||
| 7.2.2. Requesting Information Resources . . . . . . . . . . . 19 | 7.2.2. Requesting Information Resources . . . . . . . . . . . 20 | |||
| 7.2.3. Response . . . . . . . . . . . . . . . . . . . . . . . 20 | 7.2.3. Response . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 7.2.4. Client Behavior . . . . . . . . . . . . . . . . . . . 20 | 7.2.4. Client Behavior . . . . . . . . . . . . . . . . . . . 21 | |||
| 7.2.5. Authentication and Encryption . . . . . . . . . . . . 21 | 7.2.5. Authentication and Encryption . . . . . . . . . . . . 21 | |||
| 7.2.6. HTTP Cookies . . . . . . . . . . . . . . . . . . . . . 21 | 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 . . . . . . . . . . . . . . . . . . . 22 | |||
| 7.3.1. Capabilities . . . . . . . . . . . . . . . . . . . . . 21 | 7.3.1. Capabilities . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 7.3.2. Input Parameters Media Type . . . . . . . . . . . . . 21 | 7.3.2. Input Parameters Media Type . . . . . . . . . . . . . 22 | |||
| 7.3.3. Media Type . . . . . . . . . . . . . . . . . . . . . . 21 | 7.3.3. Media Type . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 7.3.4. Encoding . . . . . . . . . . . . . . . . . . . . . . . 22 | 7.3.4. Encoding . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 7.4. ALTO Errors . . . . . . . . . . . . . . . . . . . . . . . 23 | 7.4. ALTO Errors . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 7.4.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 23 | 7.4.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 7.4.2. Resource Format . . . . . . . . . . . . . . . . . . . 23 | 7.4.2. Resource Format . . . . . . . . . . . . . . . . . . . 24 | |||
| 7.4.3. Error Codes . . . . . . . . . . . . . . . . . . . . . 24 | 7.4.3. Error Codes . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 7.5. ALTO Types . . . . . . . . . . . . . . . . . . . . . . . . 25 | 7.5. ALTO Types . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 7.5.1. PID Name . . . . . . . . . . . . . . . . . . . . . . . 25 | 7.5.1. PID Name . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 7.5.2. Endpoints . . . . . . . . . . . . . . . . . . . . . . 25 | 7.5.2. Version Tag . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 7.5.3. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 27 | 7.5.3. Endpoints . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 7.5.4. Cost Type . . . . . . . . . . . . . . . . . . . . . . 28 | 7.5.4. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 7.5.5. Endpoint Property . . . . . . . . . . . . . . . . . . 28 | 7.5.5. Cost Type . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 7.6. Information Resource Directory . . . . . . . . . . . . . . 28 | 7.5.6. Endpoint Property . . . . . . . . . . . . . . . . . . 29 | |||
| 7.6. Information Resource Directory . . . . . . . . . . . . . . 29 | ||||
| 7.6.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 29 | 7.6.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 7.6.2. Encoding . . . . . . . . . . . . . . . . . . . . . . . 29 | 7.6.2. Encoding . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 7.6.3. Example . . . . . . . . . . . . . . . . . . . . . . . 30 | 7.6.3. Example . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 7.6.4. Usage Considerations . . . . . . . . . . . . . . . . . 33 | 7.6.4. Usage Considerations . . . . . . . . . . . . . . . . . 34 | |||
| 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 . . . . . . . . . . . . . . 47 | |||
| 7.7.5. Endpoint Cost Service . . . . . . . . . . . . . . . . 49 | 7.7.5. Endpoint Cost Service . . . . . . . . . . . . . . . . 49 | |||
| 8. Redistributable Responses . . . . . . . . . . . . . . . . . . 53 | 8. Redistributable Responses . . . . . . . . . . . . . . . . . . 53 | |||
| 8.1. Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 53 | 8.1. Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 8.1.1. Service ID . . . . . . . . . . . . . . . . . . . . . . 53 | 8.1.1. Service ID . . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 8.1.2. Expiration Time . . . . . . . . . . . . . . . . . . . 54 | 8.1.2. Expiration Time . . . . . . . . . . . . . . . . . . . 55 | |||
| 8.1.3. Signature . . . . . . . . . . . . . . . . . . . . . . 54 | 8.1.3. Signature . . . . . . . . . . . . . . . . . . . . . . 55 | |||
| 8.2. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 56 | 8.2. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 57 | |||
| 8.2.1. Response Redistribution Descriptor Fields . . . . . . 57 | 8.2.1. Response Redistribution Descriptor Fields . . . . . . 58 | |||
| 8.2.2. Signature . . . . . . . . . . . . . . . . . . . . . . 57 | 8.2.2. Signature . . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 9. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | 9. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 59 | |||
| 9.1. ALTO Client Embedded in P2P Tracker . . . . . . . . . . . 58 | 9.1. ALTO Client Embedded in P2P Tracker . . . . . . . . . . . 59 | |||
| 9.2. ALTO Client Embedded in P2P Client: Numerical Costs . . . 60 | 9.2. ALTO Client Embedded in P2P Client: Numerical Costs . . . 61 | |||
| 9.3. ALTO Client Embedded in P2P Client: Ranking . . . . . . . 61 | 9.3. ALTO Client Embedded in P2P Client: Ranking . . . . . . . 62 | |||
| 10. Discussions . . . . . . . . . . . . . . . . . . . . . . . . . 61 | 10. Discussions . . . . . . . . . . . . . . . . . . . . . . . . . 62 | |||
| 10.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 62 | 10.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 63 | |||
| 10.2. Hosts with Multiple Endpoint Addresses . . . . . . . . . . 62 | 10.2. Hosts with Multiple Endpoint Addresses . . . . . . . . . . 63 | |||
| 10.3. Network Address Translation Considerations . . . . . . . . 62 | 10.3. Network Address Translation Considerations . . . . . . . . 63 | |||
| 10.4. Mapping IPs to ASNs . . . . . . . . . . . . . . . . . . . 63 | 10.4. Mapping IPs to ASNs . . . . . . . . . . . . . . . . . . . 64 | |||
| 10.5. Endpoint and Path Properties . . . . . . . . . . . . . . . 63 | 10.5. Endpoint and Path Properties . . . . . . . . . . . . . . . 64 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 63 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 64 | |||
| 11.1. application/alto-* Media Types . . . . . . . . . . . . . . 63 | 11.1. application/alto-* Media Types . . . . . . . . . . . . . . 64 | |||
| 11.2. ALTO Cost Type Registry . . . . . . . . . . . . . . . . . 65 | 11.2. ALTO Cost Type Registry . . . . . . . . . . . . . . . . . 66 | |||
| 11.3. ALTO Endpoint Property Registry . . . . . . . . . . . . . 66 | 11.3. ALTO Endpoint Property Registry . . . . . . . . . . . . . 67 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 67 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 68 | |||
| 12.1. Privacy Considerations for ISPs . . . . . . . . . . . . . 67 | 12.1. Privacy Considerations for ISPs . . . . . . . . . . . . . 68 | |||
| 12.2. ALTO Clients . . . . . . . . . . . . . . . . . . . . . . . 68 | 12.2. ALTO Clients . . . . . . . . . . . . . . . . . . . . . . . 69 | |||
| 12.3. Authentication, Integrity Protection, and Encryption . . . 68 | 12.3. Authentication, Integrity Protection, and Encryption . . . 69 | |||
| 12.4. ALTO Information Redistribution . . . . . . . . . . . . . 69 | 12.4. ALTO Information Redistribution . . . . . . . . . . . . . 70 | |||
| 12.5. Denial of Service . . . . . . . . . . . . . . . . . . . . 69 | 12.5. Denial of Service . . . . . . . . . . . . . . . . . . . . 70 | |||
| 12.6. ALTO Server Access Control . . . . . . . . . . . . . . . . 70 | 12.6. ALTO Server Access Control . . . . . . . . . . . . . . . . 71 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 70 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 71 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . . 70 | 13.1. Normative References . . . . . . . . . . . . . . . . . . . 71 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . . 71 | 13.2. Informative References . . . . . . . . . . . . . . . . . . 72 | |||
| Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 73 | Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 74 | |||
| Appendix B. Authors . . . . . . . . . . . . . . . . . . . . . . . 74 | Appendix B. Authors . . . . . . . . . . . . . . . . . . . . . . . 75 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 74 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 75 | |||
| 1. Introduction | 1. Introduction | |||
| 1.1. Background and Problem Statement | 1.1. Background and Problem Statement | |||
| Today, network information available to applications is mostly from | Today, network information available to applications is mostly from | |||
| the view of endhosts. There is no clear mechanism to convey | the view of endhosts. There is no clear mechanism to convey | |||
| information about the network's preferences to applications. By | information about the network (e.g., preferences) to applications. | |||
| leveraging better network-provided information, applications have the | On the other hand, modern network applications can be adaptive, with | |||
| potential to become more network-efficient (e.g., reduce network | the potential to become more network-efficient (e.g., reduce network | |||
| resource consumption) and achieve better application performance | resource consumption) and achieve better application performance | |||
| (e.g., accelerated download rate). The ALTO Service intends to | (e.g., accelerated download rate), by leveraging better network- | |||
| provide a simple way to convey network information to applications. | provided information. | |||
| The ALTO Service intends to provide a simple mechanism to convey | ||||
| network information to applications. Its objective is to provide | ||||
| basic, abstract but useful network information to applications. The | ||||
| mechanism should include abstractions to achieve concise, flexible | ||||
| network information expression. | ||||
| The goal of this document is to specify a simple and unified protocol | The goal of this document is to specify a simple and unified protocol | |||
| that meets the ALTO requirements [I-D.ietf-alto-reqs] while providing | that meets the ALTO requirements [I-D.ietf-alto-reqs] while providing | |||
| a migration path for Internet Service Providers (ISP), Content | a migration path for Internet Service Providers (ISP), Content | |||
| Providers, and clients that have deployed protocols with similar | Providers, and clients that have deployed protocols with similar | |||
| intentions (see below). This document is a work in progress and will | intentions (see below). This document is a work in progress and will | |||
| be updated with further developments. | be updated with further developments. | |||
| 1.2. Design History and Merged Proposals | 1.2. Design History and Merged Proposals | |||
| skipping to change at page 9, line 7 ¶ | skipping to change at page 9, line 11 ¶ | |||
| Client uses ALTO Service Discovery to identify an appropriate ALTO | Client uses ALTO Service Discovery to identify an appropriate ALTO | |||
| Server; and the ALTO Client requests available ALTO Information from | Server; and the ALTO Client requests available ALTO Information from | |||
| the ALTO Server using the ALTO Protocol. | the ALTO Server using the ALTO Protocol. | |||
| The ALTO Information provided by the ALTO Server can be updated | The ALTO Information provided by the ALTO Server can be updated | |||
| dynamically based on network conditions, or can be seen as a policy | dynamically based on network conditions, or can be seen as a policy | |||
| which is updated at a larger time-scale. | which is updated at a larger time-scale. | |||
| More specifically, the ALTO Information provided by an ALTO Server | More specifically, the ALTO Information provided by an ALTO Server | |||
| may be influenced (at the operator's discretion) by other systems. | may be influenced (at the operator's discretion) by other systems. | |||
| Examples include (but are not limited to) static network | The ALTO Server aggregates information from multiple systems to | |||
| configuration databases, dynamic network information, routing | provide an abstract, unified, useful network view to applications. | |||
| Examples of other systems include (but are not limited to) static | ||||
| network configuration databases, dynamic network information, routing | ||||
| protocols, provisioning policies, and interfaces to outside parties. | protocols, provisioning policies, and interfaces to outside parties. | |||
| These components are shown in the figure for completeness but outside | These components are shown in the figure for completeness but outside | |||
| the scope of this specification. | the scope of this specification. | |||
| Note that it may also be possible for ALTO Servers to exchange | Note that it may also be possible for ALTO Servers to exchange | |||
| network information with other ALTO Servers (either within the same | network information with other ALTO Servers (either within the same | |||
| administrative domain or another administrative domain with the | administrative domain or another administrative domain with the | |||
| consent of both parties) in order to adjust exported ALTO | consent of both parties) in order to adjust exported ALTO | |||
| Information. Such a protocol is also outside the scope of this | Information. Such a protocol is also outside the scope of this | |||
| specification. | specification. | |||
| skipping to change at page 15, line 43 ¶ | skipping to change at page 16, line 17 ¶ | |||
| 5.1.2. Cost Mode | 5.1.2. Cost Mode | |||
| The Mode attribute indicates how costs should be interpreted. | The Mode attribute indicates how costs should be interpreted. | |||
| Specifically, the Mode attribute indicates whether returned costs | Specifically, the Mode attribute indicates whether returned costs | |||
| should be interpreted as numerical values or ordinal rankings. | should be interpreted as numerical values or ordinal rankings. | |||
| It is important to communicate such information to ALTO Clients, as | It is important to communicate such information to ALTO Clients, as | |||
| certain operations may not be valid on certain costs returned by an | certain operations may not be valid on certain costs returned by an | |||
| ALTO Server. For example, it is possible for an ALTO Server to | ALTO Server. For example, it is possible for an ALTO Server to | |||
| return a set of IP addresses with costs indicating a ranking of the | return a set of IP addresses with costs indicating a ranking of the | |||
| IP addresses. Arithmetic operations, such as summation, that would | IP addresses. Arithmetic operations that would make sense for | |||
| make sense for numerical values, do not make sense for ordinal | numerical values, do not make sense for ordinal rankings. ALTO | |||
| rankings. ALTO Clients may handle such costs differently. | Clients may handle such costs differently. | |||
| Cost Modes are indicated in protocol messages as strings. | Cost Modes are indicated in protocol messages as strings. | |||
| An ALTO Server MUST support at least one of 'numerical' and 'ordinal' | An ALTO Server MUST support at least one of 'numerical' and 'ordinal' | |||
| costs. ALTO Clients SHOULD be cognizant of operations when a desired | costs. ALTO Clients SHOULD be cognizant of operations when a desired | |||
| cost mode is not supported. For example, an ALTO Client desiring | cost mode is not supported. For example, an ALTO Client desiring | |||
| numerical costs may adjust behavior if only the ordinal Cost Mode is | numerical costs may adjust behavior if only the ordinal Cost Mode is | |||
| available. Alternatively, an ALTO Client desiring ordinal costs may | available. Alternatively, an ALTO Client desiring ordinal costs may | |||
| construct ordinal costs given numerical values if only the numerical | construct ordinal costs given numerical values if only the numerical | |||
| Cost Mode is available. | Cost Mode is available. | |||
| 5.1.2.1. Cost Mode: numerical | 5.1.2.1. Cost Mode: numerical | |||
| 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. | normalization) 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. The values are | with lower values indicating a higher preference. The values are | |||
| non-negative integers. Ordinal cost values from a particular Source | non-negative integers. Ordinal cost values from a particular Source | |||
| Network Location to a set of Destination Network Locations need not | Network Location to a set of Destination Network Locations need not | |||
| be unique nor contiguous. In particular, from the perspective of a | be unique nor contiguous. In particular, from the perspective of a | |||
| skipping to change at page 16, line 47 ¶ | skipping to change at page 17, line 23 ¶ | |||
| Locations. (Recall that a Network Location can be an endpoint | Locations. (Recall that a Network Location can be an endpoint | |||
| address or a PID.) | address or a PID.) | |||
| Specifically, assume that a query has a list of multiple Source | Specifically, assume that a query has a list of multiple Source | |||
| Network Locations, say [Src_1, Src_2, ..., Src_m], and a list of | Network Locations, say [Src_1, Src_2, ..., Src_m], and a list of | |||
| multiple Destination Network Locations, say [Dst_1, Dst_2, ..., | multiple Destination Network Locations, say [Dst_1, Dst_2, ..., | |||
| Dst_n]. | Dst_n]. | |||
| The ALTO Server will return the Path Cost for each communicating pair | The ALTO Server will return the Path Cost for each communicating pair | |||
| (i.e., Src_1 -> Dst_1, ..., Src_1 -> Dst_n, ..., Src_m -> Dst_1, ..., | (i.e., Src_1 -> Dst_1, ..., Src_1 -> Dst_n, ..., Src_m -> Dst_1, ..., | |||
| Src_m -> Dst_n). We refer to this structure as a Cost Map. | Src_m -> Dst_n). If the ALTO Server does not define a Path Cost for | |||
| a particular pair, it may be omitted. We refer to this structure as | ||||
| a Cost Map. | ||||
| If the Cost Mode is 'ordinal', the Path Cost of each communicating | If the Cost Mode is 'ordinal', the Path Cost of each communicating | |||
| pair is relative to the m*n entries. | pair is relative to the m*n entries. | |||
| 5.3. Network Map and Cost Map Dependency | 5.3. Network Map and Cost Map Dependency | |||
| If a Cost Map contains PIDs in the list of Source Network Locations | If a Cost Map contains PIDs in the list of Source Network Locations | |||
| or the list of Destination Network Locations, the Path Costs are | or the list of Destination Network Locations, the Path Costs are | |||
| generated based on a particular Network Map (which defines the PIDs). | generated based on a particular Network Map (which defines the PIDs). | |||
| Version Tags are introduced to ensure that ALTO Clients are able to | Version Tags are introduced to ensure that ALTO Clients are able to | |||
| skipping to change at page 25, line 17 ¶ | skipping to change at page 26, line 8 ¶ | |||
| 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 | |||
| A PID Name is encoded as a US-ASCII string. The string MUST be no | A PID Name is encoded as a US-ASCII string. The string MUST be no | |||
| more than 64 characters, and MUST NOT contain characters other than | more than 64 characters, and MUST NOT contain any ASCII character | |||
| alphanumeric characters or the '.' separator. The '.' separator is | below 0x21 or above 0x7E 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. Version Tag | |||
| A Version Tag is encoded as a US-ASCII string. The string MUST be no | ||||
| more than 64 characters, and MUST NOT contain any ASCII character | ||||
| below 0x21 or above 0x7E. | ||||
| The type 'VersionTag' is used in this document to indicate a string | ||||
| of this type. | ||||
| 7.5.3. Endpoints | ||||
| This section defines formats used to encode addresses for Endpoints. | This section defines formats used to encode addresses for Endpoints. | |||
| In a case that multiple textual representations encode the same | In a case that multiple textual representations encode the same | |||
| Endpoint address or prefix (within the guidelines outlined in this | Endpoint address or prefix (within the guidelines outlined in this | |||
| document), the ALTO Protocol does not require ALTO Clients or ALTO | document), the ALTO Protocol does not require ALTO Clients or ALTO | |||
| Servers to use a particular textual representation, nor does it | Servers to use a particular textual representation, nor does it | |||
| require that ALTO Servers reply to requests using the same textual | require that ALTO Servers reply to requests using the same textual | |||
| representation used by requesting ALTO Clients. ALTO Clients must be | representation used by requesting ALTO Clients. ALTO Clients must be | |||
| cognizant of this. | cognizant of this. | |||
| 7.5.2.1. Address Type | 7.5.3.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. | |||
| 7.5.2.2. Endpoint Address | 7.5.3.2. Endpoint Address | |||
| Endpoint Addresses are encoded as US-ASCII strings. The exact | Endpoint Addresses are encoded as US-ASCII strings. The exact | |||
| characters and format depend on the type of endpoint address. | characters and format depend on the type of endpoint address. | |||
| The type 'EndpointAddr' is used in this document to indicate a string | The type 'EndpointAddr' is used in this document to indicate a string | |||
| of this format. | of this format. | |||
| 7.5.2.2.1. IPv4 | 7.5.3.2.1. IPv4 | |||
| IPv4 Endpoint Addresses are encoded as specified by the 'IPv4address' | IPv4 Endpoint Addresses are encoded as specified by the 'IPv4address' | |||
| rule in Section 3.2.2 of [RFC3986]. | rule in Section 3.2.2 of [RFC3986]. | |||
| 7.5.2.2.2. IPv6 | 7.5.3.2.2. IPv6 | |||
| IPv6 Endpoint Addresses are encoded as specified in Section 4 of | IPv6 Endpoint Addresses are encoded as specified in Section 4 of | |||
| [RFC5952]. | [RFC5952]. | |||
| 7.5.2.2.3. Typed Endpoint Addresses | 7.5.3.2.3. Typed Endpoint Addresses | |||
| When an Endpoint Address is used, an ALTO implementation must be able | When an Endpoint Address is used, an ALTO implementation must be able | |||
| to determine its type. For this purpose, the ALTO Protocol allows | to determine its type. For this purpose, the ALTO Protocol allows | |||
| endpoint addresses to also explicitly indicate their type. | endpoint addresses to also explicitly indicate their type. | |||
| Typed Endpoint Addresses are encoded as US-ASCII strings of the | Typed Endpoint Addresses are encoded as US-ASCII strings of the | |||
| format 'AddressType:EndpointAddr' (with the ':' character as a | format 'AddressType:EndpointAddr' (with the ':' character as a | |||
| separator). The type 'TypedEndpointAddr' is used to indicate a | separator). The type 'TypedEndpointAddr' is used to indicate a | |||
| string of this format. | string of this format. | |||
| 7.5.2.3. Endpoint Prefixes | 7.5.3.3. Endpoint Prefixes | |||
| For efficiency, it is useful to denote a set of Endpoint Addresses | For efficiency, it is useful to denote a set of Endpoint Addresses | |||
| using a special notation (if one exists). This specification makes | using a special notation (if one exists). This specification makes | |||
| use of the prefix notations for both IPv4 and IPv6 for this purpose. | use of the prefix notations for both IPv4 and IPv6 for this purpose. | |||
| Endpoint Prefixes are encoded as US-ASCII strings. The exact | Endpoint Prefixes are encoded as US-ASCII strings. The exact | |||
| characters and format depend on the type of endpoint address. | characters and format depend on the type of endpoint address. | |||
| The type 'EndpointPrefix' is used in this document to indicate a | The type 'EndpointPrefix' is used in this document to indicate a | |||
| string of this format. | string of this format. | |||
| 7.5.2.3.1. IPv4 | 7.5.3.3.1. IPv4 | |||
| IPv4 Endpoint Prefixes are encoded as specified in Section 3.1 of | IPv4 Endpoint Prefixes are encoded as specified in Section 3.1 of | |||
| [RFC4632]. | [RFC4632]. | |||
| 7.5.2.3.2. IPv6 | 7.5.3.3.2. IPv6 | |||
| IPv6 Endpoint Prefixes are encoded as specified in Section 7 of | IPv6 Endpoint Prefixes are encoded as specified in Section 7 of | |||
| [RFC5952]. | [RFC5952]. | |||
| 7.5.2.4. Endpoint Address Group | 7.5.3.4. Endpoint Address Group | |||
| The ALTO Protocol includes messages that specify potentially large | The ALTO Protocol includes messages that specify potentially large | |||
| sets of endpoint addresses. Endpoint Address Groups provide a more | sets of endpoint addresses. Endpoint Address Groups provide a more | |||
| efficient way to encode such sets, even when the set contains | efficient way to encode such sets, even when the set contains | |||
| endpoint addresses of different types. | endpoint addresses of different types. | |||
| An Endpoint Address Group is defined as: | An Endpoint Address Group is defined as: | |||
| object { | object { | |||
| EndpointPrefix [AddressType]<0..*>; | EndpointPrefix [AddressType]<0..*>; | |||
| skipping to change at page 27, line 38 ¶ | skipping to change at page 28, line 32 ¶ | |||
| "ipv4": [ | "ipv4": [ | |||
| "192.0.2.0/24", | "192.0.2.0/24", | |||
| "198.51.100.0/25" | "198.51.100.0/25" | |||
| ], | ], | |||
| "ipv6": [ | "ipv6": [ | |||
| "2001:db8:0:1::/64", | "2001:db8:0:1::/64", | |||
| "2001:db8:0:2::/64" | "2001:db8:0:2::/64" | |||
| ] | ] | |||
| } | } | |||
| 7.5.3. Cost Mode | 7.5.4. Cost Mode | |||
| A Cost Mode is encoded as a US-ASCII string. The string MUST either | A Cost Mode is encoded as a US-ASCII string. The string MUST either | |||
| have the value 'numerical' or 'ordinal'. | have the value 'numerical' or 'ordinal'. | |||
| The type 'CostMode' is used in this document to indicate a string of | The type 'CostMode' is used in this document to indicate a string of | |||
| this format. | this format. | |||
| 7.5.4. Cost Type | 7.5.5. Cost Type | |||
| A Cost Type is encoded as a US-ASCII string. The string MUST be no | A Cost Type is encoded as a US-ASCII string. The string MUST be no | |||
| more than 32 characters, and MUST NOT contain characters other than | more than 32 characters, and MUST NOT contain characters other than | |||
| alphanumeric characters, the hyphen ('-'), or the ':' separator. | alphanumeric characters, the hyphen ('-'), or the ':' separator. | |||
| Identifiers prefixed with 'priv:' are reserved for Private Use | Identifiers prefixed with 'priv:' are reserved for Private Use | |||
| [RFC5226]. Identifiers prefixed with 'exp:' are reserved for | [RFC5226]. Identifiers prefixed with 'exp:' are reserved for | |||
| Experimental use. All other identifiers appearing in an HTTP request | Experimental use. All other identifiers appearing in an HTTP request | |||
| or response with an 'application/alto-*' media type MUST be | or response with an 'application/alto-*' media type MUST be | |||
| registered in the ALTO Cost Types registry Section 11.2. | registered in the ALTO Cost Types registry Section 11.2. | |||
| The type 'CostType' is used in this document to indicate a string of | The type 'CostType' is used in this document to indicate a string of | |||
| this format. | this format. | |||
| 7.5.5. Endpoint Property | 7.5.6. Endpoint Property | |||
| An Endpoint Property is encoded as a US-ASCII string. The string | An Endpoint Property is encoded as a US-ASCII string. The string | |||
| MUST be no more than 32 characters, and MUST NOT contain characters | MUST be no more than 32 characters, and MUST NOT contain characters | |||
| other than alphanumeric characters, the hyphen ('-'), or the ':' | other than alphanumeric characters, the hyphen ('-'), or the ':' | |||
| separator. | separator. | |||
| Identifiers prefixed with 'priv:' are reserved for Private Use | Identifiers prefixed with 'priv:' are reserved for Private Use | |||
| [RFC5226]. Identifiers prefixed with 'exp:' are reserved for | [RFC5226]. Identifiers prefixed with 'exp:' are reserved for | |||
| Experimental use. All other identifiers appearing in an HTTP request | Experimental use. All other identifiers appearing in an HTTP request | |||
| or response with an 'application/alto-*' media type MUST be | or response with an 'application/alto-*' media type MUST be | |||
| skipping to change at page 29, line 37 ¶ | skipping to change at page 30, line 31 ¶ | |||
| object { | object { | |||
| ResourceEntry resources<0..*>; | ResourceEntry resources<0..*>; | |||
| } InfoResourceDirectory; | } InfoResourceDirectory; | |||
| where the "resources" array indicates a list of Information Resources | where the "resources" array indicates a list of Information Resources | |||
| provided by an ALTO Server. Note that the list of available | provided by an ALTO Server. Note that the list of available | |||
| resources is enclosed in a JSON object for extensibility; future | resources is enclosed in a JSON object for extensibility; future | |||
| protocol versions may specify additional members in the | protocol versions may specify additional members in the | |||
| InfoResourceDirectory object. | InfoResourceDirectory object. | |||
| Each entry MUST indicate a URI that either directly provides the | Any URI endpoint indicated in an Information Resource Directory MAY | |||
| indicated Information Resource, or responds to a HTTP OPTIONS request | provide a response to an OPTIONS request that is in the format of an | |||
| which provides an Information Resource Directory with entries of | Information Resource Directory. This provides ALTO Clients a means | |||
| additional Information Resources. | to discover resources and capabilities offered by that URI endpoint. | |||
| ALTO Servers that reply with an HTTP 300 status code ("Multiple | ||||
| If an ALTO Client makes a GET or POST request to a URI that does not | Choices") SHOULD use the Information Resource Directory format in the | |||
| directly provide an indicated Information Resource, the ALTO Server | reply. | |||
| MUST either reply with an HTTP 300 status code ("Multiple Choices") | ||||
| and an Information Resource Directory in the HTTP response's entity | ||||
| 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 | ||||
| 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 | ||||
| Allowed"). This allows certain Information Resources to be | ||||
| configured as static files with minimal configuration on some HTTP | ||||
| servers. | ||||
| Each entry in the directory specifies: | Each entry in the directory specifies: | |||
| uri A URI at which the ALTO Server provides one or more Information | uri A URI at which the ALTO Server provides one or more Information | |||
| Resources, or an Information Resource Directory indicating | Resources, or an Information Resource Directory indicating | |||
| additional Information Resources. | additional Information Resources. | |||
| media-types The list of all media types of Information Resources | media-types The list of all media types of Information Resources | |||
| (see Section 7.3.3) available via GET or POST requests to the | (see Section 7.3.3) available via GET or POST requests to the | |||
| corresponding URI or URIs discoverable via the URI. | corresponding URI or URIs discoverable via the URI. | |||
| skipping to change at page 36, line 43 ¶ | skipping to change at page 37, line 11 ¶ | |||
| The returned InfoResourceEntity object "data" member of type | The returned InfoResourceEntity object "data" member of type | |||
| InfoResourceNetworkMap: | InfoResourceNetworkMap: | |||
| object { | object { | |||
| EndpointAddrGroup [pidname]<0..*>; | EndpointAddrGroup [pidname]<0..*>; | |||
| ... | ... | |||
| } NetworkMapData; | } NetworkMapData; | |||
| object { | object { | |||
| JSONString map-vtag; | VersionTag map-vtag; | |||
| NetworkMapData map; | NetworkMapData map; | |||
| } InfoResourceNetworkMap; | } InfoResourceNetworkMap; | |||
| with members: | with members: | |||
| map-vtag The Version Tag (Section 5.3) of the Network Map. | map-vtag The Version Tag (Section 5.3) of the Network Map. | |||
| map The Network Map data itself. | map The Network Map data itself. | |||
| NetworkMapData is a JSON object with each member representing a | NetworkMapData is a JSON object with each member representing a | |||
| skipping to change at page 40, line 18 ¶ | skipping to change at page 40, line 18 ¶ | |||
| }; | }; | |||
| object { | object { | |||
| DstCosts [PIDName]<0..*>; | DstCosts [PIDName]<0..*>; | |||
| ... | ... | |||
| } CostMapData; | } CostMapData; | |||
| object { | object { | |||
| CostMode cost-mode; | CostMode cost-mode; | |||
| CostType cost-type; | CostType cost-type; | |||
| JSONString map-vtag; | VersionTag map-vtag; | |||
| CostMapData map; | CostMapData map; | |||
| } InfoResourceCostMap; | } InfoResourceCostMap; | |||
| with members: | with members: | |||
| cost-mode Cost Mode (Section 5.1.2) used in the Cost Map. | cost-mode Cost Mode (Section 5.1.2) used in the Cost Map. | |||
| cost-type Cost Type (Section 5.1.1) used in the Cost Map. | cost-type Cost Type (Section 5.1.1) used in the Cost Map. | |||
| map-vtag The Version Tag (Section 5.3) of the Network Map used to | map-vtag The Version Tag (Section 5.3) of the Network Map used to | |||
| generate the Cost Map. | generate the Cost Map. | |||
| map The Cost Map data itself. | map The Cost Map data itself. | |||
| CostMapData is a JSON object with each member representing a single | CostMapData is a JSON object with each member representing a single | |||
| Source PID; the name for a member is the PIDName string identifying | Source PID; the name for a member is the PIDName string identifying | |||
| the corresponding Source PID. For each Source PID, a DstCosts object | the corresponding Source PID. For each Source PID, a DstCosts object | |||
| denotes the associated cost to a set of destination PIDs ( | denotes the associated cost to a set of destination PIDs ( | |||
| Section 5.2); the name for each member in the object is the PIDName | Section 5.2); the name for each member in the object is the PIDName | |||
| string identifying the corresponding Destination PID. DstCosts MUST | string identifying the corresponding Destination PID. | |||
| 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 the Path Cost for each (Source | |||
| PID and Destination PID known to the ALTO Server. | PID, Destination PID) pair for which a Path Cost is defined. An ALTO | |||
| Server MAY omit entries for which a Path Cost is not defined (e.g., | ||||
| both the Source and Destination PIDs contain addresses outside of the | ||||
| Network Provider's administrative domain). | ||||
| 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,application/alto-error+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", | |||
| "map" : { | "map" : { | |||
| "PID1": { "PID1": 1, "PID2": 5, "PID3": 10 }, | "PID1": { "PID1": 1, "PID2": 5, "PID3": 10 }, | |||
| "PID2": { "PID1": 5, "PID2": 1, "PID3": 15 }, | "PID2": { "PID1": 5, "PID2": 1, "PID3": 15 }, | |||
| "PID3": { "PID1": 20, "PID2": 15, "PID3": 1 } | "PID3": { "PID1": 20, "PID2": 15 } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 7.7.3. Map Filtering Service | 7.7.3. Map Filtering Service | |||
| The Map Filtering Service allows ALTO Clients to specify filtering | The Map Filtering Service allows ALTO Clients to specify filtering | |||
| criteria to return a subset of the full maps available in the Map | criteria to return a subset of the full maps available in the Map | |||
| Service. | Service. | |||
| skipping to change at page 42, line 7 ¶ | skipping to change at page 42, line 7 ¶ | |||
| 7.7.3.1.3. Input Parameters | 7.7.3.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 input parameters with a data format | This document specifies the input parameters with a data format | |||
| indicated by the media type "application/alto-networkmapfilter+json", | indicated by the media type "application/alto-networkmapfilter+json", | |||
| which is a JSON Object of type ReqFilteredNetworkMap, where: | which is a JSON Object of type ReqFilteredNetworkMap, where: | |||
| object { | object { | |||
| PIDName pids<0..*>; | PIDName pids<0..*>; | |||
| AddressType address-types<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. The ALTO Server MUST interpret entries appearing | defined PIDs. The ALTO Server MUST interpret entries appearing | |||
| multiple times as if they appeared only once. | multiple times as if they appeared only once. | |||
| address-types Specifies list of address types to be included in the | ||||
| returned Filtered Network Map. If the list of address types is | ||||
| empty, the ALTO Server MUST interpret the list as if it contained | ||||
| a list of all address types known to the ALTO Server. 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 | |||
| specified (implicitly or explicitly) in the request. If the input | specified (implicitly or explicitly) in the request. If the input | |||
| 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. Similarly, the ALTO Server MUST only | |||
| enumerate addresses within each PID that have types which were | ||||
| specified (implicitly or explicitly) in the request. If the input | ||||
| parameters contain an address type that is not currently known to the | ||||
| ALTO Server, the ALTO Server MUST behave as if the address type did | ||||
| not appear 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,application/alto-error+json | Accept: application/alto-networkmap+json,application/alto-error+json | |||
| { | { | |||
| skipping to change at page 46, line 6 ¶ | skipping to change at page 46, line 6 ¶ | |||
| 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. | |||
| If any constraints are specified, Source/Destination pairs that do | If any constraints are specified, Source/Destination pairs for which | |||
| for which the Path Costs do not meet the constraints MUST NOT be | the Path Costs do not meet the constraints MUST NOT be included in | |||
| included in the returned Cost Map. If no constraints were specified, | the returned Cost Map. If no constraints were specified, then all | |||
| then all Path Costs are assumed to meet the constraints. | Path Costs are assumed to meet the constraints. | |||
| Note that ALTO Clients should verify that the Version Tag included in | ||||
| the response is consistent with the Version Tag of the Network Map | ||||
| used to generate the request (if applicable). If it is not, the ALTO | ||||
| Client may wish to request an updated Network Map, identify changes, | ||||
| and consider requesting a new Filtered Cost Map. | ||||
| 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,application/alto-error+json | Accept: application/alto-costmap+json,application/alto-error+json | |||
| { | { | |||
| "cost-mode" : "numerical", | "cost-mode" : "numerical", | |||
| skipping to change at page 48, line 26 ¶ | skipping to change at page 48, line 33 ¶ | |||
| The returned InfoResourceEntity object has "data" member of type | The returned InfoResourceEntity object has "data" member of type | |||
| InfoResourceEndpointProperty, where: | InfoResourceEndpointProperty, where: | |||
| object { | object { | |||
| JSONString [EndpointProperty]; | JSONString [EndpointProperty]; | |||
| ... | ... | |||
| } EndpointProps; | } EndpointProps; | |||
| object { | object { | |||
| VersionTag map-vtag; [OPTIONAL] | ||||
| EndpointProps [TypedEndpointAddr]<0..*>; | EndpointProps [TypedEndpointAddr]<0..*>; | |||
| ... | ... | |||
| } InfoResourceEndpointProperty; | } InfoResourceEndpointProperty; | |||
| InfoResourceEndpointProperty has one member for each endpoint | InfoResourceEndpointProperty has one member for each endpoint | |||
| indicated in the input parameters (with the name being the endpoint | indicated in the input parameters (with the name being the endpoint | |||
| encoded as a TypedEndpointAddr). The requested properties for each | encoded as a TypedEndpointAddr). The requested properties for each | |||
| endpoint are encoded in a corresponding EndpointProps object, which | endpoint are encoded in a corresponding EndpointProps object, which | |||
| encodes one name/value pair for each requested property, where the | encodes one name/value pair for each requested property, where the | |||
| property names are encoded as strings of type EndpointProperty and | property names are encoded as strings of type EndpointProperty and | |||
| the property values encoded as JSON Strings. | the property values encoded as JSON Strings. | |||
| 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. | |||
| The ALTO Server MAY include the Version Tag (Section 5.3) of the | ||||
| Network Map used to generate the response (if desired and applicable) | ||||
| as the 'map-vtag' member in the response. If the 'pid' property is | ||||
| returned for any endpoints in the response, the 'map-vtag' member is | ||||
| REQUIRED instead of OPTIONAL. | ||||
| 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,application/alto-error+json | Accept: application/alto-endpointprop+json,application/alto-error+json | |||
| { | { | |||
| "properties" : [ "pid" ], | "properties" : [ "pid" ], | |||
| skipping to change at page 49, line 42 ¶ | skipping to change at page 50, line 8 ¶ | |||
| 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. | |||
| 7.7.5.1. Endpoint Cost | 7.7.5.1. Endpoint Cost | |||
| The Endpoint Cost resource provides information about costs between | The Endpoint Cost resource provides information about costs between | |||
| individual endpoints. It MAY be provided by an ALTO Server. If it | individual endpoints. It MAY be provided by an ALTO Server. | |||
| is provided. | ||||
| It is important to note that although this resource allows an ALTO | It is important to note that although this resource allows an ALTO | |||
| Server to reveal costs between individual endpoints, an ALTO Server | Server to reveal costs between individual endpoints, an ALTO Server | |||
| is not required to do so. A simple alternative would be to compute | is not required to do so. A simple alternative would be to compute | |||
| the cost between two endpoints as the cost between the PIDs | the cost between two endpoints as the cost between the PIDs | |||
| corresponding to the endpoints. See Section 12.1 for additional | corresponding to the endpoints. See Section 12.1 for additional | |||
| details. | details. | |||
| 7.7.5.1.1. Media Type | 7.7.5.1.1. Media Type | |||
| skipping to change at page 52, line 4 ¶ | skipping to change at page 52, line 18 ¶ | |||
| map The Endpoint Cost Map data itself. | map The Endpoint Cost Map data itself. | |||
| EndpointCostMapData is a JSON object with each member representing a | EndpointCostMapData is a JSON object with each member representing a | |||
| 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. If the ALTO Server does not | |||
| define a cost from a Source Endpoint to a particular Destination | ||||
| Endpoint, it MAY be omitted from the response. | ||||
| 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,application/alto-error+json | Accept: application/alto-endpointcost+json,application/alto-error+json | |||
| { | { | |||
| skipping to change at page 65, line 46 ¶ | skipping to change at page 66, line 46 ¶ | |||
| Expert Reviewer will generally consult the ALTO Working Group or its | Expert Reviewer will generally consult the ALTO Working Group or its | |||
| successor. Expert Review is used to ensure that proper documentation | successor. Expert Review is used to ensure that proper documentation | |||
| regarding ALTO Cost Type semantics and security considerations has | regarding ALTO Cost Type semantics and security considerations has | |||
| been provided. The provided documentation should be detailed enough | been provided. The provided documentation should be detailed enough | |||
| to provide guidance to both ALTO Service Providers and applications | to provide guidance to both ALTO Service Providers and applications | |||
| utilizing ALTO Clients as to how values of the registered ALTO Cost | utilizing ALTO Clients as to how values of the registered ALTO Cost | |||
| Type should be interpreted. Updates and deletions of ALTO Cost Types | Type should be interpreted. Updates and deletions of ALTO Cost Types | |||
| follow the same procedure. | follow the same procedure. | |||
| Registered ALTO Cost Type identifiers MUST conform to the syntatical | Registered ALTO Cost Type identifiers MUST conform to the syntatical | |||
| requirements specified in Section 7.5.4. Identifiers are to be | requirements specified in Section 7.5.5. Identifiers are to be | |||
| recorded and displayed as ASCII strings. | recorded and displayed as ASCII strings. | |||
| Identifiers prefixed with 'priv:' are reserved for Private Use. | Identifiers prefixed with 'priv:' are reserved for Private Use. | |||
| Identifiers prefixed with 'exp:' are reserved for Experimental use. | Identifiers prefixed with 'exp:' are reserved for Experimental use. | |||
| Requests to add a new value to the registry MUST include the | Requests to add a new value to the registry MUST include the | |||
| following information: | following information: | |||
| o Identifier: The name of the desired ALTO Cost Type. | o Identifier: The name of the desired ALTO Cost Type. | |||
| skipping to change at page 66, line 51 ¶ | skipping to change at page 67, line 51 ¶ | |||
| Working Group or its successor. Expert Review is used to ensure that | Working Group or its successor. Expert Review is used to ensure that | |||
| proper documentation regarding ALTO Endpoint Property semantics and | proper documentation regarding ALTO Endpoint Property semantics and | |||
| security considerations has been provided. The provided | security considerations has been provided. The provided | |||
| documentation should be detailed enough to provide guidance to both | documentation should be detailed enough to provide guidance to both | |||
| ALTO Service Providers and applications utilizing ALTO Clients as to | ALTO Service Providers and applications utilizing ALTO Clients as to | |||
| how values of the registered ALTO Endpoint Properties should be | how values of the registered ALTO Endpoint Properties should be | |||
| interpreted. Updates and deletions of ALTO Endpoint Properties | interpreted. Updates and deletions of ALTO Endpoint Properties | |||
| follow the same procedure. | follow the same procedure. | |||
| Registered ALTO Endpoint Property identifiers MUST conform to the | Registered ALTO Endpoint Property identifiers MUST conform to the | |||
| syntatical requirements specified in Section 7.5.5. Identifiers are | syntatical requirements specified in Section 7.5.6. Identifiers are | |||
| to be recorded and displayed as ASCII strings. | to be recorded and displayed as ASCII strings. | |||
| Identifiers prefixed with 'priv:' are reserved for Private Use. | Identifiers prefixed with 'priv:' are reserved for Private Use. | |||
| Identifiers prefixed with 'exp:' are reserved for Experimental use. | Identifiers prefixed with 'exp:' are reserved for Experimental use. | |||
| Requests to add a new value to the registry MUST include the | Requests to add a new value to the registry MUST include the | |||
| following information: | following information: | |||
| o Identifier: The name of the desired ALTO Endpoint Property. | o Identifier: The name of the desired ALTO Endpoint Property. | |||
| skipping to change at page 72, line 10 ¶ | skipping to change at page 73, line 10 ¶ | |||
| [I-D.ietf-alto-reqs] | [I-D.ietf-alto-reqs] | |||
| Previdi, S., Stiemerling, M., Woundy, R., and Y. Yang, | Previdi, S., Stiemerling, M., Woundy, R., and Y. Yang, | |||
| "Application-Layer Traffic Optimization (ALTO) | "Application-Layer Traffic Optimization (ALTO) | |||
| Requirements", draft-ietf-alto-reqs-08 (work in progress), | Requirements", draft-ietf-alto-reqs-08 (work in progress), | |||
| March 2011. | March 2011. | |||
| [I-D.ietf-alto-server-discovery] | [I-D.ietf-alto-server-discovery] | |||
| Kiesel, S., Stiemerling, M., Schwan, N., Scharf, M., and | Kiesel, S., Stiemerling, M., Schwan, N., Scharf, M., and | |||
| S. Yongchao, "ALTO Server Discovery", | S. Yongchao, "ALTO Server Discovery", | |||
| draft-ietf-alto-server-discovery-00 (work in progress), | draft-ietf-alto-server-discovery-02 (work in progress), | |||
| May 2011. | September 2011. | |||
| [I-D.jennings-sip-hashcash] | [I-D.jennings-sip-hashcash] | |||
| Jennings, C., "Computational Puzzles for SPAM Reduction in | Jennings, C., "Computational Puzzles for SPAM Reduction in | |||
| SIP", draft-jennings-sip-hashcash-06 (work in progress), | SIP", draft-jennings-sip-hashcash-06 (work in progress), | |||
| July 2007. | July 2007. | |||
| [I-D.mrw-nat66] | [I-D.mrw-nat66] | |||
| Wasserman, M. and F. Baker, "IPv6-to-IPv6 Network Prefix | Wasserman, M. and F. Baker, "IPv6-to-IPv6 Network Prefix | |||
| Translation", draft-mrw-nat66-16 (work in progress), | Translation", draft-mrw-nat66-16 (work in progress), | |||
| April 2011. | April 2011. | |||
| End of changes. 59 change blocks. | ||||
| 149 lines changed or deleted | 191 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/ | ||||