summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9569.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc9569.txt')
-rw-r--r--doc/rfc/rfc9569.txt1958
1 files changed, 1958 insertions, 0 deletions
diff --git a/doc/rfc/rfc9569.txt b/doc/rfc/rfc9569.txt
new file mode 100644
index 0000000..bfb823c
--- /dev/null
+++ b/doc/rfc/rfc9569.txt
@@ -0,0 +1,1958 @@
+
+
+
+
+Internet Engineering Task Force (IETF) K. Gao
+Request for Comments: 9569 Sichuan University
+Category: Standards Track R. Schott
+ISSN: 2070-1721 Deutsche Telekom
+ Y. R. Yang
+ L. Delwiche
+ L. Keller
+ Yale University
+ September 2024
+
+
+The Application-Layer Traffic Optimization (ALTO) Transport Information
+ Publication Service (TIPS)
+
+Abstract
+
+ "Application-Layer Traffic Optimization (ALTO) Protocol" (RFC 7285)
+ leverages HTTP/1.1 and is designed for the simple, sequential
+ request-reply use case, in which an ALTO client requests a sequence
+ of information resources and the server responds with the complete
+ content of each resource, one at a time.
+
+ RFC 8895, which describes ALTO incremental updates using Server-Sent
+ Events (SSE), defines a multiplexing protocol on top of HTTP/1.x, so
+ that an ALTO server can incrementally push resource updates to
+ clients whenever monitored network information resources change,
+ allowing the clients to monitor multiple resources at the same time.
+ However, HTTP/2 and later versions already support concurrent, non-
+ blocking transport of multiple streams in the same HTTP connection.
+
+ To take advantage of newer HTTP features, this document introduces
+ the ALTO Transport Information Publication Service (TIPS). TIPS uses
+ an incremental RESTful design to give an ALTO client the new
+ capability to explicitly and concurrently (in a non-blocking manner)
+ request (or pull) specific incremental updates using HTTP/2 or
+ HTTP/3, while still functioning for HTTP/1.1.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9569.
+
+Copyright Notice
+
+ Copyright (c) 2024 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
+ (https://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 Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 1.1. Requirements Language
+ 1.2. Notations
+ 2. TIPS Overview
+ 2.1. Transport Requirements
+ 2.2. TIPS Terminology
+ 3. TIPS Updates Graph
+ 3.1. Basic Data Model of an Updates Graph
+ 3.2. Updates Graph Modification Invariants
+ 4. TIPS Workflow and Resource Location Schema
+ 4.1. Workflow
+ 4.2. Resource Location Schema
+ 5. TIPS Information Resource Directory (IRD) Announcement
+ 5.1. Media Type
+ 5.2. Capabilities
+ 5.3. Uses
+ 5.4. An Example
+ 6. TIPS Management
+ 6.1. Open Request
+ 6.2. Open Response
+ 6.3. Open Example
+ 6.3.1. Basic Example
+ 6.3.2. Example Using Digest Authentication
+ 6.3.3. Example Using ALTO/SSE
+ 7. TIPS Data Transfers - Client Pull
+ 7.1. Request
+ 7.2. Response
+ 7.3. Example
+ 7.4. New Next Edge Recommendation
+ 7.4.1. Request
+ 7.4.2. Response
+ 7.4.3. Example
+ 8. Operation and Processing Considerations
+ 8.1. Considerations for Load Balancing
+ 8.2. Considerations for Cross-Resource Dependency Scheduling
+ 8.3. Considerations for Managing Shared TIPS Views
+ 8.4. Considerations for Offering Shortcut Incremental Updates
+ 9. Security Considerations
+ 9.1. TIPS: Denial-of-Service Attacks
+ 9.2. ALTO Client: Update Overloading or Instability
+ 10. IANA Considerations
+ 10.1. application/alto-tips+json Media Type
+ 10.2. application/alto-tipsparams+json Media Type
+ 11. References
+ 11.1. Normative References
+ 11.2. Informative References
+ Appendix A. A High-Level Deployment Model
+ Appendix B. Conformance with "Building Protocols with HTTP" (RFC
+ 9205) Best Current Practices
+ Appendix C. Push-Mode TIPS Using HTTP Server Push
+ Appendix D. Persistent HTTP Connections
+ Acknowledgments
+ Authors' Addresses
+
+1. Introduction
+
+ The Application-Layer Traffic Optimization (ALTO) protocol provides
+ means for network applications to obtain network status information.
+ So far, the ALTO information can be transported in two ways:
+
+ 1. Using the ALTO base protocol [RFC7285], which is designed for the
+ simple use case in which an ALTO client requests a network
+ information resource and the server sends the complete content of
+ the requested information (if any) resource to the client.
+
+ 2. Using ALTO incremental updates using Server-Sent Events (ALTO/
+ SSE) [RFC8895]; this method is designed for an ALTO client to
+ indicate to the server that it wants to receive updates for a set
+ of resources, and the server can then concurrently and
+ incrementally push updates to that client whenever monitored
+ resources change.
+
+ Both protocols are designed for HTTP/1.1 [RFC9112]. While they still
+ work with HTTP/2 [RFC9113] and HTTP/3 [RFC9114], ALTO and ALTO/SSE
+ cannot take full advantage of new features offered by HTTP/2 and
+ HTTP/3.
+
+ * First, consider the ALTO base protocol, which is designed to
+ transfer only complete information resources. A client can run
+ the base protocol on top of HTTP/2 or HTTP/3 to request multiple
+ information resources in concurrent streams, but each request must
+ be for a complete information resource: there is no capability for
+ the server to transmit incremental updates. Hence, there can be a
+ large overhead when the client already has an information resource
+ and then there are small changes to the resource.
+
+ * Next, consider ALTO/SSE [RFC8895]. Although ALTO/SSE can transfer
+ incremental updates, it introduces a customized multiplexing
+ protocol on top of HTTP, assuming a total-order message channel
+ from the server to the client. The multiplexing design does not
+ provide naming (i.e., a resource identifier) to individual
+ incremental updates. Such a design cannot use concurrent data
+ streams available in HTTP/2 and HTTP/3 because both cases require
+ a resource identifier. Additionally, ALTO/SSE is a push-only
+ protocol, which denies the client flexibility in choosing how and
+ when it receives updates.
+
+ To mitigate these concerns, this document introduces a new ALTO
+ service called the Transport Information Publication Service (TIPS).
+ TIPS uses an incremental RESTful design to provide an ALTO client
+ with a new capability to explicitly, concurrently issue non-blocking
+ requests for specific incremental updates using HTTP/2 or HTTP/3,
+ while still functioning for HTTP/1.1.
+
+ While both ALTO/SSE [RFC8895] and TIPS can transport incremental
+ updates of ALTO information resources to clients, they have different
+ design goals. The TIPS extension enables more scalable and robust
+ distribution of incremental updates but is missing the session
+ management and built-in server push capabilities of ALTO/SSE. From
+ the performance perspective, TIPS is optimizing throughput by
+ leveraging concurrent and out-of-order transport of data, while ALTO/
+ SSE is optimizing latency as new events can be immediately
+ transferred to the clients without waiting for another round of
+ communication when there are multiple updates. Thus, we do not see
+ TIPS as a replacement for ALTO/SSE, but as a complement to it. One
+ example of combining these two extensions is shown in Section 6.3.3.
+
+ Note that future extensions may leverage server push, a feature of
+ HTTP/2 [RFC9113] and HTTP/3 [RFC9114], as an alternative of SSE. We
+ discuss why this alternative design is not ready at the time of
+ writing in Appendix C.
+
+ Specifically, this document specifies:
+
+ * Extensions to the ALTO Protocol for dynamic subscription and
+ efficient uniform update delivery of an incrementally changing
+ network information resource.
+
+ * A new resource type that indicates the TIPS updates graph model
+ for a resource.
+
+ * URI patterns to fetch the snapshots or incremental updates.
+
+ Some operational complexities that must be taken into consideration
+ when implementing this extension are discussed in Section 8: these
+ include load balancing in Section 8.1 and fetching and processing
+ incremental updates of dependent resources in Section 8.2.
+
+ Appendix B discusses to what extent the TIPS design adheres to the
+ best current practices for building protocols with HTTP [RFC9205].
+
+1.1. 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.
+
+1.2. Notations
+
+ This document uses the same syntax and notations as introduced in
+ Section 8.2 of [RFC7285] to specify the extensions to existing ALTO
+ resources and services.
+
+2. TIPS Overview
+
+2.1. Transport Requirements
+
+ The ALTO Protocol and its extensions support two transport
+ mechanisms:
+
+ 1. A client can directly request an ALTO resource and obtain a
+ complete snapshot of that ALTO resource, as specified in the base
+ protocol [RFC7285];
+
+ 2. A client can subscribe to incremental changes of one or multiple
+ ALTO resources using the incremental update extension [RFC8895],
+ and a server pushes the updates to the client through SSE.
+
+ However, the current transport mechanisms are not optimized for
+ storing, transmitting, and processing (incremental) updates of ALTO
+ information resources. Specifically, the new transport mechanism
+ must satisfy the following requirements:
+
+ Incremental updates: Incremental updates only maintain and transfer
+ the "diff" upon changes. Thus, it is more efficient than storing
+ and transferring the full updates, especially when the change of
+ an ALTO resource is minor. The base protocol does not support
+ incremental updates and the current incremental update mechanism
+ in [RFC8895] has limitations (as discussed below).
+
+ Concurrent, non-blocking update transmission: When a client needs to
+ receive and apply multiple incremental updates, it is desired to
+ transmit the updates concurrently to fully utilize the bandwidth
+ and to reduce head-of-line blocking. Unfortunately, the ALTO
+ incremental update extension [RFC8895] does not satisfy this
+ requirement. Even though the updates can be multiplexed by the
+ server to avoid head-of-line blocking between multiple resources,
+ the updates are delivered sequentially and can suffer from head-
+ of-line blocking inside the connection (for example, when there is
+ a packet loss).
+
+ Long polling updates: Long polling updates can reduce the time to
+ send the request, making it possible to achieve sub-RTT
+ transmission of ALTO incremental updates. In [RFC8895], this
+ requirement is fulfilled using SSE and is still desired in the new
+ ALTO transport.
+
+ Backward compatibility: While some of the previous requirements are
+ offered by HTTP/2 [RFC9113] and HTTP/3 [RFC9114], it is desired
+ that the new ALTO transport mechanism can work with HTTP/1.1 as
+ many development tools and current ALTO implementations are based
+ on HTTP/1.1.
+
+ The new ALTO transport specified in this document satisfies all of
+ the following design requirements above by:
+
+ * Reusing the data format introduced in [RFC8895] that enables
+ incremental updates using JSON patches or merge patches.
+
+ * Introducing a unified data model to describe the changes
+ (snapshots and incremental updates) of an ALTO resource, referred
+ to as a "TIPS view". In the data model, snapshots and incremental
+ updates are indexed as individual HTTP resources following a
+ unified naming convention, independent of the HTTP version. Thus,
+ these updates can be concurrently requested and be transferred in
+ a non-blocking manner either by using multiple connections or
+ leveraging multiplexed data transfer offered by HTTP/2 or HTTP/3.
+
+ * Basing the unified naming convention on a monotonically increasing
+ sequence number, making it possible for a client to construct the
+ URL of a future update and send a long polling request.
+
+ * Making the unified naming convention independent of the HTTP
+ versions and able to operate atop HTTP/1.1, HTTP/2, or HTTP/3.
+
+ This document assumes the deployment model discussed in Appendix A.
+
+2.2. TIPS Terminology
+
+ In addition to the terms defined in [RFC7285], this document uses the
+ following terms:
+
+ Transport Information Publication Service (TIPS): A new type of ALTO
+ service, as specified in this document, to enable a uniform
+ transport mechanism for updates of an incrementally changing ALTO
+ network information resource.
+
+ Network information resource: A piece of retrievable information
+ about network state, per [RFC7285].
+
+ TIPS view (tv): The container of incremental transport information
+ about the network information resource. The TIPS view has one
+ basic component, the updates graph (ug), but may include other
+ transport information.
+
+ Updates graph (ug): A directed, acyclic graph whose nodes represent
+ the set of versions of an information resource and whose edges
+ represent the set of update items to compute these versions. An
+ ALTO map service (e.g., a cost map or a network map) may need only
+ a single updates graph. A dynamic network information service
+ (e.g., a filtered cost map) may create an updates graph (within a
+ new TIPS view) for each unique request. The encoding of an
+ updates graph is specified in Section 6.1.
+
+ Version: The representation of a historical content of an
+ information resource. For an information resource, each version
+ is associated with and uniquely identified by a monotonically and
+ consecutively increased sequence number. This document uses the
+ term "version s" to refer to the version associated with sequence
+ number "s". The version is encoded as a JSONNumber, as specified
+ in Section 6.1.
+
+ Start sequence number (<start-seq>): The smallest non-zero sequence
+ number in an updates graph.
+
+ End sequence number (<end-seq>): The largest sequence number in an
+ updates graph.
+
+ Snapshot: A full replacement of a resource that is contained within
+ an updates graph.
+
+ Incremental update: A partial replacement of a resource contained
+ within an updates graph, codified in this document as a JSON merge
+ patch or a JSON patch. An incremental update is mandatory if the
+ source version (i) and the target version (j) are consecutive
+ (i.e., i + 1 = j); otherwise, it is optional (or a shortcut).
+ Mandatory incremental updates are always in an updates graph,
+ while optional/shortcut incremental updates may or may not be
+ included in an updates graph.
+
+ Update item: The content on an edge of the updates graph, which can
+ be either a snapshot or an incremental update. An update item can
+ be considered to be a pair (op, data) where op denotes whether the
+ item is an incremental update or a snapshot and data is the
+ content of the item.
+
+ ID#i-#j: Denotation of the update item on a specific edge in the
+ updates graph to transition from version i to version j, where i
+ and j are the sequence numbers of the source node and the target
+ node of the edge, respectively.
+
+ +-------------+
+ +-----------+ +--------------+ | Dynamic | +-----------+
+ | Routing | | Provisioning | | Network | | External |
+ | Protocols | | Policy | | Information | | Interface |
+ +-----------+ +--------------+ +-------------+ +-----------+
+ | | | |
+ +-----------------------------------------------------------------+
+ | ALTO Server |
+ | +-------------------------------------------------------------+ |
+ | | Network Information | |
+ | | +-------------+ +-------------+ | |
+ | | | Information | | Information | | |
+ | | | Resource #1 | | Resource #2 | | |
+ | | +-------------+ +-------------+ | |
+ | +-----|--------------------------------------/-------\--------+ |
+ | | / \ |
+ | +-----|------------------------------------/-----------\------+ |
+ | | | Transport Information / \ | |
+ | | +--------+ +--------+ +--------+ | |
+ | | | tv1 | | tv2 | | tv3 | | |
+ | | +--------+ +--------+ +--------+ | |
+ | | | / | | |
+ | | +--------+ +--------+ +--------+ | |
+ | | | tv1/ug | | tv2/ug | | tv3/ug | | |
+ | | +--------+ +--------+ +--------+ | |
+ | +----|----\----------------|-------------------------|--------+ |
+ | | \ | | |
+ +------|------\--------------|-------------------------|----------+
+ | +------+ | |
+ | \ | |
+ +----------+ +----------+ +----------+
+ | Client 1 | | Client 2 | | Client 3 |
+ +----------+ +----------+ +----------+
+
+ tvi = TIPS view i
+ tvi/ug = incremental updates graph associated with tvi
+
+ Figure 1: Overview of ALTO TIPS
+
+ Figure 1 shows an example illustrating an overview of the ALTO TIPS
+ extension. The server provides TIPS for two information resources
+ (#1 and #2) where #1 is an ALTO map service and #2 is a filterable
+ service. There are three ALTO clients (Client 1, Client 2, and
+ Client 3) that are connected to the ALTO server.
+
+ Each client uses the TIPS view to retrieve updates. Specifically, a
+ TIPS view (tv1) is created for the map service #1 and is shared by
+ multiple clients. For the filtering service #2, two different TIPS
+ views (tv2 and tv3) are created upon different client requests with
+ different filter sets.
+
+3. TIPS Updates Graph
+
+ In order to provide incremental updates for a resource, an ALTO
+ server creates an updates graph, which is a directed acyclic graph
+ that contains a sequence of incremental updates and snapshots
+ (collectively called "update items") of a network information
+ resource.
+
+3.1. Basic Data Model of an Updates Graph
+
+ For each resource (e.g., a cost map or a network map), the
+ incremental updates and snapshots can be represented using the
+ following directed acyclic graph model, where the server tracks the
+ change of the resource maps with version IDs that are assigned
+ sequentially (i.e., incremented by one each time):
+
+ * Each node in the graph is a version of the resource, which is
+ identified by a sequence number (defined as a JSONNumber).
+ Version 0 is reserved as the initial state (empty/null).
+
+ * A tag identifies the content of a node. A tag has the same format
+ as the "tag" field in Section 10.3 of [RFC7285] and is valid only
+ within the scope of the resource.
+
+ * Each edge is an update item. In particular, the edge from i to j
+ is the update item to transit from version i to version j.
+
+ * The version is path independent, i.e., different paths arriving at
+ the node associated with the same version have the same content.
+
+ A concrete example is shown in Figure 2. There are seven nodes in
+ the graph, representing seven different versions of the resource.
+ Edges in the figure represent the updates from the source version to
+ the target version. Thick lines represent mandatory incremental
+ updates (e.g., ID103-104), dotted lines represent optional
+ incremental updates (e.g., ID103-105), and thin lines represent
+ snapshots (e.g., ID0-103). Note that node content is path
+ independent: the content of node v can be obtained by applying the
+ updates from any path that ends at v. For example, assume the latest
+ version is 105 and a client already has version 103. The base
+ version of the client is 103 as it serves as a base upon which
+ incremental updates can be applied.
+
+ The target version 105 can be:
+
+ * directly fetched as a snapshot;
+
+ * computed incrementally by applying the incremental updates between
+ 103 and 104, then 104 and 105; or,
+
+ * computed incrementally by taking the "shortcut" path from 103 to
+ 105 if the optional update from 103 to 105 exists.
+
+ +======+
+ ------| 0 |
+ / +======+
+ ID0-101 / | |
+ |/__ | |
+ +======+ | |
+ tag: 3421097 -> | 101 | | |
+ +======+ | |
+ ID101-102 || | |
+ \/ | |
+ +======+ | |
+ tag: 6431234 -> | 102 | | |
+ +======+ | |
+ ID102-103 || | |
+ \/ | |
+ +======+ / |
+ +--------------+ tag: 0881080 -> | 103 |<--------/ |
+ | Base Version | =======> +======+ ID0-103 |
+ +--------------+ 103-104 || .. |
+ \/ .. |
+ +======+ .. |
+ tag: 6452654 -> | 104 | .. ID103 |
+ +======+ .. -105 |
+ ID104-105 || .. | ID0-105
+ \/ |._ /
+ +======+ /
+ tag: 7838392 -> | 105 |<-----------/
+ +======+
+ ID105-106 ||
+ \/
+ +======+
+ tag: 6470983 -> | 106 |
+ +======+
+
+ Figure 2: TIPS Model Example
+
+3.2. Updates Graph Modification Invariants
+
+ A server might change its updates graph (to compact it, to add nodes,
+ etc.), but it will need to ensure that any resource state that it
+ makes available is reachable by clients, either directly via a
+ snapshot (that is, relative to 0) or indirectly by requesting an
+ earlier snapshot and a contiguous set of incremental updates.
+ Additionally, to allow clients to proactively construct URIs for
+ future update items, the ID of each added node in the updates graph
+ will need to increment contiguously by 1. More specifically, the
+ updates graph MUST satisfy the following invariants:
+
+ Continuity: At any time, let ns denote the smallest non-zero version
+ (i.e., <start-seq>) in the updates graph and let ne denote the
+ latest version (i.e., <end-seq>). Then, any version in between ns
+ and ne MUST also exist. This implies that the incremental update
+ from ni to ni + 1 exists for any ns <= ni <= ne, and all the
+ version numbers in the updates graph (except 0) constitute exactly
+ the integer interval [ns, ne].
+
+ Feasibility: Let ns denote <start-seq> in the updates graph. The
+ server MUST provide a snapshot of ns; in other words, there is
+ always a direct link to ns in the updates graph.
+
+ "Right shift" only: Assume a server provides versions in [n1, n2] at
+ time t and versions in [n1', n2'] at time t'. If t' > t, then n1'
+ >= n1 and n2' >= n2.
+
+ For example, consider the case that a server compacts a resource's
+ updates graph to conserve space, using the example model in
+ Section 3.1. Assume at time 0, the server provides the versions
+ {101, 102, 103, 104, 105, 106}. At time 1, both {103, 104, 105, 106}
+ and {105, 106} are valid sets. However, {102, 103, 104, 105, 106}
+ and {104, 105, 106} are not valid sets as there is no snapshot to
+ version 102 or 104 in the updates graph. Thus, there is a risk that
+ the right content of version 102 (in the first example) or 104 (in
+ the second example) cannot be obtained by a client that does not have
+ the previous version 101 or 103, respectively.
+
+4. TIPS Workflow and Resource Location Schema
+
+4.1. Workflow
+
+ At a high level, an ALTO client first requests the TIPS information
+ resource (denoted as TIPS-F, where F is for frontend) to indicate the
+ information resource or resources that the client wants to monitor.
+ For each requested resource, the server returns a JSON object that
+ contains a URI, which points to the root of a TIPS view (denoted as
+ TIPS-V), and a summary of the current view, which contains the
+ information to correctly interact with the current view. With the
+ URI to the root of a TIPS view, clients can construct URIs (see
+ Section 4.2) to fetch incremental updates.
+
+ An example workflow is shown in Figure 3. After the TIPS-F receives
+ the request from the client to monitor the updates of an ALTO
+ resource, it creates a TIPS view resource and returns the
+ corresponding information to the client. The URI points to that
+ specific TIPS-V instance, and the summary contains the <start-seq>
+ and <end-seq> of the updates graph and a server-recommended edge to
+ consume first (e.g., from i to j).
+
+ An ALTO client can then continuously pull each additional update with
+ the information. For example, the client in Figure 3 first fetches
+ the update from i to j and then from j to j+1. Note that the update
+ item at "<tips-view-uri>/ug/<j>/<j+1>" might not yet exist, so the
+ server holds the request until the update becomes available (i.e.,
+ long polling).
+
+ A server MAY close a TIPS view at any time (e.g., under high system
+ load or due to client inactivity). In the event that a TIPS view is
+ closed, an edge request will receive error code 404 (Not Found) in
+ response, and the client will have to request a new TIPS view URI.
+
+ If resources allow, a server SHOULD avoid closing TIPS views that
+ have active polling edge requests or have recently served responses
+ until clients have had a reasonable interval to request the next
+ update, unless guided by specific control policies.
+
+ Client TIPS-F TIPS-V
+ o . .
+ | POST to create/receive a TIPS view . Create TIPS .
+ | for resource 1 . View .
+ |-------------------------------------> |.-.-.-.-.-.-.-> |
+ | <tips-view-uri>, <tips-view-summary> . |
+ | <-------------------------------------| <-.-.-.-.-.-.-.|
+ | .
+ | GET /<tips-view-path>/ug/<i>/<j> .
+ |------------------------------------------------------> |
+ | content on edge i to j |
+ | <------------------------------------------------------|
+ | .
+ | GET /<tips-view-path>/ug/<j>/<j+1> .
+ |------------------------------------------------------> |
+ . .
+ . .
+ | content on edge j to j+1 |
+ | <------------------------------------------------------|
+ | .
+ o .
+ .
+ TIPS View Closed o
+
+ Figure 3: ALTO TIPS Workflow Supporting Client Pull
+
+4.2. Resource Location Schema
+
+ The resource location schema defines how a client constructs URIs to
+ fetch incremental updates.
+
+ To access each update in an updates graph, consider the model
+ represented as a "virtual" file system (adjacency list), contained
+ within the root of a TIPS view URI (see Section 6.2 for the
+ definition of tips-view-uri). For example, assuming that the updates
+ graph of a TIPS view is as shown in Figure 2, the location schema of
+ this TIPS view will have the format as in Figure 4.
+
+ <tips-view-path> // root path to a TIPS view
+ |_ ug // updates graph
+ | |_ 0
+ | | |_ 101 // full 101 snapshot
+ | | |_ 103
+ | | \_ 105
+ | |_ 101
+ | | \_ 102 // 101 -> 102 incremental update
+ | |_ 102
+ | | \_ 103
+ | |_ 103
+ | | |_ 104
+ | | \_ 105 // optional shortcut 103 -> 105 incr. update
+ | |_ 104
+ | | \_ 105
+ | \_ 105
+ | \_ 106
+ \_ ...
+
+ Figure 4: Location Schema Example
+
+ TIPS uses this directory schema to generate template URIs that allow
+ clients to construct the location of incremental updates after
+ receiving the tips-view-uri from the server. The generic template
+ for the location of the update item on the edge from node 'i' to node
+ 'j' in the updates graph is:
+
+ <tips-view-uri>/ug/<i>/<j>
+
+ Due to the sequential nature of the update item IDs, a client can
+ long poll a future update that does not yet exist (e.g., the
+ incremental update from 106 to 107). This can be done by
+ constructing the URI for the next edge that will be added, starting
+ from the sequence number of the current last node (denoted as <end-
+ seq>) in the graph to the next sequential node (with the sequence
+ number of <end-seq + 1>):
+
+ <tips-view-uri>/ug/<end-seq>/<end-seq + 1>
+
+ Incremental updates of a TIPS view are read-only. Thus, they are
+ fetched using the HTTP GET method.
+
+5. TIPS Information Resource Directory (IRD) Announcement
+
+ To announce a TIPS information resource in the IRD, an ALTO server
+ MUST specify "media-type", "capabilities", and "uses" as follows.
+
+5.1. Media Type
+
+ The media type of the Transport Information Publication Service
+ (TIPS) resource is "application/alto-tips+json".
+
+5.2. Capabilities
+
+ The "capabilities" field of a TIPS information resource is modeled on
+ that defined in Section 6.3 of [RFC8895].
+
+ Specifically, the capabilities are defined as an object of the
+ TIPSCapabilities type:
+
+ object {
+ IncrementalUpdateMediaTypes incremental-change-media-types;
+ } TIPSCapabilities;
+
+ object-map {
+ ResourceID -> String;
+ } IncrementalUpdateMediaTypes;
+
+ Figure 5: TIPSCapabilities
+
+ with the field:
+
+ incremental-change-media-types: If a TIPS information resource can
+ provide updates with incremental changes for a resource, the
+ "incremental-change-media-types" field has an entry whose key is
+ the ID of the resource and the value is the supported media types
+ of incremental changes, separated by commas. For the
+ implementation of this specification, this MUST be "application/
+ merge-patch+json", "application/json-patch+json", or "application/
+ merge-patch+json,application/json-patch+json", unless defined by a
+ future extension.
+
+ When choosing the media types to encode incremental updates for a
+ resource, the server MUST consider the limitations of the
+ encoding. For example, when a JSON merge patch specifies that the
+ value of a field is null, its semantics are that the field is
+ removed from the target; hence, the field is no longer defined
+ (i.e., undefined). However, this may not be the intended result
+ for the resource, when null and undefined have different semantics
+ for the resource. In such a case, the server MUST choose JSON
+ patch encoding over JSON merge patch encoding for the incremental
+ update if both media types "application/json-patch+json" and
+ "application/merge-patch" are supported by the TIPS information
+ resource.
+
+5.3. Uses
+
+ The "uses" attribute MUST be an array with the resource IDs of every
+ network information resource for which this TIPS information resource
+ can provide service.
+
+ This set MAY be any subset of the ALTO server's network information
+ resources and MAY include resources defined in linked IRDs. However,
+ it is RECOMMENDED that the ALTO server selects a set that is closed
+ under the resource dependency relationship. That is, if a TIPS
+ information resource's "uses" set includes resource R1, and resource
+ R1 depends on ("uses") resource R0, then the "uses" set should
+ include R0 as well as R1. For example, if a TIPS information
+ resource provides a TIPS view for a cost map, it should also provide
+ a TIPS view for the network map upon which that cost map depends.
+
+ If the set is not closed, at least one resource R1 in the "uses"
+ field of a TIPS information resource depends on another resource R0
+ that is not in the "uses" field of the same TIPS information
+ resource. Thus, a client cannot receive incremental updates for
+ another resource R0 that is not in the "uses" field of the same TIPS
+ information resource. If the client observes in an update of R1 that
+ the version tag for R0 has changed, it must request the full content
+ of R0, which is likely to be less efficient than receiving the
+ incremental updates of R0.
+
+5.4. An Example
+
+ Extending the IRD example in Section 8.1 of [RFC8895], Figure 6 is
+ the IRD of an ALTO server supporting the ALTO base protocol, ALTO/
+ SSE, and ALTO TIPS.
+
+ "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-network-map"],
+ "capabilities": {
+ "cost-type-names": ["num-routingcost"]
+ }
+ },
+ "my-hopcount-map": {
+ "uri": "https://alto.example.com/costmap/hopcount",
+ "media-type": "application/alto-costmap+json",
+ "uses": ["my-network-map"],
+ "capabilities": {
+ "cost-type-names": ["num-hopcount"]
+ }
+ },
+ "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-network-map"],
+ "capabilities": {
+ "cost-type-names": ["num-routingcost", "num-hopcount"],
+ "cost-constraints": false
+ }
+ },
+ "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-tips": {
+ "uri": "https://alto.example.com/updates-new/costs",
+ "media-type": "application/alto-tips+json",
+ "accepts": "application/alto-tipsparams+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",
+ "my-simple-filtered-cost-map": "application/merge-patch+json"
+ }
+ }
+ },
+ "tips-sse": {
+ "uri": "https://alto.example.com/updates/tips",
+ "media-type": "text/event-stream",
+ "accepts": "application/alto-updatestreamparams+json",
+ "uses": [ "update-my-costs-tips" ],
+ "capabilities": {
+ "incremental-change-media-types": {
+ "update-my-costs-tips": "application/merge-patch+json"
+ }
+ }
+ }
+
+ Figure 6: Example of an ALTO Server Supporting the ALTO Base
+ Protocol, ALTO/SSE, and ALTO TIPS
+
+ Note that it is straightforward for an ALTO server 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.
+
+ The resource "update-my-costs-tips" provides an ALTO TIPS information
+ resource, and this is indicated by the media type "application/alto-
+ tips+json".
+
+6. TIPS Management
+
+ Upon request, a server sends a TIPS view to a client. This TIPS view
+ might be created at the time of the request or might already exist
+ (either because another client has already created a TIPS view for
+ the same requested network resource or because the server perpetually
+ maintains a TIPS view for an often-requested resource).
+
+6.1. Open Request
+
+ An ALTO client requests that the server provide a TIPS view for a
+ given resource by sending an HTTP POST body with the media type
+ "application/alto-tipsparams+json". That body contains a JSON object
+ of the TIPSReq type, where:
+
+ object {
+ ResourceID resource-id;
+ [JSONString tag;]
+ [Object input;]
+ } TIPSReq;
+
+ Figure 7: TIPSReq
+
+ with the following fields:
+
+ resource-id: This field contains the resource ID of an ALTO resource
+ to be monitored, which MUST be in the TIPS information resource's
+ "uses" list (Section 5). If a client does not support all
+ incremental methods from the set announced in the server's
+ capabilities, the client MUST NOT use the TIPS information
+ resource.
+
+ tag: If the "resource-id" is associated with a GET-mode resource
+ with a version tag (or "vtag"), as defined in Section 10.3 of
+ [RFC7285], and the ALTO client has previously retrieved a version
+ of that resource from ALTO, the ALTO client MAY set the "tag"
+ field to the tag part of the client's version of that resource.
+ The server MAY use the tag when calculating a recommended starting
+ edge for the client to consume. Note that the client MUST support
+ all incremental methods from the set announced in the server's
+ capabilities for this resource.
+
+ input: If the resource is a POST-mode service that requires input,
+ the ALTO client MUST set the "input" field to a JSON object with
+ the parameters that the resource expects.
+
+6.2. Open Response
+
+ The response to a valid request MUST be a JSON object of the
+ AddTIPSResponse type, denoted as media type "application/alto-
+ tips+json":
+
+ object {
+ URI tips-view-uri;
+ TIPSViewSummary tips-view-summary;
+ } AddTIPSResponse;
+
+ object {
+ UpdatesGraphSummary updates-graph-summary;
+ } TIPSViewSummary;
+
+ object {
+ JSONNumber start-seq;
+ JSONNumber end-seq;
+ StartEdgeRec start-edge-rec;
+ } UpdatesGraphSummary;
+
+ object {
+ JSONNumber seq-i;
+ JSONNumber seq-j;
+ } StartEdgeRec;
+
+ Figure 8: AddTIPSResponse
+
+ with the following fields:
+
+ tips-view-uri: This is the URI to the requested TIPS view. The
+ value of this field MUST have the following format:
+
+ scheme "://" tips-view-host "/" tips-view-path
+
+ tips-view-host = host [ ":" port]
+ tips-view-path = path
+
+ where scheme MUST be "http" or "https" unless specified by a
+ future extension, and host, port, and path are as specified in
+ Sections 3.2.2, 3.2.3, and 3.3 in [RFC3986]. An ALTO server
+ SHOULD use the "https" scheme unless the contents of the TIPS view
+ are intended to be publicly accessible and do not raise security
+ concerns. The field MUST contain only ASCII characters. In case
+ the original URL contains international characters (e.g., in the
+ domain name), the ALTO server implementation MUST properly encode
+ the URL into the ASCII format (e.g., using the "urlencode"
+ function).
+
+ A server MUST NOT use the same URI for different TIPS views,
+ either for different resources or for different request bodies to
+ the same resource. URI generation is implementation specific; for
+ example, one may compute a Universally Unique Identifier (UUID)
+ [RFC9562] or a hash value based on the request and append it to a
+ base URL. For performance considerations, it is NOT RECOMMENDED
+ to use properties that are not included in the request body to
+ determine the URI of a TIPS view, such as cookies or the client's
+ IP address, which may result in duplicated TIPS views in cases
+ such as mobile clients. However, this is not mandatory as a
+ server might intentionally use client information to compute the
+ TIPS view URI to provide service isolation between clients.
+
+ tips-view-summary: Contains an updates-graph-summary.
+
+ The "updates-graph-summary" field contains the <start-seq> of the
+ updates graph (in the "start-seq" field) and the <end-seq> that is
+ currently available (in the "end-seq" field), along with a
+ recommended edge to consume (in the "start-edge-rec" field). If
+ the client does not provide a version tag, the server MUST
+ recommend the edge of the latest available snapshot. If the
+ client provides a version tag, the server MUST either recommend
+ the first incremental update edge starting from the client's
+ tagged version or recommend the edge of the latest snapshot: which
+ edge is selected depends on the implementation. For example, a
+ server MAY calculate the cumulative size of the incremental
+ updates available from that version onward and compare it to the
+ size of the complete resource snapshot. If the snapshot is
+ bigger, the server recommends the first incremental update edge
+ starting from the client's tagged version. Otherwise, the server
+ recommends the latest snapshot edge.
+
+ If the request has any errors, the ALTO server MUST return an HTTP
+ 400 (Bad Request) error code to the ALTO client; the body of the
+ response follows the generic ALTO error response format specified in
+ Section 8.5.2 of [RFC7285]. Hence, an example ALTO error response
+ has the format shown in Figure 9.
+
+ HTTP/1.1 400 Bad Request
+ Content-Length: 131
+ Content-Type: application/alto-error+json
+
+ {
+ "meta":{
+ "code": "E_INVALID_FIELD_VALUE",
+ "field": "resource-id",
+ "value": "my-network-map/#"
+ }
+ }
+
+ Figure 9: ALTO Error Example
+
+ Note that "field" and "value" are optional fields. If the "value"
+ field exists, the "field" field MUST exist.
+
+ * If the TIPS request does not have a "resource-id" field, the error
+ code of the error message MUST be "E_MISSING_FIELD" and the
+ "field" field, if present, MUST be "resource-id". The ALTO server
+ MUST NOT create any TIPS view.
+
+ * If the "resource-id" field is invalid or is not associated with
+ the TIPS information resource, the error code of the error message
+ MUST be "E_INVALID_FIELD_VALUE". If present, the "field" field
+ MUST be the full path of the "resource-id" field, and the "value"
+ field MUST be the value of the "resource-id" field in the request.
+
+ * If the resource is a POST-mode service that requires input, the
+ client MUST set the "input" field to a JSON object with the
+ parameters that resource expects. If the "input" field is missing
+ or invalid, the ALTO server MUST return the same error response
+ that resource would return for missing or invalid inputs (see
+ [RFC7285]).
+
+ Furthermore, it is RECOMMENDED that the server use the following HTTP
+ code to indicate other errors, with the media type "application/alto-
+ error+json".
+
+ 429 (Too Many Requests): Indicates when the number of TIPS views
+ open requests exceeds the server threshold. The server MAY
+ indicate when to retry the request in the "Re-Try After" headers.
+
+ It is RECOMMENDED that the server provide the ALTO/SSE support for
+ the TIPS resource. Thus, the client can be notified of the version
+ updates of all the TIPS views that it monitors and make better cross-
+ resource transport decisions (see Section 8.2 for related
+ considerations).
+
+6.3. Open Example
+
+6.3.1. Basic Example
+
+ For simplicity, assume that the ALTO server is using Basic
+ authentication [RFC7617]. If a client with username "client1" and
+ password "helloalto" wants to create a TIPS view of an ALTO cost map
+ resource with the resource ID "my-routingcost-map", it can send the
+ request depicted in Figure 10.
+
+ POST /tips HTTP/1.1
+ Host: alto.example.com
+ Accept: application/alto-tips+json, application/alto-error+json
+ Authorization: Basic Y2xpZW50MTpoZWxsb2FsdG8K
+ Content-Type: application/alto-tipsparams+json
+ Content-Length: 41
+
+ {
+ "resource-id": "my-routingcost-map"
+ }
+
+ Figure 10: Request Example of Opening a TIPS View
+
+ If the operation is successful, the ALTO server returns the message
+ shown in Figure 11.
+
+ HTTP/1.1 200 OK
+ Content-Type: application/alto-tips+json
+ Content-Length: 255
+
+ {
+ "tips-view-uri": "https://alto.example.com/tips/2718281828",
+ "tips-view-summary": {
+ "updates-graph-summary": {
+ "start-seq": 101,
+ "end-seq": 106,
+ "start-edge-rec" : {
+ "seq-i": 0,
+ "seq-j": 105
+ }
+ }
+ }
+ }
+
+ Figure 11: Response Example of Opening a TIPS View
+
+6.3.2. Example Using Digest Authentication
+
+ Below is another example of the same query using Digest
+ authentication, a mandatory authentication method of ALTO servers as
+ defined in Section 8.3.5 of [RFC7285]. The content of the response
+ is the same as in Figure 11; thus, it has been omitted for
+ simplicity.
+
+ POST /tips HTTP/1.1
+ Host: alto.example.com
+ Accept: application/alto-tips+json, application/alto-error+json
+ Authorization: Basic Y2xpZW50MTpoZWxsb2FsdG8K
+ Content-Type: application/alto-tipsparams+json
+ Content-Length: 41
+
+ {
+ "resource-id": "my-routingcost-map"
+ }
+
+ HTTP/1.1 401 UNAUTHORIZED
+ WWW-Authenticate: Digest
+ realm="alto.example.com",
+ qop="auth",
+ algorithm="MD5",
+ nonce="173b5aba4242409ee2ac3a4fd797f9d7",
+ opaque="a237ff9ab865379a69d9993162ef55e4"
+
+ POST /tips HTTP/1.1
+ Host: alto.example.com
+ Accept: application/alto-tips+json, application/alto-error+json
+ Authorization: Digest
+ username="client1",
+ realm="alto.example.com",
+ uri="/tips",
+ qop=auth,
+ algorithm=MD5,
+ nonce="173b5aba4242409ee2ac3a4fd797f9d7",
+ nc=00000001,
+ cnonce="ZTg3MTI3NDFmMDQ0NzI1MDQ3MWE3ZTFjZmM5MTNiM2I=",
+ response="8e937ae696c1512e4f990fa21c7f9347",
+ opaque="a237ff9ab865379a69d9993162ef55e4"
+ Content-Type: application/alto-tipsparams+json
+ Content-Length: 41
+
+ {
+ "resource-id": "my-routingcost-map"
+ }
+
+
+ HTTP/1.1 200 OK
+ Content-Type: application/alto-tips+json
+ Content-Length: 258
+
+ {....}
+
+ Figure 12: Open Example with Digest Authentication
+
+6.3.3. Example Using ALTO/SSE
+
+ This section gives an example of receiving incremental updates of the
+ TIPS view summary using ALTO/SSE [RFC8895]. Consider the "tips-sse"
+ resource, as announced by the IRD in Figure 6, which provides ALTO/
+ SSE for the "update-my-cost-tips" resource; a client might send the
+ following request to receive updates of the TIPS view (authentication
+ is omitted for simplicity).
+
+ POST /updates/tips HTTP/1.1
+ Host: alto.example.com
+ Accept: text/event-stream,application/alto-error+json
+ Content-Type: application/alto-updatestreamparams+json
+ Content-Length: 76
+
+ {
+ "add": {
+ "tips-123": { "resource-id": "update-my-cost-tips" }
+ }
+ }
+
+ Figure 13: Example of Monitoring TIPS View with ALTO/SSE
+
+ Then, the client will be able to receive the TIPS view summary as
+ follows.
+
+ HTTP/1.1 200 OK
+ Connection: keep-alive
+ Content-Type: text/event-stream
+
+ event: application/alto-tips+json,tips-123
+ data: {
+ data: "tips-view-uri": "https://alto.example.com/tips/2718281828",
+ data: "tips-view-summary": {
+ data: "updates-graph-summary": {
+ data: "start-seq": 101,
+ data: "end-seq": 106,
+ data: "start-edge-rec" : {
+ data: "seq-i": 0,
+ data: "seq-j": 105
+ data: }
+ data: }
+ data: }
+ data: }
+
+ When there is an update to the TIPS view (for example, when the "end-
+ seq" field is increased by 1), the client will be able to receive the
+ incremental update of the TIPS view summary as follows.
+
+ event: application/merge-patch+json,tips-123
+ data: {
+ data: "tips-view-summary": {
+ data: "updates-graph-summary": {
+ data: "end-seq": 107
+ data: }
+ data: }
+ data: }
+
+7. TIPS Data Transfers - Client Pull
+
+ TIPS allows an ALTO client to retrieve the content of an update item
+ from the updates graph, with an update item defined as the content
+ (incremental update or snapshot) on an edge in the updates graph.
+
+7.1. Request
+
+ The client sends an HTTP GET request, where the media type of an
+ update item resource MUST be the same as the "media-type" field of
+ the update item on the specified edge in the updates graph.
+
+ The GET request MUST have the following format:
+
+ GET /<tips-view-path>/ug/<i>/<j>
+ HOST: <tips-view-host>
+
+ For example, consider the updates graph in Figure 4. If the client
+ wants to query the content of the first update item (0 -> 101) whose
+ media type is "application/alto-costmap+json", it sends a request to
+ "/tips/2718281828/ug/0/101" and sets the "Accept" header to
+ "application/alto-costmap+json,application/alto-error+json". See
+ Section 7.3 for a concrete example.
+
+7.2. Response
+
+ If the request is valid (i.e., "ug/<i>/<j>" exists), the response is
+ encoded as a JSON object whose data format is indicated by the media
+ type.
+
+ A client MAY conduct proactive fetching of future updates, by long
+ polling updates that have not been provided in the directory yet.
+ For such updates, the client MUST indicate all media types that might
+ appear. It is RECOMMENDED that the server allow for at least the
+ long polling of <end-seq> -> <end-seq + 1>.
+
+ Hence, the server processing logic MUST be:
+
+ * If a resource with path "ug/<i>/<j>" exists, return content using
+ encoding.
+
+ * Else, if long polling "ug/<i>/<j>" is acceptable, put request in a
+ backlog queue, then either a response is triggered when the
+ content is ready or the request is interrupted (e.g., by a network
+ error).
+
+ * Else, return error.
+
+ It is RECOMMENDED that the server use the following HTTP codes to
+ indicate errors, with the media type "application/alto-error+json",
+ regarding update item requests.
+
+ 404 (Not Found): Indicates that the requested update does not exist
+ or the requested TIPS view does not exist or is closed by the
+ server.
+
+ 410 (Gone): Indicates an update has a seq that is smaller than the
+ <start-seq>.
+
+ 415 (Unsupported Media Type): Indicates the media type (or types)
+ accepted by the client does not include the media type of the
+ update chosen by the server.
+
+ 425 (Too Early): Indicates the seq exceeds the server long polling
+ window.
+
+ 429 (Too Many Requests): Indicates the number of pending (long poll)
+ requests exceeds the server threshold. The server MAY indicate
+ when to retry the request in the "Re-Try After" headers.
+
+7.3. Example
+
+ Assume the client wants to get the contents of the update item on
+ edge 0 to 101. The format of the request is shown in Figure 14.
+
+ GET /tips/2718281828/ug/0/101 HTTP/1.1
+ Host: alto.example.com
+ Accept: application/alto-costmap+json, \
+ application/alto-error+json
+
+ Figure 14: GET Example
+
+ The response is shown in Figure 15.
+
+ HTTP/1.1 200 OK
+ Content-Type: application/alto-costmap+json
+ Content-Length: 50
+
+ { ... full replacement of my-routingcost-map ... }
+
+ Figure 15: Response to a GET Request
+
+7.4. New Next Edge Recommendation
+
+ While intended TIPS usage is for the client to receive a recommended
+ starting edge in the TIPS summary, consume that edge, and then
+ construct all future URIs by incrementing the sequence count by one,
+ there may be cases in which the client needs to request a new next
+ edge to consume. For example, if a client has an open TIPS view but
+ has not polled in a while, the client might request the next logical
+ incremental URI; however, the server has compacted the updates graph,
+ so it no longer exists. Thus, the client MAY request a new next edge
+ to consume based on its current version of the resource.
+
+7.4.1. Request
+
+ An ALTO client requests that the server provide a next edge
+ recommendation for a given TIPS view by sending an HTTP POST request
+ with the media type "application/alto-tipsparams+json". The URL of
+ the request MUST have the following format:
+
+ <tips-view-path>/ug
+
+ and the "HOST" field MUST be "<tips-view-host>".
+
+ The POST body has the same format as the TIPSReq in Figure 7. The
+ "resource-id" field MUST be the same as the resource ID used to
+ create the TIPS view, and the optional "input" field MUST NOT be
+ present.
+
+7.4.2. Response
+
+ The response to a valid request MUST be a JSON merge patch to the
+ object of the AddTIPSResponse type (defined in Section 6.2), denoted
+ as media type "application/merge-patch+json". The "updates-graph-
+ summary" field MUST be present in the response; hence, its parent
+ field "tips-view-summary" MUST be present as well.
+
+ If the "tag" field is present in the request, the server MUST check
+ if any version within the range [<start-seq>, <end-seq>] has the same
+ tag value. If the version exists (e.g., denoted as <tag-seq>), the
+ server MUST compute the paths from both <tag-seq> and 0 to the <end-
+ seq> and choose the one with the minimal cost. The cost MAY be
+ implementation specific (e.g., number of messages, accumulated data
+ size, etc.). The first edge of the selected path MUST be returned as
+ the recommended next edge.
+
+ If the "tag" field is not present, the interpretation MUST be that
+ the <tag-seq> is 0.
+
+ It is RECOMMENDED that the server use the following HTTP code to
+ indicate errors, with the media type "application/alto-error+json",
+ regarding new next edge requests.
+
+ 404 (Not Found): Indicates that the requested TIPS view does not
+ exist or has been closed by the server.
+
+7.4.3. Example
+
+ In this section, we give an example of the new next edge
+ recommendation service. Assume that a client already creates a TIPS
+ view (as in Section 6.3) whose updates graph is as shown in Figure 2.
+ Now assume that the client already has tag 0881080, whose
+ corresponding sequence number is 103, and sends the following new
+ next edge recommendation request (authentication is omitted for
+ simplicity):
+
+ POST /tips/2718281828/ug HTTP/1.1
+ HOST alto.example.com
+ Accept: application/merge-patch+json, application/alto-error+json
+ Content-Type: application/alto-tipsparams+json
+ Content-Length: 62
+
+ {
+ "resource-id": "my-routingcost-map",
+ "tag": "0881080"
+ }
+
+ According to Figure 2, there are three potential paths: 103 -> 104 ->
+ 105 -> 106, 103 -> 105 -> 106, and 0 -> 105 -> 106. Assume that the
+ server chooses the shortest update path by the accumulated data size
+ and the best path is 103 -> 105 -> 106. Thus, the server responds
+ with the following message:
+
+ HTTP/1.1 200 OK
+ Content-Type: application/merge-patch+json
+ Content-Length: 193
+
+ {
+ "tips-view-summary": {
+ "updates-graph-summary": {
+ "start-seq": 101,
+ "end-seq": 106,
+ "start-edge-rec": {
+ "seq-i": 103,
+ "seq-j": 105
+ }
+ }
+ }
+ }
+
+8. Operation and Processing Considerations
+
+ TIPS has some common operational considerations as ALTO/SSE
+ [RFC8895], including:
+
+ * the server choosing update messages (Section 9.1 of [RFC8895]);
+
+ * the client processing update messages (Section 9.2 of [RFC8895]);
+
+ * the updates of filtered map services (Section 9.3 of [RFC8895]);
+ and
+
+ * the updates of ordinal mode costs (Section 9.4 of [RFC8895]).
+
+ There are also some operational considerations specific to TIPS,
+ which we discuss below.
+
+8.1. Considerations for Load Balancing
+
+ There are two levels of load balancing in TIPS: the first level is to
+ balance the load of TIPS views for different clients and the second
+ is to balance the load of incremental updates.
+
+ Load balancing of TIPS views can be achieved either at the
+ application layer or at the infrastructure layer. For example, an
+ ALTO server MAY set <tips-view-host> to different subdomains to
+ distribute TIPS views or simply use the same host of the TIPS
+ information resource and rely on load balancers to distribute the
+ load.
+
+ TIPS allows a client to make concurrent pulls of incremental updates
+ for the same TIPS view, potentially through different HTTP
+ connections. As a consequence, TIPS introduces additional
+ complexities when the ALTO server balances the load by distributing
+ the requests to a set of backend servers. For example, a request
+ might be directed to the wrong backend server and get processed
+ incorrectly if the following two conditions both hold:
+
+ * these backend servers are stateful (i.e., the TIPS view is created
+ and stored only on a single server); and
+
+ * the ALTO server is using Layer 4 load balancing (i.e., the
+ requests are distributed based on the TCP 5-tuple).
+
+ Thus, additional considerations are required to enable correct load
+ balancing for TIPS, including:
+
+ Using a stateless architecture: One solution is to follow the
+ stateless computing pattern: states about the TIPS view are not
+ maintained by the backend servers but are stored in a distributed
+ database. Thus, concurrent requests to the same TIPS view can be
+ processed on arbitrary stateless backend servers, which all fetch
+ data from the same database.
+
+ Configuring the load balancers properly: In the case that the
+ backend servers are stateful, the load balancers must be properly
+ configured to guarantee that requests of the same TIPS view always
+ arrive at the same server. For example, an operator or a provider
+ of an ALTO server MAY configure Layer 7 load balancers that
+ distribute requests based on the tips-view-path component in the
+ URI.
+
+8.2. Considerations for Cross-Resource Dependency Scheduling
+
+ Dependent ALTO resources result in cross-resource dependencies in
+ TIPS. Consider the following pair of resources, where my-cost-map
+ (C) is dependent on my-network-map (N). The updates graph for each
+ resource is shown, along with links between the respective updates
+ graphs to show dependency:
+
+ +---+ +---+ +---+ +---+ +---+
+ my-network-map (N) | 0 |-->|89 |-->|90 |-->|91 |-->|92 |
+ +---+ +---+ +---+ +---+ +---+
+ | \ \ \
+ | \ \ \
+ +---+ +---+ +---+ +---+ +---+
+ my-cost-map (C) | 0 |-->|101|-->|102|-->|103|-->|104|
+ +---+ +---+ +---+ +---+ +---+
+ |_______________________|
+
+ Figure 16: Example Dependency Model
+
+ In Figure 16, the cost-map versions 101 and 102 (denoted as C101 and
+ C102) are dependent on the network-map version 89 (denoted as N89).
+ The cost-map version 103 (C103) is dependent on the network-map
+ version 90 (N90), and so on.
+
+ Thus, the client must decide the order in which to receive and apply
+ the updates. The order may affect how fast the client can build a
+ consistent view and how long the client needs to buffer the update.
+
+ Example 1: The client requests N89, N90, N91, C101, C102 in that
+ order. The client either gets no consistent view of the resources
+ or has to buffer N90 and N91.
+
+ Example 2: The client requests C101, C102, C103, N89. The client
+ either gets no consistent view or has to buffer C103.
+
+ To get consistent ALTO information, a client must process the updates
+ following the guidelines specified in Section 9.2 of [RFC8895]. If
+ resources permit (i.e., sufficient updates can be buffered), an ALTO
+ client can safely use long polling to fetch all the updates. This
+ allows a client to build consistent views quickly as the updates are
+ already stored in the buffer. Otherwise, it is RECOMMENDED to
+ request a full snapshot if the client does not have enough local
+ resources to buffer and process the incremental updates.
+
+8.3. Considerations for Managing Shared TIPS Views
+
+ From a client's point of view, it sees only one copy of the TIPS view
+ for any resource. However, on the server side, there are different
+ implementation options, especially for common resources (e.g.,
+ network maps or cost maps) that may be frequently queried by many
+ clients. Some potential options are listed below:
+
+ * An ALTO server creates one TIPS view of the common resource for
+ each client.
+
+ * An ALTO server maintains one copy of the TIPS view for each common
+ resource and all clients requesting the same resources use the
+ same copy. There are two ways to manage the storage for the
+ shared copy:
+
+ - the ALTO server maintains the set of clients that have sent a
+ polling request to the TIPS view and only removes the view from
+ the storage when the set becomes empty and no client
+ immediately issues a new edge request; or
+
+ - the TIPS view is never removed from the storage.
+
+ Developers may choose different implementation options depending on
+ criteria such as request frequency, available resources of the ALTO
+ server, the ability to scale, and programming complexity.
+
+8.4. Considerations for Offering Shortcut Incremental Updates
+
+ Besides the mandatory stepwise incremental updates (from i to i+1),
+ an ALTO server MAY optionally offer shortcut incremental updates, or
+ simple shortcuts, between two non-consecutive versions i and i+k (k >
+ 1). Such shortcuts offer alternative paths in the updates graph and
+ can potentially speed up the transmission and processing of
+ incremental updates, leading to faster synchronization of ALTO
+ information, especially when the client has limited bandwidth and
+ computation. However, implementors of an ALTO server must be aware
+ that:
+
+ 1. optional shortcuts may increase the size of the updates graph,
+ worst case scenario being the square of the number of updates
+ (i.e., when a shortcut is offered for each version to all future
+ versions).
+
+ 2. optional shortcuts require additional storage on the ALTO server.
+
+ 3. optional shortcuts may reduce concurrency when the updates do not
+ overlap (e.g., when the updates apply to different parts of an
+ ALTO resource). In such a case, the total size of the original
+ updates is close to the size of the shortcut, but the original
+ updates can be transmitted concurrently while the shortcut is
+ transmitted in a single connection.
+
+9. Security Considerations
+
+ The security considerations of the base protocol (Section 15 of
+ [RFC7285]) fully apply to this extension. For example, the same
+ authenticity and integrity considerations (Section 15.1 of [RFC7285])
+ still fully apply; the same considerations for the privacy of ALTO
+ users (Section 15.4 of [RFC7285]) also still fully apply.
+ Additionally, operators of the ALTO servers MUST follow the
+ guidelines in [RFC9325] to avoid new TLS vulnerabilities discovered
+ after [RFC7285] was published.
+
+ The additional services (the addition of update read service and
+ update push service) provided by this extension extend the attack
+ surface described in Section 15.1.1 of [RFC7285]. The following
+ subsections discuss the additional risks and their remedies.
+
+9.1. TIPS: Denial-of-Service Attacks
+
+ Allowing TIPS views enables new classes of DoS attacks. In
+ particular, for the TIPS server, one or multiple malicious ALTO
+ clients might create an excessive number of TIPS views, to exhaust
+ the server resource and/or to block normal users from accessing the
+ service.
+
+ To avoid such attacks, the server MAY choose to limit the number of
+ active views and reject new requests when that threshold is reached.
+ TIPS allows predictive fetching and the server MAY also choose to
+ limit the number of pending requests. If a new request exceeds the
+ threshold, the server MAY log the event and return the HTTP status
+ 429 (Too Many Requests).
+
+ It is important to note that the preceding approaches are not the
+ only possibilities. For example, it might be possible for a TIPS
+ server to use somewhat more clever logic involving TIPS view eviction
+ policies, IP reputation, rate-limiting, and compartmentalization of
+ the overall threshold into smaller thresholds that apply to subsets
+ of potential clients. If service availability is a concern, ALTO
+ clients MAY establish service level agreements with the ALTO server.
+
+9.2. ALTO Client: Update Overloading or Instability
+
+ The availability of continuous updates can also cause overload for an
+ ALTO client, in particular, an ALTO client with limited processing
+ capabilities. The current design does not include any flow control
+ mechanisms for the client to reduce the update rates from the server.
+ For example, TCP, HTTP/2, and QUIC provide stream and connection flow
+ control data limits, which might help prevent the client from being
+ overloaded. Under overloading, the client MAY choose to remove the
+ information resources with high update rates.
+
+ Also, under overloading, the client might no longer be able to detect
+ whether information is still fresh or has become stale. In such a
+ case, the client should be careful in how it uses the information to
+ avoid stability or efficiency issues.
+
+10. IANA Considerations
+
+ IANA has registered the following media types from the registry
+ available at [IANA-Media-Type]:
+
+ * application/alto-tips+json: as described in Section 6.2;
+
+ * application/alto-tipsparams+json: as described in Section 6.1;
+
+10.1. application/alto-tips+json Media Type
+
+ Type name: application
+
+ Subtype name: alto-tips+json
+
+ Required parameters: N/A
+
+ Optional parameters: N/A
+
+ Encoding considerations: Encoding considerations are identical to
+ those specified for the "application/json" media type. See
+ [RFC8259].
+
+ Security considerations: See the Security Considerations section of
+ RFC 9569.
+
+ Interoperability considerations: N/A
+
+ Published specification: Section 6.2 of RFC 9569.
+
+ Applications that use this media type: ALTO servers and ALTO clients
+ either stand alone or are embedded within other applications.
+
+ Fragment identifier considerations: N/A
+
+ Additional information:
+
+ Deprecated alias names for this type: N/A
+ Magic number(s): N/A
+ File extension(s): RFC 9569 uses the media type to refer to
+ protocol messages; thus, it does not require a file extension.
+ Macintosh file type code(s): N/A
+
+ Person & email address to contact for further information:
+ See the Authors' Addresses section of RFC 9569.
+
+ Intended usage: COMMON
+
+ Restrictions on usage: N/A
+
+ Author: See the Authors' Addresses section of RFC 9569.
+
+ Change controller: Internet Engineering Task Force (iesg@ietf.org).
+
+10.2. application/alto-tipsparams+json Media Type
+
+ Type name: application
+
+ Subtype name: alto-tipsparams+json
+
+ Required parameters: N/A
+
+ Optional parameters: N/A
+
+ Encoding considerations: Encoding considerations are identical to
+ those specified for the "application/json" media type. See
+ [RFC8259].
+
+ Security considerations: See the Security Considerations section of
+ RFC 9569.
+
+ Interoperability considerations: N/A
+
+ Published specification: Section 6.1 of RFC 9569.
+
+ Applications that use this media type: ALTO servers and ALTO clients
+ either stand alone or are embedded within other applications.
+
+ Fragment identifier considerations: N/A
+
+ Additional information:
+
+ Deprecated alias names for this type: N/A
+ Magic number(s): N/A
+ File extension(s): RFC 9569 uses the media type to refer to
+ protocol messages; thus, it does not require a file extension.
+ Macintosh file type code(s): N/A
+
+ Person & email address to contact for further information:
+ See the Authors' Addresses section of RFC 9569.
+
+ Intended usage: COMMON
+
+ Restrictions on usage: N/A
+
+ Author: See the Authors' Addresses section of RFC 9569.
+
+ Change controller: Internet Engineering Task Force (iesg@ietf.org).
+
+11. References
+
+11.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>.
+
+ [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
+ Resource Identifier (URI): Generic Syntax", STD 66,
+ RFC 3986, DOI 10.17487/RFC3986, January 2005,
+ <https://www.rfc-editor.org/info/rfc3986>.
+
+ [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>.
+
+ [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>.
+
+ [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
+ Interchange Format", STD 90, RFC 8259,
+ DOI 10.17487/RFC8259, December 2017,
+ <https://www.rfc-editor.org/info/rfc8259>.
+
+ [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>.
+
+ [RFC9112] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
+ Ed., "HTTP/1.1", STD 99, RFC 9112, DOI 10.17487/RFC9112,
+ June 2022, <https://www.rfc-editor.org/info/rfc9112>.
+
+ [RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113,
+ DOI 10.17487/RFC9113, June 2022,
+ <https://www.rfc-editor.org/info/rfc9113>.
+
+ [RFC9114] Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114,
+ June 2022, <https://www.rfc-editor.org/info/rfc9114>.
+
+ [RFC9325] Sheffer, Y., Saint-Andre, P., and T. Fossati,
+ "Recommendations for Secure Use of Transport Layer
+ Security (TLS) and Datagram Transport Layer Security
+ (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November
+ 2022, <https://www.rfc-editor.org/info/rfc9325>.
+
+11.2. Informative References
+
+ [IANA-Media-Type]
+ IANA, "Media Types",
+ <https://www.iana.org/assignments/media-types>.
+
+ [RFC7617] Reschke, J., "The 'Basic' HTTP Authentication Scheme",
+ RFC 7617, DOI 10.17487/RFC7617, September 2015,
+ <https://www.rfc-editor.org/info/rfc7617>.
+
+ [RFC9205] Nottingham, M., "Building Protocols with HTTP", BCP 56,
+ RFC 9205, DOI 10.17487/RFC9205, June 2022,
+ <https://www.rfc-editor.org/info/rfc9205>.
+
+ [RFC9562] Davis, K., Peabody, B., and P. Leach, "Universally Unique
+ IDentifiers (UUIDs)", RFC 9562, DOI 10.17487/RFC9562, May
+ 2024, <https://www.rfc-editor.org/info/rfc9562>.
+
+Appendix A. A High-Level Deployment Model
+
+ Conceptually, the TIPS system consists of three types of resources:
+
+ (R1): The TIPS frontend to create TIPS views.
+
+ (R2): The TIPS view directory, which provides metadata (e.g.,
+ references) about the network resource data.
+
+ (R3): The actual network resource data, encoded as complete ALTO
+ network resources (e.g., a cost map or a network map) or
+ incremental updates.
+
+
+ +------------------------------------------------+
+ | |
+ +------+ |R1: Frontend/Open R2: Directory/Meta R3: Data |
+ | | "iget" base | +-----+ +-----+ +-----+ |
+ | | resource 1 | | | | | | | |
+ | |-------------|---->| | | | | | |
+ | | incremental | | | | |-------->| | |
+ | | transfer | | | | | | | |
+ | | resource | | | | | | | |
+ | |<------------|-----------------------| | | | |
+ |Client| | | | +-----+ +-----+ |
+ | | "iget" base | | | |
+ | | resource 2 | | | +-----+ +-----+ |
+ | |-------------|---->| | | | | | |
+ | | incremental | | | | | | | |
+ | | transfer | +-----+ | | ------->| | |
+ | | resource | | | | | |
+ | |<------------|-----------------------| | | | |
+ +------+ | +-----+ +-----+ |
+ | |
+ +------------------------------------------------+
+
+ Figure 17: Sample TIPS Deployment Model
+
+ Design Point: Component Resource Location
+
+ Design 1 (Single): all the three resource types at the same single
+ server (accessed via relative reference).
+
+ Design 2 (Flexible): all three resource types can be at their own
+ server (accessed via absolute reference).
+
+ Design 3 (Dir + Data): R2 and R3 must remain together, though R1
+ might not be on the same server.
+
+ This document supports Designs 1 and 3. For Design 1, the ALTO
+ server simply needs to always use the same host for the TIPS views.
+ For Design 3, the ALTO server can set tips-view-host to a different
+ server. Note that the deployment flexibility is at the logical
+ level, as these services can be distinguished by different paths and
+ potentially be routed to different physical servers by Layer 7 load
+ balancing. See Section 8.1 for a discussion on load balancing
+ considerations. Future documents could extend the protocol to
+ support Design 2.
+
+Appendix B. Conformance with "Building Protocols with HTTP" (RFC 9205)
+ Best Current Practices
+
+ This specification adheres fully to [RFC9205] as further elaborated
+ below:
+
+ * TIPS does not (as described in Section 3.1 of [RFC9205]):
+
+ | ...redefine, refine, or overlay the semantics of generic
+ | protocol elements such as methods, status codes, or existing
+ | header fields.
+
+ and instead focuses on
+
+ | ...protocol elements that are specific to [the TIPS]
+ | application -- namely, [its] HTTP resources.
+
+ * There are no statically defined URI components (Section 3.2 of
+ [RFC9205]).
+
+ * No minimum version of HTTP is specified by TIPS, which is
+ recommended (in Section 4.1 of [RFC9205]).
+
+ * The TIPS design follows the advice (in Section 4.1 of [RFC9205])
+ that:
+
+ | When specifying examples of protocol interactions, applications
+ | should document both the request and response messages with
+ | complete header sections, preferably in HTTP/1.1 format...
+
+ * TIPS uses URI templates, which is recommended (in Section 4.2 of
+ [RFC9205]).
+
+ * TIPS follows the pattern (in Section 4.4.1 of [RFC9205]) that:
+
+ | Generally, a client will begin interacting with a given
+ | application server by requesting an initial document that
+ | contains information about that particular deployment,
+ | potentially including links to other relevant resources. Doing
+ | so ensures that the deployment is as flexible as possible
+ | (potentially spanning multiple servers), allows evolution, and
+ | also gives the application the opportunity to tailor the
+ | "discovery document" to the client.
+
+ * TIPS uses existing HTTP schemes (Section 4.4.2 of [RFC9205]).
+
+ * TIPS defines its errors "to use the most applicable status code"
+ (Section 4.6 of [RFC9205]).
+
+ * TIPS does not (as in Section 4.11 of [RFC9205]):
+
+ | ...make assumptions about the relationship between separate
+ | requests on a single transport connection; doing so breaks many
+ | of the assumptions of HTTP as a stateless protocol and will
+ | cause problems in interoperability, security, operability, and
+ | evolution.
+
+ The only relationship between requests is that a client has to
+ first discover where a TIPS view of a resource will be served,
+ which is consistent with the URI discovery in Section 4.4.1 of
+ [RFC9205].
+
+Appendix C. Push-Mode TIPS Using HTTP Server Push
+
+ TIPS allows ALTO clients to subscribe to incremental updates of an
+ ALTO resource, and the specification in this document is based on the
+ current best practice of building such a service using basic HTTP.
+ Earlier versions of this document had investigated the possibility of
+ enabling push-mode TIPS (i.e., by taking advantage of the server push
+ feature in HTTP/2 and HTTP/3).
+
+ In the ideal case, push-mode TIPS can potentially improve performance
+ (e.g., latency) in more dynamic environments and use cases with wait-
+ free message delivery. Using the built-in HTTP server push also
+ results in minimal changes to the current protocol. While not
+ adopted due to the lack of server push support and increased protocol
+ complexity, push-mode TIPS remains a potential direction of protocol
+ improvement.
+
+Appendix D. Persistent HTTP Connections
+
+ Previous draft versions of this document use persistent HTTP
+ connections to detect the liveness of clients. However, this design
+ does not conform well with the best current practices of HTTP. For
+ example, if an ALTO client is accessing a TIPS view over an HTTP
+ proxy, the connection is not established directly between the ALTO
+ client and the ALTO server, but between the ALTO client and the proxy
+ and between the proxy and the ALTO server. Thus, using persistent
+ connections might not correctly detect the right liveness state.
+
+Acknowledgments
+
+ The authors of this document would like to thank Mark Nottingham and
+ Spencer Dawkins for providing invaluable reviews of earlier draft
+ versions of this document; Adrian Farrel, Qin Wu, and Jordi Ros
+ Giralt for their continuous feedback; Russ White, Donald Eastlake
+ 3rd, Martin Thomson, Bernard Aboba, Spencer Dawkins, Linda Dunbar,
+ and Sheng Jiang for the directorate reviews; Martin Duke for the area
+ director review; Francesca Palombini, Wesley Eddy, Roman Danyliw,
+ Murray Kucherawy, and Zaheduzzaman Sarker for the telechat and IESG
+ reviews; and Mohamed Boucadair for shepherding the document.
+
+Authors' Addresses
+
+ Kai Gao
+ Sichuan University
+ No.24 South Section 1, Yihuan Road
+ Chengdu
+ 610000
+ China
+ Email: kaigao@scu.edu.cn
+
+
+ Roland Schott
+ Deutsche Telekom
+ Deutsche-Telekom-Allee 9
+ 64295 Darmstadt
+ Germany
+ Email: Roland.Schott@telekom.de
+
+
+ Yang Richard Yang
+ Yale University
+ 51 Prospect Street
+ New Haven, CT 06511
+ United States of America
+ Email: yry@cs.yale.edu
+
+
+ Lauren Delwiche
+ Yale University
+ 51 Prospect Street
+ New Haven, CT 06511
+ United States of America
+ Email: lauren.delwiche@yale.edu
+
+
+ Lachlan Keller
+ Yale University
+ 51 Prospect Street
+ New Haven, CT 06511
+ United States of America
+ Email: lachlan.keller@aya.yale.edu