draft-ietf-taps-minset-11.txt | rfc8923.txt | |||
---|---|---|---|---|
TAPS M. Welzl | Internet Engineering Task Force (IETF) M. Welzl | |||
Internet-Draft S. Gjessing | Request for Comments: 8923 S. Gjessing | |||
Intended status: Informational University of Oslo | Category: Informational University of Oslo | |||
Expires: March 31, 2019 September 27, 2018 | ISSN: 2070-1721 October 2020 | |||
A Minimal Set of Transport Services for End Systems | A Minimal Set of Transport Services for End Systems | |||
draft-ietf-taps-minset-11 | ||||
Abstract | Abstract | |||
This draft recommends a minimal set of Transport Services offered by | This document recommends a minimal set of Transport Services offered | |||
end systems, and gives guidance on choosing among the available | by end systems and gives guidance on choosing among the available | |||
mechanisms and protocols. It is based on the set of transport | mechanisms and protocols. It is based on the set of transport | |||
features in RFC 8303. | features in RFC 8303. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
approved by the IESG are candidates for any level of Internet | ||||
Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on March 31, 2019. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc8923. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2020 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 | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology | |||
3. Deriving the minimal set . . . . . . . . . . . . . . . . . . 5 | 3. Deriving the Minimal Set | |||
4. The Reduced Set of Transport Features . . . . . . . . . . . . 6 | 4. The Reduced Set of Transport Features | |||
4.1. CONNECTION Related Transport Features . . . . . . . . . . 7 | 4.1. CONNECTION-Related Transport Features | |||
4.2. DATA Transfer Related Transport Features . . . . . . . . 8 | 4.2. DATA-Transfer-Related Transport Features | |||
4.2.1. Sending Data . . . . . . . . . . . . . . . . . . . . 8 | 4.2.1. Sending Data | |||
4.2.2. Receiving Data . . . . . . . . . . . . . . . . . . . 9 | 4.2.2. Receiving Data | |||
4.2.3. Errors . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.2.3. Errors | |||
5. Discussion . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. Discussion | |||
5.1. Sending Messages, Receiving Bytes . . . . . . . . . . . . 10 | 5.1. Sending Messages, Receiving Bytes | |||
5.2. Stream Schedulers Without Streams . . . . . . . . . . . . 11 | 5.2. Stream Schedulers without Streams | |||
5.3. Early Data Transmission . . . . . . . . . . . . . . . . . 11 | 5.3. Early Data Transmission | |||
5.4. Sender Running Dry . . . . . . . . . . . . . . . . . . . 12 | 5.4. Sender Running Dry | |||
5.5. Capacity Profile . . . . . . . . . . . . . . . . . . . . 13 | 5.5. Capacity Profile | |||
5.6. Security . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.6. Security | |||
5.7. Packet Size . . . . . . . . . . . . . . . . . . . . . . . 14 | 5.7. Packet Size | |||
6. The Minimal Set of Transport Features . . . . . . . . . . . . 14 | 6. The Minimal Set of Transport Features | |||
6.1. ESTABLISHMENT, AVAILABILITY and TERMINATION . . . . . . . 14 | 6.1. ESTABLISHMENT, AVAILABILITY, and TERMINATION | |||
6.2. MAINTENANCE . . . . . . . . . . . . . . . . . . . . . . . 18 | 6.2. MAINTENANCE | |||
6.2.1. Connection groups . . . . . . . . . . . . . . . . . . 18 | 6.2.1. Connection Groups | |||
6.2.2. Individual connections . . . . . . . . . . . . . . . 20 | 6.2.2. Individual Connections | |||
6.3. DATA Transfer . . . . . . . . . . . . . . . . . . . . . . 20 | 6.3. DATA Transfer | |||
6.3.1. Sending Data . . . . . . . . . . . . . . . . . . . . 20 | 6.3.1. Sending Data | |||
6.3.2. Receiving Data . . . . . . . . . . . . . . . . . . . 21 | 6.3.2. Receiving Data | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 22 | 7. IANA Considerations | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 8. Security Considerations | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 9. References | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 9.1. Normative References | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 22 | 9.2. Informative References | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 23 | Appendix A. The Superset of Transport Features | |||
Appendix A. The Superset of Transport Features . . . . . . . . . 25 | A.1. CONNECTION-Related Transport Features | |||
A.1. CONNECTION Related Transport Features . . . . . . . . . . 26 | A.2. DATA-Transfer-Related Transport Features | |||
A.2. DATA Transfer Related Transport Features . . . . . . . . 42 | A.2.1. Sending Data | |||
A.2.1. Sending Data . . . . . . . . . . . . . . . . . . . . 42 | A.2.2. Receiving Data | |||
A.2.2. Receiving Data . . . . . . . . . . . . . . . . . . . 46 | A.2.3. Errors | |||
A.2.3. Errors . . . . . . . . . . . . . . . . . . . . . . . 47 | Acknowledgements | |||
Appendix B. Revision information . . . . . . . . . . . . . . . . 48 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
1. Introduction | 1. Introduction | |||
Currently, the set of transport services that most applications use | Currently, the set of Transport Services that most applications use | |||
is based on TCP and UDP (and protocols that are layered on top of | is based on TCP and UDP (and protocols that are layered on top of | |||
them); this limits the ability for the network stack to make use of | them); this limits the ability for the network stack to make use of | |||
features of other transport protocols. For example, if a protocol | features of other transport protocols. For example, if a protocol | |||
supports out-of-order message delivery but applications always assume | supports out-of-order message delivery but applications always assume | |||
that the network provides an ordered bytestream, then the network | that the network provides an ordered byte stream, then the network | |||
stack can not immediately deliver a message that arrives out-of- | stack can not immediately deliver a message that arrives out of | |||
order: doing so would break a fundamental assumption of the | order; doing so would break a fundamental assumption of the | |||
application. The net result is unnecessary head-of-line blocking | application. The net result is unnecessary head-of-line blocking | |||
delay. | delay. | |||
By exposing the transport services of multiple transport protocols, a | By exposing the Transport Services of multiple transport protocols, a | |||
transport system can make it possible for applications to use these | transport system can make it possible for applications to use these | |||
services without being statically bound to a specific transport | services without being statically bound to a specific transport | |||
protocol. The first step towards the design of such a system was | protocol. The first step towards the design of such a system was | |||
taken by [RFC8095], which surveys a large number of transports, and | taken by [RFC8095], which surveys a large number of transports, and | |||
[RFC8303] as well as [RFC8304], which identify the specific transport | [RFC8303] as well as [RFC8304], which identify the specific transport | |||
features that are exposed to applications by the protocols TCP, | features that are exposed to applications by the protocols TCP, | |||
MPTCP, UDP(-Lite) and SCTP as well as the LEDBAT congestion control | Multipath TCP (MPTCP), UDP(-Lite), and Stream Control Transmission | |||
mechanism. LEDBAT was included as the only congestion control | Protocol (SCTP), as well as the Low Extra Delay Background Transport | |||
mechanism in this list because the "low extra delay background | (LEDBAT) congestion control mechanism. LEDBAT was included as the | |||
transport" service that it offers is significantly different from the | only congestion control mechanism in this list because the "low extra | |||
typical service provided by other congestion control mechanisms. | delay background transport" service that it offers is significantly | |||
This memo is based on these documents and follows the same | different from the typical service provided by other congestion | |||
terminology (also listed below). Because the considered transport | control mechanisms. This memo is based on these documents and | |||
protocols conjointly cover a wide range of transport features, there | follows the same terminology (also listed below). Because the | |||
is reason to hope that the resulting set (and the reasoning that led | considered transport protocols conjointly cover a wide range of | |||
to it) will also apply to many aspects of other transport protocols | transport features, there is reason to hope that the resulting set | |||
that may be in use today, or may be designed in the future. | (and the reasoning that led to it) will also apply to many aspects of | |||
other transport protocols that may be in use today or may be designed | ||||
in the future. | ||||
By decoupling applications from transport protocols, a transport | By decoupling applications from transport protocols, a transport | |||
system provides a different abstraction level than the Berkeley | system provides a different abstraction level than the Berkeley | |||
sockets interface [POSIX]. As with high- vs. low-level programming | sockets interface [POSIX]. As with high- vs. low-level programming | |||
languages, a higher abstraction level allows more freedom for | languages, a higher abstraction level allows more freedom for | |||
automation below the interface, yet it takes some control away from | automation below the interface, yet it takes some control away from | |||
the application programmer. This is the design trade-off that a | the application programmer. This is the design trade-off that a | |||
transport system developer is facing, and this document provides | transport system developer is facing, and this document provides | |||
guidance on the design of this abstraction level. Some transport | guidance on the design of this abstraction level. Some transport | |||
features are currently rarely offered by APIs, yet they must be | features are currently rarely offered by APIs, yet they must be | |||
offered or they can never be used. Other transport features are | offered or they can never be used. Other transport features are | |||
offered by the APIs of the protocols covered here, but not exposing | offered by the APIs of the protocols covered here, but not exposing | |||
them in an API would allow for more freedom to automate protocol | them in an API would allow for more freedom to automate protocol | |||
usage in a transport system. The minimal set presented here is an | usage in a transport system. The minimal set presented here is an | |||
effort to find a middle ground that can be recommended for transport | effort to find a middle ground that can be recommended for transport | |||
systems to implement, on the basis of the transport features | systems to implement, on the basis of the transport features | |||
discussed in [RFC8303]. | discussed in [RFC8303]. | |||
Applications use a wide variety of APIs today. While this document | Applications use a wide variety of APIs today. While this document | |||
was created to ensure the API developed in the Transport Services | was created to ensure the API developed in the Transport Services | |||
(TAPS) Working Group ([I-D.ietf-taps-interface]) includes the most | (TAPS) Working Group [TAPS-INTERFACE] includes the most important | |||
important transport features, the minimal set presented here must be | transport features, the minimal set presented here must be reflected | |||
reflected in *all* network APIs in order for the underlying | in *all* network APIs in order for the underlying functionality to | |||
functionality to become usable everywhere. For example, it does not | become usable everywhere. For example, it does not help an | |||
help an application that talks to a library which offers its own | application that talks to a library that offers its own communication | |||
communication interface if the underlying Berkeley Sockets API is | interface if the underlying Berkeley Sockets API is extended to offer | |||
extended to offer "unordered message delivery", but the library only | "unordered message delivery", but the library only exposes an ordered | |||
exposes an ordered bytestream. Both the Berkeley Sockets API and the | byte stream. Both the Berkeley Sockets API and the library would | |||
library would have to expose the "unordered message delivery" | have to expose the "unordered message delivery" transport feature | |||
transport feature (alternatively, there may be ways for certain types | (alternatively, there may be ways for certain types of libraries to | |||
of libraries to use this transport feature without exposing it, based | use this transport feature without exposing it, based on knowledge | |||
on knowledge about the applications -- but this is not the general | about the applications, but this is not the general case). | |||
case). Similarly, transport protocols such as SCTP offer multi- | Similarly, transport protocols such as the Stream Control | |||
streaming, which cannot be utilized, e.g., to prioritize messages | Transmission Protocol (SCTP) offer multi-streaming, which cannot be | |||
between streams, unless applications communicate the priorities and | utilized, e.g., to prioritize messages between streams, unless | |||
the group of connections upon which these priorities should be | applications communicate the priorities and the group of connections | |||
applied. In most situations, in the interest of being as flexible | upon which these priorities should be applied. In most situations, | |||
and efficient as possible, the best choice will be for a library to | in the interest of being as flexible and efficient as possible, the | |||
expose at least all of the transport features that are recommended as | best choice will be for a library to expose at least all of the | |||
a "minimal set" here. | transport features that are recommended as a "minimal set" here. | |||
This "minimal set" can be implemented "one-sided" over TCP. This | This "minimal set" can be implemented "one-sided" over TCP. This | |||
means that a sender-side transport system can talk to a standard TCP | means that a sender-side transport system can talk to a standard TCP | |||
receiver, and a receiver-side transport system can talk to a standard | receiver, and a receiver-side transport system can talk to a standard | |||
TCP sender. If certain limitations are put in place, the "minimal | TCP sender. If certain limitations are put in place, the "minimal | |||
set" can also be implemented "one-sided" over UDP. While the | set" can also be implemented "one-sided" over UDP. While the | |||
possibility of such "one-sided" implementation may help deployment, | possibility of such "one-sided" implementation may help deployment, | |||
it comes at the cost of limiting the set to services that can also be | it comes at the cost of limiting the set to services that can also be | |||
provided by TCP (or, with further limitations, UDP). Thus, the | provided by TCP (or, with further limitations, UDP). Thus, the | |||
minimal set of transport features here is applicable for many, but | minimal set of transport features here is applicable for many, but | |||
not all, applications: some application protocols have requirements | not all, applications; some application protocols have requirements | |||
that are not met by this "minimal set". | that are not met by this "minimal set". | |||
Note that, throughout this document, protocols are meant to be used | Note that, throughout this document, protocols are meant to be used | |||
natively. For example, when transport features of UDP, or | natively. For example, when transport features of TCP, or | |||
"implementation over" UDP is discussed, this refers to native usage | "implementation over" TCP is discussed, this refers to native usage | |||
of UDP. | of TCP rather than TCP being encapsulated in some other transport | |||
protocol such as UDP. | ||||
2. Terminology | 2. Terminology | |||
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. Examples include | layer provides to an application. Examples include | |||
confidentiality, reliable delivery, ordered delivery, message- | confidentiality, reliable delivery, ordered delivery, message- | |||
versus-stream orientation, etc. | versus-stream orientation, etc. | |||
Transport Service: a set of Transport Features, without an | ||||
association to any given framing protocol, which provides a | Transport Service: A set of Transport Features, without an | |||
association to any given framing protocol, that provides a | ||||
complete service to an application. | complete service to an application. | |||
Transport Protocol: an implementation that provides one or more | ||||
different transport services using a specific framing and header | Transport Protocol: An implementation that provides one or more | |||
different Transport Services using a specific framing and header | ||||
format on the wire. | format on the wire. | |||
Application: an entity that uses a transport layer interface for | Application: An entity that uses a transport-layer interface for | |||
end-to-end delivery of data across the network (this may also be | end-to-end delivery of data across the network (this may also be | |||
an upper layer protocol or tunnel encapsulation). | an upper-layer protocol or tunnel encapsulation). | |||
Application-specific knowledge: knowledge that only applications | ||||
Application-specific knowledge: Knowledge that only applications | ||||
have. | have. | |||
End system: an entity that communicates with one or more other end | ||||
End system: An entity that communicates with one or more other end | ||||
systems using a transport protocol. An end system provides a | systems using a transport protocol. An end system provides a | |||
transport layer interface to applications. | transport-layer interface to applications. | |||
Connection: shared state of two or more end systems that persists | ||||
Connection: Shared state of two or more end systems that persists | ||||
across messages that are transmitted between these end systems. | across messages that are transmitted between these end systems. | |||
Connection Group: a set of connections which share the same | ||||
Connection Group: A set of connections that share the same | ||||
configuration (configuring one of them causes all other | configuration (configuring one of them causes all other | |||
connections in the same group to be configured in the same way). | connections in the same group to be configured in the same way). | |||
We call connections that belong to a connection group "grouped", | We call connections that belong to a connection group "grouped", | |||
while "ungrouped" connections are not a part of a connection | while "ungrouped" connections are not a part of a connection | |||
group. | group. | |||
Socket: the combination of a destination IP address and a | ||||
Socket: The combination of a destination IP address and a | ||||
destination port number. | destination port number. | |||
Moreover, throughout the document, the protocol name "UDP(-Lite)" is | Moreover, throughout the document, the protocol name "UDP(-Lite)" is | |||
used when discussing transport features that are equivalent for UDP | used when discussing transport features that are equivalent for UDP | |||
and UDP-Lite; similarly, the protocol name "TCP" refers to both TCP | and UDP-Lite; similarly, the protocol name "TCP" refers to both TCP | |||
and MPTCP. | and MPTCP. | |||
3. Deriving the minimal set | 3. Deriving the Minimal Set | |||
We assume that applications have no specific requirements that need | We assume that applications have no specific requirements that need | |||
knowledge about the network, e.g. regarding the choice of network | knowledge about the network, e.g., regarding the choice of network | |||
interface or the end-to-end path. Even with these assumptions, there | interface or the end-to-end path. Even with these assumptions, there | |||
are certain requirements that are strictly kept by transport | are certain requirements that are strictly kept by transport | |||
protocols today, and these must also be kept by a transport system. | protocols today, and these must also be kept by a transport system. | |||
Some of these requirements relate to transport features that we call | Some of these requirements relate to transport features that we call | |||
"Functional". | "Functional". | |||
Functional transport features provide functionality that cannot be | Functional transport features provide functionality that cannot be | |||
used without the application knowing about them, or else they violate | used without the application knowing about them, or else they violate | |||
assumptions that might cause the application to fail. For example, | assumptions that might cause the application to fail. For example, | |||
ordered message delivery is a functional transport feature: it cannot | ordered message delivery is a functional transport feature: it cannot | |||
be configured without the application knowing about it because the | be configured without the application knowing about it because the | |||
application's assumption could be that messages always arrive in | application's assumption could be that messages always arrive in | |||
order. Failure includes any change of the application behavior that | order. Failure includes any change of the application behavior that | |||
is not performance oriented, e.g. security. | is not performance oriented, e.g., security. | |||
"Change DSCP" and "Disable Nagle algorithm" are examples of transport | "Change DSCP" and "Disable Nagle algorithm" are examples of transport | |||
features that we call "Optimizing": if a transport system | features that we call "Optimizing"; if a transport system | |||
autonomously decides to enable or disable them, an application will | autonomously decides to enable or disable them, an application will | |||
not fail, but a transport system may be able to communicate more | not fail, but a transport system may be able to communicate more | |||
efficiently if the application is in control of this optimizing | efficiently if the application is in control of this optimizing | |||
transport feature. These transport features require application- | transport feature. These transport features require application- | |||
specific knowledge (e.g., about delay/bandwidth requirements or the | specific knowledge (e.g., about delay/bandwidth requirements or the | |||
length of future data blocks that are to be transmitted). | length of future data blocks that are to be transmitted). | |||
The transport features of IETF transport protocols that do not | The transport features of IETF transport protocols that do not | |||
require application-specific knowledge and could therefore be | require application-specific knowledge and could therefore be | |||
utilized by a transport system on its own without involving the | utilized by a transport system on its own without involving the | |||
application are called "Automatable". | application are called "Automatable". | |||
We approach the construction of a minimal set of transport features | We approach the construction of a minimal set of transport features | |||
in the following way: | in the following way: | |||
1. Categorization (Appendix A): the superset of transport features | 1. Categorization (Appendix A): The superset of transport features | |||
from [RFC8303] is presented, and transport features are | from [RFC8303] is presented, and transport features are | |||
categorized as Functional, Optimizing or Automatable for later | categorized as Functional, Optimizing, or Automatable for later | |||
reduction. | reduction. | |||
2. Reduction (Section 4): a shorter list of transport features is | ||||
2. Reduction (Section 4): A shorter list of transport features is | ||||
derived from the categorization in the first step. This removes | derived from the categorization in the first step. This removes | |||
all transport features that do not require application-specific | all transport features that do not require application-specific | |||
knowledge or would result in semantically incorrect behavior if | knowledge or would result in semantically incorrect behavior if | |||
they were implemented over TCP or UDP. | they were implemented over TCP or UDP. | |||
3. Discussion (Section 5): the resulting list shows a number of | ||||
3. Discussion (Section 5): The resulting list shows a number of | ||||
peculiarities that are discussed, to provide a basis for | peculiarities that are discussed, to provide a basis for | |||
constructing the minimal set. | constructing the minimal set. | |||
4. Construction (Section 6): Based on the reduced set and the | 4. Construction (Section 6): Based on the reduced set and the | |||
discussion of the transport features therein, a minimal set is | discussion of the transport features therein, a minimal set is | |||
constructed. | constructed. | |||
Following [RFC8303] and retaining its terminology, we divide the | Following [RFC8303] and retaining its terminology, we divide the | |||
transport features into two main groups as follows: | transport features into two main groups as follows: | |||
1. CONNECTION related transport features | 1. CONNECTION-related transport features | |||
- ESTABLISHMENT | ||||
- AVAILABILITY | ||||
- MAINTENANCE | ||||
- TERMINATION | ||||
2. DATA Transfer related transport features | * ESTABLISHMENT | |||
- Sending Data | * AVAILABILITY | |||
- Receiving Data | * MAINTENANCE | |||
- Errors | * TERMINATION | |||
2. DATA-Transfer-related transport features | ||||
* Sending Data | ||||
* Receiving Data | ||||
* Errors | ||||
4. The Reduced Set of Transport Features | 4. The Reduced Set of Transport Features | |||
By hiding automatable transport features from the application, a | By hiding automatable transport features from the application, a | |||
transport system can gain opportunities to automate the usage of | transport system can gain opportunities to automate the usage of | |||
network-related functionality. This can facilitate using the | network-related functionality. This can facilitate using the | |||
transport system for the application programmer and it allows for | transport system for the application programmer and it allows for | |||
optimizations that may not be possible for an application. For | optimizations that may not be possible for an application. For | |||
instance, system-wide configurations regarding the usage of multiple | instance, system-wide configurations regarding the usage of multiple | |||
interfaces can better be exploited if the choice of the interface is | interfaces can better be exploited if the choice of the interface is | |||
not entirely up to the application. Therefore, since they are not | not entirely up to the application. Therefore, since they are not | |||
strictly necessary to expose in a transport system, we do not include | strictly necessary to expose in a transport system, we do not include | |||
automatable transport features in the reduced set of transport | automatable transport features in the reduced set of transport | |||
features. This leaves us with only the transport features that are | features. This leaves us with only the transport features that are | |||
either optimizing or functional. | either optimizing or functional. | |||
A transport system should be able to communicate via TCP or UDP if | A transport system should be able to communicate via TCP or UDP if | |||
alternative transport protocols are found not to work. For many | alternative transport protocols are found not to work. For many | |||
transport features, this is possible -- often by simply not doing | transport features, this is possible, often by simply not doing | |||
anything when a specific request is made. For some transport | anything when a specific request is made. For some transport | |||
features, however, it was identified that direct usage of neither TCP | features, however, it was identified that direct usage of neither TCP | |||
nor UDP is possible: in these cases, even not doing anything would | nor UDP is possible; in these cases, even not doing anything would | |||
incur semantically incorrect behavior. Whenever an application would | incur semantically incorrect behavior. Whenever an application would | |||
make use of one of these transport features, this would eliminate the | make use of one of these transport features, this would eliminate the | |||
possibility to use TCP or UDP. Thus, we only keep the functional and | possibility to use TCP or UDP. Thus, we only keep the functional and | |||
optimizing transport features for which an implementation over either | optimizing transport features for which an implementation over either | |||
TCP or UDP is possible in our reduced set. | TCP or UDP is possible in our reduced set. | |||
The following list contains the transport features from Appendix A, | The following list contains the transport features from Appendix A, | |||
reduced using these rules. The "minimal set" derived in this | reduced using these rules. The "minimal set" derived in this | |||
document is meant to be implementable "one-sided" over TCP, and, with | document is meant to be implementable "one-sided" over TCP and, with | |||
limitations, UDP. In the list, we therefore precede a transport | limitations, UDP. In the list, we therefore precede a transport | |||
feature with "T:" if an implementation over TCP is possible, "U:" if | feature with "T:" if an implementation over TCP is possible, "U:" if | |||
an implementation over UDP is possible, and "T,U:" if an | an implementation over UDP is possible, and "T,U:" if an | |||
implementation over either TCP or UDP is possible. | implementation over either TCP or UDP is possible. | |||
4.1. CONNECTION Related Transport Features | 4.1. CONNECTION-Related Transport Features | |||
ESTABLISHMENT: | ESTABLISHMENT: | |||
o T,U: Connect | * T,U: Connect | |||
o T,U: Specify number of attempts and/or timeout for the first | * T,U: Specify number of attempts and/or timeout for the first | |||
establishment message | establishment message | |||
o T,U: Disable MPTCP | * T,U: Disable MPTCP | |||
o T: Configure authentication | * T: Configure authentication | |||
o T: Hand over a message to reliably transfer (possibly multiple | * T: Hand over a message to reliably transfer (possibly multiple | |||
times) before connection establishment | times) before connection establishment | |||
o T: Hand over a message to reliably transfer during connection | * T: Hand over a message to reliably transfer during connection | |||
establishment | establishment | |||
AVAILABILITY: | AVAILABILITY: | |||
o T,U: Listen | * T,U: Listen | |||
o T,U: Disable MPTCP | * T,U: Disable MPTCP | |||
o T: Configure authentication | * T: Configure authentication | |||
MAINTENANCE: | MAINTENANCE: | |||
o T: Change timeout for aborting connection (using retransmit limit | * T: Change timeout for aborting connection (using retransmit limit | |||
or time value) | or time value) | |||
o T: Suggest timeout to the peer | * T: Suggest timeout to the peer | |||
o T,U: Disable Nagle algorithm | * T,U: Disable Nagle algorithm | |||
o T,U: Notification of Excessive Retransmissions (early warning | * T,U: Notification of Excessive Retransmissions (early warning | |||
below abortion threshold) | below abortion threshold) | |||
o T,U: Specify DSCP field | * T,U: Specify DSCP field | |||
o T,U: Notification of ICMP error message arrival | * T,U: Notification of ICMP error message arrival | |||
o T: Change authentication parameters | * T: Change authentication parameters | |||
o T: Obtain authentication information | * T: Obtain authentication information | |||
o T,U: Set Cookie life value | * T,U: Set Cookie life value | |||
o T,U: Choose a scheduler to operate between streams of an | * T,U: Choose a scheduler to operate between streams of an | |||
association | association | |||
o T,U: Configure priority or weight for a scheduler | * T,U: Configure priority or weight for a scheduler | |||
o T,U: Disable checksum when sending | * T,U: Disable checksum when sending | |||
o T,U: Disable checksum requirement when receiving | * T,U: Disable checksum requirement when receiving | |||
o T,U: Specify checksum coverage used by the sender | * T,U: Specify checksum coverage used by the sender | |||
o T,U: Specify minimum checksum coverage required by receiver | * T,U: Specify minimum checksum coverage required by receiver | |||
o T,U: Specify DF field | * T,U: Specify DF field | |||
o T,U: Get max. transport-message size that may be sent using a non- | * T,U: Get max. transport-message size that may be sent using a non- | |||
fragmented IP packet from the configured interface | fragmented IP packet from the configured interface | |||
o T,U: Get max. transport-message size that may be received from the | * T,U: Get max. transport-message size that may be received from the | |||
configured interface | configured interface | |||
o T,U: Obtain ECN field | * T,U: Obtain ECN field | |||
o T,U: Enable and configure a "Low Extra Delay Background Transfer" | * T,U: Enable and configure a "Low Extra Delay Background Transfer" | |||
TERMINATION: | TERMINATION: | |||
o T: Close after reliably delivering all remaining data, causing an | * T: Close after reliably delivering all remaining data, causing an | |||
event informing the application on the other side | event informing the application on the other side | |||
o T: Abort without delivering remaining data, causing an event | * T: Abort without delivering remaining data, causing an event | |||
informing the application on the other side | informing the application on the other side | |||
o T,U: Abort without delivering remaining data, not causing an event | * T,U: Abort without delivering remaining data, not causing an event | |||
informing the application on the other side | informing the application on the other side | |||
o T,U: Timeout event when data could not be delivered for too long | * T,U: Timeout event when data could not be delivered for too long | |||
4.2. DATA Transfer Related Transport Features | 4.2. DATA-Transfer-Related Transport Features | |||
4.2.1. Sending Data | 4.2.1. Sending Data | |||
o T: Reliably transfer data, with congestion control | * T: Reliably transfer data, with congestion control | |||
o T: Reliably transfer a message, with congestion control | * T: Reliably transfer a message, with congestion control | |||
o T,U: Unreliably transfer a message | * T,U: Unreliably transfer a message | |||
o T: Configurable Message Reliability | * T: Configurable Message Reliability | |||
o T: Ordered message delivery (potentially slower than unordered) | * T: Ordered message delivery (potentially slower than unordered) | |||
o T,U: Unordered message delivery (potentially faster than ordered) | * T,U: Unordered message delivery (potentially faster than ordered) | |||
o T,U: Request not to bundle messages | * T,U: Request not to bundle messages | |||
o T: Specifying a key id to be used to authenticate a message | * T: Specifying a key id to be used to authenticate a message | |||
o T,U: Request not to delay the acknowledgement (SACK) of a message | * T,U: Request not to delay the acknowledgement (SACK) of a message | |||
4.2.2. Receiving Data | 4.2.2. Receiving Data | |||
o T,U: Receive data (with no message delimiting) | * T,U: Receive data (with no message delimiting) | |||
o U: Receive a message | * U: Receive a message | |||
o T,U: Information about partial message arrival | * T,U: Information about partial message arrival | |||
4.2.3. Errors | 4.2.3. Errors | |||
This section describes sending failures that are associated with a | This section describes sending failures that are associated with a | |||
specific call to in the "Sending Data" category (Appendix A.2.1). | specific call to in the "Sending Data" category (Appendix A.2.1). | |||
o T,U: Notification of send failures | * T,U: Notification of send failures | |||
o T,U: Notification that the stack has no more user data to send | * T,U: Notification that the stack has no more user data to send | |||
o T,U: Notification to a receiver that a partial message delivery | * T,U: Notification to a receiver that a partial message delivery | |||
has been aborted | has been aborted | |||
5. Discussion | 5. Discussion | |||
The reduced set in the previous section exhibits a number of | The reduced set in the previous section exhibits a number of | |||
peculiarities, which we will discuss in the following. This section | peculiarities, which we will discuss in the following. This section | |||
focuses on TCP because, with the exception of one particular | focuses on TCP because, with the exception of one particular | |||
transport feature ("Receive a message" -- we will discuss this in | transport feature ("Receive a message"; we will discuss this in | |||
Section 5.1), the list shows that UDP is strictly a subset of TCP. | Section 5.1), the list shows that UDP is strictly a subset of TCP. | |||
We can first try to understand how to build a transport system that | We can first try to understand how to build a transport system that | |||
can run over TCP, and then narrow down the result further to allow | can run over TCP, and then narrow down the result further to allow | |||
that the system can always run over either TCP or UDP (which | that the system can always run over either TCP or UDP (which | |||
effectively means removing everything related to reliability, | effectively means removing everything related to reliability, | |||
ordering, authentication and closing/aborting with a notification to | ordering, authentication, and closing/aborting with a notification to | |||
the peer). | the peer). | |||
Note that, because the functional transport features of UDP are -- | Note that, because the functional transport features of UDP are, with | |||
with the exception of "Receive a message" -- a subset of TCP, TCP can | the exception of "Receive a message", a subset of TCP, TCP can be | |||
be used as a replacement for UDP whenever an application does not | used as a replacement for UDP whenever an application does not need | |||
need message delimiting (e.g., because the application-layer protocol | message delimiting (e.g., because the application-layer protocol | |||
already does it). This has been recognized by many applications that | already does it). This has been recognized by many applications that | |||
already do this in practice, by trying to communicate with UDP at | already do this in practice, by trying to communicate with UDP at | |||
first, and falling back to TCP in case of a connection failure. | first and falling back to TCP in case of a connection failure. | |||
5.1. Sending Messages, Receiving Bytes | 5.1. Sending Messages, Receiving Bytes | |||
For implementing a transport system over TCP, there are several | For implementing a transport system over TCP, there are several | |||
transport features related to sending, but only a single transport | transport features related to sending, but only a single transport | |||
feature related to receiving: "Receive data (with no message | feature related to receiving: "Receive data (with no message | |||
delimiting)" (and, strangely, "information about partial message | delimiting)" (and, strangely, "information about partial message | |||
arrival"). Notably, the transport feature "Receive a message" is | arrival"). Notably, the transport feature "Receive a message" is | |||
also the only non-automatable transport feature of UDP(-Lite) for | also the only non-automatable transport feature of UDP(-Lite) for | |||
which no implementation over TCP is possible. | which no implementation over TCP is possible. | |||
To support these TCP receiver semantics, we define an "Application- | To support these TCP receiver semantics, we define an "Application- | |||
Framed Bytestream" (AFra-Bytestream). AFra-Bytestreams allow senders | Framed Byte Stream" (AFra Byte Stream). AFra Byte Streams allow | |||
to operate on messages while minimizing changes to the TCP socket | senders to operate on messages while minimizing changes to the TCP | |||
API. In particular, nothing changes on the receiver side - data can | socket API. In particular, nothing changes on the receiver side; | |||
be accepted via a normal TCP socket. | data can be accepted via a normal TCP socket. | |||
In an AFra-Bytestream, the sending application can optionally inform | In an AFra Byte Stream, the sending application can optionally inform | |||
the transport about message boundaries and required properties per | the transport about message boundaries and required properties per | |||
message (configurable order and reliability, or embedding a request | message (configurable order and reliability, or embedding a request | |||
not to delay the acknowledgement of a message). Whenever the sending | not to delay the acknowledgement of a message). Whenever the sending | |||
application specifies per-message properties that relax the notion of | application specifies per-message properties that relax the notion of | |||
reliable in-order delivery of bytes, it must assume that the | reliable in-order delivery of bytes, it must assume that the | |||
receiving application is 1) able to determine message boundaries, | receiving application is 1) able to determine message boundaries, | |||
provided that messages are always kept intact, and 2) able to accept | provided that messages are always kept intact, and 2) able to accept | |||
these relaxed per-message properties. Any signaling of such | these relaxed per-message properties. Any signaling of such | |||
information to the peer is up to an application-layer protocol and | information to the peer is up to an application-layer protocol and | |||
considered out of scope of this document. | considered out of scope of this document. | |||
For example, if an application requests to transfer fixed-size | For example, if an application requests to transfer fixed-size | |||
messages of 100 bytes with partial reliability, this needs the | messages of 100 bytes with partial reliability, this needs the | |||
receiving application to be prepared to accept data in chunks of 100 | receiving application to be prepared to accept data in chunks of 100 | |||
bytes. If, then, some of these 100-byte messages are missing (e.g., | bytes. Then, if some of these 100-byte messages are missing (e.g., | |||
if SCTP with Configurable Reliability is used), this is the expected | if SCTP with Configurable Reliability is used), this is the expected | |||
application behavior. With TCP, no messages would be missing, but | application behavior. With TCP, no messages would be missing, but | |||
this is also correct for the application, and the possible | this is also correct for the application, and the possible | |||
retransmission delay is acceptable within the best-effort service | retransmission delay is acceptable within the best-effort service | |||
model (see [RFC7305], Section 3.5). Still, the receiving application | model (see Section 3.5 of [RFC7305]). Still, the receiving | |||
would separate the byte stream into 100-byte chunks. | application would separate the byte stream into 100-byte chunks. | |||
Note that this usage of messages does not require all messages to be | Note that this usage of messages does not require all messages to be | |||
equal in size. Many application protocols use some form of Type- | equal in size. Many application protocols use some form of Type- | |||
Length-Value (TLV) encoding, e.g. by defining a header including | Length-Value (TLV) encoding, e.g., by defining a header including | |||
length fields; another alternative is the use of byte stuffing | length fields; another alternative is the use of byte stuffing | |||
methods such as COBS [COBS]. If an application needs message | methods such as Consistent Overhead Byte Stuffing (COBS) [COBS]. If | |||
numbers, e.g. to restore the correct sequence of messages, these must | an application needs message numbers, e.g., to restore the correct | |||
also be encoded by the application itself, as the sequence number | sequence of messages, these must also be encoded by the application | |||
related transport features of SCTP are not provided by the "minimum | itself, as SCTP's transport features that are related to the sequence | |||
set" (in the interest of enabling usage of TCP). | number are not provided by the "minimum set" (in the interest of | |||
enabling usage of TCP). | ||||
5.2. Stream Schedulers Without Streams | 5.2. Stream Schedulers without Streams | |||
We have already stated that multi-streaming does not require | We have already stated that multi-streaming does not require | |||
application-specific knowledge. Potential benefits or disadvantages | application-specific knowledge. Potential benefits or disadvantages | |||
of, e.g., using two streams of an SCTP association versus using two | of, e.g., using two streams of an SCTP association versus using two | |||
separate SCTP associations or TCP connections are related to | separate SCTP associations or TCP connections are related to | |||
knowledge about the network and the particular transport protocol in | knowledge about the network and the particular transport protocol in | |||
use, not the application. However, the transport features "Choose a | use, not the application. However, the transport features "Choose a | |||
scheduler to operate between streams of an association" and | scheduler to operate between streams of an association" and | |||
"Configure priority or weight for a scheduler" operate on streams. | "Configure priority or weight for a scheduler" operate on streams. | |||
Here, streams identify communication channels between which a | Here, streams identify communication channels between which a | |||
scheduler operates, and they can be assigned a priority. Moreover, | scheduler operates, and they can be assigned a priority. Moreover, | |||
the transport features in the MAINTENANCE category all operate on | the transport features in the MAINTENANCE category all operate on | |||
assocations in case of SCTP, i.e. they apply to all streams in that | associations in case of SCTP, i.e., they apply to all streams in that | |||
assocation. | association. | |||
With only these semantics necessary to represent, the interface to a | With only these semantics necessary to represent, the interface to a | |||
transport system becomes easier if we assume that connections may be | transport system becomes easier if we assume that connections may be | |||
not only a transport protocol's connection or association, but could | not only a transport protocol's connection or association, but could | |||
also be a stream of an existing SCTP association, for example. We | also be a stream of an existing SCTP association, for example. We | |||
only need to allow for a way to define a possible grouping of | only need to allow for a way to define a possible grouping of | |||
connections. Then, all MAINTENANCE transport features can be said to | connections. Then, all MAINTENANCE transport features can be said to | |||
operate on connection groups, not connections, and a scheduler | operate on connection groups, not connections, and a scheduler | |||
operates on the connections within a group. | operates on the connections within a group. | |||
skipping to change at page 11, line 49 ¶ | skipping to change at line 534 ¶ | |||
5.3. Early Data Transmission | 5.3. Early Data Transmission | |||
There are two transport features related to transferring a message | There are two transport features related to transferring a message | |||
early: "Hand over a message to reliably transfer (possibly multiple | early: "Hand over a message to reliably transfer (possibly multiple | |||
times) before connection establishment", which relates to TCP Fast | times) before connection establishment", which relates to TCP Fast | |||
Open [RFC7413], and "Hand over a message to reliably transfer during | Open [RFC7413], and "Hand over a message to reliably transfer during | |||
connection establishment", which relates to SCTP's ability to | connection establishment", which relates to SCTP's ability to | |||
transfer data together with the COOKIE-Echo chunk. Also without TCP | transfer data together with the COOKIE-Echo chunk. Also without TCP | |||
Fast Open, TCP can transfer data during the handshake, together with | Fast Open, TCP can transfer data during the handshake, together with | |||
the SYN packet -- however, the receiver of this data may not hand it | the SYN packet; however, the receiver of this data may not hand it | |||
over to the application until the handshake has completed. Also, | over to the application until the handshake has completed. Also, | |||
different from TCP Fast Open, this data is not delimited as a message | different from TCP Fast Open, this data is not delimited as a message | |||
by TCP (thus, not visible as a ``message''). This functionality is | by TCP (thus, not visible as a "message"). This functionality is | |||
commonly available in TCP and supported in several implementations, | commonly available in TCP and supported in several implementations, | |||
even though the TCP specification does not explain how to provide it | even though the TCP specification does not explain how to provide it | |||
to applications. | to applications. | |||
A transport system could differentiate between the cases of | A transport system could differentiate between the cases of | |||
transmitting data "before" (possibly multiple times) or "during" the | transmitting data "before" (possibly multiple times) or "during" the | |||
handshake. Alternatively, it could also assume that data that are | handshake. Alternatively, it could also assume that data that are | |||
handed over early will be transmitted as early as possible, and | handed over early will be transmitted as early as possible, and | |||
"before" the handshake would only be used for messages that are | "before" the handshake would only be used for messages that are | |||
explicitly marked as "idempotent" (i.e., it would be acceptable to | explicitly marked as "idempotent" (i.e., it would be acceptable to | |||
transfer them multiple times). | transfer them multiple times). | |||
The amount of data that can successfully be transmitted before or | The amount of data that can successfully be transmitted before or | |||
during the handshake depends on various factors: the transport | during the handshake depends on various factors: the transport | |||
protocol, the use of header options, the choice of IPv4 and IPv6 and | protocol, the use of header options, the choice of IPv4 and IPv6, and | |||
the Path MTU. A transport system should therefore allow a sending | the Path MTU. A transport system should therefore allow a sending | |||
application to query the maximum amount of data it can possibly | application to query the maximum amount of data it can possibly | |||
transmit before (or, if exposed, during) connection establishment. | transmit before (or, if exposed, during) connection establishment. | |||
5.4. Sender Running Dry | 5.4. Sender Running Dry | |||
The transport feature "Notification that the stack has no more user | The transport feature "Notification that the stack has no more user | |||
data to send" relates to SCTP's "SENDER DRY" notification. Such | data to send" relates to SCTP's "SENDER DRY" notification. Such | |||
notifications can, in principle, be used to avoid having an | notifications can, in principle, be used to avoid having an | |||
unnecessarily large send buffer, yet ensure that the transport sender | unnecessarily large send buffer, yet ensure that the transport sender | |||
always has data available when it has an opportunity to transmit it. | always has data available when it has an opportunity to transmit it. | |||
This has been found to be very beneficial for some applications | This has been found to be very beneficial for some applications | |||
[WWDC2015]. However, "SENDER DRY" truly means that the entire send | [WWDC2015]. However, "SENDER DRY" truly means that the entire send | |||
buffer (including both unsent and unacknowledged data) has emptied -- | buffer (including both unsent and unacknowledged data) has emptied, | |||
i.e., when it notifies the sender, it is already too late, the | i.e., when it notifies the sender, it is already too late; the | |||
transport protocol already missed an opportunity to send data. Some | transport protocol already missed an opportunity to send data. Some | |||
modern TCP implementations now include the unspecified | modern TCP implementations now include the unspecified | |||
"TCP_NOTSENT_LOWAT" socket option that was proposed in [WWDC2015], | "TCP_NOTSENT_LOWAT" socket option that was proposed in [WWDC2015], | |||
which limits the amount of unsent data that TCP can keep in the | which limits the amount of unsent data that TCP can keep in the | |||
socket buffer; this allows to specify at which buffer filling level | socket buffer; this allows specifying at which buffer filling level | |||
the socket becomes writable, rather than waiting for the buffer to | the socket becomes writable, rather than waiting for the buffer to | |||
run empty. | run empty. | |||
SCTP allows to configure the sender-side buffer too: the automatable | SCTP allows configuring the sender-side buffer too; the automatable | |||
Transport Feature "Configure send buffer size" provides this | Transport Feature "Configure send buffer size" provides this | |||
functionality, but only for the complete buffer, which includes both | functionality, but only for the complete buffer, which includes both | |||
unsent and unacknowledged data. SCTP does not allow to control these | unsent and unacknowledged data. SCTP does not allow to control these | |||
two sizes separately. It therefore makes sense for a transport | two sizes separately. It therefore makes sense for a transport | |||
system to allow for uniform access to "TCP_NOTSENT_LOWAT" as well as | system to allow for uniform access to "TCP_NOTSENT_LOWAT" as well as | |||
the "SENDER DRY" notification. | the "SENDER DRY" notification. | |||
5.5. Capacity Profile | 5.5. Capacity Profile | |||
The transport features: | The transport features: | |||
o Disable Nagle algorithm | * Disable Nagle algorithm | |||
o Enable and configure a "Low Extra Delay Background Transfer" | * Enable and configure a "Low Extra Delay Background Transfer" | |||
o Specify DSCP field | * Specify DSCP field | |||
all relate to a QoS-like application need such as "low latency" or | All relate to a QoS-like application need such as "low latency" or | |||
"scavenger". In the interest of flexibility of a transport system, | "scavenger". In the interest of flexibility of a transport system, | |||
they could therefore be offered in a uniform, more abstract way, | they could therefore be offered in a uniform, more abstract way, | |||
where a transport system could e.g. decide by itself how to use | where a transport system could, e.g., decide by itself how to use | |||
combinations of LEDBAT-like congestion control and certain DSCP | combinations of LEDBAT-like congestion control and certain DSCP | |||
values, and an application would only specify a general "capacity | values, and an application would only specify a general "capacity | |||
profile" (a description of how it wants to use the available | profile" (a description of how it wants to use the available | |||
capacity). A need for "lowest possible latency at the expense of | capacity). A need for "lowest possible latency at the expense of | |||
overhead" could then translate into automatically disabling the Nagle | overhead" could then translate into automatically disabling the Nagle | |||
algorithm. | algorithm. | |||
In some cases, the Nagle algorithm is best controlled directly by the | In some cases, the Nagle algorithm is best controlled directly by the | |||
application because it is not only related to a general profile but | application because it is not only related to a general profile but | |||
also to knowledge about the size of future messages. For fine-grain | also to knowledge about the size of future messages. For fine-grain | |||
control over Nagle-like functionality, the "Request not to bundle | control over Nagle-like functionality, the "Request not to bundle | |||
messages" is available. | messages" is available. | |||
5.6. Security | 5.6. Security | |||
Both TCP and SCTP offer authentication. TCP authenticates complete | Both TCP and SCTP offer authentication. TCP authenticates complete | |||
segments. SCTP allows to configure which of SCTP's chunk types must | segments. SCTP allows configuring which of SCTP's chunk types must | |||
always be authenticated -- if this is exposed as such, it creates an | always be authenticated; if this is exposed as such, it creates an | |||
undesirable dependency on the transport protocol. For compatibility | undesirable dependency on the transport protocol. For compatibility | |||
with TCP, a transport system should only allow to configure complete | with TCP, a transport system should only allow to configure complete | |||
transport layer packets, including headers, IP pseudo-header (if any) | transport layer packets, including headers, IP pseudo-header (if any) | |||
and payload. | and payload. | |||
Security is discussed in a separate document | Security is discussed in a separate document [RFC8922]. The minimal | |||
[I-D.ietf-taps-transport-security]. The minimal set presented in the | set presented in the present document excludes all security-related | |||
present document excludes all security related transport features | transport features from Appendix A: "Configure authentication", | |||
from Appendix A: "Configure authentication", "Change authentication | "Change authentication parameters", "Obtain authentication | |||
parameters", "Obtain authentication information" and "Set Cookie life | information", and "Set Cookie life value", as well as "Specifying a | |||
value" as well as "Specifying a key id to be used to authenticate a | key id to be used to authenticate a message". It also excludes | |||
message". It also excludes security transport features not listed in | security transport features not listed in Appendix A, including | |||
Appendix A, including content privacy to in-path devices. | content privacy to in-path devices. | |||
5.7. Packet Size | 5.7. Packet Size | |||
UDP(-Lite) has a transport feature called "Specify DF field". This | UDP(-Lite) has a transport feature called "Specify DF field". This | |||
yields an error message in case of sending a message that exceeds the | yields an error message in the case of sending a message that exceeds | |||
Path MTU, which is necessary for a UDP-based application to be able | the Path MTU, which is necessary for a UDP-based application to be | |||
to implement Path MTU Discovery (a function that UDP-based | able to implement Path MTU Discovery (a function that UDP-based | |||
applications must do by themselves). The "Get max. transport-message | applications must do by themselves). The "Get max. transport-message | |||
size that may be sent using a non-fragmented IP packet from the | size that may be sent using a non-fragmented IP packet from the | |||
configured interface" transport feature yields an upper limit for the | configured interface" transport feature yields an upper limit for the | |||
Path MTU (minus headers) and can therefore help to implement Path MTU | Path MTU (minus headers) and can therefore help to implement Path MTU | |||
Discovery more efficiently. | Discovery more efficiently. | |||
6. The Minimal Set of Transport Features | 6. The Minimal Set of Transport Features | |||
Based on the categorization, reduction, and discussion in Section 3, | Based on the categorization, reduction, and discussion in Section 3, | |||
this section describes a minimal set of transport features that end | this section describes a minimal set of transport features that end | |||
systems should offer. Any configuration based the described minimum | systems should offer. Any configuration based on the described | |||
set of transport feature can always be realized over TCP but also | minimum set of transport feature can always be realized over TCP but | |||
gives the transport system flexibility to choose another transport if | also gives the transport system flexibility to choose another | |||
implemented. In the text of this section, "not UDP" is used to | transport if implemented. In the text of this section, "not UDP" is | |||
indicate elements of the system that cannot be implemented over UDP. | used to indicate elements of the system that cannot be implemented | |||
Conversely, all elements of the system that are not marked with "not | over UDP. Conversely, all elements of the system that are not marked | |||
UDP" can also be implemented over UDP. | with "not UDP" can also be implemented over UDP. | |||
The arguments laid out in Section 5 ("discussion") were used to make | The arguments laid out in Section 5 ("discussion") were used to make | |||
the final representation of the minimal set as short, simple and | the final representation of the minimal set as short, simple, and | |||
general as possible. There may be situations where these arguments | general as possible. There may be situations where these arguments | |||
do not apply -- e.g., implementers may have specific reasons to | do not apply, e.g., implementers may have specific reasons to expose | |||
expose multi-streaming as a visible functionality to applications, or | multi-streaming as a visible functionality to applications, or the | |||
the restrictive open / close semantics may be problematic under some | restrictive open/close semantics may be problematic under some | |||
circumstances. In such cases, the representation in Section 4 | circumstances. In such cases, the representation in Section 4 | |||
("reduction") should be considered. | ("reduction") should be considered. | |||
As in Section 3, Section 4 and [RFC8303], we categorize the minimal | As in Section 3, Section 4, and [RFC8303], we categorize the minimal | |||
set of transport features as 1) CONNECTION related (ESTABLISHMENT, | set of transport features as 1) CONNECTION related (ESTABLISHMENT, | |||
AVAILABILITY, MAINTENANCE, TERMINATION) and 2) DATA Transfer related | AVAILABILITY, MAINTENANCE, TERMINATION) and 2) DATA Transfer related | |||
(Sending Data, Receiving Data, Errors). Here, the focus is on | (Sending Data, Receiving Data, Errors). Here, the focus is on | |||
connections that the transport system offers as an abstraction to the | connections that the transport system offers as an abstraction to the | |||
application, as opposed to connections of transport protocols that | application, as opposed to connections of transport protocols that | |||
the transport system uses. | the transport system uses. | |||
6.1. ESTABLISHMENT, AVAILABILITY and TERMINATION | 6.1. ESTABLISHMENT, AVAILABILITY, and TERMINATION | |||
A connection must first be "created" to allow for some initial | A connection must first be "created" to allow for some initial | |||
configuration to be carried out before the transport system can | configuration to be carried out before the transport system can | |||
actively or passively establish communication with a remote end | actively or passively establish communication with a remote end | |||
system. As a configuration of the newly created connection, an | system. As a configuration of the newly created connection, an | |||
application can choose to disallow usage of MPTCP. Furthermore, all | application can choose to disallow usage of MPTCP. Furthermore, all | |||
configuration parameters in Section 6.2 can be used initially, | configuration parameters in Section 6.2 can be used initially, | |||
although some of them may only take effect when a connection has been | although some of them may only take effect when a connection has been | |||
established with a chosen transport protocol. Configuring a | established with a chosen transport protocol. Configuring a | |||
connection early helps a transport system make the right decisions. | connection early helps a transport system make the right decisions. | |||
For example, grouping information can influence the transport system | For example, grouping information can influence whether or not the | |||
to implement a connection as a stream of a multi-streaming protocol's | transport system implements a connection as a stream of a multi- | |||
existing association or not. | streaming protocol's existing association. | |||
For ungrouped connections, early configuration is necessary because | For ungrouped connections, early configuration is necessary because | |||
it allows the transport system to know which protocols it should try | it allows the transport system to know which protocols it should try | |||
to use. In particular, a transport system that only makes a one-time | to use. In particular, a transport system that only makes a one-time | |||
choice for a particular protocol must know early about strict | choice for a particular protocol must know early about strict | |||
requirements that must be kept, or it can end up in a deadlock | requirements that must be kept, or it can end up in a deadlock | |||
situation (e.g., having chosen UDP and later be asked to support | situation (e.g., having chosen UDP and later be asked to support | |||
reliable transfer). As an example description of how to correctly | reliable transfer). As an example description of how to correctly | |||
handle these cases, we provide the following decision tree (this is | handle these cases, we provide the following decision tree (this is | |||
derived from Section 4.1 excluding authentication, as explained in | derived from Section 4.1 excluding authentication, as explained in | |||
Section 9): | Section 8): | |||
- Will it ever be necessary to offer any of the following? | ||||
* Reliably transfer data | ||||
* Notify the peer of closing/aborting | ||||
* Preserve data ordering | ||||
Yes: SCTP or TCP can be used. | ||||
- Is any of the following useful to the application? | ||||
* Choosing a scheduler to operate between connections | ||||
in a group, with the possibility to configure a priority | ||||
or weight per connection | ||||
* Configurable message reliability | ||||
* Unordered message delivery | ||||
* Request not to delay the acknowledgement (SACK) of a message | ||||
Yes: SCTP is preferred. | ||||
No: | ||||
- Is any of the following useful to the application? | ||||
* Hand over a message to reliably transfer (possibly | ||||
multiple times) before connection establishment | ||||
* Suggest timeout to the peer | ||||
* Notification of Excessive Retransmissions (early | ||||
warning below abortion threshold) | ||||
* Notification of ICMP error message arrival | ||||
Yes: TCP is preferred. | ||||
No: SCTP and TCP are equally preferable. | ||||
No: all protocols can be used. | ||||
- Is any of the following useful to the application? | ||||
* Specify checksum coverage used by the sender | ||||
* Specify minimum checksum coverage required by receiver | ||||
Yes: UDP-Lite is preferred. | +----------------------------------------------------------+ | |||
No: UDP is preferred. | | Will it ever be necessary to offer any of the following? | | |||
| * Reliably transfer data | | ||||
| * Notify the peer of closing/aborting | | ||||
| * Preserve data ordering | | ||||
+----------------------------------------------------------+ | ||||
| | | ||||
|Yes |No | ||||
| (SCTP or TCP) | (All protocols | ||||
| can be used.) | can be used.) | ||||
V V | ||||
+--------------------------------------+ +-----------------------------+ | ||||
| Is any of the following useful to | | Is any of the following | | ||||
| the application? | | useful to the application? | | ||||
| * Choosing a scheduler to operate | | * Specify checksum coverage | | ||||
| between connections in a group, | | used by the sender | | ||||
| with the possibility to configure | | * Specify minimum checksum | | ||||
| a priority or weight per connection| | coverage required by the | | ||||
| * Configurable message reliability | | receiver | | ||||
| * Unordered message delivery | +-----------------------------+ | ||||
| * Request not to delay the | | | | ||||
| acknowledgement (SACK) of a message| |Yes |No | ||||
+--------------------------------------+ | | | ||||
| | | | | ||||
|Yes |No | | | ||||
V | V V | ||||
SCTP is | UDP-Lite is UDP is | ||||
preferred. | preferred. preferred. | ||||
V | ||||
+------------------------------------------------------+ | ||||
| Is any of the following useful to the application? | | ||||
| * Hand over a message to reliably transfer (possibly | | ||||
| multiple times) before connection establishment | | ||||
| * Suggest timeout to the peer | | ||||
| * Notification of Excessive Retransmissions (early | | ||||
| warning below abortion threshold) | | ||||
| * Notification of ICMP error message arrival | | ||||
+------------------------------------------------------+ | ||||
| | | ||||
|Yes |No | ||||
V V | ||||
TCP is preferred. SCTP and TCP | ||||
are equally preferable. | ||||
Note that this decision tree is not optimal for all cases. For | Note that this decision tree is not optimal for all cases. For | |||
example, if an application wants to use "Specify checksum coverage | example, if an application wants to use "Specify checksum coverage | |||
used by the sender", which is only offered by UDP-Lite, and | used by the sender", which is only offered by UDP-Lite, and | |||
"Configure priority or weight for a scheduler", which is only offered | "Configure priority or weight for a scheduler", which is only offered | |||
by SCTP, the above decision tree will always choose UDP-Lite, making | by SCTP, the above decision tree will always choose UDP-Lite, making | |||
it impossible to use SCTP's schedulers with priorities between | it impossible to use SCTP's schedulers with priorities between | |||
grouped connections. Also, several other factors may influence the | grouped connections. Also, several other factors may influence the | |||
decisions for or against a protocol -- e.g. penetration rates, the | decisions for or against a protocol, e.g., penetration rates, the | |||
ability to work through NATs, etc. We caution implementers to be | ability to work through NATs, etc. We caution implementers to be | |||
aware of the full set of trade-offs, for which we recommend | aware of the full set of trade-offs, for which we recommend | |||
consulting the list in Section 4.1 when deciding how to initialize a | consulting the list in Section 4.1 when deciding how to initialize a | |||
connection. | connection. | |||
To summarize, the following parameters serve as input for the | To summarize, the following parameters serve as input for the | |||
transport system to help it choose and configure a suitable protocol: | transport system to help it choose and configure a suitable protocol: | |||
o Reliability: a boolean that should be set to true when any of the | Reliability: a boolean that should be set to true when any of the | |||
following will be useful to the application: reliably transfer | following will be useful to the application: reliably transfer | |||
data; notify the peer of closing/aborting; preserve data ordering. | data; notify the peer of closing/aborting; or preserve data | |||
o Checksum coverage: a boolean to specify whether it will be useful | ordering. | |||
to the application to specify checksum coverage when sending or | ||||
Checksum coverage: a boolean to specify whether it will be useful to | ||||
the application to specify checksum coverage when sending or | ||||
receiving. | receiving. | |||
o Configure message priority: a boolean that should be set to true | ||||
Configure message priority: a boolean that should be set to true | ||||
when any of the following per-message configuration or | when any of the following per-message configuration or | |||
prioritization mechanisms will be useful to the application: | prioritization mechanisms will be useful to the application: | |||
choosing a scheduler to operate between grouped connections, with | choosing a scheduler to operate between grouped connections, with | |||
the possibility to configure a priority or weight per connection; | the possibility to configure a priority or weight per connection; | |||
configurable message reliability; unordered message delivery; | configurable message reliability; unordered message delivery; or | |||
requesting not to delay the acknowledgement (SACK) of a message. | requesting not to delay the acknowledgement (SACK) of a message. | |||
o Early message timeout notifications: a boolean that should be set | ||||
to true when any of the following will be useful to the | Early message timeout notifications: a boolean that should be set to | |||
application: hand over a message to reliably transfer (possibly | true when any of the following will be useful to the application: | |||
multiple times) before connection establishment; suggest timeout | hand over a message to reliably transfer (possibly multiple times) | |||
to the peer; notification of excessive retransmissions (early | before connection establishment; suggest timeout to the peer; | |||
warning below abortion threshold); notification of ICMP error | notification of excessive retransmissions (early warning below | |||
message arrival. | abortion threshold); or notification of ICMP error message | |||
arrival. | ||||
Once a connection is created, it can be queried for the maximum | Once a connection is created, it can be queried for the maximum | |||
amount of data that an application can possibly expect to have | amount of data that an application can possibly expect to have | |||
reliably transmitted before or during transport connection | reliably transmitted before or during transport connection | |||
establishment (with zero being a possible answer) (see | establishment (with zero being a possible answer) (see | |||
Section 6.2.1). An application can also give the connection a | Section 6.2.1). An application can also give the connection a | |||
message for reliable transmission before or during connection | message for reliable transmission before or during connection | |||
establishment (not UDP); the transport system will then try to | establishment (not UDP); the transport system will then try to | |||
transmit it as early as possible. An application can facilitate | transmit it as early as possible. An application can facilitate | |||
sending a message particularly early by marking it as "idempotent" | sending a message particularly early by marking it as "idempotent" | |||
skipping to change at page 18, line 4 ¶ | skipping to change at line 801 ¶ | |||
(because idempotent messages are reliably transferred, asking for | (because idempotent messages are reliably transferred, asking for | |||
idempotence is not necessary for systems that support UDP). | idempotence is not necessary for systems that support UDP). | |||
After creation, a transport system can actively establish | After creation, a transport system can actively establish | |||
communication with a peer, or it can passively listen for incoming | communication with a peer, or it can passively listen for incoming | |||
connection requests. Note that active establishment may or may not | connection requests. Note that active establishment may or may not | |||
trigger a notification on the listening side. It is possible that | trigger a notification on the listening side. It is possible that | |||
the first notification on the listening side is the arrival of the | the first notification on the listening side is the arrival of the | |||
first data that the active side sends (a receiver-side transport | first data that the active side sends (a receiver-side transport | |||
system could handle this by continuing to block a "Listen" call, | system could handle this by continuing to block a "Listen" call, | |||
immediately followed by issuing "Receive", for example; callback- | immediately followed, for example, by issuing "Receive"; callback- | |||
based implementations could simply skip the equivalent of "Listen"). | based implementations could simply skip the equivalent of "Listen"). | |||
This also means that the active opening side is assumed to be the | This also means that the active opening side is assumed to be the | |||
first side sending data. | first side sending data. | |||
A transport system can actively close a connection, i.e. terminate it | A transport system can actively close a connection, i.e., terminate | |||
after reliably delivering all remaining data to the peer (if reliable | it after reliably delivering all remaining data to the peer (if | |||
data delivery was requested earlier (not UDP)), in which case the | reliable data delivery was requested earlier (not UDP)), in which | |||
peer is notified that the connection is closed. Alternatively, a | case the peer is notified that the connection is closed. | |||
connection can be aborted without delivering outstanding data to the | Alternatively, a connection can be aborted without delivering | |||
peer. In case reliable or partially reliable data delivery was | outstanding data to the peer. In case reliable or partially reliable | |||
requested earlier (not UDP), the peer is notified that the connection | data delivery was requested earlier (not UDP), the peer is notified | |||
is aborted. A timeout can be configured to abort a connection when | that the connection is aborted. A timeout can be configured to abort | |||
data could not be delivered for too long (not UDP); however, timeout- | a connection when data could not be delivered for too long (not UDP); | |||
based abortion does not notify the peer application that the | however, timeout-based abortion does not notify the peer application | |||
connection has been aborted. Because half-closed connections are not | that the connection has been aborted. Because half-closed | |||
supported, when a host implementing a transport system receives a | connections are not supported, when a host implementing a transport | |||
notification that the peer is closing or aborting the connection (not | system receives a notification that the peer is closing or aborting | |||
UDP), its peer may not be able to read outstanding data. This means | the connection (not UDP), its peer may not be able to read | |||
that unacknowledged data residing in a transport system's send buffer | outstanding data. This means that unacknowledged data residing in a | |||
may have to be dropped from that buffer upon arrival of a "close" or | transport system's send buffer may have to be dropped from that | |||
"abort" notification from the peer. | buffer upon arrival of a "close" or "abort" notification from the | |||
peer. | ||||
6.2. MAINTENANCE | 6.2. MAINTENANCE | |||
A transport system must offer means to group connections, but it | A transport system must offer means to group connections, but it | |||
cannot guarantee truly grouping them using the transport protocols | cannot guarantee truly grouping them using the transport protocols | |||
that it uses (e.g., it cannot be guaranteed that connections become | that it uses (e.g., it cannot be guaranteed that connections become | |||
multiplexed as streams on a single SCTP association when SCTP may not | multiplexed as streams on a single SCTP association when SCTP may not | |||
be available). The transport system must therefore ensure that | be available). The transport system must therefore ensure that | |||
group- versus non-group-configurations are handled correctly in some | group- versus non-group-configurations are handled correctly in some | |||
way (e.g., by applying the configuration to all grouped connections | way (e.g., by applying the configuration to all grouped connections | |||
even when they are not multiplexed, or informing the application | even when they are not multiplexed, or informing the application | |||
about grouping success or failure). | about grouping success or failure). | |||
As a general rule, any configuration described below should be | As a general rule, any configuration described below should be | |||
carried out as early as possible to aid the transport system's | carried out as early as possible to aid the transport system's | |||
decision making. | decision making. | |||
6.2.1. Connection groups | 6.2.1. Connection Groups | |||
The following transport features and notifications (some directly | The following transport features and notifications (some directly | |||
from Section 4, some new or changed, based on the discussion in | from Section 4; some new or changed, based on the discussion in | |||
Section 5) automatically apply to all grouped connections: | Section 5) automatically apply to all grouped connections: | |||
(not UDP) Configure a timeout: this can be done with the following | Configure a timeout (not UDP) | |||
parameters: | This can be done with the following parameters: | |||
o A timeout value for aborting connections, in seconds | * A timeout value for aborting connections, in seconds. | |||
o A timeout value to be suggested to the peer (if possible), in | ||||
seconds | ||||
o The number of retransmissions after which the application should | ||||
be notifed of "Excessive Retransmissions" | ||||
Configure urgency: this can be done with the following parameters: | * A timeout value to be suggested to the peer (if possible), in | |||
seconds. | ||||
o A number to identify the type of scheduler that should be used to | * The number of retransmissions after which the application should | |||
be notified of "Excessive Retransmissions". | ||||
Configure urgency | ||||
This can be done with the following parameters: | ||||
* A number to identify the type of scheduler that should be used to | ||||
operate between connections in the group (no guarantees given). | operate between connections in the group (no guarantees given). | |||
Schedulers are defined in [RFC8260]. | Schedulers are defined in [RFC8260]. | |||
o A "capacity profile" number to identify how an application wants | ||||
* A "capacity profile" number to identify how an application wants | ||||
to use its available capacity. Choices can be "lowest possible | to use its available capacity. Choices can be "lowest possible | |||
latency at the expense of overhead" (which would disable any | latency at the expense of overhead" (which would disable any | |||
Nagle-like algorithm), "scavenger", or values that help determine | Nagle-like algorithm), "scavenger", or values that help determine | |||
the DSCP value for a connection (e.g. similar to table 1 in | the DSCP value for a connection. | |||
[I-D.ietf-tsvwg-rtcweb-qos]). | ||||
o A buffer limit (in bytes); when the sender has less than the | * A buffer limit (in bytes); when the sender has less than the | |||
provided limit of bytes in the buffer, the application may be | provided limit of bytes in the buffer, the application may be | |||
notified. Notifications are not guaranteed, and it is optional | notified. Notifications are not guaranteed, and it is optional | |||
for a transport system to support buffer limit values greater than | for a transport system to support buffer limit values greater than | |||
0. Note that this limit and its notification should operate | 0. Note that this limit and its notification should operate | |||
across the buffers of the whole transport system, i.e. also any | across the buffers of the whole transport system, i.e., also any | |||
potential buffers that the transport system itself may use on top | potential buffers that the transport system itself may use on top | |||
of the transport's send buffer. | of the transport's send buffer. | |||
Following Section 5.7, these properties can be queried: | Following Section 5.7, these properties can be queried: | |||
o The maximum message size that may be sent without fragmentation | * The maximum message size that may be sent without fragmentation | |||
via the configured interface. This is optional for a transport | via the configured interface. This is optional for a transport | |||
system to offer, and may return an error ("not available"). It | system to offer and may return an error ("not available"). It can | |||
can aid applications implementing Path MTU Discovery. | aid applications implementing Path MTU Discovery. | |||
o The maximum transport message size that can be sent, in bytes. | ||||
* The maximum transport message size that can be sent, in bytes. | ||||
Irrespective of fragmentation, there is a size limit for the | Irrespective of fragmentation, there is a size limit for the | |||
messages that can be handed over to SCTP or UDP(-Lite); because | messages that can be handed over to SCTP or UDP(-Lite); because | |||
the service provided by a transport system is independent of the | the service provided by a transport system is independent of the | |||
transport protocol, it must allow an application to query this | transport protocol, it must allow an application to query this | |||
value -- the maximum size of a message in an Application-Framed- | value: the maximum size of a message in an Application-Framed Byte | |||
Bytestream (see Section 5.1). This may also return an error when | Stream (see Section 5.1). This may also return an error when data | |||
data is not delimited ("not available"). | is not delimited ("not available"). | |||
o The maximum transport message size that can be received from the | ||||
* The maximum transport message size that can be received from the | ||||
configured interface, in bytes (or "not available"). | configured interface, in bytes (or "not available"). | |||
o The maximum amount of data that can possibly be sent before or | ||||
* The maximum amount of data that can possibly be sent before or | ||||
during connection establishment, in bytes. | during connection establishment, in bytes. | |||
In addition to the already mentioned closing / aborting notifications | In addition to the already mentioned closing/aborting notifications | |||
and possible send errors, the following notifications can occur: | and possible send errors, the following notifications can occur: | |||
o Excessive Retransmissions: the configured (or a default) number of | Excessive Retransmissions: The configured (or a default) number of | |||
retransmissions has been reached, yielding this early warning | retransmissions has been reached, yielding this early warning | |||
below an abortion threshold. | below an abortion threshold. | |||
o ICMP Arrival (parameter: ICMP message): an ICMP packet carrying | ||||
the conveyed ICMP message has arrived. | ICMP Arrival (parameter: ICMP message): An ICMP packet carrying the | |||
o ECN Arrival (parameter: ECN value): a packet carrying the conveyed | conveyed ICMP message has arrived. | |||
ECN value has arrived. This can be useful for applications | ||||
implementing congestion control. | ECN Arrival (parameter: ECN value): A packet carrying the conveyed | |||
o Timeout (parameter: s seconds): data could not be delivered for s | Explicit Congestion Notification (ECN) value has arrived. This | |||
can be useful for applications implementing congestion control. | ||||
Timeout (parameter: s seconds): Data could not be delivered for s | ||||
seconds. | seconds. | |||
o Drain: the send buffer has either drained below the configured | ||||
Drain: The send buffer has either drained below the configured | ||||
buffer limit or it has become completely empty. This is a generic | buffer limit or it has become completely empty. This is a generic | |||
notification that tries to enable uniform access to | notification that tries to enable uniform access to | |||
"TCP_NOTSENT_LOWAT" as well as the "SENDER DRY" notification (as | "TCP_NOTSENT_LOWAT" as well as the "SENDER DRY" notification (as | |||
discussed in Section 5.4 -- SCTP's "SENDER DRY" is a special case | discussed in Section 5.4; SCTP's "SENDER DRY" is a special case | |||
where the threshold (for unsent data) is 0 and there is also no | where the threshold (for unsent data) is 0 and there is also no | |||
more unacknowledged data in the send buffer). | more unacknowledged data in the send buffer). | |||
6.2.2. Individual connections | 6.2.2. Individual Connections | |||
Configure priority or weight for a scheduler, as described in | Configure priority or weight for a scheduler, as described in | |||
[RFC8260]. | [RFC8260]. | |||
Configure checksum usage: this can be done with the following | Configure checksum usage: This can be done with the following | |||
parameters, but there is no guarantee that any checksum limitations | parameters, but there is no guarantee that any checksum limitations | |||
will indeed be enforced (the default behavior is "full coverage, | will indeed be enforced (the default behavior is "full coverage, | |||
checksum enabled"): | checksum enabled"): | |||
o A boolean to enable / disable usage of a checksum when sending | * a boolean to enable/disable usage of a checksum when sending | |||
o The desired coverage (in bytes) of the checksum used when sending | ||||
o A boolean to enable / disable requiring a checksum when receiving | * the desired coverage (in bytes) of the checksum used when sending | |||
o The required minimum coverage (in bytes) of the checksum when | ||||
* a boolean to enable/disable requiring a checksum when receiving | ||||
* the required minimum coverage (in bytes) of the checksum when | ||||
receiving | receiving | |||
6.3. DATA Transfer | 6.3. DATA Transfer | |||
6.3.1. Sending Data | 6.3.1. Sending Data | |||
When sending a message, no guarantees are given about the | When sending a message, no guarantees are given about the | |||
preservation of message boundaries to the peer; if message boundaries | preservation of message boundaries to the peer; if message boundaries | |||
are needed, the receiving application at the peer must know about | are needed, the receiving application at the peer must know about | |||
them beforehand (or the transport system cannot use TCP). Note that | them beforehand (or the transport system cannot use TCP). Note that | |||
an application should already be able to hand over data before the | an application should already be able to hand over data before the | |||
transport system establishes a connection with a chosen transport | transport system establishes a connection with a chosen transport | |||
protocol. Regarding the message that is being handed over, the | protocol. Regarding the message that is being handed over, the | |||
following parameters can be used: | following parameters can be used: | |||
o Reliability: this parameter is used to convey a choice of: fully | Reliability: This parameter is used to convey a choice of: fully | |||
reliable with congestion control (not UDP), unreliable without | reliable with congestion control (not UDP), unreliable without | |||
congestion control, unreliable with congestion control (not UDP), | congestion control, unreliable with congestion control (not UDP), | |||
partially reliable with congestion control (see [RFC3758] and | and partially reliable with congestion control (see [RFC3758] and | |||
[RFC7496] for details on how to specify partial reliability) (not | [RFC7496] for details on how to specify partial reliability) (not | |||
UDP). The latter two choices are optional for a transport system | UDP). The latter two choices are optional for a transport system | |||
to offer and may result in full reliability. Note that | to offer and may result in full reliability. Note that | |||
applications sending unreliable data without congestion control | applications sending unreliable data without congestion control | |||
should themselves perform congestion control in accordance with | should themselves perform congestion control in accordance with | |||
[RFC8085]. | [RFC8085]. | |||
o (not UDP) Ordered: this boolean parameter lets an application | ||||
choose between ordered message delivery (true) and possibly | Ordered (not UDP): This boolean lets an application choose between | |||
unordered, potentially faster message delivery (false). | ordered message delivery (true) and possibly unordered, | |||
o Bundle: a boolean that expresses a preference for allowing to | potentially faster message delivery (false). | |||
bundle messages (true) or not (false). No guarantees are given. | ||||
o DelAck: a boolean that, if false, lets an application request that | Bundle: This boolean expresses a preference for allowing to bundle | |||
the peer would not delay the acknowledgement for this message. | messages (true) or not (false). No guarantees are given. | |||
o Fragment: a boolean that expresses a preference for allowing to | ||||
DelAck: This boolean, if false, lets an application request that the | ||||
peer not delay the acknowledgement for this message. | ||||
Fragment: This boolean expresses a preference for allowing to | ||||
fragment messages (true) or not (false), at the IP level. No | fragment messages (true) or not (false), at the IP level. No | |||
guarantees are given. | guarantees are given. | |||
o (not UDP) Idempotent: a boolean that expresses whether a message | ||||
is idempotent (true) or not (false). Idempotent messages may | Idempotent (not UDP): This boolean expresses whether a message is | |||
arrive multiple times at the receiver (but they will arrive at | idempotent (true) or not (false). Idempotent messages may arrive | |||
least once). When data is idempotent it can be used by the | multiple times at the receiver (but they will arrive at least | |||
receiver immediately on a connection establishment attempt. Thus, | once). When data is idempotent, it can be used by the receiver | |||
if data is handed over before the transport system establishes a | immediately on a connection establishment attempt. Thus, if data | |||
is handed over before the transport system establishes a | ||||
connection with a chosen transport protocol, stating that a | connection with a chosen transport protocol, stating that a | |||
message is idempotent facilitates transmitting it to the peer | message is idempotent facilitates transmitting it to the peer | |||
application particularly early. | application particularly early. | |||
An application can be notified of a failure to send a specific | An application can be notified of a failure to send a specific | |||
message. There is no guarantee of such notifications, i.e. send | message. There is no guarantee of such notifications, i.e., send | |||
failures can also silently occur. | failures can also silently occur. | |||
6.3.2. Receiving Data | 6.3.2. Receiving Data | |||
A receiving application obtains an "Application-Framed Bytestream" | A receiving application obtains an "Application-Framed Byte Stream" | |||
(AFra-Bytestream); this concept is further described in Section 5.1). | (AFra Byte Stream); this concept is further described in Section 5.1. | |||
In line with TCP's receiver semantics, an AFra-Bytestream is just a | In line with TCP's receiver semantics, an AFra Byte Stream is just a | |||
stream of bytes to the receiver. If message boundaries were | stream of bytes to the receiver. If message boundaries were | |||
specified by the sender, a receiver-side transport system | specified by the sender, a receiver-side transport system | |||
implementing only the minimum set of transport services defined here | implementing only the minimum set of Transport Services defined here | |||
will still not inform the receiving application about them (this | will still not inform the receiving application about them (this | |||
limitation is only needed for transport systems that are implemented | limitation is only needed for transport systems that are implemented | |||
to directly use TCP). | to directly use TCP). | |||
Different from TCP's semantics, if the sending application has | Different from TCP's semantics, if the sending application has | |||
allowed that messages are not fully reliably transferred, or | allowed that messages are not fully reliably transferred, or | |||
delivered out of order, then such re-ordering or unreliability may be | delivered out of order, then such reordering or unreliability may be | |||
reflected per message in the arriving data. Messages will always | reflected per message in the arriving data. Messages will always | |||
stay intact - i.e. if an incomplete message is contained at the end | stay intact, i.e., if an incomplete message is contained at the end | |||
of the arriving data block, this message is guaranteed to continue in | of the arriving data block, this message is guaranteed to continue in | |||
the next arriving data block. | the next arriving data block. | |||
7. Acknowledgements | 7. IANA Considerations | |||
The authors would like to thank all the participants of the TAPS | ||||
Working Group and the NEAT and MAMI research projects for valuable | ||||
input to this document. We especially thank Michael Tuexen for help | ||||
with connection connection establishment/teardown, Gorry Fairhurst | ||||
for his suggestions regarding fragmentation and packet sizes, and | ||||
Spencer Dawkins for his extremely detailed and constructive review. | ||||
This work has received funding from the European Union's Horizon 2020 | ||||
research and innovation programme under grant agreement No. 644334 | ||||
(NEAT). | ||||
8. IANA Considerations | ||||
This memo includes no request to IANA. | This document has no IANA actions. | |||
9. Security Considerations | 8. Security Considerations | |||
Authentication, confidentiality protection, and integrity protection | Authentication, confidentiality protection, and integrity protection | |||
are identified as transport features by [RFC8095]. Often, these | are identified as transport features by [RFC8095]. Often, these | |||
features are provided by a protocol or layer on top of the transport | features are provided by a protocol or layer on top of the transport | |||
protocol; none of the full-featured standards-track transport | protocol; none of the full-featured standards-track transport | |||
protocols in [RFC8303], which this document is based upon, provides | protocols in [RFC8303], which this document is based upon, provide | |||
all of these transport features on its own. Therefore, they are not | all of these transport features on its own. Therefore, they are not | |||
considered in this document, with the exception of native | considered in this document, with the exception of native | |||
authentication capabilities of TCP and SCTP for which the security | authentication capabilities of TCP and SCTP for which the security | |||
considerations in [RFC5925] and [RFC4895] apply. The minimum | considerations in [RFC5925] and [RFC4895] apply. The minimum | |||
requirements for a secure transport system are discussed in a | requirements for a secure transport system are discussed in a | |||
separate document (Section 5 on Security Features and Transport | separate document [RFC8922]. | |||
Dependencies of [I-D.ietf-taps-transport-security]). | ||||
10. References | ||||
10.1. Normative References | 9. References | |||
[I-D.ietf-taps-transport-security] | 9.1. Normative References | |||
Pauly, T., Perkins, C., Rose, K., and C. Wood, "A Survey | ||||
of Transport Security Protocols", draft-ietf-taps- | ||||
transport-security-02 (work in progress), June 2018. | ||||
[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/info/rfc8095>. | <https://www.rfc-editor.org/info/rfc8095>. | |||
[RFC8303] Welzl, M., Tuexen, M., and N. Khademi, "On the Usage of | [RFC8303] Welzl, M., Tuexen, M., and N. Khademi, "On the Usage of | |||
Transport Features Provided by IETF Transport Protocols", | Transport Features Provided by IETF Transport Protocols", | |||
RFC 8303, DOI 10.17487/RFC8303, February 2018, | RFC 8303, DOI 10.17487/RFC8303, February 2018, | |||
<https://www.rfc-editor.org/info/rfc8303>. | <https://www.rfc-editor.org/info/rfc8303>. | |||
10.2. Informative References | [RFC8922] Enghardt, T., Pauly, T., Perkins, C., Rose, K., and C. | |||
Wood, "A Survey of the Interaction between Security | ||||
[COBS] Cheshire, S. and M. Baker, "Consistent Overhead Byte | Protocols and Transport Services", RFC 8922, | |||
Stuffing", IEEE/ACM Transactions on Networking Vol. 7, No. | DOI 10.17487/RFC8922, October 2020, | |||
2, April 1999. | <https://www.rfc-editor.org/info/rfc8922>. | |||
[I-D.ietf-taps-interface] | ||||
Trammell, B., Welzl, M., Enghardt, T., Fairhurst, G., | ||||
Kuehlewind, M., Perkins, C., Tiesel, P., and C. Wood, "An | ||||
Abstract Application Layer Interface to Transport | ||||
Services", draft-ietf-taps-interface-01 (work in | ||||
progress), July 2018. | ||||
[I-D.ietf-tsvwg-rtcweb-qos] | 9.2. Informative References | |||
Jones, P., Dhesikan, S., Jennings, C., and D. Druta, "DSCP | ||||
Packet Markings for WebRTC QoS", draft-ietf-tsvwg-rtcweb- | ||||
qos-18 (work in progress), August 2016. | ||||
[LBE-draft] | [COBS] Cheshire, S. and M. Baker, "Consistent overhead byte | |||
Bless, R., "A Lower Effort Per-Hop Behavior (LE PHB)", | stuffing", IEEE/ACM Transactions on Networking, Volume 7, | |||
Internet-draft draft-tsvwg-le-phb-03, February 2018. | Issue 2, DOI 10.1109/90.769765, April 1999, | |||
<https://doi.org/10.1109/90.769765>. | ||||
[POSIX] "IEEE Standard for Information Technology--Portable | [POSIX] The Open Group, "IEEE Standard for Information | |||
Operating System Interface (POSIX(R)) Base Specifications, | Technology--Portable Operating System Interface (POSIX(R)) | |||
Issue 7", IEEE Std 1003.1-2017 (Revision of IEEE Std | Base Specifications, Issue 7", (Revision of IEEE Std | |||
1003.1-2008), January 2018, | 1003.1-2008), IEEE Std 1003.1-2017, January 2018, | |||
<http://www.opengroup.org/onlinepubs/9699919799/functions/ | <https://www.opengroup.org/onlinepubs/9699919799/ | |||
contents.html>. | functions/contents.html>. | |||
[RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | [RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | |||
Conrad, "Stream Control Transmission Protocol (SCTP) | Conrad, "Stream Control Transmission Protocol (SCTP) | |||
Partial Reliability Extension", RFC 3758, | Partial Reliability Extension", RFC 3758, | |||
DOI 10.17487/RFC3758, May 2004, | DOI 10.17487/RFC3758, May 2004, | |||
<https://www.rfc-editor.org/info/rfc3758>. | <https://www.rfc-editor.org/info/rfc3758>. | |||
[RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, | [RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, | |||
"Authenticated Chunks for the Stream Control Transmission | "Authenticated Chunks for the Stream Control Transmission | |||
Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August | Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August | |||
skipping to change at page 25, line 5 ¶ | skipping to change at line 1124 ¶ | |||
"Stream Schedulers and User Message Interleaving for the | "Stream Schedulers and User Message Interleaving for the | |||
Stream Control Transmission Protocol", RFC 8260, | Stream Control Transmission Protocol", RFC 8260, | |||
DOI 10.17487/RFC8260, November 2017, | DOI 10.17487/RFC8260, November 2017, | |||
<https://www.rfc-editor.org/info/rfc8260>. | <https://www.rfc-editor.org/info/rfc8260>. | |||
[RFC8304] Fairhurst, G. and T. Jones, "Transport Features of the | [RFC8304] Fairhurst, G. and T. Jones, "Transport Features of the | |||
User Datagram Protocol (UDP) and Lightweight UDP (UDP- | User Datagram Protocol (UDP) and Lightweight UDP (UDP- | |||
Lite)", RFC 8304, DOI 10.17487/RFC8304, February 2018, | Lite)", RFC 8304, DOI 10.17487/RFC8304, February 2018, | |||
<https://www.rfc-editor.org/info/rfc8304>. | <https://www.rfc-editor.org/info/rfc8304>. | |||
[SCTP-stream-1] | [RFC8622] Bless, R., "A Lower-Effort Per-Hop Behavior (LE PHB) for | |||
Differentiated Services", RFC 8622, DOI 10.17487/RFC8622, | ||||
June 2019, <https://www.rfc-editor.org/info/rfc8622>. | ||||
[SCTP-STREAM-1] | ||||
Weinrank, F. and M. Tuexen, "Transparent Flow Mapping for | Weinrank, F. and M. Tuexen, "Transparent Flow Mapping for | |||
NEAT", IFIP NETWORKING Workshop on Future of Internet | NEAT", IFIP Networking 2017, Workshop on Future of | |||
Transport (FIT 2017), June 2017. | Internet Transport (FIT 2017), June 2017. | |||
[SCTP-stream-2] | [SCTP-STREAM-2] | |||
Welzl, M., Niederbacher, F., and S. Gjessing, "Beneficial | Welzl, M., Niederbacher, F., and S. Gjessing, "Beneficial | |||
Transparent Deployment of SCTP", IEEE GlobeCom 2011, | Transparent Deployment of SCTP: The Missing Pieces", IEEE | |||
December 2011. | GlobeCom 2011, DOI 10.1109/GLOCOM.2011.6133554, December | |||
2011, <https://doi.org/10.1109/GLOCOM.2011.6133554>. | ||||
[WWDC2015] | [TAPS-INTERFACE] | |||
Lakhera, P. and S. Cheshire, "Your App and Next Generation | Trammell, B., Welzl, M., Enghardt, T., Fairhurst, G., | |||
Kuehlewind, M., Perkins, C., Tiesel, P. S., Wood, C. A., | ||||
and T. Pauly, "An Abstract Application Layer Interface to | ||||
Transport Services", Work in Progress, Internet-Draft, | ||||
draft-ietf-taps-interface-09, 27 July 2020, | ||||
<https://tools.ietf.org/html/draft-ietf-taps-interface- | ||||
09>. | ||||
[WWDC2015] Lakhera, P. and S. Cheshire, "Your App and Next Generation | ||||
Networks", Apple Worldwide Developers Conference 2015, San | Networks", Apple Worldwide Developers Conference 2015, San | |||
Francisco, USA, June 2015, | Francisco, USA, June 2015, | |||
<https://developer.apple.com/videos/wwdc/2015/?id=719>. | <https://developer.apple.com/videos/wwdc/2015/?id=719>. | |||
Appendix A. The Superset of Transport Features | Appendix A. The Superset of Transport Features | |||
In this description, transport features are presented following the | In this description, transport features are presented following the | |||
nomenclature "CATEGORY.[SUBCATEGORY].FEATURENAME.PROTOCOL", | nomenclature "CATEGORY.[SUBCATEGORY].FEATURENAME.PROTOCOL", | |||
equivalent to "pass 2" in [RFC8303]. We also sketch how functional | equivalent to "pass 2" in [RFC8303]. We also sketch how functional | |||
or optimizing transport features can be implemented by a transport | or optimizing transport features can be implemented by a transport | |||
system. The "minimal set" derived in this document is meant to be | system. The "minimal set" derived in this document is meant to be | |||
implementable "one-sided" over TCP, and, with limitations, UDP. | implementable "one-sided" over TCP and, with limitations, UDP. | |||
Hence, for all transport features that are categorized as | Hence, for all transport features that are categorized as | |||
"functional" or "optimizing", and for which no matching TCP and/or | "functional" or "optimizing", and for which no matching TCP and/or | |||
UDP primitive exists in "pass 2" of [RFC8303], a brief discussion on | UDP primitive exists in "pass 2" of [RFC8303], a brief discussion on | |||
how to implement them over TCP and/or UDP is included. | how to implement them over TCP and/or UDP is included. | |||
We designate some transport features as "automatable" on the basis of | We designate some transport features as "automatable" on the basis of | |||
a broader decision that affects multiple transport features: | a broader decision that affects multiple transport features: | |||
o Most transport features that are related to multi-streaming were | * Most transport features that are related to multi-streaming were | |||
designated as "automatable". This was done because the decision | designated as "automatable". This was done because the decision | |||
on whether to use multi-streaming or not does not depend on | on whether or not to use multi-streaming does not depend on | |||
application-specific knowledge. This means that a connection that | application-specific knowledge. This means that a connection that | |||
is exhibited to an application could be implemented by using a | is exhibited to an application could be implemented by using a | |||
single stream of an SCTP association instead of mapping it to a | single stream of an SCTP association instead of mapping it to a | |||
complete SCTP association or TCP connection. This could be | complete SCTP association or TCP connection. This could be | |||
achieved by using more than one stream when an SCTP association is | achieved by using more than one stream when an SCTP association is | |||
first established (CONNECT.SCTP parameter "outbound stream | first established (CONNECT.SCTP parameter "outbound stream | |||
count"), maintaining an internal stream number, and using this | count"), maintaining an internal stream number, and using this | |||
stream number when sending data (SEND.SCTP parameter "stream | stream number when sending data (SEND.SCTP parameter "stream | |||
number"). Closing or aborting a connection could then simply free | number"). Closing or aborting a connection could then simply free | |||
the stream number for future use. This is discussed further in | the stream number for future use. This is discussed further in | |||
Section 5.2. | Section 5.2. | |||
o With the exception of "Disable MPTCP", all transport features that | ||||
* With the exception of "Disable MPTCP", all transport features that | ||||
are related to using multiple paths or the choice of the network | are related to using multiple paths or the choice of the network | |||
interface were designated as "automatable". For example, "Listen" | interface were designated as "automatable". For example, "Listen" | |||
could always listen on all available interfaces and "Connect" | could always listen on all available interfaces and "Connect" | |||
could use the default interface for the destination IP address. | could use the default interface for the destination IP address. | |||
Finally, in three cases, transport features are aggregated and/or | Finally, in three cases, transport features are aggregated and/or | |||
slightly changed from [RFC8303] in the description below. These | slightly changed from [RFC8303] in the description below. These | |||
transport features are marked as "CHANGED FROM RFC8303". These do | transport features are marked as "CHANGED FROM RFC 8303". These do | |||
not add any new functionality but just represent a simple refactoring | not add any new functionality but just represent a simple refactoring | |||
step that helps to streamline the derivation process (e.g., by | step that helps to streamline the derivation process (e.g., by | |||
removing a choice of a parameter for the sake of applications that | removing a choice of a parameter for the sake of applications that | |||
may not care about this choice). The corresponding transport | may not care about this choice). The corresponding transport | |||
features are automatable, and they are listed immediately below the | features are automatable, and they are listed immediately below the | |||
"CHANGED FROM RFC8303" transport feature. | "CHANGED FROM RFC 8303" transport feature. | |||
A.1. CONNECTION Related Transport Features | A.1. CONNECTION-Related Transport Features | |||
ESTABLISHMENT: | ESTABLISHMENT: | |||
o Connect | * Connect | |||
Protocols: TCP, SCTP, UDP(-Lite) | Protocols: TCP, SCTP, UDP(-Lite) | |||
Functional because the notion of a connection is often reflected | Functional because the notion of a connection is often reflected | |||
in applications as an expectation to be able to communicate after | in applications as an expectation to be able to communicate after | |||
a "Connect" succeeded, with a communication sequence relating to | a "Connect" succeeded, with a communication sequence relating to | |||
this transport feature that is defined by the application | this transport feature that is defined by the application | |||
protocol. | protocol. | |||
Implementation: via CONNECT.TCP, CONNECT.SCTP or CONNECT.UDP(- | Implementation: via CONNECT.TCP, CONNECT.SCTP or CONNECT.UDP(- | |||
Lite). | Lite). | |||
o Specify which IP Options must always be used | * Specify which IP Options must always be used | |||
Protocols: TCP, UDP(-Lite) | Protocols: TCP, UDP(-Lite) | |||
Automatable because IP Options relate to knowledge about the | Automatable because IP Options relate to knowledge about the | |||
network, not the application. | network, not the application. | |||
o Request multiple streams | * Request multiple streams | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because using multi-streaming does not require | Automatable because using multi-streaming does not require | |||
application-specific knowledge (example implementations of using | application-specific knowledge (example implementations of using | |||
multi-streaming without involving the application are described in | multi-streaming without involving the application are described in | |||
[SCTP-stream-1] and [SCTP-stream-2]). | [SCTP-STREAM-1] and [SCTP-STREAM-2]). | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Limit the number of inbound streams | * Limit the number of inbound streams | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because using multi-streaming does not require | Automatable because using multi-streaming does not require | |||
application-specific knowledge. | application-specific knowledge. | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Specify number of attempts and/or timeout for the first | * Specify number of attempts and/or timeout for the first | |||
establishment message | establishment message | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because this is closely related to potentially assumed | Functional because this is closely related to potentially assumed | |||
reliable data delivery for data that is sent before or during | reliable data delivery for data that is sent before or during | |||
connection establishment. | connection establishment. | |||
Implementation: Using a parameter of CONNECT.TCP and CONNECT.SCTP. | ||||
Implementation over UDP: Do nothing (this is irrelevant in case of | ||||
UDP because there, reliable data delivery is not assumed). | ||||
o Obtain multiple sockets | Implementation: using a parameter of CONNECT.TCP and CONNECT.SCTP. | |||
Implementation over UDP: do nothing (this is irrelevant in the | ||||
case of UDP because there, reliable data delivery is not assumed). | ||||
* Obtain multiple sockets | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because the non-parallel usage of multiple paths to | Automatable because the non-parallel usage of multiple paths to | |||
communicate between the same end hosts relates to knowledge about | communicate between the same end hosts relates to knowledge about | |||
the network, not the application. | the network, not the application. | |||
o Disable MPTCP | * Disable MPTCP | |||
Protocols: MPTCP | Protocols: MPTCP | |||
Optimizing because the parallel usage of multiple paths to | Optimizing because the parallel usage of multiple paths to | |||
communicate between the same end hosts can improve performance. | communicate between the same end hosts can improve performance. | |||
Whether to use this feature depends on knowledge about the network | Whether or not to use this feature depends on knowledge about the | |||
as well as application-specific knowledge (see Section 3.1 of | network as well as application-specific knowledge (see Section 3.1 | |||
[RFC6897]). | of [RFC6897]). | |||
Implementation: via a boolean parameter in CONNECT.MPTCP. | Implementation: via a boolean parameter in CONNECT.MPTCP. | |||
Implementation over TCP: Do nothing. | ||||
Implementation over UDP: Do nothing. | ||||
o Configure authentication | Implementation over TCP: do nothing. | |||
Implementation over UDP: do nothing. | ||||
* Configure authentication | ||||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because this has a direct influence on security. | Functional because this has a direct influence on security. | |||
Implementation: via parameters in CONNECT.TCP and CONNECT.SCTP. | Implementation: via parameters in CONNECT.TCP and CONNECT.SCTP. | |||
With TCP, this allows to configure Master Key Tuples (MKTs) to | With TCP, this allows configuring Master Key Tuples (MKTs) to | |||
authenticate complete segments (including the TCP IPv4 | authenticate complete segments (including the TCP IPv4 | |||
pseudoheader, TCP header, and TCP data). With SCTP, this allows | pseudoheader, TCP header, and TCP data). With SCTP, this allows | |||
to specify which chunk types must always be authenticated. | specifying which chunk types must always be authenticated. | |||
Authenticating only certain chunk types creates a reduced level of | Authenticating only certain chunk types creates a reduced level of | |||
security that is not supported by TCP; to be compatible, this | security that is not supported by TCP; to be compatible, this | |||
should therefore only allow to authenticate all chunk types. Key | should therefore only allow to authenticate all chunk types. Key | |||
material must be provided in a way that is compatible with both | material must be provided in a way that is compatible with both | |||
[RFC4895] and [RFC5925]. | [RFC4895] and [RFC5925]. | |||
Implementation over UDP: Not possible (UDP does not offer this | ||||
Implementation over UDP: not possible (UDP does not offer this | ||||
functionality). | functionality). | |||
o Indicate (and/or obtain upon completion) an Adaptation Layer via | * Indicate (and/or obtain upon completion) an Adaptation Layer via | |||
an adaptation code point | an adaptation code point | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because it allows to send extra data for the sake of | ||||
identifying an adaptation layer, which by itself is application- | Functional because it allows sending extra data for the sake of | |||
identifying an adaptation layer, which by itself is application | ||||
specific. | specific. | |||
Implementation: via a parameter in CONNECT.SCTP. | Implementation: via a parameter in CONNECT.SCTP. | |||
Implementation over TCP: not possible (TCP does not offer this | ||||
functionality). | ||||
Implementation over UDP: not possible (UDP does not offer this | ||||
functionality). | ||||
o Request to negotiate interleaving of user messages | Implementation over TCP: not possible. (TCP does not offer this | |||
functionality.) | ||||
Implementation over UDP: not possible. (UDP does not offer this | ||||
functionality.) | ||||
* Request to negotiate interleaving of user messages | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because it requires using multiple streams, but | Automatable because it requires using multiple streams, but | |||
requesting multiple streams in the CONNECTION.ESTABLISHMENT | requesting multiple streams in the CONNECTION.ESTABLISHMENT | |||
category is automatable. | category is automatable. | |||
Implementation: controlled via a parameter in CONNECT.SCTP. One | Implementation: controlled via a parameter in CONNECT.SCTP. One | |||
possible implementation is to always try to enable interleaving. | possible implementation is to always try to enable interleaving. | |||
o Hand over a message to reliably transfer (possibly multiple times) | * Hand over a message to reliably transfer (possibly multiple times) | |||
before connection establishment | before connection establishment | |||
Protocols: TCP | Protocols: TCP | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation: via a parameter in CONNECT.TCP. | Implementation: via a parameter in CONNECT.TCP. | |||
Implementation over UDP: not possible (UDP does not provide | ||||
reliability). | ||||
o Hand over a message to reliably transfer during connection | Implementation over UDP: not possible. (UDP does not provide | |||
reliability.) | ||||
* Hand over a message to reliably transfer during connection | ||||
establishment | establishment | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because this can only work if the message is limited in | Functional because this can only work if the message is limited in | |||
size, making it closely tied to properties of the data that an | size, making it closely tied to properties of the data that an | |||
application sends or expects to receive. | application sends or expects to receive. | |||
Implementation: via a parameter in CONNECT.SCTP. | Implementation: via a parameter in CONNECT.SCTP. | |||
Implementation over TCP: not possible (TCP does not allow | Implementation over TCP: transmit the message with the SYN packet, | |||
identification of message boundaries because it provides a byte | sacrificing the ability to identify message boundaries. | |||
stream service) | ||||
Implementation over UDP: not possible (UDP is unreliable). | Implementation over UDP: not possible. (UDP is unreliable.) | |||
* Enable UDP encapsulation with a specified remote UDP port number | ||||
o Enable UDP encapsulation with a specified remote UDP port number | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because UDP encapsulation relates to knowledge about | Automatable because UDP encapsulation relates to knowledge about | |||
the network, not the application. | the network, not the application. | |||
AVAILABILITY: | AVAILABILITY: | |||
o Listen | * Listen | |||
Protocols: TCP, SCTP, UDP(-Lite) | Protocols: TCP, SCTP, UDP(-Lite) | |||
Functional because the notion of accepting connection requests is | Functional because the notion of accepting connection requests is | |||
often reflected in applications as an expectation to be able to | often reflected in applications as an expectation to be able to | |||
communicate after a "Listen" succeeded, with a communication | communicate after a "Listen" succeeded, with a communication | |||
sequence relating to this transport feature that is defined by the | sequence relating to this transport feature that is defined by the | |||
application protocol. | application protocol. | |||
CHANGED FROM RFC8303. This differs from the 3 automatable | ||||
CHANGED FROM RFC 8303. This differs from the 3 automatable | ||||
transport features below in that it leaves the choice of | transport features below in that it leaves the choice of | |||
interfaces for listening open. | interfaces for listening open. | |||
Implementation: by listening on all interfaces via LISTEN.TCP (not | Implementation: by listening on all interfaces via LISTEN.TCP (not | |||
providing a local IP address) or LISTEN.SCTP (providing SCTP port | providing a local IP address) or LISTEN.SCTP (providing SCTP port | |||
number / address pairs for all local IP addresses). LISTEN.UDP(- | number / address pairs for all local IP addresses). LISTEN.UDP(- | |||
Lite) supports both methods. | Lite) supports both methods. | |||
o Listen, 1 specified local interface | * Listen, 1 specified local interface | |||
Protocols: TCP, SCTP, UDP(-Lite) | Protocols: TCP, SCTP, UDP(-Lite) | |||
Automatable because decisions about local interfaces relate to | Automatable because decisions about local interfaces relate to | |||
knowledge about the network and the Operating System, not the | knowledge about the network and the Operating System, not the | |||
application. | application. | |||
o Listen, N specified local interfaces | * Listen, N specified local interfaces | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because decisions about local interfaces relate to | Automatable because decisions about local interfaces relate to | |||
knowledge about the network and the Operating System, not the | knowledge about the network and the Operating System, not the | |||
application. | application. | |||
o Listen, all local interfaces | * Listen, all local interfaces | |||
Protocols: TCP, SCTP, UDP(-Lite) | Protocols: TCP, SCTP, UDP(-Lite) | |||
Automatable because decisions about local interfaces relate to | Automatable because decisions about local interfaces relate to | |||
knowledge about the network and the Operating System, not the | knowledge about the network and the Operating System, not the | |||
application. | application. | |||
o Specify which IP Options must always be used | * Specify which IP Options must always be used | |||
Protocols: TCP, UDP(-Lite) | Protocols: TCP, UDP(-Lite) | |||
Automatable because IP Options relate to knowledge about the | Automatable because IP Options relate to knowledge about the | |||
network, not the application. | network, not the application. | |||
o Disable MPTCP | * Disable MPTCP | |||
Protocols: MPTCP | Protocols: MPTCP | |||
Optimizing because the parallel usage of multiple paths to | Optimizing because the parallel usage of multiple paths to | |||
communicate between the same end hosts can improve performance. | communicate between the same end hosts can improve performance. | |||
Whether to use this feature depends on knowledge about the network | Whether or not to use this feature depends on knowledge about the | |||
as well as application-specific knowledge (see Section 3.1 of | network as well as application-specific knowledge (see Section 3.1 | |||
[RFC6897]). | of [RFC6897]). | |||
Implementation: via a boolean parameter in LISTEN.MPTCP. | Implementation: via a boolean parameter in LISTEN.MPTCP. | |||
Implementation over TCP: Do nothing. | ||||
Implementation over UDP: Do nothing. | ||||
o Configure authentication | Implementation over TCP: do nothing. | |||
Implementation over UDP: do nothing. | ||||
* Configure authentication | ||||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because this has a direct influence on security. | Functional because this has a direct influence on security. | |||
Implementation: via parameters in LISTEN.TCP and LISTEN.SCTP. | Implementation: via parameters in LISTEN.TCP and LISTEN.SCTP. | |||
Implementation over TCP: With TCP, this allows to configure Master | ||||
Implementation over TCP: with TCP, this allows configuring Master | ||||
Key Tuples (MKTs) to authenticate complete segments (including the | Key Tuples (MKTs) to authenticate complete segments (including the | |||
TCP IPv4 pseudoheader, TCP header, and TCP data). With SCTP, this | TCP IPv4 pseudoheader, TCP header, and TCP data). With SCTP, this | |||
allows to specify which chunk types must always be authenticated. | allows specifying which chunk types must always be authenticated. | |||
Authenticating only certain chunk types creates a reduced level of | Authenticating only certain chunk types creates a reduced level of | |||
security that is not supported by TCP; to be compatible, this | security that is not supported by TCP; to be compatible, this | |||
should therefore only allow to authenticate all chunk types. Key | should therefore only allow to authenticate all chunk types. Key | |||
material must be provided in a way that is compatible with both | material must be provided in a way that is compatible with both | |||
[RFC4895] and [RFC5925]. | [RFC4895] and [RFC5925]. | |||
Implementation over UDP: not possible (UDP does not offer | ||||
authentication). | ||||
o Obtain requested number of streams | Implementation over UDP: not possible. (UDP does not offer | |||
authentication.) | ||||
* Obtain requested number of streams | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because using multi-streaming does not require | Automatable because using multi-streaming does not require | |||
application-specific knowledge. | application-specific knowledge. | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Limit the number of inbound streams | * Limit the number of inbound streams | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because using multi-streaming does not require | Automatable because using multi-streaming does not require | |||
application-specific knowledge. | application-specific knowledge. | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Indicate (and/or obtain upon completion) an Adaptation Layer via | * Indicate (and/or obtain upon completion) an Adaptation Layer via | |||
an adaptation code point | an adaptation code point | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because it allows to send extra data for the sake of | ||||
identifying an adaptation layer, which by itself is application- | Functional because it allows sending extra data for the sake of | |||
identifying an adaptation layer, which by itself is application | ||||
specific. | specific. | |||
Implementation: via a parameter in LISTEN.SCTP. | Implementation: via a parameter in LISTEN.SCTP. | |||
Implementation over TCP: not possible (TCP does not offer this | ||||
functionality). | ||||
Implementation over UDP: not possible (UDP does not offer this | ||||
functionality). | ||||
o Request to negotiate interleaving of user messages | Implementation over TCP: not possible. (TCP does not offer this | |||
functionality.) | ||||
Implementation over UDP: not possible. (UDP does not offer this | ||||
functionality.) | ||||
* Request to negotiate interleaving of user messages | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because it requires using multiple streams, but | Automatable because it requires using multiple streams, but | |||
requesting multiple streams in the CONNECTION.ESTABLISHMENT | requesting multiple streams in the CONNECTION.ESTABLISHMENT | |||
category is automatable. | category is automatable. | |||
Implementation: via a parameter in LISTEN.SCTP. | Implementation: via a parameter in LISTEN.SCTP. | |||
MAINTENANCE: | MAINTENANCE: | |||
o Change timeout for aborting connection (using retransmit limit or | * Change timeout for aborting connection (using retransmit limit or | |||
time value) | time value) | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because this is closely related to potentially assumed | Functional because this is closely related to potentially assumed | |||
reliable data delivery. | reliable data delivery. | |||
Implementation: via CHANGE_TIMEOUT.TCP or CHANGE_TIMEOUT.SCTP. | Implementation: via CHANGE_TIMEOUT.TCP or CHANGE_TIMEOUT.SCTP. | |||
Implementation over UDP: not possible (UDP is unreliable and there | ||||
is no connection timeout). | ||||
o Suggest timeout to the peer | Implementation over UDP: not possible. (UDP is unreliable and | |||
there is no connection timeout.) | ||||
* Suggest timeout to the peer | ||||
Protocols: TCP | Protocols: TCP | |||
Functional because this is closely related to potentially assumed | Functional because this is closely related to potentially assumed | |||
reliable data delivery. | reliable data delivery. | |||
Implementation: via CHANGE_TIMEOUT.TCP. | Implementation: via CHANGE_TIMEOUT.TCP. | |||
Implementation over UDP: not possible (UDP is unreliable and there | ||||
is no connection timeout). | ||||
o Disable Nagle algorithm | Implementation over UDP: not possible. (UDP is unreliable and | |||
there is no connection timeout.) | ||||
* Disable Nagle algorithm | ||||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Optimizing because this decision depends on knowledge about the | Optimizing because this decision depends on knowledge about the | |||
size of future data blocks and the delay between them. | size of future data blocks and the delay between them. | |||
Implementation: via DISABLE_NAGLE.TCP and DISABLE_NAGLE.SCTP. | Implementation: via DISABLE_NAGLE.TCP and DISABLE_NAGLE.SCTP. | |||
Implementation over UDP: do nothing (UDP does not implement the | Implementation over UDP: do nothing (UDP does not implement the | |||
Nagle algorithm). | Nagle algorithm). | |||
o Request an immediate heartbeat, returning success/failure | * Request an immediate heartbeat, returning success/failure | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because this informs about network-specific knowledge. | Automatable because this informs about network-specific knowledge. | |||
o Notification of Excessive Retransmissions (early warning below | * Notification of Excessive Retransmissions (early warning below | |||
abortion threshold) | abortion threshold) | |||
Protocols: TCP | Protocols: TCP | |||
Optimizing because it is an early warning to the application, | Optimizing because it is an early warning to the application, | |||
informing it of an impending functional event. | informing it of an impending functional event. | |||
Implementation: via ERROR.TCP. | Implementation: via ERROR.TCP. | |||
Implementation over UDP: do nothing (there is no abortion | Implementation over UDP: do nothing (there is no abortion | |||
threshold). | threshold). | |||
o Add path | * Add path | |||
Protocols: MPTCP, SCTP | Protocols: MPTCP, SCTP | |||
MPTCP Parameters: source-IP; source-Port; destination-IP; | MPTCP Parameters: source-IP; source-Port; destination-IP; | |||
destination-Port | destination-Port | |||
SCTP Parameters: local IP address | SCTP Parameters: local IP address | |||
Automatable because the choice of paths to communicate between the | Automatable because the choice of paths to communicate between the | |||
same end hosts relates to knowledge about the network, not the | same end hosts relates to knowledge about the network, not the | |||
application. | application. | |||
o Remove path | * Remove path | |||
Protocols: MPTCP, SCTP | Protocols: MPTCP, SCTP | |||
MPTCP Parameters: source-IP; source-Port; destination-IP; | MPTCP Parameters: source-IP; source-Port; destination-IP; | |||
destination-Port | destination-Port | |||
SCTP Parameters: local IP address | SCTP Parameters: local IP address | |||
Automatable because the choice of paths to communicate between the | Automatable because the choice of paths to communicate between the | |||
same end host relates to knowledge about the network, not the | same end host relates to knowledge about the network, not the | |||
application. | application. | |||
o Set primary path | * Set primary path | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because the choice of paths to communicate between the | Automatable because the choice of paths to communicate between the | |||
same end hosts relates to knowledge about the network, not the | same end hosts relates to knowledge about the network, not the | |||
application. | application. | |||
o Suggest primary path to the peer | * Suggest primary path to the peer | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because the choice of paths to communicate between the | Automatable because the choice of paths to communicate between the | |||
same end hosts relates to knowledge about the network, not the | same end hosts relates to knowledge about the network, not the | |||
application. | application. | |||
o Configure Path Switchover | * Configure Path Switchover | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because the choice of paths to communicate between the | Automatable because the choice of paths to communicate between the | |||
same end hosts relates to knowledge about the network, not the | same end hosts relates to knowledge about the network, not the | |||
application. | application. | |||
o Obtain status (query or notification) | * Obtain status (query or notification) | |||
Protocols: SCTP, MPTCP | Protocols: SCTP, MPTCP | |||
SCTP parameters: association connection state; destination | SCTP parameters: association connection state; destination | |||
transport address list; destination transport address reachability | transport address list; destination transport address reachability | |||
states; current local and peer receiver window size; current local | states; current local and peer receiver window size; current local | |||
congestion window sizes; number of unacknowledged DATA chunks; | congestion window sizes; number of unacknowledged DATA chunks; | |||
number of DATA chunks pending receipt; primary path; most recent | number of DATA chunks pending receipt; primary path; most recent | |||
SRTT on primary path; RTO on primary path; SRTT and RTO on other | SRTT on primary path; RTO on primary path; SRTT and RTO on other | |||
destination addresses; MTU per path; interleaving supported yes/no | destination addresses; MTU per path; interleaving supported yes/no | |||
MPTCP parameters: subflow-list (identified by source-IP; source- | MPTCP parameters: subflow-list (identified by source-IP; source- | |||
Port; destination-IP; destination-Port) | Port; destination-IP; destination-Port) | |||
Automatable because these parameters relate to knowledge about the | Automatable because these parameters relate to knowledge about the | |||
network, not the application. | network, not the application. | |||
o Specify DSCP field | * Specify DSCP field | |||
Protocols: TCP, SCTP, UDP(-Lite) | Protocols: TCP, SCTP, UDP(-Lite) | |||
Optimizing because choosing a suitable DSCP value requires | Optimizing because choosing a suitable DSCP value requires | |||
application-specific knowledge. | application-specific knowledge. | |||
Implementation: via SET_DSCP.TCP / SET_DSCP.SCTP / SET_DSCP.UDP(- | Implementation: via SET_DSCP.TCP / SET_DSCP.SCTP / SET_DSCP.UDP(- | |||
Lite) | Lite). | |||
* Notification of ICMP error message arrival | ||||
o Notification of ICMP error message arrival | ||||
Protocols: TCP, UDP(-Lite) | Protocols: TCP, UDP(-Lite) | |||
Optimizing because these messages can inform about success or | Optimizing because these messages can inform about success or | |||
failure of functional transport features (e.g., host unreachable | failure of functional transport features (e.g., host unreachable | |||
relates to "Connect") | relates to "Connect"). | |||
Implementation: via ERROR.TCP or ERROR.UDP(-Lite). | ||||
Implementation: via ERROR.TCP or ERROR.UDP(-Lite.) | ||||
* Obtain information about interleaving support | ||||
o Obtain information about interleaving support | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because it requires using multiple streams, but | Automatable because it requires using multiple streams, but | |||
requesting multiple streams in the CONNECTION.ESTABLISHMENT | requesting multiple streams in the CONNECTION.ESTABLISHMENT | |||
category is automatable. | category is automatable. | |||
Implementation: via STATUS.SCTP. | Implementation: via STATUS.SCTP. | |||
o Change authentication parameters | * Change authentication parameters | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because this has a direct influence on security. | Functional because this has a direct influence on security. | |||
Implementation: via SET_AUTH.TCP and SET_AUTH.SCTP. | Implementation: via SET_AUTH.TCP and SET_AUTH.SCTP. | |||
Implementation over TCP: With SCTP, this allows to adjust key_id, | ||||
key, and hmac_id. With TCP, this allows to change the preferred | Implementation over TCP: with SCTP, this allows adjusting key_id, | |||
key, and hmac_id. With TCP, this allows changing the preferred | ||||
outgoing MKT (current_key) and the preferred incoming MKT | outgoing MKT (current_key) and the preferred incoming MKT | |||
(rnext_key), respectively, for a segment that is sent on the | (rnext_key), respectively, for a segment that is sent on the | |||
connection. Key material must be provided in a way that is | connection. Key material must be provided in a way that is | |||
compatible with both [RFC4895] and [RFC5925]. | compatible with both [RFC4895] and [RFC5925]. | |||
Implementation over UDP: not possible (UDP does not offer | ||||
authentication). | ||||
o Obtain authentication information | Implementation over UDP: not possible. (UDP does not offer | |||
authentication.) | ||||
* Obtain authentication information | ||||
Protocols: SCTP | Protocols: SCTP | |||
Functional because authentication decisions may have been made by | Functional because authentication decisions may have been made by | |||
the peer, and this has an influence on the necessary application- | the peer, and this has an influence on the necessary application- | |||
level measures to provide a certain level of security. | level measures to provide a certain level of security. | |||
Implementation: via GET_AUTH.SCTP. | Implementation: via GET_AUTH.SCTP. | |||
Implementation over TCP: With SCTP, this allows to obtain key_id | Implementation over TCP: with SCTP, this allows obtaining key_id | |||
and a chunk list. With TCP, this allows to obtain current_key and | and a chunk list. With TCP, this allows obtaining current_key and | |||
rnext_key from a previously received segment. Key material must | rnext_key from a previously received segment. Key material must | |||
be provided in a way that is compatible with both [RFC4895] and | be provided in a way that is compatible with both [RFC4895] and | |||
[RFC5925]. | [RFC5925]. | |||
Implementation over UDP: not possible (UDP does not offer | ||||
authentication). | ||||
o Reset Stream | Implementation over UDP: not possible. (UDP does not offer | |||
authentication.) | ||||
* Reset Stream | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because using multi-streaming does not require | Automatable because using multi-streaming does not require | |||
application-specific knowledge. | application-specific knowledge. | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Notification of Stream Reset | * Notification of Stream Reset | |||
Protocols: STCP | ||||
Protocols: SCTP | ||||
Automatable because using multi-streaming does not require | Automatable because using multi-streaming does not require | |||
application-specific knowledge. | application-specific knowledge. | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Reset Association | * Reset Association | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because deciding to reset an association does not | Automatable because deciding to reset an association does not | |||
require application-specific knowledge. | require application-specific knowledge. | |||
Implementation: via RESET_ASSOC.SCTP. | Implementation: via RESET_ASSOC.SCTP. | |||
o Notification of Association Reset | * Notification of Association Reset | |||
Protocols: STCP | ||||
Protocols: SCTP | ||||
Automatable because this notification does not relate to | Automatable because this notification does not relate to | |||
application-specific knowledge. | application-specific knowledge. | |||
o Add Streams | * Add Streams | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because using multi-streaming does not require | Automatable because using multi-streaming does not require | |||
application-specific knowledge. | application-specific knowledge. | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Notification of Added Stream | * Notification of Added Stream | |||
Protocols: STCP | ||||
Protocols: SCTP | ||||
Automatable because using multi-streaming does not require | Automatable because using multi-streaming does not require | |||
application-specific knowledge. | application-specific knowledge. | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Choose a scheduler to operate between streams of an association | * Choose a scheduler to operate between streams of an association | |||
Protocols: SCTP | Protocols: SCTP | |||
Optimizing because the scheduling decision requires application- | Optimizing because the scheduling decision requires application- | |||
specific knowledge. However, if a transport system would not use | specific knowledge. However, if a transport system would not use | |||
this, or wrongly configure it on its own, this would only affect | this, or wrongly configure it on its own, this would only affect | |||
the performance of data transfers; the outcome would still be | the performance of data transfers; the outcome would still be | |||
correct within the "best effort" service model. | correct within the "best effort" service model. | |||
Implementation: using SET_STREAM_SCHEDULER.SCTP. | Implementation: using SET_STREAM_SCHEDULER.SCTP. | |||
Implementation over TCP: do nothing (streams are not available in | Implementation over TCP: do nothing (streams are not available in | |||
TCP, but no guarantee is given that this transport feature has any | TCP, but no guarantee is given that this transport feature has any | |||
effect). | effect). | |||
Implementation over UDP: do nothing (streams are not available in | Implementation over UDP: do nothing (streams are not available in | |||
UDP, but no guarantee is given that this transport feature has any | UDP, but no guarantee is given that this transport feature has any | |||
effect). | effect). | |||
o Configure priority or weight for a scheduler | * Configure priority or weight for a scheduler | |||
Protocols: SCTP | Protocols: SCTP | |||
Optimizing because the priority or weight requires application- | Optimizing because the priority or weight requires application- | |||
specific knowledge. However, if a transport system would not use | specific knowledge. However, if a transport system would not use | |||
this, or wrongly configure it on its own, this would only affect | this, or wrongly configure it on its own, this would only affect | |||
the performance of data transfers; the outcome would still be | the performance of data transfers; the outcome would still be | |||
correct within the "best effort" service model. | correct within the "best effort" service model. | |||
Implementation: using CONFIGURE_STREAM_SCHEDULER.SCTP. | Implementation: using CONFIGURE_STREAM_SCHEDULER.SCTP. | |||
Implementation over TCP: do nothing (streams are not available in | Implementation over TCP: do nothing (streams are not available in | |||
TCP, but no guarantee is given that this transport feature has any | TCP, but no guarantee is given that this transport feature has any | |||
effect). | effect). | |||
Implementation over UDP: do nothing (streams are not available in | Implementation over UDP: do nothing (streams are not available in | |||
UDP, but no guarantee is given that this transport feature has any | UDP, but no guarantee is given that this transport feature has any | |||
effect). | effect). | |||
o Configure send buffer size | * Configure send buffer size | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because this decision relates to knowledge about the | Automatable because this decision relates to knowledge about the | |||
network and the Operating System, not the application (see also | network and the Operating System, not the application (see also | |||
the discussion in Section 5.4). | the discussion in Section 5.4). | |||
o Configure receive buffer (and rwnd) size | * Configure receive buffer (and rwnd) size | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because this decision relates to knowledge about the | Automatable because this decision relates to knowledge about the | |||
network and the Operating System, not the application. | network and the Operating System, not the application. | |||
o Configure message fragmentation | * Configure message fragmentation | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because this relates to knowledge about the network | Automatable because this relates to knowledge about the network | |||
and the Operating System, not the application. Note that this | and the Operating System, not the application. Note that this | |||
SCTP feature does not control IP-level fragmentation, but decides | SCTP feature does not control IP-level fragmentation, but decides | |||
on fragmentation of messages by SCTP, in the end system. | on fragmentation of messages by SCTP, in the end system. | |||
Implementation: by always enabling it with | ||||
Implementation: done by always enabling it with | ||||
CONFIG_FRAGMENTATION.SCTP and auto-setting the fragmentation size | CONFIG_FRAGMENTATION.SCTP and auto-setting the fragmentation size | |||
based on network or Operating System conditions. | based on network or Operating System conditions. | |||
o Configure PMTUD | * Configure PMTUD | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because Path MTU Discovery relates to knowledge about | Automatable because Path MTU Discovery relates to knowledge about | |||
the network, not the application. | the network, not the application. | |||
o Configure delayed SACK timer | * Configure delayed SACK timer | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because the receiver-side decision to delay sending | Automatable because the receiver-side decision to delay sending | |||
SACKs relates to knowledge about the network, not the application | SACKs relates to knowledge about the network, not the application | |||
(it can be relevant for a sending application to request not to | (it can be relevant for a sending application to request not to | |||
delay the SACK of a message, but this is a different transport | delay the SACK of a message, but this is a different transport | |||
feature). | feature). | |||
o Set Cookie life value | * Set Cookie life value | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because it relates to security (possibly weakened by | Functional because it relates to security (possibly weakened by | |||
keeping a cookie very long) versus the time between connection | keeping a cookie very long) versus the time between connection | |||
establishment attempts. Knowledge about both issues can be | establishment attempts. Knowledge about both issues can be | |||
application-specific. | application specific. | |||
Implementation over TCP: the closest specified TCP functionality | Implementation over TCP: the closest specified TCP functionality | |||
is the cookie in TCP Fast Open; for this, [RFC7413] states that | is the cookie in TCP Fast Open; for this, [RFC7413] states that | |||
the server "can expire the cookie at any time to enhance security" | the server "can expire the cookie at any time to enhance | |||
and section 4.1.2 describes an example implementation where | security", and Section 4.1.2 of [RFC7413] describes an example | |||
updating the key on the server side causes the cookie to expire. | implementation where updating the key on the server side causes | |||
Alternatively, for implementations that do not support TCP Fast | the cookie to expire. Alternatively, for implementations that do | |||
Open, this transport feature could also affect the validity of SYN | not support TCP Fast Open, this transport feature could also | |||
cookies (see Section 3.6 of [RFC4987]). | affect the validity of SYN cookies (see Section 3.6 of [RFC4987]). | |||
Implementation over UDP: not possible (UDP does not offer this | ||||
functionality). | Implementation over UDP: not possible. (UDP does not offer this | |||
functionality.) | ||||
* Set maximum burst | ||||
o Set maximum burst | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because it relates to knowledge about the network, not | Automatable because it relates to knowledge about the network, not | |||
the application. | the application. | |||
o Configure size where messages are broken up for partial delivery | * Configure size where messages are broken up for partial delivery | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation over TCP: not possible (TCP does not offer | ||||
identification of message boundaries). | ||||
Implementation over UDP: not possible (UDP does not fragment | ||||
messages). | ||||
o Disable checksum when sending | Implementation over TCP: not possible. (TCP does not offer | |||
identification of message boundaries.) | ||||
Implementation over UDP: not possible. (UDP does not fragment | ||||
messages.) | ||||
* Disable checksum when sending | ||||
Protocols: UDP | Protocols: UDP | |||
Functional because application-specific knowledge is necessary to | Functional because application-specific knowledge is necessary to | |||
decide whether it can be acceptable to lose data integrity with | decide whether it can be acceptable to lose data integrity with | |||
respect to random corruption. | respect to random corruption. | |||
Implementation: via SET_CHECKSUM_ENABLED.UDP. | Implementation: via SET_CHECKSUM_ENABLED.UDP. | |||
Implementation over TCP: do nothing (TCP does not offer to disable | Implementation over TCP: do nothing (TCP does not offer to disable | |||
the checksum, but transmitting data with an intact checksum will | the checksum, but transmitting data with an intact checksum will | |||
not yield a semantically wrong result). | not yield a semantically wrong result). | |||
o Disable checksum requirement when receiving | * Disable checksum requirement when receiving | |||
Protocols: UDP | Protocols: UDP | |||
Functional because application-specific knowledge is necessary to | Functional because application-specific knowledge is necessary to | |||
decide whether it can be acceptable to lose data integrity with | decide whether it can be acceptable to lose data integrity with | |||
respect to random corruption. | respect to random corruption. | |||
Implementation: via SET_CHECKSUM_REQUIRED.UDP. | Implementation: via SET_CHECKSUM_REQUIRED.UDP. | |||
Implementation over TCP: do nothing (TCP does not offer to disable | Implementation over TCP: do nothing (TCP does not offer to disable | |||
the checksum, but transmitting data with an intact checksum will | the checksum, but transmitting data with an intact checksum will | |||
not yield a semantically wrong result). | not yield a semantically wrong result). | |||
o Specify checksum coverage used by the sender | * Specify checksum coverage used by the sender | |||
Protocols: UDP-Lite | Protocols: UDP-Lite | |||
Functional because application-specific knowledge is necessary to | Functional because application-specific knowledge is necessary to | |||
decide for which parts of the data it can be acceptable to lose | decide for which parts of the data it can be acceptable to lose | |||
data integrity with respect to random corruption. | data integrity with respect to random corruption. | |||
Implementation: via SET_CHECKSUM_COVERAGE.UDP-Lite. | Implementation: via SET_CHECKSUM_COVERAGE.UDP-Lite. | |||
Implementation over TCP: do nothing (TCP does not offer to limit | Implementation over TCP: do nothing (TCP does not offer to limit | |||
the checksum length, but transmitting data with an intact checksum | the checksum length, but transmitting data with an intact checksum | |||
will not yield a semantically wrong result). | will not yield a semantically wrong result). | |||
Implementation over UDP: if checksum coverage is set to cover | Implementation over UDP: if checksum coverage is set to cover | |||
payload data, do nothing. Else, either do nothing (transmitting | payload data, do nothing. Else, either do nothing (transmitting | |||
data with an intact checksum will not yield a semantically wrong | data with an intact checksum will not yield a semantically wrong | |||
result), or use the transport feature "Disable checksum when | result), or use the transport feature "Disable checksum when | |||
sending". | sending". | |||
o Specify minimum checksum coverage required by receiver | * Specify minimum checksum coverage required by receiver | |||
Protocols: UDP-Lite | Protocols: UDP-Lite | |||
Functional because application-specific knowledge is necessary to | Functional because application-specific knowledge is necessary to | |||
decide for which parts of the data it can be acceptable to lose | decide for which parts of the data it can be acceptable to lose | |||
data integrity with respect to random corruption. | data integrity with respect to random corruption. | |||
Implementation: via SET_MIN_CHECKSUM_COVERAGE.UDP-Lite. | Implementation: via SET_MIN_CHECKSUM_COVERAGE.UDP-Lite. | |||
Implementation over TCP: do nothing (TCP does not offer to limit | Implementation over TCP: do nothing (TCP does not offer to limit | |||
the checksum length, but transmitting data with an intact checksum | the checksum length, but transmitting data with an intact checksum | |||
will not yield a semantically wrong result). | will not yield a semantically wrong result). | |||
Implementation over UDP: if checksum coverage is set to cover | Implementation over UDP: if checksum coverage is set to cover | |||
payload data, do nothing. Else, either do nothing (transmitting | payload data, do nothing. Else, either do nothing (transmitting | |||
data with an intact checksum will not yield a semantically wrong | data with an intact checksum will not yield a semantically wrong | |||
result), or use the transport feature "Disable checksum | result), or use the transport feature "Disable checksum | |||
requirement when receiving". | requirement when receiving". | |||
o Specify DF field | * Specify DF field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Optimizing because the DF field can be used to carry out Path MTU | Optimizing because the DF field can be used to carry out Path MTU | |||
Discovery, which can lead an application to choose message sizes | Discovery, which can lead an application to choose message sizes | |||
that can be transmitted more efficiently. | that can be transmitted more efficiently. | |||
Implementation: via MAINTENANCE.SET_DF.UDP(-Lite) and | Implementation: via MAINTENANCE.SET_DF.UDP(-Lite) and | |||
SEND_FAILURE.UDP(-Lite). | SEND_FAILURE.UDP(-Lite). | |||
Implementation over TCP: do nothing (with TCP, the sending | Implementation over TCP: do nothing (with TCP, the sending | |||
application is not in control of transport message sizes, making | application is not in control of transport message sizes, making | |||
this functionality irrelevant). | this functionality irrelevant). | |||
o Get max. transport-message size that may be sent using a non- | * Get max. transport-message size that may be sent using a non- | |||
fragmented IP packet from the configured interface | fragmented IP packet from the configured interface | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Optimizing because this can lead an application to choose message | Optimizing because this can lead an application to choose message | |||
sizes that can be transmitted more efficiently. | sizes that can be transmitted more efficiently. | |||
Implementation over TCP: do nothing (this information is not | Implementation over TCP: do nothing (this information is not | |||
available with TCP). | available with TCP). | |||
o Get max. transport-message size that may be received from the | * Get max. transport-message size that may be received from the | |||
configured interface | configured interface | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Optimizing because this can, for example, influence an | Optimizing because this can, for example, influence an | |||
application's memory management. | application's memory management. | |||
Implementation over TCP: do nothing (this information is not | Implementation over TCP: do nothing (this information is not | |||
available with TCP). | available with TCP). | |||
o Specify TTL/Hop count field | * Specify TTL/Hop count field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Automatable because a transport system can use a large enough | Automatable because a transport system can use a large enough | |||
system default to avoid communication failures. Allowing an | system default to avoid communication failures. Allowing an | |||
application to configure it differently can produce notifications | application to configure it differently can produce notifications | |||
of ICMP error message arrivals that yield information which only | of ICMP error message arrivals that yield information that only | |||
relates to knowledge about the network, not the application. | relates to knowledge about the network, not the application. | |||
o Obtain TTL/Hop count field | * Obtain TTL/Hop count field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Automatable because the TTL/Hop count field relates to knowledge | Automatable because the TTL/Hop count field relates to knowledge | |||
about the network, not the application. | about the network, not the application. | |||
o Specify ECN field | * Specify ECN field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Automatable because the ECN field relates to knowledge about the | Automatable because the ECN field relates to knowledge about the | |||
network, not the application. | network, not the application. | |||
o Obtain ECN field | * Obtain ECN field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Optimizing because this information can be used by an application | Optimizing because this information can be used by an application | |||
to better carry out congestion control (this is relevant when | to better carry out congestion control (this is relevant when | |||
choosing a data transmission transport service that does not | choosing a data transmission Transport Service that does not | |||
already do congestion control). | already do congestion control). | |||
Implementation over TCP: do nothing (this information is not | Implementation over TCP: do nothing (this information is not | |||
available with TCP). | available with TCP). | |||
o Specify IP Options | * Specify IP Options | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Automatable because IP Options relate to knowledge about the | Automatable because IP Options relate to knowledge about the | |||
network, not the application. | network, not the application. | |||
o Obtain IP Options | * Obtain IP Options | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Automatable because IP Options relate to knowledge about the | Automatable because IP Options relate to knowledge about the | |||
network, not the application. | network, not the application. | |||
o Enable and configure a "Low Extra Delay Background Transfer" | * Enable and configure a "Low Extra Delay Background Transfer" | |||
Protocols: A protocol implementing the LEDBAT congestion control | ||||
Protocols: a protocol implementing the LEDBAT congestion control | ||||
mechanism | mechanism | |||
Optimizing because whether this feature is appropriate or not | Optimizing because whether this feature is appropriate or not | |||
depends on application-specific knowledge. However, wrongly using | depends on application-specific knowledge. However, wrongly using | |||
this will only affect the speed of data transfers (albeit | this will only affect the speed of data transfers (albeit | |||
including other transfers that may compete with the transport | including other transfers that may compete with the transport | |||
system's transfer in the network), so it is still correct within | system's transfer in the network), so it is still correct within | |||
the "best effort" service model. | the "best effort" service model. | |||
Implementation: via CONFIGURE.LEDBAT and/or SET_DSCP.TCP / | Implementation: via CONFIGURE.LEDBAT and/or SET_DSCP.TCP / | |||
SET_DSCP.SCTP / SET_DSCP.UDP(-Lite) [LBE-draft]. | SET_DSCP.SCTP / SET_DSCP.UDP(-Lite) [RFC8622]. | |||
Implementation over TCP: do nothing (TCP does not support LEDBAT | Implementation over TCP: do nothing (TCP does not support LEDBAT | |||
congestion control, but not implementing this functionality will | congestion control, but not implementing this functionality will | |||
not yield a semantically wrong behavior). | not yield a semantically wrong behavior). | |||
Implementation over UDP: do nothing (UDP does not offer congestion | Implementation over UDP: do nothing (UDP does not offer congestion | |||
control). | control). | |||
TERMINATION: | TERMINATION: | |||
o Close after reliably delivering all remaining data, causing an | * Close after reliably delivering all remaining data, causing an | |||
event informing the application on the other side | event informing the application on the other side | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because the notion of a connection is often reflected | Functional because the notion of a connection is often reflected | |||
in applications as an expectation to have all outstanding data | in applications as an expectation to have all outstanding data | |||
delivered and no longer be able to communicate after a "Close" | delivered and no longer be able to communicate after a "Close" | |||
succeeded, with a communication sequence relating to this | succeeded, with a communication sequence relating to this | |||
transport feature that is defined by the application protocol. | transport feature that is defined by the application protocol. | |||
Implementation: via CLOSE.TCP and CLOSE.SCTP. | Implementation: via CLOSE.TCP and CLOSE.SCTP. | |||
Implementation over UDP: not possible (UDP is unreliable and hence | ||||
does not know when all remaining data is delivered; it does also | ||||
not offer to cause an event related to closing at the peer). | ||||
o Abort without delivering remaining data, causing an event | Implementation over UDP: not possible. (UDP is unreliable and | |||
hence does not know when all remaining data is delivered; it does | ||||
also not offer to cause an event related to closing at the peer.) | ||||
* Abort without delivering remaining data, causing an event | ||||
informing the application on the other side | informing the application on the other side | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because the notion of a connection is often reflected | Functional because the notion of a connection is often reflected | |||
in applications as an expectation to potentially not have all | in applications as an expectation to potentially not have all | |||
outstanding data delivered and no longer be able to communicate | outstanding data delivered and no longer be able to communicate | |||
after an "Abort" succeeded. On both sides of a connection, an | after an "Abort" succeeded. On both sides of a connection, an | |||
application protocol may define a communication sequence relating | application protocol may define a communication sequence relating | |||
to this transport feature. | to this transport feature. | |||
Implementation: via ABORT.TCP and ABORT.SCTP. | Implementation: via ABORT.TCP and ABORT.SCTP. | |||
Implementation over UDP: not possible (UDP does not offer to cause | ||||
an event related to aborting at the peer). | ||||
o Abort without delivering remaining data, not causing an event | Implementation over UDP: not possible. (UDP does not offer to | |||
cause an event related to aborting at the peer.) | ||||
* Abort without delivering remaining data, not causing an event | ||||
informing the application on the other side | informing the application on the other side | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Functional because the notion of a connection is often reflected | Functional because the notion of a connection is often reflected | |||
in applications as an expectation to potentially not have all | in applications as an expectation to potentially not have all | |||
outstanding data delivered and no longer be able to communicate | outstanding data delivered and no longer be able to communicate | |||
after an "Abort" succeeded. On both sides of a connection, an | after an "Abort" succeeded. On both sides of a connection, an | |||
application protocol may define a communication sequence relating | application protocol may define a communication sequence relating | |||
to this transport feature. | to this transport feature. | |||
Implementation: via ABORT.UDP(-Lite). | Implementation: via ABORT.UDP(-Lite). | |||
Implementation over TCP: stop using the connection, wait for a | Implementation over TCP: stop using the connection, wait for a | |||
timeout. | timeout. | |||
o Timeout event when data could not be delivered for too long | * Timeout event when data could not be delivered for too long | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because this notifies that potentially assumed reliable | Functional because this notifies that potentially assumed reliable | |||
data delivery is no longer provided. | data delivery is no longer provided. | |||
Implementation: via TIMEOUT.TCP and TIMEOUT.SCTP. | Implementation: via TIMEOUT.TCP and TIMEOUT.SCTP. | |||
Implementation over UDP: do nothing (this event will not occur | Implementation over UDP: do nothing (this event will not occur | |||
with UDP). | with UDP). | |||
A.2. DATA Transfer Related Transport Features | A.2. DATA-Transfer-Related Transport Features | |||
A.2.1. Sending Data | A.2.1. Sending Data | |||
o Reliably transfer data, with congestion control | * Reliably transfer data, with congestion control | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation: via SEND.TCP and SEND.SCTP. | Implementation: via SEND.TCP and SEND.SCTP. | |||
Implementation over UDP: not possible (UDP is unreliable). | ||||
o Reliably transfer a message, with congestion control | Implementation over UDP: not possible. (UDP is unreliable.) | |||
* Reliably transfer a message, with congestion control | ||||
Protocols: SCTP | Protocols: SCTP | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation: via SEND.SCTP. | Implementation: via SEND.SCTP. | |||
Implementation over TCP: via SEND.TCP. With SEND.TCP, message | Implementation over TCP: via SEND.TCP. With SEND.TCP, message | |||
boundaries will not be identifiable by the receiver, because TCP | boundaries will not be identifiable by the receiver, because TCP | |||
provides a byte stream service. | provides a byte-stream service. | |||
Implementation over UDP: not possible (UDP is unreliable). | ||||
Implementation over UDP: not possible. (UDP is unreliable.) | ||||
* Unreliably transfer a message | ||||
o Unreliably transfer a message | ||||
Protocols: SCTP, UDP(-Lite) | Protocols: SCTP, UDP(-Lite) | |||
Optimizing because only applications know about the time | Optimizing because only applications know about the time | |||
criticality of their communication, and reliably transfering a | criticality of their communication, and reliably transferring a | |||
message is never incorrect for the receiver of a potentially | message is never incorrect for the receiver of a potentially | |||
unreliable data transfer, it is just slower. | unreliable data transfer, it is just slower. | |||
CHANGED FROM RFC8303. This differs from the 2 automatable | ||||
CHANGED FROM RFC 8303. This differs from the 2 automatable | ||||
transport features below in that it leaves the choice of | transport features below in that it leaves the choice of | |||
congestion control open. | congestion control open. | |||
Implementation: via SEND.SCTP or SEND.UDP(-Lite). | Implementation: via SEND.SCTP or SEND.UDP(-Lite). | |||
Implementation over TCP: use SEND.TCP. With SEND.TCP, messages | Implementation over TCP: use SEND.TCP. With SEND.TCP, messages | |||
will be sent reliably, and message boundaries will not be | will be sent reliably, and message boundaries will not be | |||
identifiable by the receiver. | identifiable by the receiver. | |||
o Unreliably transfer a message, with congestion control | * Unreliably transfer a message, with congestion control | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because congestion control relates to knowledge about | Automatable because congestion control relates to knowledge about | |||
the network, not the application. | the network, not the application. | |||
o Unreliably transfer a message, without congestion control | * Unreliably transfer a message, without congestion control | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
Automatable because congestion control relates to knowledge about | Automatable because congestion control relates to knowledge about | |||
the network, not the application. | the network, not the application. | |||
o Configurable Message Reliability | * Configurable Message Reliability | |||
Protocols: SCTP | Protocols: SCTP | |||
Optimizing because only applications know about the time | Optimizing because only applications know about the time | |||
criticality of their communication, and reliably transfering a | criticality of their communication, and reliably transferring a | |||
message is never incorrect for the receiver of a potentially | message is never incorrect for the receiver of a potentially | |||
unreliable data transfer, it is just slower. | unreliable data transfer, it is just slower. | |||
Implementation: via SEND.SCTP. | Implementation: via SEND.SCTP. | |||
Implementation over TCP: By using SEND.TCP and ignoring this | ||||
configuration: based on the assumption of the best-effort service | Implementation over TCP: done by using SEND.TCP and ignoring this | |||
configuration. Based on the assumption of the best-effort service | ||||
model, unnecessarily delivering data does not violate application | model, unnecessarily delivering data does not violate application | |||
expectations. Moreover, it is not possible to associate the | expectations. Moreover, it is not possible to associate the | |||
requested reliability to a "message" in TCP anyway. | requested reliability to a "message" in TCP anyway. | |||
Implementation over UDP: not possible (UDP is unreliable). | ||||
o Choice of stream | Implementation over UDP: not possible. (UDP is unreliable.) | |||
* Choice of stream | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because it requires using multiple streams, but | Automatable because it requires using multiple streams, but | |||
requesting multiple streams in the CONNECTION.ESTABLISHMENT | requesting multiple streams in the CONNECTION.ESTABLISHMENT | |||
category is automatable. Implementation: see Section 5.2. | category is automatable. | |||
Implementation: see Section 5.2. | ||||
* Choice of path (destination address) | ||||
o Choice of path (destination address) | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because it requires using multiple sockets, but | Automatable because it requires using multiple sockets, but | |||
obtaining multiple sockets in the CONNECTION.ESTABLISHMENT | obtaining multiple sockets in the CONNECTION.ESTABLISHMENT | |||
category is automatable. | category is automatable. | |||
o Ordered message delivery (potentially slower than unordered) | * Ordered message delivery (potentially slower than unordered) | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation: via SEND.SCTP. | Implementation: via SEND.SCTP. | |||
Implementation over TCP: By using SEND.TCP. With SEND.TCP, | ||||
Implementation over TCP: done by using SEND.TCP. With SEND.TCP, | ||||
messages will not be identifiable by the receiver. | messages will not be identifiable by the receiver. | |||
Implementation over UDP: not possible (UDP does not offer any | ||||
guarantees regarding ordering). | ||||
o Unordered message delivery (potentially faster than ordered) | Implementation over UDP: not possible. (UDP does not offer any | |||
guarantees regarding ordering.) | ||||
* Unordered message delivery (potentially faster than ordered) | ||||
Protocols: SCTP, UDP(-Lite) | Protocols: SCTP, UDP(-Lite) | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation: via SEND.SCTP. | Implementation: via SEND.SCTP. | |||
Implementation over TCP: By using SEND.TCP and always sending data | Implementation over TCP: done by using SEND.TCP and always sending | |||
ordered: based on the assumption of the best-effort service model, | data ordered. Based on the assumption of the best-effort service | |||
ordered delivery may just be slower and does not violate | model, ordered delivery may just be slower and does not violate | |||
application expectations. Moreover, it is not possible to | application expectations. Moreover, it is not possible to | |||
associate the requested delivery order to a "message" in TCP | associate the requested delivery order to a "message" in TCP | |||
anyway. | anyway. | |||
o Request not to bundle messages | * Request not to bundle messages | |||
Protocols: SCTP | Protocols: SCTP | |||
Optimizing because this decision depends on knowledge about the | Optimizing because this decision depends on knowledge about the | |||
size of future data blocks and the delay between them. | size of future data blocks and the delay between them. | |||
Implementation: via SEND.SCTP. | Implementation: via SEND.SCTP. | |||
Implementation over TCP: By using SEND.TCP and DISABLE_NAGLE.TCP | ||||
to disable the Nagle algorithm when the request is made and enable | Implementation over TCP: done by using SEND.TCP and | |||
it again when the request is no longer made. Note that this is | DISABLE_NAGLE.TCP to disable the Nagle algorithm when the request | |||
not fully equivalent because it relates to the time of issuing the | is made and enable it again when the request is no longer made. | |||
request rather than a specific message. | Note that this is not fully equivalent because it relates to the | |||
time of issuing the request rather than a specific message. | ||||
Implementation over UDP: do nothing (UDP never bundles messages). | Implementation over UDP: do nothing (UDP never bundles messages). | |||
o Specifying a "payload protocol-id" (handed over as such by the | * Specifying a "payload protocol-id" (handed over as such by the | |||
receiver) | receiver) | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because it allows to send extra application data with | ||||
Functional because it allows sending extra application data with | ||||
every message, for the sake of identification of data, which by | every message, for the sake of identification of data, which by | |||
itself is application-specific. | itself is application specific. | |||
Implementation: SEND.SCTP. | Implementation: SEND.SCTP. | |||
Implementation over TCP: not possible (this functionality is not | ||||
available in TCP). | ||||
Implementation over UDP: not possible (this functionality is not | ||||
available in UDP). | ||||
o Specifying a key id to be used to authenticate a message | Implementation over TCP: not possible. (This functionality is not | |||
available in TCP.) | ||||
Implementation over UDP: not possible. (This functionality is not | ||||
available in UDP.) | ||||
* Specifying a key id to be used to authenticate a message | ||||
Protocols: SCTP | Protocols: SCTP | |||
Functional because this has a direct influence on security. | Functional because this has a direct influence on security. | |||
Implementation: via a parameter in SEND.SCTP. | Implementation: via a parameter in SEND.SCTP. | |||
Implementation over TCP: This could be emulated by using | ||||
Implementation over TCP: this could be emulated by using | ||||
SET_AUTH.TCP before and after the message is sent. Note that this | SET_AUTH.TCP before and after the message is sent. Note that this | |||
is not fully equivalent because it relates to the time of issuing | is not fully equivalent because it relates to the time of issuing | |||
the request rather than a specific message. | the request rather than a specific message. | |||
Implementation over UDP: not possible (UDP does not offer | ||||
authentication). | ||||
o Request not to delay the acknowledgement (SACK) of a message | Implementation over UDP: not possible. (UDP does not offer | |||
authentication.) | ||||
* Request not to delay the acknowledgement (SACK) of a message | ||||
Protocols: SCTP | Protocols: SCTP | |||
Optimizing because only an application knows for which message it | Optimizing because only an application knows for which message it | |||
wants to quickly be informed about success / failure of its | wants to quickly be informed about success/failure of its | |||
delivery. | delivery. | |||
Implementation over TCP: do nothing (TCP does not offer this | Implementation over TCP: do nothing (TCP does not offer this | |||
functionality, but ignoring this request from the application will | functionality, but ignoring this request from the application will | |||
not yield a semantically wrong behavior). | not yield a semantically wrong behavior). | |||
Implementation over UDP: do nothing (UDP does not offer this | Implementation over UDP: do nothing (UDP does not offer this | |||
functionality, but ignoring this request from the application will | functionality, but ignoring this request from the application will | |||
not yield a semantically wrong behavior). | not yield a semantically wrong behavior). | |||
A.2.2. Receiving Data | A.2.2. Receiving Data | |||
o Receive data (with no message delimiting) | * Receive data (with no message delimiting) | |||
Protocols: TCP | Protocols: TCP | |||
Functional because a transport system must be able to send and | Functional because a transport system must be able to send and | |||
receive data. | receive data. | |||
Implementation: via RECEIVE.TCP. | Implementation: via RECEIVE.TCP. | |||
Implementation over UDP: do nothing (UDP only works on messages; | Implementation over UDP: do nothing (UDP only works on messages; | |||
these can be handed over, the application can still ignore the | these can be handed over, the application can still ignore the | |||
message boundaries). | message boundaries). | |||
o Receive a message | * Receive a message | |||
Protocols: SCTP, UDP(-Lite) | Protocols: SCTP, UDP(-Lite) | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation: via RECEIVE.SCTP and RECEIVE.UDP(-Lite). | Implementation: via RECEIVE.SCTP and RECEIVE.UDP(-Lite). | |||
Implementation over TCP: not possible (TCP does not support | ||||
identification of message boundaries). | ||||
o Choice of stream to receive from | Implementation over TCP: not possible. (TCP does not support | |||
identification of message boundaries.) | ||||
* Choice of stream to receive from | ||||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because it requires using multiple streams, but | Automatable because it requires using multiple streams, but | |||
requesting multiple streams in the CONNECTION.ESTABLISHMENT | requesting multiple streams in the CONNECTION.ESTABLISHMENT | |||
category is automatable. | category is automatable. | |||
Implementation: see Section 5.2. | Implementation: see Section 5.2. | |||
o Information about partial message arrival | * Information about partial message arrival | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation: via RECEIVE.SCTP. | Implementation: via RECEIVE.SCTP. | |||
Implementation over TCP: do nothing (this information is not | Implementation over TCP: do nothing (this information is not | |||
available with TCP). | available with TCP). | |||
Implementation over UDP: do nothing (this information is not | Implementation over UDP: do nothing (this information is not | |||
available with UDP). | available with UDP). | |||
A.2.3. Errors | A.2.3. Errors | |||
This section describes sending failures that are associated with a | This section describes sending failures that are associated with a | |||
specific call to in the "Sending Data" category (Appendix A.2.1). | specific call to in the "Sending Data" category (Appendix A.2.1). | |||
o Notification of send failures | * Notification of send failures | |||
Protocols: SCTP, UDP(-Lite) | Protocols: SCTP, UDP(-Lite) | |||
Functional because this notifies that potentially assumed reliable | Functional because this notifies that potentially assumed reliable | |||
data delivery is no longer provided. | data delivery is no longer provided. | |||
CHANGED FROM RFC8303. This differs from the 2 automatable | ||||
transport features below in that it does not distinugish between | CHANGED FROM RFC 8303. This differs from the 2 automatable | |||
transport features below in that it does not distinguish between | ||||
unsent and unacknowledged messages. | unsent and unacknowledged messages. | |||
Implementation: via SENDFAILURE-EVENT.SCTP and SEND_FAILURE.UDP(- | Implementation: via SENDFAILURE-EVENT.SCTP and SEND_FAILURE.UDP(- | |||
Lite). | Lite). | |||
Implementation over TCP: do nothing (this notification is not | Implementation over TCP: do nothing (this notification is not | |||
available and will therefore not occur with TCP). | available and will therefore not occur with TCP). | |||
o Notification of an unsent (part of a) message | * Notification of an unsent (part of a) message | |||
Protocols: SCTP, UDP(-Lite) | Protocols: SCTP, UDP(-Lite) | |||
Automatable because the distinction between unsent and | Automatable because the distinction between unsent and | |||
unacknowledged does not relate to application-specific knowledge. | unacknowledged does not relate to application-specific knowledge. | |||
o Notification of an unacknowledged (part of a) message | * Notification of an unacknowledged (part of a) message | |||
Protocols: SCTP | Protocols: SCTP | |||
Automatable because the distinction between unsent and | Automatable because the distinction between unsent and | |||
unacknowledged does not relate to application-specific knowledge. | unacknowledged does not relate to application-specific knowledge. | |||
o Notification that the stack has no more user data to send | * Notification that the stack has no more user data to send | |||
Protocols: SCTP | Protocols: SCTP | |||
Optimizing because reacting to this notification requires the | Optimizing because reacting to this notification requires the | |||
application to be involved, and ensuring that the stack does not | application to be involved, and ensuring that the stack does not | |||
run dry of data (for too long) can improve performance. | run dry of data (for too long) can improve performance. | |||
Implementation over TCP: do nothing (see the discussion in | Implementation over TCP: do nothing (see the discussion in | |||
Section 5.4). | Section 5.4). | |||
Implementation over UDP: do nothing (this notification is not | Implementation over UDP: do nothing (this notification is not | |||
available and will therefore not occur with UDP). | available and will therefore not occur with UDP). | |||
o Notification to a receiver that a partial message delivery has | * Notification to a receiver that a partial message delivery has | |||
been aborted | been aborted | |||
Protocols: SCTP | Protocols: SCTP | |||
Functional because this is closely tied to properties of the data | Functional because this is closely tied to properties of the data | |||
that an application sends or expects to receive. | that an application sends or expects to receive. | |||
Implementation over TCP: do nothing (this notification is not | Implementation over TCP: do nothing (this notification is not | |||
available and will therefore not occur with TCP). | available and will therefore not occur with TCP). | |||
Implementation over UDP: do nothing (this notification is not | Implementation over UDP: do nothing (this notification is not | |||
available and will therefore not occur with UDP). | available and will therefore not occur with UDP). | |||
Appendix B. Revision information | Acknowledgements | |||
XXX RFC-Ed please remove this section prior to publication. | ||||
-02: implementation suggestions added, discussion section added, | ||||
terminology extended, DELETED category removed, various other fixes; | ||||
list of Transport Features adjusted to -01 version of [RFC8303] | ||||
except that MPTCP is not included. | ||||
-03: updated to be consistent with -02 version of [RFC8303]. | ||||
-04: updated to be consistent with -03 version of [RFC8303]. | ||||
Reorganized document, rewrote intro and conclusion, and made a first | ||||
stab at creating a real "minimal set". | ||||
-05: updated to be consistent with -05 version of [RFC8303] (minor | ||||
changes). Fixed a mistake regarding Cookie Life value. Exclusion of | ||||
security related transport features (to be covered in a separate | ||||
document). Reorganized the document (now begins with the minset, | ||||
derivation is in the appendix). First stab at an abstract API for | ||||
the minset. | ||||
draft-ietf-taps-minset-00: updated to be consistent with -08 version | ||||
of [RFC8303] ("obtain message delivery number" was removed, as this | ||||
has also been removed in [RFC8303] because it was a mistake in | ||||
RFC4960. This led to the removal of two more transport features that | ||||
were only designated as functional because they affected "obtain | ||||
message delivery number"). Fall-back to UDP incorporated (this was | ||||
requested at IETF-99); this also affected the transport feature | ||||
"Choice between unordered (potentially faster) or ordered delivery of | ||||
messages" because this is a boolean which is always true for one | ||||
fall-back protocol, and always false for the other one. This was | ||||
therefore now divided into two features, one for ordered, one for | ||||
unordered delivery. The word "reliably" was added to the transport | ||||
features "Hand over a message to reliably transfer (possibly multiple | ||||
times) before connection establishment" and "Hand over a message to | ||||
reliably transfer during connection establishment" to make it clearer | ||||
why this is not supported by UDP. Clarified that the "minset | ||||
abstract interface" is not proposing a specific API for all TAPS | ||||
systems to implement, but it is just a way to describe the minimum | ||||
set. Author order changed. | ||||
WG -01: "fall-back to" (TCP or UDP) replaced (mostly with | ||||
"implementation over"). References to post-sockets removed (these | ||||
were statments that assumed that post-sockets requires two-sided | ||||
implementation). Replaced "flow" with "TAPS Connection" and "frame" | ||||
with "message" to avoid introducing new terminology. Made sections 3 | ||||
and 4 in line with the categorization that is already used in the | ||||
appendix and [RFC8303], and changed style of section 4 to be even | ||||
shorter and less interface-like. Updated reference draft-ietf-tsvwg- | ||||
sctp-ndata to RFC8260. | ||||
WG -02: rephrased "the TAPS system" and "TAPS connection" etc. to | ||||
more generally talk about transport after the intro (mostly replacing | ||||
"TAPS system" with "transport system" and "TAPS connection" with | ||||
"connection". Merged sections 3 and 4 to form a new section 3. | ||||
WG -03: updated sentence referencing | ||||
[I-D.ietf-taps-transport-security] to say that "the minimum security | ||||
requirements for a taps system are discussed in a separate security | ||||
document", wrote "example" in the paragraph introducing the decision | ||||
tree. Removed reference draft-grinnemo-taps-he-03 and the sentence | ||||
that referred to it. | ||||
WG -04: addressed comments from Theresa Enghardt and Tommy Pauly. As | ||||
part of that, removed "TAPS" as a term everywhere (abstract, intro, | ||||
..). | ||||
WG -05: addressed comments from Spencer Dawkins. | ||||
WG -06: Fixed nits. | ||||
WG -07: Addressed Genart comments from Robert Sparks. | ||||
WG -08: Addressed one more Genart comment from Robert Sparks. | ||||
WG -09: Addressed comments from Mirja Kuehlewind, Alvaro Retana, Ben | ||||
Campbell, Benjamin Kaduk and Eric Rescorla. | ||||
WG -10: Addressed comments from Benjamin Kaduk and Eric Rescorla. | ||||
WG -11: Addressed comments from Alissa Cooper. | The authors would like to thank all the participants of the TAPS | |||
Working Group and the NEAT and MAMI research projects for valuable | ||||
input to this document. We especially thank Michael Tüxen for help | ||||
with connection establishment/teardown, Gorry Fairhurst for his | ||||
suggestions regarding fragmentation and packet sizes, and Spencer | ||||
Dawkins for his extremely detailed and constructive review. This | ||||
work has received funding from the European Union's Horizon 2020 | ||||
research and innovation program under grant agreement No. 644334 | ||||
(NEAT). | ||||
Authors' Addresses | Authors' Addresses | |||
Michael Welzl | Michael Welzl | |||
University of Oslo | University of Oslo | |||
PO Box 1080 Blindern | PO Box 1080 Blindern | |||
Oslo N-0316 | N-0316 Oslo | |||
Norway | Norway | |||
Phone: +47 22 85 24 20 | Phone: +47 22 85 24 20 | |||
Email: michawe@ifi.uio.no | Email: michawe@ifi.uio.no | |||
Stein Gjessing | Stein Gjessing | |||
University of Oslo | University of Oslo | |||
PO Box 1080 Blindern | PO Box 1080 Blindern | |||
Oslo N-0316 | N-0316 Oslo | |||
Norway | Norway | |||
Phone: +47 22 85 24 44 | Phone: +47 22 85 24 44 | |||
Email: steing@ifi.uio.no | Email: steing@ifi.uio.no | |||
End of changes. 499 change blocks. | ||||
740 lines changed or deleted | 1032 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |