draft-ietf-taps-arch-18.txt | draft-ietf-taps-arch-19.txt | |||
---|---|---|---|---|
TAPS Working Group T. Pauly, Ed. | TAPS Working Group T. Pauly, Ed. | |||
Internet-Draft Apple Inc. | Internet-Draft Apple Inc. | |||
Intended status: Standards Track B. Trammell, Ed. | Intended status: Standards Track B. Trammell, Ed. | |||
Expires: 1 December 2023 Google Switzerland GmbH | Expires: 12 May 2024 Google Switzerland GmbH | |||
A. Brunstrom | A. Brunstrom | |||
Karlstad University | Karlstad University | |||
G. Fairhurst | G. Fairhurst | |||
University of Aberdeen | University of Aberdeen | |||
C. Perkins | C. Perkins | |||
University of Glasgow | University of Glasgow | |||
30 May 2023 | 9 November 2023 | |||
An Architecture for Transport Services | Architecture and Requirements for Transport Services | |||
draft-ietf-taps-arch-18 | draft-ietf-taps-arch-19 | |||
Abstract | Abstract | |||
This document describes an architecture for exposing transport | This document describes an architecture for exposing transport | |||
protocol features to applications for network communication, a | protocol features to applications for network communication. This | |||
Transport Services system. The Transport Services Application | system exposes transport protocol features to applications for | |||
network communication. The Transport Services Application | ||||
Programming Interface (API) is based on an asynchronous, event-driven | Programming Interface (API) is based on an asynchronous, event-driven | |||
interaction pattern. This API uses messages for representing data | interaction pattern. This API uses messages for representing data | |||
transfer to applications, and describes how implementations can use | transfer to applications, and describes how a Transport Services | |||
multiple IP addresses, multiple protocols, and multiple paths, and | Implementation can use multiple IP addresses, multiple protocols, and | |||
provide multiple application streams. This document further defines | multiple paths, and provide multiple application streams. This | |||
document provides the architecture and requirements. It defines | ||||
common terminology and concepts to be used in definitions of a | common terminology and concepts to be used in definitions of a | |||
Transport Service API and 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 Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on 1 December 2023. | This Internet-Draft will expire on 12 May 2024. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2023 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 (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
skipping to change at page 2, line 27 ¶ | skipping to change at page 2, line 27 ¶ | |||
provided without warranty as described in the Revised BSD License. | provided without warranty as described in the Revised BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Background . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Background . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.3. Specification of Requirements . . . . . . . . . . . . . . 5 | 1.3. Specification of Requirements . . . . . . . . . . . . . . 5 | |||
1.4. Glossary of Key Terms . . . . . . . . . . . . . . . . . . 5 | 1.4. Glossary of Key Terms . . . . . . . . . . . . . . . . . . 5 | |||
2. API Model . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2. API Model . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.1. Event-Driven API . . . . . . . . . . . . . . . . . . . . 9 | 2.1. Event-Driven API . . . . . . . . . . . . . . . . . . . . 10 | |||
2.2. Data Transfer Using Messages . . . . . . . . . . . . . . 10 | 2.2. Data Transfer Using Messages . . . . . . . . . . . . . . 11 | |||
2.3. Flexible Implementation . . . . . . . . . . . . . . . . . 11 | 2.3. Flexible Implementation . . . . . . . . . . . . . . . . . 12 | |||
2.4. Coexistence . . . . . . . . . . . . . . . . . . . . . . . 12 | 2.4. Coexistence . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
3. API and Implementation Requirements . . . . . . . . . . . . . 12 | 3. API and Implementation Requirements . . . . . . . . . . . . . 13 | |||
3.1. Provide Common APIs for Common Features . . . . . . . . . 13 | 3.1. Provide Common APIs for Common Features . . . . . . . . . 14 | |||
3.2. Allow Access to Specialized Features . . . . . . . . . . 14 | 3.2. Allow Access to Specialized Features . . . . . . . . . . 15 | |||
3.3. Select Between Equivalent Protocol Stacks . . . . . . . . 15 | 3.3. Select Between Equivalent Protocol Stacks . . . . . . . . 16 | |||
3.4. Maintain Interoperability . . . . . . . . . . . . . . . . 16 | 3.4. Maintain Interoperability . . . . . . . . . . . . . . . . 17 | |||
4. Transport Services Architecture and Concepts . . . . . . . . 16 | 3.5. Support Monitoring . . . . . . . . . . . . . . . . . . . 17 | |||
4.1. Transport Services API Concepts . . . . . . . . . . . . . 18 | 4. Transport Services Architecture and Concepts . . . . . . . . 18 | |||
4.1.1. Endpoint Objects . . . . . . . . . . . . . . . . . . 20 | 4.1. Transport Services API Concepts . . . . . . . . . . . . . 20 | |||
4.1.2. Connections and Related Objects . . . . . . . . . . . 20 | 4.1.1. Endpoint Objects . . . . . . . . . . . . . . . . . . 22 | |||
4.1.3. Pre-establishment . . . . . . . . . . . . . . . . . . 21 | 4.1.2. Connections and Related Objects . . . . . . . . . . . 22 | |||
4.1.4. Establishment Actions . . . . . . . . . . . . . . . . 22 | 4.1.3. Pre-establishment . . . . . . . . . . . . . . . . . . 24 | |||
4.1.5. Data Transfer Objects and Actions . . . . . . . . . . 23 | 4.1.4. Establishment Actions . . . . . . . . . . . . . . . . 24 | |||
4.1.6. Event Handling . . . . . . . . . . . . . . . . . . . 24 | 4.1.5. Data Transfer Objects and Actions . . . . . . . . . . 25 | |||
4.1.7. Termination Actions . . . . . . . . . . . . . . . . . 25 | 4.1.6. Event Handling . . . . . . . . . . . . . . . . . . . 26 | |||
4.1.8. Connection Groups . . . . . . . . . . . . . . . . . . 25 | 4.1.7. Termination Actions . . . . . . . . . . . . . . . . . 27 | |||
4.2. Transport Services Implementation . . . . . . . . . . . . 26 | 4.1.8. Connection Groups . . . . . . . . . . . . . . . . . . 28 | |||
4.2.1. Candidate Gathering . . . . . . . . . . . . . . . . . 27 | 4.2. Transport Services Implementation . . . . . . . . . . . . 28 | |||
4.2.2. Candidate Racing . . . . . . . . . . . . . . . . . . 27 | 4.2.1. Candidate Gathering . . . . . . . . . . . . . . . . . 30 | |||
4.2.3. Separating Connection Contexts . . . . . . . . . . . 28 | 4.2.2. Candidate Racing . . . . . . . . . . . . . . . . . . 30 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 | 4.2.3. Separating Connection Contexts . . . . . . . . . . . 30 | |||
6. Security and Privacy Considerations . . . . . . . . . . . . . 29 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 30 | 6. Security and Privacy Considerations . . . . . . . . . . . . . 31 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 30 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 30 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 32 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 32 | 8.2. Informative References . . . . . . . . . . . . . . . . . 33 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
1. Introduction | 1. Introduction | |||
Many application programming interfaces (APIs) to perform transport | Many application programming interfaces (APIs) to provide transport | |||
networking have been deployed, perhaps the most widely known and | interfaces to networks have been deployed, perhaps the most widely | |||
imitated being the BSD Socket [POSIX] interface (Socket API). The | known and imitated being the BSD Socket [POSIX] interface (Socket | |||
naming of objects and functions across these APIs is not consistent | API). The naming of objects and functions across these APIs is not | |||
and varies depending on the protocol being used. For example, | consistent and varies depending on the protocol being used. For | |||
sending and receiving streams of data is conceptually the same for | example, sending and receiving streams of data is conceptually the | |||
both an unencrypted Transmission Control Protocol (TCP) stream and | same for both an unencrypted Transmission Control Protocol (TCP) | |||
operating on an encrypted Transport Layer Security (TLS) [RFC8446] | stream and operating on an encrypted Transport Layer Security (TLS) | |||
stream over TCP, but applications cannot use the same socket send() | [RFC8446] stream over TCP, but applications cannot use the same | |||
and recv() calls on top of both kinds of connections. Similarly, | socket send() and recv() calls on top of both kinds of connections. | |||
terminology for the implementation of transport protocols varies | Similarly, terminology for the implementation of transport protocols | |||
based on the context of the protocols themselves: terms such as | varies based on the context of the protocols themselves: terms such | |||
"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 architecture is to provide a | The goal of the Transport Services System architecture is to provide | |||
flexible and reusable architecture that provides a common interface | a flexible and reusable system with a common interface for transport | |||
for transport protocols. As applications adopt this interface, they | protocols. An application uses the Transport Services System through | |||
will benefit from a wide set of transport features that can evolve | an abstract Connection (we use capitalization to distinguish these | |||
over time, and ensure that the system providing the interface can | from the underlying connections of, e.g., TCP). This provides | |||
optimize its behavior based on the application requirements and | flexible connection establishment allowing an application to request | |||
network conditions, without requiring changes to the applications. | or require a set of properties. | |||
This flexibility enables faster deployment of new features and | ||||
protocols. It can also support applications by offering racing | As applications adopt this interface, they will benefit from a wide | |||
set of transport features that can evolve over time, and ensure that | ||||
the system providing the interface can optimize its behavior based on | ||||
the application requirements and network conditions, without | ||||
requiring changes to the applications. This flexibility enables | ||||
faster deployment of new features and protocols. | ||||
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). | application separately (see Section 4.2.2). Racing selects one or | |||
more candidates each with equivalent protocol stacks that are used to | ||||
identify an optimal combination of transport protocol instance such | ||||
as TCP, UDP, or another transport, together with configuration of | ||||
parameters and interfaces. A Connection represents an object that, | ||||
once established, can be used to send and receive messages. A | ||||
Connection can also be created from another Connection, by cloning, | ||||
and then forms a part of a Connection Group whose Connections share | ||||
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 [I-D.ietf-taps-interface] and implementation | |||
guidelines [I-D.ietf-taps-impl]. Although following the Transport | guidelines [I-D.ietf-taps-impl]. Although following the Transport | |||
Services architecture does not require that all APIs and | Services architecture does not require all APIs and implementations | |||
implementations are identical, a common minimal set of features | to be identical, a common minimal set of features represented in a | |||
represented in a consistent fashion will enable applications to be | consistent fashion will enable applications to be easily ported from | |||
easily ported from one system to another. | one implementation of the Transport Services System to another. | |||
1.1. Background | 1.1. Background | |||
The Transport Services architecture is based on the survey of | The architecture of the Transport Services System is based on the | |||
services provided by IETF transport protocols and congestion control | survey of services provided by IETF transport protocols and | |||
mechanisms [RFC8095], and the distilled minimal set of the features | congestion control mechanisms [RFC8095], and the distilled minimal | |||
offered by transport protocols [RFC8923]. These documents identified | set of the features offered by transport protocols [RFC8923]. These | |||
common features and patterns across all transport protocols developed | documents identified common features and patterns across all | |||
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 architecture also considers | transport protocols on the Internet, this document also considers the | |||
the impact of transport security protocols on the feature-set exposed | impact of transport security protocols on the feature-set exposed by | |||
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 require application interaction and guidance (referred to in | |||
that document as Functional or Optimizing Features), or else can be | that document as Functional or Optimizing Features), or else can be | |||
handled automatically by a system implementing Transport Services | handled automatically by an implementation of the Transport Services | |||
(referred to as Automatable Features). Among the identified | System (referred to as Automatable Features). Among the identified | |||
Functional and Optimizing Features, some were common across all or | Functional and Optimizing Features, some are common across all or | |||
nearly all transport protocols, while others could be seen as | nearly all transport protocols, while others present features that, | |||
features that, if specified, would only be useful with a subset of | if specified, would only be useful with a subset of protocols, but | |||
protocols, but would not harm the functionality of other protocols. | would not harm the functionality of other protocols. For example, | |||
For example, some protocols can deliver messages faster for | some protocols can deliver messages faster for applications that do | |||
applications that do not require messages to arrive in the order in | not require messages to arrive in the order in which they were sent. | |||
which they were sent. However, this functionality needs to be | This functionality needs to be explicitly allowed by the application, | |||
explicitly allowed by the application, since reordering messages | since reordering messages would be undesirable in many cases. | |||
would be undesirable in many cases. | ||||
1.2. Overview | 1.2. Overview | |||
This document describes the Transport Services architecture in three | This document describes the Transport Services System in three | |||
sections: | sections: | |||
* Section 2 describes how the API model of Transport Services | * Section 2 describes how the Transport Services API model differs | |||
architecture differs from traditional socket-based APIs. | from that of traditional socket-based APIs. Specifically, it | |||
Specifically, it offers asynchronous event-driven interaction, the | offers asynchronous event-driven interaction, the use of messages | |||
use of messages for data transfer, and the flexibility to use | for data transfer, and the flexibility to use different transport | |||
different transport protocols and paths without requiring major | protocols and paths without requiring major changes to the | |||
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 a diagram showing the Transport Services | * Section 4 presents the Transport Services Implementation and | |||
architecture and defines the concepts that are used by both the | defines the concepts that are used by the API | |||
API [I-D.ietf-taps-interface] and implementation guidelines | [I-D.ietf-taps-interface] and described in the implementation | |||
[I-D.ietf-taps-impl]. The Preconnection allows applications to | guidelines [I-D.ietf-taps-impl]. This introduces the | |||
configure Connection Properties. | Preconnection, which allows applications to configure Connection | |||
Properties. | ||||
* Section 4 also presents how an abstract Connection is used to | ||||
select a transport protocol instance such as TCP, UDP, or another | ||||
transport. The Connection represents an object that can be used | ||||
to send and receive messages. | ||||
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 BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 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 later defined 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 delivery of data across the network [RFC8095]. | end delivery of data across the network [RFC8095]. | |||
* Cached State: The state and history that the implementation keeps | * Cached State: The state and history that the Transport Services | |||
for each set of associated Endpoints that have been used | Implementation keeps for each set of the associated Endpoints that | |||
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 application for a Connection during racing. | an 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. | 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 Group: A set of Connections that shares properties and | * Connection Context: A set of stored properties across Connections, | |||
such as cached protocol state, cached path state, and heuristics, | ||||
which can include one or more Connection Groups. | ||||
* 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 identifier for one side of a Connection (local or | * Endpoint: An entity that communicates with one or more other | |||
remote), such as a hostnames or URL. | endpoints using a transport protocol. | |||
* Endpoint Identifier: An identifier that specifies one side of a | ||||
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: A representation of the application's identifier | * Local Endpoint: The local Endpoint. | |||
for itself that it uses for a Connection. | ||||
* Local Endpoint Identifier: A representation of the application's | ||||
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 to prohibit, avoid, ignore, prefer, or | |||
require a specific Transport Feature. | require 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 state necessary to establish connectivity or send and receive | any 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 on the Selection and Connection Properties communicated by | based on the Selection and Connection Properties communicated by | |||
the application, along with any security parameters. | the application, along with any Security Parameters. | |||
* Remote Endpoint: A representation of the application's identifier | * Remote Endpoint: The peer that a local Endpoint can communicate | |||
for a peer that can participate in establishing a Connection. | with when a Connection is established. | |||
* Remote Endpoint Identifier: A representation of the application's | ||||
identifier for a peer that can participate in establishing a | ||||
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 | * 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 | |||
skipping to change at page 8, line 5 ¶ | skipping to change at page 8, line 24 ¶ | |||
* Transport Feature: A specific end-to-end feature that the | * Transport Feature: A specific end-to-end feature that the | |||
transport layer provides to an application. | transport layer provides to an application. | |||
* Transport Property: A property that expresses requirements, | * Transport Property: A property that expresses requirements, | |||
prohibitions and preferences [RFC8095]. | prohibitions and preferences [RFC8095]. | |||
* Transport Service: A set of transport features, without an | * Transport Service: A set of transport features, without an | |||
association to any given framing protocol, that provides a | association to any given framing protocol, that provides a | |||
complete service to an application. | complete service to an application. | |||
* Transport Services System: The Transport Services implementation | * Transport Services Implementation: This consists of all objects | |||
and the Transport Services API | and protocol instances used internally to a system or library to | |||
implement the functionality needed to provide a transport service | ||||
across a network, as required by the abstract interface. | ||||
* Transport Services System: The Transport Services Implementation | ||||
and the Transport Services API. | ||||
2. API Model | 2. API Model | |||
The traditional model of using sockets for networking can be | The traditional model of using sockets can be represented as follows | |||
represented as follows: | (see 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 stub resolver. | performed by a system-provided DNS stub resolver. | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| Application | | | Application | | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | | | | | | | |||
+------------+ +------------+ +--------------+ | +------------+ +------------+ +--------------+ | |||
| 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 Transport Services architecture evolves this general model of | The architecture of the Transport Services System is an evolution of | |||
interaction, to both modernize the API surface presented to | this general model of interaction. It both modernizes the API | |||
applications by the transport layer and to enrich the capabilities of | presented to applications by the transport layer and enriches the | |||
the implementation below the API. | capabilities of the Transport Services Implementation below this API. | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| Application | | | Application | | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | | | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| Transport Services API | | | Transport Services API | | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| | | | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
skipping to change at page 9, line 27 ¶ | skipping to change at page 9, line 51 ¶ | |||
| | | | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| 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 | The Transport Services API [I-D.ietf-taps-interface] defines the | |||
interface for an application to create Connections and transfer data. | interface for an application to create Connections and transfer data. | |||
It combines interfaces for multiple interaction patterns into a | It combines interfaces for multiple interaction patterns into a | |||
unified whole. By combining name resolution with connection | unified whole (see figure 2). This offers generic functions and also | |||
establishment and data transfer in a single API, it allows for more | the protocol-specific mappings for TCP, UDP, UDP-Lite, and other | |||
flexible implementations to provide path and transport protocol | protocol layers. These mapping are extensible. Future documents | |||
agility on the application's behalf. | 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] implements | The Transport Services Implementation [I-D.ietf-taps-impl] is the | |||
the transport layer protocols and other functions needed to send and | component of the Transport Services System that implements the | |||
transport layer protocols and other functions needed to send and | ||||
receive data. It is responsible for mapping the API to a specific | receive data. It is responsible for mapping the API to a specific | |||
available transport Protocol Stack and managing the available network | available transport Protocol Stack and managing the available network | |||
interfaces and paths. | interfaces and paths. | |||
There are key differences between the Transport Services architecture | There are key differences between the architecture of the Transport | |||
and the architecture of the Socket API: the API of the Transport | Services System and the architecture of the Socket API: the API of | |||
Services architecture is asynchronous and event-driven; it uses | the Transport Services System is asynchronous and event-driven; it | |||
messages for representing data transfer to applications; and it | uses messages for representing data transfer to applications; and it | |||
describes how implementations can use multiple IP addresses, multiple | describes how a Transport Services Implementation can resolve | |||
Endpoint Identifiers to use multiple IP addresses, multiple | ||||
protocols, multiple paths, and provide multiple application streams. | protocols, multiple paths, and 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 generally uses a try- | an asynchronous interface using the Socket API can use a try-and-fail | |||
and-fail model. If the application wants to read, but data has not | model: If the application wants to read, but data has not yet been | |||
yet been received from the peer, the call to read will fail. The | received from the peer, the call to read will fail. The application | |||
application then waits and can try again later. | then waits and can try again later. | |||
In contrast to the Socket API, all interaction using the Transport | In contrast to the Socket API, all interactions using the Transport | |||
Services API is 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) in order to model | around an event-driven model (see Section 4.1.6), which models this | |||
this asynchronous interaction, though other forms of asynchronous | asynchronous interaction. Other forms of asynchronous communication | |||
communication may be available to applications depending on the | could also be available to applications, depending on the platform | |||
platform implementing the interface. | implementing the interface. | |||
For example, an application first issues a call to receive new data | For example, when an application that uses the Transport Services API | |||
from the connection. When delivered data becomes available, this | wants to receive data, it issues an asynchronous call to receive new | |||
data is delivered to the application using asynchronous events that | data from the Connection. When delivered data becomes available, | |||
contain the data. Error handling is also asynchronous; a failure to | this data is delivered to the application using asynchronous events | |||
send data results in an asynchronous error event. | that contain the data. Error handling is also asynchronous, | |||
resulting in asynchronous error events. | ||||
This API also delivers events regarding the lifetime of a connection | This API also delivers events regarding the lifetime of a connection | |||
and changes in the available network links, which were not previously | and changes in the available network links, which were not previously | |||
made explicit in the Socket API. | made explicit in the Socket API. | |||
Using asynchronous events allows for a more natural interaction model | Using asynchronous events allows for a more natural interaction model | |||
when establishing connections and transferring data. Events in time | when establishing connections and transferring data. Events in time | |||
more closely reflect the nature of interactions over networks, as | more closely reflect the nature of interactions over networks, as | |||
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. | |||
skipping to change at page 11, line 18 ¶ | skipping to change at page 12, line 10 ¶ | |||
* 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 multi-streaming and | |||
pooled connections. | pooled connections. | |||
Allowing applications to interact with messages is backwards- | Allowing applications to interact with messages is backwards- | |||
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 natively 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. It also | connecting to a single address over a single interface (IP source | |||
presents a single stream to the application. Software layers built | address). It also presents a single stream to the application. | |||
upon this API often propagate this limitation of a single-address | Software layers built upon this API often propagate this limitation | |||
single-stream model. The Transport Services architecture is | of a single-address single-stream model. The Transport Services | |||
designed: | architecture is designed: | |||
* to handle multiple candidate endpoints, protocols, and paths; | * to handle multiple candidate endpoints, protocols, and paths; | |||
* to support candidate protocol racing to select the most optimal | * to support candidate protocol racing to select the most optimal | |||
stack in each situation; | stack in each situation; | |||
* to support multipath and multistreaming protocols; | * to support multipath and multistreaming protocols; | |||
* to provide state caching and application control over it. | * to 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 Section 4.2.1 and Section 4.2.2). This | |||
requires applications to provide higher-level endpoints than IP | requires applications to specify identifiers for the Local and Remote | |||
addresses, such as hostnames and URLs, which are used by a Transport | Endpoint that are higher-level than IP addresses, such as a hostname | |||
Services implementation for resolution, path selection, and racing. | or URL, which are used by a Transport Services Implementation for | |||
An implementation can further implement fallback mechanisms if | resolution, path selection, and racing. An implementation can | |||
connection establishment of one protocol fails or performance is | further implement fallback mechanisms if connection establishment of | |||
detected to be unsatisfactory. | one protocol fails or performance is detected 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) are 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 tradeoffs 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 | |||
Note that while the Transport Service architecture is designed as an | While the architecture of the Transport Services System is designed | |||
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, incremental deployability | entirely on a system or platform; indeed, coexistence has been | |||
[RFC8170] requires coexistence. The architecture is therefore | recommended for incremental deployability [RFC8170]. The | |||
designed such that it can run alongside (or, indeed, on top of) an | architecture is therefore designed such that it can run alongside | |||
existing Socket API implementation; only applications built to the | (or, indeed, on top of) an existing Socket API implementation; only | |||
Transport Services API are managed by the system's Transport Services | applications built to the Transport Services API are managed by the | |||
implementation. | system's Transport Services Implementation. | |||
3. API and Implementation Requirements | 3. API and Implementation Requirements | |||
A goal of the Transport Services architecture is to redefine the | One goal of the architecture is to redefine the interface between | |||
interface between applications and transports in a way that allows | applications and transports in a way that allows the transport layer | |||
the transport layer to evolve and improve without fundamentally | to evolve and improve without fundamentally changing the contract | |||
changing the contract with the application. This requires a careful | with the application. This requires a careful consideration of how | |||
consideration of how to expose the capabilities of protocols. This | to expose the capabilities of protocols. The architecture also | |||
architecture also encompasses system policies that can influence and | encompasses system policies that can influence and inform how | |||
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 provide access to transport | |||
protocols and protocol features; it can use these protocols across | protocols and protocol features; it can use these protocols across | |||
multiple paths that could have different performance and functional | multiple paths that could have different performance and functional | |||
characteristics; and it can communicate with different remote systems | characteristics; and it can communicate with different remote systems | |||
to optimize performance, robustness to failure, or some other metric. | 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 Transport Services Implementation to provide this | |||
functionality without causing incompatibility or introducing security | functionality without causing incompatibility or introducing security | |||
vulnerabilities. | 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 | |||
skipping to change at page 13, line 33 ¶ | skipping to change at page 14, line 28 ¶ | |||
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 Selection Properties, which specify which paths and | |||
Protocol Stacks can be used and are preferred by the application; | Protocol Stacks can be used and are preferred by the application; | |||
Connection Properties, which inform decisions made during connection | Connection Properties, which inform decisions made during connection | |||
establishment and fine-tune the established connection; and Message | establishment and fine-tune the established connection; and Message | |||
Properties, set on individual Messages. | Properties, set on individual Messages. | |||
It is RECOMMENDED that the Transport Services API offers properties | It is RECOMMENDED that the Transport Services API offers properties | |||
that are common to multiple transport protocols. This enables a | that are common to multiple transport protocols. This enables a | |||
Transport Services implementation to appropriately select between | Transport Services System to appropriately select between protocols | |||
protocols that offer equivalent features. Similarly, it is | that offer equivalent features. Similarly, it is RECOMMENDED that | |||
RECOMMENDED that the Properties offered by the Transport Services API | the Properties offered by the Transport Services API are applicable | |||
are applicable to a variety of network layer interfaces and paths, | to a variety of network layer interfaces and paths, which permits | |||
which permits racing of different network paths without affecting the | racing of different network paths without affecting the applications | |||
applications using the API. Each is expected to have a default | using the API. Each is expected to have a default value. | |||
value. | ||||
It is RECOMMENDED that the default values for Properties are selected | It is RECOMMENDED that the default values for Properties are 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 are REQUIRED to be | Applications using the Transport Services API need to be designed to | |||
robust to the automated selection provided by the Transport Services | be robust to the automated selection provided by the Transport | |||
implementation. This automated selection is constrained by the | Services System. This automated selection is constrained by the | |||
properties and preferences expressed by the application and requires | properties and preferences expressed by the application and requires | |||
applications to explicitly set properties that define any necessary | applications to explicitly set properties that define any necessary | |||
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 | A specialized feature 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 an application is using TCP, it could require control over the | if an application is using TCP, it could require control over the | |||
User Timeout Option for TCP [RFC5482]; these options would not take | User Timeout Option for TCP [RFC5482]; these options 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 to use the User Timeout Option, | |||
communication would not fail when a protocol such as QUIC is | communication would not fail when a protocol such as UDP is selected. | |||
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 pre-establishment 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 a 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 and select between | |||
multiple Protocol Stacks based on the Selection and Connection | multiple Protocol Stacks based on the Selection and Connection | |||
Properties communicated by the application, along with any security | Properties communicated by the application, along with any Security | |||
parameters. The implementation can only attempt to use multiple | Parameters. The implementation can only attempt to use multiple | |||
Protocol Stacks when they are "equivalent", which means that the | Protocol Stacks when they are "equivalent", which means that the | |||
stacks can provide the same Transport Properties and interface | 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 | |||
skipping to change at page 15, line 33 ¶ | skipping to change at page 16, line 33 ¶ | |||
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. | |||
To ensure that security protocols are not incorrectly swapped, a | A Transport Services Implementation can race different security | |||
Transport Services implementation MUST only select Protocol Stacks | protocols, e.g., if the System Policy is explicitly configured to | |||
that meet application requirements ([RFC8922]). A Transport Services | consider them equivalent. A Transport Services implementation SHOULD | |||
implementation SHOULD only race Protocol Stacks where the transport | only race Protocol Stacks where the transport security protocols | |||
security protocols within the stacks are identical. A Transport | within the stacks are identical. To ensure that security protocols | |||
Services implementation MUST NOT automatically fall back from secure | are not incorrectly swapped, a Transport Services Implementation MUST | |||
protocols to insecure protocols, or to weaker versions of secure | only select Protocol Stacks that meet application requirements | |||
protocols. A Transport Services implementation MAY allow | ([RFC8922]). A Transport Services Implementation MUST NOT | |||
applications to explicitly specify which versions of a protocol ought | automatically fall back from secure protocols to insecure protocols, | |||
to be permitted, e.g., to allow a minimum version of TLS 1.2 in case | or to weaker versions of secure protocols. A Transport Services | |||
TLS 1.3 is not available. | Implementation MAY allow applications to explicitly specify 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. | ||||
A Transport Services Implementation MAY specify security properties | ||||
relating to how the system operates (e.g., requirements, | ||||
prohibitions, and preferences for the use of DNS Security Extensions | ||||
(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 the Transport | [I-D.ietf-taps-interface] nor the guidelines for implementation of | |||
Service implementation [I-D.ietf-taps-impl] define new protocols or | the Transport Service System [I-D.ietf-taps-impl] define new | |||
protocol capabilities that affect what is communicated across the | protocols or protocol capabilities that affect what is communicated | |||
network. A Transport Services system MUST NOT require that a peer on | across the network. A Transport Services System MUST NOT require | |||
the other side of a connection uses the same API or implementation. | that a peer on the other side of a connection uses the same API or | |||
A Transport Services implementation acting as a connection initiator | implementation. A Transport Services Implementation acting as a | |||
is able to communicate with any existing endpoint that implements the | connection initiator is able to communicate with any existing | |||
transport protocol(s) and all the required properties selected. | Endpoint that implements the transport protocol(s) and all the | |||
Similarly, a Transport Services implementation acting as a Listener | required properties selected. Similarly, a Transport Services | |||
can receive connections for any protocol that is supported from an | Implementation acting as a Listener can receive connections for any | |||
existing initiator that implements the protocol, independent of | protocol that is supported from an existing initiator that implements | |||
whether the initiator uses the Transport Services architecture or | the protocol, independent of whether the initiator uses the Transport | |||
not. | Services System or not. | |||
A Transport Services system makes decisions that select protocols and | A Transport Services Implemenation makes decisions that select | |||
interfaces. In normal use, a given version of a Transport Services | protocols and interfaces. In normal use, a given version of a | |||
system SHOULD result in consistent protocol and interface selection | Transport Services System SHOULD result in consistent protocol and | |||
decisions for the same network conditions given the same set of | interface selection decisions for the same network conditions given | |||
Properties. This is intended to provide predictable outcomes to the | the same set of Properties. This is intended to provide predictable | |||
application using the API. | outcomes to the application using the API. | |||
3.5. Support Monitoring | ||||
The Transport Services API increases the layer of abstraction for | ||||
applications, and it enables greater automation below the API. Such | ||||
increased abstraction comes at the cost of increased complexity when | ||||
application programmers, users or system administrators try to | ||||
understand why any issues and failures may be happening. Transport | ||||
Services systems should therefore offer monitoring functions that | ||||
provide relevant debug and diagnostics information. For example, | ||||
such monitoring functions could indicate the protocol(s) in use, the | ||||
number of open connections per protocol, and any statistics that | ||||
these protocols may offer. | ||||
4. Transport Services Architecture and Concepts | 4. Transport Services Architecture and Concepts | |||
This section and the remainder of this document describe the | This section of the document describes the architecture non- | |||
architecture non-normatively. The concepts defined in this document | normatively and explains the operation of a Transport Services | |||
are intended primarily for use in the documents and specifications | Implementation. The concepts defined in this document are intended | |||
that describe the Transport Services system. This includes the | primarily for use in the documents and specifications that describe | |||
architecture, the Transport Services API and the associated Transport | the Transport Services System. This includes the architecture, the | |||
Services implementation. While the specific terminology can be used | Transport Services API and the associated Transport Services | |||
in some implementations, it is expected that there will remain a | Implementation. While the specific terminology can be used in some | |||
variety of terms used by running code. | implementations, it is expected that there will remain a variety of | |||
terms used by running code. | ||||
The architecture divides the concepts for Transport Services system | The architecture divides the concepts for Transport Services System | |||
into two categories: | 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 the | The following diagram summarizes the top-level concepts in a | |||
architecture and how they relate to one another. | Transport Services System and how they relate to one another. | |||
+-----------------------------------------------------+ | +-----------------------------------------------------+ | |||
| Application | | | Application | | |||
+-+----------------+------^-------+--------^----------+ | +-+----------------+------^-------+--------^----------+ | |||
| | | | | | | | | | | | |||
pre- | data | events | pre- | data | events | |||
establishment | transfer | | | establishment | transfer | | | |||
| establishment | termination | | | establishment | termination | | |||
| | | | | | | | | | | | |||
| +--v------v-------v+ | | | +--v------v-------v+ | | |||
skipping to change at page 17, line 35 ¶ | skipping to change at page 19, line 35 ¶ | |||
| (Candidate Gathering) | +-----------------+ | | | (Candidate Gathering) | +-----------------+ | | |||
| | | | | | | | |||
| (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 Transport Services | Figure 3: Concepts and Relationships in the Architecture of the | |||
Architecture | 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 platform- | |||
and implementation- dependent, and do not affect application-level | and implementation- dependent, and do not affect application-level | |||
interoperability, the Transport Services API | interoperability, the Transport Services API | |||
[I-D.ietf-taps-interface] does not specify an interface for reading | [I-D.ietf-taps-interface] does not specify an interface for reading | |||
or writing System Policy. | or writing System Policy. | |||
The Cached State is the state and history that the implementation | The Cached State is the state and history that the Transport Services | |||
keeps for each set of associated endpoints that have previously been | Implementation keeps for each set of associated Endpoints that have | |||
used. | previously been used. An application ought to explicitly request any | |||
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 as handles or referenced objects, depending on the chosen | exposed as handles or referenced objects, depending on the chosen | |||
programming language. | programming 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 | * Pre-establishment (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 pre- | |||
establishment can have a large impact on the rest of the | establishment can have a large impact on the rest of the | |||
interface: they modify how establishment occurs, they influence | interface: they modify how establishment occurs, they influence | |||
the expectations around data transfer, and they determine the set | the expectations around data transfer, and they 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 | |||
skipping to change at page 19, line 34 ¶ | skipping to change at page 21, line 43 ¶ | |||
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 broken into | In this diagram, the lifetime of a Connection object is divided into | |||
three phases: pre-establishment, the Established state, and | three phases: pre-establishment, the Established state, and | |||
Termination. | Termination. | |||
Pre-establishment is based around a Preconnection object, that | Pre-establishment is based around a Preconnection object, that | |||
contains various sub-objects that describe the properties and | contains various sub-objects that describe the properties and | |||
parameters of desired Connections (Local and Remote Endpoints, | parameters of desired Connections (Local and Remote Endpoints, | |||
Transport Properties, and Security Parameters). A Preconnection can | Transport Properties, and Security Parameters). A Preconnection can | |||
be used to start listening for inbound connections, in which case a | be used to start listening for inbound connections, in which case a | |||
Listener object is created, or can be used to establish a new | Listener object is created, or can be used to establish a new | |||
connection directly using Initiate (for outbound connections) or | connection directly using Initiate (for outbound connections) or | |||
Rendezvous (for peer-to-peer connections). | Rendezvous (for 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 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 | |||
* Endpoint: An endpoint represents an identifier for one side of a | An Endpoint Identifier specifies one side of a transport connection. | |||
transport connection. Endpoints can be Local Endpoints or Remote | Endpoints can be Local Endpoints or Remote Endpoints, and the | |||
Endpoints, and 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. | application uses for the source or destination of a connection. An | |||
An endpoint can be specified at various levels of abstraction. An | Endpoint Identifier can be specified at various levels of | |||
endpoint at a higher level of abstraction (such as a hostname) can | abstraction. An Endpoint Identifier at a higher level of abstraction | |||
be resolved to more concrete identities (such as IP addresses). | (such as a hostname) can be resolved to more concrete identities | |||
An endpoint may also represent a multicast group, in which case it | (such as IP addresses). A Remote Endpoint Identifier can also | |||
selects a multicast transport for communication. | represent a multicast group or anycast address. In the case of | |||
multicast, this selects a multicast transport for communication. | ||||
* Remote Endpoint: The Remote Endpoint represents the application's | * Remote Endpoint Identifier: The Remote Endpoint Identifier | |||
identifier for a peer that can participate in a transport | represents the application's identifier for a peer that can | |||
connection; for example, the combination of a DNS name for the | participate in a transport connection; for example, the | |||
peer and a service name/port. | combination of a DNS name for the peer and a service name/port. | |||
* Local Endpoint: The Local Endpoint represents the application's | * Local Endpoint Identifier: The Local Endpoint Identifier | |||
identifier for itself that it uses for transport connections; for | represents the application's identifier for itself that it uses | |||
example, a local IP address and port. | for transport connections; for example, a local IP address and | |||
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 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 multi-streaming 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 from | describes parameters of the Connection: the Local Endpoint | |||
which that Connection will be established, the Remote Endpoint | Identifier from which that Connection will be established, the | |||
(Section 4.1.3) to which it will connect, and Transport Properties | Remote Endpoint Identifier (Section 4.1.3) to which it will | |||
that influence the paths and protocols a Connection will use. A | connect, and Transport Properties that influence the paths and | |||
Preconnection can be either fully specified (representing a single | protocols a Connection will use. A Preconnection can be either | |||
possible Connection), or it can be partially specified | fully specified (representing a single possible Connection), or it | |||
(representing a family of possible Connections). The Local | can be partially specified (representing a family of possible | |||
Endpoint (Section 4.1.3) is required for a Preconnection used to | Connections). The Local Endpoint (Section 4.1.3) is required for | |||
Listen for incoming Connections, but optional if it is used to | a Preconnection used to Listen for incoming Connections, but | |||
Initiate a Connection. The Remote Endpoint is required in a | optional if it is used to Initiate a Connection. The Remote | |||
Preconnection that used to Initiate a Connection, but is optional | Endpoint Identifier is required in a Preconnection that used to | |||
if it is used to Listen for incoming Connections. The Local | Initiate a Connection, but is optional if it is used to Listen for | |||
Endpoint and the Remote Endpoint are both required if a peer-to- | incoming Connections. The Local Endpoint Identifier and the | |||
peer Rendezvous is to occur based on the Preconnection. | Remote Endpoint Identifier are both required if a peer-to-peer | |||
Rendezvous is to occur based on the Preconnection. | ||||
* Transport Properties: Transport Properties allow the application | * Transport Properties: Transport Properties allow the application | |||
to express their requirements, prohibitions, and preferences and | to express their requirements, prohibitions, and preferences and | |||
configure a Transport Services system. There are three kinds of | configure a Transport Services Implementation. There are three | |||
Transport Properties: | kinds of 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 be specified on a Preconnection and changed on the | can 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 | |||
skipping to change at page 21, line 51 ¶ | skipping to change at page 24, line 23 ¶ | |||
of properties that influence path selection include the interface | of 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 fast | |||
open support. | open support. | |||
* Connection Properties: The Connection Properties are used to | * Connection Properties: The Connection Properties are used to | |||
configure protocol-specific options and control per-connection | configure protocol-specific options and control per-connection | |||
behavior of a Transport Services implementation; for example, a | behavior of a Transport Services Implementation; for example, a | |||
protocol-specific Connection Property can express that if TCP is | protocol-specific Connection Property can express that if TCP is | |||
used, the implementation ought to use the User Timeout Option. | used, the implementation ought to use the User Timeout Option. | |||
Note that the presence of such a property does not require that a | Note that the presence of such a property does not require that a | |||
specific protocol will be used. In general, these properties do | specific protocol will be used. In general, these properties do | |||
not explicitly determine the selection of paths or protocols, but | not explicitly determine the selection of paths or protocols, but | |||
can be used by an implementation during connection establishment. | can be used by an implementation during connection establishment. | |||
Connection Properties are specified on a Preconnection prior to | Connection Properties are specified on a Preconnection prior to | |||
Connection establishment, and can be modified on the Connection | Connection establishment, and can be modified on the Connection | |||
later. Changes made to Connection Properties after Connection | later. 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 a Connection to a Remote Endpoint, and prepare any required | create a Connection to a Remote Endpoint, and prepare any required | |||
local or remote state to enable the transmission of Messages. For | local or remote state to enable the transmission of Messages. For | |||
some protocols, this will initiate a client-to-server style | some protocols, this will initiate a client-to-server style | |||
handshake; for other protocols, this will just establish local | handshake; for other protocols, this will just establish local | |||
state (e.g., with connectionless protocols such as UDP). The | state (e.g., with connectionless protocols such as UDP). The | |||
process of identifying options for connecting, such as resolution | process of identifying options for connecting, such as resolution | |||
of the Remote Endpoint, occurs in response to the Initiate call. | of the Remote Endpoint Identifier, occurs in response to the | |||
Initiate 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(s). Connections can be accepted on any of the | Local Endpoint Identifier(s). Connections can be accepted on any | |||
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 | |||
occurs in response to the Rendezvous call. As with Listeners, the | Identifier(s), occurs in response to the Rendezvous call. As with | |||
set of local paths and endpoints is constrained by Selection | Listeners, the set of local paths and endpoints is constrained by | |||
Properties. If successful, the Rendezvous call returns a | Selection Properties. If successful, the Rendezvous call | |||
Connection object to represent the established peer-to-peer | generates and asynchronously returns a Connection object to | |||
connection. The processes by which connections are initiated | represent the established peer-to-peer connection. The processes | |||
during a Rendezvous action will depend on the set of Local and | by which connections are initiated during a Rendezvous action will | |||
Remote Endpoints configured on the Preconnection. For example, if | depend on the set of Local and Remote Endpoints configured on the | |||
the Local and Remote Endpoints are TCP host candidates, then a TCP | Preconnection. For example, if the Local and Remote Endpoints are | |||
simultaneous open [RFC9293] will be performed. However, if the | TCP host candidates, then a TCP simultaneous open [RFC9293] might | |||
set of Local Endpoints includes server reflexive candidates, such | be performed. However, if the set of Local Endpoints includes | |||
as those provided by STUN (Session Traversal Utilities for NAT) | server reflexive candidates, such as those provided by STUN | |||
[RFC5389], a Rendezvous action will race candidates in the style | (Session Traversal Utilities for NAT) [RFC5389], a Rendezvous | |||
of the ICE (Interactive Connection Establishment) algorithm | action will race candidates in the style of the ICE (Interactive | |||
[RFC8445] to perform NAT binding discovery and initiate a peer-to- | Connection Establishment) algorithm [RFC8445] to perform NAT | |||
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 as bytes that can be transferred between two endpoints | represented as bytes that can be transferred between two endpoints | |||
over a transport connection. The bytes within a Message are | over a transport connection. The bytes within a Message are | |||
assumed to be ordered. If an application does not care about the | assumed to be ordered. If an application does not care about the | |||
order in which a peer receives two distinct spans of bytes, those | order in which a peer receives two distinct spans of bytes, those | |||
spans of bytes are considered independent Messages. Messages are | spans of bytes are considered independent Messages. Messages are | |||
sent in the payload of IP packet. One packet can carry one or | sent in the payload of IP packets. One packet can carry one or | |||
more Messages or parts of a Message. | more 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 as defaults. These properties might only apply to how | Connection as defaults. These properties might only apply to how | |||
a Message is sent (such as how the transport will treat | a Message is sent (such as how the transport will treat | |||
prioritization and reliability), but can also include properties | prioritization and reliability), but can also include properties | |||
that specific protocols encode and communicate to the Remote | that specific protocols encode and communicate to the Remote | |||
Endpoint. When receiving Messages, Message Properties can contain | Endpoint. When receiving Messages, Message Properties can contain | |||
skipping to change at page 24, line 46 ¶ | skipping to change at page 27, line 14 ¶ | |||
* Connection Closed: Signals to an application that a given | * Connection Closed: Signals to an application that a given | |||
Connection is no longer usable for sending or receiving Messages. | Connection is no longer usable for sending or receiving Messages. | |||
The event delivers a reason or error to the application that | The event delivers a reason or error to the application that | |||
describes the nature of the termination. | describes the nature of the termination. | |||
* Connection Received: Signals to an application that a given | * Connection Received: Signals to an application that a given | |||
Listener has received a Connection. | Listener 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. This can include an error | application, based on a Receive action. To allow an application | |||
if the Receive action cannot be satisfied due to the Connection | to limit the occurrence of such events, each call to Receive will | |||
being closed. | be paired with a single Receive event. This can include an error | |||
if the Receive action cannot be satisfied, e.g., due to the | ||||
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 an indication 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 the Connection has changed that might influence how and where | of the Connection has changed that might influence how and where | |||
data is sent and/or received. | data 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, is no longer willing to | |||
receive data, and that the protocol should signal this state to | receive data, and that the protocol should signal this state to | |||
the Remote Endpoint if the transport protocol allows this. (Note | the Remote Endpoint if the transport protocol allows this. (Note | |||
that this is distinct from the concept of "half-closing" a | that this is distinct from the concept of "half-closing" a | |||
bidirectional connection, such as when a FIN is sent in one | bidirectional connection, such as when a FIN is sent in one | |||
direction of a TCP connection [RFC9293]. The end of a stream can | direction of a TCP connection [RFC9293]. The end of a stream can | |||
also be indicated using Message Properties when sending.) | also be indicated 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 a Close and also indicate that a Transport Services | indicate a Close and also indicate that the Transport Services | |||
system should not attempt to deliver any outstanding data, and | System should not attempt to deliver any outstanding data, and | |||
immediately drop the connection. This is intended for immediate, | immediately drop the connection. This is intended for immediate, | |||
usually abnormal, termination of a connection. | usually abnormal, 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 | |||
multiplexing transport protocols, only Connections within the same | transport protocols that support multiplexing, only Connections | |||
Connection Group are allowed to be multiplexed together. | within the same Connection Group are allowed to be multiplexed | |||
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. | |||
For multiplexing transport protocols, only Connections within the | ||||
same Connection Group are allowed to be multiplexed together. | ||||
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 multi-streaming protocol instance. | |||
While Connection Groups are managed by the Transport Services system, | While Connection Groups are managed by the Transport Services | |||
an application can define different Connection Contexts for different | Implementation, an application can define different Connection | |||
Connection Groups to explicitly control caching boundaries, as | Contexts for different Connection Groups to explicitly control | |||
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 concepts of the Transport Services | This section defines the key architectural concepts for the Transport | |||
architecture. | Services Implementation within the Transport Services System. | |||
* Transport Service implementation: This consists of all objects and | The Transport Services System consists of the Transport Services | |||
protocol instances used internally to a system or library to | Implementation and the Transport Services API. The Transport | |||
implement the functionality needed to provide a transport service | Services Implementation consists of all objects and protocol | |||
across a network, as required by the abstract interface. | instances used internally to a system or library to implement the | |||
functionality needed to provide a transport service across a network, | ||||
as required by the abstract interface. | ||||
* Transport Services system: This consists of the Transport Service | ||||
implementation and the Transport Services API. | ||||
* 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 state necessary to establish connectivity or send and receive | any 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 | |||
skipping to change at page 27, line 19 ¶ | skipping to change at page 29, line 40 ¶ | |||
Specific aspects of the System Policy either apply to all | Specific aspects of the System Policy either apply to all | |||
Connections or only certain ones, depending on the runtime context | Connections or only certain ones, depending on the runtime context | |||
and properties of the Connection. | 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 the | connections, rather, it means that cached state is used by a | |||
Transport Services architecture 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 behaviour, 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 | |||
Endpoints provided by the application, as well as the policies and | Endpoint Identifiers provided by the application, as well as the | |||
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 for local | different Paths will have distinct configurations (see [RFC7556]) | |||
addresses and DNS servers, attempts across different Paths will | for local addresses and DNS servers, attempts across different | |||
perform separate DNS resolution steps, which can lead to further | Paths will perform separate DNS resolution steps, which can lead | |||
racing of the resolved Remote Endpoints. | 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, such as a particular IP | representation of the Remote Endpoint Identifier, such as a | |||
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 about re-using cached protocol state that can | * Privacy concerns about re-using cached protocol state that can | |||
lead to linkability. Sensitive state could include TLS session | lead to linkability. Sensitive state could include TLS session | |||
skipping to change at page 28, line 48 ¶ | skipping to change at page 31, line 26 ¶ | |||
as for different browser tabs. | as for different browser tabs. | |||
* Privacy concerns about allowing Connections to multiplex together, | * Privacy concerns about allowing Connections to multiplex together, | |||
which can tell a Remote Endpoint that all of the Connections are | which can tell a Remote Endpoint that all of the Connections are | |||
coming from the same application. Using Connection Contexts | coming from the same application. Using Connection Contexts | |||
avoids the Connections being multiplexed in a HTTP/2 or QUIC | avoids the Connections being multiplexed in a HTTP/2 or QUIC | |||
stream. | stream. | |||
5. IANA Considerations | 5. IANA Considerations | |||
RFC-EDITOR: Please remove this section before publication. | ||||
This document has no actions for IANA. | This document has no actions for IANA. | |||
6. Security and Privacy Considerations | 6. Security and Privacy Considerations | |||
The Transport Services architecture does not recommend use of | The Transport Services System does not recommend use of specific | |||
specific security protocols or algorithms. Its goal is to offer ease | security protocols or algorithms. Its goal is to offer ease of use | |||
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 tradeoffs 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 native | the cache toward an on-path observer). Some applications have | |||
concepts (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). | another security protocol handshake that is 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 to weaker versions of | |||
secure protocols (see Section 3.3). For example, if an application | secure protocols (see Section 3.3). For example, if an application | |||
requests a specific version of TLS, but the desired version of TLS is | requests a specific version of TLS, but the desired version of TLS is | |||
not available, its connection will fail. As described in | not available, its connection will fail. As described in | |||
Section 3.3, the Transport Services API can allow applications to | Section 3.3, the Transport Services API can allow applications to | |||
specify minimum versions that are allowed to be used by the Transport | specify minimum versions that are allowed to be used by the Transport | |||
Services system. | Services System. | |||
7. Acknowledgements | 7. Acknowledgements | |||
This work has received funding from the European Union's Horizon 2020 | This work has received funding from the European Union's Horizon 2020 | |||
research and innovation programme under grant agreements No. 644334 | research and innovation programme under grant agreements No. 644334 | |||
(NEAT), No. 688421 (MAMI) and No 815178 (5GENESIS). | (NEAT), No. 688421 (MAMI) and No 815178 (5GENESIS). | |||
This work has been supported by Leibniz Prize project funds of DFG - | This work has been supported by Leibniz Prize project funds of DFG - | |||
German Research Foundation: Gottfried Wilhelm Leibniz-Preis 2011 (FKZ | German Research Foundation: Gottfried Wilhelm Leibniz-Preis 2011 (FKZ | |||
FE 570/4-1). | FE 570/4-1). | |||
This work has been supported by the UK Engineering and Physical | This work has been supported by the UK Engineering and Physical | |||
Sciences Research Council under grant EP/R04144X/1. | Sciences Research Council under grant EP/R04144X/1. | |||
Thanks to Reese Enghardt, Max Franke, Mirja Kuehlewind, Jonathan | Thanks to Reese Enghardt, Max Franke, Mirja Kuehlewind, Jonathan | |||
Lennox, and Michael Welzl for the discussions and feedback that | Lennox, and Michael Welzl for the discussions and feedback that | |||
helped shape the architecture described here. Particular thanks is | helped shape the architecture of the system described here. | |||
also due to Philipp S. Tiesel and Christopher A. Wood, who were | Particular thanks is also due to Philipp S. Tiesel and Christopher | |||
both co-authors of this architecture specification as it progressed | A. Wood, who were both co-authors of this specification as it | |||
through the TAPS working group. Thanks as well to Stuart Cheshire, | progressed through the TAPS working group. Thanks as well to Stuart | |||
Josh Graessley, David Schinazi, and Eric Kinnear for their | Cheshire, Josh Graessley, David Schinazi, and Eric Kinnear for their | |||
implementation and design efforts, including Happy Eyeballs, that | implementation and design efforts, including Happy Eyeballs, that | |||
heavily influenced this work. | heavily influenced this work. | |||
8. References | 8. References | |||
8.1. Normative References | 8.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, | |||
skipping to change at page 30, line 46 ¶ | skipping to change at page 33, line 19 ¶ | |||
[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/rfc/rfc8174>. | |||
8.2. Informative References | 8.2. Informative References | |||
[I-D.ietf-taps-impl] | [I-D.ietf-taps-impl] | |||
Brunstrom, A., Pauly, T., Enghardt, R., Tiesel, P. S., and | Brunstrom, A., Pauly, T., Enghardt, R., Tiesel, P. S., and | |||
M. Welzl, "Implementing Interfaces to Transport Services", | M. Welzl, "Implementing Interfaces to Transport Services", | |||
Work in Progress, Internet-Draft, draft-ietf-taps-impl-15, | Work in Progress, Internet-Draft, draft-ietf-taps-impl-16, | |||
9 March 2023, <https://datatracker.ietf.org/doc/html/ | 5 June 2023, <https://datatracker.ietf.org/doc/html/draft- | |||
draft-ietf-taps-impl-15>. | ietf-taps-impl-16>. | |||
[I-D.ietf-taps-interface] | [I-D.ietf-taps-interface] | |||
Trammell, B., Welzl, M., Enghardt, R., Fairhurst, G., | Trammell, B., Welzl, M., Enghardt, R., Fairhurst, G., | |||
Kühlewind, M., Perkins, C., Tiesel, P. S., and T. Pauly, | Kühlewind, M., Perkins, C., Tiesel, P. S., and T. Pauly, | |||
"An Abstract Application Layer Interface to Transport | "An Abstract Application Layer Interface to Transport | |||
Services", Work in Progress, Internet-Draft, draft-ietf- | Services", Work in Progress, Internet-Draft, draft-ietf- | |||
taps-interface-20, 29 March 2023, | taps-interface-22, 6 July 2023, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-taps- | <https://datatracker.ietf.org/doc/html/draft-ietf-taps- | |||
interface-20>. | interface-22>. | |||
[POSIX] "IEEE Std. 1003.1-2008 Standard for Information Technology | [POSIX] "IEEE Std. 1003.1-2008 Standard for Information Technology | |||
-- Portable Operating System Interface (POSIX). Open | -- Portable Operating System Interface (POSIX). Open | |||
group Technical Standard: Base Specifications, Issue 7", | group Technical Standard: Base Specifications, Issue 7", | |||
2008. | 2008. | |||
[RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | [RFC5389] Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, | |||
"Session Traversal Utilities for NAT (STUN)", RFC 5389, | "Session Traversal Utilities for NAT (STUN)", RFC 5389, | |||
DOI 10.17487/RFC5389, October 2008, | DOI 10.17487/RFC5389, October 2008, | |||
<https://www.rfc-editor.org/rfc/rfc5389>. | <https://www.rfc-editor.org/rfc/rfc5389>. | |||
[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/rfc/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/rfc/rfc6265>. | |||
[RFC7556] Anipko, D., Ed., "Multiple Provisioning Domain | ||||
Architecture", RFC 7556, DOI 10.17487/RFC7556, June 2015, | ||||
<https://www.rfc-editor.org/rfc/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/rfc/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/rfc/rfc8170>. | |||
skipping to change at page 32, line 25 ¶ | skipping to change at page 34, line 45 ¶ | |||
[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/rfc/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/rfc/rfc8923>. | |||
[RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | ||||
Multiplexed and Secure Transport", RFC 9000, | ||||
DOI 10.17487/RFC9000, May 2021, | ||||
<https://www.rfc-editor.org/rfc/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/rfc/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/rfc/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, | |||
End of changes. 123 change blocks. | ||||
375 lines changed or deleted | 446 lines changed or added | |||
This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |