draft-ietf-taps-transports-usage-04.txt | draft-ietf-taps-transports-usage-05.txt | |||
---|---|---|---|---|
TAPS M. Welzl | TAPS M. Welzl | |||
Internet-Draft University of Oslo | Internet-Draft University of Oslo | |||
Intended status: Informational M. Tuexen | Intended status: Informational M. Tuexen | |||
Expires: October 7, 2017 Muenster Univ. of Appl. Sciences | Expires: November 25, 2017 Muenster Univ. of Appl. Sciences | |||
N. Khademi | N. Khademi | |||
University of Oslo | University of Oslo | |||
April 5, 2017 | May 24, 2017 | |||
On the Usage of Transport Features Provided by IETF Transport Protocols | On the Usage of Transport Features Provided by IETF Transport Protocols | |||
draft-ietf-taps-transports-usage-04 | draft-ietf-taps-transports-usage-05 | |||
Abstract | Abstract | |||
This document describes how TCP, MPTCP, SCTP, UDP and UDP-Lite expose | This document describes how the transport protocols Transmission | |||
services to applications and how an application can configure and use | Control Protocol (TCP), MultiPath TCP (MPTCP), Stream Control | |||
the transport features that make up these services. It also | Transmission Protocol (SCTP), User Datagram Protocol (UDP) and | |||
discusses the service provided by the LEDBAT congestion control | Lightweight User Datagram Protocol (UDP-Lite) expose services to | |||
mechanism. | applications and how an application can configure and use the | |||
features that make up these services. It also discusses the service | ||||
provided by the Low Extra Delay Background Transport (LEDBAT) | ||||
congestion control mechanism. | ||||
Status of this Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on October 7, 2017. | This Internet-Draft will expire on November 25, 2017. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Pass 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Pass 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
3.1. Primitives Provided by TCP . . . . . . . . . . . . . . . . 5 | 3.1. Primitives Provided by TCP . . . . . . . . . . . . . . . 5 | |||
3.1.1. Excluded Primitives or Parameters . . . . . . . . . . 8 | 3.1.1. Excluded Primitives or Parameters . . . . . . . . . . 9 | |||
3.2. Primitives Provided by MPTCP . . . . . . . . . . . . . . . 9 | 3.2. Primitives Provided by MPTCP . . . . . . . . . . . . . . 9 | |||
3.3. Primitives Provided by SCTP . . . . . . . . . . . . . . . 10 | 3.3. Primitives Provided by SCTP . . . . . . . . . . . . . . . 10 | |||
3.3.1. Excluded Primitives or Parameters . . . . . . . . . . 17 | 3.3.1. Excluded Primitives or Parameters . . . . . . . . . . 18 | |||
3.4. Primitives Provided by UDP and UDP-Lite . . . . . . . . . 18 | 3.4. Primitives Provided by UDP and UDP-Lite . . . . . . . . . 18 | |||
3.5. The service of LEDBAT . . . . . . . . . . . . . . . . . . 18 | 3.5. The service of LEDBAT . . . . . . . . . . . . . . . . . . 19 | |||
4. Pass 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 4. Pass 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
4.1. CONNECTION Related Primitives . . . . . . . . . . . . . . 20 | 4.1. CONNECTION Related Primitives . . . . . . . . . . . . . . 21 | |||
4.2. DATA Transfer Related Primitives . . . . . . . . . . . . . 31 | 4.2. DATA Transfer Related Primitives . . . . . . . . . . . . 36 | |||
5. Pass 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | 5. Pass 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
5.1. CONNECTION Related Transport Features . . . . . . . . . . 34 | 5.1. CONNECTION Related Transport Features . . . . . . . . . . 39 | |||
5.2. DATA Transfer Related Transport Features . . . . . . . . . 40 | 5.2. DATA Transfer Related Transport Features . . . . . . . . 47 | |||
5.2.1. Sending Data . . . . . . . . . . . . . . . . . . . . . 40 | 5.2.1. Sending Data . . . . . . . . . . . . . . . . . . . . 48 | |||
5.2.2. Receiving Data . . . . . . . . . . . . . . . . . . . . 41 | 5.2.2. Receiving Data . . . . . . . . . . . . . . . . . . . 49 | |||
5.2.3. Errors . . . . . . . . . . . . . . . . . . . . . . . . 41 | 5.2.3. Errors . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 42 | 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 50 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 51 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 51 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 42 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 51 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . . 42 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 51 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . . 45 | 9.2. Informative References . . . . . . . . . . . . . . . . . 54 | |||
Appendix A. Overview of RFCs used as input for pass 1 . . . . . . 46 | Appendix A. Overview of RFCs used as input for pass 1 . . . . . 55 | |||
Appendix B. How this document was developed . . . . . . . . . . . 46 | Appendix B. How this document was developed . . . . . . . . . . 55 | |||
Appendix C. Revision information . . . . . . . . . . . . . . . . 48 | Appendix C. Revision information . . . . . . . . . . . . . . . . 57 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 49 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 58 | |||
1. Terminology | 1. Terminology | |||
Transport Feature: a specific end-to-end feature that the transport | Transport Feature: a specific end-to-end feature that the transport | |||
layer provides to an application. Examples include | layer provides to an application. Examples include | |||
confidentiality, reliable delivery, ordered delivery, message- | confidentiality, reliable delivery, ordered delivery, message- | |||
versus-stream orientation, etc. | versus-stream orientation, etc. | |||
Transport Service: a set of Transport Features, without an | Transport Service: a set of Transport Features, without an | |||
association to any given framing protocol, which provides a | association to any given framing protocol, which provides a | |||
complete service to an application. | complete service to an application. | |||
skipping to change at page 3, line 31 ¶ | skipping to change at page 3, line 22 ¶ | |||
implements a single transport service, e.g., a protocol stack (RTP | implements a single transport service, e.g., a protocol stack (RTP | |||
over UDP). | over UDP). | |||
Application: an entity that uses the transport layer for end-to-end | Application: an entity that uses the transport layer for end-to-end | |||
delivery of data across the network (this may also be an upper | delivery of data across the network (this may also be an upper | |||
layer protocol or tunnel encapsulation). | layer protocol or tunnel encapsulation). | |||
Endpoint: an entity that communicates with one or more other | Endpoint: an entity that communicates with one or more other | |||
endpoints using a transport protocol. | endpoints using a transport protocol. | |||
Connection: shared state of two or more endpoints that persists | Connection: shared state of two or more endpoints that persists | |||
across messages that are transmitted between these endpoints. | across messages that are transmitted between these endpoints. | |||
Primitive: a function call that is used to locally communicate | Primitive: a function call that is used to locally communicate | |||
between an application and a transport endpoint and is related to | between an application and a transport endpoint. A primitive is | |||
one or more Transport Features. | related to one or more Transport Features. | |||
Event: a primitive that is invoked by a transport endpoint. | ||||
Parameter: a value passed between an application and a transport | Parameter: a value passed between an application and a transport | |||
protocol by a primitive. | protocol by a primitive. | |||
Socket: the combination of a destination IP address and a | Socket: the combination of a destination IP address and a | |||
destination port number. | destination port number. | |||
Transport Address: the combination of an IP address, transport | Transport Address: the combination of an IP address, transport | |||
protocol and the port number used by the transport protocol. | protocol and the port number used by the transport protocol. | |||
2. Introduction | 2. Introduction | |||
This document presents defined interactions between applications and | This document presents, in the form of primitives, events and | |||
the transport protocols TCP, MPTCP, SCTP, UDP and UDP-Lite as well as | transport features, defined interactions between applications and the | |||
the LEDBAT congestion control mechanism in the form of primitives and | following unicast transport protocols: Transmission Control Protocol | |||
Transport Features. Primitives can be invoked by an application or a | (TCP), MultiPath TCP (MPTCP), Stream Control Transmission Protocol | |||
transport protocol; the latter type is called an "event". The list | (SCTP), User Datagram Protocol (UDP), Lightweight User Datagram | |||
of primitives and Transport Features in this document is strictly | Protocol (UDP-Lite). It also defines a primitive to enable/disable | |||
based on the parts of protocol specifications that describe what the | and configure the Low Extra Delay Background Transport (LEDBAT) | |||
protocol provides to an application using it and how the application | unicast congestion control mechanism. Transport protocols provide | |||
interacts with it. Together with [RFC8095], it provides the basis | communication between processes that operate on network endpoints, | |||
for the minimal set of transport services that end systems should | which means that they allow for multiplexing of communication between | |||
support; this minimal set is derived in | the same IP addresses, and normally this multiplexing is achieved | |||
using port numbers. Port multiplexing is therefore assumed to be | ||||
always provided and not discussed in this document. | ||||
The list of primitives, events and transport features in this | ||||
document is strictly based on the parts of protocol specifications | ||||
that describe what the protocol provides to an application using it | ||||
and how the application interacts with it. Together with an overview | ||||
of the services provided by IETF transport protocols and congestion | ||||
control mechanisms [RFC8095] and an analysis of UDP and UDP-Lite | ||||
[FJ16], it provides the basis for the minimal set of transport | ||||
services that end systems should support | ||||
[I-D.draft-gjessing-taps-minset]. | [I-D.draft-gjessing-taps-minset]. | |||
Parts of a protocol that are explicitly stated as optional to | Parts of a protocol that are explicitly stated as optional to | |||
implement are not covered. Interactions between the application and | implement are not covered. Interactions between the application and | |||
a transport protocol that are not directly related to the operation | a transport protocol that are not directly related to the operation | |||
of the protocol are also not covered. For example, [RFC6458] | of the protocol are also not covered. For example, there are various | |||
explains how an application can use socket options to indicate its | ways for an application to use socket options to indicate its | |||
interest in receiving certain notifications. However, for the | interest in receiving certain notifications [RFC6458]. However, for | |||
purpose of identifying primitives and Transport Services, the ability | the purpose of identifying primitives, events and transport features, | |||
to enable or disable the reception of notifications is irrelevant. | the ability to enable or disable the reception of notifications is | |||
Similarly, one-to-many style sockets described in [RFC6458] just | irrelevant. Similarly, "one-to-many style sockets" [RFC6458] just | |||
affect the application programming style, not how the underlying | affect the application programming style, not how the underlying | |||
protocol operates, and they are therefore not discussed here. The | protocol operates, and they are therefore not discussed here. The | |||
same is true for the ability to obtain the unchanged value of a | same is true for the ability to obtain the unchanged value of a | |||
parameter that an application has previously set (this is the case | parameter that an application has previously set (e.g.,via "get" in | |||
for the "get" in many get/set operations in [RFC6458]). | get/set operations [RFC6458]). | |||
The document presents a three-pass process to arrive at a list of | The document presents a three-pass process to arrive at a list of | |||
Transport Features. In the first pass, the relevant RFC text is | transport features. In the first pass, the relevant RFC text is | |||
discussed per protocol. In the second pass, this discussion is used | discussed per protocol. In the second pass, this discussion is used | |||
to derive a list of primitives that are uniformly categorized across | to derive a list of primitives and events that are uniformly | |||
protocols. Here, an attempt is made to present or -- where text | categorized across protocols. Here, an attempt is made to present or | |||
describing primitives does not yet exist -- construct primitives in a | -- where text describing primitives or events does not yet exist -- | |||
slightly generalized form to highlight similarities. This is, for | construct primitives or events in a slightly generalized form to | |||
example, achieved by renaming primitives of protocols or by avoiding | highlight similarities. This is, for example, achieved by renaming | |||
a strict 1:1-mapping between the primitives in the protocol | primitives or events of protocols or by avoiding a strict 1:1-mapping | |||
specification and primitives in the list. Finally, the third pass | between the primitives or events in the protocol specification and | |||
presents Transport Features based on pass 2, identifying which | primitives or events in the list. Finally, the third pass presents | |||
protocols implement them. | transport features based on pass 2, identifying which protocols | |||
implement them. | ||||
In the list resulting from the second pass, some Transport Features | In the list resulting from the second pass, some transport features | |||
are missing because they are implicit in some protocols, and they | are missing because they are implicit in some protocols, and they | |||
only become explicit when we consider the superset of all features | only become explicit when we consider the superset of all transport | |||
offered by all protocols. For example, TCP always carries out | features offered by all protocols. For example, TCP always carries | |||
congestion control; we have to consider it together with a protocol | out congestion control; we have to consider it together with a | |||
like UDP (which does not have congestion control) before we can | protocol like UDP (which does not have congestion control) before we | |||
consider congestion control as a Transport Feature. The complete | can consider congestion control as a transport feature. The complete | |||
list of features across all protocols is therefore only available | list of transport features across all protocols is therefore only | |||
after pass 3. | available after pass 3. | |||
This document discusses unicast transport protocols and a unicast | ||||
congestion control mechanism. Transport protocols provide | ||||
communication between processes that operate on network endpoints, | ||||
which means that they allow for multiplexing of communication between | ||||
the same IP addresses, and normally this multiplexing is achieved | ||||
using port numbers. Port multiplexing is therefore assumed to be | ||||
always provided and not discussed in this document. | ||||
Some protocols are connection-oriented. Connection-oriented | Some protocols are connection-oriented. Connection-oriented | |||
protocols often use an initial call to a specific transport primitive | protocols often use an initial call to a specific primitive to open a | |||
to open a connection before communication can progress, and require | connection before communication can progress, and require | |||
communication to be explicitly terminated by issuing another call to | communication to be explicitly terminated by issuing another call to | |||
a transport primitive (usually called "close"). A "connection" is | a primitive (usually called "close"). A "connection" is the common | |||
the common state that some transport primitives refer to, e.g., to | state that some transport primitives refer to, e.g., to adjust | |||
adjust general configuration settings. Connection establishment, | general configuration settings. Connection establishment, | |||
maintenance and termination are therefore used to categorize | maintenance and termination are therefore used to categorize | |||
transport primitives of connection-oriented transport protocols in | transport primitives of connection-oriented transport protocols in | |||
pass 2 and pass 3. For this purpose, UDP is assumed to be used with | pass 2 and pass 3. For this purpose, UDP is assumed to be used with | |||
"connected" sockets, i.e. sockets that are bound to a specific pair | "connected" sockets, i.e. sockets that are bound to a specific pair | |||
of addresses and ports [FJ16]. | of addresses and ports [FJ16]. | |||
3. Pass 1 | 3. Pass 1 | |||
This first iteration summarizes the relevant text parts of the RFCs | This first iteration summarizes the relevant text parts of the RFCs | |||
describing the protocols, focusing on what each transport protocol | describing the protocols, focusing on what each transport protocol | |||
provides to the application and how it is used (abstract API | provides to the application and how it is used (abstract API | |||
descriptions, where they are available). | descriptions, where they are available). | |||
3.1. Primitives Provided by TCP | 3.1. Primitives Provided by TCP | |||
[RFC0793] states: "The Transmission Control Protocol (TCP) is | The initial TCP specification [RFC0793] states: "The Transmission | |||
intended for use as a highly reliable host-to-host protocol between | Control Protocol (TCP) is intended for use as a highly reliable host- | |||
hosts in packet-switched computer communication networks, and in | to-host protocol between hosts in packet-switched computer | |||
interconnected systems of such networks". Section 3.8 in [RFC0793] | communication networks, and in interconnected systems of such | |||
further specifies the interaction with the application by listing | networks". Section 3.8 in this specification [RFC0793] further | |||
several transport primitives. It is also assumed that an Operating | specifies the interaction with the application by listing several | |||
System provides a means for TCP to asynchronously signal the | transport primitives. It is also assumed that an Operating System | |||
application; the primitives representing such signals are called | provides a means for TCP to asynchronously signal the application; | |||
'events' in this section. This section describes the relevant | the primitives representing such signals are called 'events' in this | |||
primitives. | section. This section describes the relevant primitives. | |||
open: this is either active or passive, to initiate a connection or | open: this is either active or passive, to initiate a connection or | |||
listen for incoming connections. All other primitives are | listen for incoming connections. All other primitives are | |||
associated with a specific connection, which is assumed to first | associated with a specific connection, which is assumed to first | |||
have been opened. An active open call contains a socket. A | have been opened. An active open call contains a socket. A | |||
passive open call with a socket waits for a particular connection; | passive open call with a socket waits for a particular connection; | |||
alternatively, a passive open call can leave the socket | alternatively, a passive open call can leave the socket | |||
unspecified to accept any incoming connection. A fully specified | unspecified to accept any incoming connection. A fully specified | |||
passive call can later be made active by calling 'send'. | passive call can later be made active by calling 'send'. | |||
Optionally, a timeout can be specified, after which TCP will abort | Optionally, a timeout can be specified, after which TCP will abort | |||
the connection if data has not been successfully delivered to the | the connection if data has not been successfully delivered to the | |||
destination (else a default timeout value is used). [RFC1122] | destination (else a default timeout value is used). A procedure | |||
describes a procedure for aborting the connection that must be | for aborting the connection is used to avoid excessive | |||
used to avoid excessive retransmissions, and states that an | retransmissions, and an application is able to control the | |||
application must be able to control the threshold used to | threshold used to determine the condition for aborting; this | |||
determine the condition for aborting -- and that this threshold | threshold may be measured in time units or as a count of | |||
may be measured in time units or as a count of retransmission. | retransmission [RFC1122]. This indicates that the timeout could | |||
This indicates that the timeout could also be specified as a count | also be specified as a count of retransmission. | |||
of retransmission. | ||||
Also optional, for multihomed hosts, the local IP address can be | Also optional, for multihomed hosts, the local IP address can be | |||
provided [RFC1122]. If it is not provided, a default choice will | provided [RFC1122]. If it is not provided, a default choice will | |||
be made in case of active open calls. A passive open call will | be made in case of active open calls. A passive open call will | |||
await incoming connection requests to all local addresses and then | await incoming connection requests to all local addresses and then | |||
maintain usage of the local IP address where the incoming | maintain usage of the local IP address where the incoming | |||
connection request has arrived. Finally, the 'options' parameter | connection request has arrived. Finally, the 'options' parameter | |||
is explained in [RFC1122] to allow the application to specify IP | allows the application to specify IP options such as source route, | |||
options such as source route, record route, or timestamp. It is | record route, or timestamp [RFC1122]. It is not stated on which | |||
not stated on which segments of a connection these options should | segments of a connection these options should be applied, but | |||
be applied, but probably all segments, as this is also stated in a | probably all segments, as this is also stated in a specification | |||
specification given for the usage of source route (section 4.2.3.8 | given for the usage of source route (section 4.2.3.8 of | |||
of [RFC1122]). Source route is the only non-optional IP option in | [RFC1122]). Source route is the only non-optional IP option in | |||
this parameter, allowing an application to specify a source route | this parameter, allowing an application to specify a source route | |||
when it actively opens a TCP connection. | when it actively opens a TCP connection. | |||
Master Key Tuples (MKTs) for authentication can optionally be | Master Key Tuples (MKTs) for authentication can optionally be | |||
configured when calling open (section 7.1 of [RFC5925]). | configured when calling open (section 7.1 of [RFC5925]). When | |||
authentication is in use, complete TCP segments are authenticated, | ||||
including the TCP IPv4 pseudoheader, TCP header, and TCP data. | ||||
TCP Fast Open (TFO) [RFC7413] allows to immediately hand over a | TCP Fast Open (TFO) [RFC7413] allows to immediately hand over a | |||
message from the active open to the passive open side of a TCP | message from the active open to the passive open side of a TCP | |||
connection together with the first message establishment packet | connection together with the first message establishment packet | |||
(the SYN). This can be useful for applications that are sensitive | (the SYN). This can be useful for applications that are sensitive | |||
to TCP's connection setup delay. TCP implementations MUST NOT use | to TCP's connection setup delay. TCP implementations MUST NOT use | |||
TFO by default, but only use TFO if requested explicitly by the | TFO by default, but only use TFO if requested explicitly by the | |||
application on a per-service-port basis. To benefit from TFO, the | application on a per-service-port basis. more than TCP's maximum | |||
first application data unit (e.g., an HTTP request) needs to be no | segment size (minus options used in the SYN). For the active open | |||
more than TCP's maximum segment size (minus options used in the | side, it is recommended to change or replace the connect() call in | |||
SYN). For the active open side, [RFC7413] recommends changing or | order to support a user data buffer argument [RFC7413]. For the | |||
replacing the connect() call in order to support a user data | passive open side, the application needs to enable the reception | |||
buffer argument. For the passive open side, the application needs | of Fast Open requests, e.g. via a new TCP_FASTOPEN setsockopt() | |||
to enable the reception of Fast Open requests, e.g. via a new | socket option before listen(). The receiving application must be | |||
TCP_FASTOPEN setsockopt() socket option before listen(). The | prepared to accept duplicates of the TFO message, as the first | |||
receiving application must be prepared to accept duplicates of the | data written to a socket can be delivered more than once to the | |||
TFO message, as the first data written to a socket can be | application on the remote host. | |||
delivered more than once to the application on the remote host. | ||||
send: this is the primitive that an application uses to give the | send: this is the primitive that an application uses to give the | |||
local TCP transport endpoint a number of bytes that TCP should | local TCP transport endpoint a number of bytes that TCP should | |||
reliably send to the other side of the connection. The URGENT | reliably send to the other side of the connection. The URGENT | |||
flag, if set, states that the data handed over by this send call | flag, if set, states that the data handed over by this send call | |||
is urgent and this urgency should be indicated to the receiving | is urgent and this urgency should be indicated to the receiving | |||
process in case the receiving application has not yet consumed all | process in case the receiving application has not yet consumed all | |||
non-urgent data preceding it. An optional timeout parameter can | non-urgent data preceding it. An optional timeout parameter can | |||
be provided that updates the connection's timeout (see 'open'). | be provided that updates the connection's timeout (see 'open'). | |||
Additionally, optional parameters allow to indicate the preferred | Additionally, optional parameters allow to indicate the preferred | |||
skipping to change at page 7, line 40 ¶ | skipping to change at page 7, line 38 ¶ | |||
close event: TCP uses this primitive to inform an application that | close event: TCP uses this primitive to inform an application that | |||
the application on the other side has called the 'close' | the application on the other side has called the 'close' | |||
primitive, so the local application can also issue a 'close' and | primitive, so the local application can also issue a 'close' and | |||
terminate the connection gracefully. See [RFC0793], Section 3.5. | terminate the connection gracefully. See [RFC0793], Section 3.5. | |||
abort event: When TCP aborts a connection upon receiving a "Reset" | abort event: When TCP aborts a connection upon receiving a "Reset" | |||
from the peer, it "advises the user and goes to the CLOSED state." | from the peer, it "advises the user and goes to the CLOSED state." | |||
See [RFC0793], Section 3.4. | See [RFC0793], Section 3.4. | |||
USER TIMEOUT event: This event, described in Section 3.9 of | USER TIMEOUT event: This event is executed when the user timeout | |||
[RFC0793], is executed when the user timeout expires (see 'open'). | expires (see 'open') (section 3.9 of [RFC0793]). All queues are | |||
All queues are flushed and the application is informed that the | flushed and the application is informed that the connection had to | |||
connection had to be aborted due to user timeout. | be aborted due to user timeout. | |||
ERROR_REPORT event: This event, described in Section 4.2.4.1 of | ERROR_REPORT event: This event informs the application of "soft | |||
[RFC1122], informs the application of "soft errors" that can be | errors" that can be safely ignored [RFC5461], including the | |||
safely ignored [RFC5461], including the arrival of an ICMP error | arrival of an ICMP error message or excessive retransmissions | |||
message or excessive retransmissions (reaching a threshold below | (reaching a threshold below the threshold where the connection is | |||
the threshold where the connection is aborted). | aborted). See section 4.2.4.1 of [RFC1122]. | |||
Type-of-Service: Section 4.2.4.2 of [RFC1122] states that the | Type-of-Service: Section 4.2.4.2 of the requirements for Internet | |||
application layer MUST be able to specify the Type-of-Service | hosts [RFC1122] states that the application layer MUST be able to | |||
(TOS) for segments that are sent on a connection. The application | specify the Type-of-Service (TOS) for segments that are sent on a | |||
should be able to change the TOS during the connection lifetime, | connection. The application should be able to change the TOS | |||
and the TOS value should be passed to the IP layer unchanged. | during the connection lifetime, and the TOS value should be passed | |||
Since then the TOS field has been redefined. A part of the field | to the IP layer unchanged. Since then the TOS field has been | |||
has been assigned to ECN [RFC3168] and the six most significant | redefined. The Differentiated Services (diffuser) model [RFC2475] | |||
bits have been assigned to carry the DiffServ CodePoint, DSField | [RFC3260] replaces this field in the IP Header, assigning the six | |||
[RFC3260]. Staying with the intention behind the application's | most significant bits to carry the Differentiated Services Code | |||
ability to specify the "Type of Service", this should probably be | Point (DSCP) field [RFC2474]. | |||
interpreted to mean the value in the DSField, which is the | ||||
Differentiated Services Codepoint (DSCP). | ||||
Nagle: The Nagle algorithm, described in Section 4.2.3.4 of | Nagle: The Nagle algorithm delays sending data for some time to | |||
[RFC1122], delays sending data for some time to increase the | increase the likelihood of sending a full-sized segment (section | |||
likelihood of sending a full-sized segment. An application can | 4.2.3.4 of [RFC1122]). An application can disable the Nagle | |||
disable the Nagle algorithm for an individual connection. | algorithm for an individual connection. | |||
User Timeout Option: The User Timeout Option (UTO) [RFC5482] allows | User Timeout Option: The User Timeout Option (UTO) [RFC5482] allows | |||
one end of a TCP connection to advertise its current user timeout | one end of a TCP connection to advertise its current user timeout | |||
value so that the other end of the TCP connection can adapt its | value so that the other end of the TCP connection can adapt its | |||
own user timeout accordingly. In addition to the configurable | own user timeout accordingly. In addition to the configurable | |||
value of the User Timeout (see 'send'), [RFC5482] introduces three | value of the User Timeout (see 'send'), there are three per- | |||
per-connection state variables that an application can adjust to | connection state variables that an application can adjust to | |||
control the operation of the User Timeout Option (UTO): ADV_UTO is | control the operation of the User Timeout Option (UTO): ADV_UTO is | |||
the value of the UTO advertised to the remote TCP peer (default: | the value of the UTO advertised to the remote TCP peer (default: | |||
system-wide default user timeout); ENABLED (default false) is a | system-wide default user timeout); ENABLED (default false) is a | |||
boolean-type flag that controls whether the UTO option is enabled | boolean-type flag that controls whether the UTO option is enabled | |||
for a connection. This applies to both sending and receiving. | for a connection. This applies to both sending and receiving. | |||
CHANGEABLE is a boolean-type flag (default true) that controls | CHANGEABLE is a boolean-type flag (default true) that controls | |||
whether the user timeout may be changed based on a UTO option | whether the user timeout may be changed based on a UTO option | |||
received from the other end of the connection. CHANGEABLE becomes | received from the other end of the connection. CHANGEABLE becomes | |||
false when an application explicitly sets the user timeout (see | false when an application explicitly sets the user timeout (see | |||
'send'). | 'send'). | |||
3.1.1. Excluded Primitives or Parameters | Set / Get Authentication Parameters: The preferred outgoing MKT | |||
(current_key) and/or the preferred incoming MKT (rnext_key) of a | ||||
connection can be configured. Information about current_key and | ||||
rnext_key carried in a recently received segment can be retrieved | ||||
(section 7.1 of [RFC5925]). | ||||
The 'open' primitive specified in [RFC0793] can be handed optional | 3.1.1. Excluded Primitives or Parameters | |||
Precedence or security/compartment information according to | ||||
[RFC0793], but this was not included here because it is mostly | ||||
irrelevant today, as explained in [RFC7414]. | ||||
The 'status' primitive was not included because [RFC0793] describes | The 'open' primitive can be handed optional Precedence or security/ | |||
this primitive as "implementation dependent" and states that it | compartment information [RFC0793], but this was not included here | |||
"could be excluded without adverse effect". Moreover, while a data | because it is mostly irrelevant today [RFC7414]. | |||
block containing specific information is described, it is also stated | ||||
that not all of this information may always be available. While | ||||
[RFC5925] states that 'status' SHOULD be augmented to allow the MKTs | The 'status' primitive was not included because the initial TCP | |||
of a current or pending connection to be read (for confirmation), the | specification describes this primitive as "implementation dependent" | |||
same information is also available via 'receive', which MUST be | and states that it "could be excluded without adverse effect" | |||
augmented with that functionality according to [RFC5925]. The 'send' | [RFC0793]. Moreover, while a data block containing specific | |||
primitive described in [RFC0793] includes an optional PUSH flag | information is described, it is also stated that not all of this | |||
which, if set, requires data to be promptly transmitted to the | information may always be available. While 'status' SHOULD be | |||
receiver without delay; the 'receive' primitive described in | augmented to allow the MKTs of a current or pending connection to be | |||
[RFC0793] can (under some conditions) yield the status of the PUSH | read (for confirmation), the same information is also available via | |||
flag. Because PUSH functionality is made optional to implement for | 'receive', which MUST be augmented with that functionality [RFC5925]. | |||
both the 'send' and 'receive' primitives in [RFC1122], this | The 'send' primitive includes an optional PUSH flag which, if set, | |||
functionality is not included here. [RFC1122] also introduces keep- | requires data to be promptly transmitted to the receiver without | |||
alives to TCP, but these are optional to implement and hence not | delay [RFC0793]; the 'receive' primitive described in can (under some | |||
considered here. [RFC1122] describes that "some TCP implementations | conditions) yield the status of the PUSH flag. Because PUSH | |||
have included a FLUSH call", indicating that this call is also | functionality is optional to implement for both the 'send' and | |||
optional to implement. It is therefore not considered here. | 'receive' primitives [RFC1122], this functionality is not included | |||
here. The requirements for Internet hosts [RFC1122] also introduce | ||||
keep-alives to TCP, but these are optional to implement and hence not | ||||
considered here. The same document also describes that "some TCP | ||||
implementations have included a FLUSH call", indicating that this | ||||
call is also optional to implement. It is therefore not considered | ||||
here. | ||||
3.2. Primitives Provided by MPTCP | 3.2. Primitives Provided by MPTCP | |||
Multipath TCP (MPTCP) is an extension to TCP that allows the use of | Multipath TCP (MPTCP) is an extension to TCP that allows the use of | |||
multiple paths for a single data-stream. It achieves this by | multiple paths for a single data-stream. It achieves this by | |||
creating different so-called TCP subflows for each of the interfaces | creating different so-called TCP subflows for each of the interfaces | |||
and scheduling the traffic across these TCP subflows. The service | and scheduling the traffic across these TCP subflows. The service | |||
provided by MPTCP is described in [RFC6182] "Multipath TCP MUST | provided by MPTCP is described as follows [RFC6182]: "Multipath TCP | |||
follow the same service model as TCP [RFC0793]: in- order, reliable, | MUST follow the same service model as TCP [RFC0793]: in- order, | |||
and byte-oriented delivery. Furthermore, a Multipath TCP connection | reliable, and byte-oriented delivery. Furthermore, a Multipath TCP | |||
SHOULD provide the application with no worse throughput or resilience | connection SHOULD provide the application with no worse throughput or | |||
than it would expect from running a single TCP connection over any | resilience than it would expect from running a single TCP connection | |||
one of its available paths." | over any one of its available paths." | |||
Further, [RFC6182] states constraints on the API exposed by MPTCP: "A | Further, there are some constraints on the API exposed by MPTCP | |||
multipath-capable equivalent of TCP MUST retain some level of | [RFC6182]: "A multipath-capable equivalent of TCP MUST retain some | |||
backward compatibility with existing TCP APIs, so that existing | level of backward compatibility with existing TCP APIs, so that | |||
applications can use the newer merely by upgrading the operating | existing applications can use the newer merely by upgrading the | |||
systems of the end hosts." As such, the primitives provided by MPTCP | operating systems of the end hosts." As such, the primitives | |||
are equivalent to the ones provided by TCP. Nevertheless, [RFC6824] | provided by MPTCP are equivalent to the ones provided by TCP. | |||
and [RFC6897] clarify some parts of TCP's primitives with respect to | Nevertheless, the MPTCP RFCs [RFC6824] and [RFC6897] clarify some | |||
MPTCP and add some extensions for better control on MPTCP's subflows. | parts of TCP's primitives with respect to MPTCP and add some | |||
Hereafter is a list of the clarifications and extensions the above | extensions for better control on MPTCP's subflows. Hereafter is a | |||
cited RFCs provide to TCP's primitives. | list of the clarifications and extensions the above cited RFCs | |||
provide to TCP's primitives. | ||||
open: [RFC6897] states "An application should be able to request to | open: "An application should be able to request to turn on or turn | |||
turn on or turn off the usage of MPTCP.". The RFC states that | off the usage of MPTCP" [RFC6897]. This functionality can be | |||
this functionality can be provided through a socket-option called | provided through a socket-option called TCP_MULTIPATH_ENABLE. | |||
TCP_MULTIPATH_ENABLE. Further, [RFC6897] says that MPTCP must be | Further, MPTCP must be disabled in case the application is binding | |||
disabled in case the application is binding to a specific address. | to a specific address [RFC6897]. | |||
send/receive: [RFC6824] states that the sending and receiving of | send/receive: The sending and receiving of data does not require any | |||
data does not require any changes to the application when MPTCP is | changes to the application when MPTCP is being used [RFC6824]. | |||
being used. The MPTCP-layer will "take one input data stream from | The MPTCP-layer will "take one input data stream from an | |||
an application, and split it into one or more subflows, with | application, and split it into one or more subflows, with | |||
sufficient control information to allow it to be reassembled and | sufficient control information to allow it to be reassembled and | |||
delivered reliably and in order to the recipient application." | delivered reliably and in order to the recipient application." | |||
The use of the Urgent-Pointer is special in MPTCP and [RFC6824] | The use of the Urgent-Pointer is special in MPTCP [RFC6824]: "a | |||
says "a TCP subflow MUST NOT use the Urgent Pointer to interrupt | TCP subflow MUST NOT use the Urgent Pointer to interrupt an | |||
an existing mapping." | existing mapping." | |||
address and subflow management: MPTCP uses different addresses and | address and subflow management: MPTCP uses different addresses and | |||
allows a host to announce these addresses as part of the protocol. | allows a host to announce these addresses as part of the protocol. | |||
[RFC6897] says "An application should be able to restrict MPTCP to | The MPTCP API Considerations RFC [RFC6897] says "An application | |||
binding to a given set of addresses." and thus allows applications | should be able to restrict MPTCP to binding to a given set of | |||
to limit the set of addresses that are being used by MPTCP. | addresses" and thus allows applications to limit the set of | |||
Further, "An application should be able to obtain information on | addresses that are being used by MPTCP. Further, "An application | |||
the pairs of addresses used by the MPTCP subflows.". | should be able to obtain information on the pairs of addresses | |||
used by the MPTCP subflows". | ||||
3.3. Primitives Provided by SCTP | 3.3. Primitives Provided by SCTP | |||
Section 1.1 of [RFC4960] lists limitations of TCP that SCTP removes. | TCP has a number of limitations that SCPT removes (section 1.1 of | |||
Three of the four mentioned limitations directly translate into | [RFC4960]). The following three removed limitations directly | |||
Transport Features that are visible to an application using SCTP: 1) | translate into transport features that are visible to an application | |||
it allows for preservation of message delineations; 2) these | using SCTP: 1) it allows for preservation of message delineations; 2) | |||
messages, while reliably transferred, do not require to be in order | these messages, while reliably transferred, do not require to be in | |||
unless the application wants it; 3) multi-homing is supported. In | order unless the application wants it; 3) multi-homing is supported. | |||
SCTP, connections are called "associations" and they can be between | In SCTP, connections are called "associations" and they can be | |||
not only two (as in TCP) but multiple addresses at each endpoint. | between not only two (as in TCP) but multiple addresses at each | |||
endpoint. | ||||
Section 10 of [RFC4960] further specifies the interaction with the | Section 10 of the SCTP base protocol specification [RFC4960] | |||
application (which RFC [RFC4960] calls the "Upper Layer Protocol" | specifies the interaction with the application (which this RFC calls | |||
(ULP)). It is assumed that the Operating System provides a means for | the "Upper Layer Protocol" (ULP)). It is assumed that the Operating | |||
SCTP to asynchronously signal the application; the primitives | System provides a means for SCTP to asynchronously signal the | |||
representing such signals are called 'events' in this section. Here, | application; the primitives representing such signals are called | |||
we describe the relevant primitives. In addition to the abstract API | 'events' in this section. Here, we describe the relevant primitives. | |||
described in Section 10 of [RFC4960], an extension to the socket API | In addition to the abstract API described in the section 10 of the | |||
is described in [RFC6458], covering the functionality of the base | SCTP base protocol specification [RFC4960], an extension to the | |||
protocol specified in [RFC4960] and its extensions specified in | socket API is described in [RFC6458]. This covers the functionality | |||
[RFC3758], [RFC4895], and [RFC5061]. For the protocol extensions | of the base protocol [RFC4960] and some of its extensions [RFC3758], | |||
specified in [RFC6525], [RFC6951], [RFC7053], [RFC7496], [RFC7829] | [RFC4895], [RFC5061]. For other protocol extensions [RFC6525], | |||
and [I-D.ietf-tsvwg-sctp-ndata], the corresponding extensions of the | [RFC6951], [RFC7053], [RFC7496], [RFC7829], | |||
[I-D.ietf-tsvwg-sctp-ndata], the corresponding extensions of the | ||||
socket API are specified in these protocol specifications. The | socket API are specified in these protocol specifications. The | |||
functionality exposed to the ULP through this socket API is | functionality exposed to the ULP through the all these APIs is | |||
considered here in addition to the abstract API specified in Section | considered here. | |||
10 of [RFC4960]. | ||||
[RFC4960] contains a "SETPROTOCOLPARAMETERS" primitive that allows to | The abstract API contains a "SETPROTOCOLPARAMETERS" primitive that | |||
adjust elements of a parameter list; it is stated that SCTP | allows to adjust elements of a parameter list [RFC4960]; it is stated | |||
implementations "may allow ULP to customize some of these protocol | that SCTP implementations "may allow ULP to customize some of these | |||
parameters", indicating that none of the elements of this parameter | protocol parameters", indicating that none of the elements of this | |||
list are mandatory to make ULP-configurable. Thus, we only consider | parameter list are mandatory to make ULP-configurable. Thus, we only | |||
the parameters in [RFC4960] that are also covered in one of the other | consider the parameters in the abstract API that are also covered in | |||
RFCs listed above, which leads us to exclude the parameters | one of the other RFCs listed above, which leads us to exclude the | |||
RTO.Alpha, RTO.Beta and HB.Max.Burst. For clarity, we also replace | parameters RTO.Alpha, RTO.Beta and HB.Max.Burst. For clarity, we | |||
"SETPROTOCOLPARAMETERS" itself with primitives that adjust parameters | also replace "SETPROTOCOLPARAMETERS" itself with primitives that | |||
or groups of parameters which fit together. | adjust parameters or groups of parameters which fit together. | |||
Initialize: Initialize, described in [RFC4960], creates a local SCTP | Initialize: Initialize creates a local SCTP instance that it binds | |||
instance that it binds to a set of local addresses (and, if | to a set of local addresses (and, if provided, a local port | |||
provided, port number). Initialize needs to be called only once | number) [RFC4960]. Initialize needs to be called only once per | |||
per set of local addresses. [RFC6458] also describes a number of | set of local addresses. A number of per-association | |||
per-association initialization parameters that can be used when an | initialization parameters can be used when an association is | |||
association is created, but before it is connected (via the | created, but before it is connected (via the primitive 'Associate' | |||
primitive 'Associate' below): the maximum number of inbound | below): the maximum number of inbound streams the application is | |||
streams the application is prepared to support, the maximum number | prepared to support, the maximum number of attempts to be made | |||
of attempts to be made when sending the INIT (the first message of | when sending the INIT (the first message of association | |||
association establishment), and the maximum retransmission timeout | establishment), and the maximum retransmission timeout (RTO) value | |||
(RTO) value to use when attempting an INIT. At this point, before | to use when attempting an INIT [RFC6458]. At this point, before | |||
connecting, an application can also enable UDP encapsulation by | connecting, an application can also enable UDP encapsulation by | |||
configuring the remote UDP encapsulation port number [RFC6951]. | configuring the remote UDP encapsulation port number [RFC6951]. | |||
Associate: This creates an association (the SCTP equivalent of a | Associate: This creates an association (the SCTP equivalent of a | |||
connection) that connects the local SCTP instance and a remote | connection) that connects the local SCTP instance and a remote | |||
SCTP instance. To identify the remote endpoint, it can be given | SCTP instance. To identify the remote endpoint, it can be given | |||
one or multiple (using connectx as described in section 9.9 of | one or multiple (using "connectx") sockets (section 9.9 of | |||
[RFC6458]) sockets. Most primitives are associated with a | [RFC6458]). Most primitives are associated with a specific | |||
specific association, which is assumed to first have been created. | association, which is assumed to first have been created. | |||
Associate can return a list of destination transport addresses so | Associate can return a list of destination transport addresses so | |||
that multiple paths can later be used. One of the returned | that multiple paths can later be used. One of the returned | |||
sockets will be selected by the local endpoint as default primary | sockets will be selected by the local endpoint as default primary | |||
path for sending SCTP packets to this peer, but this choice can be | path for sending SCTP packets to this peer, but this choice can be | |||
changed by the application using the list of destination | changed by the application using the list of destination | |||
addresses. Associate is also given the number of outgoing streams | addresses. Associate is also given the number of outgoing streams | |||
to request and optionally returns the number of negotiated | to request and optionally returns the number of negotiated | |||
outgoing streams. An optional parameter of 32 bits, the | outgoing streams. An optional parameter of 32 bits, the | |||
adaptation layer indication, can be provided, as specified in | adaptation layer indication, can be provided [RFC5061]. If | |||
[RFC5061]. If the extension specified in [RFC4895] is used, the | authenticated chunks are used, the chunk types required to be sent | |||
chunk types required to be sent authenticated by the peer can be | authenticated by the peer can be provided [RFC4895]. A | |||
provided. [RFC6458] describes a 'SCTP_CANT_STR_ASSOC' | 'SCTP_CANT_STR_ASSOC' notification is used to inform the | |||
notification that is used to inform the application of a failure | application of a failure to create an association [RFC6458]. An | |||
to create an association. [RFC6458] describes how an application | application could use sendto() or sendmsg() to implicitly setup an | |||
could use sendto() or sendmsg() to implicitly setup an | ||||
association, thereby handing over a message that SCTP might send | association, thereby handing over a message that SCTP might send | |||
during the association setup phase. Note that this mechanism is | during the association setup phase [RFC6458]. Note that this | |||
different from TCP's TFO mechanism: the message would arrive only | mechanism is different from TCP's TFO mechanism: the message would | |||
once, after at least one RTT, as it is sent together with the | arrive only once, after at least one RTT, as it is sent together | |||
third message exchanged during association setup, the COOKIE-ECHO | with the third message exchanged during association setup, the | |||
chunk). | COOKIE-ECHO chunk). | |||
Send: This sends a message of a certain length in bytes over an | Send: This sends a message of a certain length in bytes over an | |||
association. A number can be provided to later refer to the | association. A number can be provided to later refer to the | |||
correct message when reporting an error, and a stream id is | correct message when reporting an error, and a stream id is | |||
provided to specify the stream to be used inside an association | provided to specify the stream to be used inside an association | |||
(we consider this as a mandatory parameter here for simplicity: if | (we consider this as a mandatory parameter here for simplicity: if | |||
not provided, the stream id defaults to 0). A condition to | not provided, the stream id defaults to 0). A condition to | |||
abandon the message can be specified (for example limiting the | abandon the message can be specified (for example limiting the | |||
number of retransmissions or the lifetime of the user message). | number of retransmissions or the lifetime of the user message). | |||
This allows to control the partial reliability extension specified | This allows to control the partial reliability extension | |||
in [RFC3758] and [RFC7496]. An optional maximum life time can | [RFC3758], [RFC7496]. An optional maximum life time can specify | |||
specify the time after which the message should be discarded | the time after which the message should be discarded rather than | |||
rather than sent. A choice (advisory, i.e. not guaranteed) of the | sent. A choice (advisory, i.e. not guaranteed) of the preferred | |||
preferred path can be made by providing a socket, and the message | path can be made by providing a socket, and the message can be | |||
can be delivered out-of-order if the unordered flag is set. An | delivered out-of-order if the unordered flag is set. An advisory | |||
advisory flag indicates that the peer should not delay the | flag indicates that the peer should not delay the acknowledgement | |||
acknowledgement of the user message provided by making use of the | of the user message provided [RFC7053]. Another advisory flag | |||
I-bit specified in [RFC7053]. Another advisory flag indicates | indicates whether the application prefers to avoid bundling user | |||
whether the application prefers to avoid bundling user data with | data with other outbound DATA chunks (i.e., in the same packet). | |||
other outbound DATA chunks (i.e., in the same packet). A payload | A payload protocol-id can be provided to pass a value that | |||
protocol-id can be provided to pass a value that indicates the | indicates the type of payload protocol data to the peer. If | |||
type of payload protocol data to the peer. If the extension | authenticated chunks are used, the key identifier for | |||
specified in [RFC4895] is used, the key identifier used for | authenticating DATA chunks can be provided [RFC4895]. | |||
authenticating the DATA chunks can be provided. | ||||
Receive: Messages are received from an association, and optionally a | Receive: Messages are received from an association, and optionally a | |||
stream within the association, with their size returned. The | stream within the association, with their size returned. The | |||
application is notified of the availability of data via a DATA | application is notified of the availability of data via a DATA | |||
ARRIVE notification. If the sender has included a payload | ARRIVE notification. If the sender has included a payload | |||
protocol-id, this value is also returned. If the received message | protocol-id, this value is also returned. If the received message | |||
is only a partial delivery of a whole message, a partial flag will | is only a partial delivery of a whole message, a partial flag will | |||
indicate so, in which case the stream id and a stream sequence | indicate so, in which case the stream id and a stream sequence | |||
number are provided to the application. A delivery number lets | number are provided to the application. A delivery number lets | |||
the application detect reordering. | the application detect reordering. | |||
skipping to change at page 13, line 17 ¶ | skipping to change at page 13, line 29 ¶ | |||
was aborted. Optionally, an abort reason to be passed to the peer | was aborted. Optionally, an abort reason to be passed to the peer | |||
may be provided by the application. A return code informs about | may be provided by the application. A return code informs about | |||
success or failure of this procedure. | success or failure of this procedure. | |||
Change Heartbeat / Request Heartbeat: This allows the application to | Change Heartbeat / Request Heartbeat: This allows the application to | |||
enable/disable heartbeats and optionally specify a heartbeat | enable/disable heartbeats and optionally specify a heartbeat | |||
frequency as well as requesting a single heartbeat to be carried | frequency as well as requesting a single heartbeat to be carried | |||
out upon a function call, with a notification about success or | out upon a function call, with a notification about success or | |||
failure of transmitting the HEARTBEAT chunk to the destination. | failure of transmitting the HEARTBEAT chunk to the destination. | |||
Configure Max. Retransmissions of an Association: The parameter | Configure Max. Retransmissions of an Association: The parameter Asso | |||
Association.Max.Retrans in [RFC4960], called sasoc_maxrxt in | ciation.Max.Retrans [RFC4960] (called "sasoc_maxrxt" in the SCTP | |||
[RFC6458], allows to configure the number of unsuccessful | socket API extensions [RFC6458]), allows to configure the number | |||
retransmissions after which an entire association is considered as | of unsuccessful retransmissions after which an entire association | |||
failed (which should invoke a COMMUNICATION LOST notification). | is considered as failed; this should invoke a COMMUNICATION LOST | |||
notification. | ||||
Set Primary: This allows to set a new primary default path for an | Set Primary: This allows to set a new primary default path for an | |||
association by providing a socket. Optionally, a default source | association by providing a socket. Optionally, a default source | |||
address to be used in IP datagrams can be provided. | address to be used in IP datagrams can be provided. | |||
Change Local Address / Set Peer Primary: This allows an endpoint to | Change Local Address / Set Peer Primary: This allows an endpoint to | |||
add/remove local addresses to/from an association. In addition, | add/remove local addresses to/from an association. In addition, | |||
the peer can be given a hint which address to use as the primary | the peer can be given a hint which address to use as the primary | |||
address. This is provided by the protocol extension defined in | address [RFC5061]. | |||
[RFC5061]. | ||||
Configure Path Switchover: [RFC4960] contains a primitive called SET | Configure Path Switchover: The abstract API contains a primitive | |||
FAILURE THRESHOLD. This configures the parameter | called SET FAILURE THRESHOLD [RFC4960]. This configures the | |||
"Path.Max.Retrans", which determines after how many | parameter "Path.Max.Retrans", which determines after how many | |||
retransmissions a particular transport address is considered as | retransmissions a particular transport address is considered as | |||
unreachable. If there are more transport addresses available in | unreachable. If there are more transport addresses available in | |||
an association, reaching this limit will invoke a path switchover. | an association, reaching this limit will invoke a path switchover. | |||
[RFC7829] extends this method with a concept of "Potentially | An extension called "SCTP-PF" adds a concept of "Potentially | |||
Failed" (PF) paths. When a path is in PF state, SCTP will not | Failed" (PF) paths to this method [RFC7829]. When a path is in PF | |||
entirely give up sending on that path, but it will preferably send | state, SCTP will not entirely give up sending on that path, but it | |||
data on other active paths if such paths are available. Entering | will preferably send data on other active paths if such paths are | |||
the PF state is done upon exceeding a configured maximum number of | available. Entering the PF state is done upon exceeding a | |||
retransmissions. Thus, for all paths where this mechanism is | configured maximum number of retransmissions. Thus, for all paths | |||
used, there are two configurable error thresholds: one to decide | where this mechanism is used, there are two configurable error | |||
that a path is in PF state, and one to decide that the transport | thresholds: one to decide that a path is in PF state, and one to | |||
address is unreachable. | decide that the transport address is unreachable. | |||
Set / Get Authentication Parameters: This allows an endpoint to add/ | Set / Get Authentication Parameters: This allows an endpoint to add/ | |||
remove key material to/from an association. In addition, the | remove key material to/from an association. In addition, the | |||
chunk types being authenticated can be queried. This is provided | chunk types being authenticated can be queried [RFC4895]. | |||
by the protocol extension defined in [RFC4895]. | ||||
Add / Reset Streams, Reset Association: This allows an endpoint to | Add / Reset Streams, Reset Association: This allows an endpoint to | |||
add streams to an existing association or or to reset them | add streams to an existing association or or to reset them | |||
individually. Additionally, the association can be reset. This | individually. Additionally, the association can be reset | |||
is provided by the protocol extension defined in [RFC6525]. | [RFC6525]. | |||
Status: The 'Status' primitive returns a data block with information | Status: The 'Status' primitive returns a data block with information | |||
about a specified association, containing: association connection | about a specified association, containing: association connection | |||
state; destination transport address list; destination transport | state; destination transport address list; destination transport | |||
address reachability states; current local and peer receiver | address reachability states; current local and peer receiver | |||
window sizes; current local congestion window sizes; number of | window sizes; current local congestion window sizes; number of | |||
unacknowledged DATA chunks; number of DATA chunks pending receipt; | unacknowledged DATA chunks; number of DATA chunks pending receipt; | |||
primary path; most recent SRTT on primary path; RTO on primary | primary path; most recent SRTT on primary path; RTO on primary | |||
path; SRTT and RTO on other destination addresses [RFC4960] and | path; SRTT and RTO on other destination addresses [RFC4960] and | |||
MTU per path [RFC6458]. | MTU per path [RFC6458]. | |||
Enable / Disable Interleaving: This allows to enable or disable the | Enable / Disable Interleaving: This allows to enable or disable the | |||
negotiation of user message interleaving support for future | negotiation of user message interleaving support for future | |||
associations. For existing associations it is possible to query | associations. For existing associations it is possible to query | |||
whether user message interleaving support was negotiated or not on | whether user message interleaving support was negotiated or not on | |||
a particular association [I-D.ietf-tsvwg-sctp-ndata]. | a particular association [I-D.ietf-tsvwg-sctp-ndata]. | |||
Set Stream Scheduler: This allows to select a stream scheduler per | Set Stream Scheduler: This allows to select a stream scheduler per | |||
association, with a choice of: First Come First Serve, Round | association, with a choice of: First Come First Serve, Round | |||
Robin, Round Robin per Packet, Priority Based, Fair Bandwidth, | Robin, Round Robin per Packet, Priority Based, Fair Bandwidth, | |||
Weighted Fair Queuing. How these schedulers operate is described | Weighted Fair Queuing [I-D.ietf-tsvwg-sctp-ndata]. | |||
in detail in [I-D.ietf-tsvwg-sctp-ndata]. | ||||
Configure Stream Scheduler: This allows to change a parameter per | Configure Stream Scheduler: This allows to change a parameter per | |||
stream for the schedulers: a priority value for the Priority Based | stream for the schedulers: a priority value for the Priority Based | |||
scheduler and a weight for the Weighted Fair Queuing scheduler. | scheduler and a weight for the Weighted Fair Queuing scheduler. | |||
Enable/disable NODELAY: This turns on/off any Nagle-like algorithm | Enable/disable NODELAY: This turns on/off any Nagle-like algorithm | |||
for an association [RFC6458]. | for an association [RFC6458]. | |||
Configure send buffer size: This controls the amount of data SCTP | Configure send buffer size: This controls the amount of data SCTP | |||
may have waiting in internal buffers to be sent or retransmitted | may have waiting in internal buffers to be sent or retransmitted | |||
skipping to change at page 15, line 12 ¶ | skipping to change at page 15, line 29 ¶ | |||
octets, thereby controlling the receiver window for an association | octets, thereby controlling the receiver window for an association | |||
[RFC6458]. | [RFC6458]. | |||
Configure message fragmentation: If a user message causes an SCTP | Configure message fragmentation: If a user message causes an SCTP | |||
packet to exceed the maximum fragmentation size (which can be | packet to exceed the maximum fragmentation size (which can be | |||
provided by the application, and is otherwise the PMTU size), then | provided by the application, and is otherwise the PMTU size), then | |||
the message will be fragmented by SCTP. Disabling message | the message will be fragmented by SCTP. Disabling message | |||
fragmentation will produce an error instead of fragmenting the | fragmentation will produce an error instead of fragmenting the | |||
message [RFC6458]. | message [RFC6458]. | |||
Configure Path MTU Discovery: Section 8.1.12 of [RFC6458] explains | Configure Path MTU Discovery: Path MTU Discovery can be enabled or | |||
how Path MTU Discovery can be enabled or disabled per peer address | disabled per peer address of an association (section 8.1.12 of | |||
of an association. When it is enabled, the current Path MTU value | [RFC6458]). When it is enabled, the current Path MTU value can be | |||
can be obtained. When it is disabled, the Path MTU to be used can | obtained. When it is disabled, the Path MTU to be used can be | |||
be controlled by the application. | controlled by the application. | |||
Configure delayed SACK timer: The time before sending a SACK can be | Configure delayed SACK timer: The time before sending a SACK can be | |||
adjusted; delaying SACKs can be disabled; the number of packets | adjusted; delaying SACKs can be disabled; the number of packets | |||
that must be received before a SACK is sent without waiting for | that must be received before a SACK is sent without waiting for | |||
the delay timer to expire can be configured [RFC6458]. | the delay timer to expire can be configured [RFC6458]. | |||
Set Cookie life value: The Cookie life value can be adjusted as | Set Cookie life value: The Cookie life value can be adjusted | |||
explained in Section 8.1.2 of [RFC6458]. "Valid.Cookie.Life" is | (section 8.1.2 of [RFC6458]). "Valid.Cookie.Life" is also one of | |||
also one of the parameters listed as potentially adjustable with | the parameters that is potentially adjustable with | |||
SETPROTOCOLPARAMETERS in [RFC4960]. | SETPROTOCOLPARAMETERS [RFC4960]. | |||
Set maximum burst: The maximum burst of packets that can be emitted | Set maximum burst: The maximum burst of packets that can be emitted | |||
by a particular association (default 4, and values above 4 are | by a particular association (default 4, and values above 4 are | |||
optional to implement) can be adjusted as explained in Section | optional to implement) can be adjusted (section 8.1.2 of | |||
8.1.2 of [RFC6458]. "Max.Burst" is also one of the parameters | [RFC6458]). "Max.Burst" is also one of the parameters that is | |||
listed as potentially adjustable with SETPROTOCOLPARAMETERS in | potentially adjustable with SETPROTOCOLPARAMETERS [RFC4960]. | |||
[RFC4960]. | ||||
Configure RTO calculation: [RFC4960] lists the following adjustable | Configure RTO calculation: The abstract API contains the following | |||
parameters: RTO.Initial; RTO.Min; RTO.Max; RTO.Alpha; RTO.Beta. | adjustable parameters: RTO.Initial; RTO.Min; RTO.Max; RTO.Alpha; | |||
Only the initial, minimum and maximum RTO are also described as | RTO.Beta. Only the initial, minimum and maximum RTO are also | |||
configurable [RFC6458]. | described as configurable in the SCTP sockets API extensions | |||
[RFC6458]. | ||||
Set DSCP value: Section 8.1.12 of [RFC6458] explains how to set the | Set DSCP value: The DSCP value can be set per peer address of an | |||
DSCP value per peer address of an association. | association (section 8.1.12 of [RFC6458]). | |||
Set IPv6 flow label: Section 8.1.12 of [RFC6458] explains how to set | Set IPv6 flow label: The flow label field can be set per peer | |||
the flow label field per peer address of an association. | address of an association (section 8.1.12 of [RFC6458]). | |||
Set Partial Delivery Point: This allows to specify the size of a | Set Partial Delivery Point: This allows to specify the size of a | |||
message where partial delivery will be invoked. Setting this to a | message where partial delivery will be invoked. Setting this to a | |||
lower value will cause partial deliveries to happen more often | lower value will cause partial deliveries to happen more often | |||
[RFC6458]. | [RFC6458]. | |||
COMMUNICATION UP notification: When a lost communication to an | COMMUNICATION UP notification: When a lost communication to an | |||
endpoint is restored or when SCTP becomes ready to send or receive | endpoint is restored or when SCTP becomes ready to send or receive | |||
user messages, this notification informs the application process | user messages, this notification informs the application process | |||
about the affected association, the type of event that has | about the affected association, the type of event that has | |||
skipping to change at page 16, line 24 ¶ | skipping to change at page 17, line 6 ¶ | |||
RESTART notification: When SCTP has detected that the peer has | RESTART notification: When SCTP has detected that the peer has | |||
restarted, this notification is passed to the upper layer | restarted, this notification is passed to the upper layer | |||
[RFC6458]. | [RFC6458]. | |||
DATA ARRIVE notification: When a message is ready to be retrieved | DATA ARRIVE notification: When a message is ready to be retrieved | |||
via the Receive primitive, the application is informed by this | via the Receive primitive, the application is informed by this | |||
notification. | notification. | |||
SEND FAILURE notification / Receive Unsent Message / Receive | SEND FAILURE notification / Receive Unsent Message / Receive | |||
Unacknowledged Message: When a message cannot be delivered via an | Unacknowledged Message: | |||
association, the sender can be informed about it and learn whether | When a message cannot be delivered via an association, the sender | |||
the message has just not been acknowledged or (e.g. in case of | can be informed about it and learn whether the message has just | |||
lifetime expiry) if it has not even been sent. This can also | not been acknowledged or (e.g. in case of lifetime expiry) if it | |||
inform the sender that a part of the message has been successfully | has not even been sent. This can also inform the sender that a | |||
delivered. | part of the message has been successfully delivered. | |||
NETWORK STATUS CHANGE notification: The NETWORK STATUS CHANGE | NETWORK STATUS CHANGE notification: The NETWORK STATUS CHANGE | |||
notification informs the application about a socket becoming | notification informs the application about a socket becoming | |||
active/inactive [RFC4960] or "Potentially Failed" [RFC7829]. | active/inactive [RFC4960] or "Potentially Failed" [RFC7829]. | |||
COMMUNICATION LOST notification: When SCTP loses communication to an | COMMUNICATION LOST notification: When SCTP loses communication to an | |||
endpoint (e.g. via Heartbeats or excessive retransmission) or | endpoint (e.g. via Heartbeats or excessive retransmission) or | |||
detects an abort, this notification informs the application | detects an abort, this notification informs the application | |||
process of the affected association and the type of event (failure | process of the affected association and the type of event (failure | |||
OR termination in response to a shutdown or abort request). | OR termination in response to a shutdown or abort request). | |||
SHUTDOWN COMPLETE notification: When SCTP completes the shutdown | SHUTDOWN COMPLETE notification: When SCTP completes the shutdown | |||
procedures, this notification is passed to the upper layer, | procedures, this notification is passed to the upper layer, | |||
informing it about the affected assocation. | informing it about the affected assocation. | |||
AUTHENTICATION notification: When SCTP wants to notify the upper | AUTHENTICATION notification: When SCTP wants to notify the upper | |||
layer regarding the key management related to the extension | layer regarding the key management related to authenticated chunks | |||
defined in [RFC4895], this notification is passed to the upper | [RFC4895], this notification is passed to the upper layer. | |||
layer. | ||||
ADAPTATION LAYER INDICATION notification: When SCTP completes the | ADAPTATION LAYER INDICATION notification: When SCTP completes the | |||
association setup and the peer provided an adaptation layer | association setup and the peer provided an adaptation layer | |||
indication, this is passed to the upper layer. This extension is | indication, this is passed to the upper layer [RFC5061], | |||
defined in [RFC5061] and [RFC6458]. | [RFC6458]. | |||
STREAM RESET notification: When SCTP completes the procedure for | STREAM RESET notification: When SCTP completes the procedure for | |||
resetting streams as specified in [RFC6525], this notification is | resetting streams [RFC6525], this notification is passed to the | |||
passed to the upper layer, informing it about the result. | upper layer, informing it about the result. | |||
ASSOCIATION RESET notification: When SCTP completes the association | ASSOCIATION RESET notification: When SCTP completes the association | |||
reset procedure as specified in [RFC6525], this notification is | reset procedure [RFC6525], this notification is passed to the | |||
passed to the upper layer, informing it about the result. | upper layer, informing it about the result. | |||
STREAM CHANGE notification: When SCTP completes the procedure used | STREAM CHANGE notification: When SCTP completes the procedure used | |||
to increase the number of streams as specified in [RFC6525], this | to increase the number of streams [RFC6525], this notification is | |||
notification is passed to the upper layer, informing it about the | passed to the upper layer, informing it about the result. | |||
result. | ||||
SENDER DRY notification: When SCTP has no more user data to send or | SENDER DRY notification: When SCTP has no more user data to send or | |||
retransmit on a particular association, this notification is | retransmit on a particular association, this notification is | |||
passed to the upper layer [RFC6458]. | passed to the upper layer [RFC6458]. | |||
PARTIAL DELIVERY ABORTED notification: When a receiver has begun to | PARTIAL DELIVERY ABORTED notification: When a receiver has begun to | |||
receive parts of a user message but the delivery of this message | receive parts of a user message but the delivery of this message | |||
is then aborted, this notification is passed to the upper layer | is then aborted, this notification is passed to the upper layer | |||
(section 6.1.7 of [RFC6458]). | (section 6.1.7 of [RFC6458]). | |||
skipping to change at page 17, line 47 ¶ | skipping to change at page 18, line 33 ¶ | |||
optionally be passed to the application (e.g., identification to | optionally be passed to the application (e.g., identification to | |||
retrieve unsent and unacknowledged data). SCTP "can invoke" a | retrieve unsent and unacknowledged data). SCTP "can invoke" a | |||
COMMUNICATION ERROR notification and "may send" a RESTART | COMMUNICATION ERROR notification and "may send" a RESTART | |||
notification, making these two notifications optional to implement. | notification, making these two notifications optional to implement. | |||
The list provided under 'Status' includes "etc", indicating that more | The list provided under 'Status' includes "etc", indicating that more | |||
information could be provided. The primitive 'Get SRTT Report' | information could be provided. The primitive 'Get SRTT Report' | |||
returns information that is included in the information that 'Status' | returns information that is included in the information that 'Status' | |||
provides and is therefore not discussed. The 'Destroy SCTP Instance' | provides and is therefore not discussed. The 'Destroy SCTP Instance' | |||
API function was excluded: it erases the SCTP instance that was | API function was excluded: it erases the SCTP instance that was | |||
created by 'Initialize', but is not a Primitive as defined in this | created by 'Initialize', but is not a Primitive as defined in this | |||
document because it does not relate to a Transport Feature. The | document because it does not relate to a transport feature. The | |||
SHUTDOWN EVENT described in Section 6.1 of [RFC6458] informs an | SHUTDOWN EVENT informs an application that the peer has sent a | |||
application that the peer has sent a SHUTDOWN, and hence no further | SHUTDOWN, and hence no further data should be sent on this socket | |||
data should be sent on this socket. However, if an application would | (section 6.1 of [RFC6458]). However, if an application would try to | |||
try to send data on the socket, it would get an error message anyway; | send data on the socket, it would get an error message anyway; thus, | |||
thus, this event is classified as "just affecting the application | this event is classified as "just affecting the application | |||
programming style, not how the underlying protocol operates" and not | programming style, not how the underlying protocol operates" and not | |||
included here. | included here. | |||
3.4. Primitives Provided by UDP and UDP-Lite | 3.4. Primitives Provided by UDP and UDP-Lite | |||
The primitives provided by UDP and UDP-Lite are described in [FJ16]. | The initial UDP specification [RFC0768] states: "This User Datagram | |||
Protocol (UDP) is defined to make available a datagram mode of | ||||
packet-switched computer communication in the environment of an | ||||
interconnected set of computer networks." It "provides a procedure | ||||
for application programs to send messages to other programs with a | ||||
minimum of protocol mechanism (..)". | ||||
The User Interface section of RFC768 states that the user interface | ||||
to an application should be able to create receive, source and | ||||
destination ports and addresses, and provide operations to receive | ||||
data based on ports with an indication of source port and address. | ||||
Operations should be provided that allow datagrams be sent specifying | ||||
the source and destination ports and addresses to be sent. | ||||
UDP offers only a basic transport interface. UDP datagrams may be | ||||
directly sent and received, without exchanging messages between the | ||||
endpoints to setup a connection (i.e., no handshake is performed by | ||||
the transport protocol prior to communication). Neither UDP nor UDP- | ||||
Lite provide congestion control, retransmission, nor do they have | ||||
support to optimise fragmentation and other transport functions. | ||||
This means that applications using UDP need to provide additional | ||||
functions on top of the UDP transport API [RFC8085]. Guidance on the | ||||
use of the services provided by UDP is provided in the UDP Guidelines | ||||
[RFC8085]. | ||||
The set of pass 1 primitives for UDP and UDP-Lite is documented in | ||||
[FJ16]. | ||||
3.5. The service of LEDBAT | 3.5. The service of LEDBAT | |||
The service of the Low Extra Delay Background Transport (LEDBAT) | The service of the Low Extra Delay Background Transport (LEDBAT) | |||
congestion control mechanism is described in the abstract of | congestion control mechanism is described as follows: "LEDBAT is | |||
[RFC6817] as follows: "LEDBAT is designed for use by background bulk- | designed for use by background bulk-transfer applications to be no | |||
transfer applications to be no more aggressive than standard TCP | more aggressive than standard TCP congestion control (as specified in | |||
congestion control (as specified in RFC 5681) and to yield in the | RFC 5681) and to yield in the presence of competing flows, thus | |||
presence of competing flows, thus limiting interference with the | limiting interference with the network performance of competing | |||
network performance of competing flows." | flows" [RFC6817]. | |||
LEDBAT does not have any primitives, as LEDBAT is not a transport | LEDBAT does not have any primitives, as LEDBAT is not a transport | |||
protocol. [RFC6817] states: "LEDBAT can be used as part of a | protocol. According to its specification [RFC6817], "LEDBAT can be | |||
transport protocol or as part of an application, as long as the data | used as part of a transport protocol or as part of an application, as | |||
transmission mechanisms are capable of carrying timestamps and | long as the data transmission mechanisms are capable of carrying | |||
acknowledging data frequently. LEDBAT can be used with TCP, Stream | timestamps and acknowledging data frequently. LEDBAT can be used | |||
Control Transmission Protocol (SCTP), and Datagram Congestion Control | with TCP, Stream Control Transmission Protocol (SCTP), and Datagram | |||
Protocol (DCCP), with appropriate extensions where necessary; and it | Congestion Control Protocol (DCCP), with appropriate extensions where | |||
can be used with proprietary application protocols, such as those | necessary; and it can be used with proprietary application protocols, | |||
built on top of UDP for peer-to- peer (P2P) applications." At the | such as those built on top of UDP for peer-to- peer (P2P) | |||
time of writing, the appropriate extensions for TCP, SCTP or DCCP do | applications." At the time of writing, the appropriate extensions | |||
not exist. | for TCP, SCTP or DCCP do not exist. | |||
A numer of configurable parameters exist in the LEDBAT specification: | A numer of configurable parameters exist in the LEDBAT specification: | |||
TARGET, which is the queuing delay target at which LEDBAT tries to | TARGET, which is the queuing delay target at which LEDBAT tries to | |||
operate, must be set to 100ms or less. ALLOWED_INCREASE (should be | operate, must be set to 100ms or less. ALLOWED_INCREASE (should be | |||
1, must be greater than 0) limits the speed at which LEDBAT increases | 1, must be greater than 0) limits the speed at which LEDBAT increases | |||
its rate. GAIN, which MUST be set to 1 or less to avoid a faster | its rate. GAIN, which MUST be set to 1 or less to avoid a faster | |||
ramp-up than TCP Reno, determines how quickly the sender responds to | ramp-up than TCP Reno, determines how quickly the sender responds to | |||
changes in queueing delay. Implementations may divide GAIN into two | changes in queueing delay. Implementations may divide GAIN into two | |||
parameters, one for increase and a possibly larger one for decrease. | parameters, one for increase and a possibly larger one for decrease. | |||
We call these parameters GAIN_INC and GAIN_DEC here. BASE_HISTORY is | We call these parameters GAIN_INC and GAIN_DEC here. BASE_HISTORY is | |||
the size of the list of measured base delays, and SHOULD be 10. This | the size of the list of measured base delays, and SHOULD be 10. This | |||
list can be filtered using a FILTER() function which is not | list can be filtered using a FILTER() function which is not | |||
prescribed in [RFC6817], yielding a list of size CURRENT_FILTER. The | prescribed [RFC6817], yielding a list of size CURRENT_FILTER. The | |||
initial and minimum congestion windows, INIT_CWND and MIN_CWND, | initial and minimum congestion windows, INIT_CWND and MIN_CWND, | |||
should both be 2. | should both be 2. | |||
Regarding which of these parameters should be under control of an | Regarding which of these parameters should be under control of an | |||
application, the possible range goes from exposing nothing on the one | application, the possible range goes from exposing nothing on the one | |||
hand, to considering everything that is not fully prescribed with a | hand, to considering everything that is not prescribed with a MUST in | |||
MUST in [RFC6817] as a parameter on the other hand. Function | the specification as a parameter on the other hand. Function | |||
implementations are not provided as a parameter to any of the | implementations are not provided as a parameter to any of the | |||
transport protocols discussed here, and hence we do not regard the | transport protocols discussed here, and hence we do not regard the | |||
FILTER() function as a parameter. However, to avoid unnecessarily | FILTER() function as a parameter. However, to avoid unnecessarily | |||
limiting future implementations, we consider all other parameters | limiting future implementations, we consider all other parameters | |||
above as tunable parameters that should be exposed. | above as tunable parameters that should be exposed. | |||
4. Pass 2 | 4. Pass 2 | |||
This pass categorizes the primitives from pass 1 based on whether | This pass categorizes the primitives from pass 1 based on whether | |||
they relate to a connection or to data transmission. Primitives are | they relate to a connection or to data transmission. Primitives are | |||
skipping to change at page 19, line 33 ¶ | skipping to change at page 20, line 49 ¶ | |||
concept and use it to refer to, e.g., TCP connections (identifiable | concept and use it to refer to, e.g., TCP connections (identifiable | |||
by a unique pair of IP addresses and TCP port numbers), SCTP | by a unique pair of IP addresses and TCP port numbers), SCTP | |||
associations (identifiable by multiple IP address and port number | associations (identifiable by multiple IP address and port number | |||
pairs), as well UDP and UDP-Lite connections (identifiable by a | pairs), as well UDP and UDP-Lite connections (identifiable by a | |||
unique socket pair). | unique socket pair). | |||
Some minor details are omitted for the sake of generalization -- | Some minor details are omitted for the sake of generalization -- | |||
e.g., SCTP's 'close' [RFC4960] returns success or failure, and lets | e.g., SCTP's 'close' [RFC4960] returns success or failure, and lets | |||
the application control whether further receive or send operations or | the application control whether further receive or send operations or | |||
both are disabled [RFC6458]. This is not described in the same way | both are disabled [RFC6458]. This is not described in the same way | |||
for TCP in [RFC0793], but these details play no significant role for | for TCP [RFC0793], but these details play no significant role for the | |||
the primitives provided by either TCP or SCTP (for the sake of being | primitives provided by either TCP or SCTP (for the sake of being | |||
generic, it could be assumed that both receive and send operations | generic, it could be assumed that both receive and send operations | |||
are disabled in both cases). | are disabled in both cases). | |||
The TCP 'send' and 'receive' primitives include usage of an "URGENT" | The TCP 'send' and 'receive' primitives include usage of an "URGENT" | |||
mechanism. This mechanism is required to implement the "synch | mechanism. This mechanism is required to implement the "synch | |||
signal" used by telnet [RFC0854], but SHOULD NOT be used by new | signal" used by telnet [RFC0854], but SHOULD NOT be used by new | |||
applications [RFC6093]. Because pass 2 is meant as a basis for the | applications [RFC6093]. Because pass 2 is meant as a basis for the | |||
creation of future systems, the "URGENT" mechanism is excluded. This | creation of future systems, the "URGENT" mechanism is excluded. This | |||
also concerns the notification "Urgent pointer advance" in the | also concerns the notification "Urgent pointer advance" in the | |||
ERROR_REPORT described in Section 4.2.4.1 of [RFC1122]. | ERROR_REPORT (section 4.2.4.1 of [RFC1122]). | |||
Since LEDBAT is a congestion control mechanism and not a protocol, it | Since LEDBAT is a congestion control mechanism and not a protocol, it | |||
is not currently defined when to enable / disable or configure the | is not currently defined when to enable / disable or configure the | |||
mechanism. For instance, it could be a one-time choice upon | mechanism. For instance, it could be a one-time choice upon | |||
connection establishment or when listening for incoming connections, | connection establishment or when listening for incoming connections, | |||
in which case it should be categorized under CONNECTION.ESTABLISHMENT | in which case it should be categorized under CONNECTION.ESTABLISHMENT | |||
or CONNECTION.AVAILABILITY, respectively. To avoid unnecessarily | or CONNECTION.AVAILABILITY, respectively. To avoid unnecessarily | |||
limiting future implementations, it was decided to place it under | limiting future implementations, it was decided to place it under | |||
CONNECTION.MAINTENANCE, with all parameters that are described in | CONNECTION.MAINTENANCE, with all parameters that are described in the | |||
[RFC6817] made configurable. | specification [RFC6817] made configurable. | |||
4.1. CONNECTION Related Primitives | 4.1. CONNECTION Related Primitives | |||
ESTABLISHMENT: | ESTABLISHMENT: | |||
Active creation of a connection from one transport endpoint to one or | Active creation of a connection from one transport endpoint to one or | |||
more transport endpoints. | more transport endpoints. | |||
Interfaces to UDP and UDP-Lite allow both connection-oriented and | Interfaces to UDP and UDP-Lite allow both connection-oriented and | |||
connection-less usage of the API . [RFC8085] | connection-less usage of the API [RFC8085]. | |||
o CONNECT.TCP: | o CONNECT.TCP: | |||
Pass 1 primitive / event: 'open' (active) or 'open' (passive) with | Pass 1 primitive / event: 'open' (active) or 'open' (passive) with | |||
socket, followed by 'send' | socket, followed by 'send' | |||
Parameters: 1 local IP address (optional); 1 destination transport | Parameters: 1 local IP address (optional); 1 destination transport | |||
address (for active open; else the socket and the local IP address | address (for active open; else the socket and the local IP address | |||
of the succeeding incoming connection request will be maintained); | of the succeeding incoming connection request will be maintained); | |||
timeout (optional); options (optional); MKT configuration | timeout (optional); options (optional); MKT configuration | |||
(optional); user message (optional) | (optional); user message (optional) | |||
Comments: If the local IP address is not provided, a default | Comments: If the local IP address is not provided, a default | |||
skipping to change at page 25, line 21 ¶ | skipping to change at page 27, line 29 ¶ | |||
o STATUS.MPTCP: | o STATUS.MPTCP: | |||
Pass 1 primitive / event: not specified | Pass 1 primitive / event: not specified | |||
Returns: list of pairs of tuples of IP address and TCP port number | Returns: list of pairs of tuples of IP address and TCP port number | |||
of each subflow. The first of the pair is the local IP and port | of each subflow. The first of the pair is the local IP and port | |||
number, while the second is the remote IP and port number. | number, while the second is the remote IP and port number. | |||
o SET_DSCP.TCP: | o SET_DSCP.TCP: | |||
Pass 1 primitive / event: not specified | Pass 1 primitive / event: not specified | |||
Parameters: DSCP value | Parameters: DSCP value | |||
Comments: this allows an application to change the DSCP value for | Comments: this allows an application to change the DSCP value for | |||
outgoing segments. For TCP this was originally specified for the | outgoing segments. | |||
TOS field [RFC1122], which is here interpreted to refer to the | ||||
DSField [RFC3260]. | ||||
o SET_DSCP.SCTP: | o SET_DSCP.SCTP: | |||
Pass 1 primitive / event: 'Set DSCP value' | Pass 1 primitive / event: 'Set DSCP value' | |||
Parameters: DSCP value | Parameters: DSCP value | |||
Comments: this allows an application to change the DSCP value for | Comments: this allows an application to change the DSCP value for | |||
outgoing packets on a path. | outgoing packets on a path. | |||
o SET_DSCP.UDP(-Lite): | o SET_DSCP.UDP(-Lite): | |||
Pass 1 primitive / event: 'SET_DSCP' | Pass 1 primitive / event: 'SET_DSCP' | |||
Parameter: DSCP value | Parameter: DSCP value | |||
skipping to change at page 25, line 48 ¶ | skipping to change at page 28, line 15 ¶ | |||
o ERROR.TCP: | o ERROR.TCP: | |||
Pass 1 primitive / event: 'ERROR_REPORT' | Pass 1 primitive / event: 'ERROR_REPORT' | |||
Returns: reason (encoding not specified); subreason (encoding not | Returns: reason (encoding not specified); subreason (encoding not | |||
specified) | specified) | |||
Comments: soft errors that can be ignored without harm by many | Comments: soft errors that can be ignored without harm by many | |||
applications; an application should be able to disable these | applications; an application should be able to disable these | |||
notifications. The reported conditions include at least: ICMP | notifications. The reported conditions include at least: ICMP | |||
error message arrived; Excessive Retransmissions. | error message arrived; Excessive Retransmissions. | |||
o ERROR.UDP(-Lite): | o ERROR.UDP(-Lite): | |||
Pass 1 primitive / event: 'ERROR_REPORT'. | Pass 1 primitive / event: 'ERROR_REPORT' | |||
Returns: Error report | Returns: Error report | |||
Comments: This returns soft errors that may be ignored without | Comments: This returns soft errors that may be ignored without | |||
harm by many applications; An application must connect to be able | harm by many applications; An application must connect to be able | |||
receive these notifications. | receive these notifications. | |||
o SET_AUTH.TCP: | o SET_AUTH.TCP: | |||
Pass 1 primitive / event: 'send' | Pass 1 primitive / event: not specified | |||
Parameters: current_key, rnext_key | Parameters: current_key, rnext_key | |||
Comments: current_key and rnext_key are the preferred outgoing MKT | Comments: current_key and rnext_key are the preferred outgoing MKT | |||
and the preferred incoming MKT, respectively, for a segment that | and the preferred incoming MKT, respectively, for a segment that | |||
is sent on an active option. | is sent on the connection. | |||
o SET_AUTH.SCTP: | o SET_AUTH.SCTP: | |||
Pass 1 primitive / event: 'Set / Get Authentication Parameters' | Pass 1 primitive / event: 'Set / Get Authentication Parameters' | |||
Parameters: key_id, key, hmac_id | Parameters: key_id, key, hmac_id | |||
o GET_AUTH.TCP: | o GET_AUTH.TCP: | |||
Pass 1 primitive / event: 'receive' | Pass 1 primitive / event: not specified | |||
Parameters: current_key, rnext_key | Parameters: current_key, rnext_key | |||
Comments: current_key and rnext_key are the preferred outgoing MKT | Comments: current_key and rnext_key are the preferred outgoing MKT | |||
and the preferred incoming MKT, respectively, that were carried on | and the preferred incoming MKT, respectively, that were carried on | |||
a recently received segment. | a recently received segment. | |||
o GET_AUTH.SCTP: | o GET_AUTH.SCTP: | |||
Pass 1 primitive / event: 'Set / Get Authentication Parameters' | Pass 1 primitive / event: 'Set / Get Authentication Parameters' | |||
Parameters: key_id, chunk_list | Parameters: key_id, chunk_list | |||
o RESET_STREAM.SCTP: | o RESET_STREAM.SCTP: | |||
skipping to change at page 26, line 40 ¶ | skipping to change at page 29, line 17 ¶ | |||
Parameters: sid, direction | Parameters: sid, direction | |||
o RESET_STREAM-EVENT.SCTP: | o RESET_STREAM-EVENT.SCTP: | |||
Pass 1 primitive / event: 'STREAM RESET notification' | Pass 1 primitive / event: 'STREAM RESET notification' | |||
Parameters: information about the result of RESET_STREAM.SCTP. | Parameters: information about the result of RESET_STREAM.SCTP. | |||
Comments: This is issued when the procedure for resetting streams | Comments: This is issued when the procedure for resetting streams | |||
has completed. | has completed. | |||
o RESET_ASSOC.SCTP: | o RESET_ASSOC.SCTP: | |||
Pass 1 primitive / event: 'Add / Reset Streams, Reset Association' | Pass 1 primitive / event: 'Add / Reset Streams, Reset Association' | |||
Parameters: information related to the extension defined in | Parameters: information related to the extension, defined in | |||
[RFC3260]. | [RFC3260]. | |||
o RESET_ASSOC-EVENT.SCTP: | o RESET_ASSOC-EVENT.SCTP: | |||
Pass 1 primitive / event: 'ASSOCIATION RESET notification' | Pass 1 primitive / event: 'ASSOCIATION RESET notification' | |||
Parameters: information about the result of RESET_ASSOC.SCTP. | Parameters: information about the result of RESET_ASSOC.SCTP. | |||
Comments: This is issued when the procedure for resetting an | Comments: This is issued when the procedure for resetting an | |||
association has completed. | association has completed. | |||
o ADD_STREAM.SCTP: | o ADD_STREAM.SCTP: | |||
Pass 1 primitive / event: 'Add / Reset Streams, Reset Association' | Pass 1 primitive / event: 'Add / Reset Streams, Reset Association' | |||
skipping to change at page 28, line 46 ¶ | skipping to change at page 32, line 11 ¶ | |||
Parameters: max burst value | Parameters: max burst value | |||
Comments: not all implementations allow values above the default | Comments: not all implementations allow values above the default | |||
of 4. | of 4. | |||
o SET_PARTIAL_DELIVERY_POINT.SCTP: | o SET_PARTIAL_DELIVERY_POINT.SCTP: | |||
Pass 1 primitive / event: 'Set Partial Delivery Point' | Pass 1 primitive / event: 'Set Partial Delivery Point' | |||
Parameters: partial delivery point (integer) | Parameters: partial delivery point (integer) | |||
Comments: this parameter must be smaller or equal to the socket | Comments: this parameter must be smaller or equal to the socket | |||
receive buffer size. | receive buffer size. | |||
o CHECKSUM.UDP: | o SET_CHECKSUM_ENABLED.UDP: | |||
Pass 1 primitive / event: 'DISABLE_CHECKSUM'. | Pass 1 primitive / event: 'CHECKSUM_ENABLED'. | |||
Parameters: 0 when no checksum is used at sender, 1 for checksum | Parameters: 0 when zero checksum is used at sender, 1 for checksum | |||
at sender (default) | at sender (default) | |||
o CHECKSUM_REQUIRED.UDP: | o SET_CHECKSUM_REQUIRED.UDP: | |||
Pass 1 primitive / event: 'REQUIRE_CHECKSUM'. | Pass 1 primitive / event: 'REQUIRE_CHECKSUM'. | |||
Parameter: 0 when checksum is required at receiver, 1 to allow | Parameter: 0 to allow zero checksum, 1 when a non-zero checksum is | |||
zero checksum at receiver (default) | required (default) at receiver | |||
o SET_CHECKSUM_COVERAGE.UDP-Lite: | o SET_CHECKSUM_COVERAGE.UDP-Lite: | |||
Pass 1 primitive / event: 'SET_CHECKSUM_COVERAGE' | Pass 1 primitive / event: 'SET_CHECKSUM_COVERAGE' | |||
Parameters: Coverage length at sender (default maximum coverage) | Parameters: Coverage length at sender (default maximum coverage) | |||
o SET_MIN_CHECKSUM_COVERAGE.UDP-Lite: | o SET_MIN_CHECKSUM_COVERAGE.UDP-Lite: | |||
Pass 1 primitive / event: 'SET_MIN_COVERAGE'. | Pass 1 primitive / event: 'SET_MIN_COVERAGE'. | |||
Parameter: Coverage length at receiver (default minimum coverage) | Parameter: Coverage length at receiver (default minimum coverage) | |||
o SET_DF.UDP(-Lite): | o SET_DF.UDP(-Lite): | |||
Pass 1 primitive event: 'SET_DF'. | Pass 1 primitive event: 'SET_DF'. | |||
Parameter: 0 when DF is not set (default), 1 when DF is set | Parameter: 0 when DF is not set (default) in the IPv4 header, 1 | |||
when DF is set | ||||
o GET_MMS_S.UDP(-Lite): | ||||
Pass 1 primitive event: 'GET_MMS_S'. | ||||
Comments: this retrieves the maximum transport-message size that | ||||
may be sent using a non-fragmented IP packet from the configured | ||||
interface. | ||||
o GET_MMS_R.UDP(-Lite): | ||||
Pass 1 primitive event: 'GET_MMS_R'. | ||||
Comments: this retrieves the maximum transport-message size that | ||||
may be received from the configured interface. | ||||
o SET_TTL.UDP(-Lite) (IPV6_UNICAST_HOPS): | o SET_TTL.UDP(-Lite) (IPV6_UNICAST_HOPS): | |||
Pass 1 primitive / event: 'SET_TTL' and 'SET_IPV6_UNICAST_HOPS' | Pass 1 primitive / event: 'SET_TTL' and 'SET_IPV6_UNICAST_HOPS' | |||
Parameters: IPv4 TTL value or IPv6 Hop Count value | Parameters: IPv4 TTL value or IPv6 Hop Count value | |||
Comments: This allows an application to change the IPv4 TTL of | Comments: This allows an application to change the IPv4 TTL of | |||
IPv6 Hop count value for outgoing UDP(-Lite) datagrams. | IPv6 Hop count value for outgoing UDP(-Lite) datagrams. | |||
o GET_TTL.UDP(-Lite) (IPV6_UNICAST_HOPS): | o GET_TTL.UDP(-Lite) (IPV6_UNICAST_HOPS): | |||
Pass 1 primitive / event: 'GET_TTL' and 'GET_IPV6_UNICAST_HOPS' | Pass 1 primitive / event: 'GET_TTL' and 'GET_IPV6_UNICAST_HOPS' | |||
Returns: IPv4 TTL value or IPv6 Hop Count value | Returns: IPv4 TTL value or IPv6 Hop Count value | |||
Comments: This allows an application to read the the IPv4 TTL of | Comments: This allows an application to read the the IPv4 TTL of | |||
IPv6 Hop count value from a received UDP(-Lite) datagram. | IPv6 Hop count value from a received UDP(-Lite) datagram. | |||
o SET_ECN.UDP(-Lite): | o SET_ECN.UDP(-Lite): | |||
Pass 1 primitive / event: 'SET_ECN' | Pass 1 primitive / event: 'SET_ECN' | |||
Parameters: ECN value | Parameters: ECN value | |||
Comments: This allows a UDP(-Lite) application to set the ECN | Comments: This allows a UDP(-Lite) application to set the ECN | |||
codepoint field for outgoing UDP(-Lite) datagrams. | codepoint field for outgoing UDP(-Lite) datagrams. Defaults to | |||
sending '00'. | ||||
o GET_ECN.UDP(-Lite): | o GET_ECN.UDP(-Lite): | |||
Pass 1 primitive / event: 'GET_ECN' | Pass 1 primitive / event: 'GET_ECN' | |||
Parameters: ECN value | Parameters: ECN value | |||
Comments: This allows a UDP(-Lite) application to read the ECN | Comments: This allows a UDP(-Lite) application to read the ECN | |||
codepoint field from a received UDP(-Lite) datagram. | codepoint field from a received UDP(-Lite) datagram. | |||
o SET_IP_OPTIONS.UDP(-Lite): | o SET_IP_OPTIONS.UDP(-Lite): | |||
Pass 1 primitive / event: 'SET_IP_OPTIONS' | Pass 1 primitive / event: 'SET_IP_OPTIONS' | |||
Parameters: options | Parameters: options | |||
skipping to change at page 30, line 47 ¶ | skipping to change at page 35, line 11 ¶ | |||
o ABORT.SCTP: | o ABORT.SCTP: | |||
Pass 1 primitive / event: 'abort' | Pass 1 primitive / event: 'abort' | |||
Parameters: abort reason to be given to the peer (optional) | Parameters: abort reason to be given to the peer (optional) | |||
Comments: this terminates a connection without delivering | Comments: this terminates a connection without delivering | |||
remaining data and sends an error message to the other side. | remaining data and sends an error message to the other side. | |||
o ABORT.UDP(-Lite): | o ABORT.UDP(-Lite): | |||
Pass 1 primitive event: 'CLOSE' | Pass 1 primitive event: 'CLOSE' | |||
Comments: this terminates a connection without delivering | Comments: this terminates a connection without delivering | |||
remaining data. No further UDP(-Lite) datagrams are sent/received | remaining data. No further UDP(-Lite) datagrams are sent/received | |||
on this connection. | for this transport service instance. | |||
o TIMEOUT.TCP: | o TIMEOUT.TCP: | |||
Pass 1 primitive / event: 'USER TIMEOUT' event | Pass 1 primitive / event: 'USER TIMEOUT' event | |||
Comments: the application is informed that the connection is | Comments: the application is informed that the connection is | |||
aborted. This event is executed on expiration of the timeout set | aborted. This event is executed on expiration of the timeout set | |||
in CONNECTION.ESTABLISHMENT.CONNECT.TCP (possibly adjusted in | in CONNECTION.ESTABLISHMENT.CONNECT.TCP (possibly adjusted in | |||
CONNECTION.MAINTENANCE.CHANGE_TIMEOUT.TCP). | CONNECTION.MAINTENANCE.CHANGE_TIMEOUT.TCP). | |||
o TIMEOUT.SCTP: | o TIMEOUT.SCTP: | |||
Pass 1 primitive / event: 'COMMUNICATION LOST' event | Pass 1 primitive / event: 'COMMUNICATION LOST' event | |||
Comments: the application is informed that the connection is | Comments: the application is informed that the connection is | |||
aborted. this event is executed on expiration of the timeout that | aborted. this event is executed on expiration of the timeout that | |||
should be enabled by default (see beginning of section 8.3 in | should be enabled by default (see the beginning of section 8.3 in | |||
[RFC4960]) and was possibly adjusted in | [RFC4960]) and was possibly adjusted in | |||
CONNECTION.MAINTENANCE.CHANGE_TIMEOOUT.SCTP. | CONNECTION.MAINTENANCE.CHANGE_TIMEOOUT.SCTP. | |||
o ABORT-EVENT.TCP: | o ABORT-EVENT.TCP: | |||
Pass 1 primitive / event: not specified. | Pass 1 primitive / event: not specified. | |||
o ABORT-EVENT.SCTP: | o ABORT-EVENT.SCTP: | |||
Pass 1 primitive / event: 'COMMUNICATION LOST' event | Pass 1 primitive / event: 'COMMUNICATION LOST' event | |||
Returns: abort reason from the peer (if available) | Returns: abort reason from the peer (if available) | |||
Comments: the application is informed that the other side has | Comments: the application is informed that the other side has | |||
skipping to change at page 34, line 7 ¶ | skipping to change at page 39, line 7 ¶ | |||
Comments: This informs the application that the stack has no more | Comments: This informs the application that the stack has no more | |||
user data to send. | user data to send. | |||
o PARTIAL_DELIVERY_ABORTED-EVENT.SCTP: | o PARTIAL_DELIVERY_ABORTED-EVENT.SCTP: | |||
Pass 1 primitive / event: 'PARTIAL DELIVERY ABORTED' notification | Pass 1 primitive / event: 'PARTIAL DELIVERY ABORTED' notification | |||
Comments: This informs the receiver of a partial message that the | Comments: This informs the receiver of a partial message that the | |||
further delivery of the message has been aborted. | further delivery of the message has been aborted. | |||
5. Pass 3 | 5. Pass 3 | |||
This section presents the superset of all Transport Features in all | This section presents the superset of all transport features in all | |||
protocols that were discussed in the preceding sections, based on the | protocols that were discussed in the preceding sections, based on the | |||
list of primitives in pass 2 but also on text in pass 1 to include | list of primitives in pass 2 but also on text in pass 1 to include | |||
features that can be configured in one protocol and are static | transport features that can be configured in one protocol and are | |||
properties in another (congestion control, for example). Again, some | static properties in another (congestion control, for example). | |||
minor details are omitted for the sake of generalization -- e.g., TCP | Again, some minor details are omitted for the sake of generalization | |||
may provide various different IP options, but only source route is | -- e.g., TCP may provide various different IP options, but only | |||
mandatory to implement, and this detail is not visible in the Pass 3 | source route is mandatory to implement, and this detail is not | |||
feature "Specify IP Options". | visible in the Pass 3 transport feature "Specify IP Options". | |||
5.1. CONNECTION Related Transport Features | 5.1. CONNECTION Related Transport Features | |||
ESTABLISHMENT: | ESTABLISHMENT: | |||
Active creation of a connection from one transport endpoint to one or | Active creation of a connection from one transport endpoint to one or | |||
more transport endpoints. | more transport endpoints. | |||
o Connect | o Connect | |||
Protocols: TCP, SCTP, UDP(-Lite) | Protocols: TCP, SCTP, UDP(-Lite) | |||
o Specify which IP Options must always be used | o Specify which IP Options must always be used | |||
Protocols: TCP | Protocols: TCP, UDP(-Lite) | |||
o Request multiple streams | o Request multiple streams | |||
Protocols: SCTP | Protocols: SCTP | |||
o Limit the number of inbound streams | o Limit the number of inbound streams | |||
Protocols: SCTP | Protocols: SCTP | |||
o Specify number of attempts and/or timeout for the first | o Specify number of attempts and/or timeout for the first | |||
establishment message | establishment message | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
skipping to change at page 35, line 28 ¶ | skipping to change at page 41, line 6 ¶ | |||
o Enable UDP encapsulation with a specified remote UDP port number | o Enable UDP encapsulation with a specified remote UDP port number | |||
Protocols: SCTP | Protocols: SCTP | |||
AVAILABILITY: | AVAILABILITY: | |||
Preparing to receive incoming connection requests. | Preparing to receive incoming connection requests. | |||
o Listen, 1 specified local interface | o Listen, 1 specified local interface | |||
Protocols: TCP, SCTP, UDP(-Lite) | Protocols: TCP, SCTP, UDP(-Lite) | |||
o Listen, N specified local interfaces | o Listen, N specified local interfaces | |||
Protocols: SCTP, UDP(-Lite) | Protocols: SCTP | |||
o Listen, all local interfaces | o Listen, all local interfaces | |||
Protocols: TCP, SCTP, UDP(-Lite) | Protocols: TCP, SCTP, UDP(-Lite) | |||
o Obtain requested number of streams | o Obtain requested number of streams | |||
Protocols: SCTP | Protocols: SCTP | |||
o Limit the number of inbound streams | o Limit the number of inbound streams | |||
Protocols: SCTP | Protocols: SCTP | |||
o Specify which IP Options must always be used | o Specify which IP Options must always be used | |||
Protocols: TCP | Protocols: TCP, UDP(-Lite) | |||
o Disable MPTCP | o Disable MPTCP | |||
Protocols: MPTCP | Protocols: MPTCP | |||
o Configure authentication | o Configure authentication | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Comments: With TCP, this allows to configure Master Key Tuples | Comments: With TCP, this allows to configure Master Key Tuples | |||
(MKTs). In SCTP, this allows to specify which chunk types must | (MKTs). In SCTP, this allows to specify which chunk types must | |||
always be authenticated. DATA, ACK etc. are different 'chunks' in | always be authenticated. DATA, ACK etc. are different 'chunks' in | |||
SCTP; one or more chunks may be included in a single packet. | SCTP; one or more chunks may be included in a single packet. | |||
skipping to change at page 38, line 47 ¶ | skipping to change at page 46, line 8 ¶ | |||
o Specify checksum coverage used by the sender | o Specify checksum coverage used by the sender | |||
Protocols: UDP-Lite | Protocols: UDP-Lite | |||
o Specify minimum checksum coverage required by receiver | o Specify minimum checksum coverage required by receiver | |||
Protocols: UDP-Lite | Protocols: UDP-Lite | |||
o Specify DF field | o Specify DF field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
o Get max. transport-message size that may be sent using a non- | ||||
fragmented IP packet from the configured interface | ||||
Protocols: UDP(-Lite) | ||||
o Get max. transport-message size that may be received from the | ||||
configured interface | ||||
Protocols: UDP(-Lite) | ||||
o Specify TTL/Hop count field | o Specify TTL/Hop count field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
o Obtain TTL/Hop count field | o Obtain TTL/Hop count field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
o Specify ECN field | o Specify ECN field | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
o Obtain ECN field | o Obtain ECN field | |||
skipping to change at page 40, line 7 ¶ | skipping to change at page 47, line 36 ¶ | |||
Protocols: UDP(-Lite) | Protocols: UDP(-Lite) | |||
o Timeout event when data could not be delivered for too long | o Timeout event when data could not be delivered for too long | |||
Protocols: TCP, SCTP | Protocols: TCP, SCTP | |||
Comments: the timeout is configured with CONNECTION.MAINTENANCE | Comments: the timeout is configured with CONNECTION.MAINTENANCE | |||
"Change timeout for aborting connection (using retransmit limit or | "Change timeout for aborting connection (using retransmit limit or | |||
time value)". | time value)". | |||
5.2. DATA Transfer Related Transport Features | 5.2. DATA Transfer Related Transport Features | |||
All features in this section refer to an existing connection, i.e. a | All transport features in this section refer to an existing | |||
connection that was either established or made available for | connection, i.e. a connection that was either established or made | |||
receiving data. Note that TCP allows to transfer data (a single | available for receiving data. Note that TCP allows to transfer data | |||
optional user message, possibly arriving multiple times) before the | (a single optional user message, possibly arriving multiple times) | |||
connection is fully established. Reliable data transfer entails | before the connection is fully established. Reliable data transfer | |||
delay -- e.g. for the sender to wait until it can transmit data, or | entails delay -- e.g. for the sender to wait until it can transmit | |||
due to retransmission in case of packet loss. | data, or due to retransmission in case of packet loss. | |||
5.2.1. Sending Data | 5.2.1. Sending Data | |||
All features in this section are provided by DATA.SEND from pass 2. | All transport features in this section are provided by DATA.SEND from | |||
DATA.SEND is given a data block from the application, which we here | pass 2. DATA.SEND is given a data block from the application, which | |||
call a "message" if the beginning and end of the data block can be | we here call a "message" if the beginning and end of the data block | |||
identified at the receiver, and "data" otherwise. | can be identified at the receiver, and "data" otherwise. | |||
o Reliably transfer data, with congestion control | o Reliably transfer data, with congestion control | |||
Protocols: TCP | Protocols: TCP | |||
o Reliably transfer a message, with congestion control | o Reliably transfer a message, with congestion control | |||
Protocols: SCTP | Protocols: SCTP | |||
o Unreliably transfer a message, with congestion control | o Unreliably transfer a message, with congestion control | |||
Protocols: SCTP | Protocols: SCTP | |||
skipping to change at page 41, line 13 ¶ | skipping to change at page 49, line 21 ¶ | |||
Protocols: SCTP | Protocols: SCTP | |||
o Specifying a key id to be used to authenticate a message | o Specifying a key id to be used to authenticate a message | |||
Protocols: SCTP | Protocols: SCTP | |||
o Request not to delay the acknowledgement (SACK) of a message | o Request not to delay the acknowledgement (SACK) of a message | |||
Protocols: SCTP | Protocols: SCTP | |||
5.2.2. Receiving Data | 5.2.2. Receiving Data | |||
All features in this section are provided by DATA.RECEIVE from pass | All transport features in this section are provided by DATA.RECEIVE | |||
2. DATA.RECEIVE fills a buffer provided by the application, with | from pass 2. DATA.RECEIVE fills a buffer provided by the | |||
what we here call a "message" if the beginning and end of the data | application, with what we here call a "message" if the beginning and | |||
block can be identified at the receiver, and "data" otherwise. | end of the data block can be identified at the receiver, and "data" | |||
otherwise. | ||||
o Receive data (with no message delineation) | o Receive data (with no message delineation) | |||
Protocols: TCP | Protocols: TCP | |||
o Receive a message | o Receive a message | |||
Protocols: SCTP, UDP(-Lite) | Protocols: SCTP, UDP(-Lite) | |||
o Choice of stream to receive from | o Choice of stream to receive from | |||
Protocols: SCTP | Protocols: SCTP | |||
skipping to change at page 42, line 19 ¶ | skipping to change at page 51, line 6 ¶ | |||
been aborted | been aborted | |||
Protocols: SCTP | Protocols: SCTP | |||
6. Acknowledgements | 6. Acknowledgements | |||
The authors would like to thank (in alphabetical order) Bob Briscoe, | The authors would like to thank (in alphabetical order) Bob Briscoe, | |||
David Hayes, Karen Nielsen, Joe Touch and Brian Trammell for | David Hayes, Karen Nielsen, Joe Touch and Brian Trammell for | |||
providing valuable feedback on this document. We especially thank | providing valuable feedback on this document. We especially thank | |||
Christoph Paasch for providing input related to Multipath TCP, and | Christoph Paasch for providing input related to Multipath TCP, and | |||
Gorry Fairhurst and Tom Jones for providing input related to UDP(- | Gorry Fairhurst and Tom Jones for providing input related to UDP(- | |||
Lite), via [FJ16]. This work has received funding from the European | Lite). This work has received funding from the European Union's | |||
Union's Horizon 2020 research and innovation programme under grant | Horizon 2020 research and innovation programme under grant agreement | |||
agreement No. 644334 (NEAT). The views expressed are solely those of | No. 644334 (NEAT). The views expressed are solely those of the | |||
the author(s). | author(s). | |||
7. IANA Considerations | 7. IANA Considerations | |||
XX RFC ED - PLEASE REMOVE THIS SECTION XXX | XX RFC ED - PLEASE REMOVE THIS SECTION XXX | |||
This memo includes no request to IANA. | This memo includes no request to IANA. | |||
8. Security Considerations | 8. Security Considerations | |||
Authentication, confidentiality protection, and integrity protection | Authentication, confidentiality protection, and integrity protection | |||
are identified as Transport Features by [RFC8095]. As currently | are identified as transport features [RFC8095]. As currently | |||
deployed in the Internet, these features are generally provided by a | deployed in the Internet, these transport features are generally | |||
protocol or layer on top of the transport protocol; no current full- | provided by a protocol or layer on top of the transport protocol; no | |||
featured standards-track transport protocol provides these features | current full-featured standards-track transport protocol provides | |||
on its own. Therefore, these features are not considered in this | these transport features on its own. Therefore, these transport | |||
document, with the exception of native authentication capabilities of | features are not considered in this document, with the exception of | |||
TCP and SCTP for which the security considerations in [RFC5925] and | native authentication capabilities of TCP and SCTP for which the | |||
[RFC4895] apply. | security considerations in [RFC5925] and [RFC4895] apply. | |||
Security considerations for the use of UDP and UDP-Lite are provided | ||||
in the referenced RFCs. Security guidance for application usage is | ||||
provided in the UDP-Guidelines [RFC8085]. | ||||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[FJ16] Fairhurst, G. and T. Jones, "Features of the User Datagram | [FJ16] Fairhurst, G. and T. Jones, "Features of the User Datagram | |||
Protocol (UDP) and Lightweight UDP (UDP-Lite) Transport | Protocol (UDP) and Lightweight UDP (UDP-Lite) Transport | |||
Protocols", draft-ietf-taps-transports-usage-udp-00 (work | Protocols", Internet-draft draft-ietf-taps-transports- | |||
in progress), November 2016. | usage-udp-02, May 2017. | |||
[I-D.ietf-tsvwg-sctp-ndata] | [I-D.ietf-tsvwg-sctp-ndata] | |||
Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, | Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, | |||
"Stream Schedulers and User Message Interleaving for the | "Stream Schedulers and User Message Interleaving for the | |||
Stream Control Transmission Protocol", | Stream Control Transmission Protocol", draft-ietf-tsvwg- | |||
draft-ietf-tsvwg-sctp-ndata-08 (work in progress), | sctp-ndata-08 (work in progress), October 2016. | |||
October 2016. | ||||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | ||||
DOI 10.17487/RFC0768, August 1980, | ||||
<http://www.rfc-editor.org/info/rfc768>. | ||||
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
RFC 793, DOI 10.17487/RFC0793, September 1981, | RFC 793, DOI 10.17487/RFC0793, September 1981, | |||
<http://www.rfc-editor.org/info/rfc793>. | <http://www.rfc-editor.org/info/rfc793>. | |||
[RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | |||
Communication Layers", STD 3, RFC 1122, DOI 10.17487/ | Communication Layers", STD 3, RFC 1122, | |||
RFC1122, October 1989, | DOI 10.17487/RFC1122, October 1989, | |||
<http://www.rfc-editor.org/info/rfc1122>. | <http://www.rfc-editor.org/info/rfc1122>. | |||
[RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | [RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | |||
Conrad, "Stream Control Transmission Protocol (SCTP) | Conrad, "Stream Control Transmission Protocol (SCTP) | |||
Partial Reliability Extension", RFC 3758, DOI 10.17487/ | Partial Reliability Extension", RFC 3758, | |||
RFC3758, May 2004, | DOI 10.17487/RFC3758, May 2004, | |||
<http://www.rfc-editor.org/info/rfc3758>. | <http://www.rfc-editor.org/info/rfc3758>. | |||
[RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, | [RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, | |||
"Authenticated Chunks for the Stream Control Transmission | "Authenticated Chunks for the Stream Control Transmission | |||
Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, | Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August | |||
August 2007, <http://www.rfc-editor.org/info/rfc4895>. | 2007, <http://www.rfc-editor.org/info/rfc4895>. | |||
[RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", | [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", | |||
RFC 4960, DOI 10.17487/RFC4960, September 2007, | RFC 4960, DOI 10.17487/RFC4960, September 2007, | |||
<http://www.rfc-editor.org/info/rfc4960>. | <http://www.rfc-editor.org/info/rfc4960>. | |||
[RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M. | [RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M. | |||
Kozuka, "Stream Control Transmission Protocol (SCTP) | Kozuka, "Stream Control Transmission Protocol (SCTP) | |||
Dynamic Address Reconfiguration", RFC 5061, DOI 10.17487/ | Dynamic Address Reconfiguration", RFC 5061, | |||
RFC5061, September 2007, | DOI 10.17487/RFC5061, September 2007, | |||
<http://www.rfc-editor.org/info/rfc5061>. | <http://www.rfc-editor.org/info/rfc5061>. | |||
[RFC5482] Eggert, L. and F. Gont, "TCP User Timeout Option", | [RFC5482] Eggert, L. and F. Gont, "TCP User Timeout Option", | |||
RFC 5482, DOI 10.17487/RFC5482, March 2009, | RFC 5482, DOI 10.17487/RFC5482, March 2009, | |||
<http://www.rfc-editor.org/info/rfc5482>. | <http://www.rfc-editor.org/info/rfc5482>. | |||
[RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP | [RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP | |||
Authentication Option", RFC 5925, DOI 10.17487/RFC5925, | Authentication Option", RFC 5925, DOI 10.17487/RFC5925, | |||
June 2010, <http://www.rfc-editor.org/info/rfc5925>. | June 2010, <http://www.rfc-editor.org/info/rfc5925>. | |||
[RFC6182] Ford, A., Raiciu, C., Handley, M., Barre, S., and J. | [RFC6182] Ford, A., Raiciu, C., Handley, M., Barre, S., and J. | |||
Iyengar, "Architectural Guidelines for Multipath TCP | Iyengar, "Architectural Guidelines for Multipath TCP | |||
Development", RFC 6182, DOI 10.17487/RFC6182, March 2011, | Development", RFC 6182, DOI 10.17487/RFC6182, March 2011, | |||
<http://www.rfc-editor.org/info/rfc6182>. | <http://www.rfc-editor.org/info/rfc6182>. | |||
[RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V. | [RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V. | |||
Yasevich, "Sockets API Extensions for the Stream Control | Yasevich, "Sockets API Extensions for the Stream Control | |||
Transmission Protocol (SCTP)", RFC 6458, DOI 10.17487/ | Transmission Protocol (SCTP)", RFC 6458, | |||
RFC6458, December 2011, | DOI 10.17487/RFC6458, December 2011, | |||
<http://www.rfc-editor.org/info/rfc6458>. | <http://www.rfc-editor.org/info/rfc6458>. | |||
[RFC6525] Stewart, R., Tuexen, M., and P. Lei, "Stream Control | [RFC6525] Stewart, R., Tuexen, M., and P. Lei, "Stream Control | |||
Transmission Protocol (SCTP) Stream Reconfiguration", | Transmission Protocol (SCTP) Stream Reconfiguration", | |||
RFC 6525, DOI 10.17487/RFC6525, February 2012, | RFC 6525, DOI 10.17487/RFC6525, February 2012, | |||
<http://www.rfc-editor.org/info/rfc6525>. | <http://www.rfc-editor.org/info/rfc6525>. | |||
[RFC6817] Shalunov, S., Hazel, G., Iyengar, J., and M. Kuehlewind, | [RFC6817] Shalunov, S., Hazel, G., Iyengar, J., and M. Kuehlewind, | |||
"Low Extra Delay Background Transport (LEDBAT)", RFC 6817, | "Low Extra Delay Background Transport (LEDBAT)", RFC 6817, | |||
DOI 10.17487/RFC6817, December 2012, | DOI 10.17487/RFC6817, December 2012, | |||
skipping to change at page 44, line 37 ¶ | skipping to change at page 53, line 26 ¶ | |||
"TCP Extensions for Multipath Operation with Multiple | "TCP Extensions for Multipath Operation with Multiple | |||
Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013, | Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013, | |||
<http://www.rfc-editor.org/info/rfc6824>. | <http://www.rfc-editor.org/info/rfc6824>. | |||
[RFC6897] Scharf, M. and A. Ford, "Multipath TCP (MPTCP) Application | [RFC6897] Scharf, M. and A. Ford, "Multipath TCP (MPTCP) Application | |||
Interface Considerations", RFC 6897, DOI 10.17487/RFC6897, | Interface Considerations", RFC 6897, DOI 10.17487/RFC6897, | |||
March 2013, <http://www.rfc-editor.org/info/rfc6897>. | March 2013, <http://www.rfc-editor.org/info/rfc6897>. | |||
[RFC6951] Tuexen, M. and R. Stewart, "UDP Encapsulation of Stream | [RFC6951] Tuexen, M. and R. Stewart, "UDP Encapsulation of Stream | |||
Control Transmission Protocol (SCTP) Packets for End-Host | Control Transmission Protocol (SCTP) Packets for End-Host | |||
to End-Host Communication", RFC 6951, DOI 10.17487/ | to End-Host Communication", RFC 6951, | |||
RFC6951, May 2013, | DOI 10.17487/RFC6951, May 2013, | |||
<http://www.rfc-editor.org/info/rfc6951>. | <http://www.rfc-editor.org/info/rfc6951>. | |||
[RFC7053] Tuexen, M., Ruengeler, I., and R. Stewart, "SACK- | [RFC7053] Tuexen, M., Ruengeler, I., and R. Stewart, "SACK- | |||
IMMEDIATELY Extension for the Stream Control Transmission | IMMEDIATELY Extension for the Stream Control Transmission | |||
Protocol", RFC 7053, DOI 10.17487/RFC7053, November 2013, | Protocol", RFC 7053, DOI 10.17487/RFC7053, November 2013, | |||
<http://www.rfc-editor.org/info/rfc7053>. | <http://www.rfc-editor.org/info/rfc7053>. | |||
[RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP | [RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP | |||
Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, | Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014, | |||
<http://www.rfc-editor.org/info/rfc7413>. | <http://www.rfc-editor.org/info/rfc7413>. | |||
skipping to change at page 45, line 21 ¶ | skipping to change at page 54, line 13 ¶ | |||
<http://www.rfc-editor.org/info/rfc7829>. | <http://www.rfc-editor.org/info/rfc7829>. | |||
[RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | |||
March 2017, <http://www.rfc-editor.org/info/rfc8085>. | March 2017, <http://www.rfc-editor.org/info/rfc8085>. | |||
9.2. Informative References | 9.2. Informative References | |||
[I-D.draft-gjessing-taps-minset] | [I-D.draft-gjessing-taps-minset] | |||
Gjessing, S. and M. Welzl, "A Minimal Set of Transport | Gjessing, S. and M. Welzl, "A Minimal Set of Transport | |||
Services for TAPS Systems", draft-gjessing-taps-minset-04 | Services for TAPS Systems", Internet-draft draft-gjessing- | |||
(work in progress), March 2017. | taps-minset-04, March 2017. | |||
[RFC0854] Postel, J. and J. Reynolds, "Telnet Protocol | [RFC0854] Postel, J. and J. Reynolds, "Telnet Protocol | |||
Specification", STD 8, RFC 854, DOI 10.17487/RFC0854, | Specification", STD 8, RFC 854, DOI 10.17487/RFC0854, May | |||
May 1983, <http://www.rfc-editor.org/info/rfc854>. | 1983, <http://www.rfc-editor.org/info/rfc854>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ | Requirement Levels", BCP 14, RFC 2119, | |||
RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | |||
of Explicit Congestion Notification (ECN) to IP", | "Definition of the Differentiated Services Field (DS | |||
RFC 3168, DOI 10.17487/RFC3168, September 2001, | Field) in the IPv4 and IPv6 Headers", RFC 2474, | |||
<http://www.rfc-editor.org/info/rfc3168>. | DOI 10.17487/RFC2474, December 1998, | |||
<http://www.rfc-editor.org/info/rfc2474>. | ||||
[RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., | ||||
and W. Weiss, "An Architecture for Differentiated | ||||
Services", RFC 2475, DOI 10.17487/RFC2475, December 1998, | ||||
<http://www.rfc-editor.org/info/rfc2475>. | ||||
[RFC3260] Grossman, D., "New Terminology and Clarifications for | [RFC3260] Grossman, D., "New Terminology and Clarifications for | |||
Diffserv", RFC 3260, DOI 10.17487/RFC3260, April 2002, | Diffserv", RFC 3260, DOI 10.17487/RFC3260, April 2002, | |||
<http://www.rfc-editor.org/info/rfc3260>. | <http://www.rfc-editor.org/info/rfc3260>. | |||
[RFC5461] Gont, F., "TCP's Reaction to Soft Errors", RFC 5461, | [RFC5461] Gont, F., "TCP's Reaction to Soft Errors", RFC 5461, | |||
DOI 10.17487/RFC5461, February 2009, | DOI 10.17487/RFC5461, February 2009, | |||
<http://www.rfc-editor.org/info/rfc5461>. | <http://www.rfc-editor.org/info/rfc5461>. | |||
[RFC6093] Gont, F. and A. Yourtchenko, "On the Implementation of the | [RFC6093] Gont, F. and A. Yourtchenko, "On the Implementation of the | |||
TCP Urgent Mechanism", RFC 6093, DOI 10.17487/RFC6093, | TCP Urgent Mechanism", RFC 6093, DOI 10.17487/RFC6093, | |||
January 2011, <http://www.rfc-editor.org/info/rfc6093>. | January 2011, <http://www.rfc-editor.org/info/rfc6093>. | |||
[RFC7414] Duke, M., Braden, R., Eddy, W., Blanton, E., and A. | [RFC7414] Duke, M., Braden, R., Eddy, W., Blanton, E., and A. | |||
Zimmermann, "A Roadmap for Transmission Control Protocol | Zimmermann, "A Roadmap for Transmission Control Protocol | |||
(TCP) Specification Documents", RFC 7414, DOI 10.17487/ | (TCP) Specification Documents", RFC 7414, | |||
RFC7414, February 2015, | DOI 10.17487/RFC7414, February 2015, | |||
<http://www.rfc-editor.org/info/rfc7414>. | <http://www.rfc-editor.org/info/rfc7414>. | |||
[RFC7657] Black, D., Ed. and P. Jones, "Differentiated Services | [RFC7657] Black, D., Ed. and P. Jones, "Differentiated Services | |||
(Diffserv) and Real-Time Communication", RFC 7657, | (Diffserv) and Real-Time Communication", RFC 7657, | |||
DOI 10.17487/RFC7657, November 2015, | DOI 10.17487/RFC7657, November 2015, | |||
<http://www.rfc-editor.org/info/rfc7657>. | <http://www.rfc-editor.org/info/rfc7657>. | |||
[RFC8095] Fairhurst, G., Ed., Trammell, B., Ed., and M. Kuehlewind, | [RFC8095] Fairhurst, G., Ed., Trammell, B., Ed., and M. Kuehlewind, | |||
Ed., "Services Provided by IETF Transport Protocols and | Ed., "Services Provided by IETF Transport Protocols and | |||
Congestion Control Mechanisms", RFC 8095, DOI 10.17487/ | Congestion Control Mechanisms", RFC 8095, | |||
RFC8095, March 2017, | DOI 10.17487/RFC8095, March 2017, | |||
<http://www.rfc-editor.org/info/rfc8095>. | <http://www.rfc-editor.org/info/rfc8095>. | |||
Appendix A. Overview of RFCs used as input for pass 1 | Appendix A. Overview of RFCs used as input for pass 1 | |||
TCP: [RFC0793], [RFC1122], [RFC5482], [RFC5925], [RFC7413] | TCP: [RFC0793], [RFC1122], [RFC5482], [RFC5925], [RFC7413] | |||
MPTCP: [RFC6182], [RFC6824], [RFC6897] | MPTCP: [RFC6182], [RFC6824], [RFC6897] | |||
SCTP: RFCs without a socket API specification: [RFC3758], [RFC4895], | SCTP: RFCs without a socket API specification: [RFC3758], [RFC4895], | |||
[RFC4960], [RFC5061]. | [RFC4960], [RFC5061]. | |||
RFCs that include a socket API specification: [RFC6458], | RFCs that include a socket API specification: [RFC6458], | |||
[RFC6525], [RFC6951], [RFC7053], [RFC7496] [RFC7829]. | [RFC6525], [RFC6951], [RFC7053], [RFC7496] [RFC7829]. | |||
UDP(-Lite): See [FJ16] | UDP(-Lite): See [FJ16] | |||
LEDBAT: [RFC6817]. | LEDBAT: [RFC6817]. | |||
Appendix B. How this document was developed | Appendix B. How this document was developed | |||
This section gives an overview of the method that was used to develop | This section gives an overview of the method that was used to develop | |||
this document. It was given to contributors for guidance, and it can | this document. It was given to contributors for guidance, and it can | |||
be helpful for future updates or extensions. | be helpful for future updates or extensions. | |||
This document is only concerned with Transport Features that are | This document is only concerned with transport features that are | |||
explicitly exposed to applications via primitives. It also strictly | explicitly exposed to applications via primitives. It also strictly | |||
follows RFC text: if a feature is truly relevant for an application, | follows RFC text: if a transport feature is truly relevant for an | |||
the RFCs should say so, and they should describe how to use and | application, the RFCs should say so, and they should describe how to | |||
configure it. Thus, the approach followed for developing this | use and configure it. Thus, the approach followed for developing | |||
document was to identify the right RFCs, then analyze and process | this document was to identify the right RFCs, then analyze and | |||
their text. | process their text. | |||
Primitives that MAY be implemented by a transport protocol were | Primitives that MAY be implemented by a transport protocol were | |||
excluded. To be included, the minimum requirement level for a | excluded. To be included, the minimum requirement level for a | |||
primitive to be implemented by a protocol was SHOULD. Where | primitive to be implemented by a protocol was SHOULD. Where | |||
[RFC2119]-style requirements levels are not used, primitives were | [RFC2119]-style requirements levels are not used, primitives were | |||
excluded when they are described in conjunction with statements like, | excluded when they are described in conjunction with statements like, | |||
e.g.: "some implementations also provide" or "an implementation may | e.g.: "some implementations also provide" or "an implementation may | |||
also". Excluded primitives or parameters were briefly described in a | also". Excluded primitives or parameters were briefly described in a | |||
dedicated subsection. | dedicated subsection. | |||
skipping to change at page 48, line 7 ¶ | skipping to change at page 57, line 5 ¶ | |||
Parameters: | Parameters: | |||
Returns: | Returns: | |||
Comments: | Comments: | |||
The entries "Parameters", "Returns" and "Comments" were skipped when | The entries "Parameters", "Returns" and "Comments" were skipped when | |||
a primitive had no parameters, no described return value or no | a primitive had no parameters, no described return value or no | |||
comments seemed necessary, respectively. Optional parameters are | comments seemed necessary, respectively. Optional parameters are | |||
followed by "(optional)". When a default value is known, this was | followed by "(optional)". When a default value is known, this was | |||
also provided. | also provided. | |||
Pass 3: the main point of this pass is to identify transport protocol | Pass 3: the main point of this pass is to identify transport features | |||
features that are the result of static properties of protocols, for | that are the result of static properties of protocols, for which all | |||
which all protocols have to be listed together; this is then the | protocols have to be listed together; this is then the final list of | |||
final list of all available Transport Features. This list was | all available transport features. This list was primarily based on | |||
primarily based on text from pass 2, with additional input from pass | text from pass 2, with additional input from pass 1 (but no external | |||
1 (but no external sources). | sources). | |||
Appendix C. Revision information | Appendix C. Revision information | |||
XXX RFC-Ed please remove this section prior to publication. | XXX RFC-Ed please remove this section prior to publication. | |||
-00 (from draft-welzl-taps-transports): this now covers TCP based on | -00 (from draft-welzl-taps-transports): this now covers TCP based on | |||
all TCP RFCs (this means: if you know of something in any TCP RFC | all TCP RFCs (this means: if you know of something in any TCP RFC | |||
that you think should be addressed, please speak up!) as well as | that you think should be addressed, please speak up!) as well as | |||
SCTP, exclusively based on [RFC4960]. We decided to also incorporate | SCTP, exclusively based on [RFC4960]. We decided to also incorporate | |||
[RFC6458] for SCTP, but this hasn't happened yet. Terminology made | [RFC6458] for SCTP, but this hasn't happened yet. Terminology made | |||
skipping to change at page 48, line 39 ¶ | skipping to change at page 57, line 37 ¶ | |||
-02: included UDP, UDP-Lite, and all extensions of SCTPs. This | -02: included UDP, UDP-Lite, and all extensions of SCTPs. This | |||
includes fixing the [RFC6458] omission from -00. | includes fixing the [RFC6458] omission from -00. | |||
-03: wrote security considerations. The "how to contribute" section | -03: wrote security considerations. The "how to contribute" section | |||
was updated to reflect how the document WAS created, not how it | was updated to reflect how the document WAS created, not how it | |||
SHOULD BE created; it also no longer wrongly says that Experimental | SHOULD BE created; it also no longer wrongly says that Experimental | |||
RFCs are excluded. Included LEDBAT. Changed abstract and intro to | RFCs are excluded. Included LEDBAT. Changed abstract and intro to | |||
reflect which protocols/mechanisms are covered (TCP, MPTCP, SCTP, | reflect which protocols/mechanisms are covered (TCP, MPTCP, SCTP, | |||
UDP, UDP-Lite, LEDBAT) instead of talking about "transport | UDP, UDP-Lite, LEDBAT) instead of talking about "transport | |||
protocols". Interleaving and stream scheduling added | protocols". Interleaving and stream scheduling added (draft-ietf- | |||
(draft-ietf-tsvwg-sctp-ndata). TFO added. "Set protocol parameters" | tsvwg-sctp-ndata). TFO added. "Set protocol parameters" in SCTP | |||
in SCTP replaced with per-parameter (or parameter group) primitives. | replaced with per-parameter (or parameter group) primitives. More | |||
More primitives added, mostly previously overlooked ones from | primitives added, mostly previously overlooked ones from [RFC6458]. | |||
[RFC6458]. Updated terminology (s/transport service feature/ | Updated terminology (s/transport service feature/transport feature) | |||
transport feature) in line with an update of [RFC8095]. Made | in line with an update of [RFC8095]. Made sequence of transport | |||
sequence of transport features / primitives more logical. Combined | features / primitives more logical. Combined MPTCP's add/rem subflow | |||
MPTCP's add/rem subflow with SCTP's add/remove local address. | with SCTP's add/remove local address. | |||
-04: changed UDP's close into an ABORT (to better fit with the | -04: changed UDP's close into an ABORT (to better fit with the | |||
primitives of TCP and SCTP), and incorporated the corresponding | primitives of TCP and SCTP), and incorporated the corresponding | |||
transport feature in step 3 (this addresses a comment from Gorry | transport feature in step 3 (this addresses a comment from Gorry | |||
Fairhurst). Added TCP Authentication (RFC 5925, section 7.1). | Fairhurst). Added TCP Authentication (RFC 5925, section 7.1). | |||
Changed TFO from looking like a primitive in pass 1 to be a part of | Changed TFO from looking like a primitive in pass 1 to be a part of | |||
'open'. Changed description of SCTP authentication in pass 3 to | 'open'. Changed description of SCTP authentication in pass 3 to | |||
encompass both TCP and SCTP. Added citations of [RFC8095] and minset | encompass both TCP and SCTP. Added citations of [RFC8095] and minset | |||
[I-D.draft-gjessing-taps-minset] to the intro, to give the context of | [I-D.draft-gjessing-taps-minset] to the intro, to give the context of | |||
this document. | this document. | |||
-05: minor fix to TCP authentication (comment from Joe Touch), | ||||
several fixes from Gorry Fairhurst and Tom Jones. Language fixes; | ||||
updated to align with latest taps-transport-usage-udp ID. | ||||
Authors' Addresses | Authors' Addresses | |||
Michael Welzl | Michael Welzl | |||
University of Oslo | University of Oslo | |||
PO Box 1080 Blindern | PO Box 1080 Blindern | |||
Oslo, N-0316 | Oslo N-0316 | |||
Norway | Norway | |||
Email: michawe@ifi.uio.no | Email: michawe@ifi.uio.no | |||
Michael Tuexen | Michael Tuexen | |||
Muenster University of Applied Sciences | Muenster University of Applied Sciences | |||
Stegerwaldstrasse 39 | Stegerwaldstrasse 39 | |||
Steinfurt 48565 | Steinfurt 48565 | |||
Germany | Germany | |||
Email: tuexen@fh-muenster.de | Email: tuexen@fh-muenster.de | |||
Naeem Khademi | Naeem Khademi | |||
University of Oslo | University of Oslo | |||
PO Box 1080 Blindern | PO Box 1080 Blindern | |||
Oslo, N-0316 | Oslo N-0316 | |||
Norway | Norway | |||
Email: naeemk@ifi.uio.no | Email: naeemk@ifi.uio.no | |||
End of changes. 122 change blocks. | ||||
491 lines changed or deleted | 563 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |