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, <https://www.rfc-editor.org/info/
              rfc2119>.

   [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, <https://www.rfc-
              editor.org/info/rfc7230>.

   [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,
              <https://www.rfc-editor.org/info/rfc7285>.

   [RFC7540]  Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext
              Transfer Protocol Version 2 (HTTP/2)", RFC 7540, DOI
              10.17487/RFC7540, May 2015, <https://www.rfc-
              editor.org/info/rfc7540>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [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, <https://www.rfc-editor.org/info/rfc8895>.

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, <https://www.rfc-editor.org/info/
              rfc7971>.





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]