rfc9621v3.txt | rfc9621.txt | |||
---|---|---|---|---|
skipping to change at line 148 ¶ | skipping to change at line 148 ¶ | |||
to identify an optimal combination of a transport protocol instance | to identify an optimal combination of a transport protocol instance | |||
such as TCP, UDP, or another transport, together with configuration | such as TCP, UDP, or another transport, together with configuration | |||
of parameters and interfaces. A Connection represents an object | of parameters and interfaces. A Connection represents an object | |||
that, once established, can be used to send and receive messages. A | that, once established, can be used to send and receive messages. A | |||
Connection can also be created from another Connection, by cloning, | Connection can also be created from another Connection, by cloning, | |||
and then forms a part of a Connection Group whose Connections share | and then forms a part of a Connection Group whose Connections share | |||
properties. | properties. | |||
This document was developed in parallel with the specification of the | This document was developed in parallel with the specification of the | |||
Transport Services API [RFC9622] and implementation guidelines | Transport Services API [RFC9622] and implementation guidelines | |||
[RFC9623]. Although following the Transport Services architecture | [RFC9623]. Although following the Transport Services Architecture | |||
does not require all APIs and implementations to be identical, a | does not require all APIs and implementations to be identical, a | |||
common minimal set of features represented in a consistent fashion | common minimal set of features represented in a consistent fashion | |||
will enable applications to be easily ported from one implementation | will enable applications to be easily ported from one implementation | |||
of the Transport Services System to another. | of the Transport Services System to another. | |||
1.1. Background | 1.1. Background | |||
The architecture of the Transport Services System is based on the | The architecture of the Transport Services System is based on the | |||
survey of services provided by IETF transport protocols and | survey of services provided by IETF transport protocols and | |||
congestion control mechanisms [RFC8095] and the distilled minimal set | congestion control mechanisms [RFC8095] and the distilled minimal set | |||
skipping to change at line 217 ¶ | skipping to change at line 217 ¶ | |||
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 | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
1.4. Glossary of Key Terms | 1.4. Glossary of Key Terms | |||
This subsection provides a glossary of key terms related to the | This subsection provides a glossary of key terms related to the | |||
Transport Services architecture. It provides a short description of | Transport Services Architecture. It provides a short description of | |||
key terms that are defined later in this document. | key terms that are defined later in this document. | |||
Application: An entity that uses the transport layer for end-to-end | Application: An entity that uses the transport layer for end-to-end | |||
delivery of data across the network [RFC8095]. | delivery of data across the network [RFC8095]. | |||
Cached State: The state and history that the Transport Services | Cached State: The state and history that the Transport Services | |||
Implementation keeps for each set of the associated Endpoints that | Implementation keeps for each set of the associated Endpoints that | |||
have been used previously. | have been used previously. | |||
Candidate Path: One path that is available to an application and | Candidate Path: One path that is available to an application and | |||
skipping to change at line 351 ¶ | skipping to change at line 351 ¶ | |||
Transport Feature: A specific end-to-end feature that the transport | Transport Feature: A specific end-to-end feature that the transport | |||
layer provides to an application. | layer provides to an application. | |||
Transport Property: A property of a transport protocol and the | Transport Property: A property of a transport protocol and the | |||
services it provides [RFC8095]. | services it provides [RFC8095]. | |||
Transport Service: A set of transport features, not associated with | Transport Service: A set of transport features, not associated with | |||
any given framing protocol, that provides a complete service to an | any given framing protocol, that provides a complete service to an | |||
application. | application. | |||
Transport Services API: The abstract interface [RFC9622] to a | ||||
Transport Services Implementation [RFC9623]. | ||||
Transport Services Implementation: All objects and protocol | Transport Services Implementation: All objects and protocol | |||
instances used internally to a system or library to implement the | instances used internally to a system or library to implement the | |||
functionality needed to provide a transport service across a | functionality needed to provide a transport service across a | |||
network, as required by the abstract interface. | network, as required by the abstract interface. | |||
Transport Services System: The Transport Services Implementation and | Transport Services System: The Transport Services Implementation and | |||
the Transport Services API. | the Transport Services API. | |||
2. API Model | 2. API Model | |||
skipping to change at line 517 ¶ | skipping to change at line 520 ¶ | |||
* providing additional information to the Protocol Stack; | * providing additional information to the Protocol Stack; | |||
* the ability to associate deadlines with messages, for applications | * the ability to associate deadlines with messages, for applications | |||
that care about timing; | that care about timing; | |||
* the ability to control reliability, which messages to retransmit | * the ability to control reliability, which messages to retransmit | |||
when there is packet loss, and how best to make use of the data | when there is packet loss, and how best to make use of the data | |||
that arrived; | that arrived; | |||
* the ability to automatically assign messages and connections to | * the ability to automatically assign messages and connections to | |||
underlying transport connections to utilize multi-streaming and | underlying transport connections to utilize multistreaming and | |||
pooled connections. | pooled connections. | |||
Allowing applications to interact with messages is backward- | Allowing applications to interact with messages is backward- | |||
compatible with existing protocols and APIs because it does not | compatible with existing protocols and APIs because it does not | |||
change the wire format of any protocol. Instead, it provides the | change the wire format of any protocol. Instead, it provides the | |||
Protocol Stack with additional information to allow it to make better | Protocol Stack with additional information to allow it to make better | |||
use of modern Transport Services, while simplifying the application's | use of modern Transport Services, while simplifying the application's | |||
role in parsing data. For protocols that inherently use a streaming | role in parsing data. For protocols that inherently use a streaming | |||
abstraction, framers (Section 4.1.5) bridge the gap between the two | abstraction, framers (Section 4.1.5) bridge the gap between the two | |||
abstractions. | abstractions. | |||
2.3. Flexible Implementation | 2.3. Flexible Implementation | |||
The Socket API for protocols like TCP is generally limited to | The Socket API for protocols like TCP is generally limited to | |||
connecting to a single address over a single interface (IP source | connecting to a single address over a single interface (IP source | |||
address). It also presents a single stream to the application. | address). It also presents a single stream to the application. | |||
Software layers built upon this API often propagate this limitation | Software layers built upon this API often propagate this limitation | |||
of a single-address single-stream model. The Transport Services | of a single-address single-stream model. The Transport Services | |||
architecture is designed to: | Architecture is designed to: | |||
* handle multiple candidate endpoints, protocols, and paths; | * handle multiple candidate endpoints, protocols, and paths; | |||
* support candidate protocol racing to select the most optimal stack | * support candidate protocol racing to select the most optimal stack | |||
in each situation; | in each situation; | |||
* support multipath and multistreaming protocols; | * support multipath and multistreaming protocols; | |||
* provide state caching and application control over it. | * provide state caching and application control over it. | |||
skipping to change at line 1000 ¶ | skipping to change at line 1003 ¶ | |||
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 it can | represent a connection-oriented protocol such as TCP, or it can | |||
represent a fully specified 5-tuple for a connectionless protocol | represent a fully specified 5-tuple for a connectionless protocol | |||
such as UDP, where the Connection remains an abstraction at the | such as UDP, where the Connection remains an abstraction at the | |||
endpoints. It can also represent a pool of transport protocol | endpoints. It can also represent a pool of transport protocol | |||
instances, e.g., a set of TCP and QUIC connections to equivalent | instances, e.g., a set of TCP and QUIC connections to equivalent | |||
endpoints, or a stream of a multi-streaming transport protocol | endpoints, or a stream of a multistreaming transport protocol | |||
instance. Connections can be created from a Preconnection or by a | instance. Connections can be created from a Preconnection or by a | |||
Listener. | Listener. | |||
Preconnection: A Preconnection object is a representation of a | Preconnection: A Preconnection object is a representation of a | |||
Connection that has not yet been established. It has state that | Connection that has not yet been established. It has state that | |||
describes parameters of the Connection: the Local Endpoint | describes parameters of the Connection: the Local Endpoint | |||
Identifier from which that Connection will be established, the | Identifier from which that Connection will be established, the | |||
Remote Endpoint Identifier to which it will connect, and Transport | Remote Endpoint Identifier to which it will connect, and Transport | |||
Properties that influence the paths and protocols a Connection | Properties that influence the paths and protocols a Connection | |||
will use. A Preconnection can be either fully specified | will use. A Preconnection can be either fully specified | |||
skipping to change at line 1247 ¶ | skipping to change at line 1250 ¶ | |||
The API allows a Connection to be created from another Connection. | The API allows a Connection to be created from another Connection. | |||
This adds the new Connection to the Connection Group. A change to | This adds the new Connection to the Connection Group. A change to | |||
one of the Connection Properties on any Connection in the Connection | one of the Connection Properties on any Connection in the Connection | |||
Group automatically changes the Connection Property for all others. | Group automatically changes the Connection Property for all others. | |||
All Connections in a Connection Group share the same set of | All Connections in a Connection Group share the same set of | |||
Connection Properties except for the Connection Priority. These | Connection Properties except for the Connection Priority. These | |||
Connection Properties are said to be entangled. | Connection Properties are said to be entangled. | |||
Passive Connections can also be added to a Connection Group, e.g., | Passive Connections can also be added to a Connection Group, e.g., | |||
when a Listener receives a new Connection that is just a new stream | when a Listener receives a new Connection that is just a new stream | |||
of an already-active multi-streaming protocol instance. | of an already-active multistreaming protocol instance. | |||
While Connection Groups are managed by the Transport Services | While Connection Groups are managed by the Transport Services | |||
Implementation, an application can define different Connection | Implementation, an application can define different Connection | |||
Contexts for different Connection Groups to explicitly control | Contexts for different Connection Groups to explicitly control | |||
caching boundaries, as discussed in Section 4.2.3. | caching boundaries, as discussed in Section 4.2.3. | |||
4.2. Transport Services Implementation | 4.2. Transport Services Implementation | |||
This section defines the key architectural concepts for the Transport | This section defines the key architectural concepts for the Transport | |||
Services Implementation within the Transport Services System. | Services Implementation within the Transport Services System. | |||
End of changes. 7 change blocks. | ||||
6 lines changed or deleted | 9 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |