rfc8923xml2.original.xml | rfc8923.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!-- This template is for creating an Internet Draft using xml2rfc, | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
which is available here: http://xml2rfc.ietf.org. --> | ||||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
<!-- One method to get references from the online citation libraries. | ||||
There has to be one entity for each item to be referenced. | ||||
An alternate method (rfc include) is described in the references. --> | ||||
<!--<!ENTITY RFC2119 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/ref | ||||
erence.RFC.2119.xml"> | ||||
--> | ||||
<!-- http://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml--> | ||||
<!--<!ENTITY RFC2119 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/re | ||||
ference.RFC.2119.xml">--> | ||||
<!--<!ENTITY RFC2309 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/ref | ||||
erence.RFC.2309.xml"> | ||||
<!ENTITY RFC2481 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.2481.xml"> | ||||
<!ENTITY RFC3168 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.3168.xml"> | ||||
<!ENTITY RFC3649 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.3649.xml"> | ||||
<!ENTITY RFC3742 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.3742.xml"> | ||||
<!ENTITY RFC3758 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.3758.xml"> | ||||
<!ENTITY RFC4340 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.4340.xml"> | ||||
<!ENTITY RFC4774 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.4774.xml"> | ||||
<!ENTITY RFC4895 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.4895.xml"> | ||||
<!ENTITY RFC4960 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.4960.xml"> | ||||
<!ENTITY RFC5562 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.5562.xml"> | ||||
<!ENTITY RFC5670 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.5670.xml"> | ||||
<!ENTITY RFC5681 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.5681.xml"> | ||||
<!ENTITY RFC5696 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.5696.xml"> | ||||
<!ENTITY RFC6040 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.6040.xml"> | ||||
<!ENTITY RFC6679 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.6679.xml"> | ||||
<!ENTITY RFC6789 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.6789.xml"> | ||||
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml2rfc.tools | ||||
.ietf.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis | ||||
.xml"> | ||||
--> | ||||
<!ENTITY RFC8085 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8085.xml"> | ||||
<!ENTITY RFC3758 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.3758.xml"> | ||||
<!ENTITY RFC4895 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.4895.xml"> | ||||
<!ENTITY RFC4987 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.4987.xml"> | ||||
<!ENTITY RFC5925 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.5925.xml"> | ||||
<!ENTITY RFC6897 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.6897.xml"> | ||||
<!ENTITY RFC7305 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.7305.xml"> | ||||
<!ENTITY RFC7413 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.7413.xml"> | ||||
<!ENTITY RFC7496 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.7496.xml"> | ||||
<!ENTITY RFC8095 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8095.xml"> | ||||
<!ENTITY RFC8260 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8260.xml"> | ||||
<!ENTITY RFC8303 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8303.xml"> | ||||
<!ENTITY RFC8304 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
ce.RFC.8304.xml"> | ||||
<!ENTITY I-D.ietf-tsvwg-rtcweb-qos SYSTEM "http://xml2rfc.tools.ietf.org/public/ | ||||
rfc/bibxml3/reference.I-D.ietf-tsvwg-rtcweb-qos.xml"> | ||||
<!ENTITY I-D.ietf-taps-interface SYSTEM "http://xml2rfc.tools.ietf.org/public/rf | ||||
c/bibxml3/reference.I-D.draft-ietf-taps-interface-01.xml"> | ||||
<!ENTITY I-D.ietf-taps-transport-security SYSTEM "http://xml2rfc.tools.ietf.org/ | ||||
public/rfc/bibxml3/reference.I-D.draft-ietf-taps-transport-security-02.xml"> | ||||
]> | ||||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<!-- used by XSLT processors --> | ||||
<!-- For a complete list and description of processing instructions (PIs), | ||||
please see http://xml2rfc.ietf.org/authoring/README.html. --> | ||||
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | ||||
might want to use. | ||||
(Here they are set differently than their defaults in xml2rfc v1.32) --> | ||||
<?rfc strict="yes" ?> | ||||
<!-- give errors regarding ID-nits and DTD validation --> | ||||
<!-- control the table of contents (ToC) --> | ||||
<?rfc toc="yes"?> | ||||
<!-- generate a ToC --> | ||||
<?rfc tocdepth="3"?> | ||||
<!-- the number of levels of subsections in ToC. default: 3 --> | ||||
<!-- control references --> | ||||
<?rfc symrefs="yes"?> | ||||
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
<?rfc sortrefs="yes" ?> | ||||
<!-- sort the reference entries alphabetically --> | ||||
<!-- control vertical white space | ||||
(using these PIs as follows is recommended by the RFC Editor) --> | ||||
<?rfc compact="yes" ?> | ||||
<!-- do not start each main section on a new page --> | ||||
<?rfc subcompact="yes" ?> | ||||
<!-- do not keep one blank line between list items --> | ||||
<!-- end of list of popular I-D processing instructions --> | ||||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?> | ||||
<rfc category="info" docName="draft-ietf-taps-minset-11" ipr="trust200902"> | ||||
<!-- noModificationTrust200902 noDerivativesTrust200902 pre5378Trust20 | ||||
0902">--> | ||||
<!-- updates="6298"> --> | ||||
<!-- ipr="full3978"> --> | ||||
<!-- category values: std, bcp, info, exp, and historic | ||||
ipr values: full3667, noModification3667, noDerivatives3667 | ||||
you can add the attributes updates="NNNN" and obsoletes="NNNN" | ||||
they will automatically be output with "(if approved)" --> | ||||
<!-- ***** FRONT MATTER ***** --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | |||
docName="draft-ietf-taps-minset-11" number="8923" ipr="trust200902" | ||||
obsoletes="" updates="" submissionType="IETF" category="info" | ||||
consensus="true" xml:lang="en" tocInclude="true" tocDepth="3" | ||||
symRefs="true" sortRefs="true" version="3"> | ||||
<front> | <front> | |||
<!-- The abbreviated title is used in the page header - it is only neces | ||||
sary if the | ||||
full title is longer than 39 characters --> | ||||
<!-- <title abbrev="Abbreviated Title">Coupled congestion control</title | ||||
> --> | ||||
<title abbrev="Minimal Transport Services">A Minimal Set of Transport Se rvices for End Systems</title> | <title abbrev="Minimal Transport Services">A Minimal Set of Transport Se rvices for End Systems</title> | |||
<seriesInfo name="RFC" value="8923"/> | ||||
<!-- add 'role="editor"' below for the editors if appropriate --> | ||||
<!-- Another author who claims to be an editor --> | ||||
<author fullname="Michael Welzl" initials="M." surname="Welzl"> | <author fullname="Michael Welzl" initials="M." surname="Welzl"> | |||
<organization>University of Oslo</organization> | <organization>University of Oslo</organization> | |||
<address> | ||||
<address> | <postal> | |||
<postal> | <pobox>PO Box 1080 Blindern</pobox> | |||
<street>PO Box 1080 Blindern</street> | <code>N-0316</code> | |||
<city>Oslo</city> | ||||
<!-- Reorder these if your country does things differently - | <country>Norway</country> | |||
-> | </postal> | |||
<phone>+47 22 85 24 20</phone> | ||||
<code>N-0316</code> | <email>michawe@ifi.uio.no</email> | |||
<city>Oslo</city> | ||||
<region></region> | ||||
<country>Norway</country> | ||||
</postal> | ||||
<phone>+47 22 85 24 20</phone> | ||||
<email>michawe@ifi.uio.no</email> | ||||
<!-- uri and facsimile elements may also be added --> | ||||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Stein Gjessing" initials="S." surname="Gjessing"> | ||||
<author fullname="Stein Gjessing" initials="S." surname="Gjessing"> | <organization>University of Oslo</organization> | |||
<organization>University of Oslo</organization> | <address> | |||
<postal> | ||||
<address> | <pobox>PO Box 1080 Blindern</pobox> | |||
<postal> | <code>N-0316</code> | |||
<street>PO Box 1080 Blindern</street> | <city>Oslo</city> | |||
<country>Norway</country> | ||||
<!-- Reorder these if your country does things differently - | </postal> | |||
-> | <phone>+47 22 85 24 44</phone> | |||
<email>steing@ifi.uio.no</email> | ||||
<code>N-0316</code> | ||||
<city>Oslo</city> | ||||
<region></region> | ||||
<country>Norway</country> | ||||
</postal> | ||||
<phone>+47 22 85 24 44</phone> | ||||
<email>steing@ifi.uio.no</email> | ||||
<!-- uri and facsimile elements may also be added --> | ||||
</address> | </address> | |||
</author> | </author> | |||
<!-- <date day="06" month="June" year="2015" /> --> | ||||
<date year="2018" /> | ||||
<!-- If the month and year are both specified and are the current ones, | ||||
xml2rfc will fill | ||||
in the current day for you. If only the current year is specified, xml2 | ||||
rfc will fill | ||||
in the current day and month for you. If the year is not the current on | ||||
e, it is | ||||
necessary to specify at least a month (xml2rfc assumes day="1" if not s | ||||
pecified for the | ||||
purpose of calculating the expiry date). With drafts it is normally su | ||||
fficient to | ||||
specify just the year. --> | ||||
<!-- Meta-data Declarations --> | <date year="2020" month="October" /> | |||
<area>Transport</area> | <area>Transport</area> | |||
<workgroup>TAPS</workgroup> | ||||
<workgroup>TAPS</workgroup> | <keyword>taps</keyword> | |||
<keyword>transport services</keyword> | ||||
<!-- WG name at the upperleft corner of the doc, | ||||
IETF is fine for individual submissions. | ||||
If this element is not present, the default is "Network Working Group", | ||||
which is used by the RFC Editor as a nod to the history of the IETF. -- | ||||
> | ||||
<keyword>taps, transport services</keyword> | ||||
<!-- Keywords will be incorporated into HTML output | ||||
files in a meta tag but they have no effect on text or nroff | ||||
output. If you submit your draft to the RFC Editor, the | ||||
keywords will be used for the search engine. --> | ||||
<abstract> | <abstract> | |||
<t>This draft recommends a minimal set of Transport Services offered | <t>This document recommends a minimal set of Transport Services offered | |||
by end systems, | by end systems and gives guidance on choosing among the available | |||
and gives guidance on choosing among the available mechanisms and pr | mechanisms and protocols. It is based on the set of transport features | |||
otocols. It is based on the set of | in RFC 8303.</t> | |||
transport features in RFC 8303.</t> | </abstract> | |||
</abstract> | </front> | |||
</front> | <middle> | |||
<middle> | ||||
<!-- <section title="Definitions" anchor='sec-def'> | ||||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||||
document are to be interpreted as described in <xref | ||||
target="RFC2119">RFC 2119</xref>.</t> | ||||
<t><list style="hanging" hangIndent="6"> | ||||
<t hangText="Wha'ever:"> | ||||
<vspace /> | ||||
Wha'ever is short for Whatever.</t> | ||||
</list></t> | ||||
</section> | ||||
--> | ||||
<section anchor="sec-intro" title="Introduction"> | ||||
<t>Currently, the set of transport services | ||||
that most applications use is based on TCP and UDP (and protocols th | ||||
at are layered on top of them); this limits the | ||||
ability for the network stack to make use of | ||||
features of other transport protocols. For example, if a protocol su | ||||
pports out-of-order message delivery but | ||||
applications always assume that the network provides an ordered byte | ||||
stream, then the network stack can not immediately deliver | ||||
a message that arrives out-of-order: doing so would break a fund | ||||
amental assumption of the application. The net result | ||||
is unnecessary head-of-line blocking delay.</t> | ||||
<t>By exposing the transport services of multiple transport protocol | ||||
s, a transport system can make it possible | ||||
for applications to use these services without being statically | ||||
bound to a specific transport protocol. | ||||
The first step towards the design of such a system was taken by | ||||
<xref target="RFC8095"></xref>, which | ||||
surveys a large number of transports, and <xref target="RFC8303" | ||||
></xref> as well as <xref target="RFC8304"/>, which identify the specific | ||||
transport features that are exposed to applications by the proto | ||||
cols TCP, MPTCP, UDP(-Lite) and SCTP | ||||
as well as the LEDBAT congestion control mechanism. LEDBAT was i | ||||
ncluded as the only congestion control | ||||
mechanism in this list because the | ||||
"low extra delay background transport" service that it offers is | ||||
significantly different | ||||
from the typical service provided by other congestion control me | ||||
chanisms. | ||||
This memo is based on these documents and follows the same termi | ||||
nology (also listed below). | ||||
Because the considered transport protocols conjointly cover | ||||
a wide range of transport features, there is reason to hope that | ||||
the resulting set (and the | ||||
reasoning that led to it) will also apply to many aspects of oth | ||||
er transport protocols that may be in use today, | ||||
or may be designed in the future. | ||||
</t> | ||||
<t>By decoupling applications from transport protocols, a transport | ||||
system provides a different abstraction level | ||||
than the Berkeley sockets interface <xref target="POSIX"/>. As w | ||||
ith high- vs. low-level programming languages, a higher abstraction | ||||
level allows more freedom for automation below the interface, ye | ||||
t it takes some control away from | ||||
the application programmer. This is the design trade-off that a | ||||
transport system developer is facing, and | ||||
this document provides guidance on the design of this abstractio | ||||
n level. Some transport features | ||||
are currently rarely offered by APIs, yet they must be offered o | ||||
r they can never be used. | ||||
Other transport features are offered by the APIs of the protocol | ||||
s covered here, | ||||
but not exposing them in an API would allow for more freedom to | ||||
automate protocol usage in a transport system. | ||||
The minimal set presented here is an effort to find a middle gro | ||||
und that can be recommended | ||||
for transport systems to implement, on the basis of the transpor | ||||
t features discussed in <xref target="RFC8303"/>.</t> | ||||
<t>Applications use a wide variety of APIs today. While this documen | <section anchor="sec-intro" numbered="true" toc="default"> | |||
t was created to ensure the API developed in the | <name>Introduction</name> | |||
Transport Services (TAPS) Working Group (<xref target="I-D.ietf- | <t>Currently, the set of Transport Services that most applications use | |||
taps-interface" />) includes the most important | is based on TCP and UDP (and protocols that are layered on top of them); | |||
transport features, the minimal set | this limits the ability for the network stack to make use of features of | |||
presented here must be reflected in *all* network APIs in order | other transport protocols. For example, if a protocol supports | |||
for the underlying functionality to | out-of-order message delivery but applications always assume that the | |||
become usable everywhere. For example, it does not help an applicati | network provides an ordered byte stream, then the network stack can not | |||
on that talks to a library which offers its | immediately deliver a message that arrives out of order; doing so would | |||
own communication interface if the underlying | break a fundamental assumption of the application. The net result is | |||
Berkeley Sockets API is extended to offer "unordered message deliver | unnecessary head-of-line blocking delay.</t> | |||
y", but the library only exposes an | <t>By exposing the Transport Services of multiple transport protocols, a | |||
ordered bytestream. Both the Berkeley Sockets API and the library wo | transport system can make it possible for applications to use these | |||
uld have to | services without being statically bound to a specific transport | |||
expose the "unordered message delivery" transport feature | protocol. The first step towards the design of such a system was taken | |||
(alternatively, there may be ways for certain types of libraries to | by <xref target="RFC8095" format="default"/>, which surveys a large | |||
use this | number of transports, and <xref target="RFC8303" format="default"/> as | |||
transport feature without exposing it, based on knowledge about the | well as <xref target="RFC8304" format="default"/>, which identify the | |||
applications -- but this is not the general case). Similarly, transp | specific transport features that are exposed to applications by the | |||
ort protocols such as SCTP offer | protocols TCP, Multipath TCP (MPTCP), UDP(-Lite), and Stream Control | |||
multi-streaming, which cannot be utilized, e.g., to prioritize messa | Transmission Protocol (SCTP), as well as the Low Extra Delay Background | |||
ges between streams, | Transport (LEDBAT) congestion control mechanism. LEDBAT was included as | |||
unless applications communicate the priorities and the group of conn | the only congestion control mechanism in this list because the "low | |||
ections upon which these | extra delay background transport" service that it offers is | |||
priorities should be applied. | significantly different from the typical service provided by other | |||
In most situations, in the interest of being as flexible and efficie | congestion control mechanisms. This memo is based on these documents | |||
nt as possible, the best choice will be for | and follows the same terminology (also listed below). Because the | |||
a library to expose at least all of the transport features that are | considered transport protocols conjointly cover a wide range of | |||
recommended as a "minimal set" here. | transport features, there is reason to hope that the resulting set (and | |||
<!-- MICHAEL: The point of the example below was to mention somethin | the reasoning that led to it) will also apply to many aspects of other | |||
g that's already valid today - but now I don't | transport protocols that may be in use today or may be designed in the | |||
think this is necessary or improves the text quality.--> | future. | |||
<!--As an example | </t> | |||
considering only TCP and UDP, a middleware or library that only offe | <t>By decoupling applications from transport protocols, a transport | |||
rs TCP's reliable bytestream cannot make use | system provides a different abstraction level than the Berkeley sockets | |||
of UDP (unless it implements extra functionality on top of UDP) - do | interface <xref target="POSIX" format="default"/>. As with high- | |||
ing so could break a | vs. low-level programming languages, a higher abstraction level allows | |||
fundamental assumption that applications make about the data they se | more freedom for automation below the interface, yet it takes some | |||
nd and receive.--> | control away from the application programmer. This is the design | |||
</t> | trade-off that a transport system developer is facing, and this document | |||
provides guidance on the design of this abstraction level. Some | ||||
transport features are currently rarely offered by APIs, yet they must | ||||
be offered or they can never be used. Other transport features are | ||||
offered by the APIs of the protocols covered here, but not exposing them | ||||
in an API would allow for more freedom to automate protocol usage in a | ||||
transport system. The minimal set presented here is an effort to find a | ||||
middle ground that can be recommended for transport systems to | ||||
implement, on the basis of the transport features discussed in <xref | ||||
target="RFC8303" format="default"/>.</t> | ||||
<t>Applications use a wide variety of APIs today. While this document | ||||
was created to ensure the API developed in the Transport Services (TAPS) | ||||
Working Group <xref target="I-D.ietf-taps-interface" | ||||
format="default"/> includes the most important transport features, the | ||||
minimal set presented here must be reflected in *all* network APIs in | ||||
order for the underlying functionality to become usable everywhere. For | ||||
example, it does not help an application that talks to a library that | ||||
offers its own communication interface if the underlying Berkeley | ||||
Sockets API is extended to offer "unordered message delivery", but the | ||||
library only exposes an ordered byte stream. Both the Berkeley Sockets | ||||
API and the library would have to expose the "unordered message | ||||
delivery" transport feature (alternatively, there may be ways for | ||||
certain types of libraries to use this transport feature without | ||||
exposing it, based on knowledge about the applications, but this is not | ||||
the general case). Similarly, transport protocols such as the Stream | ||||
Control Transmission Protocol (SCTP) offer multi-streaming, which cannot | ||||
be utilized, e.g., to prioritize messages between streams, unless | ||||
applications communicate the priorities and the group of connections | ||||
upon which these priorities should be applied. In most situations, in | ||||
the interest of being as flexible and efficient as possible, the best | ||||
choice will be for a library to expose at least all of the transport | ||||
features that are recommended as a "minimal set" here. | ||||
<t> | </t> | |||
<t> | ||||
This "minimal set" can be implemented "one-sided" over TCP. Thi s means | This "minimal set" can be implemented "one-sided" over TCP. Thi s means | |||
that a sender-side transport system can talk to a standard TCP r eceiver, | that a sender-side transport system can talk to a standard TCP r eceiver, | |||
and a receiver-side transport system can talk to a standard TCP sender. | and a receiver-side transport system can talk to a standard TCP sender. | |||
If certain limitations are put in place, the "minimal set" can a lso be | If certain limitations are put in place, the "minimal set" can a lso be | |||
implemented "one-sided" over UDP. While the possibility of such "one-sided" | implemented "one-sided" over UDP. While the possibility of such "one-sided" | |||
implementation may help deployment, it comes at the cost of limi ting the | implementation may help deployment, it comes at the cost of limi ting the | |||
set to services that can also be provided by TCP (or, with furth er | set to services that can also be provided by TCP (or, with furth er | |||
limitations, UDP). Thus, the minimal set of transport features h ere is | limitations, UDP). Thus, the minimal set of transport features h ere is | |||
applicable for many, but not all, applications: some application | applicable for many, but not all, applications; some application | |||
protocols have requirements that are not met by this "minimal se t". | protocols have requirements that are not met by this "minimal se t". | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Note that, throughout this document, protocols are meant to be u sed | Note that, throughout this document, protocols are meant to be u sed | |||
natively. For example, when transport features of UDP, or "imple | natively. For example, when transport features of TCP, or "imple | |||
mentation over" | mentation over" | |||
UDP is discussed, this refers to native usage of UDP. | TCP is discussed, this refers to native usage of TCP rather | |||
</t> | than TCP being encapsulated in some other transport protocol | |||
such as UDP. | ||||
</section> | </t> | |||
</section> | ||||
<section title="Terminology"> | <section numbered="true" toc="default"> | |||
<name>Terminology</name> | ||||
<!-- <t>The following terms are used throughout this document, and in | ||||
subsequent documents produced by TAPS that describe the composit | ||||
ion and | ||||
decomposition of transport services.</t> | ||||
<t><list style="hanging"> | <dl newline="false" > | |||
<t hangText='Transport Feature:'> | <dt>Transport Feature:</dt> | |||
a specific end-to-end feature that the transport layer provi | <dd> | |||
des to | A specific end-to-end feature that the transport layer | |||
an application. Examples include confidentiality, reliable d | provides to an application. Examples include | |||
elivery, ordered | confidentiality, reliable delivery, ordered delivery, | |||
delivery, message-versus-stream orientation, etc.</t> | message-versus-stream orientation, etc.</dd> | |||
<t hangText='Transport Service:'> | <dt>Transport Service:</dt> | |||
a set of Transport Features, without an association to any g | <dd> | |||
iven | A set of Transport Features, without an association to any g | |||
framing protocol, which provides a complete service to an ap | iven | |||
plication.</t> | framing protocol, that provides a complete service to an app | |||
<t hangText='Transport Protocol:'> | lication.</dd> | |||
an implementation that provides one or more different transp | <dt>Transport Protocol:</dt> | |||
ort services | <dd> | |||
using a specific framing and header format on the wire.</t> | An implementation that provides one or more different Transp | |||
<t hangText='Application:'> | ort Services | |||
an entity that uses a transport layer interface for end-to-e | using a specific framing and header format on the wire.</dd> | |||
nd delivery of data | <dt>Application:</dt> | |||
across the network (this may also be an upper layer protocol | <dd> | |||
or tunnel | An entity that uses a transport-layer interface for end-to-e | |||
encapsulation).</t> | nd delivery of data | |||
<t hangText='Application-specific knowledge:'> | across the network (this may also be an upper-layer protocol | |||
knowledge that only applications have.</t> | or tunnel | |||
<t hangText='End system:'> | encapsulation).</dd> | |||
an entity that communicates with one or more other end syste | <dt>Application-specific knowledge:</dt> | |||
ms using | <dd> | |||
a transport protocol. An end system provides a transport lay | Knowledge that only applications have.</dd> | |||
er interface | <dt>End system:</dt> | |||
<dd> | ||||
An entity that communicates with one or more other end syste | ||||
ms using | ||||
a transport protocol. An end system provides a transport-lay | ||||
er interface | ||||
to applications. | to applications. | |||
</t> | </dd> | |||
<t hangText='Connection:'> | <dt>Connection:</dt> | |||
shared state of two or more end systems that persists | <dd> | |||
across messages that are transmitted between these end syste | Shared state of two or more end systems that persists | |||
ms.</t> | across messages that are transmitted between these end syste | |||
<t hangText='Connection Group:'> | ms.</dd> | |||
a set of connections which share the same configuration (con | <dt>Connection Group:</dt> | |||
figuring | <dd> | |||
one of them causes all other connections in the same | A set of connections that share the same configuration | |||
group to be configured in the same way). We call connections | (configuring one of them causes all other connections in | |||
that | the same group to be configured in the same way). We call | |||
belong to a connection group | connections that belong to a connection group "grouped", | |||
"grouped", while "ungrouped" connections are not a part of | while "ungrouped" connections are not a part of a | |||
a connection group.</t> | connection group.</dd> | |||
<t hangText='Socket:'> | <dt>Socket:</dt> | |||
the combination of a destination IP address and a destinatio | <dd> | |||
n port number.</t> | The combination of a destination IP address and a destinatio | |||
n port number.</dd> | ||||
</dl> | ||||
</list></t> | <t>Moreover, throughout the document, the protocol name "UDP(-Lite)" is used | |||
<t>Moreover, throughout the document, the protocol name "UDP(-Lite)" | when | |||
is used when | ||||
discussing transport features that are equivalent for UDP and UD P-Lite; similarly, | discussing transport features that are equivalent for UDP and UD P-Lite; similarly, | |||
the protocol name "TCP" refers to both TCP and MPTCP. | the protocol name "TCP" refers to both TCP and MPTCP. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="deriving" numbered="true" toc="default"> | |||
<name>Deriving the Minimal Set</name> | ||||
<section anchor="deriving" title="Deriving the minimal set"> | <t> | |||
<t><!-- MICHAEL: Gorry suggested this is unnecessary to state. --> | ||||
<!--Because QoS is out of scope of TAPS, this document assumes a | ||||
"best effort" service | ||||
model <xref target="RFC5290"></xref>, <xref target="RFC7305"></ | ||||
xref>. Applications using a TAPS system can | ||||
therefore not make any assumptions | ||||
about e.g. the time it will take to send a message. | ||||
--> | ||||
We assume that applications have no | ||||
specific requirements that need knowledge about the network, e.g | ||||
. regarding the choice of network | ||||
interface or the end-to-end path. | ||||
Even with these assumptions, there are certain requirements | ||||
that are strictly kept by transport protocols today, and these m | ||||
ust also be kept by a transport system. | ||||
Some of these requirements relate to transport features that we | ||||
call "Functional". | ||||
</t> | ||||
<t>Functional transport features provide functionality that cannot b | ||||
e used without the application knowing | ||||
about them, or else they violate assumptions that might cause th | ||||
e application to fail. | ||||
For example, ordered message delivery is a functional transport | ||||
feature: it cannot be configured without | ||||
the application knowing about it because the application's assum | ||||
ption could be that | ||||
messages always arrive in order. Failure includes any change of | ||||
the application behavior that is not | ||||
performance oriented, e.g. security. | ||||
</t> | ||||
<t>"Change DSCP" and "Disable Nagle algorithm" are examples of trans | ||||
port features | ||||
that we call "Optimizing": | ||||
if a transport system autonomously decides to enable or disable | ||||
them, an | ||||
application will not fail, but a transport system may be able to | ||||
communicate more efficiently if the application is in control of | ||||
this | ||||
optimizing transport feature. These | ||||
transport features require application-specific knowledge (e.g., | ||||
about delay/bandwidth | ||||
requirements or the length of future data blocks that are to be | ||||
transmitted). | ||||
</t> | ||||
<t> | ||||
The transport features of IETF transport protocols that do not r | ||||
equire application-specific knowledge and could therefore | ||||
be utilized by a transport system on its own without involving t | ||||
he application are called "Automatable". | ||||
</t> | ||||
<t>We approach the construction of a minimal set of transport featur | ||||
es in the following way: | ||||
<list style="numbers"> | ||||
<t>Categorization (<xref target="super"/>): the superset of | ||||
transport features from <xref target="RFC8303"></xref> is presented, | ||||
and transport features are categorized as Functional, Op | ||||
timizing or Automatable for later reduction.</t> | ||||
<t>Reduction (<xref target="Reduction"/>): a shorter list of | ||||
transport features is derived from the categorization in the | ||||
first step. This removes all transport features that do | ||||
not require application-specific knowledge | ||||
or would result in semantically incorrect behavior if th | ||||
ey were implemented | ||||
over TCP or UDP.</t> | ||||
<t>Discussion (<xref target="Discussion"/>): the resulting l | ||||
ist shows a number of peculiarities that are discussed, to provide a basis | ||||
for constructing the minimal set.</t> | ||||
<t>Construction (<xref target="minset"/>): Based on the redu | ||||
ced set and the discussion of the transport features therein, a | ||||
minimal set is constructed.</t> | ||||
</list></t> | ||||
<t>Following <xref target="RFC8303"></xref> and retaining its te | ||||
rminology, we divide the transport | ||||
features into two main groups as follows: | ||||
<list style="numbers"> | ||||
<t>CONNECTION related transport features <vspace /> | ||||
- ESTABLISHMENT<vspace /> | ||||
- AVAILABILITY<vspace /> | ||||
- MAINTENANCE<vspace /> | ||||
- TERMINATION<vspace /> | ||||
</t> | ||||
<t>DATA Transfer related transport features <vspace /> | ||||
- Sending Data<vspace /> | ||||
- Receiving Data<vspace /> | ||||
- Errors<vspace /> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section anchor="Reduction" title="The Reduced Set of Transport Features | ||||
"> | ||||
<t>By hiding automatable transport features from the application, a | We assume that applications have no specific requirements that | |||
transport system can | need knowledge about the network, e.g., regarding the choice of | |||
network interface or the end-to-end path. Even with these | ||||
assumptions, there are certain requirements that are strictly | ||||
kept by transport protocols today, and these must also be kept | ||||
by a transport system. Some of these requirements relate to | ||||
transport features that we call "Functional". | ||||
</t> | ||||
<t>Functional transport features provide functionality that cannot be | ||||
used without the application knowing about them, or else they violate | ||||
assumptions that might cause the application to fail. For example, | ||||
ordered message delivery is a functional transport feature: it cannot be | ||||
configured without the application knowing about it because the | ||||
application's assumption could be that messages always arrive in | ||||
order. Failure includes any change of the application behavior that is | ||||
not performance oriented, e.g., security. | ||||
</t> | ||||
<t>"Change DSCP" and "Disable Nagle algorithm" are examples of transport | ||||
features that we call "Optimizing"; if a transport system autonomously | ||||
decides to enable or disable them, an application will not fail, but a | ||||
transport system may be able to communicate more efficiently if the | ||||
application is in control of this optimizing transport feature. These | ||||
transport features require application-specific knowledge (e.g., about | ||||
delay/bandwidth requirements or the length of future data blocks that | ||||
are to be transmitted). | ||||
</t> | ||||
<t> | ||||
The transport features of IETF transport protocols that do not | ||||
require application-specific knowledge and could therefore be | ||||
utilized by a transport system on its own without involving | ||||
the application are called "Automatable". | ||||
</t> | ||||
<t>We approach the construction of a minimal set of transport features | ||||
in the following way: | ||||
</t> | ||||
<ol type="1"> | ||||
<li>Categorization (<xref target="super" format="default"/>): The | ||||
superset of transport features from <xref target="RFC8303" | ||||
format="default"/> is presented, and transport features are | ||||
categorized as Functional, Optimizing, or Automatable for later | ||||
reduction.</li> | ||||
<li>Reduction (<xref target="Reduction" format="default"/>): A shorter | ||||
list of transport features is derived from the categorization in the | ||||
first step. This removes all transport features that do not require | ||||
application-specific knowledge or would result in semantically | ||||
incorrect behavior if they were implemented over TCP or UDP.</li> | ||||
<li>Discussion (<xref target="Discussion" format="default"/>): The | ||||
resulting list shows a number of peculiarities that are discussed, to | ||||
provide a basis for constructing the minimal set.</li> | ||||
<li>Construction (<xref target="minset" format="default"/>): Based on | ||||
the reduced set and the discussion of the transport features therein, | ||||
a minimal set is constructed.</li> | ||||
</ol> | ||||
<t>Following <xref target="RFC8303" format="default"/> and retaining its | ||||
terminology, we divide the transport features into two main groups as | ||||
follows: | ||||
</t> | ||||
<ol type="1"> | ||||
<li> | ||||
<t>CONNECTION-related transport features</t> | ||||
<ul spacing="compact"> | ||||
<li>ESTABLISHMENT</li> | ||||
<li>AVAILABILITY</li> | ||||
<li>MAINTENANCE</li> | ||||
<li>TERMINATION</li> | ||||
</ul> | ||||
</li> | ||||
<li> | ||||
<t>DATA-Transfer-related transport features</t> | ||||
<ul spacing="compact"> | ||||
<li>Sending Data</li> | ||||
<li>Receiving Data</li> | ||||
<li>Errors</li> | ||||
</ul> | ||||
</li> | ||||
</ol> | ||||
</section> | ||||
<section anchor="Reduction" numbered="true" toc="default"> | ||||
<name>The Reduced Set of Transport Features</name> | ||||
<t>By hiding automatable transport features from the application, a transp | ||||
ort system can | ||||
gain opportunities to automate the usage of network-related func tionality. This can facilitate | gain opportunities to automate the usage of network-related func tionality. This can facilitate | |||
using the transport system | using the transport system | |||
for the application programmer and it allows for optimizations t hat may not be possible | for the application programmer and it allows for optimizations t hat may not be possible | |||
for an application. For instance, system-wide configurations | for an application. For instance, system-wide configurations | |||
regarding the usage of multiple interfaces can better be exploit ed if the choice of the | regarding the usage of multiple interfaces can better be exploit ed if the choice of the | |||
interface is not entirely up to the application. Therefore, sinc e they are not strictly | interface is not entirely up to the application. Therefore, sinc e they are not strictly | |||
necessary to expose in a transport system, | necessary to expose in a transport system, | |||
we do not include automatable transport features in the reduced set of transport | we do not include automatable transport features in the reduced set of transport | |||
features. This leaves us with only the transport features that | features. This leaves us with only the transport features that | |||
are either optimizing or functional. | are either optimizing or functional. | |||
</t> | </t> | |||
<t>A transport system should be able to communicate via TCP or UDP i | <t>A transport system should be able to communicate via TCP or UDP if | |||
f alternative transport protocols | alternative transport protocols are found not to work. For many | |||
are found not to work. For many transport features, this is poss | transport features, this is possible, often by simply not doing | |||
ible -- often by simply | anything when a specific request is made. For some transport features, | |||
not doing anything when a specific request is made. | however, it was identified that direct usage of neither TCP nor UDP is | |||
For some transport features, however, it was identified that dir | possible; in these cases, even not doing anything would incur | |||
ect usage of neither | semantically incorrect behavior. Whenever an application would make use | |||
TCP nor UDP is possible: in these cases, even not doing anything | of one of these transport features, this would eliminate the possibility | |||
would incur semantically | to use TCP or UDP. Thus, we only keep the functional and optimizing | |||
incorrect behavior. | transport features for which an implementation over either TCP or UDP is | |||
Whenever an application would make use of one of these transport | possible in our reduced set. | |||
features, this would eliminate the | </t> | |||
possibility to use TCP or UDP. Thus, we only keep the functional | <t>The following list contains the transport features from <xref | |||
and optimizing transport features | target="super" format="default"/>, reduced using these rules. The | |||
for which an implementation over either TCP or UDP is possible i | "minimal set" derived in this document is meant to be implementable | |||
n our reduced set. | "one-sided" over TCP and, with limitations, UDP. In the list, we | |||
</t> | therefore precede a transport feature with "T:" if an implementation | |||
<t>The following list contains the transport features from <xref tar | over TCP is possible, "U:" if an implementation over UDP is possible, | |||
get="super"/>, reduced | and "T,U:" if an implementation over either TCP or UDP is possible. | |||
using these rules. The "minimal set" derived in this document is | </t> | |||
meant to be implementable "one-sided" | <section anchor="conn-reduced" numbered="true" toc="default"> | |||
over TCP, and, with limitations, UDP. In the list, we therefore | <name>CONNECTION-Related Transport Features</name> | |||
precede a transport | <t>ESTABLISHMENT: | |||
feature with "T:" if an implementation over TCP | </t> | |||
is possible, "U:" if an implementation over UDP is possible, and | <ul spacing="compact"> | |||
"T,U:" if an implementation | <li>T,U: Connect</li> | |||
over either TCP or UDP is possible. | <li>T,U: Specify number of attempts and/or timeout for the first estab | |||
</t> | lishment message</li> | |||
<li>T,U: Disable MPTCP</li> | ||||
<section anchor="conn-reduced" title="CONNECTION Related Transport F | <li>T: Configure authentication</li> | |||
eatures"> | <li>T: Hand over a message to reliably transfer (possibly multiple | |||
times) before connection establishment</li> | ||||
<t>ESTABLISHMENT:<vspace /> | <li>T: Hand over a message to reliably transfer during connection esta | |||
blishment</li> | ||||
<list style="symbols"> | </ul> | |||
<t>T,U: Connect</t> | ||||
<t>T,U: Specify number of attempts and/or timeout for th | ||||
e first establishment message</t> | ||||
<t>T,U: Disable MPTCP</t> | ||||
<t>T: Configure authentication</t> | ||||
<t>T: Hand over a message to reliably transfer (possibly | ||||
multiple times) before connection establishment</t> | ||||
<t>T: Hand over a message to reliably transfer during co | ||||
nnection establishment</t> | ||||
</list></t> | ||||
<t>AVAILABILITY:<vspace /> | ||||
<list style="symbols"> | ||||
<t>T,U: Listen</t> | ||||
<t>T,U: Disable MPTCP</t> | ||||
<t>T: Configure authentication</t> | ||||
</list></t> | ||||
<t>MAINTENANCE:<vspace /> | ||||
<list style="symbols"> | ||||
<t>T: Change timeout for aborting connection (using retr | ||||
ansmit limit or time value)</t> | ||||
<t>T: Suggest timeout to the peer</t> | ||||
<t>T,U: Disable Nagle algorithm</t> | ||||
<t>T,U: Notification of Excessive Retransmissions (early | ||||
warning below abortion threshold)</t> | ||||
<t>T,U: Specify DSCP field</t> | ||||
<t>T,U: Notification of ICMP error message arrival</t> | ||||
<t>T: Change authentication parameters</t> | ||||
<t>T: Obtain authentication information</t> | ||||
<t>T,U: Set Cookie life value</t> | ||||
<t>T,U: Choose a scheduler to operate between streams of | ||||
an association</t> | ||||
<t>T,U: Configure priority or weight for a scheduler</t> | ||||
<t>T,U: Disable checksum when sending</t> | ||||
<t>T,U: Disable checksum requirement when receiving</t> | ||||
<t>T,U: Specify checksum coverage used by the sender</t> | ||||
<t>T,U: Specify minimum checksum coverage required by re | ||||
ceiver</t> | ||||
<t>T,U: Specify DF field</t> | ||||
<t>T,U: Get max. transport-message size that may be sent | ||||
using a non-fragmented IP packet from the configured interface</t> | ||||
<t>T,U: Get max. transport-message size that may be rece | ||||
ived from the configured interface</t> | ||||
<t>T,U: Obtain ECN field</t> | ||||
<t>T,U: Enable and configure a "Low Extra Delay Backgrou | ||||
nd Transfer"</t> | ||||
</list></t> | ||||
<t>TERMINATION:<vspace /> | ||||
<list style="symbols"> | ||||
<t>T: Close after reliably delivering all remaining data | ||||
, causing an event informing the application on the other side</t> | ||||
<t>T: Abort without delivering remaining data, causing a | ||||
n event informing the application on the other side</t> | ||||
<t>T,U: Abort without delivering remaining data, not cau | ||||
sing an event informing the application on the other side</t> | ||||
<t>T,U: Timeout event when data could not be delivered f | ||||
or too long</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="data-reduced" title="DATA Transfer Related Transpor | ||||
t Features"> | ||||
<section anchor="data-sending-reduced" title="Sending Data"> | ||||
<t><list style="symbols"> | ||||
<t>T: Reliably transfer data, with congestion control</t | ||||
> | ||||
<t>T: Reliably transfer a message, with congestion contr | ||||
ol</t> | ||||
<t>T,U: Unreliably transfer a message</t> | ||||
<t>T: Configurable Message Reliability</t> | ||||
<t>T: Ordered message delivery (potentially slower than | ||||
unordered)</t> | ||||
<t>T,U: Unordered message delivery (potentially faster t | ||||
han ordered)</t> | ||||
<t>T,U: Request not to bundle messages</t> | ||||
<t>T: Specifying a key id to be used to authenticate a m | ||||
essage</t> | ||||
<t>T,U: Request not to delay the acknowledgement (SACK) | ||||
of a message</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="data-receiving-reduced" title="Receiving Data"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>T,U: Receive data (with no message delimiting)</t | ||||
> | ||||
<t>U: Receive a message</t> | ||||
<t>T,U: Information about partial message arrival</t | ||||
> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section anchor="data-errors-reduced" title="Errors"> | <t>AVAILABILITY: | |||
<t>This section describes sending failures that are associat | </t> | |||
ed with a | <ul spacing="compact"> | |||
specific call to in the "Sending Data" category (<xref t | <li>T,U: Listen</li> | |||
arget="data-sending-pass3"/>).</t> | <li>T,U: Disable MPTCP</li> | |||
<t> | <li>T: Configure authentication</li> | |||
<list style="symbols"> | </ul> | |||
<t>T,U: Notification of send failures</t> | ||||
<t>T,U: Notification that the stack has no more user | ||||
data to send</t> | ||||
<t>T,U: Notification to a receiver that a partial me | ||||
ssage delivery has been aborted</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
</section> | <t>MAINTENANCE: | |||
</t> | ||||
<ul spacing="compact"> | ||||
<li>T: Change timeout for aborting connection (using retransmit limit | ||||
or time value)</li> | ||||
<li>T: Suggest timeout to the peer</li> | ||||
<li>T,U: Disable Nagle algorithm</li> | ||||
<li>T,U: Notification of Excessive Retransmissions (early warning belo | ||||
w abortion threshold)</li> | ||||
<li>T,U: Specify DSCP field</li> | ||||
<li>T,U: Notification of ICMP error message arrival</li> | ||||
<li>T: Change authentication parameters</li> | ||||
<li>T: Obtain authentication information</li> | ||||
<li>T,U: Set Cookie life value</li> | ||||
<li>T,U: Choose a scheduler to operate between streams of an associati | ||||
on</li> | ||||
<li>T,U: Configure priority or weight for a scheduler</li> | ||||
<li>T,U: Disable checksum when sending</li> | ||||
<li>T,U: Disable checksum requirement when receiving</li> | ||||
<li>T,U: Specify checksum coverage used by the sender</li> | ||||
<li>T,U: Specify minimum checksum coverage required by receiver</li> | ||||
<li>T,U: Specify DF field</li> | ||||
<li>T,U: Get max. transport-message size that may be sent using a non- | ||||
fragmented IP packet from the configured interface</li> | ||||
<li>T,U: Get max. transport-message size that may be received from the | ||||
configured interface</li> | ||||
<li>T,U: Obtain ECN field</li> | ||||
<li>T,U: Enable and configure a "Low Extra Delay Background Transfer"< | ||||
/li> | ||||
</ul> | ||||
<t>TERMINATION: | ||||
</t> | ||||
<ul spacing="compact"> | ||||
<li>T: Close after reliably delivering all remaining data, causing | ||||
an event informing the application on the other side</li> | ||||
<li>T: Abort without delivering remaining data, causing an event | ||||
informing the application on the other side</li> | ||||
<li>T,U: Abort without delivering remaining data, not causing an | ||||
event informing the application on the other side</li> | ||||
<li>T,U: Timeout event when data could not be delivered for too long</ | ||||
li> | ||||
</ul> | ||||
</section> | ||||
<section anchor="data-reduced" numbered="true" toc="default"> | ||||
<name>DATA-Transfer-Related Transport Features</name> | ||||
<section anchor="data-sending-reduced" numbered="true" toc="default"> | ||||
<name>Sending Data</name> | ||||
<ul spacing="compact"> | ||||
<li>T: Reliably transfer data, with congestion control</li> | ||||
<li>T: Reliably transfer a message, with congestion control</li> | ||||
<li>T,U: Unreliably transfer a message</li> | ||||
<li>T: Configurable Message Reliability</li> | ||||
<li>T: Ordered message delivery (potentially slower than unordered)< | ||||
/li> | ||||
<li>T,U: Unordered message delivery (potentially faster than ordered | ||||
)</li> | ||||
<li>T,U: Request not to bundle messages</li> | ||||
<li>T: Specifying a key id to be used to authenticate a message</li> | ||||
<li>T,U: Request not to delay the acknowledgement (SACK) of a messag | ||||
e</li> | ||||
</ul> | ||||
</section> | </section> | |||
<section anchor="data-receiving-reduced" numbered="true" toc="default"> | ||||
<name>Receiving Data</name> | ||||
<ul spacing="compact"> | ||||
<li>T,U: Receive data (with no message delimiting)</li> | ||||
<li>U: Receive a message</li> | ||||
<li>T,U: Information about partial message arrival</li> | ||||
</ul> | ||||
</section> | ||||
<section anchor="data-errors-reduced" numbered="true" toc="default"> | ||||
<name>Errors</name> | ||||
<t>This section describes sending failures that are associated with | ||||
a specific call to in the "Sending Data" category (<xref | ||||
target="data-sending-pass3" format="default"/>).</t> | ||||
<ul spacing="compact"> | ||||
<li>T,U: Notification of send failures</li> | ||||
<li>T,U: Notification that the stack has no more user data to send</ | ||||
li> | ||||
<li>T,U: Notification to a receiver that a partial message delivery | ||||
has been aborted</li> | ||||
</ul> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section anchor="Discussion" title="Discussion"> | <section anchor="Discussion" numbered="true" toc="default"> | |||
<name>Discussion</name> | ||||
<t>The reduced set in the previous section exhibits a number of pecu | <t>The reduced set in the previous section exhibits a number of | |||
liarities, | peculiarities, which we will discuss in the following. This section | |||
which we will discuss in the following. This section focuses on | focuses on TCP because, with the exception of one particular transport | |||
TCP because, | feature ("Receive a message"; we will discuss this in <xref | |||
with the exception of one particular transport feature ("Receive | target="sendmsg" format="default"/>), the list shows that UDP is | |||
a message" -- | strictly a subset of TCP. We can first try to understand how to build a | |||
we will discuss this in <xref target="sendmsg"/>), the list show | transport system that can run over TCP, and then narrow down the result | |||
s that UDP is | further to allow that the system can always run over either TCP or UDP | |||
strictly a subset of TCP. We can | (which effectively means removing everything related to reliability, | |||
first try to understand how to build a transport system that can | ordering, authentication, and closing/aborting with a notification to the | |||
run over | peer). | |||
TCP, and then narrow down the result further to allow that the s | </t> | |||
ystem can always | <t>Note that, because the functional transport features of UDP are, with | |||
run over either TCP or UDP (which effectively means removing | the exception of "Receive a message", a subset of TCP, TCP can be used | |||
everything related to reliability, ordering, authentication and | as a replacement for UDP whenever an application does not need message | |||
closing/aborting | delimiting (e.g., because the application-layer protocol already does | |||
with a notification to the peer). | it). This has been recognized by many applications that already do this | |||
</t> | in practice, by trying to communicate with UDP at first and falling | |||
<t>Note that, because the functional transport features of UDP are - | back to TCP in case of a connection failure. | |||
- with the | </t> | |||
exception of "Receive a message" -- a subset of | <section anchor="sendmsg" numbered="true" toc="default"> | |||
TCP, TCP can be used as a replacement for UDP whenever an applic | <name>Sending Messages, Receiving Bytes</name> | |||
ation does not need | <t>For implementing a transport system over TCP, there are several | |||
message delimiting (e.g., because the application-layer protocol | transport features related to sending, but only a single transport | |||
already does it). | feature related to receiving: "Receive data (with no message | |||
This has been recognized by many applications that already do th | delimiting)" (and, strangely, "information about partial message | |||
is in practice, | arrival"). Notably, the transport feature "Receive a message" is also | |||
by trying to communicate with UDP at first, and falling back to | the only non-automatable transport feature of UDP(-Lite) for which no | |||
TCP in case of a | implementation over TCP is possible.</t> | |||
connection failure. | ||||
</t> | ||||
<section anchor="sendmsg" title="Sending Messages, Receiving Bytes"> | ||||
<t>For implementing a transport system over TCP, there are sever | ||||
al transport features related to | ||||
sending, but only a single transport feature | ||||
related to receiving: "Receive data (with no message delimit | ||||
ing)" (and, strangely, "information about | ||||
partial message arrival"). Notably, the transport feature | ||||
"Receive a message" is also the only non-automatable transpo | ||||
rt feature of UDP(-Lite) for | ||||
which no implementation over TCP is possible.</t> | ||||
<!-- FROM MICHAEL: this is true, but not helping the explanation | ||||
. | ||||
It is also represents the only way | ||||
that UDP(-Lite) applications can receive data today.</t> | ||||
--> | ||||
<t>To support these TCP receiver semantics, we define an "Applic | ||||
ation-Framed Bytestream" (AFra-Bytestream). | ||||
AFra-Bytestreams allow senders to operate on messages while | ||||
minimizing changes to the TCP socket API. In particular, not | ||||
hing changes on the receiver side - data can be accepted via a normal TCP socket | ||||
. | ||||
</t> | ||||
<t>In an AFra-Bytestream, the sending application can optionally | ||||
inform the transport about message | ||||
boundaries and required properties per message (configurable | ||||
order and reliability, or embedding | ||||
a request not to delay the acknowledgement of a message). Wh | ||||
enever the sending application | ||||
specifies per-message properties that relax the notion of re | ||||
liable in-order delivery of bytes, | ||||
it must assume that the receiving application is 1) able to | ||||
determine message boundaries, provided | ||||
that messages are always kept intact, and 2) able to accept | ||||
these relaxed per-message properties. | ||||
Any signaling of such information to the peer is up to an ap | ||||
plication-layer protocol | ||||
and considered out of scope of this document. | ||||
</t> | ||||
<!-- <t>For the transport to operate on messages, | ||||
it only needs be informed about them as they are handed | ||||
over by a sending application; on the receiver side, giving an | ||||
application a message only differs from | ||||
giving it a bytestream in that a message-oriented receiver-side | ||||
transport informs the application | ||||
about message boundaries. When the application knows about thes | ||||
e boundaries on its own, this | ||||
information is unnecessary.</t> | ||||
--> | ||||
<t>For example, if an application requests to transfer fixed-siz | ||||
e messages | ||||
of 100 bytes with partial reliability, this needs the receiv | ||||
ing application to be prepared to accept data | ||||
in chunks of 100 bytes. If, then, some of these 100-byte mes | ||||
sages are missing (e.g., if SCTP with | ||||
Configurable Reliability is used), this is the expected appl | ||||
ication behavior. With TCP, no messages | ||||
would be missing, but this is also correct for the applicati | ||||
on, and the possible retransmission delay is | ||||
acceptable within the best-effort service model (see <xref t | ||||
arget="RFC7305"/>, Section 3.5). Still, the receiving | ||||
application would separate the byte stream into 100-byte chu | ||||
nks. | ||||
</t> | ||||
<t>Note that this usage of messages does not require all message | ||||
s to be equal in size. | ||||
Many application protocols use some form of Type-Length-Valu | ||||
e (TLV) encoding, e.g. by defining a header including | ||||
length fields; another alternative is | ||||
the use of byte stuffing methods such as COBS <xref target=" | ||||
COBS"/>. If an application needs | ||||
message numbers, e.g. to restore the correct sequence of mes | ||||
sages, these must also be encoded | ||||
by the application itself, as the sequence number related tr | ||||
ansport features of SCTP | ||||
are not provided by the "minimum set" (in the interest of en | ||||
abling usage of TCP). | ||||
</t> | ||||
</section> | ||||
<section anchor="nostream" title="Stream Schedulers Without Streams" | <t>To support these TCP receiver semantics, we define an | |||
> | "Application-Framed Byte Stream" (AFra Byte Stream). | |||
<t>We have already stated that multi-streaming does not require | AFra Byte Streams allow senders to operate on messages while | |||
application-specific knowledge. | minimizing changes to the TCP socket API. In particular, | |||
nothing changes on the receiver side; data can be accepted | ||||
via a normal TCP socket. | ||||
</t> | ||||
<t>In an AFra Byte Stream, the sending application can optionally | ||||
inform the transport about message boundaries and required properties | ||||
per message (configurable order and reliability, or embedding a | ||||
request not to delay the acknowledgement of a message). Whenever the | ||||
sending application specifies per-message properties that relax the | ||||
notion of reliable in-order delivery of bytes, it must assume that the | ||||
receiving application is 1) able to determine message boundaries, | ||||
provided that messages are always kept intact, and 2) able to accept | ||||
these relaxed per-message properties. Any signaling of such | ||||
information to the peer is up to an application-layer protocol and | ||||
considered out of scope of this document. | ||||
</t> | ||||
<t>For example, if an application requests to transfer | ||||
fixed-size messages of 100 bytes with partial reliability, | ||||
this needs the receiving application to be prepared to accept | ||||
data in chunks of 100 bytes. Then, if some of these 100-byte | ||||
messages are missing (e.g., if SCTP with Configurable | ||||
Reliability is used), this is the expected application | ||||
behavior. With TCP, no messages would be missing, but this is | ||||
also correct for the application, and the possible | ||||
retransmission delay is acceptable within the best-effort | ||||
service model (see <xref target="RFC7305" sectionFormat="of" | ||||
section="3.5"/>). Still, the receiving application would | ||||
separate the byte stream into 100-byte chunks. | ||||
</t> | ||||
<t>Note that this usage of messages does not require all messages to | ||||
be equal in size. Many application protocols use some form of | ||||
Type-Length-Value (TLV) encoding, e.g., by defining a header including | ||||
length fields; another alternative is the use of byte stuffing methods | ||||
such as Consistent Overhead Byte Stuffing (COBS) <xref target="COBS" for | ||||
mat="default"/>. If an application | ||||
needs message numbers, e.g., to restore the correct sequence of | ||||
messages, these must also be encoded by the application itself, as SCTP' | ||||
s | ||||
transport features that are related to the sequence number are not provi | ||||
ded by | ||||
the "minimum set" (in the interest of enabling usage of TCP). | ||||
</t> | ||||
</section> | ||||
<section anchor="nostream" numbered="true" toc="default"> | ||||
<name>Stream Schedulers without Streams</name> | ||||
<t>We have already stated that multi-streaming does not require applicat | ||||
ion-specific knowledge. | ||||
Potential benefits or disadvantages of, e.g., using two stre ams of an SCTP association | Potential benefits or disadvantages of, e.g., using two stre ams of an SCTP association | |||
versus using two separate SCTP associations or TCP connectio ns are related to knowledge | versus using two separate SCTP associations or TCP connectio ns are related to knowledge | |||
about the network and the particular transport protocol in u se, not the application. | about the network and the particular transport protocol in u se, not the application. | |||
However, the transport features "Choose a scheduler to opera te between streams of | However, the transport features "Choose a scheduler to opera te between streams of | |||
an association" and "Configure priority or weight for a sche duler" operate on streams. | an association" and "Configure priority or weight for a sche duler" operate on streams. | |||
Here, streams identify communication channels between which a scheduler operates, and | Here, streams identify communication channels between which a scheduler operates, and | |||
they can be assigned a priority. Moreover, the transport fea tures in the MAINTENANCE | they can be assigned a priority. Moreover, the transport fea tures in the MAINTENANCE | |||
category all operate on assocations in case of SCTP, i.e. th | category all operate on associations in case of SCTP, i.e., | |||
ey apply to all streams in | they apply to all streams in | |||
that assocation. | that association. | |||
</t> | </t> | |||
<t>With only these semantics necessary to represent, the interfa | <t>With only these semantics necessary to represent, the interface to | |||
ce to a transport system becomes | a transport system becomes easier if we assume that connections may be | |||
easier if we assume that connections may be not only a trans | not only a transport protocol's connection or association, but could | |||
port protocol's connection or association, | also be a stream of an existing SCTP association, for example. We only | |||
but could also be a stream of an existing SCTP association, | need to allow for a way to define a possible grouping of | |||
for example. We only need to | connections. Then, all MAINTENANCE transport features can be said to | |||
allow for a way to define a possible grouping of connections | operate on connection groups, not connections, and a scheduler | |||
. Then, all | operates on the connections within a group. | |||
MAINTENANCE transport features can be said to operate | </t> | |||
on connection groups, not connections, and a scheduler opera | <t>To be compatible with multiple transport protocols and uniformly | |||
tes on | allow access to both transport connections and streams of a | |||
the connections within a group. | multi-streaming protocol, the semantics of opening and closing need to | |||
</t> | be the most restrictive subset of all of the underlying options. For | |||
example, TCP's support of half-closed connections can be seen as a | ||||
<t>To be compatible with multiple transport protocols and unifor | feature on top of the more restrictive "ABORT"; this feature cannot be | |||
mly allow access to both transport connections | supported because not all protocols used by a transport system | |||
and streams of a multi-streaming protocol, the semantics of | (including streams of an association) support half-closed connections. | |||
opening and closing need to be | </t> | |||
the most restrictive subset of all of the underlying options | </section> | |||
. For example, TCP's support of half-closed connections | <section anchor="earlydata" numbered="true" toc="default"> | |||
can be seen as a feature on top of the more restrictive "ABO | <name>Early Data Transmission</name> | |||
RT"; this feature cannot be supported | <t>There are two transport features related to transferring a message | |||
because not all protocols used by a transport system (includ | early: "Hand over a message to reliably transfer (possibly multiple | |||
ing streams of an association) | times) before connection establishment", which relates to TCP Fast | |||
support half-closed connections. | Open <xref target="RFC7413" format="default"/>, and "Hand over a | |||
</t> | message to reliably transfer during connection establishment", which | |||
relates to SCTP's ability to transfer data together with the | ||||
</section> | COOKIE-Echo chunk. Also without TCP Fast Open, TCP can transfer data | |||
during the handshake, together with the SYN packet; however, the | ||||
<section anchor="earlydata" title="Early Data Transmission"> | receiver of this data may not hand it over to the application until | |||
<t>There are two transport features related to transferring a me | the handshake has completed. Also, different from TCP Fast Open, this | |||
ssage early: "Hand over a message to reliably transfer | data is not delimited as a message by TCP (thus, not visible as a | |||
(possibly multiple times) before connection establishment", | "message"). This functionality is commonly available in TCP and | |||
which relates to TCP Fast Open <xref target="RFC7413"/>, and | supported in several implementations, even though the TCP | |||
"Hand over a message to reliably transfer during connection | specification does not explain how to provide it to applications. | |||
establishment", which relates to SCTP's ability | </t> | |||
to transfer data together with the COOKIE-Echo chunk. Also w | <t>A transport system could differentiate between the cases of | |||
ithout TCP Fast Open, TCP can transfer data during | transmitting data "before" (possibly multiple times) or "during" the | |||
the handshake, together with the SYN packet -- however, the | handshake. Alternatively, it could also assume that data that are | |||
receiver of this data may not hand it over to the | handed over early will be transmitted as early as possible, and | |||
application until the handshake has completed. Also, differe | "before" the handshake would only be used for messages that are | |||
nt from TCP Fast Open, this data is | explicitly marked as "idempotent" (i.e., it would be acceptable to | |||
not delimited as a message by TCP (thus, not visible as a `` | transfer them multiple times). | |||
message''). | </t> | |||
This functionality is commonly available in TCP and supporte | <t>The amount of data that can successfully be transmitted before or | |||
d | during the handshake depends on various factors: the transport | |||
in several implementations, even though the TCP specificatio | protocol, the use of header options, the choice of IPv4 and IPv6, and | |||
n does not explain how to provide it to applications. | the Path MTU. A transport system should therefore allow a sending | |||
</t> | application to query the maximum amount of data it can possibly | |||
<t>A transport system could differentiate between the cases of t | transmit before (or, if exposed, during) connection establishment. | |||
ransmitting data "before" (possibly multiple times) or | </t> | |||
"during" the handshake. Alternatively, it could also assume | </section> | |||
that data that are handed over early will be transmitted | <section anchor="rundry" numbered="true" toc="default"> | |||
as early as possible, and "before" the handshake would only | <name>Sender Running Dry</name> | |||
be used for messages that are explicitly marked as "idempotent" (i.e., it would | <t>The transport feature "Notification that the stack has no more user | |||
be acceptable to transfer them multiple times). | data to send" relates to SCTP's "SENDER DRY" notification. Such | |||
</t> | notifications can, in principle, be used to avoid having an | |||
<t>The amount of data that can successfully be transmitted befor | unnecessarily large send buffer, yet ensure that the transport sender | |||
e or during the handshake depends on various factors: | always has data available when it has an opportunity to transmit it. | |||
the transport protocol, the use of header options, the choic | This has been found to be very beneficial for some applications <xref | |||
e of IPv4 and IPv6 and the Path MTU. A transport system | target="WWDC2015" format="default"/>. However, "SENDER DRY" truly | |||
should therefore allow a sending application to query the ma | means that the entire send buffer (including both unsent and | |||
ximum amount of data it can possibly transmit before (or, | unacknowledged data) has emptied, i.e., when it notifies the sender, | |||
if exposed, during) connection establishment. | it is already too late; the transport protocol already missed an | |||
</t> | opportunity to send data. Some modern TCP implementations now include | |||
</section> | the unspecified "TCP_NOTSENT_LOWAT" socket option that was proposed in | |||
<xref target="WWDC2015" format="default"/>, which limits the amount of | ||||
<section anchor="rundry" title="Sender Running Dry"> | unsent data that TCP can keep in the socket buffer; this allows | |||
<t>The transport feature "Notification that the stack has no mor | specifying at which buffer filling level the socket becomes writable, | |||
e user data to send" relates to SCTP's "SENDER DRY" | rather than waiting for the buffer to run empty. | |||
notification. Such notifications can, in principle, be used | </t> | |||
to avoid having an unnecessarily large send buffer, | <t>SCTP allows configuring the sender-side buffer too; the | |||
yet ensure that the transport sender always has data availab | automatable Transport Feature "Configure send buffer size" provides | |||
le when it has an opportunity to transmit it. | this functionality, but only for the complete buffer, which includes | |||
This has been found to be very beneficial for some applicati | both unsent and unacknowledged data. SCTP does not allow to control | |||
ons <xref target="WWDC2015"/>. However, "SENDER DRY" | these two sizes separately. It therefore makes sense for a transport | |||
truly means that the entire send buffer (including both unse | system to allow for uniform access to "TCP_NOTSENT_LOWAT" as well as | |||
nt and unacknowledged data) has | the "SENDER DRY" notification. | |||
emptied -- i.e., when it notifies the sender, it is already | </t> | |||
too late, the | </section> | |||
transport protocol already missed an opportunity to send dat | <section anchor="profile" numbered="true" toc="default"> | |||
a. Some modern TCP implementations now include | <name>Capacity Profile</name> | |||
the unspecified "TCP_NOTSENT_LOWAT" socket option that was p | <t>The transport features: | |||
roposed in <xref target="WWDC2015"/>, which limits the amount of | </t> | |||
unsent data that TCP can keep in the socket buffer; this all | <ul spacing="compact"> | |||
ows to specify at which buffer filling level the socket | <li>Disable Nagle algorithm</li> | |||
becomes writable, rather than waiting for the buffer to run | <li>Enable and configure a "Low Extra Delay Background Transfer"</li> | |||
empty. | <li>Specify DSCP field</li> | |||
</t> | </ul> | |||
<t>SCTP allows to configure the sender-side buffer too: the auto | <t> | |||
matable Transport Feature "Configure send buffer size" | All relate to a QoS-like application need such as "low | |||
provides this functionality, but only for the complete buffe | latency" or "scavenger". In the interest of flexibility of | |||
r, which includes both unsent and unacknowledged | a transport system, they could therefore be offered in a | |||
data. SCTP does not allow to control these two sizes separat | uniform, more abstract way, where a transport system | |||
ely. It therefore makes sense for | could, e.g., decide by itself how to use combinations of | |||
a transport system to allow for uniform access to "TCP_NOTSE | LEDBAT-like congestion control and certain DSCP values, | |||
NT_LOWAT" as well as the "SENDER DRY" notification. | and an application would only specify a general "capacity | |||
</t> | profile" (a description of how it wants to use the | |||
</section> | available capacity). A need for "lowest possible latency | |||
at the expense of overhead" could then translate into | ||||
<section anchor="profile" title="Capacity Profile"> | automatically disabling the Nagle algorithm. | |||
<t>The transport features: | </t> | |||
<list style="symbols"> | <t>In some cases, the Nagle algorithm is best controlled directly by | |||
<t>Disable Nagle algorithm</t> | the application because it is not only related to a general profile | |||
<t>Enable and configure a "Low Extra Delay Background Tr | but also to knowledge about the size of future messages. For | |||
ansfer"</t> | fine-grain control over Nagle-like functionality, the "Request not to | |||
<t>Specify DSCP field</t> | bundle messages" is available. | |||
</list> | </t> | |||
all relate to a QoS-like application need such as "low laten | </section> | |||
cy" or "scavenger". In the interest | <section anchor="security" numbered="true" toc="default"> | |||
of flexibility of a transport system, they could therefore b | <name>Security</name> | |||
e offered in a uniform, more abstract way, | <t>Both TCP and SCTP offer authentication. TCP authenticates complete | |||
where a transport system could e.g. decide by itself how to | segments. SCTP allows configuring which of SCTP's chunk types must | |||
use combinations of LEDBAT-like congestion control | always be authenticated; if this is exposed as such, it creates an | |||
and certain DSCP values, and an application would only speci | undesirable dependency on the transport protocol. For compatibility | |||
fy a general "capacity profile" (a description | with TCP, a transport system should only allow to configure complete | |||
of how it wants to use the available capacity). | transport layer packets, including headers, IP pseudo-header (if any) | |||
A need for "lowest possible latency at the expense of overhe | and payload. | |||
ad" could then translate into automatically | </t> | |||
disabling the Nagle algorithm. | <t>Security is discussed in a separate document <xref target="RFC8922" | |||
</t> | format="default"/>. The minimal set presented in the present document | |||
<t>In some cases, the Nagle algorithm is best controlled directl | excludes all security-related transport features from <xref | |||
y by the application because it is not | target="super" format="default"/>: "Configure authentication", "Change | |||
only related to a general profile but also to knowledge abou | authentication parameters", "Obtain authentication information", and | |||
t the size of future messages. | "Set Cookie life value", as well as "Specifying a key id to be used to | |||
For fine-grain control over Nagle-like functionality, the "R | authenticate a message". It also excludes security transport features | |||
equest not to bundle messages" | not listed in <xref target="super" format="default"/>, including | |||
is available. | content privacy to in-path devices. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="packetsize" numbered="true" toc="default"> | ||||
<section anchor="security" title="Security"> | <name>Packet Size</name> | |||
<t>Both TCP and SCTP offer authentication. TCP authenticates com | <t>UDP(-Lite) has a transport feature called "Specify DF field". This | |||
plete segments. | yields an error message in the case of sending a message that exceeds th | |||
SCTP allows to configure which of SCTP's chunk types | e | |||
must always be authenticated -- if this is exposed as such, | Path MTU, which is necessary for a UDP-based application to be able to | |||
it creates an undesirable dependency | implement Path MTU Discovery (a function that UDP-based applications | |||
on the transport protocol. For compatibility with TCP, a tra | must do by themselves). The "Get max. transport-message size that may | |||
nsport system should only allow to configure | be sent using a non-fragmented IP packet from the configured | |||
complete transport layer packets, including headers, IP pseu | interface" transport feature yields an upper limit for the Path MTU | |||
do-header (if any) and payload. | (minus headers) and can therefore help to implement Path MTU Discovery | |||
</t> | more efficiently.</t> | |||
<t>Security is discussed in a separate document <xref target="I- | ||||
D.ietf-taps-transport-security"/>. | ||||
The minimal set presented in the present document excludes a | ||||
ll security related transport | ||||
features from <xref target="super"/>: "Configure authenticat | ||||
ion", | ||||
"Change authentication parameters", "Obtain authentication i | ||||
nformation" | ||||
and "Set Cookie life value" as well as "Specifying a key id | ||||
to be used to authenticate a message". | ||||
It also excludes security transport features | ||||
not listed in <xref target="super"/>, including content priv | ||||
acy to in-path devices. | ||||
</t> | ||||
</section> | ||||
<section anchor="packetsize" title="Packet Size"> | ||||
<t>UDP(-Lite) has a transport feature called "Specify DF field". | ||||
This yields an error message in case | ||||
of sending a message that exceeds the Path MTU, which is nec | ||||
essary for a UDP-based application to | ||||
be able to implement Path MTU Discovery (a function that UDP | ||||
-based applications must do by themselves). | ||||
The "Get max. transport-message size that may be sent using | ||||
a non-fragmented IP packet from the | ||||
configured interface" transport feature yields an upper limi | ||||
t for the Path MTU (minus headers) and | ||||
can therefore help to implement Path MTU Discovery more effi | ||||
ciently.</t> | ||||
<!-- <t>This also relates to the fact that th | ||||
e choice of path is automatable: if a TAPS system can switch | ||||
a path at any time, unknown to an application, yet the applicat | ||||
ion intends to do Path MTU Discovery, | ||||
this could yield a very inefficient behavior. Thus, a TAPS syst | ||||
em should probably inform the | ||||
application about path changes when the application | ||||
requests to disallow fragmentation with the "Specify DF field" | ||||
feature. | ||||
</t> | ||||
--> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="minset" numbered="true" toc="default"> | |||
<name>The Minimal Set of Transport Features</name> | ||||
<section anchor="minset" title="The Minimal Set of Transport Features"> | <t> Based on the categorization, reduction, and discussion in <xref | |||
target="deriving" format="default"/>, this section describes a minimal | ||||
<t> Based on the categorization, reduction, and discussion in <xref | set of transport features that end systems should offer. Any | |||
target="deriving"/>, this section | configuration based on the described minimum set of transport feature can | |||
describes a minimal set of transport features that end systems s | always be realized over TCP but also gives the transport system | |||
hould offer. | flexibility to choose another transport if implemented. In the text of | |||
Any configuration based the described minimum set of | this section, "not UDP" is used to indicate elements of the system that | |||
transport feature can always be realized over TCP but also gives | cannot be implemented over UDP. Conversely, all elements of the system | |||
the transport | that are not marked with "not UDP" can also be implemented over UDP. | |||
system flexibility to choose another transport if implemented. | </t> | |||
In the text of this section, "not UDP" is used to indicate eleme | <t> The arguments laid out in <xref target="Discussion" | |||
nts of the | format="default"/> ("discussion") were used to make the final | |||
system that cannot be implemented over UDP. Conversely, all elem | representation of the minimal set as short, simple, and general as | |||
ents of the system that are | possible. There may be situations where these arguments do not apply, | |||
not marked with "not UDP" can also be implemented over UDP. | e.g., implementers may have specific reasons to expose multi-streaming | |||
<!-- To implement a transport | as a visible functionality to applications, or the restrictive | |||
system that can also work over UDP, these marked transport featu | open/close semantics may be problematic under some circumstances. In | |||
res should | such cases, the representation in <xref target="Reduction" | |||
be excluded.--> | format="default"/> ("reduction") should be considered. | |||
</t> | ||||
<!--We categorize them as before, but instead of connections the | <t> As in <xref target="deriving" format="default"/>, <xref | |||
y operate on NEAT flows. | target="Reduction" format="default"/>, and <xref target="RFC8303" | |||
Since the "Errors" category only contains errors related to send | format="default"/>, we categorize the minimal set of transport features | |||
ing a particular message and there | as 1) CONNECTION related (ESTABLISHMENT, AVAILABILITY, MAINTENANCE, | |||
is only one transport feature left in this category, this catego | TERMINATION) and 2) DATA Transfer related (Sending Data, Receiving Data, | |||
ry was removed and | Errors). Here, the focus is on connections that the transport system | |||
the only transport feature in it was moved to the "Sending data" | offers as an abstraction to the application, as opposed to connections | |||
category. --> | of transport protocols that the transport system uses. | |||
</t> | ||||
<t> The arguments laid out in <xref target="Discussion" /> ("discuss | ||||
ion") were used to make the final representation | ||||
of the minimal set as short, simple and general as possible. The | ||||
re may be | ||||
situations where these arguments do not apply -- e.g., implement | ||||
ers may have specific reasons | ||||
to expose multi-streaming as a visible functionality | ||||
to applications, or the restrictive open / close semantics may b | ||||
e problematic under some circumstances. | ||||
In such cases, the representation in <xref target="Reduction" /> | ||||
("reduction") should be considered. | ||||
</t> | ||||
<t> As in <xref target="deriving"/>, <xref target="Reduction"/> and | ||||
<xref target="RFC8303"></xref>, we | ||||
categorize the minimal set of transport | ||||
features as 1) CONNECTION related (ESTABLISHMENT, AVAILABILITY, | ||||
MAINTENANCE, TERMINATION) and | ||||
2) DATA Transfer related (Sending Data, Receiving Data, Errors). | ||||
Here, the focus is on | ||||
connections that the transport system offers as an abstraction t | ||||
o the application, as opposed | ||||
to connections of | ||||
transport protocols that the transport system uses. | ||||
<!--We categorize them as before, but instead of connections the | ||||
y operate on NEAT flows. | ||||
Since the "Errors" category only contains errors related to send | ||||
ing a particular message and there | ||||
is only one transport feature left in this category, this catego | ||||
ry was removed and | ||||
the only transport feature in it was moved to the "Sending data" | ||||
category. --> | ||||
</t> | ||||
<section anchor="minset-init" title="ESTABLISHMENT, AVAILABILITY and | ||||
TERMINATION"> | ||||
<t>A connection must first be "created" to allow for some initia | ||||
l configuration | ||||
to be carried out before the transport system can actively o | ||||
r passively establish communication | ||||
with a remote end system. As a configuration of the newly cr | ||||
eated connection, an application | ||||
can choose to disallow usage of MPTCP. Furthermore, all conf | ||||
iguration | ||||
parameters in <xref target="minset-groupconfig"/> | ||||
can be used initially, although some of them may only take e | ||||
ffect | ||||
when a connection has been established with a chosen transpo | ||||
rt protocol. Configuring a | ||||
connection early helps a transport system | ||||
make the right decisions. For example, grouping information | ||||
can influence the | ||||
transport system to implement a connection as a stream of a | ||||
multi-streaming protocol's | ||||
existing association or not. | ||||
</t> | ||||
<t> | ||||
For ungrouped connections, early configuration is necessary | ||||
because 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 | ||||
choice for a particular protocol must know early about stric | ||||
t | ||||
requirements that must be kept, or it can end up in a deadlo | ||||
ck situation (e.g., | ||||
having chosen UDP and later be asked to support reliable tra | ||||
nsfer). As an example description of how to correctly | ||||
handle these cases, | ||||
we provide the following decision tree (this is derived from | ||||
<xref target="conn-reduced"/> | ||||
excluding authentication, as explained in <xref target="Secu | ||||
rity"/>): | ||||
<figure align="left"> | ||||
<!--<preamble>Preamble</preamble>--> | ||||
<artwork align="left"> | ||||
<![CDATA[ | ||||
- 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. | </t> | |||
- 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. | <section anchor="minset-init" numbered="true" toc="default"> | |||
No: UDP is preferred. | <name>ESTABLISHMENT, AVAILABILITY, and TERMINATION</name> | |||
]]> | <t>A connection must first be "created" to allow for some initial | |||
</artwork> | configuration to be carried out before the transport system can | |||
<!--<postamble>Figure 1: RTO restart example</postamble> | actively or passively establish communication with a remote end | |||
--> | system. As a configuration of the newly created connection, an | |||
</figure> | application can choose to disallow usage of MPTCP. Furthermore, all | |||
</t> | configuration parameters in <xref target="minset-groupconfig" | |||
<t>Note that this decision tree is not optimal for all cases. | format="default"/> can be used initially, although some of them may | |||
For example, if an application wants to use "Specify checksu | only take effect when a connection has been established with a chosen | |||
m coverage used by the sender", | transport protocol. Configuring a connection early helps a transport | |||
which is only offered by UDP-Lite, and "Configure priority o | system make the right decisions. For example, grouping information can | |||
r weight for a scheduler", which | influence whether or not the transport system implements a connection as | |||
is only offered by SCTP, the above decision tree will always | a stream | |||
choose UDP-Lite, making it | of a multi-streaming protocol's existing association. | |||
impossible to use SCTP's schedulers with priorities between | </t> | |||
grouped connections. Also, | <t> | |||
several other factors may influence the decisions for or aga | For ungrouped connections, early configuration is | |||
inst a protocol -- e.g. | necessary because it allows the transport system to know | |||
penetration rates, the ability to work through NATs, etc. | which protocols it should try to use. In particular, a | |||
We caution implementers to be | transport system that only makes a one-time choice for a | |||
aware of the full set of trade-offs, for which we recommend | particular protocol must know early about strict | |||
consulting the list | requirements that must be kept, or it can end up in a | |||
in <xref target="conn-reduced"/> when deciding how to initia | deadlock situation (e.g., having chosen UDP and later be | |||
lize a connection. | asked to support reliable transfer). As an example | |||
</t> | description of how to correctly handle these cases, we | |||
provide the following decision tree (this is derived from | ||||
<xref target="conn-reduced" format="default"/> excluding | ||||
authentication, as explained in <xref target="Security" | ||||
format="default"/>): | ||||
<t>To summarize, the following parameters serve as input for the | </t> | |||
transport system to help it | ||||
choose and configure a suitable protocol:</t> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Reliability: a boolean that should be set to true whe | ||||
n any of the following will be useful to the | ||||
application: reliably transfer data; notify the peer | ||||
of closing/aborting; preserve data ordering.</t> | ||||
<t>Checksum coverage: a boolean to specify whether it wi | ||||
ll be useful to the application | ||||
to specify checksum coverage when sending or receivi | ||||
ng.</t> | ||||
<t>Configure message priority: a boolean that should be | ||||
set to true when any of the following per-message | ||||
configuration or prioritization mechanisms will be u | ||||
seful to the application: choosing a scheduler to | ||||
operate between grouped connections, with the possib | ||||
ility to configure a priority or weight per connection; | ||||
configurable message reliability; unordered message | ||||
delivery; requesting not to delay the acknowledgement | ||||
(SACK) of a message.</t> | ||||
<t>Early message timeout notifications: a boolean that s | ||||
hould be set to true when any of the following | ||||
will be useful to the application: hand over a messa | ||||
ge to reliably transfer (possibly multiple times) | ||||
before connection establishment; suggest timeout to | ||||
the peer; notification of excessive retransmissions | ||||
(early warning below abortion threshold); notificati | ||||
on of ICMP error message arrival.</t> | ||||
</list> | ||||
</t> | ||||
<t>Once a connection is created, it can be queried for the maxim | <artwork> | |||
um amount of data that | +----------------------------------------------------------+ | |||
an application can possibly expect to have reliably transmit | | Will it ever be necessary to offer any of the following? | | |||
ted before or during transport | | * Reliably transfer data | | |||
connection establishment | | * Notify the peer of closing/aborting | | |||
(with zero being a possible answer) (see <xref target="mins | | * Preserve data ordering | | |||
et-maintenance-grouped"/>). | +----------------------------------------------------------+ | |||
An application can also give the connection a message for re | | | | |||
liable transmission before or during connection | |Yes |No | |||
establishment (not UDP); the transport system will then try | | (SCTP or TCP) | (All protocols | |||
to transmit it as early as possible. An application | | can be used.) | can be used.) | |||
can facilitate sending a message particularly early by marki | V V | |||
ng it as "idempotent" (see <xref target="minset-datatrans-sending"/>); | +--------------------------------------+ +-----------------------------+ | |||
in this case, | | Is any of the following useful to | | Is any of the following | | |||
the receiving application must be prepared to potentially re | | the application? | | useful to the application? | | |||
ceive multiple | | * Choosing a scheduler to operate | | * Specify checksum coverage | | |||
copies of the message (because idempotent messages are relia | | between connections in a group, | | used by the sender | | |||
bly transferred, asking for idempotence | | with the possibility to configure | | * Specify minimum checksum | | |||
is not necessary for systems that support UDP). | | a priority or weight per connection| | coverage required by the | | |||
</t> | | * Configurable message reliability | | receiver | | |||
<t> | | * Unordered message delivery | +-----------------------------+ | |||
After creation, a transport system can actively establish co | | * Request not to delay the | | | | |||
mmunication with a peer, or it can | | acknowledgement (SACK) of a message| |Yes |No | |||
passively listen for incoming connection requests. Note that | +--------------------------------------+ | | | |||
active establishment may or may not | | | | | | |||
trigger a notification on the listening side. It is possible | |Yes |No | | | |||
that the first notification on the listening side is the arr | V | V V | |||
ival of the first data that | SCTP is | UDP-Lite is UDP is | |||
the active side sends (a receiver-side transport system coul | preferred. | preferred. preferred. | |||
d handle this by continuing to block | V | |||
a "Listen" call, immediately followed by issuing "Receive", | +------------------------------------------------------+ | |||
for example; callback-based | | Is any of the following useful to the application? | | |||
implementations could simply skip the equivalent of "Listen" | | * Hand over a message to reliably transfer (possibly | | |||
). This also means that | | multiple times) before connection establishment | | |||
the active opening side is assumed to be the first side send | | * Suggest timeout to the peer | | |||
ing data. | | * Notification of Excessive Retransmissions (early | | |||
</t> | | warning below abortion threshold) | | |||
| * Notification of ICMP error message arrival | | ||||
+------------------------------------------------------+ | ||||
| | | ||||
|Yes |No | ||||
V V | ||||
TCP is preferred. SCTP and TCP | ||||
are equally preferable. | ||||
</artwork> | ||||
<t>A transport system can actively close a connection, i.e. term | <t>Note that this decision tree is not optimal for all cases. For | |||
inate it after reliably delivering all | example, if an application wants to use "Specify checksum coverage | |||
remaining data to the peer (if reliable data delivery was re | used by the sender", which is only offered by UDP-Lite, and "Configure | |||
quested earlier (not UDP)), in which case the | priority or weight for a scheduler", which is only offered by SCTP, | |||
peer is notified that the connection is closed. Alternativel | the above decision tree will always choose UDP-Lite, making it | |||
y, a connection | impossible to use SCTP's schedulers with priorities between grouped | |||
can be aborted without delivering outstanding data to the pe | connections. Also, several other factors may influence the decisions | |||
er. In case reliable or | for or against a protocol, e.g., penetration rates, the ability to | |||
partially reliable data delivery was requested earlier (not | work through NATs, etc. We caution implementers to be aware of the | |||
UDP), the peer is notified | full set of trade-offs, for which we recommend consulting the list in | |||
that the connection is aborted. | <xref target="conn-reduced" format="default"/> when deciding how to | |||
A timeout can be configured to abort | initialize a connection. | |||
a connection when data could not be delivered for too long ( | </t> | |||
not UDP); however, timeout-based abortion does not | <t>To summarize, the following parameters serve as input for the | |||
notify the peer application that the connection has been abo | transport system to help it choose and configure a suitable | |||
rted. Because half-closed connections | protocol:</t> | |||
are not supported, when a host implementing a transport syst | ||||
em receives a notification that the | ||||
peer is closing or aborting | ||||
the connection (not UDP), its peer may not be able to read o | ||||
utstanding data. This means | ||||
that unacknowledged data residing in a transport system's se | ||||
nd buffer may have to be dropped from | ||||
that buffer upon arrival of a "close" or "abort" notificatio | ||||
n from the peer. | ||||
</t> | ||||
</section> | <dl> | |||
<dt>Reliability: | ||||
</dt> | ||||
<dd>a boolean that should be set to true when any of the following will be | ||||
useful to the application: reliably transfer data; notify the peer of | ||||
closing/aborting; or preserve data ordering. | ||||
</dd> | ||||
<dt>Checksum coverage: | ||||
</dt> | ||||
<dd>a boolean to specify whether it will be useful to the application to | ||||
specify checksum coverage when sending or receiving. | ||||
</dd> | ||||
<section anchor="minset-groupconfig" title="MAINTENANCE"> | <dt>Configure message priority: | |||
</dt> | ||||
<dd>a boolean that should be set to true when any of the following | ||||
per-message configuration or prioritization mechanisms will be useful to the | ||||
application: choosing a scheduler to operate between grouped connections, with | ||||
the possibility to configure a priority or weight per connection; configurable | ||||
message reliability; unordered message delivery; or requesting not to delay the | ||||
acknowledgement (SACK) of a message. | ||||
</dd> | ||||
<dt>Early message timeout notifications: | ||||
</dt> | ||||
<dd>a boolean that should be set to true when any of the following will be | ||||
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); or notification of ICMP error message arrival. | ||||
</dd> | ||||
</dl> | ||||
<t>A transport system must offer means to group connections, but | <t>Once a connection is created, it can be queried for the maximum | |||
it cannot | amount of data that an application can possibly expect to have | |||
guarantee truly grouping them using the transport protocols | reliably transmitted before or during transport connection | |||
that it uses (e.g., it cannot | establishment (with zero being a possible answer) (see <xref | |||
be guaranteed that connections | target="minset-maintenance-grouped" format="default"/>). An | |||
become multiplexed as streams on a single SCTP association w | application can also give the connection a message for reliable | |||
hen SCTP may not be available). | transmission before or during connection establishment (not UDP); the | |||
The transport system must therefore ensure that group- versu | transport system will then try to transmit it as early as possible. An | |||
s non-group-configurations | application can facilitate sending a message particularly early by | |||
are handled correctly in some way (e.g., by applying the con | marking it as "idempotent" (see <xref | |||
figuration to all grouped | target="minset-datatrans-sending" format="default"/>); in this case, | |||
connections even when they are not multiplexed, or informing | the receiving application must be prepared to potentially receive | |||
the application about | multiple copies of the message (because idempotent messages are | |||
grouping success or failure). | reliably transferred, asking for idempotence is not necessary for | |||
</t> | systems that support UDP). | |||
</t> | ||||
<t> | ||||
After creation, a transport system can actively establish | ||||
communication with a peer, or it can passively listen for | ||||
incoming connection requests. Note that active | ||||
establishment may or may not trigger a notification on the | ||||
listening side. It is possible that the first notification | ||||
on the listening side is the arrival of the first data | ||||
that the active side sends (a receiver-side transport | ||||
system could handle this by continuing to block a "Listen" | ||||
call, immediately followed, for example, by issuing | ||||
"Receive"; callback-based implementations could simply | ||||
skip the equivalent of "Listen"). This also means that the | ||||
active opening side is assumed to be the first side | ||||
sending data. | ||||
</t> | ||||
<t>A transport system can actively close a connection, i.e., terminate | ||||
it after reliably delivering all remaining data to the peer (if | ||||
reliable data delivery was requested earlier (not UDP)), in which case | ||||
the peer is notified that the connection is closed. Alternatively, a | ||||
connection can be aborted without delivering outstanding data to the | ||||
peer. In case reliable or partially reliable data delivery was | ||||
requested earlier (not UDP), the peer is notified that the connection | ||||
is aborted. A timeout can be configured to abort a connection when | ||||
data could not be delivered for too long (not UDP); however, | ||||
timeout-based abortion does not notify the peer application that the | ||||
connection has been aborted. Because half-closed connections are not | ||||
supported, when a host implementing a transport system receives a | ||||
notification that the peer is closing or aborting the connection (not | ||||
UDP), its peer may not be able to read outstanding data. This means | ||||
that unacknowledged data residing in a transport system's send buffer | ||||
may have to be dropped from that buffer upon arrival of a "close" or | ||||
"abort" notification from the peer. | ||||
</t> | ||||
</section> | ||||
<t>As a general rule, any configuration described below should b | <section anchor="minset-groupconfig" numbered="true" toc="default"> | |||
e carried | <name>MAINTENANCE</name> | |||
<t>A transport system must offer means to group connections, but it | ||||
cannot guarantee truly grouping them using the transport protocols | ||||
that it uses (e.g., it cannot be guaranteed that connections become | ||||
multiplexed as streams on a single SCTP association when SCTP may not | ||||
be available). The transport system must therefore ensure that group- | ||||
versus non-group-configurations are handled correctly in some way | ||||
(e.g., by applying the configuration to all grouped connections even | ||||
when they are not multiplexed, or informing the application about | ||||
grouping success or failure). | ||||
</t> | ||||
<t>As a general rule, any configuration described below should be carrie | ||||
d | ||||
out as early as possible to aid the transport system's decis ion making. | out as early as possible to aid the transport system's decis ion making. | |||
</t> | </t> | |||
<section anchor="minset-maintenance-grouped" title="Connection g | ||||
roups"> | ||||
<t>The following | ||||
transport features and notifications (some directly from | ||||
<xref target="Reduction"/>, | ||||
some new or changed, based on the discussion in <xref ta | ||||
rget="Discussion"/>) | ||||
automatically apply to all grouped connections: | ||||
</t> | ||||
<t>(not UDP) Configure a timeout: this can be done with the | ||||
following parameters:</t> | ||||
<t><list style="symbols"> | ||||
<t>A timeout value for aborting connections, in seco | ||||
nds</t> | ||||
<t>A timeout value to be suggested to the peer (if p | ||||
ossible), in seconds</t> | ||||
<t>The number of retransmissions after which the app | ||||
lication should be notifed | ||||
of "Excessive Retransmissions"</t> | ||||
</list> | ||||
</t> | ||||
<t>Configure urgency: this can be done with the following pa | ||||
rameters:</t> | ||||
<t><list style="symbols"> | ||||
<t>A number to identify the type of scheduler that s | ||||
hould be used to operate | ||||
between connections in the group (no guarantees | ||||
given). Schedulers are | ||||
defined in <xref target="RFC8260"/>.</t> | ||||
<t>A "capacity profile" number to identify how an ap | ||||
plication wants to use its available capacity. | ||||
Choices can be "lowest possible latency at the e | ||||
xpense of | ||||
overhead" (which would disable any Nagle-like al | ||||
gorithm), | ||||
"scavenger", or values that help determine the D | ||||
SCP value | ||||
for a connection (e.g. similar to table 1 in <x | ||||
ref target="I-D.ietf-tsvwg-rtcweb-qos"/>).</t> | ||||
<t>A buffer limit (in bytes); when the sender has le | ||||
ss than the provided limit of | ||||
bytes in the buffer, the application may be noti | ||||
fied. Notifications are not guaranteed, | ||||
and it is optional for a transport system to sup | ||||
port buffer limit values greater than 0. | ||||
Note that this limit and its notification should | ||||
operate across the buffers of the whole transport system, i.e. | ||||
also any potential buffers that the transport sy | ||||
stem itself may use on top of the transport's send buffer.</t> | ||||
</list> | ||||
</t> | ||||
<t>Following <xref target="packetsize"/>, these properties c | ||||
an be queried:</t> | ||||
<t><list style="symbols"> | ||||
<t>The maximum message size that may be sent without | ||||
fragmentation via the configured interface. This is optional for a transport sy | ||||
stem to offer, and may return an error ("not available"). It can aid application | ||||
s implementing Path MTU Discovery.</t> | ||||
<t>The maximum transport message size that can be se | ||||
nt, in bytes. Irrespective of fragmentation, there is a size limit for the | ||||
messages that can be handed over to SCTP or UDP( | ||||
-Lite); because the service provided by | ||||
a transport system is independent | ||||
of the transport protocol, it must allow an appl | ||||
ication to query this value -- the maximum size | ||||
of a message in an Application-Framed-Bytestream | ||||
(see <xref target="sendmsg"/>). This may | ||||
also return an error when data | ||||
is not delimited ("not available").</t> | ||||
<t>The maximum transport message size that can be re | ||||
ceived from the configured interface, in bytes (or "not available").</t> | ||||
<t>The maximum amount of data that can possibly be s | ||||
ent before or | ||||
during connection establishment, in bytes.</t> | ||||
</list> | ||||
<vspace blankLines="1"/> | ||||
</t> | ||||
<t>In addition to the already mentioned closing / aborting n | ||||
otifications and possible send | ||||
errors, the following notifications can occur:</t> | ||||
<t><list style="symbols"> | ||||
<t>Excessive Retransmissions: the configured (or a d | ||||
efault) number of retransmissions | ||||
has been reached, yielding this early warning be | ||||
low an abortion threshold.</t> | ||||
<t>ICMP Arrival (parameter: ICMP message): an ICMP p | ||||
acket carrying the conveyed ICMP message | ||||
has arrived.</t> | ||||
<t>ECN Arrival (parameter: ECN value): a packet carr | ||||
ying the conveyed ECN value has arrived. | ||||
This can be useful for applications implementing | ||||
congestion control.</t> | ||||
<t>Timeout (parameter: s seconds): data could not be | ||||
delivered for s seconds.</t> | ||||
<t>Drain: the send buffer has either drained below t | ||||
he configured buffer limit or | ||||
it has become completely empty. This is a generi | ||||
c notification that tries to enable uniform access | ||||
to "TCP_NOTSENT_LOWAT" as well as the "SENDER DR | ||||
Y" notification (as discussed in <xref target="rundry"/> -- | ||||
SCTP's "SENDER DRY" is a special case where the | ||||
threshold (for unsent data) is 0 and there is also no more | ||||
unacknowledged data in the send buffer).</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section anchor="minset-maintenance-individual" title="Individua | ||||
l connections"> | ||||
<t>Configure priority or weight for a scheduler, as describe | ||||
d in <xref target="RFC8260"/>.</t> | ||||
<t>Configure checksum usage: this can be done with the follo | ||||
wing parameters, but there is no | ||||
guarantee that any checksum limitations will indeed be e | ||||
nforced (the default behavior | ||||
is "full coverage, checksum enabled"):</t> | ||||
<t><list style="symbols"> | ||||
<t>A boolean to enable / disable usage of a checksum | ||||
when sending</t> | ||||
<t>The desired coverage (in bytes) of the checksum u | ||||
sed when sending</t> | ||||
<t>A boolean to enable / disable requiring a checksu | ||||
m when receiving</t> | ||||
<t>The required minimum coverage (in bytes) of the c | ||||
hecksum when receiving</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="minset-datatrans" title="DATA Transfer"> | ||||
<section anchor="minset-datatrans-sending" title="Sending Data"> | ||||
<t>When sending a message, no guarantees are given about the pre | <section anchor="minset-maintenance-grouped" numbered="true" toc="defaul | |||
servation of message | t"> | |||
boundaries to the peer; if message boundaries are needed, th | <name>Connection Groups</name> | |||
e receiving application at the | <t>The following transport features and notifications (some directly | |||
peer must know about them beforehand (or the transport syste | from <xref target="Reduction" format="default"/>; some new or | |||
m cannot use TCP). Note | changed, based on the discussion in <xref target="Discussion" | |||
that an application should already be able to hand over data | format="default"/>) automatically apply to all grouped connections: | |||
before the transport system | </t> | |||
establishes a connection with a chosen transport protocol. R | <t>Configure a timeout (not UDP)<br/>This can be done with the followi | |||
egarding the message | ng parameters:</t> | |||
that is being handed over, the following parameters can be u | <ul> | |||
sed:</t> | <li>A timeout value for aborting connections, in seconds.</li> | |||
<t><list style="symbols"> | <li>A timeout value to be suggested to the peer (if possible), in se | |||
<t>Reliability: this parameter is used to convey a choic | conds.</li> | |||
e of: fully reliable with congestion control (not UDP), | <li>The number of retransmissions after which the application | |||
unreliable without congestion control, unreliable wi | should be notified of "Excessive Retransmissions".</li> | |||
th congestion control (not UDP), | </ul> | |||
partially reliable with congestion control (see <xre | <t>Configure urgency<br/>This can be done with the following parameter | |||
f target="RFC3758"/> and <xref target="RFC7496"/> for details | s:</t> | |||
on how to specify partial reliability) (not UDP). Th | <ul> | |||
e latter two choices are optional for a transport | <li>A number to identify the type of scheduler that should be used | |||
system to offer and may result in full reliability. | to operate between connections in the group (no guarantees | |||
Note that applications sending | given). Schedulers are defined in <xref target="RFC8260" | |||
unreliable data without congestion control should themse | format="default"/>.</li> | |||
lves perform congestion control | ||||
in accordance with <xref target="RFC8085"/>.</t> | ||||
<t>(not UDP) Ordered: this boolean parameter lets an app | ||||
lication choose between ordered | ||||
message delivery (true) and possibly unordered, pote | ||||
ntially faster message delivery | ||||
(false).</t> | ||||
<t>Bundle: a boolean that expresses a preference for all | ||||
owing to bundle messages (true) or not (false). | ||||
No guarantees are given.</t> | ||||
<t>DelAck: a boolean that, if false, lets an application | ||||
request that the peer would not | ||||
delay the acknowledgement for this message.</t> | ||||
<t>Fragment: a boolean that expresses a preference for a | ||||
llowing to fragment messages (true) or not (false), at the IP level. No guarante | ||||
es are given.</t> | ||||
<t>(not UDP) Idempotent: a boolean that expresses whethe | ||||
r a message is | ||||
idempotent (true) or not (false). Idempotent message | ||||
s may arrive multiple | ||||
times at the receiver (but they will arrive at least | ||||
once). When data is idempotent | ||||
it can be used by the receiver immediately on a | ||||
connection establishment attempt. Thus, if data is h | ||||
anded over before the transport system | ||||
establishes a connection with a chosen transport pro | ||||
tocol, | ||||
stating that a message is idempotent facilitates tra | ||||
nsmitting it to the peer application | ||||
particularly early. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t>An application can be notified of a failure to send a specifi | <li>A "capacity profile" number to identify how an application | |||
c message. There is no | wants to use its available capacity. Choices can be "lowest | |||
guarantee of such notifications, i.e. send failures can also | possible latency at the expense of overhead" (which would disable | |||
silently occur.</t> | any Nagle-like algorithm), "scavenger", or values that help | |||
determine the DSCP value for a connection.</li> | ||||
<li>A buffer limit (in bytes); when the sender has less than the | ||||
provided limit of bytes in the buffer, the application may be | ||||
notified. Notifications are not guaranteed, and it is optional for | ||||
a transport system to support buffer limit values greater than 0. | ||||
Note that this limit and its notification should operate across | ||||
the buffers of the whole transport system, i.e., also any | ||||
potential buffers that the transport system itself may use on top | ||||
of the transport's send buffer.</li> | ||||
</ul> | ||||
<t>Following <xref target="packetsize" format="default"/>, these prope | ||||
rties can be queried:</t> | ||||
<ul> | ||||
<li>The maximum message size that may be sent without | ||||
fragmentation via the configured interface. This is optional for a | ||||
transport system to offer and may return an error ("not | ||||
available"). It can aid applications implementing Path MTU | ||||
Discovery.</li> | ||||
<li>The maximum transport message size that can be sent, in | ||||
bytes. Irrespective of fragmentation, there is a size limit for | ||||
the messages that can be handed over to SCTP or UDP(-Lite); | ||||
because the service provided by a transport system is independent | ||||
of the transport protocol, it must allow an application to query | ||||
this value: the maximum size of a message in an | ||||
Application-Framed Byte Stream (see <xref target="sendmsg" | ||||
format="default"/>). This may also return an error when data is | ||||
not delimited ("not available").</li> | ||||
<li>The maximum transport message size that can be received from | ||||
the configured interface, in bytes (or "not available").</li> | ||||
<li>The maximum amount of data that can possibly be sent before or | ||||
during connection establishment, in bytes.</li> | ||||
</ul> | ||||
<t>In addition to the already mentioned closing/aborting | ||||
notifications and possible send errors, the following notifications | ||||
can occur:</t> | ||||
</section> | <dl> | |||
<dt>Excessive Retransmissions: | ||||
</dt> | ||||
<dd>The configured (or a default) number of retransmissions has been | ||||
reached, yielding this early warning below an abortion threshold. | ||||
</dd> | ||||
<dt>ICMP Arrival (parameter: ICMP message): | ||||
</dt> | ||||
<dd>An ICMP packet carrying the conveyed ICMP message has arrived. | ||||
</dd> | ||||
<dt>ECN Arrival (parameter: ECN value): | ||||
</dt> | ||||
<dd>A packet carrying the conveyed Explicit Congestion Notification (ECN) va | ||||
lue has arrived. This can be | ||||
useful for applications implementing congestion control. | ||||
</dd> | ||||
<dt>Timeout (parameter: s seconds): | ||||
</dt> | ||||
<dd>Data could not be delivered for s seconds. | ||||
</dd> | ||||
<dt>Drain: | ||||
</dt> | ||||
<dd>The send buffer has either drained below the configured buffer limit | ||||
or it has become completely empty. This is a generic notification that | ||||
tries to enable uniform access to "TCP_NOTSENT_LOWAT" as well as the | ||||
"SENDER DRY" notification (as discussed in <xref target="rundry"/>; SCTP's " | ||||
SENDER | ||||
DRY" is a special case where the threshold (for unsent data) is 0 and | ||||
there is also no more unacknowledged data in the send buffer). | ||||
</dd> | ||||
</dl> | ||||
<section anchor="minset-datatrans-receiving" title="Receiving Da | </section> | |||
ta"> | <section anchor="minset-maintenance-individual" numbered="true" toc="def | |||
<t>A receiving application obtains an "Application-Framed By | ault"> | |||
testream" (AFra-Bytestream); this concept is further described in <xref target=" | <name>Individual Connections</name> | |||
sendmsg"/>). In line with TCP's receiver semantics, an AFra-Bytestream is just | <t>Configure priority or weight for a scheduler, as described in | |||
a stream of bytes to the receiver. If message boundaries | <xref target="RFC8260" format="default"/>.</t> | |||
were specified by the sender, a receiver-side transport system implementing | <t>Configure checksum usage: This can be done with the following | |||
only the minimum set of transport services defined here | parameters, but there is no guarantee that any checksum limitations | |||
will still not | will indeed be enforced (the default behavior is "full coverage, | |||
inform the receiving application about them (this limita | checksum enabled"):</t> | |||
tion is only needed for transport systems that | <ul> | |||
are implemented to directly use TCP).</t> | <li>a boolean to enable/disable usage of a checksum when sending</li | |||
<t>Different from TCP's semantics, | > | |||
if the sending application has allowed that | <li>the desired coverage (in bytes) of the checksum used when sendin | |||
messages are not fully reliably transferred, or delivere | g</li> | |||
d out of order, | <li>a boolean to enable/disable requiring a checksum when receiving< | |||
then such re-ordering or unreliability may be reflected | /li> | |||
per message in | <li>the required minimum coverage (in bytes) of the checksum when re | |||
the arriving data. Messages will always stay intact - i. | ceiving</li> | |||
e. if an incomplete | </ul> | |||
message is contained at the end of the arriving data blo | ||||
ck, this message | ||||
is guaranteed to continue in the next arriving data bloc | ||||
k.</t> | ||||
</section> | ||||
</section> | ||||
</section> | </section> | |||
</section> | ||||
<section anchor="minset-datatrans" numbered="true" toc="default"> | ||||
<name>DATA Transfer</name> | ||||
<!-- </section> --> | <section anchor="minset-datatrans-sending" numbered="true" toc="default" | |||
> | ||||
<name>Sending Data</name> | ||||
<t>When sending a message, no guarantees are given about the | ||||
preservation of message boundaries to the peer; if message | ||||
boundaries are needed, the receiving application at the peer must | ||||
know about them beforehand (or the transport system cannot use | ||||
TCP). Note that an application should already be able to hand over | ||||
data before the transport system establishes a connection with a | ||||
chosen transport protocol. Regarding the message that is being | ||||
handed over, the following parameters can be used:</t> | ||||
<section anchor="Acknowledgements" title="Acknowledgements"> | <dl> | |||
<t>The authors would like to thank all the participants of the TAPS | <dt>Reliability: | |||
Working Group and the NEAT and | </dt> | |||
MAMI research projects for valuable input to this document. We e | <dd>This parameter is used to convey a choice of: fully reliable with | |||
specially thank Michael Tuexen | congestion control (not UDP), unreliable without congestion control, | |||
for help with connection connection establishment/teardown, Gorr | unreliable with congestion control (not UDP), and partially reliable with | |||
y Fairhurst for | congestion control (see <xref target="RFC3758" format="default"/> and | |||
his suggestions regarding fragmentation and packet sizes, and Sp | <xref target="RFC7496" format="default"/> for details on how to specify | |||
encer Dawkins for his | partial reliability) (not UDP). The latter two choices are optional for a | |||
extremely detailed and constructive review. | transport system to offer and may result in full reliability. Note that | |||
This work has received funding from the European Union's Horizon | applications sending unreliable data without congestion control should | |||
2020 research | themselves perform congestion control in accordance with <xref | |||
and innovation programme under grant agreement No. 644334 (NEAT) | target="RFC8085" format="default"/>. | |||
. | </dd> | |||
<!-- The views expressed are solely those of the author(s).--> | ||||
</t> | ||||
</section> | <dt>Ordered (not UDP): | |||
</dt> | ||||
<dd>This boolean lets an application choose between ordered | ||||
message delivery (true) and possibly unordered, potentially faster message | ||||
delivery (false). | ||||
</dd> | ||||
<dt>Bundle: | ||||
</dt> | ||||
<dd>This boolean expresses a preference for allowing to bundle messages | ||||
(true) or not (false). No guarantees are given. | ||||
</dd> | ||||
<dt>DelAck: | ||||
</dt> | ||||
<!-- Possibly a 'Contributors' section ... --> | <dd>This boolean, if false, lets an application request that the peer not | |||
delay the acknowledgement for this message. | ||||
</dd> | ||||
<dt>Fragment: | ||||
</dt> | ||||
<dd>This boolean expresses a preference for allowing to fragment | ||||
messages (true) or not (false), at the IP level. No guarantees are given. | ||||
</dd> | ||||
<dt>Idempotent (not UDP): | ||||
</dt> | ||||
<dd>This boolean expresses whether a message is idempotent (true) or not | ||||
(false). Idempotent messages may arrive multiple times at the receiver | ||||
(but they will arrive at least once). When data is idempotent, it can be | ||||
used by the receiver 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 | ||||
message is idempotent facilitates transmitting it to the peer application | ||||
particularly early. | ||||
</dd> | ||||
</dl> | ||||
<section anchor="IANA" title="IANA Considerations"> | <t>An application can be notified of a failure to send a specific | |||
<t>This memo includes no request to IANA.</t> | message. There is no guarantee of such notifications, i.e., send | |||
failures can also silently occur.</t> | ||||
</section> | </section> | |||
<section anchor="minset-datatrans-receiving" numbered="true" toc="defaul | ||||
<section anchor="Security" title="Security Considerations"> | t"> | |||
<t>Authentication, confidentiality protection, and integrity protect | <name>Receiving Data</name> | |||
ion are identified as transport features by <xref target="RFC8095"/>. Often, the | <t>A receiving application obtains an "Application-Framed | |||
se features are provided by a protocol or layer on top of the transport protocol | Byte Stream" (AFra Byte Stream); this concept is further described in | |||
; none of the full-featured standards-track transport protocols in <xref target= | <xref target="sendmsg" format="default"/>. In line with TCP's | |||
"RFC8303"/>, which this document is based upon, provides all of these transport | receiver semantics, an AFra Byte Stream is just a stream of bytes to | |||
features on its own. Therefore, they are not considered in this document, with t | the receiver. If message boundaries were specified by the sender, a | |||
he exception of native authentication capabilities of TCP and SCTP for which the | receiver-side transport system implementing only the minimum set of | |||
security considerations in <xref target="RFC5925"/> and <xref target="RFC4895"/ | Transport Services defined here will still not inform the receiving | |||
> apply. The minimum requirements for a secure transport system are discussed in | application about them (this limitation is only needed for transport | |||
a separate document (Section 5 on Security Features and Transport Dependencies | systems that are implemented to directly use TCP).</t> | |||
of <xref target="I-D.ietf-taps-transport-security"/>).</t> | <t>Different from TCP's semantics, if the sending application has | |||
allowed that messages are not fully reliably transferred, or | ||||
delivered out of order, then such reordering or unreliability may | ||||
be reflected per message in the arriving data. Messages will always | ||||
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 the next arriving data block.</t> | ||||
</section> | </section> | |||
</section> | ||||
</section> | ||||
</middle> | <section anchor="IANA" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | ||||
<!-- *****BACK MATTER ***** --> | <t>This document has no IANA actions. | |||
</t> | ||||
<back> | </section> | |||
<!-- References split into informative and normative --> | <section anchor="Security" numbered="true" toc="default"> | |||
<name>Security Considerations</name> | ||||
<!-- There are 2 ways to insert reference entries from the citation libr | <t>Authentication, confidentiality protection, and integrity protection | |||
aries: | are identified as transport features by <xref target="RFC8095" | |||
1. define an ENTITY at the top, and use "ampersand character"RFC2629; h | format="default"/>. Often, these features are provided by a protocol or | |||
ere (as shown) | layer on top of the transport protocol; none of the full-featured | |||
2. simply use a PI "less than character"?rfc include="reference.RFC.211 | standards-track transport protocols in <xref target="RFC8303" | |||
9.xml"?> here | format="default"/>, which this document is based upon, provide all of | |||
(for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis | these transport features on its own. Therefore, they are not considered | |||
.xml") | in this document, with the exception of native authentication | |||
capabilities of TCP and SCTP for which the security considerations in | ||||
Both are cited textually in the same manner: by using xref elements. | <xref target="RFC5925" format="default"/> and <xref target="RFC4895" | |||
If you use the PI option, xml2rfc will, by default, try to find include | format="default"/> apply. | |||
d files in the same | ||||
directory as the including file. You can also define the XML_LIBRARY en | ||||
vironment variable | ||||
with a value containing a set of directories to search. These can be e | ||||
ither in the local | ||||
filing system or remote ones accessed by http (http://domain/dir/... ). | ||||
--> | ||||
<references title="Normative References"> | ||||
&RFC8095; | ||||
&RFC8303; | ||||
&I-D.ietf-taps-transport-security; | ||||
</references> | ||||
<references title="Informative References"> | The minimum requirements for a secure transport system are discussed in a | |||
<!--&RFC2119;--> | separate document <xref target="RFC8922" format="default"/>. | |||
&RFC8085; | ||||
&RFC3758; | ||||
&RFC4895; | ||||
&RFC4987; | ||||
&RFC5925; | ||||
&RFC6897; | ||||
&RFC7305; | ||||
&RFC7413; | ||||
&RFC7496; | ||||
&RFC8260; | ||||
&RFC8304; | ||||
&I-D.ietf-tsvwg-rtcweb-qos; | ||||
&I-D.ietf-taps-interface; | ||||
<!-- unnecessary | </t> | |||
<reference anchor="RFC793bis" target=""> | </section> | |||
<front> | </middle> | |||
<title>Transmission Control Protocol Specification</title> | ||||
<author fullname="Wesley Eddy" initials="W." surname="Eddy"> </author> | <back> | |||
<date month="July" year="2017" /> | <displayreference target="I-D.ietf-taps-interface" to="TAPS-INTERFACE"/> | |||
</front> | ||||
<seriesInfo name="Internet-draft" | <references> | |||
value="draft-ietf-tcpm-rfc793bis-06" /> | <name>References</name> | |||
</reference> | <references> | |||
--> | <name>Normative References</name> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8095. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8303. | ||||
xml"/> | ||||
<reference anchor="LBE-draft" target=""> | <reference anchor="RFC8922" target="https://www.rfc-editor.org/info/rfc8922"> | |||
<front> | <front> | |||
<title>A Lower Effort Per-Hop Behavior (LE PHB)</title> | <title>A Survey of the Interaction between Security Protocols and Transport Serv | |||
ices</title> | ||||
<author fullname="Roland Bless" initials="R." surname="Bless | <author initials='T' surname='Enghardt' fullname='Theresa Enghardt'> | |||
"></author> | <organization /> | |||
</author> | ||||
<date month="February" year="2018" /> | <author initials='T' surname='Pauly' fullname='Tommy Pauly'> | |||
</front> | <organization /> | |||
</author> | ||||
<seriesInfo name="Internet-draft" | <author initials='C' surname='Perkins' fullname='Colin Perkins'> | |||
value="draft-tsvwg-le-phb-03" /> | <organization /> | |||
</reference> | </author> | |||
<reference anchor="COBS"> | <author initials='K' surname='Rose' fullname='Kyle Rose'> | |||
<front> | <organization /> | |||
<title>Consistent Overhead Byte Stuffing</title> | </author> | |||
<author fullname="Stuart Cheshire" initials="S" surname="Che | ||||
shire"> | ||||
<organization>Stanford University</organization></author | ||||
> | ||||
<author fullname="Mary Baker" initials="M" surname="Bak | ||||
er" > | ||||
<organization>Stanford University</organization></author | ||||
> | ||||
<date month="April" year="1999" /> | ||||
</front> | ||||
<seriesInfo name="IEEE/ACM Transactions on Networking" | ||||
value="Vol. 7, No. 2"/> | ||||
</reference> | ||||
<reference anchor="WWDC2015" | <author initials='C' surname='Wood' fullname='Christopher Wood'> | |||
target="https://developer.apple.com/videos/wwdc/2015/?id=719"> | <organization /> | |||
<front> | </author> | |||
<title>Your App and Next Generation Networks</title> | ||||
<author fullname="Prabhakar Lakhera" initials="P." surname=" Lakhera"></author> | <date month="October" year='2020' /> | |||
<author fullname="Stuart Cheshire" initials="S." surname="Ch | </front> | |||
eshire"></author> | <seriesInfo name="RFC" value="8922"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC8922"/> | ||||
</reference> | ||||
<date month="June" year="2015" /> | </references> | |||
</front> | <references> | |||
<name>Informative References</name> | ||||
<seriesInfo name="Apple Worldwide Developers Conference" | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8085. | |||
value="2015, San Francisco, USA" /> | xml"/> | |||
</reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3758. | |||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4895. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4987. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5925. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6897. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7305. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7413. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7496. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8260. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8304. | ||||
xml"/> | ||||
<reference anchor="POSIX" | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-ta | |||
target="http://www.opengroup.org/onlinepubs/9699919799/functions | ps-interface.xml"/> | |||
/contents.html"> | ||||
<front> | ||||
<title>IEEE Standard for Information Technology--Portable Op | ||||
erating System Interface (POSIX(R)) Base Specifications, Issue 7</title> | ||||
<author fullname="IEEE"></author> | ||||
<date month="January" year="2018" /> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8622. | |||
</front> | xml"/> | |||
<seriesInfo name="IEEE Std" value= "1003.1-2017 (Revision of IEE | ||||
E Std 1003.1-2008)" /> | ||||
</reference> | ||||
<reference anchor="SCTP-stream-1"> | <reference anchor="COBS"> | |||
<front> | <front> | |||
<title>Transparent Flow Mapping for NEAT</title> | <title>Consistent overhead byte stuffing</title> | |||
<author fullname="Felix Weinrank" initials="F" surname="Wein | ||||
rank"></author> | ||||
<author fullname="Michael Tuexen" initials="M" surname= | ||||
"Tuexen" ></author> | ||||
<date month="June" year="2017" /> | ||||
</front> | ||||
<seriesInfo name="IFIP NETWORKING Workshop on Future of Internet | ||||
Transport" value ="(FIT 2017)"/> | ||||
</reference> | ||||
<reference anchor="SCTP-stream-2"> | <author fullname="Stuart Cheshire" initials="S" surname="Cheshire"> | |||
<front> | <organization>Stanford University</organization> | |||
<title>Beneficial Transparent Deployment of SCTP</title> | </author> | |||
<author fullname="Michael Welzl" initials="M" surname="Welzl | <author fullname="Mary Baker" initials="M" surname="Baker"> | |||
"></author> | <organization>Stanford University</organization> | |||
<author fullname="Florian Niederbacher" initials="F" su | </author> | |||
rname="Niederbacher" ></author> | <date month="April" year="1999"/> | |||
<author fullname="Stein Gjessing" initials="S" surname= | ||||
"Gjessing" ></author> | ||||
<date month="December" year="2011" /> | ||||
</front> | ||||
<seriesInfo name="IEEE GlobeCom" value="2011"/> | ||||
</reference> | ||||
</references> | </front> | |||
<seriesInfo name="DOI" value="10.1109/90.769765"/> | ||||
<!-- Change Log | <refcontent>IEEE/ACM Transactions on Networking, Volume 7, Issue 2 | |||
v00 2006-03-15 EBD Initial version | </refcontent> | |||
</reference> | ||||
--> | <reference anchor="WWDC2015" target="https://developer.apple.com/videos/ | |||
wwdc/2015/?id=719"> | ||||
<front> | ||||
<title>Your App and Next Generation Networks</title> | ||||
<author fullname="Prabhakar Lakhera" initials="P." surname="Lakhera" | ||||
/> | ||||
<author fullname="Stuart Cheshire" initials="S." surname="Cheshire"/ | ||||
> | ||||
<date month="June" year="2015"/> | ||||
</front> | ||||
<refcontent>Apple Worldwide Developers Conference 2015</refcontent> | ||||
<refcontent>San Francisco, USA</refcontent> | ||||
</reference> | ||||
<section anchor="super" title="The Superset of Transport Features"> | <reference anchor="POSIX" target="https://www.opengroup.org/onlinepubs/9 | |||
699919799/functions/contents.html"> | ||||
<front> | ||||
<title>IEEE Standard for Information Technology--Portable Operating | ||||
System Interface (POSIX(R)) Base Specifications, Issue 7</title> | ||||
<author><organization>The Open Group</organization></author> | ||||
<date month="January" year="2018"/> | ||||
</front> | ||||
<seriesInfo name="IEEE Std" value="1003.1-2017"/> | ||||
<refcontent>(Revision of IEEE Std 1003.1-2008)</refcontent> | ||||
</reference> | ||||
<t> | <reference anchor="SCTP-STREAM-1"> | |||
In this description, transport features are | <front> | |||
presented following the nomenclature "CATEGORY.[SUBCATEGORY] | <title>Transparent Flow Mapping for NEAT</title> | |||
.FEATURENAME.PROTOCOL", | <author fullname="Felix Weinrank" initials="F" surname="Weinrank"/> | |||
equivalent to "pass 2" in <xref target="RFC8303" />. | <author fullname="Michael Tuexen" initials="M" surname="Tuexen"/> | |||
<!-- this was moved to terminology because it applies throug | <date month="June" year="2017"/> | |||
hout: | </front> | |||
The PROTOCOL name "UDP(-Lite)" is used when transport featu | <refcontent>IFIP Networking 2017</refcontent> | |||
res are equivalent | <refcontent>Workshop on Future of Internet Transport (FIT 2017)</refcontent> | |||
for UDP and UDP-Lite; the PROTOCOL name "TCP" refers to both | ||||
TCP and MPTCP. | ||||
--> | ||||
We also sketch how functional or optimizing transport featur | ||||
es can be implemented by a transport system. | ||||
The "minimal set" derived in this document is meant to be im | ||||
plementable "one-sided" | ||||
over TCP, and, with limitations, UDP. Hence, for all transpo | ||||
rt features that are categorized as | ||||
"functional" or "optimizing", and for | ||||
which no matching TCP and/or UDP primitive exists in "pass 2 | ||||
" of <xref target="RFC8303" />, a brief | ||||
discussion on how to implement them over TCP and/or UDP is i | ||||
ncluded. | ||||
</t> | ||||
<t>We designate some transport features as "automatable" on the | </reference> | |||
basis of a broader decision | ||||
that affects multiple transport features: | ||||
<list style="symbols"> | ||||
<t>Most transport features that are related to multi-str | ||||
eaming were designated as "automatable". | ||||
This was done because the decision on whether to use | ||||
multi-streaming or not does not depend on application-specific | ||||
knowledge. This means that a connection that is exhi | ||||
bited to an application could be | ||||
implemented by using a single stream of an SCTP asso | ||||
ciation instead of mapping it to | ||||
a complete SCTP association or TCP connection. This | ||||
could be achieved by using more than one stream when | ||||
an SCTP association is first established (CONNECT.SC | ||||
TP parameter "outbound stream count"), | ||||
maintaining an internal stream number, and using thi | ||||
s stream number | ||||
when sending data (SEND.SCTP parameter "stream numbe | ||||
r"). Closing or aborting | ||||
a connection could then simply free the stream numbe | ||||
r for future use. | ||||
This is discussed further in <xref target="nostream" | ||||
/>. | ||||
</t> | ||||
<t>With the exception of "Disable MPTCP", | ||||
all transport features that are related to using mul | ||||
tiple paths or the choice | ||||
of the network interface were designated as "automat | ||||
able". For example, "Listen" could | ||||
always listen on all available | ||||
interfaces and "Connect" could use the default inter | ||||
face for the destination IP address. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | <reference anchor="SCTP-STREAM-2"> | |||
Finally, in three cases, transport features are aggregated a | <front> | |||
nd/or slightly changed from <xref target="RFC8303" /> in the description below. | <title>Beneficial Transparent Deployment of SCTP: The Missing Pieces | |||
These transport | </title> | |||
features are marked as "CHANGED FROM RFC8303". These do not | <author fullname="Michael Welzl" initials="M" surname="Welzl"/> | |||
add any new functionality but just represent a | <author fullname="Florian Niederbacher" initials="F" surname="Nieder | |||
simple refactoring step that helps to streamline the derivat | bacher"/> | |||
ion process (e.g., by removing | <author fullname="Stein Gjessing" initials="S" surname="Gjessing"/> | |||
a choice of a parameter for the sake of applications that ma | <date month="December" year="2011"/> | |||
y not care about this choice). | </front> | |||
The corresponding transport features are automatable, | <seriesInfo name="DOI" value="10.1109/GLOCOM.2011.6133554"/> | |||
and they are listed immediately below the "CHANGED FROM RFC8 | <refcontent>IEEE GlobeCom 2011</refcontent> | |||
303" transport feature. | </reference> | |||
</t> | </references> | |||
</references> | ||||
<section anchor="conn-super" title="CONNECTION Related Transport | <section anchor="super" numbered="true" toc="default"> | |||
Features"> | <name>The Superset of Transport Features</name> | |||
<t> | ||||
In this description, transport features are presented | ||||
following the nomenclature | ||||
"CATEGORY.[SUBCATEGORY].FEATURENAME.PROTOCOL", equivalent | ||||
to "pass 2" in <xref target="RFC8303" format="default"/>. | ||||
We also sketch how functional or optimizing transport | ||||
features can be implemented by a transport system. The | ||||
"minimal set" derived in this document is meant to be | ||||
implementable "one-sided" over TCP and, with limitations, | ||||
UDP. Hence, for all transport features that are | ||||
categorized as "functional" or "optimizing", and for which | ||||
no matching TCP and/or UDP primitive exists in "pass 2" of | ||||
<xref target="RFC8303" format="default"/>, a brief | ||||
discussion on how to implement them over TCP and/or UDP is | ||||
included. | ||||
</t> | ||||
<t>We designate some transport features as "automatable" on the basis of | ||||
a broader decision that affects multiple transport features: | ||||
</t> | ||||
<ul> | ||||
<li>Most transport features that are related to multi-streaming were | ||||
designated as "automatable". This was done because the decision on | ||||
whether or not to use multi-streaming does not depend on | ||||
application-specific knowledge. This means that a connection that is | ||||
exhibited to an application could be implemented by using a single | ||||
stream of an SCTP association instead of mapping it to a complete SCTP | ||||
association or TCP connection. This could be achieved by using more | ||||
than one stream when an SCTP association is first established | ||||
(CONNECT.SCTP parameter "outbound stream count"), maintaining an | ||||
internal stream number, and using this stream number when sending data | ||||
(SEND.SCTP parameter "stream number"). Closing or aborting a | ||||
connection could then simply free the stream number for future use. | ||||
This is discussed further in <xref target="nostream" | ||||
format="default"/>. | ||||
</li> | ||||
<li>With the exception of "Disable MPTCP", all transport features that | ||||
are related to using multiple paths or the choice of the network | ||||
interface were designated as "automatable". For example, "Listen" | ||||
could always listen on all available interfaces and "Connect" could | ||||
use the default interface for the destination IP address. | ||||
</li> | ||||
</ul> | ||||
<t>ESTABLISHMENT:<vspace /> | <t> | |||
Finally, in three cases, transport features are aggregated | ||||
and/or slightly changed from <xref target="RFC8303" | ||||
format="default"/> in the description below. These | ||||
transport features are marked as "CHANGED FROM | ||||
RFC 8303". These do not add any new functionality but just | ||||
represent a simple refactoring step that helps to | ||||
streamline the derivation process (e.g., by removing a | ||||
choice of a parameter for the sake of applications that | ||||
may not care about this choice). The corresponding | ||||
transport features are automatable, and they are listed | ||||
immediately below the "CHANGED FROM RFC 8303" transport | ||||
feature. | ||||
</t> | ||||
<section anchor="conn-super" numbered="true" toc="default"> | ||||
<name>CONNECTION-Related Transport Features</name> | ||||
<t>ESTABLISHMENT: | ||||
<list style="symbols"> | </t> | |||
<t>Connect <vspace /> | <ul> | |||
Protocols: TCP, SCTP, UDP(-Lite) <vspace /> | <li> | |||
Functional because the notion of a connection is | <t>Connect </t> | |||
often reflected in applications | <t> | |||
as an expectation to be able to communicate afte | Protocols: TCP, SCTP, UDP(-Lite) </t> | |||
r a "Connect" succeeded, | <t> | |||
with a communication sequence relating to this t | Functional because the notion of a connection | |||
ransport feature that is defined by the | is often reflected in applications as an | |||
application protocol.<vspace /> | expectation to be able to communicate after a | |||
Implementation: via CONNECT.TCP, CONNECT.SCTP or | "Connect" succeeded, with a communication | |||
CONNECT.UDP(-Lite).<vspace /> | sequence relating to this transport feature | |||
<vspace blankLines='1'/> | that is defined by the application | |||
</t> | protocol.</t> | |||
<t> | ||||
Implementation: via CONNECT.TCP, CONNECT.SCTP or | ||||
CONNECT.UDP(-Lite).</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Specify which IP Options must always be used</t> | ||||
<t> | ||||
Protocols: TCP, UDP(-Lite)</t> | ||||
<t> | ||||
Automatable because IP Options relate to | ||||
knowledge about the network, not the | ||||
application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Request multiple streams</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because using multi-streaming does | ||||
not require application-specific knowledge | ||||
(example implementations of using | ||||
multi-streaming without involving the | ||||
application are described in <xref | ||||
target="SCTP-STREAM-1" format="default"/> and | ||||
<xref target="SCTP-STREAM-2" | ||||
format="default"/>).</t> | ||||
<t> | ||||
Implementation: see <xref target="nostream" form | ||||
at="default"/>. | ||||
</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Limit the number of inbound streams</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because using multi-streaming does n | ||||
ot require application-specific knowledge.</t> | ||||
<t> | ||||
Implementation: see <xref target="nostream" form | ||||
at="default"/>. | ||||
</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Specify number of attempts and/or timeout for the first establish | ||||
ment message</t> | ||||
<t> | ||||
Protocols: TCP, SCTP</t> | ||||
<t> | ||||
Functional because this is closely related to | ||||
potentially assumed reliable data delivery for | ||||
data that is sent before or during connection | ||||
establishment.</t> | ||||
<t> | ||||
Implementation: using a parameter of CONNECT.TCP | ||||
and CONNECT.SCTP.</t> | ||||
<t> | ||||
Implementation over UDP: do nothing (this is | ||||
irrelevant in the case of UDP because there, | ||||
reliable data delivery is not assumed). | ||||
</t> | ||||
<t>Specify which IP Options must always be used<vspa | <t/> | |||
ce /> | </li> | |||
Protocols: TCP, UDP(-Lite)<vspace /> | <li> | |||
Automatable because IP Options relate to knowled | <t>Obtain multiple sockets</t> | |||
ge about the network, not the application.<vspace /> | <t> | |||
<vspace blankLines='1'/> | Protocols: SCTP</t> | |||
</t> | <t> | |||
<t>Request multiple streams<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because using multi-streaming does n | ||||
ot require application-specific knowledge | ||||
(example implementations of using multi-streamin | ||||
g without involving the application | ||||
are described in <xref target="SCTP-stream-1"/> | ||||
and <xref target="SCTP-stream-2"/>).<vspace /> | ||||
Implementation: see <xref target="nostream"/>. | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Limit the number of inbound streams<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because using multi-streaming does n | ||||
ot require application-specific knowledge.<vspace /> | ||||
Implementation: see <xref target="nostream"/>. | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Specify number of attempts and/or timeout for the | ||||
first establishment message<vspace /> | ||||
Protocols: TCP, SCTP<vspace /> | ||||
Functional because this is closely related to po | ||||
tentially assumed reliable data delivery for | ||||
data that is sent before or during connection es | ||||
tablishment.<vspace /> | ||||
Implementation: Using a parameter of CONNECT.TCP | ||||
and CONNECT.SCTP.<vspace /> | ||||
Implementation over UDP: Do nothing (this is irr | ||||
elevant in case of UDP because there, reliable | ||||
data delivery is not assumed). | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Obtain multiple sockets<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because the non-parallel usage of mu ltiple paths to communicate between the same end | Automatable because the non-parallel usage of mu ltiple paths to communicate between the same end | |||
hosts relates to knowledge about | hosts relates to knowledge about | |||
the network, not the application.<vspace /> | the network, not the application.</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Disable MPTCP<vspace /> | <li> | |||
Protocols: MPTCP<vspace /> | <t>Disable MPTCP</t> | |||
Optimizing because the parallel usage of multipl | <t> | |||
e paths to communicate between the same end hosts | Protocols: MPTCP</t> | |||
can improve performance. Whether to use this fea | <t> | |||
ture depends on knowledge about the | Optimizing because the parallel usage of | |||
network as well as application-specific knowledg | multiple paths to communicate between the same | |||
e (see Section 3.1 of <xref target="RFC6897"/>).<vspace /> | end hosts can improve performance. Whether or | |||
Implementation: via a boolean parameter in CONNE | not to use this feature depends on knowledge | |||
CT.MPTCP.<vspace /> | about the network as well as | |||
Implementation over TCP: Do nothing.<vspace /> | application-specific knowledge (see <xref | |||
Implementation over UDP: Do nothing. | target="RFC6897" sectionFormat="of" section="3.1" | |||
<vspace blankLines='1'/> | />).</t> | |||
</t> | <t> | |||
<t>Configure authentication<vspace /> | Implementation: via a boolean parameter in CONNE | |||
Protocols: TCP, SCTP<vspace /> | CT.MPTCP.</t> | |||
Functional because this has a direct influence o | <t> | |||
n security.<vspace /> | Implementation over TCP: do nothing.</t> | |||
Implementation: via parameters in CONNECT.TCP an | <t> | |||
d CONNECT.SCTP. | Implementation over UDP: do nothing. | |||
With TCP, this allows to configure Master Key Tu | </t> | |||
ples (MKTs) to | <t/> | |||
authenticate complete segments (including the TC | </li> | |||
P IPv4 pseudoheader, TCP header, and TCP data). | <li> | |||
With SCTP, this allows to specify which chunk ty | <t>Configure authentication</t> | |||
pes must always be authenticated. | <t> | |||
Authenticating only certain chunk types creates | Protocols: TCP, SCTP</t> | |||
a reduced level of security that is not | <t> | |||
supported by TCP; to be compatible, this should | Functional because this has a direct influence o | |||
therefore only allow to authenticate all chunk types. | n security.</t> | |||
Key material must be provided in a way that is c | <t> | |||
ompatible with both <xref target="RFC4895"/> and <xref target="RFC5925"/>.<vspac | Implementation: via parameters in CONNECT.TCP | |||
e /> | and CONNECT.SCTP. With TCP, this allows | |||
Implementation over UDP: Not possible (UDP does | configuring Master Key Tuples (MKTs) to | |||
not offer this functionality). | authenticate complete segments (including the | |||
<vspace blankLines='1'/> | TCP IPv4 pseudoheader, TCP header, and TCP | |||
</t> | data). With SCTP, this allows specifying | |||
<t>Indicate (and/or obtain upon completion) an Adapt | which chunk types must always be | |||
ation Layer via an adaptation code point<vspace /> | authenticated. Authenticating only certain | |||
Protocols: SCTP<vspace /> | chunk types creates a reduced level of | |||
Functional because it allows to send extra data | security that is not supported by TCP; to be | |||
for the sake | compatible, this should therefore only allow | |||
of identifying an adaptation layer, which by its | to authenticate all chunk types. Key material | |||
elf is application-specific.<vspace /> | must be provided in a way that is compatible | |||
Implementation: via a parameter in CONNECT.SCTP. | with both <xref target="RFC4895" | |||
<vspace /> | format="default"/> and <xref target="RFC5925" | |||
Implementation over TCP: not possible (TCP does | format="default"/>.</t> | |||
not offer this functionality).<vspace /> | <t> | |||
Implementation over UDP: not possible (UDP does | Implementation over UDP: not possible (UDP does | |||
not offer this functionality).<vspace /> | not offer this functionality). | |||
<vspace blankLines='1'/> | </t> | |||
</t> | <t/> | |||
<t>Request to negotiate interleaving of user message | </li> | |||
s<vspace /> | <li> | |||
Protocols: SCTP<vspace /> | <t>Indicate (and/or obtain upon completion) an Adaptation Layer via | |||
an adaptation code point</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Functional because it allows sending extra | ||||
data for the sake of identifying an adaptation | ||||
layer, which by itself is application | ||||
specific.</t> | ||||
<t> | ||||
Implementation: via a parameter in CONNECT.SCTP. | ||||
</t> | ||||
<t> | ||||
Implementation over TCP: not possible. (TCP does | ||||
not offer this functionality.)</t> | ||||
<t> | ||||
Implementation over UDP: not possible. (UDP does | ||||
not offer this functionality.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Request to negotiate interleaving of user messages</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because it requires using multiple s treams, but | Automatable because it requires using multiple s treams, but | |||
requesting multiple streams in the CONNECTION.ES TABLISHMENT category is | requesting multiple streams in the CONNECTION.ES TABLISHMENT category is | |||
automatable.<vspace /> | automatable.</t> | |||
<t> | ||||
Implementation: controlled via a parameter in CO NNECT.SCTP. One possible | Implementation: controlled via a parameter in CO NNECT.SCTP. One possible | |||
implementation is to always try to enable interl | implementation is to always try to enable interl | |||
eaving.<vspace /> | eaving.</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Hand over a message to reliably transfer (possibl | <li> | |||
y multiple times) before connection establishment<vspace /> | <t>Hand over a message to reliably transfer (possibly multiple times | |||
Protocols: TCP<vspace /> | ) before connection establishment</t> | |||
<t> | ||||
Protocols: TCP</t> | ||||
<t> | ||||
Functional because this is closely tied to prope rties of the data that an application | Functional because this is closely tied to prope rties of the data that an application | |||
sends or expects to receive.<vspace /> | sends or expects to receive.</t> | |||
Implementation: via a parameter in CONNECT.TCP.< | <t> | |||
vspace /> | Implementation: via a parameter in CONNECT.TCP.< | |||
Implementation over UDP: not possible (UDP does | /t> | |||
not provide reliability). | <t> | |||
<vspace blankLines='1'/> | Implementation over UDP: not possible. (UDP does | |||
</t> | not provide reliability.) | |||
<t>Hand over a message to reliably transfer during c | </t> | |||
onnection establishment<vspace /> | <t/> | |||
Protocols: SCTP<vspace /> | </li> | |||
Functional because this can only work if the mes | <li> | |||
sage is limited in size, making it closely | <t>Hand over a message to reliably transfer during connection establ | |||
tied to properties of the data that an applicati | ishment</t> | |||
on | <t> | |||
sends or expects to receive.<vspace /> | Protocols: SCTP</t> | |||
Implementation: via a parameter in CONNECT.SCTP. | <t> | |||
<vspace /> | Functional because this can only work if the | |||
Implementation over TCP: not possible (TCP does | message is limited in size, making it closely | |||
not allow identification of message boundaries | tied to properties of the data that an | |||
because it provides a byte stream service)<vspac | application sends or expects to receive.</t> | |||
e /> | <t> | |||
<!-- | Implementation: via a parameter in CONNECT.SCTP. | |||
The text below is wrong because TCP is not mess | </t> | |||
age-based! | <t> | |||
Implementation over TCP: transmit the message | ||||
Implementation over TCP: this is also possible | with the SYN packet, sacrificing the ability | |||
with TCP, but not addressed | to identify message boundaries. | |||
in <xref target="RFC8303"/> because the specific | </t> | |||
ation that it is based upon | <t> | |||
does not clearly specify how to implement it | Implementation over UDP: not possible. (UDP is | |||
using the TCP's ``user commands''. | unreliable.) | |||
This will be addressed in an | </t> | |||
update <xref target="RFC793bis"/>.<vspace /> | <t/> | |||
--> | </li> | |||
Implementation over UDP: not possible (UDP is un | <li> | |||
reliable). | <t>Enable UDP encapsulation with a specified remote UDP port number< | |||
<vspace blankLines='1'/> | /t> | |||
</t> | <t> | |||
<t>Enable UDP encapsulation with a specified remote | Protocols: SCTP</t> | |||
UDP port number<vspace /> | <t> | |||
Protocols: SCTP<vspace /> | Automatable because UDP encapsulation relates | |||
Automatable because UDP encapsulation relates to | to knowledge about the network, not the | |||
knowledge about the network, not the application.<vspace /> | application.</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
</ul> | ||||
</list></t> | <t>AVAILABILITY: | |||
<t>AVAILABILITY:<vspace /> | ||||
<list style="symbols"> | </t> | |||
<t>Listen<vspace /> | <ul > | |||
Protocols: TCP, SCTP, UDP(-Lite)<vspace /> | <li> | |||
Functional because the notion of accepting conne | <t>Listen</t> | |||
ction requests is often reflected | <t> | |||
in applications as an expectation to be able to | Protocols: TCP, SCTP, UDP(-Lite)</t> | |||
communicate after a "Listen" succeeded, | ||||
with a communication sequence relating to this t | ||||
ransport feature that is defined by the | ||||
application protocol.<vspace /> | ||||
CHANGED FROM RFC8303. This differs from the 3 au | ||||
tomatable transport features below in that it leaves the choice | ||||
of interfaces for listening open.<vspace /> | ||||
Implementation: by listening on all interfaces v | ||||
ia LISTEN.TCP (not providing a local IP address) | ||||
or LISTEN.SCTP (providing SCTP port number / add | ||||
ress pairs for all local IP addresses). | ||||
LISTEN.UDP(-Lite) supports both methods.<vspace | ||||
blankLines='1'/> | ||||
</t> | ||||
<t>Listen, 1 specified local interface<vspace /> | ||||
Protocols: TCP, SCTP, UDP(-Lite)<vspace /> | ||||
Automatable because decisions about local interf | ||||
aces relate to knowledge about the | ||||
network and the Operating System, not the applic | ||||
ation.<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Listen, N specified local interfaces<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because decisions about local interf | ||||
aces relate to knowledge about the | ||||
network and the Operating System, not the applic | ||||
ation.<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Listen, all local interfaces<vspace /> | ||||
Protocols: TCP, SCTP, UDP(-Lite)<vspace /> | ||||
Automatable because decisions about local interf | ||||
aces relate to knowledge about the | ||||
network and the Operating System, not the applic | ||||
ation.<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Specify which IP Options must always be used<vspa | ||||
ce /> | ||||
Protocols: TCP, UDP(-Lite)<vspace /> | ||||
Automatable because IP Options relate to knowled | ||||
ge about the network, not the application.<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Disable MPTCP<vspace /> | ||||
Protocols: MPTCP<vspace /> | ||||
Optimizing because the parallel usage of multipl | ||||
e paths to communicate between the same end hosts | ||||
can improve performance. Whether to use this fea | ||||
ture depends on knowledge about the | ||||
network as well as application-specific knowledg | ||||
e (see Section 3.1 of <xref target="RFC6897"/>).<vspace /> | ||||
Implementation: via a boolean parameter in LISTE | ||||
N.MPTCP.<vspace /> | ||||
Implementation over TCP: Do nothing.<vspace /> | ||||
Implementation over UDP: Do nothing. | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Configure authentication<vspace /> | ||||
Protocols: TCP, SCTP<vspace /> | ||||
Functional because this has a direct influence o | ||||
n security.<vspace /> | ||||
Implementation: via parameters in LISTEN.TCP and | ||||
LISTEN.SCTP.<vspace /> | ||||
Implementation over TCP: With TCP, this allows t | ||||
o configure Master Key Tuples (MKTs) to | ||||
authenticate complete segments (including the TC | ||||
P IPv4 pseudoheader, TCP header, and TCP data). | ||||
With SCTP, this allows to specify which chunk ty | ||||
pes must always be authenticated. | ||||
Authenticating only certain chunk types creates | ||||
a reduced level of security that is not | ||||
supported by TCP; to be compatible, this should | ||||
therefore only allow to authenticate all chunk types. | ||||
Key material must be provided in a way that is c | ||||
ompatible with both <xref target="RFC4895"/> and <xref target="RFC5925"/>.<vspac | ||||
e /> | ||||
Implementation over UDP: not possible (UDP does | ||||
not offer authentication). | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Obtain requested number of streams<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because using multi-streaming does n | ||||
ot require application-specific knowledge.<vspace /> | ||||
Implementation: see <xref target="nostream"/>. | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Limit the number of inbound streams<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because using multi-streaming does n | ||||
ot require application-specific knowledge.<vspace /> | ||||
Implementation: see <xref target="nostream"/>. | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Indicate (and/or obtain upon completion) an Adapt | ||||
ation Layer via an adaptation code point<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Functional because it allows to send extra data | ||||
for the sake | ||||
of identifying an adaptation layer, which by its | ||||
elf is application-specific.<vspace /> | ||||
Implementation: via a parameter in LISTEN.SCTP.< | ||||
vspace /> | ||||
Implementation over TCP: not possible (TCP does | ||||
not offer this functionality).<vspace /> | ||||
Implementation over UDP: not possible (UDP does | ||||
not offer this functionality). | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Request to negotiate interleaving of user message | ||||
s<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because it requires using multiple s | ||||
treams, but | ||||
requesting multiple streams in the CONNECTION.ES | ||||
TABLISHMENT category is | ||||
automatable.<vspace /> | ||||
Implementation: via a parameter in LISTEN.SCTP.< | ||||
vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
</list></t> | ||||
<t>MAINTENANCE:<vspace /> | <t> | |||
Functional because the notion of accepting | ||||
connection requests is often reflected in | ||||
applications as an expectation to be able to | ||||
communicate after a "Listen" succeeded, with a | ||||
communication sequence relating to this | ||||
transport feature that is defined by the | ||||
application protocol.</t> | ||||
<t> | ||||
CHANGED FROM RFC 8303. This differs from the 3 | ||||
automatable transport features below in that | ||||
it leaves the choice of interfaces for | ||||
listening open.</t> | ||||
<t> | ||||
Implementation: by listening on all interfaces | ||||
via LISTEN.TCP (not providing a local IP | ||||
address) or LISTEN.SCTP (providing SCTP port | ||||
number / address pairs for all local IP | ||||
addresses). LISTEN.UDP(-Lite) supports both | ||||
methods.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Listen, 1 specified local interface</t> | ||||
<t> | ||||
Protocols: TCP, SCTP, UDP(-Lite)</t> | ||||
<t> | ||||
Automatable because decisions about local | ||||
interfaces relate to knowledge about the | ||||
network and the Operating System, not the | ||||
application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Listen, N specified local interfaces</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because decisions about local | ||||
interfaces relate to knowledge about the | ||||
network and the Operating System, not the | ||||
application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Listen, all local interfaces</t> | ||||
<t> | ||||
Protocols: TCP, SCTP, UDP(-Lite)</t> | ||||
<t> | ||||
Automatable because decisions about local | ||||
interfaces relate to knowledge about the | ||||
network and the Operating System, not the | ||||
application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Specify which IP Options must always be used</t> | ||||
<t> | ||||
Protocols: TCP, UDP(-Lite)</t> | ||||
<t> | ||||
Automatable because IP Options relate to | ||||
knowledge about the network, not the | ||||
application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Disable MPTCP</t> | ||||
<t> | ||||
Protocols: MPTCP</t> | ||||
<t> | ||||
Optimizing because the parallel usage of | ||||
multiple paths to communicate between the same | ||||
end hosts can improve performance. Whether or | ||||
not to use this feature depends on knowledge | ||||
about the network as well as | ||||
application-specific knowledge (see <xref | ||||
target="RFC6897" sectionFormat="of" | ||||
section="3.1"/>).</t> | ||||
<t> | ||||
Implementation: via a boolean parameter in | ||||
LISTEN.MPTCP.</t> | ||||
<t> | ||||
Implementation over TCP: do nothing.</t> | ||||
<t> | ||||
Implementation over UDP: do nothing. | ||||
</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Configure authentication</t> | ||||
<t> | ||||
Protocols: TCP, SCTP</t> | ||||
<t> | ||||
Functional because this has a direct influence o | ||||
n security.</t> | ||||
<t> | ||||
Implementation: via parameters in LISTEN.TCP and | ||||
LISTEN.SCTP.</t> | ||||
<t> | ||||
Implementation over TCP: with TCP, this allows | ||||
configuring Master Key Tuples (MKTs) to | ||||
authenticate complete segments (including the | ||||
TCP IPv4 pseudoheader, TCP header, and TCP | ||||
data). With SCTP, this allows specifying | ||||
which chunk types must always be | ||||
authenticated. Authenticating only certain | ||||
chunk types creates a reduced level of | ||||
security that is not supported by TCP; to be | ||||
compatible, this should therefore only allow | ||||
to authenticate all chunk types. Key material | ||||
must be provided in a way that is compatible | ||||
with both <xref target="RFC4895" | ||||
format="default"/> and <xref target="RFC5925" | ||||
format="default"/>.</t> | ||||
<t> | ||||
Implementation over UDP: not possible. (UDP does | ||||
not offer authentication.) | ||||
</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Obtain requested number of streams</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because using multi-streaming does | ||||
not require application-specific | ||||
knowledge.</t> | ||||
<t> | ||||
Implementation: see <xref target="nostream" form | ||||
at="default"/>. | ||||
</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Limit the number of inbound streams</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because using multi-streaming does | ||||
not require application-specific | ||||
knowledge.</t> | ||||
<t> | ||||
Implementation: see <xref target="nostream" form | ||||
at="default"/>. | ||||
</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Indicate (and/or obtain upon completion) an Adaptation Layer via | ||||
an adaptation code point</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Functional because it allows sending extra | ||||
data for the sake of identifying an adaptation | ||||
layer, which by itself is | ||||
application specific.</t> | ||||
<t> | ||||
Implementation: via a parameter in LISTEN.SCTP.< | ||||
/t> | ||||
<t> | ||||
Implementation over TCP: not possible. (TCP does | ||||
not offer this functionality.)</t> | ||||
<t> | ||||
Implementation over UDP: not possible. (UDP does | ||||
not offer this functionality.) | ||||
</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Request to negotiate interleaving of user messages</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because it requires using multiple | ||||
streams, but requesting multiple streams in | ||||
the CONNECTION.ESTABLISHMENT category is | ||||
automatable.</t> | ||||
<t> | ||||
Implementation: via a parameter in LISTEN.SCTP.< | ||||
/t> | ||||
<t/> | ||||
</li> | ||||
</ul> | ||||
<t>MAINTENANCE: | ||||
<list style="symbols"> | </t> | |||
<t>Change timeout for aborting connection (using ret | <ul > | |||
ransmit limit or time value)<vspace /> | <li> | |||
Protocols: TCP, SCTP<vspace /> | <t>Change timeout for aborting connection (using retransmit limit or | |||
Functional because this is closely related to po | time value)</t> | |||
tentially assumed reliable data delivery.<vspace /> | <t> | |||
Implementation: via CHANGE_TIMEOUT.TCP or CHANGE | Protocols: TCP, SCTP</t> | |||
_TIMEOUT.SCTP.<vspace /> | <t> | |||
Implementation over UDP: not possible (UDP is un | Functional because this is closely related to po | |||
reliable and there is no connection timeout).<vspace /> | tentially assumed reliable data delivery.</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Implementation: via CHANGE_TIMEOUT.TCP or | |||
<t>Suggest timeout to the peer<vspace /> | CHANGE_TIMEOUT.SCTP.</t> | |||
Protocols: TCP<vspace /> | <t> | |||
Functional because this is closely related to po | Implementation over UDP: not possible. (UDP is u | |||
tentially assumed reliable data delivery.<vspace /> | nreliable and there is no connection timeout.)</t> | |||
Implementation: via CHANGE_TIMEOUT.TCP.<vspace / | <t/> | |||
> | </li> | |||
Implementation over UDP: not possible (UDP is un | <li> | |||
reliable and there is no connection timeout).<vspace /> | <t>Suggest timeout to the peer</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: TCP</t> | |||
<t>Disable Nagle algorithm<vspace /> | <t> | |||
Protocols: TCP, SCTP<vspace /> | Functional because this is closely related to | |||
Optimizing because this decision depends on know | potentially assumed reliable data | |||
ledge about the size of future data blocks | delivery.</t> | |||
and the delay between them.<vspace /> | <t> | |||
Implementation: via DISABLE_NAGLE.TCP and DISABL | Implementation: via CHANGE_TIMEOUT.TCP.</t> | |||
E_NAGLE.SCTP.<vspace /> | <t> | |||
Implementation over UDP: do nothing (UDP does no | Implementation over UDP: not possible. (UDP is | |||
t implement the Nagle algorithm).<vspace /> | unreliable and there is no connection | |||
<vspace blankLines='1'/> | timeout.)</t> | |||
</t> | <t/> | |||
<t>Request an immediate heartbeat, returning success | </li> | |||
/failure<vspace /> | <li> | |||
Protocols: SCTP<vspace /> | <t>Disable Nagle algorithm</t> | |||
Automatable because this informs about network-s | <t> | |||
pecific knowledge.<vspace /> | Protocols: TCP, SCTP</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Optimizing because this decision depends on | |||
<t>Notification of Excessive Retransmissions (early | knowledge about the size of future data blocks | |||
warning below abortion threshold)<vspace /> | and the delay between them.</t> | |||
Protocols: TCP<vspace /> | <t> | |||
Optimizing because it is an early warning to the | Implementation: via DISABLE_NAGLE.TCP and DISABL | |||
application, informing it of an impending | E_NAGLE.SCTP.</t> | |||
functional event.<vspace /> | <t> | |||
Implementation: via ERROR.TCP.<vspace /> | Implementation over UDP: do nothing (UDP does no | |||
Implementation over UDP: do nothing (there is no | t implement the Nagle algorithm).</t> | |||
abortion threshold).<vspace /> | <t/> | |||
<vspace blankLines='1'/> | </li> | |||
</t> | <li> | |||
<t>Add path<vspace /> | <t>Request an immediate heartbeat, returning success/failure</t> | |||
Protocols: MPTCP, SCTP<vspace /> | <t> | |||
MPTCP Parameters: source-IP; source-Port; destin | Protocols: SCTP</t> | |||
ation-IP; destination-Port<vspace /> | <t> | |||
SCTP Parameters: local IP address<vspace /> | Automatable because this informs about network-s | |||
pecific knowledge.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Notification of Excessive Retransmissions (early warning below ab | ||||
ortion threshold)</t> | ||||
<t> | ||||
Protocols: TCP</t> | ||||
<t> | ||||
Optimizing because it is an early warning to | ||||
the application, informing it of an impending | ||||
functional event.</t> | ||||
<t> | ||||
Implementation: via ERROR.TCP.</t> | ||||
<t> | ||||
Implementation over UDP: do nothing (there is no | ||||
abortion threshold).</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Add path</t> | ||||
<t> | ||||
Protocols: MPTCP, SCTP</t> | ||||
<t> | ||||
MPTCP Parameters: source-IP; source-Port; destin | ||||
ation-IP; destination-Port</t> | ||||
<t> | ||||
SCTP Parameters: local IP address</t> | ||||
<t> | ||||
Automatable because the choice of paths to commu nicate between the same end hosts relates to | Automatable because the choice of paths to commu nicate between the same end hosts relates to | |||
knowledge about the network, not the application | knowledge about the network, not the application | |||
.<vspace /> | .</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Remove path<vspace /> | <li> | |||
Protocols: MPTCP, SCTP<vspace /> | <t>Remove path</t> | |||
MPTCP Parameters: source-IP; source-Port; destin | <t> | |||
ation-IP; destination-Port<vspace /> | Protocols: MPTCP, SCTP</t> | |||
SCTP Parameters: local IP address<vspace /> | <t> | |||
MPTCP Parameters: source-IP; source-Port; destin | ||||
ation-IP; destination-Port</t> | ||||
<t> | ||||
SCTP Parameters: local IP address</t> | ||||
<t> | ||||
Automatable because the choice of paths to commu nicate between the same end host relates to | Automatable because the choice of paths to commu nicate between the same end host relates to | |||
knowledge about the network, not the application | knowledge about the network, not the application | |||
.<vspace /> | .</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Set primary path<vspace /> | <li> | |||
Protocols: SCTP<vspace /> | <t>Set primary path</t> | |||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because the choice of paths to commu nicate between the same end hosts relates to | Automatable because the choice of paths to commu nicate between the same end hosts relates to | |||
knowledge about the network, not the application | knowledge about the network, not the application | |||
.<vspace /> | .</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Suggest primary path to the peer<vspace /> | <li> | |||
Protocols: SCTP<vspace /> | <t>Suggest primary path to the peer</t> | |||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because the choice of paths to commu nicate between the same end hosts relates to | Automatable because the choice of paths to commu nicate between the same end hosts relates to | |||
knowledge about the network, not the application | knowledge about the network, not the application | |||
.<vspace /> | .</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Configure Path Switchover<vspace /> | <li> | |||
Protocols: SCTP<vspace /> | <t>Configure Path Switchover</t> | |||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because the choice of paths to commu nicate between the same end hosts relates to | Automatable because the choice of paths to commu nicate between the same end hosts relates to | |||
knowledge about the network, not the application | knowledge about the network, not the application | |||
.<vspace /> | .</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Obtain status (query or notification)<vspace /> | <li> | |||
Protocols: SCTP, MPTCP<vspace /> | <t>Obtain status (query or notification)</t> | |||
SCTP parameters: association | <t> | |||
connection state; destination transport address | Protocols: SCTP, MPTCP</t> | |||
list; destination transport | <t> | |||
address reachability states; | SCTP parameters: association connection state; | |||
current local and peer receiver window size; cur | destination transport address list; | |||
rent local congestion | destination transport address reachability | |||
window sizes; number of unacknowledged DATA chun | states; current local and peer receiver window | |||
ks; number of DATA chunks | size; current local congestion window sizes; | |||
pending receipt; primary path; most recent SRTT | number of unacknowledged DATA chunks; number | |||
on primary path; RTO on | of DATA chunks pending receipt; primary path; | |||
primary path; SRTT and RTO on other destination | most recent SRTT on primary path; RTO on | |||
addresses; MTU per path; | primary path; SRTT and RTO on other | |||
interleaving supported yes/no<vspace /> | destination addresses; MTU per path; | |||
MPTCP parameters: subflow-list (identified by so | interleaving supported yes/no</t> | |||
urce-IP; source-Port; destination-IP; destination-Port)<vspace /> | <t> | |||
MPTCP parameters: subflow-list (identified by so | ||||
urce-IP; source-Port; destination-IP; destination-Port)</t> | ||||
<t> | ||||
Automatable because these parameters relate to k nowledge about | Automatable because these parameters relate to k nowledge about | |||
the network, not the application.<vspace /> | the network, not the application.</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Specify DSCP field<vspace /> | <li> | |||
Protocols: TCP, SCTP, UDP(-Lite)<vspace /> | <t>Specify DSCP field</t> | |||
Optimizing because choosing a suitable DSCP valu | <t> | |||
e requires application-specific knowledge.<vspace /> | Protocols: TCP, SCTP, UDP(-Lite)</t> | |||
Implementation: via SET_DSCP.TCP / SET_DSCP.SCTP | <t> | |||
/ SET_DSCP.UDP(-Lite)<vspace /> | Optimizing because choosing a suitable DSCP valu | |||
<vspace blankLines='1'/> | e requires application-specific knowledge.</t> | |||
</t> | <t> | |||
<t>Notification of ICMP error message arrival<vspace | Implementation: via SET_DSCP.TCP / SET_DSCP.SCTP | |||
/> | / SET_DSCP.UDP(-Lite).</t> | |||
Protocols: TCP, UDP(-Lite)<vspace /> | <t/> | |||
Optimizing because these messages can inform abo | </li> | |||
ut success or failure of functional | <li> | |||
transport features | <t>Notification of ICMP error message arrival</t> | |||
(e.g., host unreachable relates to "Connect")<vs | <t> | |||
pace /> | Protocols: TCP, UDP(-Lite)</t> | |||
Implementation: via ERROR.TCP or ERROR.UDP(-Lite | <t> | |||
).<vspace /> | Optimizing because these messages can inform | |||
<vspace blankLines='1'/> | about success or failure of functional | |||
</t> | transport features (e.g., host unreachable | |||
<t>Obtain information about interleaving support<vsp | relates to "Connect").</t> | |||
ace /> | <t> | |||
Protocols: SCTP<vspace /> | Implementation: via ERROR.TCP or ERROR.UDP(-Lite | |||
Automatable because it requires using multiple s | .)</t> | |||
treams, but | <t/> | |||
requesting multiple streams in the CONNECTION.ES | </li> | |||
TABLISHMENT category is | <li> | |||
automatable.<vspace /> | <t>Obtain information about interleaving support</t> | |||
Implementation: via STATUS.SCTP.<vspace /> | <t> | |||
<vspace blankLines='1'/> | Protocols: SCTP</t> | |||
</t> | <t> | |||
<t>Change authentication parameters<vspace /> | Automatable because it requires using multiple | |||
Protocols: TCP, SCTP<vspace /> | streams, but requesting multiple streams in | |||
Functional because this has a direct influence o | the CONNECTION.ESTABLISHMENT category is | |||
n security.<vspace /> | automatable.</t> | |||
Implementation: via SET_AUTH.TCP and SET_AUTH.SC | <t> | |||
TP.<vspace /> | Implementation: via STATUS.SCTP.</t> | |||
Implementation over TCP: With SCTP, this allows | <t/> | |||
to adjust key_id, key, and hmac_id. | </li> | |||
With TCP, this allows to change the preferred ou | <li> | |||
tgoing MKT (current_key) | <t>Change authentication parameters</t> | |||
and the preferred incoming MKT (rnext_key), resp | <t> | |||
ectively, for a segment that is sent on the connection. | Protocols: TCP, SCTP</t> | |||
Key material must be provided in a way that is c | <t> | |||
ompatible with both <xref target="RFC4895"/> and <xref target="RFC5925"/>.<vspac | Functional because this has a direct influence o | |||
e /> | n security.</t> | |||
Implementation over UDP: not possible (UDP does | <t> | |||
not offer authentication).<vspace /> | Implementation: via SET_AUTH.TCP and SET_AUTH.SC | |||
<vspace blankLines='1'/> | TP.</t> | |||
</t> | <t> | |||
<t>Obtain authentication information<vspace /> | Implementation over TCP: with SCTP, this | |||
Protocols: SCTP<vspace /> | allows adjusting key_id, key, and hmac_id. | |||
Functional because authentication decisions may | With TCP, this allows changing the preferred | |||
have been made by the peer, | outgoing MKT (current_key) and the preferred | |||
and this has an influence on the necessary appli | incoming MKT (rnext_key), respectively, for a | |||
cation-level measures to provide a | segment that is sent on the connection. Key | |||
certain level of security.<vspace /> | material must be provided in a way that is | |||
Implementation: via GET_AUTH.SCTP.<vspace /> | compatible with both <xref target="RFC4895" | |||
Implementation over TCP: With SCTP, this allows | format="default"/> and <xref target="RFC5925" | |||
to obtain key_id and a chunk list. | format="default"/>.</t> | |||
With TCP, this allows to obtain current_key and | <t> | |||
rnext_key from a previously received segment. | Implementation over UDP: not possible. (UDP does | |||
Key material must be provided in a way that is c | not offer authentication.)</t> | |||
ompatible with both <xref target="RFC4895"/> and <xref target="RFC5925"/>.<vspac | <t/> | |||
e /> | </li> | |||
Implementation over UDP: not possible (UDP does | <li> | |||
not offer authentication).<vspace /> | <t>Obtain authentication information</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: SCTP</t> | |||
<t>Reset Stream<vspace /> | <t> | |||
Protocols: SCTP<vspace /> | Functional because authentication decisions | |||
Automatable because using multi-streaming does n | may have been made by the peer, and this has | |||
ot require application-specific knowledge.<vspace /> | an influence on the necessary | |||
Implementation: see <xref target="nostream"/>. | application-level measures to provide a | |||
<vspace blankLines='1'/> | certain level of security.</t> | |||
</t> | <t> | |||
<t>Notification of Stream Reset<vspace /> | Implementation: via GET_AUTH.SCTP.</t> | |||
Protocols: STCP<vspace /> | <t> | |||
Automatable because using multi-streaming does n | Implementation over TCP: with SCTP, this | |||
ot require application-specific knowledge.<vspace /> | allows obtaining key_id and a chunk list. | |||
Implementation: see <xref target="nostream"/>. | With TCP, this allows obtaining current_key | |||
<vspace blankLines='1'/> | and rnext_key from a previously received | |||
</t> | segment. Key material must be provided in a | |||
<t>Reset Association<vspace /> | way that is compatible with both <xref | |||
Protocols: SCTP<vspace /> | target="RFC4895" format="default"/> and <xref | |||
Automatable because deciding to reset an associa | target="RFC5925" format="default"/>.</t> | |||
tion does not require application-specific knowledge.<vspace /> | <t> | |||
Implementation: via RESET_ASSOC.SCTP.<vspace /> | Implementation over UDP: not possible. (UDP does | |||
<vspace blankLines='1'/> | not offer authentication.)</t> | |||
</t> | <t/> | |||
<t>Notification of Association Reset<vspace /> | </li> | |||
Protocols: STCP<vspace /> | <li> | |||
Automatable because this notification does not r | <t>Reset Stream</t> | |||
elate to application-specific knowledge.<vspace /> | <t> | |||
<vspace blankLines='1'/> | Protocols: SCTP</t> | |||
</t> | <t> | |||
<t>Add Streams<vspace /> | Automatable because using multi-streaming does n | |||
Protocols: SCTP<vspace /> | ot require application-specific knowledge.</t> | |||
Automatable because using multi-streaming does n | <t> | |||
ot require application-specific knowledge.<vspace /> | Implementation: see <xref target="nostream" form | |||
Implementation: see <xref target="nostream"/>. | at="default"/>. | |||
<vspace blankLines='1'/> | </t> | |||
</t> | <t/> | |||
<t>Notification of Added Stream<vspace /> | </li> | |||
Protocols: STCP<vspace /> | <li> | |||
Automatable because using multi-streaming does n | <t>Notification of Stream Reset</t> | |||
ot require application-specific knowledge.<vspace /> | <t> | |||
Implementation: see <xref target="nostream"/>. | Protocols: STCP</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Automatable because using multi-streaming does n | |||
<t>Choose a scheduler to operate between streams of | ot require application-specific knowledge.</t> | |||
an association<vspace /> | <t> | |||
Protocols: SCTP<vspace /> | Implementation: see <xref target="nostream" form | |||
Optimizing because the scheduling decision requi | at="default"/>. | |||
res application-specific knowledge. | </t> | |||
However, if a transport system would not use thi | <t/> | |||
s, or wrongly configure it on its own, this would only | </li> | |||
affect the performance of data transfers; the ou | <li> | |||
tcome would still be correct within the "best effort" | <t>Reset Association</t> | |||
service model.<vspace /> | <t> | |||
Implementation: using SET_STREAM_SCHEDULER.SCTP. | Protocols: SCTP</t> | |||
<vspace /> | <t> | |||
Implementation over TCP: do nothing (streams are | Automatable because deciding to reset an associa | |||
not available in TCP, but no guarantee is | tion does not require application-specific knowledge.</t> | |||
given that this transport feature has any effect | <t> | |||
).<vspace /> | Implementation: via RESET_ASSOC.SCTP.</t> | |||
Implementation over UDP: do nothing (streams are | <t/> | |||
not available in UDP, but no guarantee is | </li> | |||
given that this transport feature has any effect | <li> | |||
).<vspace /> | <t>Notification of Association Reset</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: STCP</t> | |||
<t>Configure priority or weight for a scheduler<vspa | <t> | |||
ce /> | Automatable because this notification does not r | |||
Protocols: SCTP<vspace /> | elate to application-specific knowledge.</t> | |||
Optimizing because the priority or weight requir | <t/> | |||
es application-specific knowledge. | </li> | |||
However, if a transport system would not use thi | <li> | |||
s, or wrongly configure it on its own, this would only | <t>Add Streams</t> | |||
affect the performance of data transfers; the ou | <t> | |||
tcome would still be correct within the "best effort" | Protocols: SCTP</t> | |||
service model.<vspace /> | <t> | |||
Implementation: using CONFIGURE_STREAM_SCHEDULER | Automatable because using multi-streaming does n | |||
.SCTP.<vspace /> | ot require application-specific knowledge.</t> | |||
Implementation over TCP: do nothing (streams are | <t> | |||
not available in TCP, but no guarantee is | Implementation: see <xref target="nostream" form | |||
given that this transport feature has any effect | at="default"/>. | |||
).<vspace /> | </t> | |||
Implementation over UDP: do nothing (streams are | <t/> | |||
not available in UDP, but no guarantee is | </li> | |||
given that this transport feature has any effect | <li> | |||
).<vspace /> | <t>Notification of Added Stream</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: STCP</t> | |||
<t>Configure send buffer size<vspace /> | <t> | |||
Protocols: SCTP<vspace /> | Automatable because using multi-streaming does n | |||
Automatable because this decision relates to kno | ot require application-specific knowledge.</t> | |||
wledge about the | <t> | |||
network and the Operating System, not the applic | Implementation: see <xref target="nostream" form | |||
ation (see also the | at="default"/>. | |||
discussion in <xref target="rundry"/>).<vspace / | </t> | |||
> | <t/> | |||
<vspace blankLines='1'/> | </li> | |||
</t> | <li> | |||
<t>Configure receive buffer (and rwnd) size<vspace / | <t>Choose a scheduler to operate between streams of an association</ | |||
> | t> | |||
Protocols: SCTP<vspace /> | <t> | |||
Automatable because this decision relates to kno | Protocols: SCTP</t> | |||
wledge about the network and the | <t> | |||
Operating System, not the application.<vspace /> | Optimizing because the scheduling decision | |||
<vspace blankLines='1'/> | requires application-specific knowledge. | |||
</t> | However, if a transport system would not use | |||
<t>Configure message fragmentation<vspace /> | this, or wrongly configure it on its own, this | |||
Protocols: SCTP<vspace /> | would only affect the performance of data | |||
Automatable because this relates to knowledge ab | transfers; the outcome would still be correct | |||
out the network and the Operating System, | within the "best effort" service model.</t> | |||
not the application. Note that this SCTP feature | <t> | |||
does not control IP-level fragmentation, | Implementation: using SET_STREAM_SCHEDULER.SCTP. | |||
but decides on fragmentation of messages by SCTP | </t> | |||
, in the end system.<vspace /> | <t> | |||
Implementation: by always enabling it with CONFI | Implementation over TCP: do nothing (streams | |||
G_FRAGMENTATION.SCTP and auto-setting the | are not available in TCP, but no guarantee is | |||
fragmentation size based on network or Operating | given that this transport feature has any | |||
System conditions.<vspace /> | effect).</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Implementation over UDP: do nothing (streams | |||
<t>Configure PMTUD<vspace /> | are not available in UDP, but no guarantee is | |||
Protocols: SCTP<vspace /> | given that this transport feature has any | |||
Automatable because Path MTU Discovery relates t | effect).</t> | |||
o knowledge about the network, not the | <t/> | |||
application.<vspace /> | </li> | |||
<vspace blankLines='1'/> | <li> | |||
</t> | <t>Configure priority or weight for a scheduler</t> | |||
<t>Configure delayed SACK timer<vspace /> | <t> | |||
Protocols: SCTP<vspace /> | Protocols: SCTP</t> | |||
Automatable because the receiver-side decision t | <t> | |||
o delay sending SACKs relates to knowledge about the network, | Optimizing because the priority or weight | |||
not the application (it can be relevant for a se | requires application-specific knowledge. | |||
nding application to request not to delay the SACK | However, if a transport system would not use | |||
of a message, but this is a different transport | this, or wrongly configure it on its own, this | |||
feature).<vspace /> | would only affect the performance of data | |||
<vspace blankLines='1'/> | transfers; the outcome would still be correct | |||
</t> | within the "best effort" service model.</t> | |||
<t>Set Cookie life value<vspace /> | <t> | |||
Protocols: SCTP<vspace /> | Implementation: using CONFIGURE_STREAM_SCHEDULER | |||
Functional because it relates to security (possi | .SCTP.</t> | |||
bly weakened by keeping a cookie very long) versus | <t> | |||
the time between connection establishment attemp | Implementation over TCP: do nothing (streams | |||
ts. Knowledge about both issues can be application-specific.<vspace /> | are not available in TCP, but no guarantee is | |||
Implementation over TCP: the closest specified T | given that this transport feature has any | |||
CP functionality is the cookie in TCP Fast Open; for this, <xref target="RFC7413 | effect).</t> | |||
"/> | <t> | |||
states that the server "can expire the cookie at | Implementation over UDP: do nothing (streams | |||
any time to enhance security" and section 4.1.2 describes an | are not available in UDP, but no guarantee is | |||
example implementation where updating the key on | given that this transport feature has any | |||
the server side causes the cookie to expire. | effect).</t> | |||
Alternatively, for implementations that do not s | <t/> | |||
upport TCP Fast Open, this transport feature could also | </li> | |||
affect the validity of SYN cookies (see Section | <li> | |||
3.6 of <xref target="RFC4987"/>). | <t>Configure send buffer size</t> | |||
<vspace /> | <t> | |||
Implementation over UDP: not possible (UDP does | Protocols: SCTP</t> | |||
not offer this functionality).<vspace /> | <t> | |||
<vspace blankLines='1'/> | Automatable because this decision relates to | |||
</t> | knowledge about the network and the Operating | |||
<t>Set maximum burst<vspace /> | System, not the application (see also the | |||
Protocols: SCTP<vspace /> | discussion in <xref target="rundry" | |||
format="default"/>).</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Configure receive buffer (and rwnd) size</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because this decision relates to | ||||
knowledge about the network and the Operating | ||||
System, not the application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Configure message fragmentation</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because this relates to knowledge | ||||
about the network and the Operating System, | ||||
not the application. Note that this SCTP | ||||
feature does not control IP-level | ||||
fragmentation, but decides on fragmentation of | ||||
messages by SCTP, in the end system.</t> | ||||
<t> | ||||
Implementation: done by always enabling it with | ||||
CONFIG_FRAGMENTATION.SCTP and auto-setting the | ||||
fragmentation size based on network or | ||||
Operating System conditions.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Configure PMTUD</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because Path MTU Discovery relates | ||||
to knowledge about the network, not the | ||||
application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Configure delayed SACK timer</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because the receiver-side decision | ||||
to delay sending SACKs relates to knowledge | ||||
about the network, not the application (it can | ||||
be relevant for a sending application to | ||||
request not to delay the SACK of a message, | ||||
but this is a different transport | ||||
feature).</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Set Cookie life value</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Functional because it relates to security | ||||
(possibly weakened by keeping a cookie very | ||||
long) versus the time between connection | ||||
establishment attempts. Knowledge about both | ||||
issues can be application specific.</t> | ||||
<t> | ||||
Implementation over TCP: the closest specified | ||||
TCP functionality is the cookie in TCP Fast | ||||
Open; for this, <xref target="RFC7413" | ||||
format="default"/> states that the server "can | ||||
expire the cookie at any time to enhance | ||||
security", and <xref target="RFC7413" sectionFor | ||||
mat="of" | ||||
section="4.1.2"/> describes an | ||||
example implementation where updating the key | ||||
on the server side causes the cookie to | ||||
expire. Alternatively, for implementations | ||||
that do not support TCP Fast Open, this | ||||
transport feature could also affect the | ||||
validity of SYN cookies (see <xref target="RFC49 | ||||
87" | ||||
section="3.6" sectionFormat="of"/>). | ||||
</t> | ||||
<t> | ||||
Implementation over UDP: not possible. (UDP does | ||||
not offer this functionality.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Set maximum burst</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because it relates to knowledge abou t the network, not the | Automatable because it relates to knowledge abou t the network, not the | |||
application.<vspace /> | application.</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Configure size where messages are broken up for p | <li> | |||
artial delivery<vspace /> | <t>Configure size where messages are broken up for partial delivery< | |||
Protocols: SCTP<vspace /> | /t> | |||
Functional because this is closely tied to prope | <t> | |||
rties of the data that an application | Protocols: SCTP</t> | |||
sends or expects to receive.<vspace /> | <t> | |||
Implementation over TCP: not possible (TCP does | Functional because this is closely tied to | |||
not offer identification of message boundaries).<vspace /> | properties of the data that an application | |||
Implementation over UDP: not possible (UDP does | sends or expects to receive.</t> | |||
not fragment messages).<vspace /> | <t> | |||
<vspace blankLines='1'/> | Implementation over TCP: not possible. (TCP does | |||
</t> | not offer identification of message boundaries.)</t> | |||
<t>Disable checksum when sending<vspace /> | <t> | |||
Protocols: UDP<vspace /> | Implementation over UDP: not possible. (UDP does | |||
Functional because application-specific knowledg | not fragment messages.)</t> | |||
e is necessary to decide whether | <t/> | |||
it can be acceptable to lose data integrity with | </li> | |||
respect to random corruption.<vspace /> | <li> | |||
Implementation: via SET_CHECKSUM_ENABLED.UDP.<vs | <t>Disable checksum when sending</t> | |||
pace /> | <t> | |||
Implementation over TCP: do nothing (TCP does no | Protocols: UDP</t> | |||
t offer to disable the checksum, but | <t> | |||
transmitting data with an intact checksum will n | Functional because application-specific | |||
ot yield a semantically wrong result). | knowledge is necessary to decide whether | |||
<vspace blankLines='1'/> | it can be acceptable to lose data integrity | |||
</t> | with respect to random corruption.</t> | |||
<t>Disable checksum requirement when receiving<vspac | <t> | |||
e /> | Implementation: via SET_CHECKSUM_ENABLED.UDP.</t | |||
Protocols: UDP<vspace /> | > | |||
Functional because application-specific knowledg | <t> | |||
e is necessary to decide whether | Implementation over TCP: do nothing (TCP does | |||
it can be acceptable to lose data integrity with | not offer to disable the checksum, but | |||
respect to random corruption.<vspace /> | transmitting data with an intact checksum will | |||
Implementation: via SET_CHECKSUM_REQUIRED.UDP.<v | not yield a semantically wrong result). | |||
space /> | </t> | |||
Implementation over TCP: do nothing (TCP does no | <t/> | |||
t offer to disable the checksum, but | </li> | |||
transmitting data with an intact checksum will n | <li> | |||
ot yield a semantically wrong result). | <t>Disable checksum requirement when receiving</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: UDP</t> | |||
<t>Specify checksum coverage used by the sender<vspa | <t> | |||
ce /> | Functional because application-specific | |||
Protocols: UDP-Lite<vspace /> | knowledge is necessary to decide whether | |||
Functional because application-specific knowledg | it can be acceptable to lose data | |||
e is necessary to decide for which | integrity with respect to random | |||
parts of the data it can be acceptable to lose d | corruption.</t> | |||
ata integrity with respect to random corruption.<vspace /> | <t> | |||
Implementation: via SET_CHECKSUM_COVERAGE.UDP-Li | Implementation: via SET_CHECKSUM_REQUIRED.UDP.</ | |||
te.<vspace /> | t> | |||
Implementation over TCP: do nothing (TCP does no | <t> | |||
t offer to limit the checksum length, but | Implementation over TCP: do nothing (TCP does | |||
transmitting data with an intact checksum will n | not offer to disable the checksum, but | |||
ot yield a semantically wrong result).<vspace /> | transmitting data with an intact checksum will | |||
Implementation over UDP: if checksum coverage is | not yield a semantically wrong result). | |||
set to cover payload data, do nothing. | </t> | |||
Else, either do nothing (transmitting data with | <t/> | |||
an intact checksum | </li> | |||
will not yield a semantically wrong result), or | <li> | |||
use the transport feature "Disable checksum | <t>Specify checksum coverage used by the sender</t> | |||
when sending". | <t> | |||
<vspace blankLines='1'/> | Protocols: UDP-Lite</t> | |||
</t> | <t> | |||
<t>Specify minimum checksum coverage required by rec | Functional because application-specific | |||
eiver<vspace /> | knowledge is necessary to decide for which | |||
Protocols: UDP-Lite<vspace /> | parts of the data it can be acceptable to lose | |||
data integrity with respect to random | ||||
corruption.</t> | ||||
<t> | ||||
Implementation: via SET_CHECKSUM_COVERAGE.UDP-Li | ||||
te.</t> | ||||
<t> | ||||
Implementation over TCP: do nothing (TCP does | ||||
not offer to limit the checksum length, but | ||||
transmitting data with an intact checksum will | ||||
not yield a semantically wrong result).</t> | ||||
<t> | ||||
Implementation over UDP: if checksum coverage | ||||
is set to cover payload data, do nothing. | ||||
Else, either do nothing (transmitting data | ||||
with an intact checksum will not yield a | ||||
semantically wrong result), or use the | ||||
transport feature "Disable checksum when | ||||
sending". | ||||
</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Specify minimum checksum coverage required by receiver</t> | ||||
<t> | ||||
Protocols: UDP-Lite</t> | ||||
<t> | ||||
Functional because application-specific knowledg e is necessary to decide for which | Functional because application-specific knowledg e is necessary to decide for which | |||
parts of the data it can be acceptable to lose d | parts of the data it can be acceptable to lose d | |||
ata integrity with respect to random corruption.<vspace /> | ata integrity with respect to random corruption.</t> | |||
Implementation: via SET_MIN_CHECKSUM_COVERAGE.UD | <t> | |||
P-Lite.<vspace /> | Implementation: via SET_MIN_CHECKSUM_COVERAGE.UD | |||
Implementation over TCP: do nothing (TCP does no | P-Lite.</t> | |||
t offer to limit the checksum length, but | <t> | |||
transmitting data with an intact checksum will n | Implementation over TCP: do nothing (TCP does | |||
ot yield a semantically wrong result).<vspace /> | not offer to limit the checksum length, but | |||
Implementation over UDP: if checksum coverage is | transmitting data with an intact checksum will | |||
set to cover payload data, do nothing. | not yield a semantically wrong result).</t> | |||
Else, either do nothing (transmitting data with | <t> | |||
an intact checksum | Implementation over UDP: if checksum coverage | |||
will not yield a semantically wrong result), or | is set to cover payload data, do nothing. | |||
use the transport feature "Disable checksum | Else, either do nothing (transmitting data | |||
with an intact checksum will not yield a | ||||
semantically wrong result), or use the | ||||
transport feature "Disable checksum | ||||
requirement when receiving". | requirement when receiving". | |||
<vspace blankLines='1'/> | </t> | |||
</t> | <t/> | |||
<t>Specify DF field <vspace /> | </li> | |||
Protocols: UDP(-Lite)<vspace /> | <li> | |||
Optimizing because the DF field can be used to c | <t>Specify DF field </t> | |||
arry out Path MTU Discovery, which can | <t> | |||
lead an application to choose message sizes that | Protocols: UDP(-Lite)</t> | |||
can be transmitted more efficiently.<vspace /> | <t> | |||
Implementation: via MAINTENANCE.SET_DF.UDP(-Lite | Optimizing because the DF field can be used to | |||
) and SEND_FAILURE.UDP(-Lite).<vspace /> | carry out Path MTU Discovery, which can lead | |||
Implementation over TCP: do nothing (with TCP, t | an application to choose message sizes that | |||
he sending application is not in control | can be transmitted more efficiently.</t> | |||
of transport message sizes, making this function | <t> | |||
ality irrelevant). | Implementation: via MAINTENANCE.SET_DF.UDP(-Lite | |||
<vspace blankLines='1'/> | ) and SEND_FAILURE.UDP(-Lite).</t> | |||
</t> | <t> | |||
Implementation over TCP: do nothing (with TCP, | ||||
<t>Get max. transport-message size that may be sent | the sending application is not in control of | |||
using a non-fragmented IP packet from the configured interface<vspace /> | transport message sizes, making this | |||
Protocols: UDP(-Lite)<vspace /> | functionality irrelevant). | |||
Optimizing because this can lead an application | </t> | |||
to choose message sizes that can be transmitted more efficiently.<vspace /> | <t/> | |||
Implementation over TCP: do nothing (this inform | </li> | |||
ation is not available with TCP).<vspace /> | <li> | |||
<vspace blankLines='1'/> | <t>Get max. transport-message size that may be sent using a non-frag | |||
</t> | mented IP packet from the configured interface</t> | |||
<t>Get max. transport-message size that may be recei | <t> | |||
ved from the configured interface<vspace /> | Protocols: UDP(-Lite)</t> | |||
Protocols: UDP(-Lite)<vspace /> | <t> | |||
Optimizing because this can, for example, influe | Optimizing because this can lead an | |||
nce an application's memory management.<vspace /> | application to choose message sizes that can | |||
Implementation over TCP: do nothing (this inform | be transmitted more efficiently.</t> | |||
ation is not available with TCP).<vspace /> | <t> | |||
<vspace blankLines='1'/> | Implementation over TCP: do nothing (this inform | |||
</t> | ation is not available with TCP).</t> | |||
<t>Specify TTL/Hop count field<vspace /> | <t/> | |||
Protocols: UDP(-Lite)<vspace /> | </li> | |||
Automatable because a transport system can use a | <li> | |||
large enough system default to avoid communication failures. | <t>Get max. transport-message size that may be received from the con | |||
Allowing an application to configure it differen | figured interface</t> | |||
tly can produce notifications of ICMP error message arrivals | <t> | |||
that yield information which only relates to kno | Protocols: UDP(-Lite)</t> | |||
wledge about the network, not the application.<vspace /> | <t> | |||
<vspace blankLines='1'/> | Optimizing because this can, for example, | |||
</t> | influence an application's memory | |||
<t>Obtain TTL/Hop count field<vspace /> | management.</t> | |||
Protocols: UDP(-Lite)<vspace /> | <t> | |||
Automatable because the TTL/Hop count field rela | Implementation over TCP: do nothing (this inform | |||
tes to knowledge about the network, not the application.<vspace /> | ation is not available with TCP).</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Specify ECN field<vspace /> | <li> | |||
Protocols: UDP(-Lite)<vspace /> | <t>Specify TTL/Hop count field</t> | |||
Automatable because the ECN field relates to kno | <t> | |||
wledge about the network, not the application.<vspace /> | Protocols: UDP(-Lite)</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Automatable because a transport system can use | |||
<t>Obtain ECN field<vspace /> | a large enough system default to avoid | |||
Protocols: UDP(-Lite)<vspace /> | communication failures. Allowing an | |||
Optimizing because this information can be used | application to configure it differently can | |||
by an application to better carry out congestion control (this is | produce notifications of ICMP error message | |||
relevant when choosing a data transmission trans | arrivals that yield information that only | |||
port service that does not already do congestion control).<vspace /> | relates to knowledge about the network, not | |||
Implementation over TCP: do nothing (this inform | the application.</t> | |||
ation is not available with TCP).<vspace /> | <t/> | |||
<vspace blankLines='1'/> | </li> | |||
</t> | <li> | |||
<t>Specify IP Options<vspace /> | <t>Obtain TTL/Hop count field</t> | |||
Protocols: UDP(-Lite)<vspace /> | <t> | |||
Automatable because IP Options relate to knowled | Protocols: UDP(-Lite)</t> | |||
ge about the network, not the application.<vspace /> | <t> | |||
<vspace blankLines='1'/> | Automatable because the TTL/Hop count field rela | |||
</t> | tes to knowledge about the network, not the application.</t> | |||
<t>Obtain IP Options<vspace /> | <t/> | |||
Protocols: UDP(-Lite)<vspace /> | </li> | |||
Automatable because IP Options relate to knowled | <li> | |||
ge about the network, not the application.<vspace /> | <t>Specify ECN field</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: UDP(-Lite)</t> | |||
<t>Enable and configure a "Low Extra Delay Backgroun | <t> | |||
d Transfer"<vspace /> | Automatable because the ECN field relates to kno | |||
Protocols: A protocol implementing the LEDBAT co | wledge about the network, not the application.</t> | |||
ngestion control mechanism<vspace /> | <t/> | |||
Optimizing because whether this feature is appro | </li> | |||
priate or not depends on | <li> | |||
application-specific knowledge. However, wrongly | <t>Obtain ECN field</t> | |||
using this will only | <t> | |||
affect the speed of data transfers (albeit inclu | Protocols: UDP(-Lite)</t> | |||
ding other transfers that may compete | <t> | |||
with the transport system's transfer in the netw | Optimizing because this information can be | |||
ork), | used by an application to better carry out | |||
so it is still correct within the "best effort" | congestion control (this is relevant when | |||
service model.<vspace /> | choosing a data transmission Transport Service | |||
Implementation: via CONFIGURE.LEDBAT and/or SET_ | that does not already do congestion | |||
DSCP.TCP / SET_DSCP.SCTP / SET_DSCP.UDP(-Lite) <xref target="LBE-draft"/>.<vspac | control).</t> | |||
e /> | <t> | |||
Implementation over TCP: do nothing (TCP does no | Implementation over TCP: do nothing (this inform | |||
t support LEDBAT congestion control, but | ation is not available with TCP).</t> | |||
not implementing this functionality will not yie | <t/> | |||
ld a semantically wrong behavior).<vspace /> | </li> | |||
Implementation over UDP: do nothing (UDP does no | <li> | |||
t offer congestion control).<vspace /> | <t>Specify IP Options</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: UDP(-Lite)</t> | |||
<t> | ||||
</list></t> | Automatable because IP Options relate to | |||
knowledge about the network, not the | ||||
<t>TERMINATION:<vspace /> | application.</t> | |||
<t/> | ||||
<list style="symbols"> | </li> | |||
<t>Close after reliably delivering all remaining dat | <li> | |||
a, causing an event informing the application on the other side<vspace /> | <t>Obtain IP Options</t> | |||
Protocols: TCP, SCTP<vspace /> | <t> | |||
Functional because the notion of a connection is | Protocols: UDP(-Lite)</t> | |||
often reflected in applications | <t> | |||
as an expectation to have all outstanding data d | Automatable because IP Options relate to | |||
elivered and no longer be able | knowledge about the network, not the | |||
to communicate after a "Close" succeeded, | application.</t> | |||
with a communication sequence relating to this t | <t/> | |||
ransport feature that is defined by the | </li> | |||
application protocol.<vspace /> | <li> | |||
Implementation: via CLOSE.TCP and CLOSE.SCTP.<vs | <t>Enable and configure a "Low Extra Delay Background Transfer"</t> | |||
pace /> | <t> | |||
Implementation over UDP: not possible (UDP is un | Protocols: a protocol implementing the LEDBAT co | |||
reliable and hence does not know when | ngestion control mechanism</t> | |||
all remaining data is delivered; it does also no | <t> | |||
t offer to cause an event related to | Optimizing because whether this feature is | |||
closing at the peer).<vspace /> | appropriate or not depends on | |||
<vspace blankLines='1'/> | application-specific knowledge. However, | |||
</t> | wrongly using this will only affect the speed | |||
<t>Abort without delivering remaining data, causing | of data transfers (albeit including other | |||
an event informing the application on the other side<vspace /> | transfers that may compete with the transport | |||
Protocols: TCP, SCTP<vspace /> | system's transfer in the network), so it is | |||
Functional because the notion of a connection is | still correct within the "best effort" service | |||
often reflected in applications | model.</t> | |||
as an expectation to potentially not have all ou | <t> | |||
tstanding data delivered and no longer be able | Implementation: via CONFIGURE.LEDBAT and/or SET_ | |||
to communicate after an "Abort" succeeded. On bo | DSCP.TCP / SET_DSCP.SCTP / SET_DSCP.UDP(-Lite) <xref target="RFC8622" format="de | |||
th sides of a connection, an application protocol may | fault"/>.</t> | |||
define a communication sequence relating to this | <t> | |||
transport feature.<vspace /> | Implementation over TCP: do nothing (TCP does | |||
Implementation: via ABORT.TCP and ABORT.SCTP.<vs | not support LEDBAT congestion control, but not | |||
pace /> | implementing this functionality will not yield | |||
Implementation over UDP: not possible (UDP does | a semantically wrong behavior).</t> | |||
not offer to cause an event related | <t> | |||
to aborting at the peer).<vspace /> | Implementation over UDP: do nothing (UDP does no | |||
<vspace blankLines='1'/> | t offer congestion control).</t> | |||
</t> | <t/> | |||
<t>Abort without delivering remaining data, not caus | </li> | |||
ing an event informing the application on the other side<vspace /> | </ul> | |||
Protocols: UDP(-Lite)<vspace /> | <t>TERMINATION: | |||
Functional because the notion of a connection is | ||||
often reflected in applications | ||||
as an expectation to potentially not have all ou | ||||
tstanding data delivered and no longer be able | ||||
to communicate after an "Abort" succeeded. On bo | ||||
th sides of a connection, an application protocol may | ||||
define a communication sequence relating to this | ||||
transport feature.<vspace /> | ||||
Implementation: via ABORT.UDP(-Lite).<vspace /> | ||||
Implementation over TCP: stop using the connecti | ||||
on, wait for a timeout.<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Timeout event when data could not be delivered fo | ||||
r too long<vspace /> | ||||
Protocols: TCP, SCTP<vspace /> | ||||
Functional because this notifies that potentiall | ||||
y assumed reliable data delivery is no longer provided.<vspace /> | ||||
Implementation: via TIMEOUT.TCP and TIMEOUT.SCTP | ||||
.<vspace /> | ||||
Implementation over UDP: do nothing (this event | ||||
will not occur with UDP).<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
</list></t> | ||||
</section> | ||||
<section anchor="data-pass3" title="DATA Transfer Related Transp | </t> | |||
ort Features"> | <ul > | |||
<li> | ||||
<t>Close after reliably delivering all remaining data, causing an | ||||
event informing the application on the other side</t> | ||||
<section anchor="data-sending-pass3" title="Sending Data"> | <t> | |||
Protocols: TCP, SCTP</t> | ||||
<t> | ||||
Functional because the notion of a connection | ||||
is often reflected in applications as an | ||||
expectation to have all outstanding data | ||||
delivered and no longer be able to communicate | ||||
after a "Close" succeeded, with a | ||||
communication sequence relating to this | ||||
transport feature that is defined by the | ||||
application protocol.</t> | ||||
<t> | ||||
Implementation: via CLOSE.TCP and CLOSE.SCTP.</t | ||||
> | ||||
<t> | ||||
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.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Abort without delivering remaining data, causing an event informi | ||||
ng the application on the other side</t> | ||||
<t> | ||||
Protocols: TCP, SCTP</t> | ||||
<t> | ||||
Functional because the notion of a connection | ||||
is often reflected in applications as an | ||||
expectation to potentially not have all | ||||
outstanding data delivered and no longer be | ||||
able to communicate after an "Abort" | ||||
succeeded. On both sides of a connection, an | ||||
application protocol may define a | ||||
communication sequence relating to this | ||||
transport feature.</t> | ||||
<t> | ||||
Implementation: via ABORT.TCP and ABORT.SCTP.</t | ||||
> | ||||
<t> | ||||
Implementation over UDP: not possible. (UDP | ||||
does not offer to cause an event related to | ||||
aborting at the peer.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Abort without delivering remaining data, not causing an event inf | ||||
orming the application on the other side</t> | ||||
<t> | ||||
Protocols: UDP(-Lite)</t> | ||||
<t> | ||||
Functional because the notion of a connection | ||||
is often reflected in applications as an | ||||
expectation to potentially not have all | ||||
outstanding data delivered and no longer be | ||||
able to communicate after an "Abort" | ||||
succeeded. On both sides of a connection, an | ||||
application protocol may define a | ||||
communication sequence relating to this | ||||
transport feature.</t> | ||||
<t> | ||||
Implementation: via ABORT.UDP(-Lite).</t> | ||||
<t> | ||||
Implementation over TCP: stop using the connecti | ||||
on, wait for a timeout.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Timeout event when data could not be delivered for too long</t> | ||||
<t> | ||||
Protocols: TCP, SCTP</t> | ||||
<t> | ||||
Functional because this notifies that | ||||
potentially assumed reliable data delivery is | ||||
no longer provided.</t> | ||||
<t> | ||||
Implementation: via TIMEOUT.TCP and TIMEOUT.SCTP | ||||
.</t> | ||||
<t> | ||||
Implementation over UDP: do nothing (this event | ||||
will not occur with UDP).</t> | ||||
<t/> | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
<section anchor="data-pass3" numbered="true" toc="default"> | ||||
<name>DATA-Transfer-Related Transport Features</name> | ||||
<section anchor="data-sending-pass3" numbered="true" toc="default"> | ||||
<name>Sending Data</name> | ||||
<ul > | ||||
<li> | ||||
<t>Reliably transfer data, with congestion control</t> | ||||
<t> | ||||
Protocols: TCP, SCTP</t> | ||||
<t> | ||||
Functional because this is closely tied to | ||||
properties of the data that an application | ||||
sends or expects to receive.</t> | ||||
<t> | ||||
Implementation: via SEND.TCP and SEND.SCTP.</t> | ||||
<t> | ||||
Implementation over UDP: not possible. (UDP is u | ||||
nreliable.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Reliably transfer a message, with congestion control</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Functional because this is closely tied to | ||||
properties of the data that an application | ||||
sends or expects to receive.</t> | ||||
<t> | ||||
Implementation: via SEND.SCTP.</t> | ||||
<t> | ||||
Implementation over TCP: via SEND.TCP. With | ||||
SEND.TCP, message boundaries will not be | ||||
identifiable by the receiver, because TCP | ||||
provides a byte-stream service.</t> | ||||
<t> | ||||
Implementation over UDP: not possible. (UDP is u | ||||
nreliable.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Unreliably transfer a message</t> | ||||
<t> | ||||
Protocols: SCTP, UDP(-Lite)</t> | ||||
<t> | ||||
Optimizing because only applications know | ||||
about the time criticality of their | ||||
communication, and reliably transferring a | ||||
message is never incorrect for the receiver of | ||||
a potentially unreliable data transfer, it is | ||||
just slower.</t> | ||||
<t> | ||||
CHANGED FROM RFC 8303. This differs from the 2 | ||||
automatable transport features below in that | ||||
it leaves the choice of congestion control | ||||
open.</t> | ||||
<t> | ||||
Implementation: via SEND.SCTP or SEND.UDP(-Lite) | ||||
.</t> | ||||
<t> | ||||
Implementation over TCP: use SEND.TCP. With | ||||
SEND.TCP, messages will be sent reliably, and | ||||
message boundaries will not be identifiable by | ||||
the receiver.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Unreliably transfer a message, with congestion control</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because congestion control relates t | ||||
o knowledge about the network, not the application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Unreliably transfer a message, without congestion control</t> | ||||
<t> | ||||
Protocols: UDP(-Lite)</t> | ||||
<t> | ||||
Automatable because congestion control relates t | ||||
o knowledge about the network, not the application.</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Configurable Message Reliability</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Optimizing because only applications know | ||||
about the time criticality of their | ||||
communication, and reliably transferring a | ||||
message is never incorrect for the receiver of | ||||
a potentially unreliable data transfer, it is | ||||
just slower.</t> | ||||
<t> | ||||
Implementation: via SEND.SCTP.</t> | ||||
<t><list style="symbols"> | <t> | |||
<t>Reliably transfer data, with congestion control<v | Implementation over TCP: done by using SEND.TCP | |||
space /> | and | |||
Protocols: TCP, SCTP<vspace /> | ignoring this configuration. Based on the | |||
Functional because this is closely tied to prope | assumption of the best-effort service model, | |||
rties of the data that an application | unnecessarily delivering data does not violate | |||
sends or expects to receive.<vspace /> | application expectations. Moreover, it is not | |||
Implementation: via SEND.TCP and SEND.SCTP.<vspa | possible to associate the requested | |||
ce /> | reliability to a "message" in TCP anyway.</t> | |||
Implementation over UDP: not possible (UDP is un | <t> | |||
reliable).<vspace /> | Implementation over UDP: not possible. (UDP is u | |||
<vspace blankLines='1'/> | nreliable.)</t> | |||
</t> | <t/> | |||
<t>Reliably transfer a message, with congestion cont | </li> | |||
rol<vspace /> | <li> | |||
Protocols: SCTP<vspace /> | <t>Choice of stream</t> | |||
Functional because this is closely tied to prope | <t> | |||
rties of the data that an application | Protocols: SCTP</t> | |||
sends or expects to receive.<vspace /> | <t> | |||
Implementation: via SEND.SCTP.<vspace /> | Automatable because it requires using multiple | |||
Implementation over TCP: via SEND.TCP. With SEND | streams, but requesting multiple streams in | |||
.TCP, message | the CONNECTION.ESTABLISHMENT category is | |||
boundaries will not be identifiable by the recei | ||||
ver, because TCP | ||||
provides a byte stream service.<vspace /> | ||||
Implementation over UDP: not possible (UDP is un | ||||
reliable).<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Unreliably transfer a message<vspace /> | ||||
Protocols: SCTP, UDP(-Lite)<vspace /> | ||||
Optimizing because only applications know about | ||||
the time criticality of their communication, | ||||
and reliably transfering a message is never inco | ||||
rrect for the receiver of a potentially | ||||
unreliable data transfer, it is just slower.<vsp | ||||
ace /> | ||||
CHANGED FROM RFC8303. This differs from the 2 au | ||||
tomatable transport features below in that it leaves the choice | ||||
of congestion control open.<vspace /> | ||||
Implementation: via SEND.SCTP or SEND.UDP(-Lite) | ||||
.<vspace /> | ||||
Implementation over TCP: use SEND.TCP. With SEND | ||||
.TCP, messages will be sent reliably, and | ||||
message boundaries will not be identifiable by t | ||||
he receiver.<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Unreliably transfer a message, with congestion co | ||||
ntrol<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because congestion control relates t | ||||
o knowledge about the network, not the application.<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Unreliably transfer a message, without congestion | ||||
control<vspace /> | ||||
Protocols: UDP(-Lite)<vspace /> | ||||
Automatable because congestion control relates t | ||||
o knowledge about the network, not the application.<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Configurable Message Reliability<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Optimizing because only applications know about | ||||
the time criticality of their communication, | ||||
and reliably transfering a message is never inco | ||||
rrect for the receiver of a potentially | ||||
unreliable data transfer, it is just slower.<vsp | ||||
ace /> | ||||
Implementation: via SEND.SCTP.<vspace /> | ||||
Implementation over TCP: By using SEND.TCP and i | ||||
gnoring this configuration: | ||||
based on the assumption of the best-effort | ||||
service model, unnecessarily delivering data doe | ||||
s | ||||
not violate application expectations. Moreover, | ||||
it is not possible to associate the requested | ||||
reliability to a "message" in TCP anyway.<vspace | ||||
/> | ||||
Implementation over UDP: not possible (UDP is un | ||||
reliable).<vspace /> | ||||
<vspace blankLines='1'/> | ||||
</t> | ||||
<t>Choice of stream<vspace /> | ||||
Protocols: SCTP<vspace /> | ||||
Automatable because it requires using multiple s | ||||
treams, but | ||||
requesting multiple streams in the CONNECTION.ES | ||||
TABLISHMENT category is | ||||
automatable. | automatable. | |||
Implementation: see <xref target="nostream"/>. | </t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Implementation: see <xref | |||
<t>Choice of path (destination address)<vspace /> | target="nostream" format="default"/>. | |||
Protocols: SCTP<vspace /> | </t> | |||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Choice of path (destination address)</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because it requires using multiple s ockets, but | Automatable because it requires using multiple s ockets, but | |||
obtaining multiple sockets in the CONNECTION.EST ABLISHMENT category is | obtaining multiple sockets in the CONNECTION.EST ABLISHMENT category is | |||
automatable.<vspace /> | automatable.</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Ordered message delivery (potentially slower than | <li> | |||
unordered)<vspace /> | <t>Ordered message delivery (potentially slower than unordered)</t | |||
Protocols: SCTP<vspace /> | > | |||
Functional because this is closely tied to prope | <t> | |||
rties of the data that an application | Protocols: SCTP</t> | |||
sends or expects to receive.<vspace /> | <t> | |||
Implementation: via SEND.SCTP.<vspace /> | Functional because this is closely tied to | |||
Implementation over TCP: By using SEND.TCP. With | properties of the data that an application | |||
SEND.TCP, messages will not be identifiable | sends or expects to receive.</t> | |||
by the receiver.<vspace /> | <t> | |||
Implementation over UDP: not possible (UDP does | Implementation: via SEND.SCTP.</t> | |||
not offer any guarantees regarding ordering).<vspace /> | <t> | |||
<vspace blankLines='1'/> | Implementation over TCP: done by using | |||
</t> | SEND.TCP. With SEND.TCP, messages will not be | |||
<t>Unordered message delivery (potentially faster th | identifiable by the receiver.</t> | |||
an ordered)<vspace /> | <t> | |||
Protocols: SCTP, UDP(-Lite)<vspace /> | Implementation over UDP: not possible. (UDP | |||
does not offer any guarantees regarding | ||||
ordering.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Unordered message delivery (potentially faster than ordered)</t | ||||
> | ||||
<t> | ||||
Protocols: SCTP, UDP(-Lite)</t> | ||||
<t> | ||||
Functional because this is closely tied to prope rties of the data that an application | Functional because this is closely tied to prope rties of the data that an application | |||
sends or expects to receive.<vspace /> | sends or expects to receive.</t> | |||
Implementation: via SEND.SCTP.<vspace /> | <t> | |||
Implementation over TCP: By using SEND.TCP and a | Implementation: via SEND.SCTP.</t> | |||
lways sending data ordered: | <t> | |||
based on the assumption of the best-effort | Implementation over TCP: done by using | |||
service model, ordered delivery may just be slow | SEND.TCP and always sending data ordered. | |||
er and does | Based on the assumption of the best-effort | |||
not violate application expectations. Moreover, | service model, ordered delivery may just be | |||
it is not possible to associate the requested | slower and does not violate application | |||
delivery order to a "message" in TCP anyway.<vsp | expectations. Moreover, it is not possible to | |||
ace /> | associate the requested delivery order to a | |||
<vspace blankLines='1'/> | "message" in TCP anyway.</t> | |||
</t> | <t/> | |||
<t>Request not to bundle messages<vspace /> | </li> | |||
Protocols: SCTP<vspace /> | <li> | |||
Optimizing because this decision depends on know | <t>Request not to bundle messages</t> | |||
ledge about the size of future data blocks | <t> | |||
and the delay between them.<vspace /> | Protocols: SCTP</t> | |||
Implementation: via SEND.SCTP.<vspace /> | <t> | |||
Implementation over TCP: By using SEND.TCP and D | Optimizing because this decision depends on | |||
ISABLE_NAGLE.TCP to disable the Nagle algorithm when | knowledge about the size of future data blocks | |||
the request is made and enable it again when the | and the delay between them.</t> | |||
request is no longer made. Note that this | <t> | |||
is not fully equivalent because it relates to th | Implementation: via SEND.SCTP.</t> | |||
e time of issuing the request rather than | ||||
a specific message.<vspace /> | <t> | |||
Implementation over UDP: do nothing (UDP never b | Implementation over TCP: done by using SEND.TCP | |||
undles messages).<vspace /> | and | |||
<vspace blankLines='1'/> | DISABLE_NAGLE.TCP to disable the Nagle | |||
</t> | algorithm when the request is made and enable | |||
<t>Specifying a "payload protocol-id" (handed over a | it again when the request is no longer | |||
s such by the receiver)<vspace /> | made. Note that this is not fully equivalent | |||
Protocols: SCTP<vspace /> | because it relates to the time of issuing the | |||
Functional because it allows to send extra appli | request rather than a specific message.</t> | |||
cation data with every message, for the sake | <t> | |||
of identification of data, which by itself is ap | Implementation over UDP: do nothing (UDP never b | |||
plication-specific.<vspace /> | undles messages).</t> | |||
Implementation: SEND.SCTP.<vspace /> | <t/> | |||
Implementation over TCP: not possible (this func | </li> | |||
tionality is not available in TCP).<vspace /> | <li> | |||
Implementation over UDP: not possible (this func | <t>Specifying a "payload protocol-id" (handed over as such by the | |||
tionality is not available in UDP).<vspace /> | receiver)</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: SCTP</t> | |||
<t>Specifying a key id to be used to authenticate a | <t> | |||
message<vspace /> | Functional because it allows sending extra | |||
Protocols: SCTP<vspace /> | application data with every message, for the | |||
Functional because this has a direct influence o | sake of identification of data, which by | |||
n security.<vspace /> | itself is application specific.</t> | |||
Implementation: via a parameter in SEND.SCTP.<vs | <t> | |||
pace /> | Implementation: SEND.SCTP.</t> | |||
Implementation over TCP: This could be emulated | <t> | |||
by using SET_AUTH.TCP before and after the message is sent. | Implementation over TCP: not possible. (This fun | |||
Note that this is not fully equivalent because i | ctionality is not available in TCP.)</t> | |||
t relates to the time of issuing the request rather than | <t> | |||
a specific message.<vspace /> | Implementation over UDP: not possible. (This fun | |||
Implementation over UDP: not possible (UDP does | ctionality is not available in UDP.)</t> | |||
not offer authentication).<vspace /> | <t/> | |||
<vspace blankLines='1'/> | </li> | |||
</t> | <li> | |||
<t>Request not to delay the acknowledgement (SACK) o | <t>Specifying a key id to be used to authenticate a message</t> | |||
f a message<vspace /> | <t> | |||
Protocols: SCTP<vspace /> | Protocols: SCTP</t> | |||
<t> | ||||
Functional because this has a direct influence o | ||||
n security.</t> | ||||
<t> | ||||
Implementation: via a parameter in SEND.SCTP.</t | ||||
> | ||||
<t> | ||||
Implementation over TCP: this could be | ||||
emulated by using 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 the request rather than a | ||||
specific message.</t> | ||||
<t> | ||||
Implementation over UDP: not possible. (UDP does | ||||
not offer authentication.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Request not to delay the acknowledgement (SACK) of a message</t | ||||
> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Optimizing because only an application knows for which message it wants to quickly be informed | Optimizing because only an application knows for which message it wants to quickly be informed | |||
about success / failure of its delivery.<vspace | about success/failure of its delivery.</t> | |||
/> | <t> | |||
Implementation over TCP: do nothing (TCP does no | Implementation over TCP: do nothing (TCP does | |||
t offer this functionality, but ignoring | not offer this functionality, but ignoring | |||
this request from the application will not yield | this request from the application will not | |||
a semantically wrong behavior).<vspace /> | yield a semantically wrong behavior).</t> | |||
<t> | ||||
Implementation over UDP: do nothing (UDP does no t offer this functionality, but ignoring | Implementation over UDP: do nothing (UDP does no t offer this functionality, but ignoring | |||
this request from the application will not yield | this request from the application will not yield | |||
a semantically wrong behavior).<vspace /> | a semantically wrong behavior).</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
</list></t> | </ul> | |||
</section> | ||||
</section> | <section anchor="data-receiving-pass3" numbered="true" toc="default"> | |||
<name>Receiving Data</name> | ||||
<section anchor="data-receiving-pass3" title="Receiving Data | <ul > | |||
"> | <li> | |||
<t>Receive data (with no message delimiting)</t> | ||||
<t> | <t> | |||
<list style="symbols"> | Protocols: TCP</t> | |||
<t>Receive data (with no message delimiting)<vsp | <t> | |||
ace /> | Functional because a transport system must b | |||
Protocols: TCP<vspace /> | e able to send and receive data.</t> | |||
Functional because a transport system must b | <t> | |||
e able to send and receive data.<vspace /> | Implementation: via RECEIVE.TCP.</t> | |||
Implementation: via RECEIVE.TCP.<vspace /> | <t> | |||
Implementation over UDP: do nothing (UDP onl y works on messages; these can be handed over, | Implementation over UDP: do nothing (UDP onl y works on messages; these can be handed over, | |||
the application can still ignore the message | the application can still ignore the message | |||
boundaries).<vspace /> | boundaries).</t> | |||
<vspace blankLines='1'/> | <t/> | |||
</t> | </li> | |||
<t>Receive a message<vspace /> | <li> | |||
Protocols: SCTP, UDP(-Lite)<vspace /> | <t>Receive a message</t> | |||
Functional because this is closely tied to p | <t> | |||
roperties of the data that an application | Protocols: SCTP, UDP(-Lite)</t> | |||
sends or expects to receive.<vspace /> | <t> | |||
Implementation: via RECEIVE.SCTP and RECEIVE | Functional because this is closely tied to | |||
.UDP(-Lite).<vspace /> | properties of the data that an application | |||
Implementation over TCP: not possible (TCP d | sends or expects to receive.</t> | |||
oes not support identification of message boundaries).<vspace /> | <t> | |||
<vspace blankLines='1'/> | Implementation: via RECEIVE.SCTP and RECEIVE | |||
</t> | .UDP(-Lite).</t> | |||
<t>Choice of stream to receive from<vspace /> | <t> | |||
Protocols: SCTP<vspace /> | Implementation over TCP: not possible. (TCP | |||
does not support identification of message boundaries.)</t> | ||||
<t/> | ||||
</li> | ||||
<li> | ||||
<t>Choice of stream to receive from</t> | ||||
<t> | ||||
Protocols: SCTP</t> | ||||
<t> | ||||
Automatable because it requires using multip le streams, but | Automatable because it requires using multip le streams, but | |||
requesting multiple streams in the CONNECTIO N.ESTABLISHMENT category is | requesting multiple streams in the CONNECTIO N.ESTABLISHMENT category is | |||
automatable.<vspace /> | automatable.</t> | |||
Implementation: see <xref target="nostream"/ | <t> | |||
>. | Implementation: see <xref target="nostream" | |||
<vspace blankLines='1'/> | format="default"/>. | |||
</t> | </t> | |||
<t>Information about partial message arrival<vsp | <t/> | |||
ace /> | </li> | |||
Protocols: SCTP<vspace /> | <li> | |||
Functional because this is closely tied to p | <t>Information about partial message arrival</t> | |||
roperties of the data that an application | <t> | |||
sends or expects to receive.<vspace /> | Protocols: SCTP</t> | |||
Implementation: via RECEIVE.SCTP.<vspace /> | <t> | |||
Implementation over TCP: do nothing (this in | Functional because this is closely tied to | |||
formation is not available with TCP).<vspace /> | properties of the data that an application | |||
Implementation over UDP: do nothing (this in | sends or expects to receive.</t> | |||
formation is not available with UDP).<vspace /> | <t> | |||
<vspace blankLines='1'/> | Implementation: via RECEIVE.SCTP.</t> | |||
</t> | <t> | |||
</list> | Implementation over TCP: do nothing (this | |||
</t> | information is not available with | |||
</section> | TCP).</t> | |||
<t> | ||||
<section anchor="data-errors-pass3" title="Errors"> | Implementation over UDP: do nothing (this in | |||
<t>This section describes sending failures that are asso | formation is not available with UDP).</t> | |||
ciated with a | <t/> | |||
specific call to in the "Sending Data" category (<xr | </li> | |||
ef target="data-sending-pass3"/>).</t> | </ul> | |||
</section> | ||||
<t> | <section anchor="data-errors-pass3" numbered="true" toc="default"> | |||
<list style="symbols"> | <name>Errors</name> | |||
<t>Notification of send failures<vspace /> | <t>This section describes sending failures that are associated with | |||
Protocols: SCTP, UDP(-Lite)<vspace /> | a specific call to in the "Sending Data" category (<xref | |||
Functional because this notifies that potent | target="data-sending-pass3" format="default"/>).</t> | |||
ially assumed reliable data delivery is no longer provided.<vspace /> | <ul > | |||
CHANGED FROM RFC8303. This differs from the | <li> | |||
2 automatable transport features below in that it does not distinugish between | <t>Notification of send failures</t> | |||
unsent and unacknowledged messages.<vspace / | <t> | |||
> | Protocols: SCTP, UDP(-Lite)</t> | |||
Implementation: via SENDFAILURE-EVENT.SCTP a | <t> | |||
nd SEND_FAILURE.UDP(-Lite).<vspace /> | Functional because this notifies that | |||
Implementation over TCP: do nothing (this no | potentially assumed reliable data delivery | |||
tification is not available and will therefore not occur with TCP).<vspace /> | is no longer provided.</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | CHANGED FROM RFC 8303. This differs from | |||
<t>Notification of an unsent (part of a) message | the 2 automatable transport features below | |||
<vspace /> | in that it does not distinguish between | |||
Protocols: SCTP, UDP(-Lite)<vspace /> | unsent and unacknowledged messages.</t> | |||
Automatable because the distinction between | <t> | |||
unsent and unacknowledged does not relate to application-specific knowledge. <vs | Implementation: via SENDFAILURE-EVENT.SCTP a | |||
pace /> | nd SEND_FAILURE.UDP(-Lite).</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Implementation over TCP: do nothing (this | |||
<t>Notification of an unacknowledged (part of a) | notification is not available and will | |||
message<vspace /> | therefore not occur with TCP).</t> | |||
Protocols: SCTP<vspace /> | <t/> | |||
Automatable because the distinction between | </li> | |||
unsent and unacknowledged does not relate to application-specific knowledge. <vs | <li> | |||
pace /> | <t>Notification of an unsent (part of a) message</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Protocols: SCTP, UDP(-Lite)</t> | |||
<t>Notification that the stack has no more user | <t> | |||
data to send<vspace /> | Automatable because the distinction | |||
Protocols: SCTP<vspace /> | between unsent and unacknowledged does not | |||
Optimizing because reacting to this notifica | relate to application-specific | |||
tion requires the application to be involved, | knowledge. </t> | |||
and ensuring that the stack does not run dry | <t/> | |||
of data (for too long) can improve performance.<vspace /> | </li> | |||
Implementation over TCP: do nothing (see the | <li> | |||
discussion in <xref target="rundry"/>).<vspace /> | <t>Notification of an unacknowledged (part of a) message</t> | |||
Implementation over UDP: do nothing (this no | <t> | |||
tification is not available and will therefore not occur with UDP).<vspace /> | Protocols: SCTP</t> | |||
<vspace blankLines='1'/> | <t> | |||
</t> | Automatable because the distinction | |||
<t>Notification to a receiver that a partial mes | between unsent and unacknowledged does not | |||
sage delivery has been aborted<vspace /> | relate to application-specific | |||
Protocols: SCTP<vspace /> | knowledge. </t> | |||
Functional because this is closely tied to p | <t/> | |||
roperties of the data that an application | </li> | |||
sends or expects to receive.<vspace /> | <li> | |||
Implementation over TCP: do nothing (this no | <t>Notification that the stack has no more user data to send</t> | |||
tification is not available and will therefore not occur with TCP).<vspace /> | <t> | |||
Implementation over UDP: do nothing (this no | Protocols: SCTP</t> | |||
tification is not available and will therefore not occur with UDP).<vspace /> | <t> | |||
<vspace blankLines='1'/> | Optimizing because reacting to this | |||
</t> | notification requires the application to | |||
</list> | be involved, and ensuring that the stack | |||
</t> | does not run dry of data (for too long) | |||
</section> | can improve performance.</t> | |||
<t> | ||||
</section> | Implementation over TCP: do nothing (see | |||
the discussion in <xref target="rundry" | ||||
</section> | format="default"/>).</t> | |||
<t> | ||||
<section title="Revision information"> | Implementation over UDP: do nothing (this | |||
<t> XXX RFC-Ed please remove this section prior to publication.</t | notification is not available and will | |||
> | therefore not occur with UDP).</t> | |||
<t/> | ||||
<t>-02: implementation suggestions added, discussion section added, | </li> | |||
terminology extended, DELETED category removed, | <li> | |||
various other fixes; list of Transport Features adjusted to -01 | <t>Notification to a receiver that a partial message delivery | |||
version of | has been aborted</t> | |||
<xref target="RFC8303"/> except that MPTCP is not included.</t> | <t> | |||
Protocols: SCTP</t> | ||||
<t>-03: updated to be consistent with -02 version of <xref target="R | <t> | |||
FC8303"/>.</t> | Functional because this is closely tied to | |||
properties of the data that an application | ||||
<t>-04: updated to be consistent with -03 version of <xref target="R | sends or expects to receive.</t> | |||
FC8303"/>. | <t> | |||
Reorganized document, rewrote intro and conclusion, and made a first | Implementation over TCP: do nothing (this | |||
stab at creating a real "minimal set".</t> | notification is not available and will | |||
therefore not occur with TCP).</t> | ||||
<t>-05: updated to be consistent with -05 version of <xref target="R | <t> | |||
FC8303"/> (minor changes). Fixed a mistake regarding Cookie Life value. Exclusio | Implementation over UDP: do nothing (this no | |||
n of security related transport features (to be covered in a separate document). | tification is not available and will therefore not occur with UDP).</t> | |||
Reorganized the document (now begins with the minset, derivation is in the appe | <t/> | |||
ndix). First stab at an abstract API for the minset.</t> | </li> | |||
</ul> | ||||
<t>draft-ietf-taps-minset-00: updated to be consistent with -08 vers | </section> | |||
ion of <xref target="RFC8303"/> ("obtain message delivery number" was removed, a | </section> | |||
s this has also been removed in <xref target="RFC8303"/> because it was a mistak | </section> | |||
e in RFC4960. This led to the removal of two more transport features that were o | ||||
nly designated as functional because they affected "obtain message delivery numb | ||||
er"). Fall-back to UDP incorporated (this was requested at IETF-99); this also a | ||||
ffected 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 reli | ||||
ably transfer (possibly multiple times) before connection establishment" and "Ha | ||||
nd 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, b | ||||
ut it is just a way to describe the minimum set. Author order changed. | ||||
</t> | ||||
<t>WG -01: "fall-back to" (TCP or UDP) replaced (mostly with "implem | ||||
entation over"). References to post-sockets removed (these were statments that a | ||||
ssumed that post-sockets requires two-sided implementation). Replaced "flow" wit | ||||
h "TAPS Connection" and "frame" with "message" to avoid introducing new terminol | ||||
ogy. Made sections 3 and 4 in line with the categorization that is already used | ||||
in the appendix and <xref target="RFC8303"/>, and changed style of section 4 to | ||||
be even shorter and less interface-like. Updated reference draft-ietf-tsvwg-sctp | ||||
-ndata to RFC8260. | ||||
</t> | ||||
<t>WG -02: rephrased "the TAPS system" and "TAPS connection" etc. to | <section anchor="Acknowledgements" numbered="false" toc="default"> | |||
more generally talk about transport after the intro (mostly replacing "TAPS sys | <name>Acknowledgements</name> | |||
tem" with "transport system" and "TAPS connection" with "connection". Merged sec | <t>The authors would like to thank all the participants of the TAPS | |||
tions 3 and 4 to form a new section 3. | Working Group and the NEAT and MAMI research projects for valuable input | |||
</t> | to this document. We especially thank <contact fullname="Michael | |||
<t>WG -03: updated sentence referencing <xref target="I-D.ietf-taps- | Tüxen"/> for help with connection establishment/teardown, | |||
transport-security"/> to say that "the minimum security requirements for a taps | <contact fullname="Gorry Fairhurst"/> for his suggestions regarding | |||
system are discussed in a separate security document", wrote "example" in the pa | fragmentation and packet sizes, and <contact fullname="Spencer Dawkins"/> | |||
ragraph introducing the decision tree. Removed reference draft-grinnemo-taps-he- | for his extremely detailed and constructive review. This work has | |||
03 and the sentence that referred to it. | received funding from the European Union's Horizon 2020 research and | |||
</t> | innovation program under grant agreement No. 644334 (NEAT). | |||
<t>WG -04: addressed comments from Theresa Enghardt and Tommy Pauly. | ||||
As part of that, removed "TAPS" as a term everywhere (abstract, intro, ..). | ||||
</t> | ||||
<t>WG -05: addressed comments from Spencer Dawkins. | ||||
</t> | ||||
<t>WG -06: Fixed nits. | ||||
</t> | ||||
<t>WG -07: Addressed Genart comments from Robert Sparks. | ||||
</t> | ||||
<t>WG -08: Addressed one more Genart comment from Robert Sparks. | ||||
</t> | ||||
<t>WG -09: Addressed comments from Mirja Kuehlewind, Alvaro Retana, | ||||
Ben Campbell, Benjamin Kaduk and Eric Rescorla. | ||||
</t> | ||||
<t>WG -10: Addressed comments from Benjamin Kaduk and Eric Rescorla. | ||||
</t> | ||||
<t>WG -11: Addressed comments from Alissa Cooper. | ||||
</t> | ||||
</section> | </t> | |||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 118 change blocks. | ||||
3028 lines changed or deleted | 2930 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/ |