| rfc9621.original | rfc9621.txt | |||
|---|---|---|---|---|
| TAPS Working Group T. Pauly, Ed. | Internet Engineering Task Force (IETF) T. Pauly, Ed. | |||
| Internet-Draft Apple Inc. | Request for Comments: 9621 Apple Inc. | |||
| Intended status: Standards Track B. Trammell, Ed. | Category: Standards Track B. Trammell, Ed. | |||
| Expires: 12 May 2024 Google Switzerland GmbH | ISSN: 2070-1721 Google Switzerland GmbH | |||
| A. Brunstrom | A. Brunstrom | |||
| Karlstad University | Karlstad University | |||
| G. Fairhurst | G. Fairhurst | |||
| University of Aberdeen | University of Aberdeen | |||
| C. Perkins | C. S. Perkins | |||
| University of Glasgow | University of Glasgow | |||
| 9 November 2023 | December 2024 | |||
| Architecture and Requirements for Transport Services | Architecture and Requirements for Transport Services | |||
| draft-ietf-taps-arch-19 | ||||
| Abstract | Abstract | |||
| This document describes an architecture for exposing transport | This document describes an architecture that exposes transport | |||
| protocol features to applications for network communication. This | protocol features to applications for network communication. The | |||
| system exposes transport protocol features to applications for | Transport Services Application Programming Interface (API) is based | |||
| network communication. The Transport Services Application | on an asynchronous, event-driven interaction pattern. This API uses | |||
| Programming Interface (API) is based on an asynchronous, event-driven | messages for representing data transfer to applications and describes | |||
| interaction pattern. This API uses messages for representing data | how a Transport Services Implementation can use multiple IP | |||
| transfer to applications, and describes how a Transport Services | addresses, multiple protocols, and multiple paths and can provide | |||
| Implementation can use multiple IP addresses, multiple protocols, and | multiple application streams. This document provides the | |||
| multiple paths, and provide multiple application streams. This | architecture and requirements. It defines common terminology and | |||
| document provides the architecture and requirements. It defines | concepts to be used in definitions of a Transport Services API and a | |||
| common terminology and concepts to be used in definitions of a | Transport Services Implementation. | |||
| Transport Service API and a Transport Services Implementation. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| 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 https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 12 May 2024. | 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/rfc9621. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Background . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Background | |||
| 1.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Overview | |||
| 1.3. Specification of Requirements . . . . . . . . . . . . . . 5 | 1.3. Specification of Requirements | |||
| 1.4. Glossary of Key Terms . . . . . . . . . . . . . . . . . . 5 | 1.4. Glossary of Key Terms | |||
| 2. API Model . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2. API Model | |||
| 2.1. Event-Driven API . . . . . . . . . . . . . . . . . . . . 10 | 2.1. Event-Driven API | |||
| 2.2. Data Transfer Using Messages . . . . . . . . . . . . . . 11 | 2.2. Data Transfer Using Messages | |||
| 2.3. Flexible Implementation . . . . . . . . . . . . . . . . . 12 | 2.3. Flexible Implementation | |||
| 2.4. Coexistence . . . . . . . . . . . . . . . . . . . . . . . 13 | 2.4. Coexistence | |||
| 3. API and Implementation Requirements . . . . . . . . . . . . . 13 | 3. API and Implementation Requirements | |||
| 3.1. Provide Common APIs for Common Features . . . . . . . . . 14 | 3.1. Provide Common APIs for Common Features | |||
| 3.2. Allow Access to Specialized Features . . . . . . . . . . 15 | 3.2. Allow Access to Specialized Features | |||
| 3.3. Select Between Equivalent Protocol Stacks . . . . . . . . 16 | 3.3. Select Between Equivalent Protocol Stacks | |||
| 3.4. Maintain Interoperability . . . . . . . . . . . . . . . . 17 | 3.4. Maintain Interoperability | |||
| 3.5. Support Monitoring . . . . . . . . . . . . . . . . . . . 17 | 3.5. Support Monitoring | |||
| 4. Transport Services Architecture and Concepts . . . . . . . . 18 | 4. Transport Services Architecture and Concepts | |||
| 4.1. Transport Services API Concepts . . . . . . . . . . . . . 20 | 4.1. Transport Services API Concepts | |||
| 4.1.1. Endpoint Objects . . . . . . . . . . . . . . . . . . 22 | 4.1.1. Endpoint Objects | |||
| 4.1.2. Connections and Related Objects . . . . . . . . . . . 22 | 4.1.2. Connections and Related Objects | |||
| 4.1.3. Pre-establishment . . . . . . . . . . . . . . . . . . 24 | 4.1.3. Preestablishment | |||
| 4.1.4. Establishment Actions . . . . . . . . . . . . . . . . 24 | 4.1.4. Establishment Actions | |||
| 4.1.5. Data Transfer Objects and Actions . . . . . . . . . . 25 | 4.1.5. Data Transfer Objects and Actions | |||
| 4.1.6. Event Handling . . . . . . . . . . . . . . . . . . . 26 | 4.1.6. Event Handling | |||
| 4.1.7. Termination Actions . . . . . . . . . . . . . . . . . 27 | 4.1.7. Termination Actions | |||
| 4.1.8. Connection Groups . . . . . . . . . . . . . . . . . . 28 | 4.1.8. Connection Groups | |||
| 4.2. Transport Services Implementation . . . . . . . . . . . . 28 | 4.2. Transport Services Implementation | |||
| 4.2.1. Candidate Gathering . . . . . . . . . . . . . . . . . 30 | 4.2.1. Candidate Gathering | |||
| 4.2.2. Candidate Racing . . . . . . . . . . . . . . . . . . 30 | 4.2.2. Candidate Racing | |||
| 4.2.3. Separating Connection Contexts . . . . . . . . . . . 30 | 4.2.3. Separating Connection Contexts | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 | 5. IANA Considerations | |||
| 6. Security and Privacy Considerations . . . . . . . . . . . . . 31 | 6. Security and Privacy Considerations | |||
| 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | 7. References | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 7.1. Normative References | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 32 | 7.2. Informative References | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 33 | Acknowledgements | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| Many application programming interfaces (APIs) to provide transport | Many Application Programming Interfaces (APIs) to provide transport | |||
| interfaces to networks have been deployed, perhaps the most widely | interfaces to networks have been deployed, perhaps the most widely | |||
| known and imitated being the BSD Socket [POSIX] interface (Socket | known and imitated being the Socket interface (Socket API) [POSIX]. | |||
| API). The naming of objects and functions across these APIs is not | The naming of objects and functions across these APIs is not | |||
| consistent and varies depending on the protocol being used. For | consistent and varies, depending on the protocol being used. For | |||
| example, sending and receiving streams of data is conceptually the | example, the concept of sending and receiving streams of data is the | |||
| same for both an unencrypted Transmission Control Protocol (TCP) | same for both an unencrypted Transmission Control Protocol (TCP) | |||
| stream and operating on an encrypted Transport Layer Security (TLS) | stream and operating on an encrypted Transport Layer Security (TLS) | |||
| [RFC8446] stream over TCP, but applications cannot use the same | stream [RFC8446] over TCP, but applications cannot use the same | |||
| socket send() and recv() calls on top of both kinds of connections. | socket send() and recv() calls on top of both kinds of connections. | |||
| Similarly, terminology for the implementation of transport protocols | Similarly, terminology for the implementation of transport protocols | |||
| varies based on the context of the protocols themselves: terms such | varies based on the context of the protocols themselves: terms such | |||
| as "flow", "stream", "message", and "connection" can take on many | as "flow", "stream", "message", and "connection" can take on many | |||
| different meanings. This variety can lead to confusion when trying | different meanings. This variety can lead to confusion when trying | |||
| to understand the similarities and differences between protocols, and | to understand the similarities and differences between protocols and | |||
| how applications can use them effectively. | how applications can use them effectively. | |||
| The goal of the Transport Services System architecture is to provide | The goal of the Transport Services System architecture is to provide | |||
| a flexible and reusable system with a common interface for transport | a flexible and reusable system with a common interface for transport | |||
| protocols. An application uses the Transport Services System through | protocols. An application uses the Transport Services System through | |||
| an abstract Connection (we use capitalization to distinguish these | an abstract Connection (we use capitalization to distinguish these | |||
| from the underlying connections of, e.g., TCP). This provides | from the underlying connections of, for example, TCP). This provides | |||
| flexible connection establishment allowing an application to request | flexible connection establishment allowing an application to request | |||
| or require a set of properties. | or require a set of properties. | |||
| As applications adopt this interface, they will benefit from a wide | As applications adopt this interface, they will benefit from a wide | |||
| set of transport features that can evolve over time, and ensure that | set of transport features that can evolve over time and will ensure | |||
| the system providing the interface can optimize its behavior based on | that the system providing the interface can optimize its behavior | |||
| the application requirements and network conditions, without | based on the application requirements and network conditions, without | |||
| requiring changes to the applications. This flexibility enables | requiring changes to the applications. This flexibility enables | |||
| faster deployment of new features and protocols. | faster deployment of new features and protocols. | |||
| This architecture can also support applications by offering racing | This architecture can also support applications by offering racing | |||
| mechanisms (attempting multiple IP addresses, protocols, or network | mechanisms (attempting multiple IP addresses, protocols, or network | |||
| paths in parallel), which otherwise need to be implemented in each | paths in parallel), which otherwise need to be implemented in each | |||
| application separately (see Section 4.2.2). Racing selects one or | application separately (see Section 4.2.2). Racing selects one or | |||
| more candidates each with equivalent protocol stacks that are used to | more candidates, each with equivalent Protocol Stacks that are used | |||
| identify an optimal combination of transport protocol instance such | to identify an optimal combination of a transport protocol instance | |||
| as TCP, UDP, or another transport, together with configuration of | such as TCP, UDP, or another transport, together with configuration | |||
| parameters and interfaces. A Connection represents an object that, | of parameters and interfaces. A Connection represents an object | |||
| once established, can be used to send and receive messages. A | that, once established, can be used to send and receive messages. A | |||
| Connection can also be created from another Connection, by cloning, | Connection can also be created from another Connection, by cloning, | |||
| and then forms a part of a Connection Group whose Connections share | and then forms a part of a Connection Group whose Connections share | |||
| properties. | properties. | |||
| This document was developed in parallel with the specification of the | This document was developed in parallel with the specification of the | |||
| Transport Services API [I-D.ietf-taps-interface] and implementation | Transport Services API [RFC9622] and implementation guidelines | |||
| guidelines [I-D.ietf-taps-impl]. Although following the Transport | [RFC9623]. Although following the Transport Services Architecture | |||
| Services architecture does not require all APIs and implementations | does not require all APIs and implementations to be identical, a | |||
| to be identical, a common minimal set of features represented in a | common minimal set of features represented in a consistent fashion | |||
| consistent fashion will enable applications to be easily ported from | will enable applications to be easily ported from one implementation | |||
| one implementation of the Transport Services System to another. | of the Transport Services System to another. | |||
| 1.1. Background | 1.1. Background | |||
| The architecture of the Transport Services System is based on the | The architecture of the Transport Services System is based on the | |||
| survey of services provided by IETF transport protocols and | survey of services provided by IETF transport protocols and | |||
| congestion control mechanisms [RFC8095], and the distilled minimal | congestion control mechanisms [RFC8095] and the distilled minimal set | |||
| set of the features offered by transport protocols [RFC8923]. These | of the features offered by transport protocols [RFC8923]. These | |||
| documents identified common features and patterns across all | documents identified common features and patterns across all | |||
| transport protocols developed thus far in the IETF. | transport protocols developed thus far in the IETF. | |||
| Since transport security is an increasingly relevant aspect of using | Since transport security is an increasingly relevant aspect of using | |||
| transport protocols on the Internet, this document also considers the | transport protocols on the Internet, this document also considers the | |||
| impact of transport security protocols on the feature-set exposed by | impact of transport security protocols on the feature set exposed by | |||
| Transport Services [RFC8922]. | Transport Services [RFC8922]. | |||
| One of the key insights to come from identifying the minimal set of | One of the key insights to come from identifying the minimal set of | |||
| features provided by transport protocols [RFC8923] was that features | features provided by transport protocols [RFC8923] was that features | |||
| either require application interaction and guidance (referred to in | either (1) require application interaction and guidance (referred to | |||
| that document as Functional or Optimizing Features), or else can be | in that document as Functional or Optimizing Features) or (2) can be | |||
| handled automatically by an implementation of the Transport Services | handled automatically by an implementation of the Transport Services | |||
| System (referred to as Automatable Features). Among the identified | System (referred to as Automatable Features). Among the identified | |||
| Functional and Optimizing Features, some are common across all or | Functional and Optimizing Features, some are common across all or | |||
| nearly all transport protocols, while others present features that, | nearly all transport protocols, while others present features that, | |||
| if specified, would only be useful with a subset of protocols, but | if specified, would only be useful with a subset of protocols, but | |||
| would not harm the functionality of other protocols. For example, | would not harm the functionality of other protocols. For example, | |||
| some protocols can deliver messages faster for applications that do | some protocols can deliver messages more quickly for applications | |||
| not require messages to arrive in the order in which they were sent. | that do not require messages to arrive in the order in which they | |||
| This functionality needs to be explicitly allowed by the application, | were sent. This functionality needs to be explicitly allowed by the | |||
| since reordering messages would be undesirable in many cases. | application, since reordering messages would be undesirable in many | |||
| cases. | ||||
| 1.2. Overview | 1.2. Overview | |||
| This document describes the Transport Services System in three | The following sections describe the Transport Services System: | |||
| sections: | ||||
| * Section 2 describes how the Transport Services API model differs | * Section 2 describes how the Transport Services API model differs | |||
| from that of traditional socket-based APIs. Specifically, it | from that of socket-based APIs. Specifically, it offers | |||
| offers asynchronous event-driven interaction, the use of messages | asynchronous event-driven interaction, the use of messages for | |||
| for data transfer, and the flexibility to use different transport | data transfer, and the flexibility to use different transport | |||
| protocols and paths without requiring major changes to the | protocols and paths without requiring major changes to the | |||
| application. | application. | |||
| * Section 3 explains the fundamental requirements for a Transport | * Section 3 explains the fundamental requirements for a Transport | |||
| Services System. These principles are intended to make sure that | Services System. These principles are intended to make sure that | |||
| transport protocols can continue to be enhanced and evolve without | transport protocols can continue to be enhanced and evolve without | |||
| requiring significant changes by application developers. | requiring significant changes by application developers. | |||
| * Section 4 presents the Transport Services Implementation and | * Section 4 presents the Transport Services Implementation and | |||
| defines the concepts that are used by the API | defines the concepts that are used by the API [RFC9622] and | |||
| [I-D.ietf-taps-interface] and described in the implementation | described in the implementation guidelines [RFC9623]. This | |||
| guidelines [I-D.ietf-taps-impl]. This introduces the | introduces the Preconnection, which allows applications to | |||
| Preconnection, which allows applications to configure Connection | configure Connection Properties. | |||
| Properties. | ||||
| 1.3. Specification of Requirements | 1.3. Specification of Requirements | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 1.4. Glossary of Key Terms | 1.4. Glossary of Key Terms | |||
| This subsection provides a glossary of key terms related to the | This subsection provides a glossary of key terms related to the | |||
| Transport Services architecture. It provides a short description of | Transport Services Architecture. It provides a short description of | |||
| key terms that are later defined in this document. | key terms that are defined later in this document. | |||
| * Application: An entity that uses the transport layer for end-to- | Application: An entity that uses the transport layer for end-to-end | |||
| end delivery of data across the network [RFC8095]. | delivery of data across the network [RFC8095]. | |||
| * Cached State: The state and history that the Transport Services | Cached State: The state and history that the Transport Services | |||
| Implementation keeps for each set of the associated Endpoints that | Implementation keeps for each set of the associated Endpoints that | |||
| have been used previously. | have been used previously. | |||
| * Candidate Path: One path that is available to an application and | Candidate Path: One path that is available to an application and | |||
| conforms to the Selection Properties and System Policy during | conforms to the Selection Properties and System Policy during | |||
| racing. | racing. | |||
| * Candidate Protocol Stack: One Protocol Stack that can be used by | Candidate Protocol Stack: One Protocol Stack that can be used by an | |||
| an application for a Connection during racing. | application for a Connection during racing. | |||
| * Client: The peer responsible for initiating a Connection. | Client: The peer responsible for initiating a Connection. | |||
| * Clone: A Connection that was created from another Connection, and | Clone: A Connection that was created from another Connection and | |||
| forms a part of a Connection Group. | that forms a part of a Connection Group. | |||
| * Connection: Shared state of two or more Endpoints that persists | Connection: Shared state of two or more Endpoints that persists | |||
| across Messages that are transmitted and received between these | across Messages that are transmitted and received between these | |||
| Endpoints [RFC8303]. When this document (and other Transport | Endpoints [RFC8303]. When this document and other Transport | |||
| Services documents) use the capitalized "Connection" term, it | Services documents use the capitalized "Connection" term, it | |||
| refers to a Connection object that is being offered by the | refers to a Connection object that is being offered by the | |||
| Transport Services system, as opposed to more generic uses of the | Transport Services system, as opposed to more generic uses of the | |||
| word "connection". | word "connection". | |||
| * Connection Context: A set of stored properties across Connections, | Connection Context: A set of stored properties across Connections, | |||
| such as cached protocol state, cached path state, and heuristics, | such as cached protocol state, cached path state, and heuristics, | |||
| which can include one or more Connection Groups. | which can include one or more Connection Groups. | |||
| * Connection Group: A set of Connections that share properties and | Connection Group: A set of Connections that share properties and | |||
| caches. | caches. | |||
| * Connection Property: A Transport Property that controls per- | Connection Property: A Transport Property that controls per- | |||
| Connection behavior of a Transport Services implementation. | Connection behavior of a Transport Services Implementation. | |||
| * Endpoint: An entity that communicates with one or more other | Endpoint: An entity that communicates with one or more other | |||
| endpoints using a transport protocol. | endpoints using a transport protocol. | |||
| * Endpoint Identifier: An identifier that specifies one side of a | Endpoint Identifier: An identifier that specifies one side of a | |||
| Connection (local or remote), such as a hostname or URL. | Connection (local or remote), such as a hostname or URL. | |||
| * Equivalent Protocol Stacks: Protocol Stacks that can be safely | Equivalent Protocol Stacks: Protocol Stacks that can be safely | |||
| swapped or raced in parallel during establishment of a Connection. | swapped or raced in parallel during establishment of a Connection. | |||
| * Event: A primitive that is invoked by an Endpoint [RFC8303]. | Event: A primitive that is invoked by an Endpoint [RFC8303]. | |||
| * Framer: A data translation layer that can be added to a Connection | Framer: A data translation layer that can be added to a Connection | |||
| to define how application-layer Messages are transmitted over a | to define how application-layer Messages are transmitted over a | |||
| Protocol Stack. | Protocol Stack. | |||
| * Local Endpoint: The local Endpoint. | Local Endpoint: The local Endpoint. | |||
| * Local Endpoint Identifier: A representation of the application's | Local Endpoint Identifier: A representation of the application's | |||
| identifier for itself that it uses for a Connection. | identifier for itself that it uses for a Connection. | |||
| * Message: A unit of data that can be transferred between two | Message: A unit of data that can be transferred between two | |||
| Endpoints over a Connection. | Endpoints over a Connection. | |||
| * Message Property: A property that can be used to specify details | Message Property: A property that can be used to specify details | |||
| about Message transmission, or obtain details about the | about Message transmission or obtain details about the | |||
| transmission after receiving a Message. | transmission after receiving a Message. | |||
| * Parameter: A value passed between an application and a transport | Parameter: A value passed between an application and a transport | |||
| protocol by a primitive [RFC8303]. | protocol by a primitive [RFC8303]. | |||
| * Path: A representation of an available set of properties that a | Path: A representation of an available set of properties that a | |||
| Local Endpoint can use to communicate with a Remote Endpoint. | Local Endpoint can use to communicate with a Remote Endpoint. | |||
| * Peer: An Endpoint application party to a Connection. | Peer: An Endpoint application party to a Connection. | |||
| * Preconnection: an object that represents a Connection that has not | Preconnection: An object that represents a Connection that has not | |||
| yet been established. | yet been established. | |||
| * Preference: A preference to prohibit, avoid, ignore, prefer, or | Preference: A preference for prohibiting, avoiding, ignoring, | |||
| require a specific Transport Feature. | preferring, or requiring a specific transport feature. | |||
| * Primitive: A function call that is used to locally communicate | Primitive: A function call that is used to locally communicate | |||
| between an application and an Endpoint, which is related to one or | between an application and an Endpoint, which is related to one or | |||
| more Transport Features [RFC8303]. | more transport features [RFC8303]. | |||
| * Protocol Instance: A single instance of one protocol, including | Protocol Instance: A single instance of one protocol, including any | |||
| any state necessary to establish connectivity or send and receive | state necessary to establish connectivity or send and receive | |||
| Messages. | Messages. | |||
| * Protocol Stack: A set of Protocol Instances that are used together | Protocol Stack: A set of Protocol Instances that are used together | |||
| to establish connectivity or send and receive Messages. | to establish connectivity or send and receive Messages. | |||
| * Racing: The attempt to select between multiple Protocol Stacks | Racing: The attempt to select between multiple Protocol Stacks based | |||
| based on the Selection and Connection Properties communicated by | on the Selection and Connection Properties communicated by the | |||
| the application, along with any Security Parameters. | application, along with any Security Parameters. | |||
| * Remote Endpoint: The peer that a local Endpoint can communicate | Remote Endpoint: The peer that a local Endpoint can communicate with | |||
| with when a Connection is established. | when a Connection is established. | |||
| * Remote Endpoint Identifier: A representation of the application's | Remote Endpoint Identifier: A representation of the application's | |||
| identifier for a peer that can participate in establishing a | identifier for a peer that can participate in establishing a | |||
| Connection. | Connection. | |||
| * Rendezvous: The action of establishing a peer-to-peer Connection | Rendezvous: The action of establishing a peer-to-peer Connection | |||
| with a Remote Endpoint. | with a Remote Endpoint. | |||
| * Security Parameters: Parameters that define an application's | Security Parameters: Parameters that define an application's | |||
| requirements for authentication and encryption on a Connection. | requirements for authentication and encryption on a Connection. | |||
| * Server: The peer responsible for responding to a Connection | Selection Property: A Transport Property that can be set to | |||
| influence the selection of paths between the Local and Remote | ||||
| Endpoints. | ||||
| Server: The peer responsible for responding to a Connection | ||||
| initiation. | initiation. | |||
| * Socket: The combination of a destination IP address and a | Socket: The combination of a destination IP address and a | |||
| destination port number [RFC8303]. | destination port number [RFC8303]. | |||
| * System Policy: The input from an operating system or other global | System Policy: The input from an operating system or other global | |||
| preferences that can constrain or influence how an implementation | preferences that can constrain or influence how an implementation | |||
| will gather Candidate Paths and Protocol Stacks and race the | will gather Candidate Paths and Candidate Protocol Stacks and race | |||
| candidates during establishment of a Connection. | the candidates during establishment of a Connection. | |||
| * Selection Property: A Transport Property that can be set to | Transport Feature: A specific end-to-end feature that the transport | |||
| influence the selection of paths between the Local and Remote | layer provides to an application. | |||
| Endpoints. | ||||
| * Transport Feature: A specific end-to-end feature that the | Transport Property: A property of a transport protocol and the | |||
| transport layer provides to an application. | services it provides [RFC8095]. | |||
| * Transport Property: A property that expresses requirements, | Transport Service: A set of transport features, not associated with | |||
| prohibitions and preferences [RFC8095]. | any given framing protocol, that provides a complete service to an | |||
| application. | ||||
| * Transport Service: A set of transport features, without an | Transport Services API: The abstract interface [RFC9622] to a | |||
| association to any given framing protocol, that provides a | Transport Services Implementation [RFC9623]. | |||
| complete service to an application. | ||||
| * Transport Services Implementation: This consists of all objects | Transport Services Implementation: All objects and protocol | |||
| and protocol instances used internally to a system or library to | instances used internally to a system or library to implement the | |||
| implement the functionality needed to provide a transport service | functionality needed to provide a transport service across a | |||
| across a network, as required by the abstract interface. | network, as required by the abstract interface. | |||
| * Transport Services System: The Transport Services Implementation | Transport Services System: The Transport Services Implementation and | |||
| and the Transport Services API. | the Transport Services API. | |||
| 2. API Model | 2. API Model | |||
| The traditional model of using sockets can be represented as follows | The model of using sockets can be represented as follows (see | |||
| (see figure 1): | Figure 1): | |||
| * Applications create connections and transfer data using the Socket | * Applications create connections and transfer data using the Socket | |||
| API. | API. | |||
| * The Socket API provides the interface to the implementations of | * The Socket API provides the interface to the implementations of | |||
| TCP and UDP (typically implemented in the system's kernel). | TCP and UDP (typically implemented in the system's kernel). | |||
| * TCP and UDP in the kernel send and receive data over the available | * TCP and UDP in the kernel send and receive data over the available | |||
| network-layer interfaces. | network-layer interfaces. | |||
| * Sockets are bound directly to transport-layer and network-layer | * Sockets are bound directly to transport-layer and network-layer | |||
| addresses, obtained via a separate resolution step, usually | addresses, obtained via a separate resolution step, usually | |||
| performed by a system-provided DNS stub resolver. | performed by a system-provided DNS stub resolver. | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | Application | | | Application | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | | | | | | | | |||
| +------------+ +------------+ +--------------+ | +------------+ +------------+ +--------------+ | |||
| | DNS stub | | Stream API | | Datagram API | | | DNS Stub | | Stream API | | Datagram API | | |||
| | resolver | +------------+ +--------------+ | | Resolver | +------------+ +--------------+ | |||
| +------------+ | | | +------------+ | | | |||
| +---------------------------------+ | +---------------------------------+ | |||
| | TCP UDP | | | TCP UDP | | |||
| | Kernel Networking Stack | | | Kernel Networking Stack | | |||
| +---------------------------------+ | +---------------------------------+ | |||
| | | | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | Network Layer Interface | | | Network-Layer Interface | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| Figure 1: Socket API Model | Figure 1: Socket API Model | |||
| The architecture of the Transport Services System is an evolution of | The architecture of the Transport Services System is an evolution of | |||
| this general model of interaction. It both modernizes the API | this general model of interaction. It both modernizes the API | |||
| presented to applications by the transport layer and enriches the | presented to applications by the transport layer and enriches the | |||
| capabilities of the Transport Services Implementation below this API. | capabilities of the Transport Services Implementation below this API. | |||
| The Transport Services API [RFC9622] defines the interface for an | ||||
| application to create Connections and transfer data. It combines | ||||
| interfaces for multiple interaction patterns into a unified whole | ||||
| (see Figure 2). This offers generic functions and also the protocol- | ||||
| specific mappings for TCP, UDP, UDP-Lite, and other protocol layers. | ||||
| These mappings are extensible. Future documents could define similar | ||||
| mappings for new layers and for other transport protocols, such as | ||||
| QUIC [RFC9000]. | ||||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | Application | | | Application | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | | | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | Transport Services API | | | Transport Services API | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | | | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | Transport Services Implementation | | | Transport Services Implementation | | |||
| | (Using: DNS, UDP, TCP, SCTP, DCCP, TLS, QUIC, etc) | | | (Using DNS, UDP, TCP, SCTP, DCCP, TLS, QUIC, etc.) | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | | | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | Network Layer Interface | | | Network-Layer Interface | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| Figure 2: Transport Services API Model | Figure 2: Transport Services API Model | |||
| The Transport Services API [I-D.ietf-taps-interface] defines the | By combining name resolution with connection establishment and data | |||
| interface for an application to create Connections and transfer data. | transfer in a single API, it allows for more flexible implementations | |||
| It combines interfaces for multiple interaction patterns into a | to provide path and transport protocol agility on the application's | |||
| unified whole (see figure 2). This offers generic functions and also | behalf. | |||
| the protocol-specific mappings for TCP, UDP, UDP-Lite, and other | ||||
| protocol layers. These mapping are extensible. Future documents | ||||
| could define similar mappings for new layers and for other transport | ||||
| protocols, such as QUIC [RFC9000]. By combining name resolution with | ||||
| connection establishment and data transfer in a single API, it allows | ||||
| for more flexible implementations to provide path and transport | ||||
| protocol agility on the application's behalf. | ||||
| The Transport Services Implementation [I-D.ietf-taps-impl] is the | The Transport Services Implementation [RFC9623] is the component of | |||
| component of the Transport Services System that implements the | the Transport Services System that implements the transport-layer | |||
| transport layer protocols and other functions needed to send and | protocols and other functions needed to send and receive data. It is | |||
| receive data. It is responsible for mapping the API to a specific | responsible for mapping the API to a specific available transport | |||
| available transport Protocol Stack and managing the available network | Protocol Stack and managing the available network interfaces and | |||
| interfaces and paths. | paths. | |||
| There are key differences between the architecture of the Transport | There are key differences between the architecture of the Transport | |||
| Services System and the architecture of the Socket API: the API of | Services System and the architecture of the Socket API. The API of | |||
| the Transport Services System is asynchronous and event-driven; it | the Transport Services System: | |||
| uses messages for representing data transfer to applications; and it | ||||
| describes how a Transport Services Implementation can resolve | * is asynchronous and event-driven; | |||
| Endpoint Identifiers to use multiple IP addresses, multiple | ||||
| protocols, multiple paths, and provide multiple application streams. | * uses messages for representing data transfer to applications; | |||
| * describes how a Transport Services Implementation can resolve | ||||
| Endpoint Identifiers to use multiple IP addresses, multiple | ||||
| protocols, and multiple paths and to provide multiple application | ||||
| streams. | ||||
| 2.1. Event-Driven API | 2.1. Event-Driven API | |||
| Originally, the Socket API presented a blocking interface for | Originally, the Socket API presented a blocking interface for | |||
| establishing connections and transferring data. However, most modern | establishing connections and transferring data. However, most modern | |||
| applications interact with the network asynchronously. Emulation of | applications interact with the network asynchronously. Emulation of | |||
| an asynchronous interface using the Socket API can use a try-and-fail | an asynchronous interface using the Socket API can use a try-and-fail | |||
| model: If the application wants to read, but data has not yet been | model: if the application wants to read but data has not yet been | |||
| received from the peer, the call to read will fail. The application | received from the peer, the call to read will fail. The application | |||
| then waits and can try again later. | then waits and can try again later. | |||
| In contrast to the Socket API, all interactions using the Transport | In contrast to the Socket API, all interactions using the Transport | |||
| Services API are expected to be asynchronous. The API is defined | Services API are expected to be asynchronous. The API is defined | |||
| around an event-driven model (see Section 4.1.6), which models this | around an event-driven model (see Section 4.1.6), which models this | |||
| asynchronous interaction. Other forms of asynchronous communication | asynchronous interaction. Other forms of asynchronous communication | |||
| could also be available to applications, depending on the platform | could also be available to applications, depending on the platform | |||
| implementing the interface. | implementing the interface. | |||
| skipping to change at page 11, line 22 ¶ | skipping to change at line 498 ¶ | |||
| opposed to how the Socket API represents network resources as file | opposed to how the Socket API represents network resources as file | |||
| system objects that may be temporarily unavailable. | system objects that may be temporarily unavailable. | |||
| Separate from events, callbacks are also provided for asynchronous | Separate from events, callbacks are also provided for asynchronous | |||
| interactions with the Transport Services API that are not directly | interactions with the Transport Services API that are not directly | |||
| related to events on the network or network interfaces. | related to events on the network or network interfaces. | |||
| 2.2. Data Transfer Using Messages | 2.2. Data Transfer Using Messages | |||
| The Socket API provides a message interface for datagram protocols | The Socket API provides a message interface for datagram protocols | |||
| like UDP, but provides an unstructured stream abstraction for TCP. | like UDP but provides an unstructured stream abstraction for TCP. | |||
| While TCP has the ability to send and receive data as a byte-stream, | While TCP has the ability to send and receive data as a byte-stream, | |||
| most applications need to interpret structure within this byte- | most applications need to interpret structure within this byte- | |||
| stream. For example, HTTP/1.1 uses character delimiters to segment | stream. For example, HTTP/1.1 uses character delimiters to segment | |||
| messages over a byte-stream [RFC9112]; TLS record headers carry a | messages over a byte-stream [RFC9112]; TLS record headers carry a | |||
| version, content type, and length [RFC8446]; and HTTP/2 uses frames | version, content type, and length [RFC8446]; and HTTP/2 uses frames | |||
| to segment its headers and bodies [RFC9113]. | to segment its headers and bodies [RFC9113]. | |||
| The Transport Services API represents data as messages, so that it | The Transport Services API represents data as messages, so that it | |||
| more closely matches the way applications use the network. A | more closely matches the way applications use the network. A | |||
| message-based abstraction provides many benefits, such as: | message-based abstraction provides many benefits, such as: | |||
| skipping to change at page 11, line 44 ¶ | skipping to change at line 520 ¶ | |||
| * providing additional information to the Protocol Stack; | * providing additional information to the Protocol Stack; | |||
| * the ability to associate deadlines with messages, for applications | * the ability to associate deadlines with messages, for applications | |||
| that care about timing; | that care about timing; | |||
| * the ability to control reliability, which messages to retransmit | * the ability to control reliability, which messages to retransmit | |||
| when there is packet loss, and how best to make use of the data | when there is packet loss, and how best to make use of the data | |||
| that arrived; | that arrived; | |||
| * the ability to automatically assign messages and connections to | * the ability to automatically assign messages and connections to | |||
| underlying transport connections to utilize multi-streaming and | underlying transport connections to utilize multistreaming and | |||
| pooled connections. | pooled connections. | |||
| Allowing applications to interact with messages is backwards- | Allowing applications to interact with messages is backward- | |||
| compatible with existing protocols and APIs because it does not | compatible with existing protocols and APIs because it does not | |||
| change the wire format of any protocol. Instead, it provides the | change the wire format of any protocol. Instead, it provides the | |||
| Protocol Stack with additional information to allow it to make better | Protocol Stack with additional information to allow it to make better | |||
| use of modern transport services, while simplifying the application's | use of modern Transport Services, while simplifying the application's | |||
| role in parsing data. For protocols that inherently use a streaming | role in parsing data. For protocols that inherently use a streaming | |||
| abstraction, framers (Section 4.1.5) bridge the gap between the two | abstraction, framers (Section 4.1.5) bridge the gap between the two | |||
| abstractions. | abstractions. | |||
| 2.3. Flexible Implementation | 2.3. Flexible Implementation | |||
| The Socket API for protocols like TCP is generally limited to | The Socket API for protocols like TCP is generally limited to | |||
| connecting to a single address over a single interface (IP source | connecting to a single address over a single interface (IP source | |||
| address). It also presents a single stream to the application. | address). It also presents a single stream to the application. | |||
| Software layers built upon this API often propagate this limitation | Software layers built upon this API often propagate this limitation | |||
| of a single-address single-stream model. The Transport Services | of a single-address single-stream model. The Transport Services | |||
| architecture is designed: | Architecture is designed to: | |||
| * to handle multiple candidate endpoints, protocols, and paths; | * handle multiple candidate endpoints, protocols, and paths; | |||
| * to support candidate protocol racing to select the most optimal | * support candidate protocol racing to select the most optimal stack | |||
| stack in each situation; | in each situation; | |||
| * to support multipath and multistreaming protocols; | * support multipath and multistreaming protocols; | |||
| * to provide state caching and application control over it. | * provide state caching and application control over it. | |||
| A Transport Services Implementation is intended to be flexible at | A Transport Services Implementation is intended to be flexible at | |||
| connection establishment time, considering many different options and | connection establishment time, considering many different options and | |||
| trying to select the most optimal combinations by racing them and | trying to select the most optimal combinations by racing them and | |||
| measuring the results (see Section 4.2.1 and Section 4.2.2). This | measuring the results (see Sections 4.2.1 and 4.2.2). This requires | |||
| requires applications to specify identifiers for the Local and Remote | applications to specify identifiers for the Local and Remote Endpoint | |||
| Endpoint that are higher-level than IP addresses, such as a hostname | that are at a higher level than IP addresses, such as a hostname or | |||
| or URL, which are used by a Transport Services Implementation for | URL. These identifiers are used by a Transport Services | |||
| resolution, path selection, and racing. An implementation can | Implementation for resolution, path selection, and racing. An | |||
| further implement fallback mechanisms if connection establishment of | implementation can further implement fallback mechanisms if | |||
| one protocol fails or performance is detected to be unsatisfactory. | connection establishment for one protocol fails or performance is | |||
| determined to be unsatisfactory. | ||||
| Information used in connection establishment (e.g. cryptographic | Information used in connection establishment (e.g., cryptographic | |||
| resumption tokens, information about usability of certain protocols | resumption tokens, information about usability of certain protocols | |||
| on the path, results of racing in previous connections) are cached in | on the path, results of racing in previous connections) is cached in | |||
| the Transport Services Implementation. Applications have control | the Transport Services Implementation. Applications have control | |||
| over whether this information is used for a specific establishment, | over whether this information is used for a specific establishment, | |||
| in order to allow tradeoffs between efficiency and linkability. | in order to allow trade-offs between efficiency and linkability. | |||
| Flexibility after connection establishment is also important. | Flexibility after connection establishment is also important. | |||
| Transport protocols that can migrate between multiple network-layer | Transport protocols that can migrate between multiple network-layer | |||
| interfaces need to be able to process and react to interface changes. | interfaces need to be able to process and react to interface changes. | |||
| Protocols that support multiple application-layer streams need to | Protocols that support multiple application-layer streams need to | |||
| support initiating and receiving new streams using existing | support initiating and receiving new streams using existing | |||
| connections. | connections. | |||
| 2.4. Coexistence | 2.4. Coexistence | |||
| While the architecture of the Transport Services System is designed | While the architecture of the Transport Services System is designed | |||
| as an enhanced replacement for the Socket API, it need not replace it | as an enhanced replacement for the Socket API, it need not replace it | |||
| entirely on a system or platform; indeed, coexistence has been | entirely on a system or platform; indeed, coexistence has been | |||
| recommended for incremental deployability [RFC8170]. The | recommended for incremental deployability [RFC8170]. The | |||
| architecture is therefore designed such that it can run alongside | architecture is therefore designed such that it can run alongside | |||
| (or, indeed, on top of) an existing Socket API implementation; only | (or, indeed, on top of) an existing Socket API implementation; only | |||
| applications built to the Transport Services API are managed by the | applications built on the Transport Services API are managed by the | |||
| system's Transport Services Implementation. | system's Transport Services Implementation. | |||
| 3. API and Implementation Requirements | 3. API and Implementation Requirements | |||
| One goal of the architecture is to redefine the interface between | One goal of the architecture is to redefine the interface between | |||
| applications and transports in a way that allows the transport layer | applications and transports in a way that allows the transport layer | |||
| to evolve and improve without fundamentally changing the contract | to evolve and improve without fundamentally changing the contract | |||
| with the application. This requires a careful consideration of how | with the application. This requires careful consideration of how to | |||
| to expose the capabilities of protocols. The architecture also | expose the capabilities of protocols. The architecture also | |||
| encompasses system policies that can influence and inform how | encompasses system policies that can influence and inform how | |||
| transport protocols use a network path or interface. | transport protocols use a network path or interface. | |||
| There are several ways the Transport Services System can offer | There are several ways the Transport Services System can offer | |||
| flexibility to an application: it can provide access to transport | flexibility to an application. It can: | |||
| protocols and protocol features; it can use these protocols across | ||||
| multiple paths that could have different performance and functional | * provide access to transport protocols and protocol features; | |||
| characteristics; and it can communicate with different remote systems | ||||
| to optimize performance, robustness to failure, or some other metric. | * use these protocols across multiple paths that could have | |||
| different performance and functional characteristics; | ||||
| * communicate with different remote systems to optimize performance, | ||||
| robustness to failure, or some other metric. | ||||
| Beyond these, if the Transport Services API remains the same over | Beyond these, if the Transport Services API remains the same over | |||
| time, new protocols and features can be added to the Transport | time, new protocols and features can be added to the Transport | |||
| Services Implementation without requiring changes in applications for | Services Implementation without requiring changes in applications for | |||
| adoption. Similarly, this can provide a common basis for utilizing | adoption. Similarly, this can provide a common basis for utilizing | |||
| information about a network path or interface, enabling evolution | information about a network path or interface, enabling evolution | |||
| below the transport layer. | below the transport layer. | |||
| The normative requirements described in this section allow Transport | The normative requirements described in this section allow Transport | |||
| Services APIs and Transport Services Implementation to provide this | Services APIs and the Transport Services Implementation to provide | |||
| functionality without causing incompatibility or introducing security | this functionality without causing incompatibility or introducing | |||
| vulnerabilities. | security vulnerabilities. | |||
| 3.1. Provide Common APIs for Common Features | 3.1. Provide Common APIs for Common Features | |||
| Any functionality that is common across multiple transport protocols | Any functionality that is common across multiple transport protocols | |||
| SHOULD be made accessible through a unified set of calls using the | SHOULD be made accessible through a unified set of calls using the | |||
| Transport Services API. As a baseline, any Transport Services API | Transport Services API. As a baseline, any Transport Services API | |||
| SHOULD allow access to the minimal set of features offered by | SHOULD allow access to the minimal set of features offered by | |||
| transport protocols [RFC8923]. If that minimal set is updated or | transport protocols [RFC8923]. If that minimal set is updated or | |||
| expanded in the future, the Transport Services API ought to be | expanded in the future, the Transport Services API ought to be | |||
| extended to match. | extended to match. | |||
| An application can specify constraints and preferences for the | An application can specify constraints and preferences for the | |||
| protocols, features, and network interfaces it will use via | protocols, features, and network interfaces it will use via | |||
| Properties. Properties are used by an application to declare its | Properties. Properties are used by an application to declare its | |||
| preferences for how the transport service should operate at each | preferences for how the transport service should operate at each | |||
| stage in the lifetime of a connection. Transport Properties are | stage in the lifetime of a connection. Transport Properties are | |||
| subdivided into Selection Properties, which specify which paths and | subdivided into the following: | |||
| Protocol Stacks can be used and are preferred by the application; | ||||
| Connection Properties, which inform decisions made during connection | ||||
| establishment and fine-tune the established connection; and Message | ||||
| Properties, set on individual Messages. | ||||
| It is RECOMMENDED that the Transport Services API offers properties | * Selection Properties, which specify which paths and Protocol | |||
| Stacks can be used and are preferred by the application; | ||||
| * Connection Properties, which inform decisions made during | ||||
| connection establishment and fine-tune the established connection; | ||||
| and | ||||
| * Message Properties, which can be set on individual Messages. | ||||
| It is RECOMMENDED that the Transport Services API offer properties | ||||
| that are common to multiple transport protocols. This enables a | that are common to multiple transport protocols. This enables a | |||
| Transport Services System to appropriately select between protocols | Transport Services System to appropriately select between protocols | |||
| that offer equivalent features. Similarly, it is RECOMMENDED that | that offer equivalent features. Similarly, it is RECOMMENDED that | |||
| the Properties offered by the Transport Services API are applicable | the Properties offered by the Transport Services API be applicable to | |||
| to a variety of network layer interfaces and paths, which permits | a variety of network-layer interfaces and paths, to permit racing of | |||
| racing of different network paths without affecting the applications | different network paths without affecting the applications using the | |||
| using the API. Each is expected to have a default value. | API. Each is expected to have a default value. | |||
| It is RECOMMENDED that the default values for Properties are selected | It is RECOMMENDED that the default values for Properties be selected | |||
| to ensure correctness for the widest set of applications, while | to ensure correctness for the widest set of applications, while | |||
| providing the widest set of options for selection. For example, | providing the widest set of options for selection. For example, | |||
| since both applications that require reliability and those that do | since both applications that require reliability and those that do | |||
| not require reliability can function correctly when a protocol | not require reliability can function correctly when a protocol | |||
| provides reliability, reliability ought to be enabled by default. As | provides reliability, reliability ought to be enabled by default. As | |||
| another example, the default value for a Property regarding the | another example, the default value for a Property regarding the | |||
| selection of network interfaces ought to permit as many interfaces as | selection of network interfaces ought to permit as many interfaces as | |||
| possible. | possible. | |||
| Applications using the Transport Services API need to be designed to | Applications using the Transport Services API need to be designed to | |||
| skipping to change at page 15, line 13 ¶ | skipping to change at line 680 ¶ | |||
| constraints on protocol, path, and interface selection. | constraints on protocol, path, and interface selection. | |||
| 3.2. Allow Access to Specialized Features | 3.2. Allow Access to Specialized Features | |||
| There are applications that will need to control fine-grained details | There are applications that will need to control fine-grained details | |||
| of transport protocols to optimize their behavior and ensure | of transport protocols to optimize their behavior and ensure | |||
| compatibility with remote systems. It is therefore RECOMMENDED that | compatibility with remote systems. It is therefore RECOMMENDED that | |||
| the Transport Services API and the Transport Services Implementation | the Transport Services API and the Transport Services Implementation | |||
| permit more specialized protocol features to be used. | permit more specialized protocol features to be used. | |||
| A specialized feature could be needed by an application only when | Some specialized features could be needed by an application only when | |||
| using a specific protocol, and not when using others. For example, | using a specific protocol and not when using others. For example, if | |||
| if an application is using TCP, it could require control over the | an application is using TCP, it could require control over the User | |||
| User Timeout Option for TCP [RFC5482]; these options would not take | Timeout Option for TCP [RFC5482]. Such features would not take | |||
| effect for other transport protocols. In such cases, the API ought | effect for other transport protocols. In such cases, the API ought | |||
| to expose the features in such a way that they take effect when a | to expose the features in such a way that they take effect when a | |||
| particular protocol is selected, but do not imply that only that | particular protocol is selected but do not imply that only that | |||
| protocol could be used. For example, if the API allows an | protocol could be used. For example, if the API allows an | |||
| application to specify a preference to use the User Timeout Option, | application to specify a preference for using the User Timeout | |||
| communication would not fail when a protocol such as UDP is selected. | Option, communication would not fail when a protocol such as UDP is | |||
| selected. | ||||
| Other specialized features, however, can also be strictly required by | Other specialized features, however, can also be strictly required by | |||
| an application and thus further constrain the set of protocols that | an application and thus further constrain the set of protocols that | |||
| can be used. For example, if an application requires support for | can be used. For example, if an application requires support for | |||
| automatic handover or failover for a connection, only Protocol Stacks | automatic handover or failover for a connection, only Protocol Stacks | |||
| that provide this feature are eligible to be used, e.g., Protocol | that provide this feature are eligible to be used, e.g., Protocol | |||
| Stacks that include a multipath protocol or a protocol that supports | Stacks that include a multipath protocol or a protocol that supports | |||
| connection migration. A Transport Services API needs to allow | connection migration. A Transport Services API needs to allow | |||
| applications to define such requirements and constrain the options | applications to define such requirements and constrain the options | |||
| available to a Transport Services Implementation. Since such options | available to a Transport Services Implementation. Since such options | |||
| are not part of the core/common features, it will generally be simple | are not part of the core/common features, it will generally be simple | |||
| for an application to modify its set of constraints and change the | for an application to modify its set of constraints and change the | |||
| set of allowable protocol features without changing the core | set of allowable protocol features without changing the core | |||
| implementation. | implementation. | |||
| To control these specialized features, the application can declare | To control these specialized features, the application can declare | |||
| its preference – whether the presence of a specific feature is | its preference: whether the presence of a specific feature is | |||
| prohibited, should be avoided, can be ignored, is preferred, or is | prohibited, should be avoided, can be ignored, is preferred, or is | |||
| required in the pre-establishment phase. An implementation of a | required in the preestablishment phase. An implementation of a | |||
| Transport Services API would honor this preference and allow the | Transport Services API would honor this preference and allow the | |||
| application to query the availability of each specialized feature | application to query the availability of each specialized feature | |||
| after a successful establishment. | after successful establishment. | |||
| 3.3. Select Between Equivalent Protocol Stacks | 3.3. Select Between Equivalent Protocol Stacks | |||
| A Transport Services Implementation can attempt and select between | A Transport Services Implementation can attempt to use, and select | |||
| multiple Protocol Stacks based on the Selection and Connection | between, multiple Protocol Stacks based on the Selection and | |||
| Properties communicated by the application, along with any Security | Connection Properties communicated by the application, along with any | |||
| Parameters. The implementation can only attempt to use multiple | Security Parameters. The implementation can only attempt to use | |||
| Protocol Stacks when they are "equivalent", which means that the | multiple Protocol Stacks when they are "equivalent", which means that | |||
| stacks can provide the same Transport Properties and interface | the stacks can provide the same Transport Properties and interface | |||
| expectations as requested by the application. Equivalent Protocol | expectations as requested by the application. Equivalent Protocol | |||
| Stacks can be safely swapped or raced in parallel (see Section 4.2.2) | Stacks can be safely swapped or raced in parallel (see Section 4.2.2) | |||
| during connection establishment. | during connection establishment. | |||
| The following two examples show non-equivalent Protocol Stacks: | The following two examples show non-equivalent Protocol Stacks: | |||
| * If the application requires preservation of message boundaries, a | * If the application requires preservation of message boundaries, a | |||
| Protocol Stack that runs UDP as the top-level interface to the | Protocol Stack that runs UDP as the top-level interface to the | |||
| application is not equivalent to a Protocol Stack that runs TCP as | application is not equivalent to a Protocol Stack that runs TCP as | |||
| the top-level interface. A UDP stack would allow an application | the top-level interface. A UDP stack would allow an application | |||
| to read out message boundaries based on datagrams sent from the | to read out message boundaries based on datagrams sent from the | |||
| remote system, whereas TCP does not preserve message boundaries on | remote system, whereas TCP does not preserve message boundaries on | |||
| its own, but needs a framing protocol on top to determine message | its own but needs a framing protocol on top to determine message | |||
| boundaries. | boundaries. | |||
| * If the application specifies that it requires reliable | * If the application specifies that it requires reliable | |||
| transmission of data, then a Protocol Stack using UDP without any | transmission of data, then a Protocol Stack using UDP without any | |||
| reliability layer on top would not be allowed to replace a | reliability layer on top would not be allowed to replace a | |||
| Protocol Stack using TCP. | Protocol Stack using TCP. | |||
| The following example shows Equivalent Protocol Stacks: | The following example shows equivalent Protocol Stacks: | |||
| * If the application does not require reliable transmission of data, | * If the application does not require reliable transmission of data, | |||
| then a Protocol Stack that adds reliability could be regarded as | then a Protocol Stack that adds reliability could be regarded as | |||
| an Equivalent Protocol Stack as long as providing this would not | an equivalent Protocol Stack as long as providing this would not | |||
| conflict with any other application-requested properties. | conflict with any other application-requested properties. | |||
| A Transport Services Implementation can race different security | A Transport Services Implementation can race different security | |||
| protocols, e.g., if the System Policy is explicitly configured to | protocols, e.g., if the System Policy is explicitly configured to | |||
| consider them equivalent. A Transport Services implementation SHOULD | consider them equivalent. A Transport Services Implementation SHOULD | |||
| only race Protocol Stacks where the transport security protocols | only race Protocol Stacks where the transport security protocols | |||
| within the stacks are identical. To ensure that security protocols | within the stacks are identical. To ensure that security protocols | |||
| are not incorrectly swapped, a Transport Services Implementation MUST | are not incorrectly swapped, a Transport Services Implementation MUST | |||
| only select Protocol Stacks that meet application requirements | only select Protocol Stacks that meet application requirements | |||
| ([RFC8922]). A Transport Services Implementation MUST NOT | [RFC8922]. A Transport Services Implementation MUST NOT | |||
| automatically fall back from secure protocols to insecure protocols, | automatically fall back from secure protocols to insecure protocols | |||
| or to weaker versions of secure protocols. A Transport Services | or fall back to weaker versions of secure protocols. A Transport | |||
| Implementation MAY allow applications to explicitly specify which | Services Implementation MAY allow applications to explicitly specify | |||
| versions of a protocol ought to be permitted, e.g., to allow a | which versions of a protocol ought to be permitted, e.g., to allow a | |||
| minimum version of TLS 1.2 in case TLS 1.3 is not available. | minimum version of TLS 1.2 if TLS 1.3 is not available. | |||
| A Transport Services Implementation MAY specify security properties | A Transport Services Implementation MAY specify security properties | |||
| relating to how the system operates (e.g., requirements, | relating to how the system operates (e.g., requirements, | |||
| prohibitions, and preferences for the use of DNS Security Extensions | prohibitions, and preferences for the use of DNS Security Extensions | |||
| (DNSSEC) or DNS over HTTPS (DoH)). | (DNSSEC) or DNS over HTTPS (DoH)). | |||
| 3.4. Maintain Interoperability | 3.4. Maintain Interoperability | |||
| It is important to note that neither the Transport Services API | It is important to note that neither the Transport Services API | |||
| [I-D.ietf-taps-interface] nor the guidelines for implementation of | [RFC9622] nor the guidelines for implementation of the Transport | |||
| the Transport Service System [I-D.ietf-taps-impl] define new | Services System [RFC9623] define new protocols or protocol | |||
| protocols or protocol capabilities that affect what is communicated | capabilities that affect what is communicated across the network. A | |||
| across the network. A Transport Services System MUST NOT require | Transport Services System MUST NOT require that a peer on the other | |||
| that a peer on the other side of a connection uses the same API or | side of a connection use the same API or implementation. A Transport | |||
| implementation. A Transport Services Implementation acting as a | Services Implementation acting as a connection initiator is able to | |||
| connection initiator is able to communicate with any existing | communicate with any existing Endpoint that implements the transport | |||
| Endpoint that implements the transport protocol(s) and all the | protocol(s) and all the required properties selected. Similarly, a | |||
| required properties selected. Similarly, a Transport Services | Transport Services Implementation acting as a Listener can receive | |||
| Implementation acting as a Listener can receive connections for any | connections for any protocol that is supported from an existing | |||
| protocol that is supported from an existing initiator that implements | initiator that implements the protocol, independently of whether or | |||
| the protocol, independent of whether the initiator uses the Transport | not the initiator uses the Transport Services System. | |||
| Services System or not. | ||||
| A Transport Services Implemenation makes decisions that select | A Transport Services Implementation makes decisions that select | |||
| protocols and interfaces. In normal use, a given version of a | protocols and interfaces. In normal use, a given version of a | |||
| Transport Services System SHOULD result in consistent protocol and | Transport Services System SHOULD result in consistent protocol and | |||
| interface selection decisions for the same network conditions given | interface selection decisions for the same network conditions, given | |||
| the same set of Properties. This is intended to provide predictable | the same set of Properties. This is intended to provide predictable | |||
| outcomes to the application using the API. | outcomes to the application using the API. | |||
| 3.5. Support Monitoring | 3.5. Support Monitoring | |||
| The Transport Services API increases the layer of abstraction for | The Transport Services API increases the layer of abstraction for | |||
| applications, and it enables greater automation below the API. Such | applications, and it enables greater automation below the API. Such | |||
| increased abstraction comes at the cost of increased complexity when | increased abstraction comes at the cost of increased complexity when | |||
| application programmers, users or system administrators try to | application programmers, users, or system administrators try to | |||
| understand why any issues and failures may be happening. Transport | understand why any issues and failures may be happening. Transport | |||
| Services systems should therefore offer monitoring functions that | Services systems should therefore offer monitoring functions that | |||
| provide relevant debug and diagnostics information. For example, | provide relevant debug and diagnostics information. For example, | |||
| such monitoring functions could indicate the protocol(s) in use, the | such monitoring functions could indicate the protocol(s) in use, the | |||
| number of open connections per protocol, and any statistics that | number of open connections per protocol, and any statistics that | |||
| these protocols may offer. | these protocols may offer. | |||
| 4. Transport Services Architecture and Concepts | 4. Transport Services Architecture and Concepts | |||
| This section of the document describes the architecture non- | This section describes the architecture non-normatively and explains | |||
| normatively and explains the operation of a Transport Services | the operation of a Transport Services Implementation. The concepts | |||
| Implementation. The concepts defined in this document are intended | defined in this document are intended primarily for use in the | |||
| primarily for use in the documents and specifications that describe | documents and specifications that describe the Transport Services | |||
| the Transport Services System. This includes the architecture, the | System. This includes the architecture, the Transport Services API, | |||
| Transport Services API and the associated Transport Services | and the associated Transport Services Implementation. While the | |||
| Implementation. While the specific terminology can be used in some | specific terminology can be used in some implementations, it is | |||
| implementations, it is expected that there will remain a variety of | expected that there will remain a variety of terms used by running | |||
| terms used by running code. | code. | |||
| The architecture divides the concepts for Transport Services System | The architecture divides the concepts for the Transport Services | |||
| into two categories: | System into two categories: | |||
| 1. API concepts, which are intended to be exposed to applications; | 1. API concepts, which are intended to be exposed to applications; | |||
| and | and | |||
| 2. System-implementation concepts, which are intended to be | 2. System-implementation concepts, which are intended to be | |||
| internally used by a Transport Services Implementation. | internally used by a Transport Services Implementation. | |||
| The following diagram summarizes the top-level concepts in a | The following diagram summarizes the top-level concepts in a | |||
| Transport Services System and how they relate to one another. | Transport Services System and how they relate to one another. | |||
| skipping to change at page 19, line 36 ¶ | skipping to change at line 859 ¶ | |||
| | | | | | | | | |||
| | (Candidate Racing) | +-----------------+ | | | (Candidate Racing) | +-----------------+ | | |||
| | | | System | | | | | | System | | | |||
| | | | Policy | | | | | | Policy | | | |||
| | +----------v-----+ +-----------------+ | | | +----------v-----+ +-----------------+ | | |||
| | | Protocol | | | | | Protocol | | | |||
| +-------------+ Stack(s) +----------------------+ | +-------------+ Stack(s) +----------------------+ | |||
| +-------+--------+ | +-------+--------+ | |||
| V | V | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | Network Layer Interface | | | Network-Layer Interface | | |||
| +-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| Figure 3: Concepts and Relationships in the Architecture of the | Figure 3: Concepts and Relationships in the Architecture of the | |||
| Transport Services System | Transport Services System | |||
| The Transport Services Implementation includes the Cached State and | The Transport Services Implementation includes the Cached State and | |||
| System Policy. | System Policy. | |||
| The System Policy provides input from an operating system or other | The System Policy provides input from an operating system or other | |||
| global preferences that can constrain or influence how an | global preferences that can constrain or influence how an | |||
| implementation will gather Candidate Paths and Protocol Stacks and | implementation will gather Candidate Paths and Protocol Stacks and | |||
| race the candidates when establishing a Connection. As the details | race the candidates when establishing a Connection. As the details | |||
| of System Policy configuration and enforcement are largely platform- | of System Policy configuration and enforcement are largely dependent | |||
| and implementation- dependent, and do not affect application-level | on the platform and implementation and do not affect application- | |||
| interoperability, the Transport Services API | level interoperability, the Transport Services API [RFC9622] does not | |||
| [I-D.ietf-taps-interface] does not specify an interface for reading | specify an interface for reading or writing System Policy. | |||
| or writing System Policy. | ||||
| The Cached State is the state and history that the Transport Services | The Cached State is the state and history that the Transport Services | |||
| Implementation keeps for each set of associated Endpoints that have | Implementation keeps for each set of associated Endpoints that have | |||
| previously been used. An application ought to explicitly request any | previously been used. An application ought to explicitly request any | |||
| required or desired properties via the Transport Services API. | required or desired properties via the Transport Services API. | |||
| 4.1. Transport Services API Concepts | 4.1. Transport Services API Concepts | |||
| Fundamentally, a Transport Services API needs to provide Connection | Fundamentally, a Transport Services API needs to provide Connection | |||
| objects (Section 4.1.2) that allow applications to establish | objects (Section 4.1.2) that allow applications to establish | |||
| communication, and then send and receive data. These could be | communication and then send and receive data. These could be exposed | |||
| exposed as handles or referenced objects, depending on the chosen | as handles or referenced objects, depending on the chosen programming | |||
| programming language. | language. | |||
| Beyond the Connection objects, there are several high-level groups of | Beyond the Connection objects, there are several high-level groups of | |||
| actions that any Transport Services API needs to provide: | actions that any Transport Services API needs to provide: | |||
| * Pre-establishment (Section 4.1.3) encompasses the properties that | * Preestablishment (Section 4.1.3) encompasses the properties that | |||
| an application can pass to describe its intent, requirements, | an application can pass to describe its intent, requirements, | |||
| prohibitions, and preferences for its networking operations. | prohibitions, and preferences for its networking operations. | |||
| These properties apply to multiple transport protocols, unless | These properties apply to multiple transport protocols, unless | |||
| otherwise specified. Properties specified during pre- | otherwise specified. Properties specified during preestablishment | |||
| establishment can have a large impact on the rest of the | can have a large impact on the rest of the interface: they modify | |||
| interface: they modify how establishment occurs, they influence | how establishment occurs, influence the expectations around data | |||
| the expectations around data transfer, and they determine the set | transfer, and determine the set of events that will be supported. | |||
| of events that will be supported. | ||||
| * Establishment (Section 4.1.4) focuses on the actions that an | * Establishment (Section 4.1.4) focuses on the actions that an | |||
| application takes on the Connection objects to prepare for data | application takes on the Connection objects to prepare for data | |||
| transfer. | transfer. | |||
| * Data Transfer (Section 4.1.5) consists of how an application | * Data transfer (Section 4.1.5) consists of how an application | |||
| represents the data to be sent and received, the functions | represents the data to be sent and received, the functions | |||
| required to send and receive that data, and how the application is | required to send and receive that data, and how the application is | |||
| notified of the status of its data transfer. | notified of the status of its data transfer. | |||
| * Event Handling (Section 4.1.6) defines categories of notifications | * Event handling (Section 4.1.6) defines categories of notifications | |||
| that an application can receive during the lifetime of a | that an application can receive during the lifetime of a | |||
| Connection. Events also provide opportunities for the application | Connection. Events also provide opportunities for the application | |||
| to interact with the underlying transport by querying state or | to interact with the underlying transport by querying state or | |||
| updating maintenance options. | updating maintenance options. | |||
| * Termination (Section 4.1.7) focuses on the methods by which data | * Termination (Section 4.1.7) focuses on the methods by which data | |||
| transmission is stopped, and connection state is torn down. | transmission is stopped and connection state is torn down. | |||
| The diagram below provides a high-level view of the actions and | The diagram below provides a high-level view of the actions and | |||
| events during the lifetime of a Connection object. Note that some | events during the lifetime of a Connection object. Note that some | |||
| actions are alternatives (e.g., whether to initiate a connection or | actions are alternatives (e.g., whether to initiate a connection or | |||
| to listen for incoming connections), while others are optional (e.g., | listen for incoming connections), while others are optional (e.g., | |||
| setting Connection and Message Properties in pre-establishment) or | setting Connection and Message Properties in preestablishment) or | |||
| have been omitted for brevity and simplicity. | have been omitted for brevity and simplicity. | |||
| Pre-establishment : Established : Termination | Preestablishment : Established : Termination | |||
| ----------------- : ----------- : ----------- | ----------------- : ----------- : ----------- | |||
| : : | : : | |||
| +-- Local Endpoint : Message : | +-- Local Endpoint : Message : | |||
| +-- Remote Endpoint : Receive() | : | +-- Remote Endpoint : Receive() | : | |||
| +-- Transport Properties : Send() | : | +-- Transport Properties : Send() | : | |||
| +-- Security Parameters : | : | +-- Security Parameters : | : | |||
| | : | : | | : | : | |||
| | InitiateWithSend() | Close() : | | InitiateWithSend() | Close() : | |||
| | +---------------+ Initiate() +-----+------+ Abort() : | | +---------------+ Initiate() +-----+------+ Abort() : | |||
| +---+ Preconnection |------------->| Connection |-----------> Closed | +---+ Preconnection |------------->| Connection |-----------> Closed | |||
| +---------------+ Rendezvous() +------------+ : | +---------------+ Rendezvous() +------------+ : | |||
| Listen() | : | | : | Listen() | : | | : | |||
| | : | v : | | : | v : | |||
| v : | Connection : | v : | Connection : | |||
| +----------+ : | Ready : | +----------+ : | Ready : | |||
| | Listener |----------------------+ : | | Listener |----------------------+ : | |||
| +----------+ Connection Received : | +----------+ Connection Received : | |||
| : : | : : | |||
| Figure 4: The lifetime of a Connection object | Figure 4: The Lifetime of a Connection Object | |||
| In this diagram, the lifetime of a Connection object is divided into | In this diagram, the lifetime of a Connection object is divided into | |||
| three phases: pre-establishment, the Established state, and | three phases: preestablishment, the Established state, and | |||
| Termination. | termination of a connection. | |||
| Pre-establishment is based around a Preconnection object, that | Preestablishment is based around a Preconnection object containing | |||
| contains various sub-objects that describe the properties and | various sub-objects that describe the properties and parameters of | |||
| parameters of desired Connections (Local and Remote Endpoints, | desired Connections (Local and Remote Endpoints, Transport | |||
| Transport Properties, and Security Parameters). A Preconnection can | Properties, and Security Parameters). A Preconnection can be used to | |||
| be used to start listening for inbound connections, in which case a | start listening for inbound connections -- in which case a Listener | |||
| Listener object is created, or can be used to establish a new | object is created -- or can be used to establish a new connection | |||
| connection directly using Initiate (for outbound connections) or | directly using Initiate (for outbound connections) or Rendezvous (for | |||
| Rendezvous (for peer-to-peer connections). | peer-to-peer connections). | |||
| Once a Connection is in the Established state, an application can | Once a Connection is in the Established state, an application can | |||
| send and receive Message objects, and receive state updates. | send and receive Message objects and can receive state updates. | |||
| Closing or aborting a connection, either locally or from the peer, | Closing or aborting a connection, either locally or from the peer, | |||
| can terminate a connection. | can terminate a connection. | |||
| 4.1.1. Endpoint Objects | 4.1.1. Endpoint Objects | |||
| An Endpoint Identifier specifies one side of a transport connection. | An Endpoint Identifier specifies one side of a transport connection. | |||
| Endpoints can be Local Endpoints or Remote Endpoints, and the | Endpoints can be Local Endpoints or Remote Endpoints, and the | |||
| Endpoint Identifiers can respectively represent an identity that the | Endpoint Identifiers can respectively represent an identity that the | |||
| application uses for the source or destination of a connection. An | application uses for the source or destination of a connection. An | |||
| Endpoint Identifier can be specified at various levels of | Endpoint Identifier can be specified at various levels of | |||
| abstraction. An Endpoint Identifier at a higher level of abstraction | abstraction. An Endpoint Identifier at a higher level of abstraction | |||
| (such as a hostname) can be resolved to more concrete identities | (such as a hostname) can be resolved to more concrete identities | |||
| (such as IP addresses). A Remote Endpoint Identifier can also | (such as IP addresses). A Remote Endpoint Identifier can also | |||
| represent a multicast group or anycast address. In the case of | represent a multicast group or anycast address. In the case of | |||
| multicast, this selects a multicast transport for communication. | multicast, a multicast transport will be selected for communication. | |||
| * Remote Endpoint Identifier: The Remote Endpoint Identifier | Remote Endpoint Identifier: The Remote Endpoint Identifier | |||
| represents the application's identifier for a peer that can | represents the application's identifier for a peer that can | |||
| participate in a transport connection; for example, the | participate in a transport connection, for example, the | |||
| combination of a DNS name for the peer and a service name/port. | combination of a DNS name for the peer and a service name/port. | |||
| * Local Endpoint Identifier: The Local Endpoint Identifier | Local Endpoint Identifier: The Local Endpoint Identifier represents | |||
| represents the application's identifier for itself that it uses | the application's identifier for itself that it uses for transport | |||
| for transport connections; for example, a local IP address and | connections, for example, a local IP address and port. | |||
| port. | ||||
| 4.1.2. Connections and Related Objects | 4.1.2. Connections and Related Objects | |||
| * Connection: A Connection object represents one or more active | Connection: A Connection object represents one or more active | |||
| transport protocol instances that can send and/or receive Messages | transport protocol instances that can send and/or receive Messages | |||
| between Local and Remote Endpoints. It is an abstraction that | between Local and Remote Endpoints. It is an abstraction that | |||
| represents the communication. The Connection object holds state | represents the communication. The Connection object holds state | |||
| pertaining to the underlying transport protocol instances and any | pertaining to the underlying transport protocol instances and any | |||
| ongoing data transfers. For example, an active Connection can | ongoing data transfers. For example, an active Connection can | |||
| represent a connection-oriented protocol such as TCP, or can | represent a connection-oriented protocol such as TCP, or it can | |||
| represent a fully-specified 5-tuple for a connectionless protocol | represent a fully specified 5-tuple for a connectionless protocol | |||
| such as UDP, where the Connection remains an abstraction at the | such as UDP, where the Connection remains an abstraction at the | |||
| endpoints. It can also represent a pool of transport protocol | endpoints. It can also represent a pool of transport protocol | |||
| instances, e.g., a set of TCP and QUIC connections to equivalent | instances, e.g., a set of TCP and QUIC connections to equivalent | |||
| endpoints, or a stream of a multi-streaming transport protocol | endpoints, or a stream of a multistreaming transport protocol | |||
| instance. Connections can be created from a Preconnection or by a | instance. Connections can be created from a Preconnection or by a | |||
| Listener. | Listener. | |||
| * Preconnection: A Preconnection object is a representation of a | Preconnection: A Preconnection object is a representation of a | |||
| Connection that has not yet been established. It has state that | Connection that has not yet been established. It has state that | |||
| describes parameters of the Connection: the Local Endpoint | describes parameters of the Connection: the Local Endpoint | |||
| Identifier from which that Connection will be established, the | Identifier from which that Connection will be established, the | |||
| Remote Endpoint Identifier (Section 4.1.3) to which it will | Remote Endpoint Identifier to which it will connect, and Transport | |||
| connect, and Transport Properties that influence the paths and | Properties that influence the paths and protocols a Connection | |||
| protocols a Connection will use. A Preconnection can be either | will use. A Preconnection can be either fully specified | |||
| fully specified (representing a single possible Connection), or it | (representing a single possible Connection) or partially specified | |||
| can be partially specified (representing a family of possible | (representing a family of possible Connections). The Local | |||
| Connections). The Local Endpoint (Section 4.1.3) is required for | Endpoint (Section 4.1.3) is required for a Preconnection used to | |||
| a Preconnection used to Listen for incoming Connections, but | Listen for incoming Connections but is optional if it is used to | |||
| optional if it is used to Initiate a Connection. The Remote | Initiate a Connection. The Remote Endpoint Identifier is required | |||
| Endpoint Identifier is required in a Preconnection that used to | in a Preconnection that is used to Initiate a Connection but is | |||
| Initiate a Connection, but is optional if it is used to Listen for | optional if it is used to Listen for incoming Connections. The | |||
| incoming Connections. The Local Endpoint Identifier and the | Local Endpoint Identifier and the Remote Endpoint Identifier are | |||
| Remote Endpoint Identifier are both required if a peer-to-peer | both required if a peer-to-peer Rendezvous is to occur based on | |||
| Rendezvous is to occur based on the Preconnection. | the Preconnection. | |||
| * Transport Properties: Transport Properties allow the application | Transport Properties: Transport Properties allow the application to | |||
| to express their requirements, prohibitions, and preferences and | express requirements, prohibitions, and preferences and configure | |||
| configure a Transport Services Implementation. There are three | a Transport Services Implementation. There are three kinds of | |||
| kinds of Transport Properties: | Transport Properties: | |||
| - Selection Properties (Section 4.1.3): Selection Properties can | Selection Properties (Section 4.1.3): Selection Properties can | |||
| only be specified on a Preconnection. | only be specified on a Preconnection. | |||
| - Connection Properties (Section 4.1.3): Connection Properties | Connection Properties (Section 4.1.3): Connection Properties can | |||
| can be specified on a Preconnection and changed on the | be specified on a Preconnection and changed on the Connection. | |||
| Connection. | ||||
| - Message Properties (Section 4.1.5): Message Properties can be | Message Properties (Section 4.1.5): Message Properties can be | |||
| specified as defaults on a Preconnection or a Connection, and | specified as defaults on a Preconnection or a Connection and | |||
| can also be specified during data transfer to affect specific | can also be specified during data transfer to affect specific | |||
| Messages. | Messages. | |||
| * Listener: A Listener object accepts incoming transport protocol | Listener: A Listener object accepts incoming transport protocol | |||
| connections from Remote Endpoints and generates corresponding | connections from Remote Endpoints and generates corresponding | |||
| Connection objects. It is created from a Preconnection object | Connection objects. It is created from a Preconnection object | |||
| that specifies the type of incoming Connections it will accept. | that specifies the type of incoming Connections it will accept. | |||
| 4.1.3. Pre-establishment | 4.1.3. Preestablishment | |||
| * Selection Properties: The Selection Properties consist of the | Selection Properties: Selection Properties consist of the properties | |||
| properties that an application can set to influence the selection | that an application can set to influence the selection of paths | |||
| of paths between the Local and Remote Endpoints, to influence the | between the Local and Remote Endpoints, influence the selection of | |||
| selection of transport protocols, or to configure the behavior of | transport protocols, or configure the behavior of generic | |||
| generic transport protocol features. These properties can take | transport protocol features. These properties can take the form | |||
| the form of requirements, prohibitions, or preferences. Examples | of requirements, prohibitions, or preferences. Examples of | |||
| of properties that influence path selection include the interface | properties that influence path selection include the interface | |||
| type (such as a Wi-Fi connection, or a Cellular LTE connection), | type (such as a Wi-Fi connection or a Cellular LTE connection), | |||
| requirements around the largest Message that can be sent, or | requirements around the largest Message that can be sent, or | |||
| preferences for throughput and latency. Examples of properties | preferences for throughput and latency. Examples of properties | |||
| that influence protocol selection and configuration of transport | that influence protocol selection and configuration of transport | |||
| protocol features include reliability, multipath support, and fast | protocol features include reliability, multipath support, and | |||
| open support. | support for TCP Fast Open. | |||
| * Connection Properties: The Connection Properties are used to | Connection Properties: Connection Properties are used to configure | |||
| configure protocol-specific options and control per-connection | protocol-specific options and control per-connection behavior of a | |||
| behavior of a Transport Services Implementation; for example, a | Transport Services Implementation; for example, a protocol- | |||
| protocol-specific Connection Property can express that if TCP is | specific Connection Property can express that if TCP is used, the | |||
| used, the implementation ought to use the User Timeout Option. | implementation ought to use the User Timeout Option. Note that | |||
| Note that the presence of such a property does not require that a | the presence of such a property does not require that a specific | |||
| specific protocol will be used. In general, these properties do | protocol be used. In general, these properties do not explicitly | |||
| not explicitly determine the selection of paths or protocols, but | determine the selection of paths or protocols but can be used by | |||
| can be used by an implementation during connection establishment. | an implementation during connection establishment. Connection | |||
| Connection Properties are specified on a Preconnection prior to | Properties are specified on a Preconnection prior to Connection | |||
| Connection establishment, and can be modified on the Connection | establishment and can be modified on the Connection later. | |||
| later. Changes made to Connection Properties after Connection | Changes made to Connection Properties after Connection | |||
| establishment take effect on a best-effort basis. | establishment take effect on a best-effort basis. | |||
| * Security Parameters: Security Parameters define an application's | Security Parameters: Security Parameters define an application's | |||
| requirements for authentication and encryption on a Connection. | requirements for authentication and encryption on a Connection. | |||
| They are used by Transport Security protocols (such as those | They are used by transport security protocols (such as those | |||
| described in [RFC8922]) to establish secure Connections. Examples | described in [RFC8922]) to establish secure Connections. Examples | |||
| of parameters that can be set include local identities, private | of parameters that can be set include local identities, private | |||
| keys, supported cryptographic algorithms, and requirements for | keys, supported cryptographic algorithms, and requirements for | |||
| validating trust of remote identities. Security Parameters are | validating trust of remote identities. Security Parameters are | |||
| primarily associated with a Preconnection object, but properties | primarily associated with a Preconnection object, but properties | |||
| related to identities can be associated directly with Endpoints. | related to identities can be associated directly with Endpoints. | |||
| 4.1.4. Establishment Actions | 4.1.4. Establishment Actions | |||
| * Initiate: The primary action that an application can take to | Initiate: The primary action that an application can take to create | |||
| create a Connection to a Remote Endpoint, and prepare any required | a Connection to a Remote Endpoint and prepare any required local | |||
| local or remote state to enable the transmission of Messages. For | or remote state to enable the transmission of Messages. For some | |||
| some protocols, this will initiate a client-to-server style | protocols, this will initiate a client-to-server-style handshake; | |||
| handshake; for other protocols, this will just establish local | for other protocols, this will just establish local state (e.g., | |||
| state (e.g., with connectionless protocols such as UDP). The | with connectionless protocols such as UDP). The process of | |||
| process of identifying options for connecting, such as resolution | identifying options for connecting, such as resolution of the | |||
| of the Remote Endpoint Identifier, occurs in response to the | Remote Endpoint Identifier, occurs in response to the Initiate | |||
| Initiate call. | call. | |||
| * Listen: Enables a Listener to accept incoming connections. The | Listen: Enables a Listener to accept incoming connections. The | |||
| Listener will then create Connection objects as incoming | Listener will then create Connection objects as incoming | |||
| connections are accepted (Section 4.1.6). Listeners by default | connections are accepted (Section 4.1.6). Listeners by default | |||
| register with multiple paths, protocols, and Local Endpoints, | register with multiple paths, protocols, and Local Endpoints, | |||
| unless constrained by Selection Properties and/or the specified | unless constrained by Selection Properties and/or the specified | |||
| Local Endpoint Identifier(s). Connections can be accepted on any | Local Endpoint Identifier(s). Connections can be accepted on any | |||
| of the available paths or endpoints. | of the available paths or endpoints. | |||
| * Rendezvous: The action of establishing a peer-to-peer connection | Rendezvous: The action of establishing a peer-to-peer connection | |||
| with a Remote Endpoint. It simultaneously attempts to initiate a | with a Remote Endpoint. It simultaneously attempts to initiate a | |||
| connection to a Remote Endpoint while listening for an incoming | connection to a Remote Endpoint while listening for an incoming | |||
| connection from that Endpoint. The process of identifying options | connection from that Endpoint. The process of identifying options | |||
| for the connection, such as resolution of the Remote Endpoint | for the connection, such as resolution of the Remote Endpoint | |||
| Identifier(s), occurs in response to the Rendezvous call. As with | Identifier(s), occurs in response to the Rendezvous call. As with | |||
| Listeners, the set of local paths and endpoints is constrained by | Listeners, the set of local paths and endpoints is constrained by | |||
| Selection Properties. If successful, the Rendezvous call | Selection Properties. If successful, the Rendezvous call | |||
| generates and asynchronously returns a Connection object to | generates and asynchronously returns a Connection object to | |||
| represent the established peer-to-peer connection. The processes | represent the established peer-to-peer connection. The processes | |||
| by which connections are initiated during a Rendezvous action will | by which connections are initiated during a Rendezvous action will | |||
| depend on the set of Local and Remote Endpoints configured on the | depend on the set of Local and Remote Endpoints configured on the | |||
| Preconnection. For example, if the Local and Remote Endpoints are | Preconnection. For example, if the Local and Remote Endpoints are | |||
| TCP host candidates, then a TCP simultaneous open [RFC9293] might | TCP host candidates, then a TCP simultaneous open [RFC9293] might | |||
| be performed. However, if the set of Local Endpoints includes | be performed. However, if the set of Local Endpoints includes | |||
| server reflexive candidates, such as those provided by STUN | server-reflexive candidates, such as those provided by STUN | |||
| (Session Traversal Utilities for NAT) [RFC5389], a Rendezvous | (Session Traversal Utilities for NAT) [RFC8489], a Rendezvous | |||
| action will race candidates in the style of the ICE (Interactive | action will race candidates in the style of the ICE (Interactive | |||
| Connection Establishment) algorithm [RFC8445] to perform NAT | Connectivity Establishment) algorithm [RFC8445] to perform NAT | |||
| binding discovery and initiate a peer-to-peer connection. | binding discovery and initiate a peer-to-peer connection. | |||
| 4.1.5. Data Transfer Objects and Actions | 4.1.5. Data Transfer Objects and Actions | |||
| * Message: A Message object is a unit of data that can be | Message: A Message object is a unit of data that can be represented | |||
| represented as bytes that can be transferred between two endpoints | as bytes that can be transferred between two endpoints over a | |||
| over a transport connection. The bytes within a Message are | transport connection. The bytes within a Message are assumed to | |||
| assumed to be ordered. If an application does not care about the | be ordered. If an application does not care about the order in | |||
| order in which a peer receives two distinct spans of bytes, those | which a peer receives two distinct spans of bytes, those spans of | |||
| spans of bytes are considered independent Messages. Messages are | bytes are considered independent Messages. Messages are sent in | |||
| sent in the payload of IP packets. One packet can carry one or | the payload of IP packets. One packet can carry one or more | |||
| more Messages or parts of a Message. | Messages or parts of a Message. | |||
| * Message Properties: Message Properties are used to specify details | Message Properties: Message Properties are used to specify details | |||
| about Message transmission. They can be specified directly on | about Message transmission. They can be specified directly on | |||
| individual Messages, or can be set on a Preconnection or | individual Messages or can be set on a Preconnection or Connection | |||
| Connection as defaults. These properties might only apply to how | as defaults. These properties might only apply to how a Message | |||
| a Message is sent (such as how the transport will treat | is sent (such as how the transport will treat prioritization and | |||
| prioritization and reliability), but can also include properties | reliability) but can also include properties that specific | |||
| that specific protocols encode and communicate to the Remote | protocols encode and communicate to the Remote Endpoint. When | |||
| Endpoint. When receiving Messages, Message Properties can contain | receiving Messages, Message Properties can contain information | |||
| information about the received Message, such as metadata generated | about the received Message, such as metadata generated at the | |||
| at the receiver and information signalled by the Remote Endpoint. | receiver and information signaled by the Remote Endpoint. For | |||
| For example, a Message can be marked with a Message Property | example, a Message can be marked with a Message Property | |||
| indicating that it is the final Message on a Connection. | indicating that it is the final Message on a Connection. | |||
| * Send: The action to transmit a Message over a Connection to the | Send: The Send action transmits a Message over a Connection to the | |||
| Remote Endpoint. The interface to Send can accept Message | Remote Endpoint. The interface to Send can accept Message | |||
| Properties specific to how the Message content is to be sent. The | Properties specific to how the Message content is to be sent. The | |||
| status of the Send operation is delivered back to the sending | status of the Send operation is delivered back to the sending | |||
| application in an event (Section 4.1.6). | application in an event (Section 4.1.6). | |||
| * Receive: An action that indicates that the application is ready to | Receive: The Receive action indicates that the application is ready | |||
| asynchronously accept a Message over a Connection from a Remote | to asynchronously accept a Message over a Connection from a Remote | |||
| Endpoint, while the Message content itself will be delivered in an | Endpoint, while the Message content itself will be delivered in an | |||
| event (Section 4.1.6). The interface to Receive can include | event (Section 4.1.6). The interface to Receive can include | |||
| Message Properties specific to the Message that is to be delivered | Message Properties specific to the Message that is to be delivered | |||
| to the application. | to the application. | |||
| * Framer: A Framer is a data translation layer that can be added to | Framer: A Framer is a data translation layer that can be added to a | |||
| a Connection. Framers allow extending a Connection's Protocol | Connection. Framers allow extending a Connection's Protocol Stack | |||
| Stack to define how to encapsulate or encode outbound Messages, | to define how to encapsulate or encode outbound Messages and how | |||
| and how to decapsulate or decode inbound data into Messages. In | to decapsulate or decode inbound data into Messages. In this way, | |||
| this way, message boundaries can be preserved when using a | message boundaries can be preserved when using a Connection | |||
| Connection object, even with a protocol that otherwise presents | object, even with a protocol that otherwise presents unstructured | |||
| unstructured streams, such as TCP. This is designed based on the | streams, such as TCP. This is designed based on the fact that | |||
| fact that many of the current application protocols evolved over | many of the current application protocols evolved over TCP, which | |||
| TCP, which does not provide message boundary preservation, and | does not provide message boundary preservation, and since many of | |||
| since many of these protocols require message boundaries to | these protocols require message boundaries to function, each | |||
| function, each application layer protocol has defined its own | application-layer protocol has defined its own framing. For | |||
| framing. For example, when an HTTP application sends and receives | example, when an HTTP application sends and receives HTTP messages | |||
| HTTP messages over a byte-stream transport, it must parse the | over a byte-stream transport, it must parse the boundaries of HTTP | |||
| boundaries of HTTP messages from the stream of bytes. | messages from the stream of bytes. | |||
| 4.1.6. Event Handling | 4.1.6. Event Handling | |||
| The following categories of events can be delivered to an | The following categories of events can be delivered to an | |||
| application: | application: | |||
| * Connection Ready: Signals to an application that a given | Connection Ready: Signals to an application that a given Connection | |||
| Connection is ready to send and/or receive Messages. If the | is ready to send and/or receive Messages. If the Connection | |||
| Connection relies on handshakes to establish state between peers, | relies on handshakes to establish state between peers, then it is | |||
| then it is assumed that these steps have been taken. | assumed that these steps have been taken. | |||
| * Connection Closed: Signals to an application that a given | Connection Closed: Signals to an application that a given Connection | |||
| Connection is no longer usable for sending or receiving Messages. | is no longer usable for sending or receiving Messages. The event | |||
| The event delivers a reason or error to the application that | delivers a reason or error to the application that describes the | |||
| describes the nature of the termination. | nature of the termination. | |||
| * Connection Received: Signals to an application that a given | Connection Received: Signals to an application that a given Listener | |||
| Listener has received a Connection. | has received a Connection. | |||
| * Message Received: Delivers received Message content to the | Message Received: Delivers received Message content to the | |||
| application, based on a Receive action. To allow an application | application, based on a Receive action. To allow an application | |||
| to limit the occurrence of such events, each call to Receive will | to limit the occurrence of such events, each call to Receive will | |||
| be paired with a single Receive event. This can include an error | be paired with a single Receive event. This can include an error | |||
| if the Receive action cannot be satisfied, e.g., due to the | if the Receive action cannot be satisfied, e.g., due to the | |||
| Connection being closed. | Connection being closed. | |||
| * Message Sent: Notifies the application of the status of its Send | Message Sent: Notifies the application of the status of its Send | |||
| action. This might indicate a failure if the Message cannot be | action. This might indicate a failure if the Message cannot be | |||
| sent, or an indication that the Message has been processed by the | sent or might indicate that the Message has been processed by the | |||
| Transport Services System. | Transport Services System. | |||
| * Path Properties Changed: Notifies the application that a property | Path Properties Changed: Notifies the application that a property of | |||
| of the Connection has changed that might influence how and where | the Connection has changed that might influence how and where data | |||
| data is sent and/or received. | is sent and/or received. | |||
| 4.1.7. Termination Actions | 4.1.7. Termination Actions | |||
| * Close: The action an application takes on a Connection to indicate | Close: The action an application takes on a Connection to indicate | |||
| that it no longer intends to send data, is no longer willing to | that it no longer intends to send data or is no longer willing to | |||
| receive data, and that the protocol should signal this state to | receive data. The protocol should signal this state to the Remote | |||
| the Remote Endpoint if the transport protocol allows this. (Note | Endpoint if the transport protocol permits it. (Note that this is | |||
| that this is distinct from the concept of "half-closing" a | distinct from the concept of "half-closing" a bidirectional | |||
| bidirectional connection, such as when a FIN is sent in one | connection, such as when a FIN is sent in one direction of a TCP | |||
| direction of a TCP connection [RFC9293]. The end of a stream can | connection [RFC9293]. The end of a stream can also be indicated | |||
| also be indicated using Message Properties when sending.) | using Message Properties when sending.) | |||
| * Abort: The action the application takes on a Connection to | Abort: The action the application takes on a Connection to indicate | |||
| indicate a Close and also indicate that the Transport Services | that the Transport Services System should not attempt to deliver | |||
| System should not attempt to deliver any outstanding data, and | any outstanding data and that it should immediately close and drop | |||
| immediately drop the connection. This is intended for immediate, | the connection. This is intended for immediate, usually abnormal, | |||
| usually abnormal, termination of a connection. | termination of a connection. | |||
| 4.1.8. Connection Groups | 4.1.8. Connection Groups | |||
| A Connection Group is a set of Connections that shares Connection | A Connection Group is a set of Connections that shares Connection | |||
| Properties and cached state generated by protocols. A Connection | Properties and cached state generated by protocols. A Connection | |||
| Group represents state for managing Connections within a single | Group represents state for managing Connections within a single | |||
| application, and does not require end-to-end protocol signaling. For | application and does not require end-to-end protocol signaling. For | |||
| transport protocols that support multiplexing, only Connections | transport protocols that support multiplexing, only Connections | |||
| within the same Connection Group are allowed to be multiplexed | within the same Connection Group are allowed to be multiplexed | |||
| together. | together. | |||
| The API allows a Connection to be created from another Connection. | The API allows a Connection to be created from another Connection. | |||
| This adds the new Connection to the Connection Group. A change to | This adds the new Connection to the Connection Group. A change to | |||
| one of the Connection Properties on any Connection in the Connection | one of the Connection Properties on any Connection in the Connection | |||
| Group automatically changes the Connection Property for all others. | Group automatically changes the Connection Property for all others. | |||
| All Connections in a Connection Group share the same set of | All Connections in a Connection Group share the same set of | |||
| Connection Properties except for the Connection Priority. These | Connection Properties except for the Connection Priority. These | |||
| Connection Properties are said to be entangled. | Connection Properties are said to be entangled. | |||
| Passive Connections can also be added to a Connection Group, e.g., | Passive Connections can also be added to a Connection Group, e.g., | |||
| when a Listener receives a new Connection that is just a new stream | when a Listener receives a new Connection that is just a new stream | |||
| of an already active multi-streaming protocol instance. | of an already-active multistreaming protocol instance. | |||
| While Connection Groups are managed by the Transport Services | While Connection Groups are managed by the Transport Services | |||
| Implementation, an application can define different Connection | Implementation, an application can define different Connection | |||
| Contexts for different Connection Groups to explicitly control | Contexts for different Connection Groups to explicitly control | |||
| caching boundaries, as discussed in Section 4.2.3. | caching boundaries, as discussed in Section 4.2.3. | |||
| 4.2. Transport Services Implementation | 4.2. Transport Services Implementation | |||
| This section defines the key architectural concepts for the Transport | This section defines the key architectural concepts for the Transport | |||
| Services Implementation within the Transport Services System. | Services Implementation within the Transport Services System. | |||
| The Transport Services System consists of the Transport Services | The Transport Services System consists of the Transport Services | |||
| Implementation and the Transport Services API. The Transport | Implementation and the Transport Services API. The Transport | |||
| Services Implementation consists of all objects and protocol | Services Implementation consists of all objects and protocol | |||
| instances used internally to a system or library to implement the | instances used internally to a system or library to implement the | |||
| functionality needed to provide a transport service across a network, | functionality needed to provide a transport service across a network, | |||
| as required by the abstract interface. | as required by the abstract interface. | |||
| * Path: Represents an available set of properties that a Local | Path: Represents an available set of properties that a Local | |||
| Endpoint can use to communicate with a Remote Endpoint, such as | Endpoint can use to communicate with a Remote Endpoint, such as | |||
| routes, addresses, and physical and virtual network interfaces. | routes, addresses, and physical and virtual network interfaces. | |||
| * Protocol Instance: A single instance of one protocol, including | Protocol Instance: A single instance of one protocol, including any | |||
| any state necessary to establish connectivity or send and receive | state necessary to establish connectivity or send and receive | |||
| Messages. | Messages. | |||
| * Protocol Stack: A set of Protocol Instances (including relevant | Protocol Stack: A set of Protocol Instances (including relevant | |||
| application, security, transport, or Internet protocols) that are | application, security, transport, or Internet protocols) that are | |||
| used together to establish connectivity or send and receive | used together to establish connectivity or send and receive | |||
| Messages. A single stack can be simple (a single transport | Messages. A single stack can be simple (e.g., one application | |||
| protocol instance over IP), or it can be complex (multiple | stream carried TCP running over IP) or complex (e.g,. multiple | |||
| application protocol streams going through a single security and | application streams carried over a multipath transport protocol | |||
| transport protocol, over IP; or, a multi-path transport protocol | using multiple subflows over IP). | |||
| over multiple transport sub-flows). | ||||
| * Candidate Path: One path that is available to an application and | Candidate Path: One path that is available to an application and | |||
| conforms to the Selection Properties and System Policy, of which | conforms to the Selection Properties and System Policy, of which | |||
| there can be several. Candidate Paths are identified during the | there can be several. Candidate Paths are identified during the | |||
| gathering phase (Section 4.2.1) and can be used during the racing | gathering phase (Section 4.2.1) and can be used during the racing | |||
| phase (Section 4.2.2). | phase (Section 4.2.2). | |||
| * Candidate Protocol Stack: One Protocol Stack that can be used by | Candidate Protocol Stack: One Protocol Stack that can be used by an | |||
| an application for a Connection, for which there can be several | application for a Connection, for which there can be several | |||
| candidates. Candidate Protocol Stacks are identified during the | candidates. Candidate Protocol Stacks are identified during the | |||
| gathering phase (Section 4.2.1) and are started during the racing | gathering phase (Section 4.2.1) and are started during the racing | |||
| phase (Section 4.2.2). | phase (Section 4.2.2). | |||
| * System Policy: The input from an operating system or other global | System Policy: The input from an operating system or other global | |||
| preferences that can constrain or influence how an implementation | preferences that can constrain or influence how an implementation | |||
| will gather candidate paths and Protocol Stacks (Section 4.2.1) | will gather Candidate Paths and Candidate Protocol Stacks | |||
| and race the candidates during establishment (Section 4.2.2). | (Section 4.2.1) and race the candidates during establishment | |||
| Specific aspects of the System Policy either apply to all | (Section 4.2.2). Specific aspects of the System Policy apply to | |||
| Connections or only certain ones, depending on the runtime context | either all Connections or only certain Connections, depending on | |||
| and properties of the Connection. | the runtime context and properties of the Connection. | |||
| * Cached State: The state and history that the implementation keeps | Cached State: The state and history that the implementation keeps | |||
| for each set of associated Endpoints that have been used | for each set of associated Endpoints that have been used | |||
| previously. This can include DNS results, TLS session state, | previously. This can include DNS results, TLS session state, | |||
| previous success and quality of transport protocols over certain | previous success and quality of transport protocols over certain | |||
| paths, as well as other information. This caching does not imply | paths, as well as other information. This caching does not imply | |||
| that the same decisions are necessarily made for subsequent | that the same decisions are necessarily made for subsequent | |||
| connections, rather, it means that cached state is used by a | connections; rather, it means that cached state is used by a | |||
| Transport Services Implementation to inform functions such as | Transport Services Implementation to inform functions such as | |||
| choosing the candidates to be raced, selecting appropriate | choosing the candidates to be raced, selecting appropriate | |||
| transport parameters, etc. An application SHOULD NOT rely on | transport parameters, etc. An application SHOULD NOT rely on | |||
| specific caching behaviour, instead it ought to explicitly request | specific caching behavior; instead, it ought to explicitly request | |||
| any required or desired properties via the Transport Services API. | any required or desired properties via the Transport Services API. | |||
| 4.2.1. Candidate Gathering | 4.2.1. Candidate Gathering | |||
| * Candidate Path Selection: Candidate Path Selection represents the | Candidate Path Selection: Candidate Path Selection represents the | |||
| act of choosing one or more paths that are available to use based | act of choosing one or more paths that are available to use based | |||
| on the Selection Properties and any available Local and Remote | on the Selection Properties and any available Local and Remote | |||
| Endpoint Identifiers provided by the application, as well as the | Endpoint Identifiers provided by the application, as well as the | |||
| policies and heuristics of a Transport Services implementation. | policies and heuristics of a Transport Services Implementation. | |||
| * Candidate Protocol Selection: Candidate Protocol Selection | Candidate Protocol Selection: Candidate Protocol Selection | |||
| represents the act of choosing one or more sets of Protocol Stacks | represents the act of choosing one or more sets of Protocol Stacks | |||
| that are available to use based on the Transport Properties | that are available to use based on the Transport Properties | |||
| provided by the application, and the heuristics or policies within | provided by the application, and the heuristics or policies within | |||
| the Transport Services Implementation. | the Transport Services Implementation. | |||
| 4.2.2. Candidate Racing | 4.2.2. Candidate Racing | |||
| Connection establishment attempts for a set of candidates may be | Connection establishment attempts for a set of candidates may be | |||
| performed simultaneously, synchronously, serially, or using some | performed simultaneously, synchronously, serially, or using some | |||
| combination of all of these. We refer to this process as racing, | combination of all of these. We refer to this process as racing, | |||
| borrowing terminology from Happy Eyeballs [RFC8305]. | borrowing terminology from Happy Eyeballs [RFC8305]. | |||
| * Protocol Option Racing: Protocol Option Racing is the act of | Protocol Option Racing: Protocol Option Racing is the act of | |||
| attempting to establish, or scheduling attempts to establish, | attempting to establish, or scheduling attempts to establish, | |||
| multiple Protocol Stacks that differ based on the composition of | multiple Protocol Stacks that differ based on the composition of | |||
| protocols or the options used for protocols. | protocols or the options used for protocols. | |||
| * Path Racing: Path Racing is the act of attempting to establish, or | Path Racing: Path Racing is the act of attempting to establish, or | |||
| scheduling attempts to establish, multiple Protocol Stacks that | scheduling attempts to establish, multiple Protocol Stacks that | |||
| differ based on a selection from the available Paths. Since | differ based on a selection from the available Paths. Since | |||
| different Paths will have distinct configurations (see [RFC7556]) | different Paths will have distinct configurations (see [RFC7556]) | |||
| for local addresses and DNS servers, attempts across different | for local addresses and DNS servers, attempts across different | |||
| Paths will perform separate DNS resolution steps, which can lead | Paths will perform separate DNS resolution steps, which can lead | |||
| to further racing of the resolved Remote Endpoint Identifiers. | to further racing of the resolved Remote Endpoint Identifiers. | |||
| * Remote Endpoint Racing: Remote Endpoint Racing is the act of | Remote Endpoint Racing: Remote Endpoint Racing is the act of | |||
| attempting to establish, or scheduling attempts to establish, | attempting to establish, or scheduling attempts to establish, | |||
| multiple Protocol Stacks that differ based on the specific | multiple Protocol Stacks that differ based on the specific | |||
| representation of the Remote Endpoint Identifier, such as a | representation of the Remote Endpoint Identifier, such as a | |||
| particular IP address that was resolved from a DNS hostname. | particular IP address that was resolved from a DNS hostname. | |||
| 4.2.3. Separating Connection Contexts | 4.2.3. Separating Connection Contexts | |||
| A Transport Services Implementation can by default share stored | A Transport Services Implementation can by default share stored | |||
| properties across Connections within an application, such as cached | properties across Connections within an application, such as cached | |||
| protocol state, cached path state, and heuristics. This provides | protocol state, cached path state, and heuristics. This provides | |||
| efficiency and convenience for the application, since the Transport | efficiency and convenience for the application, since the Transport | |||
| Services System can automatically optimize behavior. | Services System can automatically optimize behavior. | |||
| The Transport Services API can allow applications to explicitly | The Transport Services API can allow applications to explicitly | |||
| define Connection Contexts that force separation of Cached State and | define Connection Contexts that force separation of Cached State and | |||
| Protocol Stacks. For example, a web browser application could use | Protocol Stacks. For example, a web browser application could use | |||
| Connection Contexts with separate caches when implementing different | Connection Contexts with separate caches when implementing different | |||
| tabs. Possible reasons to isolate Connections using separate | tabs. Possible reasons to isolate Connections using separate | |||
| Connection Contexts include: | Connection Contexts include privacy concerns regarding: | |||
| * Privacy concerns about re-using cached protocol state that can | * reusing cached protocol state, as this can lead to linkability. | |||
| lead to linkability. Sensitive state could include TLS session | Sensitive state could include TLS session state [RFC8446] and HTTP | |||
| state [RFC8446] and HTTP cookies [RFC6265]. These concerns could | cookies [RFC6265]. These concerns could be addressed using | |||
| be addressed using Connection Contexts with separate caches, such | Connection Contexts with separate caches, such as for different | |||
| as for different browser tabs. | browser tabs. | |||
| * Privacy concerns about allowing Connections to multiplex together, | * allowing Connections to multiplex together, which can tell a | |||
| which can tell a Remote Endpoint that all of the Connections are | Remote Endpoint that all of the Connections are coming from the | |||
| coming from the same application. Using Connection Contexts | same application. Using Connection Contexts avoids the | |||
| avoids the Connections being multiplexed in a HTTP/2 or QUIC | Connections being multiplexed in an HTTP/2 or QUIC stream. | |||
| stream. | ||||
| 5. IANA Considerations | 5. IANA Considerations | |||
| This document has no actions for IANA. | This document has no IANA actions. | |||
| 6. Security and Privacy Considerations | 6. Security and Privacy Considerations | |||
| The Transport Services System does not recommend use of specific | The Transport Services System does not recommend the use of specific | |||
| security protocols or algorithms. Its goal is to offer ease of use | security protocols or algorithms. Its goal is to offer ease of use | |||
| for existing protocols by providing a generic security-related | for existing protocols by providing a generic security-related | |||
| interface. Each provided interface translates to an existing | interface. Each provided interface translates to an existing | |||
| protocol-specific interface provided by supported security protocols. | protocol-specific interface provided by supported security protocols. | |||
| For example, trust verification callbacks are common parts of TLS | For example, trust verification callbacks are common parts of TLS | |||
| APIs; a Transport Services API exposes similar functionality | APIs; a Transport Services API exposes similar functionality | |||
| [RFC8922]. | [RFC8922]. | |||
| As described above in Section 3.3, if a Transport Services | As described above in Section 3.3, if a Transport Services | |||
| Implementation races between two different Protocol Stacks, both need | Implementation races between two different Protocol Stacks, both need | |||
| to use the same security protocols and options. However, a Transport | to use the same security protocols and options. However, a Transport | |||
| Services Implementation can race different security protocols, e.g., | Services Implementation can race different security protocols, e.g., | |||
| if the application explicitly specifies that it considers them | if the application explicitly specifies that it considers them | |||
| equivalent. | equivalent. | |||
| The application controls whether information from previous racing | The application controls whether information from previous racing | |||
| attempts, or other information about past communications that was | attempts or other information about past communications that was | |||
| cached by the Transport Services System is used during establishment. | cached by the Transport Services System is used during establishment. | |||
| This allows applications to make tradeoffs between efficiency | This allows applications to make trade-offs between efficiency | |||
| (through racing) and privacy (via information that might leak from | (through racing) and privacy (via information that might leak from | |||
| the cache toward an on-path observer). Some applications have | the cache toward an on-path observer). Some applications have | |||
| features (e.g. "incognito mode") that align with this functionality. | features (e.g., "incognito mode") that align with this functionality. | |||
| Applications need to ensure that they use security APIs | Applications need to ensure that they use security APIs | |||
| appropriately. In cases where applications use an interface to | appropriately. In cases where applications use an interface to | |||
| provide sensitive keying material, e.g., access to private keys or | provide sensitive keying material, e.g., access to private keys or | |||
| copies of pre-shared keys (PSKs), key use needs to be validated and | copies of pre-shared keys (PSKs), key use needs to be validated and | |||
| scoped to the intended protocols and roles. For example, if an | scoped to the intended protocols and roles. For example, if an | |||
| application provides a certificate to only be used as client | application provides a certificate to only be used as client | |||
| authentication for outbound TLS and QUIC connections, the Transport | authentication for outbound TLS and QUIC connections, the Transport | |||
| Services System MUST NOT use this automatically in other contexts | Services System MUST NOT use this automatically in other contexts | |||
| (such as server authentication for inbound connections, or in other | (such as server authentication for inbound connections or in other | |||
| another security protocol handshake that is not equivalent to TLS). | security protocol handshakes that are not equivalent to TLS). | |||
| A Transport Services System MUST NOT automatically fall back from | A Transport Services System MUST NOT automatically fall back from | |||
| secure protocols to insecure protocols, or to weaker versions of | secure protocols to insecure protocols or fall back to weaker | |||
| secure protocols (see Section 3.3). For example, if an application | versions of secure protocols (see Section 3.3). For example, if an | |||
| requests a specific version of TLS, but the desired version of TLS is | application requests a specific version of TLS but the desired | |||
| not available, its connection will fail. As described in | version of TLS is not available, its connection will fail. As | |||
| Section 3.3, the Transport Services API can allow applications to | described in Section 3.3, the Transport Services API can allow | |||
| specify minimum versions that are allowed to be used by the Transport | applications to specify minimum versions that are allowed to be used | |||
| Services System. | by the Transport Services System. | |||
| 7. Acknowledgements | ||||
| This work has received funding from the European Union's Horizon 2020 | ||||
| research and innovation programme under grant agreements No. 644334 | ||||
| (NEAT), No. 688421 (MAMI) and No 815178 (5GENESIS). | ||||
| This work has been supported by Leibniz Prize project funds of DFG - | ||||
| German Research Foundation: Gottfried Wilhelm Leibniz-Preis 2011 (FKZ | ||||
| FE 570/4-1). | ||||
| This work has been supported by the UK Engineering and Physical | ||||
| Sciences Research Council under grant EP/R04144X/1. | ||||
| Thanks to Reese Enghardt, Max Franke, Mirja Kuehlewind, Jonathan | ||||
| Lennox, and Michael Welzl for the discussions and feedback that | ||||
| helped shape the architecture of the system described here. | ||||
| Particular thanks is also due to Philipp S. Tiesel and Christopher | ||||
| A. Wood, who were both co-authors of this specification as it | ||||
| progressed through the TAPS working group. Thanks as well to Stuart | ||||
| Cheshire, Josh Graessley, David Schinazi, and Eric Kinnear for their | ||||
| implementation and design efforts, including Happy Eyeballs, that | ||||
| heavily influenced this work. | ||||
| 8. References | 7. References | |||
| 8.1. Normative References | 7.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| 8.2. Informative References | ||||
| [I-D.ietf-taps-impl] | ||||
| Brunstrom, A., Pauly, T., Enghardt, R., Tiesel, P. S., and | ||||
| M. Welzl, "Implementing Interfaces to Transport Services", | ||||
| Work in Progress, Internet-Draft, draft-ietf-taps-impl-16, | ||||
| 5 June 2023, <https://datatracker.ietf.org/doc/html/draft- | ||||
| ietf-taps-impl-16>. | ||||
| [I-D.ietf-taps-interface] | ||||
| Trammell, B., Welzl, M., Enghardt, R., Fairhurst, G., | ||||
| Kühlewind, M., Perkins, C., Tiesel, P. S., and T. Pauly, | ||||
| "An Abstract Application Layer Interface to Transport | ||||
| Services", Work in Progress, Internet-Draft, draft-ietf- | ||||
| taps-interface-22, 6 July 2023, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-taps- | ||||
| interface-22>. | ||||
| [POSIX] "IEEE Std. 1003.1-2008 Standard for Information Technology | 7.2. Informative References | |||
| -- Portable Operating System Interface (POSIX). Open | ||||
| group Technical Standard: Base Specifications, Issue 7", | ||||
| 2008. | ||||
| [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | [POSIX] "IEEE/Open Group Standard for Information Technology - | |||
| "Session Traversal Utilities for NAT (STUN)", RFC 5389, | Portable Operating System Interface (POSIX(TM)) Base | |||
| DOI 10.17487/RFC5389, October 2008, | Specifications, Issue 8", IEEE Std 1003.1-2024, | |||
| <https://www.rfc-editor.org/rfc/rfc5389>. | DOI 10.1109/IEEESTD.2024.10555529, 2024, | |||
| <https://ieeexplore.ieee.org/document/10555529>. | ||||
| [RFC5482] Eggert, L. and F. Gont, "TCP User Timeout Option", | [RFC5482] Eggert, L. and F. Gont, "TCP User Timeout Option", | |||
| RFC 5482, DOI 10.17487/RFC5482, March 2009, | RFC 5482, DOI 10.17487/RFC5482, March 2009, | |||
| <https://www.rfc-editor.org/rfc/rfc5482>. | <https://www.rfc-editor.org/info/rfc5482>. | |||
| [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, | [RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265, | |||
| DOI 10.17487/RFC6265, April 2011, | DOI 10.17487/RFC6265, April 2011, | |||
| <https://www.rfc-editor.org/rfc/rfc6265>. | <https://www.rfc-editor.org/info/rfc6265>. | |||
| [RFC7556] Anipko, D., Ed., "Multiple Provisioning Domain | [RFC7556] Anipko, D., Ed., "Multiple Provisioning Domain | |||
| Architecture", RFC 7556, DOI 10.17487/RFC7556, June 2015, | Architecture", RFC 7556, DOI 10.17487/RFC7556, June 2015, | |||
| <https://www.rfc-editor.org/rfc/rfc7556>. | <https://www.rfc-editor.org/info/rfc7556>. | |||
| [RFC8095] Fairhurst, G., Ed., Trammell, B., Ed., and M. Kuehlewind, | [RFC8095] Fairhurst, G., Ed., Trammell, B., Ed., and M. Kuehlewind, | |||
| Ed., "Services Provided by IETF Transport Protocols and | Ed., "Services Provided by IETF Transport Protocols and | |||
| Congestion Control Mechanisms", RFC 8095, | Congestion Control Mechanisms", RFC 8095, | |||
| DOI 10.17487/RFC8095, March 2017, | DOI 10.17487/RFC8095, March 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8095>. | <https://www.rfc-editor.org/info/rfc8095>. | |||
| [RFC8170] Thaler, D., Ed., "Planning for Protocol Adoption and | [RFC8170] Thaler, D., Ed., "Planning for Protocol Adoption and | |||
| Subsequent Transitions", RFC 8170, DOI 10.17487/RFC8170, | Subsequent Transitions", RFC 8170, DOI 10.17487/RFC8170, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8170>. | May 2017, <https://www.rfc-editor.org/info/rfc8170>. | |||
| [RFC8303] Welzl, M., Tuexen, M., and N. Khademi, "On the Usage of | [RFC8303] Welzl, M., Tuexen, M., and N. Khademi, "On the Usage of | |||
| Transport Features Provided by IETF Transport Protocols", | Transport Features Provided by IETF Transport Protocols", | |||
| RFC 8303, DOI 10.17487/RFC8303, February 2018, | RFC 8303, DOI 10.17487/RFC8303, February 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8303>. | <https://www.rfc-editor.org/info/rfc8303>. | |||
| [RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: | [RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: | |||
| Better Connectivity Using Concurrency", RFC 8305, | Better Connectivity Using Concurrency", RFC 8305, | |||
| DOI 10.17487/RFC8305, December 2017, | DOI 10.17487/RFC8305, December 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8305>. | <https://www.rfc-editor.org/info/rfc8305>. | |||
| [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | |||
| Connectivity Establishment (ICE): A Protocol for Network | Connectivity Establishment (ICE): A Protocol for Network | |||
| Address Translator (NAT) Traversal", RFC 8445, | Address Translator (NAT) Traversal", RFC 8445, | |||
| DOI 10.17487/RFC8445, July 2018, | DOI 10.17487/RFC8445, July 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8445>. | <https://www.rfc-editor.org/info/rfc8445>. | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [RFC8489] Petit-Huguenin, M., Salgueiro, G., Rosenberg, J., Wing, | ||||
| D., Mahy, R., and P. Matthews, "Session Traversal | ||||
| Utilities for NAT (STUN)", RFC 8489, DOI 10.17487/RFC8489, | ||||
| February 2020, <https://www.rfc-editor.org/info/rfc8489>. | ||||
| [RFC8922] Enghardt, T., Pauly, T., Perkins, C., Rose, K., and C. | [RFC8922] Enghardt, T., Pauly, T., Perkins, C., Rose, K., and C. | |||
| Wood, "A Survey of the Interaction between Security | Wood, "A Survey of the Interaction between Security | |||
| Protocols and Transport Services", RFC 8922, | Protocols and Transport Services", RFC 8922, | |||
| DOI 10.17487/RFC8922, October 2020, | DOI 10.17487/RFC8922, October 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8922>. | <https://www.rfc-editor.org/info/rfc8922>. | |||
| [RFC8923] Welzl, M. and S. Gjessing, "A Minimal Set of Transport | [RFC8923] Welzl, M. and S. Gjessing, "A Minimal Set of Transport | |||
| Services for End Systems", RFC 8923, DOI 10.17487/RFC8923, | Services for End Systems", RFC 8923, DOI 10.17487/RFC8923, | |||
| October 2020, <https://www.rfc-editor.org/rfc/rfc8923>. | October 2020, <https://www.rfc-editor.org/info/rfc8923>. | |||
| [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
| [RFC9112] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC9112] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP/1.1", STD 99, RFC 9112, DOI 10.17487/RFC9112, | Ed., "HTTP/1.1", STD 99, RFC 9112, DOI 10.17487/RFC9112, | |||
| June 2022, <https://www.rfc-editor.org/rfc/rfc9112>. | June 2022, <https://www.rfc-editor.org/info/rfc9112>. | |||
| [RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | [RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | |||
| DOI 10.17487/RFC9113, June 2022, | DOI 10.17487/RFC9113, June 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9113>. | <https://www.rfc-editor.org/info/rfc9113>. | |||
| [RFC9293] Eddy, W., Ed., "Transmission Control Protocol (TCP)", | [RFC9293] Eddy, W., Ed., "Transmission Control Protocol (TCP)", | |||
| STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022, | STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9293>. | <https://www.rfc-editor.org/info/rfc9293>. | |||
| [RFC9622] Trammell, B., Ed., Welzl, M., Ed., Enghardt, R., | ||||
| Fairhurst, G., Kühlewind, M., Perkins, C. S., Tiesel, P., | ||||
| and T. Pauly, "An Abstract Application Programming | ||||
| Interface (API) for Transport Services", RFC 9622, | ||||
| DOI 10.17487/RFC9622, December 2024, | ||||
| <https://www.rfc-editor.org/info/rfc9622>. | ||||
| [RFC9623] Brunstrom, A., Ed., Pauly, T., Ed., Enghardt, R., Tiesel, | ||||
| P., and M. Welzl, "Implementing Interfaces to Transport | ||||
| Services", RFC 9623, DOI 10.17487/RFC9623, December 2024, | ||||
| <https://www.rfc-editor.org/info/rfc9623>. | ||||
| Acknowledgements | ||||
| This work has received funding from the European Union's Horizon 2020 | ||||
| research and innovation programme under grant agreements No. 644334 | ||||
| (NEAT), No. 688421 (MAMI), and No. 815178 (5GENESIS). | ||||
| This work has been supported by: | ||||
| * Leibniz Prize project funds from the DFG - German Research | ||||
| Foundation: Gottfried Wilhelm Leibniz-Preis 2011 (FKZ FE 570/4-1). | ||||
| * the UK Engineering and Physical Sciences Research Council under | ||||
| grant EP/R04144X/1. | ||||
| Thanks to Reese Enghardt, Max Franke, Mirja Kühlewind, Jonathan | ||||
| Lennox, and Michael Welzl for the discussions and feedback that | ||||
| helped shape the architecture of the system described here. | ||||
| Particular thanks are also due to Philipp S. Tiesel and Christopher | ||||
| A. Wood, who were both coauthors of this specification as it | ||||
| progressed through the Transport Services (TAPS) Working Group. | ||||
| Thanks as well to Stuart Cheshire, Josh Graessley, David Schinazi, | ||||
| and Eric Kinnear for their implementation and design efforts, | ||||
| including Happy Eyeballs, that heavily influenced this work. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Tommy Pauly (editor) | Tommy Pauly (editor) | |||
| Apple Inc. | Apple Inc. | |||
| One Apple Park Way | One Apple Park Way | |||
| Cupertino, California 95014, | Cupertino, CA 95014 | |||
| United States of America | United States of America | |||
| Email: tpauly@apple.com | Email: tpauly@apple.com | |||
| Brian Trammell (editor) | Brian Trammell (editor) | |||
| Google Switzerland GmbH | Google Switzerland GmbH | |||
| Gustav-Gull-Platz 1 | Gustav-Gull-Platz 1 | |||
| CH- 8004 Zurich | CH-8004 Zurich | |||
| Switzerland | Switzerland | |||
| Email: ietf@trammell.ch | Email: ietf@trammell.ch | |||
| Anna Brunstrom | Anna Brunstrom | |||
| Karlstad University | Karlstad University | |||
| Universitetsgatan 2 | Universitetsgatan 2 | |||
| 651 88 Karlstad | 651 88 Karlstad | |||
| Sweden | Sweden | |||
| Email: anna.brunstrom@kau.se | Email: anna.brunstrom@kau.se | |||
| Godred Fairhurst | Godred Fairhurst | |||
| University of Aberdeen | University of Aberdeen | |||
| Fraser Noble Building | Fraser Noble Building | |||
| Aberdeen, AB24 3UE | Aberdeen, AB24 3UE | |||
| United Kingdom | ||||
| Email: gorry@erg.abdn.ac.uk | Email: gorry@erg.abdn.ac.uk | |||
| URI: http://www.erg.abdn.ac.uk/ | URI: https://erg.abdn.ac.uk/ | |||
| Colin Perkins | Colin S. Perkins | |||
| University of Glasgow | University of Glasgow | |||
| School of Computing Science | School of Computing Science | |||
| Glasgow G12 8QQ | Glasgow G12 8QQ | |||
| United Kingdom | United Kingdom | |||
| Email: csp@csperkins.org | Email: csp@csperkins.org | |||
| End of changes. 231 change blocks. | ||||
| 612 lines changed or deleted | 620 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||