ALTO Working Group R. Schott Internet-Draft Deutsche Telekom Intended status: Standards Track Y. Yang Expires: September 6, 2022 Yale University K. Gao Sichuan University J. Zhang Tongji University March 5, 2022 ALTO New Transport using HTTP/2 draft-schott-alto-new-transport-00 Abstract The ALTO base protocol [RFC7285] uses HTTP/1.x as the transport protocol and hence ALTO transport includes the limitations of HTTP/1.x. ALTO/SSE [RFC8895] addresses some of the limitations, but is still based on HTTP/1.x. This document introduces ALTO new transport, which provides the transport functions of ALTO/SSE on top of HTTP/2, for more efficient ALTO transport. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119][RFC8174] when, and only when, they appear in all capitals, as shown here. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on September 6, 2022. Schott, et al. Expires September 6, 2022 [Page 1] Internet-Draft ALTO New Transport March 2022 Copyright Notice Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 2. ALTO New Transport Design Requirements . . . . . . . . . . . 3 3. ALTO New Transport Information Structure . . . . . . . . . . 4 3.1. Transport Queue . . . . . . . . . . . . . . . . . . . . . 5 3.2. Incremental Update Message Queue . . . . . . . . . . . . 5 3.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 5 4. ALTO/H2 Information Resource Directory (IRD) . . . . . . . . 10 5. Security Considerations . . . . . . . . . . . . . . . . . . . 13 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 14 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 8.1. Normative References . . . . . . . . . . . . . . . . . . 14 8.2. Informative References . . . . . . . . . . . . . . . . . 14 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 1. Introduction Application-Layer Traffic Optimization (ALTO) provides a means for network applications to obtain network status information. The ALTO base protocol [RFC7285] is based on the sequential request and response model of HTTP/1.1 [RFC7230]; hence, in the base protocol, an ALTO client can issue only a sequence of requests on network information resources, and the ALTO server sends the information resources one-by-one, in the order of the request sequence. To address the use cases where an ALTO client may need to efficiently monitor changes to a set of network information resources and the protocol is still based on the HTTP/1.1 model, the ALTO Working Group introduces ALTO/SSE (ALTO Incremental Update based on Server-Sent- Event) [RFC8895], so that an ALTO client can manage (i.e., add and remove) a set of requests maintained at an ALTO server, and the Schott, et al. Expires September 6, 2022 [Page 2] Internet-Draft ALTO New Transport March 2022 server can continuously, concurrently, and incrementally push updates whenever a monitored network information resource changes. Figure 1 shows the architecture and message flow of ALTO/SSE, which can be considered as a more general transport protocol than the ALTO base transport protocol. Although ALTO/SSE allows the concurrent transport of multiple ALTO information resources, it has complexities and limitations. For example, it requires that the server provide a separate control URI, leading to complexity in management. ------------------------------------------------------------------ | | | +-------+ +-------+ 1. init request +------+ | | | | | | <------------- | | | | | | | | -------------> | | | | 3.add/ | | | | 1'. control uri | | | | remove | | | | | | | | resource |Stream | |Update | | | | -------->|Control| private |Stream | 2a. data update |Client| -- |Server |<------->|Server | messages | | -------- | | | | --------------> | | <- | response | | | | --------------> | | | | | | | | 2b.control update| | | | +-------+ +-------+ messages +------+ | | | ------------------------------------------------------------------ Figure 1: ALTO SSE Architecture and Message Flow. This document specifies ALTO new transport, which realizes ALTO/SSE but takes advantage of new HTTP capabilities. 2. ALTO New Transport Design Requirements The new transport is designed to satisfy a set of requirements. First, it should satisfy the following requirements to realize the functions of ALTO/SSE: o R0: Client can request any resource using the connection, just as using ALTO base protocol using HTTP/1.x. o R1: The client can request the addition (start) of incremental updates to a resource. o R2: The client can request the deletion (stop) of incremental updates to a resource. Schott, et al. Expires September 6, 2022 [Page 3] Internet-Draft ALTO New Transport March 2022 o R3: The server can signal to the client the start or stop of incremental updates to a resource. o R4: The server can choose the type of each incremental update endcoding, as long as the type is indicated to be acceptable by the client. Following the ALTO framework, the new transport protocol should still be HTTP based: o R5: The design follows basic principle of HTTP---Representational State Transfer and hence can use only HTTP verbs (GET, POST, PUT, DELETE, HEAD). o R6: The design takes advantage of HTTP/2 design features such as parallel transfer and respects HTTP/2 semantics such as the semantics of PUSH_PROMISE. To allow flexible deployment, the new transport protocol should be flexible: o R7: The design should support capability negotiation. 3. ALTO New Transport Information Structure A key design of ALTO new transport is to distinguish between information about ALTO resources and information about ALTO transport. It introduces the following transport information structures to distribute ALTO information resources: o The transport state from the ALTO server to an ALTO client (or a set of clients) for an ALTO information resource is conceptually through a transport queue. A static ALTO information resource (e.g., Cost Map, Network Map) has a single transport queue, and a dynamic ALTO information resource (e.g., Filtered Cost Map) may create a queue for each unique filter request. o Each transport queue maintains two states: (1) the incremental update message queue TQ-BASE-URI/m, and (2) the recipients set TQ- BASE-URI/r, where TQ-BASE-URI is the base URI pointing to the transport queue, TQ-BASE-URI/m/meta is the list of update messages in the update message queue, and TQ-BASE-URI/m/msg-seq-no is a specific update. A transport queue can be created by a POST URI; a client can delete a transport queue by sending DELETE the TQ- BASE-URI. A client with an interest to receive incremental updates should be in TQ-BASE-URI/r. Schott, et al. Expires September 6, 2022 [Page 4] Internet-Draft ALTO New Transport March 2022 o The transport queue state is exposed to clients through views; that is, a client can see only a virtual view of the server state. 3.1. Transport Queue An ALTO client creates a transport queue using ALTO SSE AddUpdateReq ([RFC 8895] Sec. 6.5). Unless the request has incremental-changes to be false, the client is added to TQ-BASE-URI/r. object { ResourceID resource-id; [JSONString tag;] [Boolean incremental-changes;] [Object input;] } AddUpdateReq; Any disconnection between the client and the server will remove the client from the receiver queue; that is, the receiver state is ephemeral. A client can also remove itself by deleting itself from the receiver set. 3.2. Incremental Update Message Queue When a client joins a transport queue and specifies incremental push updates, the first message pushed from the server to the client is the last independent message in the incremental message queue, unless the client specifies a matching message tag. 3.3. Examples The first example is client receiving cost map and its updates. Schott, et al. Expires September 6, 2022 [Page 5] Internet-Draft ALTO New Transport March 2022 POST /tqs HTTP/2 Host: alto.example.com Accept: application/alto-transport+json Content-Type: application/alto-updatestreamparams+json Content-Length: TBD { "resource-id": "my-routingcost-map" } HTTP/2 200 OK Content-Type: application/alto-transport+json {"mq": "/updates/streams/2718281828459"} Note that the example above uses HTTP/1.x notation, and it is straightforward to change to use HTTP/2 notation. We use the short notation for now and will update to the HTTP/2 notation in later revisions. Schott, et al. Expires September 6, 2022 [Page 6] Internet-Draft ALTO New Transport March 2022 Client -> server request HEADERS - END_STREAM - END_HEADERS :method = POST :scheme = https :path = /tqs CONTINUATION + END_HEADERS host = alto.example.com accept = application/alto-transport+json content-type = application/alto-updatestreamparams+json content-length = TBD DATA + END_STREAM { "resource-id": "my-routingcost-map" } Server -> client response: HEADERS - END_STREAM + END_HEADERS :status = 200 content-type = application/alto-transport+json content-length = TBD DATA + END_STREAM {"mq": "/updates/streams/2718281828459"} The client can check the status of the transport queue from the same connection: Schott, et al. Expires September 6, 2022 [Page 7] Internet-Draft ALTO New Transport March 2022 GET /updates/streams/2718281828459/m/meta HTTP/2 Accept: application/alto-transport+json HTTP/2 200 OK Content-Type: application/alto-transport+json { [ {"seq": 101, "media-type": "application/alto-costmap+json", "tag": "a10ce8b059740b0b2e3f8eb1d4785acd42231bfe" }, {"seq": 102, "media-type": "application/merge-patch+json", "tag": "cdf0222x59740b0b2e3f8eb1d4785acd42231bfe" }, {"seq": 103, "media-type": "application/merge-patch+json", "tag": "8eb1d4785acd42231bfecdf0222x59740b0b2e3f", "equi-link": "/updates/streams/2718281828459/m/aliase1"} ] } The client can directly request an element in the queue, for example, Schott, et al. Expires September 6, 2022 [Page 8] Internet-Draft ALTO New Transport March 2022 GET /updates/streams/2718281828459/m/101 HTTP/2 Accept: application/application/alto-costmap+json HTTP/2 200 OK Content-Type: application/alto-costmap+json { "meta" : { "dependent-vtags" : [{ "resource-id": "my-network-map", "tag": "da65eca2eb7a10ce8b059740b0b2e3f8eb1d4785" }], "cost-type" : { "cost-mode" : "numerical", "cost-metric": "routingcost" }, "vtag": { "resource-id" : "my-routingcost-map", "tag" : "3ee2cb7e8d63d9fab71b9b34cbf764436315542e" } }, "cost-map" : { "PID1": { "PID1": 1, "PID2": 5, "PID3": 10 }, "PID2": { "PID1": 5, "PID2": 1, "PID3": 15 }, "PID3": { "PID1": 20, "PID2": 15 } } } Note from the transport queue state that the 103 message has an OPTIONAL link to a complete snapshot, which a client can request. Instead of directly requesting, the client can wait for the server for incremental push, where the server first sends PUSH_PROMISE with the GET URI as above. A client can leave incremental updates by sending the request: DELETE /updates/streams/2718281828459/r/self HTTP/2 Accept: application/alto-transport+json HTTP/2 200 OK A second client can can request the creation for the same resource and the server can return the same transport queue. Schott, et al. Expires September 6, 2022 [Page 9] Internet-Draft ALTO New Transport March 2022 A client can delete the transport queue from its view, and as long as there are other clients, the server will still maintain the transport queue. DELETE /updates/streams/2718281828459 HTTP/2 Accept: application/alto-transport+json HTTP/2 200 OK The transport queue is not limited to only GET resources. The client can also request a filtered ALTO resource, which is shown in the example below: POST /tqs HTTP/2 Host: alto.example.com Accept: application/alto-transport+json Content-Type: application/alto-updatestreamparams+json Content-Length: 382 { "resource-id": "my-pv", "input": { "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" }, "endpoints": { "srcs": [ "ipv4:192.0.2.2" ], "dsts": [ "ipv4:192.0.2.89", "ipv4:203.0.113.45" ] }, "ane-properties": [ "maxresbw", "persistent-entities" ] } } HTTP/2 200 OK Content-Type: application/alto-transport+json {"mq": "/updates/streams/2718281828459"} 4. ALTO/H2 Information Resource Directory (IRD) Extending the IRD example in Section 8.1 of [RFC8895], Figure 2 is the IRD of an ALTO server supporting ALTO base protocol, ALTO/SSE, and ALTO/H2. In particular, Schott, et al. Expires September 6, 2022 [Page 10] Internet-Draft ALTO New Transport March 2022 "my-network-map": { "uri": "https://alto.example.com/networkmap", "media-type": "application/alto-networkmap+json", }, "my-routingcost-map": { "uri": "https://alto.example.com/costmap/routingcost", "media-type": "application/alto-costmap+json", "uses": ["my-networkmap"], "capabilities": { "cost-type-names": ["num-routingcost"] } }, "my-hopcount-map": { "uri": "https://alto.example.com/costmap/hopcount", "media-type": "application/alto-costmap+json", "uses": ["my-networkmap"], "capabilities": { "cost-type-names": ["num-hopcount"] } }, "my-filtered-cost-map": { "uri": "https://alto.example.com/costmap/filtered/constraints", "media-type": "application/alto-costmap+json", "accepts": "application/alto-costmapfilter+json", "uses": ["my-networkmap"], "capabilities": { "cost-type-names": ["num-routingcost", "num-hopcount"], "cost-constraints": true } }, "my-simple-filtered-cost-map": { "uri": "https://alto.example.com/costmap/filtered/simple", "media-type": "application/alto-costmap+json", "accepts": "application/alto-costmapfilter+json", "uses": ["my-networkmap"], "capabilities": { "cost-type-names": ["num-routingcost", "num-hopcount"], "cost-constraints": false } }, "my-props": { "uri": "https://alto.example.com/properties", "media-type": "application/alto-endpointprops+json", "accepts": "application/alto-endpointpropparams+json", "capabilities": { "prop-types": ["priv:ietf-bandwidth"] } }, Schott, et al. Expires September 6, 2022 [Page 11] Internet-Draft ALTO New Transport March 2022 "my-pv": { "uri": "https://alto.example.com/endpointcost/pv", "media-type": "multipart/related; type=application/alto-endpointcost+json", "accepts": "application/alto-endpointcostparams+json", "capabilities": { "cost-type-names": [ "path-vector" ], "ane-properties": [ "maxresbw", "persistent-entities" ] } }, "update-my-costs": { "uri": "https://alto.example.com/updates/costs", "media-type": "text/event-stream", "accepts": "application/alto-updatestreamparams+json", "uses": [ "my-network-map", "my-routingcost-map", "my-hopcount-map", "my-simple-filtered-cost-map" ], "capabilities": { "incremental-change-media-types": { "my-network-map": "application/json-patch+json", "my-routingcost-map": "application/merge-patch+json", "my-hopcount-map": "application/merge-patch+json" }, "support-stream-control": true } }, "update-my-costs-h2": { "uri": "https://alto.example.com/updates-h2/costs", "media-type": "application/alto-h2", "accepts": "application/alto-updatestreamparams+json", "uses": [ "my-network-map", "my-routingcost-map", "my-hopcount-map", "my-simple-filtered-cost-map" ], "capabilities": { "incremental-change-media-types": { "my-network-map": "application/json-patch+json", "my-routingcost-map": "application/merge-patch+json", "my-hopcount-map": "application/merge-patch+json" }, "support-stream-control": true } }, Schott, et al. Expires September 6, 2022 [Page 12] Internet-Draft ALTO New Transport March 2022 "update-my-props": { "uri": "https://alto.example.com/updates/properties", "media-type": "text/event-stream", "uses": [ "my-props" ], "accepts": "application/alto-updatestreamparams+json", "capabilities": { "incremental-change-media-types": { "my-props": "application/merge-patch+json" }, "support-stream-control": true } }, "update-my-pv": { "uri": "https://alto.example.com/updates/pv", "media-type": "text/event-stream", "uses": [ "my-pv" ], "accepts": "application/alto-updatestreamparams+json", "capabilities": { "incremental-change-media-types": { "my-pv": "application/merge-patch+json" }, "support-stream-control": true } } Note that it is straightforward for an ALTO sever to run HTTP/2 and support concurrent retrieval of multiple resources such as "my- network-map" and "my-routingcost-map" using multiple HTTP/2 streams with the need to introducing ALTO/H2. The resource "update-my-costs-h2" provides an ALTO/H2 based connection, and this is indicated by the media-type "application/ alto-h2". For an ALTO/H2 connection, the client can send in a sequence of control requests using media type application/alto- updatestreamparams+json. The server creates HTTP/2 streams and pushes updates to the client. 5. Security Considerations The properties defined in this document present no security considerations beyond those in Section 15 of the base ALTO specification [RFC7285]. 6. IANA Considerations IANA will need to register the alto-h2 media type under ALTO registry as defined in [RFC7285]. Schott, et al. Expires September 6, 2022 [Page 13] Internet-Draft ALTO New Transport March 2022 7. Acknowledgments The authors of this document would also like to thank many for the reviews and comments. 8. References 8.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ RFC2119, March 1997, . [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing", RFC 7230, DOI 10.17487/RFC7230, June 2014, . [RFC7285] Alimi, R., Ed., Penno, R., Ed., Yang, Y., Ed., Kiesel, S., Previdi, S., Roome, W., Shalunov, S., and R. Woundy, "Application-Layer Traffic Optimization (ALTO) Protocol", RFC 7285, DOI 10.17487/RFC7285, September 2014, . [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext Transfer Protocol Version 2 (HTTP/2)", RFC 7540, DOI 10.17487/RFC7540, May 2015, . [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, . [RFC8895] Roome, W. and Y. Yang, "Application-Layer Traffic Optimization (ALTO) Incremental Updates Using Server-Sent Events (SSE)", RFC 8895, DOI 10.17487/RFC8895, November 2020, . 8.2. Informative References [RFC7971] Stiemerling, M., Kiesel, S., Scharf, M., Seidel, H., and S. Previdi, "Application-Layer Traffic Optimization (ALTO) Deployment Considerations", RFC 7971, DOI 10.17487/ RFC7971, October 2016, . Schott, et al. Expires September 6, 2022 [Page 14] Internet-Draft ALTO New Transport March 2022 Authors' Addresses Roland Schott Deutsche Telekom Heinrich-Hertz-Strasse 3-7 64295 Darmstadt Germany Email: Roland.Schott@telekom.de Y. Richard Yang Yale University 51 Prospect St New Haven, CT 06520 USA Email: yry@cs.yale.edu Kai Gao Sichuan University Chengdu 201804 China Email: kgao@scu.edu.cn Jingxuan Jensen Zhang Tongji University 4800 Cao'An Hwy Shanghai 201804 China Email: jingxuan.n.zhang@gmail.com Schott, et al. Expires September 6, 2022 [Page 15]