draft-ietf-taps-transports-14.txt | rfc8095.txt | |||
---|---|---|---|---|
Network Working Group G. Fairhurst, Ed. | Internet Engineering Task Force (IETF) G. Fairhurst, Ed. | |||
Internet-Draft University of Aberdeen | Request for Comments: 8095 University of Aberdeen | |||
Intended status: Informational B. Trammell, Ed. | Category: Informational B. Trammell, Ed. | |||
Expires: June 9, 2017 M. Kuehlewind, Ed. | ISSN: 2070-1721 M. Kuehlewind, Ed. | |||
ETH Zurich | ETH Zurich | |||
December 06, 2016 | March 2017 | |||
Services provided by IETF transport protocols and congestion control | Services Provided by | |||
mechanisms | IETF Transport Protocols and Congestion Control Mechanisms | |||
draft-ietf-taps-transports-14 | ||||
Abstract | Abstract | |||
This document describes, surveys, and classifies the protocol | This document describes, surveys, and classifies the protocol | |||
mechanisms provided by existing IETF protocols, as background for | mechanisms provided by existing IETF protocols, as background for | |||
determining a common set of transport services. It examines the | determining a common set of transport services. It examines the | |||
Transmission Control Protocol (TCP), Multipath TCP, the Stream | Transmission Control Protocol (TCP), Multipath TCP, the Stream | |||
Control Transmission Protocol (SCTP), the User Datagram Protocol | Control Transmission Protocol (SCTP), the User Datagram Protocol | |||
(UDP), UDP-Lite, the Datagram Congestion Control Protocol (DCCP), the | (UDP), UDP-Lite, the Datagram Congestion Control Protocol (DCCP), the | |||
Internet Control Message Protocol (ICMP), the Realtime Transport | Internet Control Message Protocol (ICMP), the Real-Time Transport | |||
Protocol (RTP), File Delivery over Unidirectional Transport/ | Protocol (RTP), File Delivery over Unidirectional Transport / | |||
Asynchronous Layered Coding Reliable Multicast (FLUTE/ALC), and NACK- | Asynchronous Layered Coding (FLUTE/ALC) for Reliable Multicast, NACK- | |||
Oriented Reliable Multicast (NORM), Transport Layer Security (TLS), | Oriented Reliable Multicast (NORM), Transport Layer Security (TLS), | |||
Datagram TLS (DTLS), and the Hypertext Transport Protocol (HTTP), | Datagram TLS (DTLS), and the Hypertext Transport Protocol (HTTP), | |||
when HTTP is used as a pseudotransport. This survey provides | when HTTP is used as a pseudotransport. This survey provides | |||
background for the definition of transport services within the TAPS | background for the definition of transport services within the TAPS | |||
working group. | working group. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
approved by the IESG are a candidate for any level of Internet | ||||
Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on June 9, 2017. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
http://www.rfc-editor.org/info/rfc8095. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2016 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. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction ....................................................4 | |||
1.1. Overview of Transport Features . . . . . . . . . . . . . 4 | 1.1. Overview of Transport Features .............................4 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Terminology .....................................................5 | |||
3. Existing Transport Protocols . . . . . . . . . . . . . . . . 6 | 3. Existing Transport Protocols ....................................6 | |||
3.1. Transport Control Protocol (TCP) . . . . . . . . . . . . 6 | 3.1. Transport Control Protocol (TCP) ...........................6 | |||
3.1.1. Protocol Description . . . . . . . . . . . . . . . . 6 | 3.1.1. Protocol Description ................................6 | |||
3.1.2. Interface description . . . . . . . . . . . . . . . . 8 | 3.1.2. Interface Description ...............................8 | |||
3.1.3. Transport Features . . . . . . . . . . . . . . . . . 8 | 3.1.3. Transport Features ..................................9 | |||
3.2. Multipath TCP (MPTCP) . . . . . . . . . . . . . . . . . . 9 | 3.2. Multipath TCP (MPTCP) .....................................10 | |||
3.2.1. Protocol Description . . . . . . . . . . . . . . . . 9 | 3.2.1. Protocol Description ...............................10 | |||
3.2.2. Interface Description . . . . . . . . . . . . . . . . 10 | 3.2.2. Interface Description ..............................10 | |||
3.2.3. Transport features . . . . . . . . . . . . . . . . . 10 | 3.2.3. Transport Features .................................11 | |||
3.3. User Datagram Protocol (UDP) . . . . . . . . . . . . . . 11 | 3.3. User Datagram Protocol (UDP) ..............................11 | |||
3.3.1. Protocol Description . . . . . . . . . . . . . . . . 11 | 3.3.1. Protocol Description ...............................11 | |||
3.3.2. Interface Description . . . . . . . . . . . . . . . . 12 | 3.3.2. Interface Description ..............................12 | |||
3.3.3. Transport Features . . . . . . . . . . . . . . . . . 12 | 3.3.3. Transport Features .................................13 | |||
3.4. Lightweight User Datagram Protocol (UDP-Lite) . . . . . . 13 | 3.4. Lightweight User Datagram Protocol (UDP-Lite) .............13 | |||
3.4.1. Protocol Description . . . . . . . . . . . . . . . . 13 | 3.4.1. Protocol Description ...............................13 | |||
3.4.2. Interface Description . . . . . . . . . . . . . . . . 13 | 3.4.2. Interface Description ..............................14 | |||
3.4.3. Transport Features . . . . . . . . . . . . . . . . . 14 | 3.4.3. Transport Features .................................14 | |||
3.5. Stream Control Transmission Protocol (SCTP) . . . . . . . 14 | 3.5. Stream Control Transmission Protocol (SCTP) ...............14 | |||
3.5.1. Protocol Description . . . . . . . . . . . . . . . . 14 | 3.5.1. Protocol Description ...............................15 | |||
3.5.2. Interface Description . . . . . . . . . . . . . . . . 16 | 3.5.2. Interface Description ..............................17 | |||
3.5.3. Transport Features . . . . . . . . . . . . . . . . . 19 | 3.5.3. Transport Features .................................19 | |||
3.6. Datagram Congestion Control Protocol (DCCP) . . . . . . . 20 | 3.6. Datagram Congestion Control Protocol (DCCP) ...............20 | |||
3.6.1. Protocol Description . . . . . . . . . . . . . . . . 20 | 3.6.1. Protocol Description ...............................21 | |||
3.6.2. Interface Description . . . . . . . . . . . . . . . . 21 | 3.6.2. Interface Description ..............................22 | |||
3.6.3. Transport Features . . . . . . . . . . . . . . . . . 22 | 3.6.3. Transport Features .................................22 | |||
3.7. Transport Layer Security (TLS) and Datagram TLS (DTLS) as | ||||
a pseudotransport . . . . . . . . . . . . . . . . . . . . 22 | 3.7. Transport Layer Security (TLS) and Datagram TLS | |||
3.7.1. Protocol Description . . . . . . . . . . . . . . . . 23 | (DTLS) as a Pseudotransport ...............................23 | |||
3.7.2. Interface Description . . . . . . . . . . . . . . . . 24 | 3.7.1. Protocol Description ...............................23 | |||
3.7.3. Transport Features . . . . . . . . . . . . . . . . . 24 | 3.7.2. Interface Description ..............................24 | |||
3.8. Realtime Transport Protocol (RTP) . . . . . . . . . . . . 25 | 3.7.3. Transport Features .................................25 | |||
3.8.1. Protocol Description . . . . . . . . . . . . . . . . 25 | 3.8. Real-Time Transport Protocol (RTP) ........................26 | |||
3.8.2. Interface Description . . . . . . . . . . . . . . . . 26 | 3.8.1. Protocol Description ...............................26 | |||
3.8.3. Transport Features . . . . . . . . . . . . . . . . . 27 | 3.8.2. Interface Description ..............................27 | |||
3.9. Hypertext Transport Protocol (HTTP) over TCP as a | 3.8.3. Transport Features .................................27 | |||
pseudotransport . . . . . . . . . . . . . . . . . . . . . 27 | 3.9. Hypertext Transport Protocol (HTTP) over TCP as a | |||
3.9.1. Protocol Description . . . . . . . . . . . . . . . . 28 | Pseudotransport ...........................................28 | |||
3.9.2. Interface Description . . . . . . . . . . . . . . . . 29 | 3.9.1. Protocol Description ...............................28 | |||
3.9.3. Transport features . . . . . . . . . . . . . . . . . 29 | 3.9.2. Interface Description ..............................29 | |||
3.10. File Delivery over Unidirectional Transport/Asynchronous | 3.9.3. Transport Features .................................30 | |||
Layered Coding Reliable Multicast (FLUTE/ALC) . . . . . . 30 | 3.10. File Delivery over Unidirectional Transport / | |||
3.10.1. Protocol Description . . . . . . . . . . . . . . . . 31 | Asynchronous Layered Coding (FLUTE/ALC) for | |||
3.10.2. Interface Description . . . . . . . . . . . . . . . 32 | Reliable Multicast .......................................31 | |||
3.10.3. Transport Features . . . . . . . . . . . . . . . . . 32 | 3.10.1. Protocol Description ..............................31 | |||
3.11. NACK-Oriented Reliable Multicast (NORM) . . . . . . . . . 33 | 3.10.2. Interface Description .............................33 | |||
3.11.1. Protocol Description . . . . . . . . . . . . . . . . 33 | 3.10.3. Transport Features ................................33 | |||
3.11.2. Interface Description . . . . . . . . . . . . . . . 35 | 3.11. NACK-Oriented Reliable Multicast (NORM) ..................34 | |||
3.11.3. Transport Features . . . . . . . . . . . . . . . . . 35 | 3.11.1. Protocol Description ..............................34 | |||
3.12. Internet Control Message Protocol (ICMP) . . . . . . . . 35 | 3.11.2. Interface Description .............................35 | |||
3.12.1. Protocol Description . . . . . . . . . . . . . . . . 36 | 3.11.3. Transport Features ................................36 | |||
3.12.2. Interface Description . . . . . . . . . . . . . . . 37 | 3.12. Internet Control Message Protocol (ICMP) .................36 | |||
3.12.3. Transport Features . . . . . . . . . . . . . . . . . 37 | 3.12.1. Protocol Description ..............................37 | |||
4. Congestion Control . . . . . . . . . . . . . . . . . . . . . 37 | 3.12.2. Interface Description .............................37 | |||
5. Transport Features . . . . . . . . . . . . . . . . . . . . . 38 | 3.12.3. Transport Features ................................38 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | 4. Congestion Control .............................................38 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | 5. Transport Features .............................................39 | |||
8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 41 | 6. IANA Considerations ............................................42 | |||
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 42 | 7. Security Considerations ........................................42 | |||
10. Informative References . . . . . . . . . . . . . . . . . . . 42 | 8. Informative References .........................................42 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53 | Acknowledgments ...................................................53 | |||
Contributors ......................................................53 | ||||
Authors' Addresses ................................................54 | ||||
1. Introduction | 1. Introduction | |||
Internet applications make use of the Services provided by a | Internet applications make use of the services provided by a | |||
Transport protocol, such as TCP (a reliable, in-order stream | transport protocol, such as TCP (a reliable, in-order stream | |||
protocol) or UDP (an unreliable datagram protocol). We use the term | protocol) or UDP (an unreliable datagram protocol). We use the term | |||
"Transport Service" to mean the end-to-end service provided to an | "transport service" to mean the end-to-end service provided to an | |||
application by the transport layer. That service can only be | application by the transport layer. That service can only be | |||
provided correctly if information about the intended usage is | provided correctly if information about the intended usage is | |||
supplied from the application. The application may determine this | supplied from the application. The application may determine this | |||
information at design time, compile time, or run time, and may | information at design time, compile time, or run time, and may | |||
include guidance on whether a feature is required, a preference by | include guidance on whether a feature is required, a preference by | |||
the application, or something in between. Examples of features of | the application, or something in between. Examples of features of | |||
Transport Services are reliable delivery, ordered delivery, content | transport services are reliable delivery, ordered delivery, content | |||
privacy to in-path devices, and integrity protection. | privacy to in-path devices, and integrity protection. | |||
The IETF has defined a wide variety of transport protocols beyond TCP | The IETF has defined a wide variety of transport protocols beyond TCP | |||
and UDP, including SCTP, DCCP, MPTCP, and UDP-Lite. Transport | and UDP, including SCTP, DCCP, MPTCP, and UDP-Lite. Transport | |||
services may be provided directly by these transport protocols, or | services may be provided directly by these transport protocols or | |||
layered on top of them using protocols such as WebSockets (which runs | layered on top of them using protocols such as WebSockets (which runs | |||
over TCP), RTP (over TCP or UDP) or WebRTC data channels (which run | over TCP), RTP (over TCP or UDP) or WebRTC data channels (which run | |||
over SCTP over DTLS over UDP or TCP). Services built on top of UDP | over SCTP over DTLS over UDP or TCP). Services built on top of UDP | |||
or UDP-Lite typically also need to specify additional mechanisms, | or UDP-Lite typically also need to specify additional mechanisms, | |||
including a congestion control mechanism (such as NewReno [RFC6582], | including a congestion control mechanism (such as NewReno [RFC6582], | |||
TFRC [RFC5348] or LEDBAT [RFC6817]). This extends the set of | TCP-Friendly Rate Control (TFRC) [RFC5348], or Low Extra Delay | |||
available Transport Services beyond those provided to applications by | Background Transport (LEDBAT) [RFC6817]). This extends the set of | |||
available transport services beyond those provided to applications by | ||||
TCP and UDP. | TCP and UDP. | |||
The transport protocols described in this document provide a basis | The transport protocols described in this document provide a basis | |||
for the definition of transport services provided by common | for the definition of transport services provided by common | |||
protocols, as background for the TAPS working group. The protocols | protocols, as background for the TAPS working group. The protocols | |||
listed here were chosen to help expose as many potential transport | listed here were chosen to help expose as many potential transport | |||
services as possible, and are not meant to be a comprehensive survey | services as possible and are not meant to be a comprehensive survey | |||
or classification of all transport protocols. | or classification of all transport protocols. | |||
1.1. Overview of Transport Features | 1.1. Overview of Transport Features | |||
Transport protocols can be differentiated by the features of the | Transport protocols can be differentiated by the features of the | |||
services they provide. | services they provide. | |||
Some of these provided features are closely related to basic control | Some of these provided features are closely related to basic control | |||
function that a protocol needs to work over a network path, such as | function that a protocol needs to work over a network path, such as | |||
addressing. The number of participants in a given association also | addressing. The number of participants in a given association also | |||
determines its applicability: if a connection is between endpoints | determines its applicability: a connection can be between endpoints | |||
(unicast), to one of multiple endpoints (anycast), or simultaneously | (unicast), to one of multiple endpoints (anycast), or simultaneously | |||
to multiple endpoints (multicast). Unicast protocols usually support | to multiple endpoints (multicast). Unicast protocols usually support | |||
bidirectional communication, while multicast is generally | bidirectional communication, while multicast is generally | |||
unidirectional. Another feature is whether a transport requires a | unidirectional. Another feature is whether a transport requires a | |||
control exchange across the network at setup (e.g., TCP), or whether | control exchange across the network at setup (e.g., TCP) or whether | |||
it is connection-less (e.g., UDP). | it is connectionless (e.g., UDP). | |||
For packet delivery itself, reliability and integrity protection, | For packet delivery itself, reliability and integrity protection, | |||
ordering, and framing are basic features. However, these features | ordering, and framing are basic features. However, these features | |||
are implemented with different levels of assurance in different | are implemented with different levels of assurance in different | |||
protocols. As an example, a transport service may provide full | protocols. As an example, a transport service may provide full | |||
reliability, providing detection of loss and retransmission (e.g., | reliability, with detection of loss and retransmission (e.g., TCP). | |||
TCP). SCTP offers a message-based service that can provide full or | SCTP offers a message-based service that can provide full or partial | |||
partial reliability, and allows the protocol to minimize the head of | reliability and allows the protocol to minimize the head-of-line | |||
line blocking due to the support of ordered and unordered message | blocking due to the support of ordered and unordered message delivery | |||
delivery within multiple streams. UDP-Lite and DCCP can provide | within multiple streams. UDP-Lite and DCCP can provide partial | |||
partial integrity protection to enable corruption tolerance. | integrity protection to enable corruption tolerance. | |||
Usually a protocol has been designed to support one specific type of | Usually, a protocol has been designed to support one specific type of | |||
delivery/framing: data either needs to be divided into transmission | delivery/framing: either data needs to be divided into transmission | |||
units based on network packets (datagram service), a data stream is | units based on network packets (datagram service) or a data stream is | |||
segmented and re-combined across multiple packets (stream service), | segmented and re-combined across multiple packets (stream service). | |||
or whole objects such as files are handled accordingly. This | Whole objects such as files are handled accordingly. This decision | |||
decision strongly influences the interface that is provided to the | strongly influences the interface that is provided to the upper | |||
upper layer. | layer. | |||
In addition, transport protocols offer a certain support for | In addition, transport protocols offer a certain support for | |||
transmission control. For example, a transport service can provide | transmission control. For example, a transport service can provide | |||
flow control to allow a receiver to regulate the transmission rate of | flow control to allow a receiver to regulate the transmission rate of | |||
a sender. Further a transport service can provide congestion control | a sender. Further, a transport service can provide congestion | |||
(see Section 4). As an example TCP and SCTP provide congestion | control (see Section 4). As an example, TCP and SCTP provide | |||
control for use in the Internet, whereas UDP leaves this function to | congestion control for use in the Internet, whereas UDP leaves this | |||
the upper layer protocol that uses UDP. | function to the upper-layer protocol that uses UDP. | |||
Security features are often provided independent of the transport | Security features are often provided independently of the transport | |||
protocol, via Transport Layer Security (TLS, see Section 3.7) or by | protocol, via Transport Layer Security (TLS) (see Section 3.7) or by | |||
the application layer protocol itself. The security properties TLS | the application-layer protocol itself. The security properties TLS | |||
provides to the application (such as confidentiality, integrity, and | provides to the application (such as confidentiality, integrity, and | |||
authenticity) are also features of the transport layer, even though | authenticity) are also features of the transport layer, even though | |||
they are often presently implemented in a separate protocol. | they are often presently implemented in a separate protocol. | |||
2. Terminology | 2. Terminology | |||
The following terms are used throughout this document, and in | The following terms are used throughout this document and in | |||
subsequent documents produced by TAPS that describe the composition | subsequent documents produced by the TAPS working group that describe | |||
and decomposition of transport services. | the composition and decomposition of transport services. | |||
Transport Service Feature: a specific end-to-end feature that the | Transport Feature: a specific end-to-end feature that the transport | |||
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, that provides a | |||
complete service to an application. | complete service to an application. | |||
Transport Protocol: an implementation that provides one or more | Transport Protocol: an implementation that provides one or more | |||
different transport services using a specific framing and header | different transport services using a specific framing and header | |||
format on the wire. | format on the wire. | |||
Transport Service Instance: an arrangement of transport protocols | ||||
with a selected set of features and configuration parameters that | ||||
implements a single transport service, e.g., a protocol stack (RTP | ||||
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 data across the network (this may also be an upper layer | delivery data across the network (this may also be an upper-layer | |||
protocol or tunnel encapsulation). | protocol or tunnel encapsulation). | |||
3. Existing Transport Protocols | 3. Existing Transport Protocols | |||
This section provides a list of known IETF transport protocols and | This section provides a list of known IETF transport protocols and | |||
transport protocol frameworks. It does not make an assessment about | transport protocol frameworks. It does not make an assessment about | |||
whether specific implementations of protocols are fully compliant to | whether specific implementations of protocols are fully compliant to | |||
current IETF specifications. | current IETF specifications. | |||
3.1. Transport Control Protocol (TCP) | 3.1. Transport Control Protocol (TCP) | |||
TCP is an IETF standards track transport protocol. [RFC0793] | TCP is an IETF Standards Track transport protocol. [RFC793] | |||
introduces TCP as follows: "The Transmission Control Protocol (TCP) | introduces TCP as follows: | |||
is intended for use as a highly reliable host-to-host protocol | ||||
between hosts in packet-switched computer communication networks, and | The Transmission Control Protocol (TCP) is intended for use as a | |||
in interconnected systems of such networks." Since its introduction, | highly reliable host-to-host protocol between hosts in packet- | |||
TCP has become the default connection- oriented, stream-based | switched computer communication networks, and in interconnected | |||
transport protocol in the Internet. It is widely implemented by | systems of such networks. | |||
endpoints and widely used by common applications. | ||||
Since its introduction, TCP has become the default connection- | ||||
oriented, stream-based transport protocol in the Internet. It is | ||||
widely implemented by endpoints and widely used by common | ||||
applications. | ||||
3.1.1. Protocol Description | 3.1.1. Protocol Description | |||
TCP is a connection-oriented protocol, providing a three way | TCP is a connection-oriented protocol that provides a three-way | |||
handshake to allow a client and server to set up a connection and | handshake to allow a client and server to set up a connection and | |||
negotiate features, and mechanisms for orderly completion and | negotiate features and provides mechanisms for orderly completion and | |||
immediate teardown of a connection. TCP is defined by a family of | immediate teardown of a connection [RFC793] [TCP-SPEC]. TCP is | |||
RFCs [RFC7414]. | defined by a family of RFCs (see [RFC7414]). | |||
TCP provides multiplexing to multiple sockets on each host using port | TCP provides multiplexing to multiple sockets on each host using port | |||
numbers. A similar approach is adopted by other IETF-defined | numbers. A similar approach is adopted by other IETF-defined | |||
transports. An active TCP session is identified by its four-tuple of | transports. An active TCP session is identified by its four-tuple of | |||
local and remote IP addresses and local port and remote port numbers. | local and remote IP addresses and local and remote port numbers. The | |||
The destination port during connection setup is often used to | destination port during connection setup is often used to indicate | |||
indicate the requested service. | the requested service. | |||
TCP partitions a continuous stream of bytes into segments, sized to | TCP partitions a continuous stream of bytes into segments, sized to | |||
fit in IP packets based on a negotiated maximum segment size and | fit in IP packets based on a negotiated maximum segment size and | |||
further constrained by the effective Maximum Transmission Unit (MTU) | further constrained by the effective Maximum Transmission Unit (MTU) | |||
from Path MTU Discovery (PMTUD). ICMP-based Path MTU discovery | from Path MTU Discovery (PMTUD). ICMP-based PMTUD [RFC1191] | |||
[RFC1191][RFC1981] as well as Packetization Layer Path MTU Discovery | [RFC1981] as well as Packetization Layer PMTUD (PLPMTUD) [RFC4821] | |||
(PMTUD) [RFC4821] have been defined by the IETF. | have been defined by the IETF. | |||
Each byte in the stream is identified by a sequence number. The | Each byte in the stream is identified by a sequence number. The | |||
sequence number is used to order segments on receipt, to identify | sequence number is used to order segments on receipt, to identify | |||
segments in acknowledgments, and to detect unacknowledged segments | segments in acknowledgments, and to detect unacknowledged segments | |||
for retransmission. This is the basis of the reliable, ordered | for retransmission. This is the basis of the reliable, ordered | |||
delivery of data in a TCP stream. TCP Selective Acknowledgment | delivery of data in a TCP stream. TCP Selective Acknowledgment | |||
(SACK) [RFC2018] extends this mechanism by making it possible to | (SACK) [RFC2018] extends this mechanism by making it possible to | |||
provide earlier identification of which segments are missing, | provide earlier identification of which segments are missing, | |||
allowing faster retransmission. SACK-based methods (e.g. Duplicate | allowing faster retransmission. SACK-based methods (e.g., Duplicate | |||
Selective ACK) can also result in less spurious retransmission. | Selective ACK) can also result in less spurious retransmission. | |||
Receiver flow control is provided by a sliding window: limiting the | Receiver flow control is provided by a sliding window, which limits | |||
amount of unacknowledged data that can be outstanding at a given | the amount of unacknowledged data that can be outstanding at a given | |||
time. The window scale option [RFC7323] allows a receiver to use | time. The window scale option [RFC7323] allows a receiver to use | |||
windows greater than 64KB. | windows greater than 64 KB. | |||
All TCP senders provide congestion control, such as described in | All TCP senders provide congestion control, such as that described in | |||
[RFC5681]. TCP uses a sequence number with a sliding receiver window | [RFC5681]. TCP uses a sequence number with a sliding receiver window | |||
for flow control. The TCP congestion control mechanism also utilises | for flow control. The TCP congestion control mechanism also utilizes | |||
this TCP sequence number to manage a separate congestion window | this TCP sequence number to manage a separate congestion window | |||
[RFC5681]. The sending window at a given point in time is the | [RFC5681]. The sending window at a given point in time is the | |||
minimum of the receiver window and the congestion window. The | minimum of the receiver window and the congestion window. The | |||
congestion window is increased in the absence of congestion and, | congestion window is increased in the absence of congestion and | |||
respectively, decreased if congestion is detected. Often loss is | decreased if congestion is detected. Often, loss is implicitly | |||
implicitly handled as a congestion indication which is detected in | handled as a congestion indication, which is detected in TCP (also as | |||
TCP (also as input for retransmission handling) based on two | input for retransmission handling) based on two mechanisms: a | |||
mechanisms: A retransmission timer with exponential back-off or the | retransmission timer with exponential back-off or the reception of | |||
reception of three acknowledgment for the same segment, so called | three acknowledgments for the same segment, so called "duplicated | |||
duplicated ACKs (Fast retransmit). In addition, Explicit Congestion | ACKs" (fast retransmit). In addition, Explicit Congestion | |||
Notification (ECN) [RFC3168] can be used in TCP, if supported by both | Notification (ECN) [RFC3168] can be used in TCP and, if supported by | |||
endpoints, that allows a network node to signal congestion without | both endpoints, allows a network node to signal congestion without | |||
inducing loss. Alternatively, a delay-based congestion control | inducing loss. Alternatively, a delay-based congestion control | |||
scheme can be used in TCP that reacts to changes in delay as an early | scheme that reacts to changes in delay as an early indication of | |||
indication of congestion as also further described in Section 4. | congestion can be used in TCP. This is further described in | |||
Examples for different kind of congestion control schemes are given | Section 4. Examples of different kinds of congestion control schemes | |||
in Section 4. | are provided in Section 4. | |||
TCP protocol instances can be extended [RFC7414] and tuned. Some | TCP protocol instances can be extended (see [RFC7414]). Some | |||
features are sender-side only, requiring no negotiation with the | protocol features may also be tuned to optimize for a specific | |||
receiver; some are receiver-side only, some are explicitly negotiated | deployment scenario. Some features are sender-side only, requiring | |||
during connection setup. | no negotiation with the receiver; some are receiver-side only; and | |||
some are explicitly negotiated during connection setup. | ||||
TCP may buffer data, e.g., to optimize processing or capacity usage. | TCP may buffer data, e.g., to optimize processing or capacity usage. | |||
TCP can therefore provides mechanisms to control this, including an | TCP therefore provides mechanisms to control this, including an | |||
optional "PUSH" function [RFC0793] that explicitly requests the | optional "PUSH" function [RFC793] that explicitly requests the | |||
transport service not to delay data. By default, TCP segment | transport service not to delay data. By default, TCP segment | |||
partitioning uses Nagle's algorithm [RFC0896] to buffer data at the | partitioning uses Nagle's algorithm [TCP-SPEC] to buffer data at the | |||
sender into large segments, potentially incurring sender-side | sender into large segments, potentially incurring sender-side | |||
buffering delay; this algorithm can be disabled by the sender to | buffering delay; this algorithm can be disabled by the sender to | |||
transmit more immediately, e.g., to reduce latency for interactive | transmit more immediately, e.g., to reduce latency for interactive | |||
sessions. | sessions. | |||
TCP provides an "urgent data" function for limited out-of-order | TCP provides an "urgent data" function for limited out-of-order | |||
delivery of the data. This function is deprecated [RFC6093]. | delivery of the data. This function is deprecated [RFC6093]. | |||
A TCP Reset (RST) control message may be used to force a TCP endpoint | A TCP Reset (RST) control message may be used to force a TCP endpoint | |||
to close a session [RFC0793], aborting the connection. | to close a session [RFC793], aborting the connection. | |||
A mandatory checksum provides a basic integrity check against | A mandatory checksum provides a basic integrity check against | |||
misdelivery and data corruption over the entire packet. Applications | misdelivery and data corruption over the entire packet. Applications | |||
that require end to end integrity of data are recommended to include | that require end-to-end integrity of data are recommended to include | |||
a stronger integrity check of their payload data. The TCP checksum | a stronger integrity check of their payload data. The TCP checksum | |||
[RFC1071] [RFC2460] does not support partial payload protection (as | [RFC1071] [RFC2460] does not support partial payload protection (as | |||
in DCCP/UDP-Lite). | in DCCP/UDP-Lite). | |||
TCP supports only unicast connections. | TCP supports only unicast connections. | |||
3.1.2. Interface description | 3.1.2. Interface Description | |||
A User/TCP Interface is defined in [RFC0793] providing six user | The User/TCP Interface defined in [RFC793] provides six user | |||
commands: Open, Send, Receive, Close, Status. This interface does | commands: Open, Send, Receive, Close, Status, and Abort. This | |||
not describe configuration of TCP options or parameters beside use of | interface does not describe configuration of TCP options or | |||
the PUSH and URGENT flags. | parameters aside from the use of the PUSH and URGENT flags. | |||
[RFC1122] describes extensions of the TCP/application layer interface | [RFC1122] describes extensions of the TCP/application-layer interface | |||
for: | for: | |||
o reporting soft errors such as reception of ICMP error messages, | o reporting soft errors such as reception of ICMP error messages, | |||
extensive retransmission or urgent pointer advance, | extensive retransmission, or urgent pointer advance, | |||
o providing a possibility to specify the Differentiated Services | o providing a possibility to specify the Differentiated Services | |||
Code Point (DSCP) [RFC3260] (formerly, the Type-of-Service, TOS) | Code Point (DSCP) [RFC3260] (formerly, the Type-of-Service (TOS)) | |||
for segments, | for segments, | |||
o providing a flush call to empty the TCP send queue, and | o providing a flush call to empty the TCP send queue, and | |||
o multihoming support. | o multihoming support. | |||
In API implementations derived from the BSD Sockets API, TCP sockets | In API implementations derived from the BSD Sockets API, TCP sockets | |||
are created using the "SOCK_STREAM" socket type as described in the | are created using the "SOCK_STREAM" socket type as described in the | |||
IEEE Portable Operating System Interface (POSIX) Base Specifications | IEEE Portable Operating System Interface (POSIX) Base Specifications | |||
[POSIX]. The features used by a protocol instance may be set and | [POSIX]. The features used by a protocol instance may be set and | |||
tuned via this API. There are currently no documents in the RFC | tuned via this API. There are currently no documents in the RFC | |||
Series that describe this interface. | Series that describe this interface. | |||
3.1.3. Transport Features | 3.1.3. Transport Features | |||
The transport features provided by TCP are: | The transport features provided by TCP are: | |||
o connection-oriented transport with feature negotiation and | o connection-oriented transport with feature negotiation and | |||
application-to-port mapping (implemented using SYN segments and | application-to-port mapping (implemented using SYN segments and | |||
the TCP option field to negotiate features), | the TCP Option field to negotiate features), | |||
o unicast transport (though anycast TCP is implemented, at risk of | o unicast transport (though anycast TCP is implemented, at risk of | |||
instability due to rerouting), | instability due to rerouting), | |||
o port multiplexing, | o port multiplexing, | |||
o uni- or bidirectional communication, | o unidirectional or bidirectional communication, | |||
o stream-oriented delivery in a single stream, | o stream-oriented delivery in a single stream, | |||
o fully reliable delivery (implemented using ACKs sent from the | o fully reliable delivery (implemented using ACKs sent from the | |||
receiver to confirm delivery), | receiver to confirm delivery), | |||
o error detection (implemented using a segment checksum to verify | o error detection (implemented using a segment checksum to verify | |||
delivery to the correct endpoint and integrity of the data and | delivery to the correct endpoint and integrity of the data and | |||
options), | options), | |||
o segmentation, | o segmentation, | |||
o data bundling (optional; uses Nagle's algorithm to coalesce data | o data bundling (optional; uses Nagle's algorithm to coalesce data | |||
sent within the same RTT into full-sized segments), | sent within the same RTT into full-sized segments), | |||
o flow control (implemented using a window-based mechanism where the | o flow control (implemented using a window-based mechanism where the | |||
receiver advertises the window that it is willing to buffer), | receiver advertises the window that it is willing to buffer), and | |||
o congestion control (usually implemented using a window-based | o congestion control (usually implemented using a window-based | |||
mechanism and four algorithms for different phases of the | mechanism and four algorithms for different phases of the | |||
transmission: slow start, congestion avoidance, fast retransmit, | transmission: slow start, congestion avoidance, fast retransmit, | |||
and fast recovery [RFC5681]). | and fast recovery [RFC5681]). | |||
3.2. Multipath TCP (MPTCP) | 3.2. Multipath TCP (MPTCP) | |||
Multipath TCP [RFC6824] is an extension for TCP to support multi- | Multipath TCP [RFC6824] is an extension for TCP to support | |||
homing for resilience, mobility and load-balancing. It is designed | multihoming for resilience, mobility, and load balancing. It is | |||
to be as indistinguishable to middleboxes from non-multipath TCP as | designed to be as indistinguishable to middleboxes from non-multipath | |||
possible. It does so by establishing regular TCP flows between a | TCP as possible. It does so by establishing regular TCP flows | |||
pair of source/destination endpoints, and multiplexing the | between a pair of source/destination endpoints and multiplexing the | |||
application's stream over these flows. Sub- flows can be started | application's stream over these flows. Sub-flows can be started over | |||
over IPv4 or IPv6 for the same session. | IPv4 or IPv6 for the same session. | |||
3.2.1. Protocol Description | 3.2.1. Protocol Description | |||
MPTCP uses TCP options for its control plane. They are used to | MPTCP uses TCP options for its control plane. They are used to | |||
signal multipath capabilities, as well as to negotiate data sequence | signal multipath capabilities, as well as to negotiate data sequence | |||
numbers, and advertise other available IP addresses and establish new | numbers, advertise other available IP addresses, and establish new | |||
sessions between pairs of endpoints. | sessions between pairs of endpoints. | |||
By multiplexing one byte stream over separate paths, MPTCP can | By multiplexing one byte stream over separate paths, MPTCP can | |||
achieve a higher throughput than TCP in certain situations. However, | achieve a higher throughput than TCP in certain situations. However, | |||
if coupled congestion control [RFC6356] is used, it might limit this | if coupled congestion control [RFC6356] is used, it might limit this | |||
benefit to maintain fairness to other flows at the bottleneck. When | benefit to maintain fairness to other flows at the bottleneck. When | |||
aggregating capacity over multiple paths, and depending on the way | aggregating capacity over multiple paths, and depending on the way | |||
packets are scheduled on each TCP subflow, additional delay and | packets are scheduled on each TCP subflow, additional delay and | |||
higher jitter might be observed observed before in-order delivery of | higher jitter might be observed before in-order delivery of data to | |||
data to the applications. | the applications. | |||
3.2.2. Interface Description | 3.2.2. Interface Description | |||
By default, MPTCP exposes the same interface as TCP to the | By default, MPTCP exposes the same interface as TCP to the | |||
application. [RFC6897] however describes a richer API for MPTCP- | application. [RFC6897], however, describes a richer API for MPTCP- | |||
aware applications. | aware applications. | |||
This Basic API describes how an application can: | This Basic API describes how an application can: | |||
o enable or disable MPTCP. | o enable or disable MPTCP. | |||
o bind a socket to one or more selected local endpoints. | o bind a socket to one or more selected local endpoints. | |||
o query local and remote endpoint addresses. | o query local and remote endpoint addresses. | |||
o get a unique connection identifier (similar to an address-port | o get a unique connection identifier (similar to an address-port | |||
pair for TCP). | pair for TCP). | |||
The document also recommends the use of extensions defined for SCTP | The document also recommends the use of extensions defined for SCTP | |||
[RFC6458] (see next section) to support multihoming for resilience | [RFC6458] (see Section 3.5) to support multihoming for resilience and | |||
and mobility. | mobility. | |||
3.2.3. Transport features | 3.2.3. Transport Features | |||
As an extension to TCP, MPTCP provides mostly the same features. By | As an extension to TCP, MPTCP provides mostly the same features. By | |||
establishing multiple sessions between available endpoints, it can | establishing multiple sessions between available endpoints, it can | |||
additionally provide soft failover solutions in the case that one of | additionally provide soft failover solutions in the case that one of | |||
the paths become unusable. | the paths becomes unusable. | |||
The transport features provided by MPTCP in addition to TCP therefore | Therefore, the transport features provided by MPTCP in addition to | |||
are: | TCP are: | |||
o multihoming for load-balancing, with endpoint multiplexing of a | o multihoming for load balancing, with endpoint multiplexing of a | |||
single byte stream, using either coupled congestion control or for | single byte stream, using either coupled congestion control or | |||
throughput maximization, | throughput maximization, | |||
o address family multiplexing (using IPv4 and IPv6 for the same | o address family multiplexing (using IPv4 and IPv6 for the same | |||
session), | session), and | |||
o resilience to network failure and/or handover. | o resilience to network failure and/or handover. | |||
3.3. User Datagram Protocol (UDP) | 3.3. User Datagram Protocol (UDP) | |||
The User Datagram Protocol (UDP) [RFC0768] [RFC2460] is an IETF | The User Datagram Protocol (UDP) [RFC768] [RFC2460] is an IETF | |||
standards track transport protocol. It provides a unidirectional | Standards Track transport protocol. It provides a unidirectional | |||
datagram protocol that preserves message boundaries. It provides no | datagram protocol that preserves message boundaries. It provides no | |||
error correction, congestion control, or flow control. It can be | error correction, congestion control, or flow control. It can be | |||
used to send broadcast datagrams (IPv4) or multicast datagrams (IPv4 | used to send broadcast datagrams (IPv4) or multicast datagrams (IPv4 | |||
and IPv6), in addition to unicast and anycast datagrams. IETF | and IPv6), in addition to unicast and anycast datagrams. IETF | |||
guidance on the use of UDP is provided in | guidance on the use of UDP is provided in [RFC8085]. UDP is widely | |||
[I-D.ietf-tsvwg-rfc5405bis]. UDP is widely implemented and widely | implemented and widely used by common applications, including DNS. | |||
used by common applications, including DNS. | ||||
3.3.1. Protocol Description | 3.3.1. Protocol Description | |||
UDP is a connection-less protocol that maintains message boundaries, | UDP is a connectionless protocol that maintains message boundaries, | |||
with no connection setup or feature negotiation. The protocol uses | with no connection setup or feature negotiation. The protocol uses | |||
independent messages, ordinarily called datagrams. It provides | independent messages, ordinarily called "datagrams". It provides | |||
detection of payload errors and misdelivery of packets to an | detection of payload errors and misdelivery of packets to an | |||
unintended endpoint, either of which result in discard of received | unintended endpoint, both of which result in discard of received | |||
datagrams, with no indication to the user of the service. | datagrams, with no indication to the user of the service. | |||
It is possible to create IPv4 UDP datagrams with no checksum, and | It is possible to create IPv4 UDP datagrams with no checksum, and | |||
while this is generally discouraged [RFC1122] | while this is generally discouraged [RFC1122] [RFC8085], certain | |||
[I-D.ietf-tsvwg-rfc5405bis], certain special cases permit this use. | special cases permit this use. These datagrams rely on the IPv4 | |||
These datagrams rely on the IPv4 header checksum to protect from | header checksum to protect from misdelivery to an unintended | |||
misdelivery to an unintended endpoint. IPv6 does not permit UDP | endpoint. IPv6 does not permit UDP datagrams with no checksum, | |||
datagrams with no checksum, although in certain cases [RFC6936] this | although in certain cases [RFC6936], this rule may be relaxed | |||
rule may be relaxed [RFC6935]. | [RFC6935]. | |||
UDP does not provide reliability and does not provide retransmission. | UDP does not provide reliability and does not provide retransmission. | |||
Messages may be re-ordered, lost, or duplicated in transit. Note | Messages may be reordered, lost, or duplicated in transit. Note that | |||
that due to the relatively weak form of checksum used by UDP, | due to the relatively weak form of checksum used by UDP, applications | |||
applications that require end to end integrity of data are | that require end-to-end integrity of data are recommended to include | |||
recommended to include a stronger integrity check of their payload | a stronger integrity check of their payload data. | |||
data. | ||||
Because UDP provides no flow control, a receiving application that is | Because UDP provides no flow control, a receiving application that is | |||
unable to run sufficiently fast, or frequently, may miss messages. | unable to run sufficiently fast, or frequently, may miss messages. | |||
The lack of congestion handling implies UDP traffic may experience | The lack of congestion handling implies UDP traffic may experience | |||
loss when using an overloaded path, and may cause the loss of | loss when using an overloaded path and may cause the loss of messages | |||
messages from other protocols (e.g., TCP) when sharing the same | from other protocols (e.g., TCP) when sharing the same network path. | |||
network path. | ||||
On transmission, UDP encapsulates each datagram into a single IP | On transmission, UDP encapsulates each datagram into a single IP | |||
packet or several IP packet fragments. This allows a datagram to be | packet or several IP packet fragments. This allows a datagram to be | |||
larger than the effective path MTU. Fragments are reassembled before | larger than the effective path MTU. Fragments are reassembled before | |||
delivery to the UDP receiver, making this transparent to the user of | delivery to the UDP receiver, making this transparent to the user of | |||
the transport service. When the jumbograms are supported, larger | the transport service. When jumbograms are supported, larger | |||
messages may be sent without performing fragmentation. | messages may be sent without performing fragmentation. | |||
UDP on its own does not provide support for segmentation, receiver | UDP on its own does not provide support for segmentation, receiver | |||
flow control, congestion control, PathMTU discovery/PLPMTUD, or ECN. | flow control, congestion control, PMTUD/PLPMTUD, or ECN. | |||
Applications that require these features need to provide them on | Applications that require these features need to provide them on | |||
their own, or by using a protocol over UDP that provides them | their own or use a protocol over UDP that provides them [RFC8085]. | |||
[I-D.ietf-tsvwg-rfc5405bis]. | ||||
3.3.2. Interface Description | 3.3.2. Interface Description | |||
[RFC0768] describes basic requirements for an API for UDP. Guidance | [RFC768] describes basic requirements for an API for UDP. Guidance | |||
on use of common APIs is provided in [I-D.ietf-tsvwg-rfc5405bis]. | on the use of common APIs is provided in [RFC8085]. | |||
A UDP endpoint consists of a tuple of (IP address, port number). De- | A UDP endpoint consists of a tuple of (IP address, port number). | |||
multiplexing using multiple abstract endpoints (sockets) on the same | De-multiplexing using multiple abstract endpoints (sockets) on the | |||
IP address is supported. The same socket may be used by a single | same IP address is supported. The same socket may be used by a | |||
server to interact with multiple clients (note: this behavior differs | single server to interact with multiple clients. (Note: This | |||
from TCP, which uses a pair of tuples to identify a connection). | behavior differs from TCP, which uses a pair of tuples to identify a | |||
Multiple server instances (processes) that bind to the same socket | connection). Multiple server instances (processes) that bind to the | |||
can cooperate to service multiple clients. The socket implementation | same socket can cooperate to service multiple clients. The socket | |||
arranges to not duplicate the same received unicast message to | implementation arranges to not duplicate the same received unicast | |||
multiple server processes. | message to multiple server processes. | |||
Many operating systems also allow a UDP socket to be "connected", | Many operating systems also allow a UDP socket to be "connected", | |||
i.e., to bind a UDP socket to a specific (remote) UDP endpoint. | i.e., to bind a UDP socket to a specific (remote) UDP endpoint. | |||
Unlike TCP's connect primitive, for UDP, this is only a local | Unlike TCP's connect primitive, for UDP, this is only a local | |||
operation that serves to simplify the local send/receive functions | operation that serves to simplify the local send/receive functions | |||
and to filter the traffic for the specified addresses and ports | and to filter the traffic for the specified addresses and ports | |||
[I-D.ietf-tsvwg-rfc5405bis]. | [RFC8085]. | |||
3.3.3. Transport Features | 3.3.3. Transport Features | |||
The transport features provided by UDP are: | The transport features provided by UDP are: | |||
o unicast, multicast, anycast, or IPv4 broadcast transport, | o unicast, multicast, anycast, or IPv4 broadcast transport, | |||
o port multiplexing (where a receiving port can be configured to | o port multiplexing (where a receiving port can be configured to | |||
receive datagrams from multiple senders), | receive datagrams from multiple senders), | |||
o message-oriented delivery, | o message-oriented delivery, | |||
o uni- or bidirectional communication where the transmissions in | o unidirectional or bidirectional communication where the | |||
each direction are independent, | transmissions in each direction are independent, | |||
o non-reliable delivery, | o non-reliable delivery, | |||
o unordered delivery, | o unordered delivery, and | |||
o error detection (implemented using a segment checksum to verify | o error detection (implemented using a segment checksum to verify | |||
delivery to the correct endpoint and integrity of the data; | delivery to the correct endpoint and integrity of the data; | |||
optional for IPv4 and optional under specific conditions for IPv6 | optional for IPv4 and optional under specific conditions for IPv6 | |||
where all or none of the payload data is protected), | where all or none of the payload data is protected). | |||
3.4. Lightweight User Datagram Protocol (UDP-Lite) | 3.4. Lightweight User Datagram Protocol (UDP-Lite) | |||
The Lightweight User Datagram Protocol (UDP-Lite) [RFC3828] is an | The Lightweight User Datagram Protocol (UDP-Lite) [RFC3828] is an | |||
IETF standards track transport protocol. It provides a | IETF Standards Track transport protocol. It provides a | |||
unidirectional, datagram protocol that preserves message boundaries. | unidirectional, datagram protocol that preserves message boundaries. | |||
IETF guidance on the use of UDP- Lite is provided in | IETF guidance on the use of UDP-Lite is provided in [RFC8085]. A | |||
[I-D.ietf-tsvwg-rfc5405bis]. A UDP-Lite service may support IPv4 | UDP-Lite service may support IPv4 broadcast, multicast, anycast, and | |||
broadcast, multicast, anycast and unicast, and IPv6 multicast, | unicast, as well as IPv6 multicast, anycast, and unicast. | |||
anycast and unicast. | ||||
Examples of use include a class of applications that can derive | Examples of use include a class of applications that can derive | |||
benefit from having partially-damaged payloads delivered, rather than | benefit from having partially damaged payloads delivered rather than | |||
discarded. One use is to provider header integrity checks but allow | discarded. One use is to provide header integrity checks but allow | |||
delivery of corrupted payloads to error-tolerant applications, or | delivery of corrupted payloads to error-tolerant applications or to | |||
when payload integrity is provided by some other mechanism (see | applications that use some other mechanism to provide payload | |||
[RFC6936]). | integrity (see [RFC6936]). | |||
3.4.1. Protocol Description | 3.4.1. Protocol Description | |||
Like UDP, UDP-Lite is a connection-less datagram protocol, with no | Like UDP, UDP-Lite is a connectionless datagram protocol, with no | |||
connection setup or feature negotiation. It changes the semantics of | connection setup or feature negotiation. It changes the semantics of | |||
the UDP "payload length" field to that of a "checksum coverage | the UDP Payload Length field to that of a Checksum Coverage Length | |||
length" field, and is identified by a different IP protocol/next- | field and is identified by a different IP protocol/next-header value. | |||
header value. The "checksum coverage length" field specifies the | The Checksum Coverage Length field specifies the intended checksum | |||
intended checksum coverage, with the remaining unprotected part of | coverage, with the remaining unprotected part of the payload called | |||
the payload called the "error-insensitive part". Applications using | the "error-insensitive part". Therefore, applications using UDP-Lite | |||
UDP-Lite therefore cannot make assumptions regarding the correctness | cannot make assumptions regarding the correctness of the data | |||
of the data received in the insensitive part of the UDP-Lite payload. | received in the insensitive part of the UDP-Lite payload. | |||
Otherwise, UDP-Lite is semantically identical to UDP. In the same | Otherwise, UDP-Lite is semantically identical to UDP. In the same | |||
way as for UDP, mechanisms for receiver flow control, congestion | way as for UDP, mechanisms for receiver flow control, congestion | |||
control, PMTU or PLPMTU discovery, support for ECN, etc. needs to be | control, PMTU or PLPMTU discovery, support for ECN, etc., need to be | |||
provided by upper layer protocols [I-D.ietf-tsvwg-rfc5405bis]. | provided by upper-layer protocols [RFC8085]. | |||
3.4.2. Interface Description | 3.4.2. Interface Description | |||
There is no API currently specified in the RFC Series, but guidance | There is no API currently specified in the RFC Series, but guidance | |||
on use of common APIs is provided in [I-D.ietf-tsvwg-rfc5405bis]. | on use of common APIs is provided in [RFC8085]. | |||
The interface of UDP-Lite differs from that of UDP by the addition of | The interface of UDP-Lite differs from that of UDP by the addition of | |||
a single (socket) option that communicates a checksum coverage length | a single (socket) option that communicates a checksum coverage length | |||
value. The checksum coverage may also be made visible to the | value. The checksum coverage may also be made visible to the | |||
application via the UDP-Lite MIB module [RFC5097]. | application via the UDP-Lite MIB module [RFC5097]. | |||
3.4.3. Transport Features | 3.4.3. Transport Features | |||
The transport features provided by UDP-Lite are: | The transport features provided by UDP-Lite are: | |||
o unicast, multicast, anycast, or IPv4 broadcast transport (as for | o unicast, multicast, anycast, or IPv4 broadcast transport (same as | |||
UDP), | for UDP), | |||
o port multiplexing (as for UDP), | o port multiplexing (same as for UDP), | |||
o message-oriented delivery (as for UDP), | o message-oriented delivery (same as for UDP), | |||
o Uni- or bidirectional communication where the transmissions in | o unidirectional or bidirectional communication where the | |||
each direction are independent (as for UDP), | transmissions in each direction are independent (same as for UDP), | |||
o non-reliable delivery (as for UDP), | o non-reliable delivery (same as for UDP), | |||
o non-ordered delivery (as for UDP), | o non-ordered delivery (same as for UDP), and | |||
o partial or full payload error detection (where the checksum | o partial or full payload error detection (where the Checksum | |||
coverage field indicates the size of the payload data covered by | Coverage field indicates the size of the payload data covered by | |||
the checksum). | the checksum). | |||
3.5. Stream Control Transmission Protocol (SCTP) | 3.5. Stream Control Transmission Protocol (SCTP) | |||
SCTP is a message-oriented IETF standards track transport protocol. | SCTP is a message-oriented IETF Standards Track transport protocol. | |||
The base protocol is specified in [RFC4960]. It supports multi- | The base protocol is specified in [RFC4960]. It supports multihoming | |||
homing and path failover to provide resilience to path failures. An | and path failover to provide resilience to path failures. An SCTP | |||
SCTP association has multiple streams in each direction, providing | association has multiple streams in each direction, providing | |||
in-sequence delivery of user messages within each stream. This | in-sequence delivery of user messages within each stream. This | |||
allows it to minimize head of line blocking. SCTP supports multiple | allows it to minimize head-of-line blocking. SCTP supports multiple | |||
stream scheduling schemes controlling stream multiplexing, including | stream- scheduling schemes controlling stream multiplexing, including | |||
priority and fair weighting schemes. | priority and fair weighting schemes. | |||
SCTP was originally developed for transporting telephony signaling | SCTP was originally developed for transporting telephony signaling | |||
messages and is deployed in telephony signaling networks, especially | messages and is deployed in telephony signaling networks, especially | |||
in mobile telephony networks. It can also be used for other | in mobile telephony networks. It can also be used for other | |||
services, for example, in the WebRTC framework for data channels. | services, for example, in the WebRTC framework for data channels. | |||
3.5.1. Protocol Description | 3.5.1. Protocol Description | |||
SCTP is a connection-oriented protocol using a four way handshake to | SCTP is a connection-oriented protocol using a four-way handshake to | |||
establish an SCTP association, and a three way message exchange to | establish an SCTP association and a three-way message exchange to | |||
gracefully shut it down. It uses the same port number concept as | gracefully shut it down. It uses the same port number concept as | |||
DCCP, TCP, UDP, and UDP-Lite. SCTP only supports unicast. | DCCP, TCP, UDP, and UDP-Lite. SCTP only supports unicast. | |||
SCTP uses the 32-bit CRC32c for protecting SCTP packets against bit | SCTP uses the 32-bit CRC32c for protecting SCTP packets against bit | |||
errors and misdelivery of packets to an unintended endpoint. This is | errors and misdelivery of packets to an unintended endpoint. This is | |||
stronger than the 16-bit checksums used by TCP or UDP. However, | stronger than the 16-bit checksums used by TCP or UDP. However, | |||
partial payload checksum coverage as provided by DCCP or UDP-Lite is | partial payload checksum coverage as provided by DCCP or UDP-Lite is | |||
not supported. | not supported. | |||
SCTP has been designed with extensibility in mind. A common header | SCTP has been designed with extensibility in mind. A common header | |||
is followed by a sequence of chunks. [RFC4960] defines how a | is followed by a sequence of chunks. [RFC4960] defines how a | |||
receiver processes chunks with an unknown chunk type. The support of | receiver processes chunks with an unknown chunk type. The support of | |||
extensions can be negotiated during the SCTP handshake. Currently | extensions can be negotiated during the SCTP handshake. Currently | |||
defined extensions include mechanisms for dynamic re-configuration of | defined extensions include mechanisms for dynamic reconfiguration of | |||
streams [RFC6525] and IP addresses [RFC5061]. Furthermore, the | streams [RFC6525] and IP addresses [RFC5061]. Furthermore, the | |||
extension specified in [RFC3758] introduces the concept of partial | extension specified in [RFC3758] introduces the concept of partial | |||
reliability for user messages. | reliability for user messages. | |||
SCTP provides a message-oriented service. Multiple small user | SCTP provides a message-oriented service. Multiple small user | |||
messages can be bundled into a single SCTP packet to improve | messages can be bundled into a single SCTP packet to improve | |||
efficiency. For example, this bundling may be done by delaying user | efficiency. For example, this bundling may be done by delaying user | |||
messages at the sender, similar to Nagle's algorithm used by TCP. | messages at the sender, similar to Nagle's algorithm used by TCP. | |||
User messages which would result in IP packets larger than the MTU | User messages that would result in IP packets larger than the MTU | |||
will be fragmented at the sender and reassembled at the receiver. | will be fragmented at the sender and reassembled at the receiver. | |||
There is no protocol limit on the user message size. For MTU | There is no protocol limit on the user message size. For MTU | |||
discovery the same mechanism than for TCP can be used | discovery, the same mechanism as for TCP can be used [RFC1981] | |||
[RFC1981][RFC4821], as well as utilizing probe packets with padding | [RFC4821], as well as utilization of probe packets with padding | |||
chunks, as defined in [RFC4820]. | chunks, as defined in [RFC4820]. | |||
[RFC4960] specifies TCP-friendly congestion control to protect the | [RFC4960] specifies TCP-friendly congestion control to protect the | |||
network against overload. SCTP also uses sliding window flow control | network against overload. SCTP also uses sliding window flow control | |||
to protect receivers against overflow. Similar to TCP, SCTP also | to protect receivers against overflow. Similar to TCP, SCTP also | |||
supports delaying acknowledgments. [RFC7053] provides a way for the | supports delaying acknowledgments. [RFC7053] provides a way for the | |||
sender of user messages to request the immediate sending of the | sender of user messages to request immediate sending of the | |||
corresponding acknowledgments. | corresponding acknowledgments. | |||
Each SCTP association has between 1 and 65536 uni-directional streams | Each SCTP association has between 1 and 65536 unidirectional streams | |||
in each direction. The number of streams can be different in each | in each direction. The number of streams can be different in each | |||
direction. Every user message is sent on a particular stream. User | direction. Every user message is sent on a particular stream. User | |||
messages can be sent un- ordered, or ordered upon request by the | messages can be sent unordered or ordered upon request by the upper | |||
upper layer. Un-ordered messages can be delivered as soon as they | layer. Unordered messages can be delivered as soon as they are | |||
are completely received. For user messages not requiring | completely received. For user messages not requiring fragmentation, | |||
fragmentation, this minimizes head of line blocking. On the other | this minimizes head-of-line blocking. On the other hand, ordered | |||
hand, ordered messages sent on the same stream are delivered at the | messages sent on the same stream are delivered at the receiver in the | |||
receiver in the same order as sent by the sender. | same order as sent by the sender. | |||
The base protocol defined in [RFC4960] does not allow interleaving of | The base protocol defined in [RFC4960] does not allow interleaving of | |||
user- messages. Large messages on one stream can therefore block the | user messages. Large messages on one stream can therefore block the | |||
sending of user messages on other streams. | sending of user messages on other streams. [SCTP-NDATA] describes a | |||
[I-D.ietf-tsvwg-sctp-ndata] overcomes this limitation. This draft | method to overcome this limitation. This document also specifies | |||
also specifies multiple algorithms for the sender side selection of | multiple algorithms for the sender-side selection of which streams to | |||
which streams to send data from, supporting a variety of scheduling | send data from, supporting a variety of scheduling algorithms | |||
algorithms including priority based methods. The stream re- | including priority-based methods. The stream reconfiguration | |||
configuration extension defined in [RFC6525] allows streams to be | extension defined in [RFC6525] allows streams to be reset during the | |||
reset during the lifetime of an association and to increase the | lifetime of an association and to increase the number of streams, if | |||
number of streams, if the number of streams negotiated in the SCTP | the number of streams negotiated in the SCTP handshake becomes | |||
handshake becomes insufficient. | insufficient. | |||
Each user message sent is either delivered to the receiver or, in | Each user message sent is delivered to the receiver or, in case of | |||
case of excessive retransmissions, the association is terminated in a | excessive retransmissions, the association is terminated in a | |||
non-graceful way [RFC4960], similar to TCP behavior. In addition to | non-graceful way [RFC4960], similar to TCP behavior. In addition to | |||
this reliable transfer, the partial reliability extension [RFC3758] | this reliable transfer, the partial reliability extension [RFC3758] | |||
allows a sender to abandon user messages. The application can | allows a sender to abandon user messages. The application can | |||
specify the policy for abandoning user messages. | specify the policy for abandoning user messages. | |||
SCTP supports multi-homing. Each SCTP endpoint uses a list of IP- | SCTP supports multihoming. Each SCTP endpoint uses a list of IP | |||
addresses and a single port number. These addresses can be any | addresses and a single port number. These addresses can be any | |||
mixture of IPv4 and IPv6 addresses. These addresses are negotiated | mixture of IPv4 and IPv6 addresses. These addresses are negotiated | |||
during the handshake and the address re-configuration extension | during the handshake, and the address reconfiguration extension | |||
specified in [RFC5061] in combination with [RFC4895] can be used to | specified in [RFC5061] in combination with [RFC4895] can be used to | |||
change these addresses in an authenticated way during the lifetime of | change these addresses in an authenticated way during the lifetime of | |||
an SCTP association. This allows for transport layer mobility. | an SCTP association. This allows for transport-layer mobility. | |||
Multiple addresses are used for improved resilience. If a remote | Multiple addresses are used for improved resilience. If a remote | |||
address becomes unreachable, the traffic is switched over to a | address becomes unreachable, the traffic is switched over to a | |||
reachable one, if one exists. | reachable one, if one exists. | |||
For securing user messages, the use of TLS over SCTP has been | For securing user messages, the use of TLS over SCTP has been | |||
specified in [RFC3436]. However, this solution does not support all | specified in [RFC3436]. However, this solution does not support all | |||
services provided by SCTP, such as un-ordered delivery or partial | services provided by SCTP, such as unordered delivery or partial | |||
reliability. Therefore, the use of DTLS over SCTP has been specified | reliability. Therefore, the use of DTLS over SCTP has been specified | |||
in [RFC6083] to overcome these limitations. When using DTLS over | in [RFC6083] to overcome these limitations. When using DTLS over | |||
SCTP, the application can use almost all services provided by SCTP. | SCTP, the application can use almost all services provided by SCTP. | |||
[I-D.ietf-tsvwg-natsupp] defines methods for endpoints and | [NAT-SUPP] defines methods for endpoints and middleboxes to provide | |||
middleboxes to provide NAT traversal for SCTP over IPv4. For legacy | NAT traversal for SCTP over IPv4. For legacy NAT traversal, | |||
NAT traversal, [RFC6951] defines the UDP encapsulation of SCTP- | [RFC6951] defines the UDP encapsulation of SCTP packets. | |||
packets. Alternatively, SCTP packets can be encapsulated in DTLS | Alternatively, SCTP packets can be encapsulated in DTLS packets as | |||
packets as specified in [I-D.ietf-tsvwg-sctp-dtls-encaps]. The | specified in [SCTP-DTLS-ENCAPS]. The latter encapsulation is used | |||
latter encapsulation is used within the WebRTC | within the WebRTC [WEBRTC-TRANS] context. | |||
[I-D.ietf-rtcweb-transports] context. | ||||
An SCTP ABORT chunk may be used to force a SCTP endpoint to close a | An SCTP ABORT chunk may be used to force a SCTP endpoint to close a | |||
session [RFC4960], aborting the connection. | session [RFC4960], aborting the connection. | |||
SCTP has a well-defined API, described in the next subsection. | SCTP has a well-defined API, described in the next subsection. | |||
3.5.2. Interface Description | 3.5.2. Interface Description | |||
[RFC4960] defines an abstract API for the base protocol. This API | [RFC4960] defines an abstract API for the base protocol. This API | |||
describes the following functions callable by the upper layer of | describes the following functions callable by the upper layer of | |||
SCTP: Initialize, Associate, Send, Receive, Receive Unsent Message, | SCTP: Initialize, Associate, Send, Receive, Receive Unsent Message, | |||
Receive Unacknowledged Message, Shutdown, Abort, SetPrimary, Status, | Receive Unacknowledged Message, Shutdown, Abort, SetPrimary, Status, | |||
Change Heartbeat, Request Heartbeat, Get SRTT Report, Set Failure | Change Heartbeat, Request Heartbeat, Get SRTT Report, Set Failure | |||
Threshold, Set Protocol Parameters, and Destroy. The following | Threshold, Set Protocol Parameters, and Destroy. The following | |||
notifications are provided by the SCTP stack to the upper layer: | notifications are provided by the SCTP stack to the upper layer: | |||
COMMUNICATION UP, DATA ARRIVE, SHUTDOWN COMPLETE, COMMUNICATION LOST, | COMMUNICATION UP, DATA ARRIVE, SHUTDOWN COMPLETE, COMMUNICATION LOST, | |||
COMMUNICATION ERROR, RESTART, SEND FAILURE, NETWORK STATUS CHANGE. | COMMUNICATION ERROR, RESTART, SEND FAILURE, and NETWORK STATUS | |||
CHANGE. | ||||
An extension to the BSD Sockets API is defined in [RFC6458] and | An extension to the BSD Sockets API is defined in [RFC6458] and | |||
covers: | covers: | |||
o the base protocol defined in [RFC4960]. The API allows control | o the base protocol defined in [RFC4960]. The API allows control | |||
over local addresses and port numbers and the primary path. | over local addresses and port numbers and the primary path. | |||
Furthermore the application has fine control about parameters like | Furthermore, the application has fine control of parameters like | |||
retransmission thresholds, the path supervision parameters, the | retransmission thresholds, the path supervision, the delayed | |||
delayed acknowledgment timeout, and the fragmentation point. The | acknowledgment timeout, and the fragmentation point. The API | |||
API provides a mechanism to allow the SCTP stack to notify the | provides a mechanism to allow the SCTP stack to notify the | |||
application about events if the application has requested them. | application about events if the application has requested them. | |||
These notifications provide information about status changes of | These notifications provide information about status changes of | |||
the association and each of the peer addresses. In case of send | the association and each of the peer addresses. In case of send | |||
failures, including drop of messages sent unreliably, the | failures, including drop of messages sent unreliably, the | |||
application can also be notified and user messages can be returned | application can also be notified, and user messages can be | |||
to the application. When sending user messages, the stream id, a | returned to the application. When sending user messages, the | |||
payload protocol identifier, an indication whether ordered | application can indicate a stream id, a payload protocol | |||
delivery is requested or not. These parameters can also be | identifier, and an indication of whether ordered delivery is | |||
provided on message reception. Additionally a context can be | requested. These parameters can also be provided on message | |||
provided when sending, which can be use in case of send failures. | reception. Additionally, a context can be provided when sending, | |||
The sending of arbitrary large user messages is supported. | which can be used in case of send failures. The sending of | |||
arbitrarily large user messages is supported. | ||||
o the SCTP Partial Reliability extension defined in [RFC3758] to | o the SCTP Partial Reliability extension defined in [RFC3758] to | |||
specify for a user message the PR-SCTP policy and the policy | specify for a user message the Partially Reliable SCTP (PR-SCTP) | |||
specific parameter. Examples of these policies defined in | policy and the policy-specific parameter. Examples of these | |||
[RFC3758] and [RFC7496] are: | policies defined in [RFC3758] and [RFC7496] are: | |||
o Limiting the time a user message is dealt with by the sender. | * limiting the time a user message is dealt with by the sender. | |||
o Limiting the number of retransmissions for each fragment of a user | * limiting the number of retransmissions for each fragment of a | |||
message. If the number of retransmissions is limited to 0, one | user message. If the number of retransmissions is limited to | |||
gets a service similar to UDP. | 0, one gets a service similar to UDP. | |||
o Abandoning messages of lower priority in case of a send buffer | * abandoning messages of lower priority in case of a send buffer | |||
shortage. | shortage. | |||
o the SCTP Authentication extension defined in [RFC4895] allowing to | o the SCTP Authentication extension defined in [RFC4895] allowing | |||
manage the shared keys, the HMAC to use, set the chunk types which | management of the shared keys and allowing the HMAC to use and set | |||
are only accepted in an authenticated way, and get the list of | the chunk types (which are only accepted in an authenticated way) | |||
chunks which are accepted by the local and remote end point in an | and get the list of chunks that are accepted by the local and | |||
authenticated way. | remote endpoints in an authenticated way. | |||
o the SCTP Dynamic Address Reconfiguration extension defined in | o the SCTP Dynamic Address Reconfiguration extension defined in | |||
[RFC5061]. It allows to manually add and delete local addresses | [RFC5061]. It allows the manual addition and deletion of local | |||
for SCTP associations and the enabling of automatic address | addresses for SCTP associations, as well as the enabling of | |||
addition and deletion. Furthermore the peer can be given a hint | automatic address addition and deletion. Furthermore, the peer | |||
for choosing its primary path. | can be given a hint for choosing its primary path. | |||
A BSD Sockets API extension has been defined in the documents that | A BSD Sockets API extension has been defined in the documents that | |||
specify the following SCTP protocol extensions: | specify the following SCTP extensions: | |||
o the SCTP Stream Reconfiguration extension defined in [RFC6525]. | o the SCTP Stream Reconfiguration extension defined in [RFC6525]. | |||
The API allows to trigger the reset operation for incoming and | The API allows triggering of the reset operation for incoming and | |||
outgoing streams and the whole association. It provides also a | outgoing streams and the whole association. It also provides a | |||
way to notify the association about the corresponding events. | way to notify the association about the corresponding events. | |||
Furthermore the application can increase the number of streams. | Furthermore, the application can increase the number of streams. | |||
o the UDP Encapsulation of SCTP packets extension defined in | o the UDP Encapsulation of SCTP packets extension defined in | |||
[RFC6951]. The API allows the management of the remote UDP | [RFC6951]. The API allows the management of the remote UDP | |||
encapsulation port. | encapsulation port. | |||
o the SCTP SACK-IMMEDIATELY extension defined in [RFC7053]. The API | o the SCTP SACK-IMMEDIATELY extension defined in [RFC7053]. The API | |||
allows the sender of a user message to request the receiver to | allows the sender of a user message to request the receiver to | |||
send the corresponding acknowledgment immediately. | send the corresponding acknowledgment immediately. | |||
o the additional PR-SCTP policies defined in [RFC7496]. The API | o the additional PR-SCTP policies defined in [RFC7496]. The API | |||
allows to enable/disable the PR-SCTP extension, choose the PR-SCTP | allows enabling/disabling the PR-SCTP extension, choosing the | |||
policies defined in the document and provide statistical | PR-SCTP policies defined in the document, and providing | |||
information about abandoned messages. | statistical information about abandoned messages. | |||
Future documents describing SCTP protocol extensions are expected to | Future documents describing SCTP extensions are expected to describe | |||
describe the corresponding BSD Sockets API extension in a "Socket API | the corresponding BSD Sockets API extension in a "Socket API | |||
Considerations" section. | Considerations" section. | |||
The SCTP socket API supports two kinds of sockets: | The SCTP Socket API supports two kinds of sockets: | |||
o one-to-one style sockets (by using the socket type "SOCK_STREAM"). | o one-to-one style sockets (by using the socket type "SOCK_STREAM"). | |||
o one-to-many style socket (by using the socket type | o one-to-many style socket (by using the socket type | |||
"SOCK_SEQPACKET"). | "SOCK_SEQPACKET"). | |||
One-to-one style sockets are similar to TCP sockets, there is a 1:1 | One-to-one style sockets are similar to TCP sockets; there is a 1:1 | |||
relationship between the sockets and the SCTP associations (except | relationship between the sockets and the SCTP associations (except | |||
for listening sockets). One-to-many style SCTP sockets are similar | for listening sockets). One-to-many style SCTP sockets are similar | |||
to unconnected UDP sockets, where there is a 1:n relationship between | to unconnected UDP sockets, where there is a 1:n relationship between | |||
the sockets and the SCTP associations. | the sockets and the SCTP associations. | |||
The SCTP stack can provide information to the applications about | The SCTP stack can provide information to the applications about | |||
state changes of the individual paths and the association whenever | state changes of the individual paths and the association whenever | |||
they occur. These events are delivered similar to user messages but | they occur. These events are delivered similarly to user messages | |||
are specifically marked as notifications. | but are specifically marked as notifications. | |||
New functions have been introduced to support the use of multiple | New functions have been introduced to support the use of multiple | |||
local and remote addresses. Additional SCTP-specific send and | local and remote addresses. Additional SCTP-specific send and | |||
receive calls have been defined to permit SCTP-specific information | receive calls have been defined to permit SCTP-specific information | |||
to be sent without using ancillary data in the form of additional | to be sent without using ancillary data in the form of additional | |||
cmsgs. These functions provide support for detecting partial | Control Message (cmsg) calls. These functions provide support for | |||
delivery of user messages and notifications. | detecting partial delivery of user messages and notifications. | |||
The SCTP socket API allows a fine-grained control of the protocol | The SCTP Socket API allows a fine-grained control of the protocol | |||
behavior through an extensive set of socket options. | behavior through an extensive set of socket options. | |||
The SCTP kernel implementations of FreeBSD, Linux and Solaris follow | The SCTP kernel implementations of FreeBSD, Linux, and Solaris follow | |||
mostly the specified extension to the BSD Sockets API for the base | mostly the specified extension to the BSD Sockets API for the base | |||
protocol and the corresponding supported protocol extensions. | protocol and the corresponding supported protocol extensions. | |||
3.5.3. Transport Features | 3.5.3. Transport Features | |||
The transport features provided by SCTP are: | The transport features provided by SCTP are: | |||
o connection-oriented transport with feature negotiation and | o connection-oriented transport with feature negotiation and | |||
application-to-port mapping, | application-to-port mapping, | |||
o unicast transport, | o unicast transport, | |||
o port multiplexing, | o port multiplexing, | |||
o uni- or bidirectional communication, | o unidirectional or bidirectional communication, | |||
o message-oriented delivery with durable message framing supporting | o message-oriented delivery with durable message framing supporting | |||
multiple concurrent streams, | multiple concurrent streams, | |||
o fully reliable, partially reliable, or unreliable delivery (based | o fully reliable, partially reliable, or unreliable delivery (based | |||
on user specified policy to handle abandoned user messages) with | on user-specified policy to handle abandoned user messages) with | |||
drop notification, | drop notification, | |||
o ordered and unordered delivery within a stream, | o ordered and unordered delivery within a stream, | |||
o support for stream scheduling prioritization, | o support for stream scheduling prioritization, | |||
o segmentation, | o segmentation, | |||
o user message bundling, | o user message bundling, | |||
o flow control using a window-based mechanism, | o flow control using a window-based mechanism, | |||
o congestion control using methods similar to TCP, | o congestion control using methods similar to TCP, | |||
o strong error detection (CRC32c), | ||||
o transport layer multihoming for resilience and mobility. | o strong error detection (CRC32c), and | |||
o transport-layer multihoming for resilience and mobility. | ||||
3.6. Datagram Congestion Control Protocol (DCCP) | 3.6. Datagram Congestion Control Protocol (DCCP) | |||
Datagram Congestion Control Protocol (DCCP) [RFC4340] is an IETF | The Datagram Congestion Control Protocol (DCCP) [RFC4340] is an IETF | |||
standards track bidirectional transport protocol that provides | Standards Track bidirectional transport protocol that provides | |||
unicast connections of congestion-controlled messages without | unicast connections of congestion-controlled messages without | |||
providing reliability. | providing reliability. | |||
The DCCP Problem Statement describes the goals that DCCP sought to | The DCCP Problem Statement [RFC4336] describes the goals that DCCP | |||
address [RFC4336]: It is suitable for applications that transfer | sought to address. It is suitable for applications that transfer | |||
fairly large amounts of data and that can benefit from control over | fairly large amounts of data and that can benefit from control over | |||
the trade off between timeliness and reliability [RFC4336]. | the trade-off between timeliness and reliability [RFC4336]. | |||
DCCP offers low overhead, and many characteristics common to UDP, but | DCCP offers low overhead, and many characteristics common to UDP, but | |||
can avoid "re-inventing the wheel" each time a new multimedia | can avoid "re-inventing the wheel" each time a new multimedia | |||
application emerges. Specifically it includes core transport | application emerges. Specifically, it includes core transport | |||
functions (feature negotiation, path state management, RTT | functions (feature negotiation, path state management, RTT | |||
calculation, PMTUD, etc.): DCCP applications select how they send | calculation, PMTUD, etc.): DCCP applications select how they send | |||
packets and, where suitable, choose common algorithms to manage their | packets and, where suitable, choose common algorithms to manage their | |||
functions. Examples of applications that can benefit from such | functions. Examples of applications that can benefit from such | |||
transport services include interactive applications, streaming media, | transport services include interactive applications, streaming media, | |||
or on-line games [RFC4336]. | or on-line games [RFC4336]. | |||
3.6.1. Protocol Description | 3.6.1. Protocol Description | |||
DCCP is a connection-oriented datagram protocol, providing a three- | DCCP is a connection-oriented datagram protocol that provides a | |||
way handshake to allow a client and server to set up a connection, | three-way handshake to allow a client and server to set up a | |||
and mechanisms for orderly completion and immediate teardown of a | connection and provides mechanisms for orderly completion and | |||
connection. | immediate teardown of a connection. | |||
A DCCP protocol instance can be extended [RFC4340] and tuned using | A DCCP protocol instance can be extended [RFC4340] and tuned using | |||
additional features. Some features are sender-side only, requiring | additional features. Some features are sender-side only, requiring | |||
no negotiation with the receiver; some are receiver-side only; and | no negotiation with the receiver; some are receiver-side only; and | |||
some are explicitly negotiated during connection setup. | some are explicitly negotiated during connection setup. | |||
DCCP uses a Connect packet to initiate a session, and permits each | DCCP uses a Connect packet to initiate a session and permits each | |||
endpoint to choose the features it wishes to support. Simultaneous | endpoint to choose the features it wishes to support. Simultaneous | |||
open [RFC5596], as in TCP, can enable interoperability in the | open [RFC5596], as in TCP, can enable interoperability in the | |||
presence of middleboxes. The Connect packet includes a Service Code | presence of middleboxes. The Connect packet includes a Service Code | |||
[RFC5595] that identifies the application or protocol using DCCP, | [RFC5595] that identifies the application or protocol using DCCP, | |||
providing middleboxes with information about the intended use of a | providing middleboxes with information about the intended use of a | |||
connection. | connection. | |||
The DCCP service is unicast-only. | The DCCP service is unicast-only. | |||
It provides multiplexing to multiple sockets at each endpoint using | It provides multiplexing to multiple sockets at each endpoint using | |||
port numbers. An active DCCP session is identified by its four-tuple | port numbers. An active DCCP session is identified by its four-tuple | |||
of local and remote IP addresses and local port and remote port | of local and remote IP addresses and local and remote port numbers. | |||
numbers. | ||||
The protocol segments data into messages, typically sized to fit in | The protocol segments data into messages that are typically sized to | |||
IP packets, but which may be fragmented providing they are smaller | fit in IP packets but may be fragmented if they are smaller than the | |||
than the maximum packet size. A DCCP interface allows applications | maximum packet size. A DCCP interface allows applications to request | |||
to request fragmentation for packets larger than PMTU, but not larger | fragmentation for packets larger than PMTU, but not larger than the | |||
than the maximum packet size allowed by the current congestion | maximum packet size allowed by the current congestion control | |||
control mechanism (CCMPS) [RFC4340]. | mechanism (Congestion Control Maximum Packet Size (CCMPS)) [RFC4340]. | |||
Each message is identified by a sequence number. The sequence number | Each message is identified by a sequence number. The sequence number | |||
is used to identify segments in acknowledgments, to detect | is used to identify segments in acknowledgments, to detect | |||
unacknowledged segments, to measure RTT, etc. The protocol may | unacknowledged segments, to measure RTT, etc. The protocol may | |||
support unordered delivery of data, and does not itself provide | support unordered delivery of data and does not itself provide | |||
retransmission. DCCP supports reduced checksum coverage, a partial | retransmission. DCCP supports reduced checksum coverage, a partial | |||
payload protection mechanism similar to UDP-Lite. There is also a | payload protection mechanism similar to UDP-Lite. There is also a | |||
Data Checksum option, which when enabled, contains a strong CRC, to | Data Checksum option, which when enabled, contains a strong Cyclic | |||
enable endpoints to detect application data corruption. | Redundancy Check (CRC), to enable endpoints to detect application | |||
data corruption. | ||||
Receiver flow control is supported, which limits the amount of | Receiver flow control is supported, which limits the amount of | |||
unacknowledged data that can be outstanding at a given time. | unacknowledged data that can be outstanding at a given time. | |||
A DCCP Reset packet may be used to force a DCCP endpoint to close a | A DCCP Reset packet may be used to force a DCCP endpoint to close a | |||
session [RFC4340], aborting the connection. | session [RFC4340], aborting the connection. | |||
DCCP supports negotiation of the congestion control profile between | DCCP supports negotiation of the congestion control profile between | |||
endpoints, to provide plug-and-play congestion control mechanisms. | endpoints, to provide plug-and-play congestion control mechanisms. | |||
Examples of specified profiles include "TCP-like" [RFC4341], "TCP- | Examples of specified profiles include "TCP-like" [RFC4341], "TCP- | |||
friendly" [RFC4342], and "TCP-friendly for small packets" [RFC5622]. | friendly" [RFC4342], and "TCP-friendly for small packets" [RFC5622]. | |||
Additional mechanisms are recorded in an IANA registry. | Additional mechanisms are recorded in an IANA registry (see | |||
<http://www.iana.org/assignments/dccp-parameters>). | ||||
A lightweight UDP-based encapsulation (DCCP-UDP) has been defined | A lightweight UDP-based encapsulation (DCCP-UDP) has been defined | |||
[RFC6773] that permits DCCP to be used over paths where DCCP is not | [RFC6773] that permits DCCP to be used over paths where DCCP is not | |||
natively supported. Support for DCCP in NAPT/NATs is defined in | natively supported. Support for DCCP in NAPT/NATs is defined in | |||
[RFC4340] and [RFC5595]. Upper layer protocols specified on top of | [RFC4340] and [RFC5595]. Upper-layer protocols specified on top of | |||
DCCP include DTLS [RFC5595], RTP [RFC5672], ICE/SDP [RFC6773]. | DCCP include DTLS [RFC5238], RTP [RFC5762], and Interactive | |||
Connectivity Establishment / Session Description Protocol (ICE/SDP) | ||||
[RFC6773]. | ||||
3.6.2. Interface Description | 3.6.2. Interface Description | |||
Functions expected for a DCCP API include: Open, Close and Management | Functions expected for a DCCP API include: Open, Close, and | |||
of the progress a DCCP connection. The Open function provides | Management of the progress a DCCP connection. The Open function | |||
feature negotiation, selection of an appropriate CCID for congestion | provides feature negotiation, selection of an appropriate Congestion | |||
control and other parameters associated with the DCCP connection. A | Control Identifier (CCID) for congestion control, and other | |||
function allows an application to send DCCP datagrams, including | parameters associated with the DCCP connection. A function allows an | |||
setting the required checksum coverage, and any required options. | application to send DCCP datagrams, including setting the required | |||
(DCCP permits sending datagrams with a zero-length payload.) A | checksum coverage and any required options. (DCCP permits sending | |||
function allows reception of data, including indicating if the data | datagrams with a zero-length payload.) A function allows reception | |||
was used or dropped. Functions can also make the status of a | of data, including indicating if the data was used or dropped. | |||
connection visible to an application, including detection of the | Functions can also make the status of a connection visible to an | |||
maximum packet size and the ability to perform flow control by | application, including detection of the maximum packet size and the | |||
detecting a slow receiver at the sender. | ability to perform flow control by detecting a slow receiver at the | |||
sender. | ||||
There is no API currently specified in the RFC Series. | There is no API currently specified in the RFC Series. | |||
3.6.3. Transport Features | 3.6.3. Transport Features | |||
The transport features provided by DCCP are: | The transport features provided by DCCP are: | |||
o unicast transport, | o unicast transport, | |||
o connection-oriented communication with feature negotiation and | o connection-oriented communication with feature negotiation and | |||
application-to-port mapping, | application-to-port mapping, | |||
o signaling of application class for middlebox support (implemented | o signaling of application class for middlebox support (implemented | |||
using Service Codes), | using Service Codes), | |||
o port multiplexing, | o port multiplexing, | |||
o uni-or bidirectional communication, | o unidirectional or bidirectional communication, | |||
o message-oriented delivery, | o message-oriented delivery, | |||
o unreliable delivery with drop notification, | o unreliable delivery with drop notification, | |||
o unordered delivery, | o unordered delivery, | |||
o flow control (implemented using the slow receiver function) | o flow control (implemented using the slow receiver function), and | |||
o partial and full payload error detection (with optional strong | o partial and full payload error detection (with optional strong | |||
integrity check). | integrity check). | |||
3.7. Transport Layer Security (TLS) and Datagram TLS (DTLS) as a | 3.7. Transport Layer Security (TLS) and Datagram TLS (DTLS) as a | |||
pseudotransport | Pseudotransport | |||
Transport Layer Security (TLS) [RFC5246] and Datagram TLS (DTLS) | Transport Layer Security (TLS) [RFC5246] and Datagram TLS (DTLS) | |||
[RFC6347] are IETF protocols that provide several security-related | [RFC6347] are IETF protocols that provide several security-related | |||
features to applications. TLS is designed to run on top of a | features to applications. TLS is designed to run on top of a | |||
reliable streaming transport protocol (usually TCP), while DTLS is | reliable streaming transport protocol (usually TCP), while DTLS is | |||
designed to run on top of a best-effort datagram protocol (UDP or | designed to run on top of a best-effort datagram protocol (UDP or | |||
DCCP [RFC5238]). At the time of writing, the current version of TLS | DCCP [RFC5238]). At the time of writing, the current version of TLS | |||
is 1.2, defined in [RFC5246]; work on TLS version 1.3 | is 1.2, defined in [RFC5246]; work on TLS version is 1.3 [TLS-1.3] | |||
[I-D.ietf-tls-tls13] nearing completion. DTLS provides nearly | nearing completion. DTLS provides nearly identical functionality to | |||
identical functionality to applications; it is defined in [RFC6347] | applications; it is defined in [RFC6347] and its current version is | |||
and its current version is also 1.2. The TLS protocol evolved from | also 1.2. The TLS protocol evolved from the Secure Sockets Layer | |||
the Secure Sockets Layer (SSL) [RFC6101] protocols developed in the | (SSL) [RFC6101] protocols developed in the mid-1990s to support | |||
mid-1990s to support protection of HTTP traffic. | protection of HTTP traffic. | |||
While older versions of TLS and DTLS are still in use, they provide | While older versions of TLS and DTLS are still in use, they provide | |||
weaker security guarantees. [RFC7457] outlines important attacks on | weaker security guarantees. [RFC7457] outlines important attacks on | |||
TLS and DTLS. [RFC7525] is a Best Current Practices (BCP) document | TLS and DTLS. [RFC7525] is a Best Current Practices (BCP) document | |||
that describes secure configurations for TLS and DTLS to counter | that describes secure configurations for TLS and DTLS to counter | |||
these attacks. The recommendations are applicable for the vast | these attacks. The recommendations are applicable for the vast | |||
majority of use cases. | majority of use cases. | |||
3.7.1. Protocol Description | 3.7.1. Protocol Description | |||
skipping to change at page 23, line 44 ¶ | skipping to change at page 24, line 21 ¶ | |||
application's decision whether the certificate of the peering entity | application's decision whether the certificate of the peering entity | |||
is acceptable for authorization decisions. | is acceptable for authorization decisions. | |||
Perfect forward secrecy, if enabled and supported by the selected | Perfect forward secrecy, if enabled and supported by the selected | |||
algorithms, ensures that traffic encrypted and captured during a | algorithms, ensures that traffic encrypted and captured during a | |||
session at time t0 cannot be later decrypted at time t1 (t1 > t0), | session at time t0 cannot be later decrypted at time t1 (t1 > t0), | |||
even if the long-term secrets of the communicating peers are later | even if the long-term secrets of the communicating peers are later | |||
compromised. | compromised. | |||
As DTLS is generally used over an unreliable datagram transport such | As DTLS is generally used over an unreliable datagram transport such | |||
as UDP, applications will need to tolerate lost, re-ordered, or | as UDP, applications will need to tolerate lost, reordered, or | |||
duplicated datagrams. Like TLS, DTLS conveys application data in a | duplicated datagrams. Like TLS, DTLS conveys application data in a | |||
sequence of independent records. However, because records are mapped | sequence of independent records. However, because records are mapped | |||
to unreliable datagrams, there are several features unique to DTLS | to unreliable datagrams, there are several features unique to DTLS | |||
that are not applicable to TLS: | that are not applicable to TLS: | |||
o Record replay detection (optional). | o Record replay detection (optional). | |||
o Record size negotiation (estimates of PMTU and record size | o Record size negotiation (estimates of PMTU and record size | |||
expansion factor). | expansion factor). | |||
skipping to change at page 24, line 33 ¶ | skipping to change at page 25, line 9 ¶ | |||
TLS is commonly invoked using an API provided by packages such as | TLS is commonly invoked using an API provided by packages such as | |||
OpenSSL, wolfSSL, or GnuTLS. Using such APIs entails the | OpenSSL, wolfSSL, or GnuTLS. Using such APIs entails the | |||
manipulation of several important abstractions, which fall into the | manipulation of several important abstractions, which fall into the | |||
following categories: long-term keys and algorithms, session state, | following categories: long-term keys and algorithms, session state, | |||
and communications/connections. | and communications/connections. | |||
Considerable care is required in the use of TLS APIs to ensure | Considerable care is required in the use of TLS APIs to ensure | |||
creation of a secure application. The programmer should have at | creation of a secure application. The programmer should have at | |||
least a basic understanding of encryption and digital signature | least a basic understanding of encryption and digital signature | |||
algorithms and their strengths, public key infrastructure (including | algorithms and their strengths, public key infrastructure (including | |||
X.509 certificates and certificate revocation), and the sockets API. | X.509 certificates and certificate revocation), and the Sockets API. | |||
See [RFC7525] and [RFC7457], as mentioned above. | See [RFC7525] and [RFC7457], as mentioned above. | |||
As an example, in the case of OpenSSL, the primary abstractions are | As an example, in the case of OpenSSL, the primary abstractions are | |||
the library itself and method (protocol), session, context, cipher | the library itself, method (protocol), session, context, cipher, and | |||
and connection. After initializing the library and setting the | connection. After initializing the library and setting the method, a | |||
method, a cipher suite is chosen and used to configure a context | cipher suite is chosen and used to configure a context object. | |||
object. Session objects may then be minted according to the | Session objects may then be minted according to the parameters | |||
parameters present in a context object and associated with individual | present in a context object and associated with individual | |||
connections. Depending on how precisely the programmer wishes to | connections. Depending on how precisely the programmer wishes to | |||
select different algorithmic or protocol options, various levels of | select different algorithmic or protocol options, various levels of | |||
details may be required. | details may be required. | |||
3.7.3. Transport Features | 3.7.3. Transport Features | |||
Both TLS and DTLS employ a layered architecture. The lower layer is | Both TLS and DTLS employ a layered architecture. The lower layer is | |||
commonly called the record protocol. It is responsible for: | commonly called the "record protocol". It is responsible for: | |||
o message fragmentation, | o message fragmentation, | |||
o authentication and integrity via message authentication codes | o authentication and integrity via message authentication codes | |||
(MAC), | (MACs), | |||
o data encryption, | o data encryption, and | |||
o scheduling transmission using the underlying transport protocol. | o scheduling transmission using the underlying transport protocol. | |||
DTLS augments the TLS record protocol with: | DTLS augments the TLS record protocol with: | |||
o ordering and replay protection, implemented using sequence | o ordering and replay protection, implemented using sequence | |||
numbers. | numbers. | |||
Several protocols are layered on top of the record protocol. These | Several protocols are layered on top of the record protocol. These | |||
include the handshake, alert, and change cipher spec protocols. | include the handshake, alert, and change cipher spec protocols. | |||
skipping to change at page 25, line 32 ¶ | skipping to change at page 26, line 9 ¶ | |||
capability and a cookie-like mechanism to resist DoS attacks. (TLS | capability and a cookie-like mechanism to resist DoS attacks. (TLS | |||
compression is not recommended at present). The alert protocol is | compression is not recommended at present). The alert protocol is | |||
used to inform the peer of various conditions, most of which are | used to inform the peer of various conditions, most of which are | |||
terminal for the connection. The change cipher spec protocol is used | terminal for the connection. The change cipher spec protocol is used | |||
to synchronize changes in cryptographic parameters for each peer. | to synchronize changes in cryptographic parameters for each peer. | |||
The data protocol, when used with an appropriate cipher, provides: | The data protocol, when used with an appropriate cipher, provides: | |||
o authentication of one end or both ends of a connection, | o authentication of one end or both ends of a connection, | |||
o confidentiality, | o confidentiality, and | |||
o cryptographic integrity protection. | o cryptographic integrity protection. | |||
Both TLS and DTLS are unicast-only. | Both TLS and DTLS are unicast-only. | |||
3.8. Realtime Transport Protocol (RTP) | 3.8. Real-Time Transport Protocol (RTP) | |||
RTP provides an end-to-end network transport service, suitable for | RTP provides an end-to-end network transport service, suitable for | |||
applications transmitting real-time data, such as audio, video or | applications transmitting real-time data, such as audio, video or | |||
data, over multicast or unicast transport services, including TCP, | data, over multicast or unicast transport services, including TCP, | |||
UDP, UDP-Lite, DCCP, TLS and DTLS. | UDP, UDP-Lite, DCCP, TLS, and DTLS. | |||
3.8.1. Protocol Description | 3.8.1. Protocol Description | |||
The RTP standard [RFC3550] defines a pair of protocols, RTP and the | The RTP standard [RFC3550] defines a pair of protocols: RTP and the | |||
RTP control protocol, RTCP. The transport does not provide | RTP Control Protocol (RTCP). The transport does not provide | |||
connection setup, instead relying on out-of-band techniques or | connection setup, instead relying on out-of-band techniques or | |||
associated control protocols to setup, negotiate parameters or tear | associated control protocols to setup, negotiate parameters, or tear | |||
down a session. | down a session. | |||
An RTP sender encapsulates audio/video data into RTP packets to | An RTP sender encapsulates audio/video data into RTP packets to | |||
transport media streams. The RFC-series specifies RTP payload | transport media streams. The RFC Series specifies RTP payload | |||
formats that allow packets to carry a wide range of media, and | formats that allow packets to carry a wide range of media and | |||
specifies a wide range of multiplexing, error control and other | specifies a wide range of multiplexing, error control, and other | |||
support mechanisms. | support mechanisms. | |||
If a frame of media data is large, it will be fragmented into several | If a frame of media data is large, it will be fragmented into several | |||
RTP packets. Likewise, several small frames may be bundled into a | RTP packets. Likewise, several small frames may be bundled into a | |||
single RTP packet. | single RTP packet. | |||
An RTP receiver collects RTP packets from the network, validates them | An RTP receiver collects RTP packets from the network, validates them | |||
for correctness, and sends them to the media decoder input-queue. | for correctness, and sends them to the media decoder input queue. | |||
Missing packet detection is performed by the channel decoder. The | Missing packet detection is performed by the channel decoder. The | |||
play-out buffer is ordered by time stamp and is used to reorder | playout buffer is ordered by time stamp and is used to reorder | |||
packets. Damaged frames may be repaired before the media payloads | packets. Damaged frames may be repaired before the media payloads | |||
are decompressed to display or store the data. Some uses of RTP are | are decompressed to display or store the data. Some uses of RTP are | |||
able to exploit the partial payload protection features offered by | able to exploit the partial payload protection features offered by | |||
DCCP and UDP-Lite. | DCCP and UDP-Lite. | |||
RTCP is a control protocol that works alongside an RTP flow. Both | RTCP is a control protocol that works alongside an RTP flow. Both | |||
the RTP sender and receiver will send RTCP report packets. This is | the RTP sender and receiver will send RTCP report packets. This is | |||
used to periodically send control information and report performance. | used to periodically send control information and report performance. | |||
Based on received RTCP feedback, an RTP sender can adjust the | Based on received RTCP feedback, an RTP sender can adjust the | |||
transmission, e.g., perform rate adaptation at the application layer | transmission, e.g., perform rate adaptation at the application layer | |||
in the case of congestion. | in the case of congestion. | |||
An RTCP receiver report (RTCP RR) is returned to the sender | An RTCP receiver report (RTCP RR) is returned to the sender | |||
periodically to report key parameters (e.g, the fraction of packets | periodically to report key parameters (e.g., the fraction of packets | |||
lost in the last reporting interval, the cumulative number of packets | lost in the last reporting interval, the cumulative number of packets | |||
lost, the highest sequence number received, and the inter-arrival | lost, the highest sequence number received, and the inter-arrival | |||
jitter). The RTCP RR packets also contain timing information that | jitter). The RTCP RR packets also contain timing information that | |||
allows the sender to estimate the network round trip time (RTT) to | allows the sender to estimate the network round-trip time (RTT) to | |||
the receivers. | the receivers. | |||
The interval between reports sent from each receiver tends to be on | The interval between reports sent from each receiver tends to be on | |||
the order of a few seconds on average, although this varies with the | the order of a few seconds on average, although this varies with the | |||
session rate, and sub-second reporting intervals are possible for | session rate, and sub-second reporting intervals are possible for | |||
high rate sessions. The interval is randomized to avoid | high rate sessions. The interval is randomized to avoid | |||
synchronization of reports from multiple receivers. | synchronization of reports from multiple receivers. | |||
3.8.2. Interface Description | 3.8.2. Interface Description | |||
There is no standard application programming interface defined for | There is no standard API defined for RTP or RTCP. Implementations | |||
RTP or RTCP. Implementations are typically tightly integrated with a | are typically tightly integrated with a particular application and | |||
particular application, and closely follow the principles of | closely follow the principles of application-level framing and | |||
application level framing and integrated layer processing [ClarkArch] | integrated layer processing [ClarkArch] in media processing | |||
in media processing [RFC2736], error recovery and concealment, rate | [RFC2736], error recovery and concealment, rate adaptation, and | |||
adaptation, and security [RFC7202]. Accordingly, RTP implementations | security [RFC7202]. Accordingly, RTP implementations tend to be | |||
tend to be targeted at particular application domains (e.g., voice- | targeted at particular application domains (e.g., voice-over-IP, | |||
over-IP, IPTV, or video conferencing), with a feature set optimized | IPTV, or video conferencing), with a feature set optimized for that | |||
for that domain, rather than being general purpose implementations of | domain, rather than being general purpose implementations of the | |||
the protocol. | protocol. | |||
3.8.3. Transport Features | 3.8.3. Transport Features | |||
The transport features provided by RTP are: | The transport features provided by RTP are: | |||
o unicast, multicast or IPv4 broadcast (provided by lower layer | o unicast, multicast, or IPv4 broadcast (provided by lower-layer | |||
protocol), | protocol), | |||
o port multiplexing (provided by lower layer protocol), | o port multiplexing (provided by lower-layer protocol), | |||
o uni- or bidirectional communication (provided by lower layer | o unidirectional or bidirectional communication (provided by lower- | |||
protocol), | layer protocol), | |||
o message-oriented delivery with support for media types and other | o message-oriented delivery with support for media types and other | |||
extensions, | extensions, | |||
o reliable delivery when using erasure coding or unreliable delivery | o reliable delivery when using erasure coding or unreliable delivery | |||
with drop notification (if supported by lower layer protocol), | with drop notification (if supported by lower-layer protocol), | |||
o connection setup with feature negotiation (using associated | o connection setup with feature negotiation (using associated | |||
protocols) and application-to-port mapping (provided by lower | protocols) and application-to-port mapping (provided by lower- | |||
layer protocol), | layer protocol), | |||
o segmentation, | o segmentation, and | |||
o performance metric reporting (using associated protocols). | o performance metric reporting (using associated protocols). | |||
3.9. Hypertext Transport Protocol (HTTP) over TCP as a pseudotransport | 3.9. Hypertext Transport Protocol (HTTP) over TCP as a Pseudotransport | |||
The Hypertext Transfer Protocol (HTTP) is an application-level | The Hypertext Transfer Protocol (HTTP) is an application-level | |||
protocol widely used on the Internet. It provides object-oriented | protocol widely used on the Internet. It provides object-oriented | |||
delivery of discrete data or files. Version 1.1 of the protocol is | delivery of discrete data or files. Version 1.1 of the protocol is | |||
specified in [RFC7230] [RFC7231] [RFC7232] [RFC7233] [RFC7234] | specified in [RFC7230] [RFC7231] [RFC7232] [RFC7233] [RFC7234] | |||
[RFC7235], and version 2 in [RFC7540]. HTTP is usually transported | [RFC7235], and version 2 is specified in [RFC7540]. HTTP is usually | |||
over TCP using port 80 and 443, although it can be used with other | transported over TCP using ports 80 and 443, although it can be used | |||
transports. When used over TCP it inherits TCP's properties. | with other transports. When used over TCP, it inherits TCP's | |||
properties. | ||||
Application layer protocols may use HTTP as a substrate with an | Application-layer protocols may use HTTP as a substrate with an | |||
existing method and data formats, or specify new methods and data | existing method and data formats, or specify new methods and data | |||
formats. There are various reasons for this practice listed in | formats. There are various reasons for this practice listed in | |||
[RFC3205]; these include being a well-known and well-understood | [RFC3205]; these include being a well-known and well-understood | |||
protocol, reusability of existing servers and client libraries, easy | protocol, reusability of existing servers and client libraries, easy | |||
use of existing security mechanisms such as HTTP digest | use of existing security mechanisms such as HTTP digest | |||
authentication [RFC2617] and TLS [RFC5246], the ability of HTTP to | authentication [RFC7235] and TLS [RFC5246], and the ability of HTTP | |||
traverse firewalls makes it work over many types of infrastructure, | to traverse firewalls, which allows it to work over many types of | |||
and in cases where an application server often needs to support HTTP | infrastructure and in cases where an application server often needs | |||
anyway. | to support HTTP anyway. | |||
Depending on application need, the use of HTTP as a substrate | Depending on application need, the use of HTTP as a substrate | |||
protocol may add complexity and overhead in comparison to a special- | protocol may add complexity and overhead in comparison to a special- | |||
purpose protocol (e.g., HTTP headers, suitability of the HTTP | purpose protocol (e.g., HTTP headers, suitability of the HTTP | |||
security model, etc.). [RFC3205] addresses this issue and provides | security model, etc.). [RFC3205] addresses this issue, provides some | |||
some guidelines and identifies concerns about the use of HTTP | guidelines, and identifies concerns about the use of HTTP standard | |||
standard port 80 and 443, the use of HTTP URL scheme and interaction | ports 80 and 443, the use of the HTTP URL scheme, and interaction | |||
with existing firewalls, proxies and NATs. | with existing firewalls, proxies, and NATs. | |||
Representational State Transfer (REST) [REST] is another example of | Representational State Transfer (REST) [REST] is another example of | |||
how applications can use HTTP as transport protocol. REST is an | how applications can use HTTP as a transport protocol. REST is an | |||
architecture style that may be used to build applications using HTTP | architecture style that may be used to build applications using HTTP | |||
as a communication protocol. | as a communication protocol. | |||
3.9.1. Protocol Description | 3.9.1. Protocol Description | |||
Hypertext Transfer Protocol (HTTP) is a request/response protocol. A | The Hypertext Transfer Protocol (HTTP) is a request/response | |||
client sends a request containing a request method, URI and protocol | protocol. A client sends a request containing a request method, URI, | |||
version followed message whose design is inspired by MIME (see | and protocol version followed by message whose design is inspired by | |||
[RFC7231] for the differences between an HTTP object and a MIME | MIME (see [RFC7231] for the differences between an HTTP object and a | |||
message), containing information about the client and request | MIME message), containing information about the client and request | |||
modifiers. The message can also contain a message body carrying | modifiers. The message can also contain a message body carrying | |||
application data. The server responds with a status or error code | application data. The server responds with a status or error code | |||
followed by a message containing information about the server and | followed by a message containing information about the server and | |||
information about the data. This may include a message body. It is | information about the data. This may include a message body. It is | |||
possible to specify a data format for the message body using MIME | possible to specify a data format for the message body using MIME | |||
media types [RFC2045]. The protocol has additional features, some | media types [RFC2045]. The protocol has additional features; some | |||
relevant to pseudo-transport are described below. | relevant to pseudotransport are described below. | |||
Content negotiation, specified in [RFC7231], is a mechanism provided | Content negotiation, specified in [RFC7231], is a mechanism provided | |||
by HTTP to allow selection of a representation for a requested | by HTTP to allow selection of a representation for a requested | |||
resource. The client and server negotiate acceptable data formats, | resource. The client and server negotiate acceptable data formats, | |||
character sets, data encoding (e.g., data can be transferred | character sets, and data encoding (e.g., data can be transferred | |||
compressed using gzip). HTTP can accommodate exchange of messages as | compressed using gzip). HTTP can accommodate exchange of messages as | |||
well as data streaming (using chunked transfer encoding [RFC7230]). | well as data streaming (using chunked transfer encoding [RFC7230]). | |||
It is also possible to request a part of a resource using an object | It is also possible to request a part of a resource using an object | |||
range request [RFC7233]. The protocol provides powerful cache | range request [RFC7233]. The protocol provides powerful cache | |||
control signaling defined in [RFC7234]. | control signaling defined in [RFC7234]. | |||
The persistent connections of HTTP 1.1 and HTTP 2.0 allow multiple | The persistent connections of HTTP 1.1 and HTTP 2.0 allow multiple | |||
request- response transactions (streams) during the life-time of a | request/response transactions (streams) during the lifetime of a | |||
single HTTP connection. This reduces overhead during connection | single HTTP connection. This reduces overhead during connection | |||
establishment and mitigates transport layer slow-start that would | establishment and mitigates transport-layer slow-start that would | |||
have otherwise been incurred for each transaction. HTTP 2.0 | have otherwise been incurred for each transaction. HTTP 2.0 | |||
connections can multiplex many request/response pairs in parallel on | connections can multiplex many request/response pairs in parallel on | |||
a single transport connection. Both are important to reduce latency | a single transport connection. Both are important to reduce latency | |||
for HTTP's primary use case. | for HTTP's primary use case. | |||
HTTP can be combined with security mechanisms, such as TLS (denoted | HTTP can be combined with security mechanisms, such as TLS (denoted | |||
by HTTPS). This adds protocol properties provided by such a | by HTTPS). This adds protocol properties provided by such a | |||
mechanism (e.g., authentication, encryption). The TLS Application- | mechanism (e.g., authentication and encryption). The TLS | |||
Layer Protocol Negotiation (ALPN) extension [RFC7301] can be used to | Application-Layer Protocol Negotiation (ALPN) extension [RFC7301] can | |||
negotiate the HTTP version within the TLS handshake, eliminating the | be used to negotiate the HTTP version within the TLS handshake, | |||
latency incurred by additional round-trip exchanges. Arbitrary | eliminating the latency incurred by additional round-trip exchanges. | |||
cookie strings, included as part of the request headers, are often | Arbitrary cookie strings, included as part of the request headers, | |||
used as bearer tokens in HTTP. | are often used as bearer tokens in HTTP. | |||
3.9.2. Interface Description | 3.9.2. Interface Description | |||
There are many HTTP libraries available exposing different APIs. The | There are many HTTP libraries available exposing different APIs. The | |||
APIs provide a way to specify a request by providing a URI, a method, | APIs provide a way to specify a request by providing a URI, a method, | |||
request modifiers and optionally a request body. For the response, | request modifiers, and, optionally, a request body. For the | |||
callbacks can be registered that will be invoked when the response is | response, callbacks can be registered that will be invoked when the | |||
received. If HTTPS is used, the API exposes a registration of | response is received. If HTTPS is used, the API exposes a | |||
callbacks for a server that requests client authentication and when | registration of callbacks when a server requests client | |||
certificate verification is needed. | authentication and when certificate verification is needed. | |||
The World Wide Web Consortium (W3C) has standardized the | The World Wide Web Consortium (W3C) has standardized the | |||
XMLHttpRequest API [XHR]. This API can be used for sending HTTP/ | XMLHttpRequest API [XHR]. This API can be used for sending HTTP/ | |||
HTTPS requests and receiving server responses. Besides the XML data | HTTPS requests and receiving server responses. Besides the XML data | |||
format, the request and response data format can also be JSON, HTML, | format, the request and response data format can also be JSON, HTML, | |||
and plain text. JavaScript and XMLHttpRequest are ubiquitous | and plain text. JavaScript and XMLHttpRequest are ubiquitous | |||
programming models for websites, and more general applications, where | programming models for websites and more general applications where | |||
native code is less attractive. | native code is less attractive. | |||
3.9.3. Transport features | 3.9.3. Transport Features | |||
The transport features provided by HTTP, when used as a pseudo- | The transport features provided by HTTP, when used as a | |||
transport, are: | pseudotransport, are: | |||
o unicast transport (provided by the lower layer protocol, usually | o unicast transport (provided by the lower-layer protocol, usually | |||
TCP), | TCP), | |||
o uni- or bidirectional communication, | o unidirectional or bidirectional communication, | |||
o transfer of objects in multiple streams with object content type | o transfer of objects in multiple streams with object content type | |||
negotiation, supporting partial transmission of object ranges, | negotiation, supporting partial transmission of object ranges, | |||
o ordered delivery (provided by the lower layer protocol, usually | o ordered delivery (provided by the lower-layer protocol, usually | |||
TCP), | TCP), | |||
o fully reliable delivery (provided by the lower layer protocol, | o fully reliable delivery (provided by the lower-layer protocol, | |||
usually TCP), | usually TCP), | |||
o flow control (provided by the lower layer protocol, usually TCP). | o flow control (provided by the lower-layer protocol, usually TCP), | |||
and | ||||
o congestion control (provided by the lower layer protocol, usually | o congestion control (provided by the lower-layer protocol, usually | |||
TCP). | TCP). | |||
HTTPS (HTTP over TLS) additionally provides the following features | HTTPS (HTTP over TLS) additionally provides the following features | |||
(as provided by TLS): | (as provided by TLS): | |||
o authentication (of one or both ends of a connection), | o authentication (of one or both ends of a connection), | |||
o confidentiality, | o confidentiality, and | |||
o integrity protection. | o integrity protection. | |||
3.10. File Delivery over Unidirectional Transport/Asynchronous Layered | 3.10. File Delivery over Unidirectional Transport / Asynchronous | |||
Coding Reliable Multicast (FLUTE/ALC) | Layered Coding (FLUTE/ALC) for Reliable Multicast | |||
FLUTE/ALC is an IETF standards track protocol specified in [RFC6726] | FLUTE/ALC is an IETF Standards Track protocol specified in [RFC6726] | |||
and [RFC5775]. It provides object-oriented delivery of discrete data | and [RFC5775]. It provides object-oriented delivery of discrete data | |||
or files. Asynchronous Layer Coding (ALC) provides an underlying | or files. Asynchronous Layer Coding (ALC) provides an underlying | |||
reliable transport service and FLUTE a file-oriented specialization | reliable transport service and FLUTE a file-oriented specialization | |||
of the ALC service (e.g., to carry associated metadata). The | of the ALC service (e.g., to carry associated metadata). [RFC6726] | |||
[RFC6726] and [RFC5775] protocols are non-backward-compatible updates | and [RFC5775] are non-backward-compatible updates of [RFC3926] and | |||
of the [RFC3926] and [RFC3450] experimental protocols; these | [RFC3450], which are Experimental protocols; these Experimental | |||
experimental protocols are currently largely deployed in the 3GPP | protocols are currently largely deployed in the 3GPP Multimedia | |||
Multimedia Broadcast and Multicast Services (MBMS) (see [MBMS], | Broadcast / Multicast Service (MBMS) (see [MBMS], Section 7) and | |||
section 7) and similar contexts (e.g., the Japanese ISDB-Tmm | similar contexts (e.g., the Japanese ISDB-Tmm standard). | |||
standard). | ||||
The FLUTE/ALC protocol has been designed to support massively | The FLUTE/ALC protocol has been designed to support massively | |||
scalable reliable bulk data dissemination to receiver groups of | scalable reliable bulk data dissemination to receiver groups of | |||
arbitrary size using IP Multicast over any type of delivery network, | arbitrary size using IP Multicast over any type of delivery network, | |||
including unidirectional networks (e.g., broadcast wireless | including unidirectional networks (e.g., broadcast wireless | |||
channels). However, the FLUTE/ALC protocol also supports point-to- | channels). However, the FLUTE/ALC protocol also supports point-to- | |||
point unicast transmissions. | point unicast transmissions. | |||
FLUTE/ALC bulk data dissemination has been designed for discrete file | FLUTE/ALC bulk data dissemination has been designed for discrete file | |||
or memory-based "objects". Although FLUTE/ALC is not well adapted to | or memory-based "objects". Although FLUTE/ALC is not well adapted to | |||
byte- and message-streaming, there is an exception: FLUTE/ALC is used | byte and message streaming, there is an exception: FLUTE/ALC is used | |||
to carry 3GPP Dynamic Adaptive Streaming over HTTP (DASH) when | to carry 3GPP Dynamic Adaptive Streaming over HTTP (DASH) when | |||
scalability is a requirement (see [MBMS], section 5.6). | scalability is a requirement (see [MBMS], Section 5.6). | |||
FLUTE/ALC's reliability, delivery mode, congestion control, and flow/ | FLUTE/ALC's reliability, delivery mode, congestion control, and flow/ | |||
rate control mechanisms can be separately controlled to meet | rate control mechanisms can be separately controlled to meet | |||
different application needs. Section 4.1 of | different application needs. Section 4.1 of [RFC8085] describes | |||
[I-D.ietf-tsvwg-rfc5405bis] describes multicast congestion control | multicast congestion control requirements for UDP. | |||
requirements for UDP. | ||||
3.10.1. Protocol Description | 3.10.1. Protocol Description | |||
The FLUTE/ALC protocol works on top of UDP (though it could work on | The FLUTE/ALC protocol works on top of UDP (though it could work on | |||
top of any datagram delivery transport protocol), without requiring | top of any datagram delivery transport protocol), without requiring | |||
any connectivity from receivers to the sender. Purely unidirectional | any connectivity from receivers to the sender. Purely unidirectional | |||
networks are therefore supported by FLUTE/ALC. This guarantees | networks are therefore supported by FLUTE/ALC. This guarantees | |||
scalability to an unlimited number of receivers in a session, since | scalability to an unlimited number of receivers in a session, since | |||
the sender behaves exactly the same regardless of the number of | the sender behaves exactly the same regardless of the number of | |||
receivers. | receivers. | |||
FLUTE/ALC supports the transfer of bulk objects such as file or in- | FLUTE/ALC supports the transfer of bulk objects such as file or | |||
memory content, using either a push or an on-demand mode. in push | in-memory content, using either a push or an on-demand mode. In push | |||
mode, content is sent once to the receivers, while in on-demand mode, | mode, content is sent once to the receivers, while in on-demand mode, | |||
content is sent continuously during periods of time that can greatly | content is sent continuously during periods of time that can greatly | |||
exceed the average time required to download the session objects (see | exceed the average time required to download the session objects (see | |||
[RFC5651], section 4.2). | [RFC5651], Section 4.2). | |||
This enables receivers to join a session asynchronously, at their own | This enables receivers to join a session asynchronously, at their own | |||
discretion, receive the content and leave the session. In this case, | discretion, receive the content, and leave the session. In this | |||
data content is typically sent continuously, in loops (also known as | case, data content is typically sent continuously, in loops (also | |||
"carousels"). FLUTE/ALC also supports the transfer of an object | known as "carousels"). FLUTE/ALC also supports the transfer of an | |||
stream, with loose real-time constraints. This is particularly | object stream, with loose real-time constraints. This is | |||
useful to carry 3GPP DASH when scalability is a requirement and | particularly useful to carry 3GPP DASH when scalability is a | |||
unicast transmissions over HTTP cannot be used ([MBMS], section 5.6). | requirement and unicast transmissions over HTTP cannot be used | |||
In this case, packets are sent in sequence using push mode. FLUTE/ | ([MBMS], Section 5.6). In this case, packets are sent in sequence | |||
ALC is not well adapted to byte- and message-streaming and other | using push mode. FLUTE/ALC is not well adapted to byte and message | |||
solutions could be preferred (e.g., FECFRAME [RFC6363] with real-time | streaming, and other solutions could be preferred (e.g., FECFRAME | |||
flows). | [RFC6363] with real-time flows). | |||
The FLUTE file delivery instantiation of ALC provides a metadata | The FLUTE file delivery instantiation of ALC provides a metadata | |||
delivery service. Each object of the FLUTE/ALC session is described | delivery service. Each object of the FLUTE/ALC session is described | |||
in a dedicated entry of a File Delivery Table (FDT), using an XML | in a dedicated entry of a File Delivery Table (FDT), using an XML | |||
format (see [RFC6726], section 3.2). This metadata can include, but | format (see [RFC6726], Section 3.2). This metadata can include, but | |||
is not restricted to, a URI attribute (to identify and locate the | is not restricted to, a URI attribute (to identify and locate the | |||
object), a media type attribute, a size attribute, an encoding | object), a media type attribute, a size attribute, an encoding | |||
attribute, or a message digest attribute. Since the set of objects | attribute, or a message digest attribute. Since the set of objects | |||
sent within a session can be dynamic, with new objects being added | sent within a session can be dynamic, with new objects being added | |||
and old ones removed, several instances of the FDT can be sent and a | and old ones removed, several instances of the FDT can be sent, and a | |||
mechanism is provided to identify a new FDT Instance. | mechanism is provided to identify a new FDT instance. | |||
Error detection and verification of the protocol control information | Error detection and verification of the protocol control information | |||
relies on the on the underlying transport (e.g., UDP checksum). | relies on the underlying transport (e.g., UDP checksum). | |||
To provide robustness against packet loss and improve the efficiency | To provide robustness against packet loss and improve the efficiency | |||
of the on-demand mode, FLUTE/ALC relies on packet erasure coding (AL- | of the on-demand mode, FLUTE/ALC relies on packet erasure coding | |||
FEC). AL-FEC encoding is proactive (since there is no feedback and | (Application-Layer Forward Error Correction (AL-FEC)). AL-FEC | |||
therefore no (N)ACK-based retransmission) and ALC packets containing | encoding is proactive (since there is no feedback and therefore no | |||
repair data are sent along with ALC packets containing source data. | (N)ACK-based retransmission), and ALC packets containing repair data | |||
are sent along with ALC packets containing source data. Several FEC | ||||
Several FEC Schemes have been standardized; FLUTE/ALC does not | Schemes have been standardized; FLUTE/ALC does not mandate the use of | |||
mandate the use of any particular one. Several strategies concerning | any particular one. Several strategies concerning the transmission | |||
the transmission order of ALC source and repair packets are possible, | order of ALC source and repair packets are possible, in particular, | |||
in particular in on-demand mode where it can deeply impact the | in on-demand mode where it can deeply impact the service provided | |||
service provided (e.g., to favor the recovery of objects in sequence, | (e.g., to favor the recovery of objects in sequence or, at the other | |||
or at the other extreme, to favor the recovery of all objects in | extreme, to favor the recovery of all objects in parallel), and | |||
parallel), and FLUTE/ALC does not mandate nor recommend the use of | FLUTE/ALC does not mandate nor recommend the use of any particular | |||
any particular one. | one. | |||
A FLUTE/ALC session is composed of one or more channels, associated | A FLUTE/ALC session is composed of one or more channels, associated | |||
to different destination unicast and/or multicast IP addresses. ALC | to different destination unicast and/or multicast IP addresses. ALC | |||
packets are sent in those channels at a certain transmission rate, | packets are sent in those channels at a certain transmission rate, | |||
with a rate that often differs depending on the channel. FLUTE/ALC | with a rate that often differs depending on the channel. FLUTE/ALC | |||
does not mandate nor recommend any strategy to select which ALC | does not mandate nor recommend any strategy to select which ALC | |||
packet to send on which channel. FLUTE/ALC can use a multiple rate | packet to send on which channel. FLUTE/ALC can use a multiple rate | |||
congestion control building block (e.g., WEBRC) to provide congestion | congestion control building block (e.g., Wave and Equation Based Rate | |||
control that is feedback free, where receivers adjust their reception | Control (WEBRC)) to provide congestion control that is feedback free, | |||
rates individually by joining and leaving channels associated with | where receivers adjust their reception rates individually by joining | |||
the session. To that purpose, the ALC header provides a specific | and leaving channels associated with the session. To that purpose, | |||
field to carry congestion control specific information. However | the ALC header provides a specific field to carry congestion-control- | |||
FLUTE/ALC does not mandate the use of a particular congestion control | specific information. However, FLUTE/ALC does not mandate the use of | |||
mechanism although WEBRC is mandatory to support for the Internet | a particular congestion control mechanism although WEBRC is mandatory | |||
([RFC6726], section 1.1.4). FLUTE/ALC is often used over a network | to support for the Internet ([RFC6726], Section 1.1.4). FLUTE/ALC is | |||
path with pre-provisioned capacity [I-D.ietf-tsvwg-rfc5405bis] where | often used over a network path with pre-provisioned capacity | |||
there are no flows competing for capacity. In this case, a sender- | [RFC8085] where there are no flows competing for capacity. In this | |||
based rate control mechanism and a single channel is sufficient. | case, a sender-based rate control mechanism and a single channel are | |||
sufficient. | ||||
[RFC6584] provides per-packet authentication, integrity, and anti- | [RFC6584] provides per-packet authentication, integrity, and anti- | |||
replay protection in the context of the ALC and NORM protocols. | replay protection in the context of the ALC and NORM protocols. | |||
Several mechanisms are proposed that seamlessly integrate into these | Several mechanisms are proposed that seamlessly integrate into these | |||
protocols using the ALC and NORM header extension mechanisms. | protocols using the ALC and NORM header extension mechanisms. | |||
3.10.2. Interface Description | 3.10.2. Interface Description | |||
The FLUTE/ALC specification does not describe a specific application | The FLUTE/ALC specification does not describe a specific API to | |||
programming interface (API) to control protocol operation. Although | control protocol operation. Although open source and commercial | |||
open source and commercial implementations have specified APIs, there | implementations have specified APIs, there is no IETF-specified API | |||
is no IETF- specified API for FLUTE/ALC. | for FLUTE/ALC. | |||
3.10.3. Transport Features | 3.10.3. Transport Features | |||
The transport features provided by FLUTE/ALC are: | The transport features provided by FLUTE/ALC are: | |||
o unicast, multicast, anycast or IPv4 broadcast transmission, | o unicast, multicast, anycast, or IPv4 broadcast transmission, | |||
o object-oriented delivery of discrete data or files and associated | o object-oriented delivery of discrete data or files and associated | |||
metadata, | metadata, | |||
o fully reliable or partially reliable delivery (of file or in- | o fully reliable or partially reliable delivery (of file or in- | |||
memory objects), using proactive packet erasure coding (AL-FEC) to | memory objects), using proactive packet erasure coding (AL-FEC) to | |||
recover from packet erasures, | recover from packet erasures, | |||
o ordered or unordered delivery (of file or in-memory objects), | o ordered or unordered delivery (of file or in-memory objects), | |||
o error detection (based on the UDP checksum), | o error detection (based on the UDP checksum), | |||
o per-packet authentication, | o per-packet authentication, | |||
o per-packet integrity, | o per-packet integrity, | |||
o per-packet replay protection, | o per-packet replay protection, and | |||
o congestion control for layered flows (e.g., with WEBRC). | o congestion control for layered flows (e.g., with WEBRC). | |||
3.11. NACK-Oriented Reliable Multicast (NORM) | 3.11. NACK-Oriented Reliable Multicast (NORM) | |||
NORM is an IETF standards track protocol specified in [RFC5740]. It | NORM is an IETF Standards Track protocol specified in [RFC5740]. It | |||
provides object-oriented delivery of discrete data or files. | provides object-oriented delivery of discrete data or files. | |||
The protocol was designed to support reliable bulk data dissemination | The protocol was designed to support reliable bulk data dissemination | |||
to receiver groups using IP Multicast but also provides for point-to- | to receiver groups using IP Multicast but also provides for point-to- | |||
point unicast operation. Support for bulk data dissemination | point unicast operation. Support for bulk data dissemination | |||
includes discrete file or computer memory-based "objects" as well as | includes discrete file or computer memory-based "objects" as well as | |||
byte- and message-streaming. | byte and message streaming. | |||
NORM can incorporate packet erasure coding as a part of its selective | NORM can incorporate packet erasure coding as a part of its selective | |||
ARQ in response to negative acknowledgments from the receiver. The | Automatic Repeat reQuest (ARQ) in response to negative | |||
packet erasure coding can also be proactively applied for forward | acknowledgments from the receiver. The packet erasure coding can | |||
protection from packet loss. NORM transmissions are governed by TCP- | also be proactively applied for forward protection from packet loss. | |||
friendly multicast congestion control (TFMCC, [RFC4654]). The | NORM transmissions are governed by TCP-Friendly Multicast Congestion | |||
reliability, congestion control and flow control mechanisms can be | Control (TFMCC) [RFC4654]. The reliability, congestion control, and | |||
separately controlled to meet different application needs. | flow control mechanisms can be separately controlled to meet | |||
different application needs. | ||||
3.11.1. Protocol Description | 3.11.1. Protocol Description | |||
The NORM protocol is encapsulated in UDP datagrams and thus provides | The NORM protocol is encapsulated in UDP datagrams and thus provides | |||
multiplexing for multiple sockets on hosts using port numbers. For | multiplexing for multiple sockets on hosts using port numbers. For | |||
loosely coordinated IP Multicast, NORM is not strictly connection- | loosely coordinated IP Multicast, NORM is not strictly connection- | |||
oriented although per-sender state is maintained by receivers for | oriented although per-sender state is maintained by receivers for | |||
protocol operation. [RFC5740] does not specify a handshake protocol | protocol operation. [RFC5740] does not specify a handshake protocol | |||
for connection establishment. Separate session initiation can be | for connection establishment. Separate session initiation can be | |||
used to coordinate port numbers. However, in-band "client-server" | used to coordinate port numbers. However, in-band "client-server" | |||
style connection establishment can be accomplished with the NORM | style connection establishment can be accomplished with the NORM | |||
congestion control signaling messages using port binding techniques | congestion control signaling messages using port binding techniques | |||
like those for TCP client-server connections. | like those for TCP client-server connections. | |||
NORM supports bulk "objects" such as file or in-memory content but | NORM supports bulk "objects" such as file or in-memory content but | |||
also can treat a stream of data as a logical bulk object for purposes | also can treat a stream of data as a logical bulk object for purposes | |||
of packet erasure coding. In the case of stream transport, NORM can | of packet erasure coding. In the case of stream transport, NORM can | |||
support either byte streams or message streams where application- | support either byte streams or message streams where application- | |||
defined message boundary information is carried in the NORM protocol | defined message boundary information is carried in the NORM protocol | |||
messages. This allows the receiver(s) to join/re-join and recover | messages. This allows the receiver(s) to join/rejoin and recover | |||
message boundaries mid-stream as needed. Application content is | message boundaries mid-stream as needed. Application content is | |||
carried and identified by the NORM protocol with encoding symbol | carried and identified by the NORM protocol with encoding symbol | |||
identifiers depending upon the Forward Error Correction (FEC) Scheme | identifiers depending upon the Forward Error Correction (FEC) Scheme | |||
[RFC3452] configured. NORM uses NACK-based selective ARQ to reliably | [RFC5052] configured. NORM uses NACK-based selective ARQ to reliably | |||
deliver the application content to the receiver(s). NORM proactively | deliver the application content to the receiver(s). NORM proactively | |||
measures round-trip timing information to scale ARQ timers | measures round-trip timing information to scale ARQ timers | |||
appropriately and to support congestion control. For multicast | appropriately and to support congestion control. For multicast | |||
operation, timer-based feedback suppression is uses to achieve group | operation, timer-based feedback suppression is used to achieve group | |||
size scaling with low feedback traffic levels. The feedback | size scaling with low feedback traffic levels. The feedback | |||
suppression is not applied for unicast operation. | suppression is not applied for unicast operation. | |||
NORM uses rate-based congestion control based upon the TCP-Friendly | NORM uses rate-based congestion control based upon the TCP-Friendly | |||
Rate Control (TFRC) [RFC4324] principles that are also used in DCCP | Rate Control (TFRC) [RFC5348] principles that are also used in DCCP | |||
[RFC4340]. NORM uses control messages to measure RTT and collect | [RFC4340]. NORM uses control messages to measure RTT and collect | |||
congestion event information (e.g., reflecting a loss event or ECN | congestion event information (e.g., reflecting a loss event or ECN | |||
event) from the receiver(s) to support dynamic adjustment or the | event) from the receiver(s) to support dynamic adjustment or the | |||
rate. The TCP-Friendly Multicast Congestion Control (TFMCC) | rate. TCP-Friendly Multicast Congestion Control (TFMCC) [RFC4654] | |||
[RFC4654] provides extra features to support multicast, but is | provides extra features to support multicast but is functionally | |||
functionally equivalent to TFRC for unicast. | equivalent to TFRC for unicast. | |||
Error detection and verification of the protocol control information | Error detection and verification of the protocol control information | |||
relies on the on the underlying transport(e.g., UDP checksum). | relies on the on the underlying transport (e.g., UDP checksum). | |||
The reliability mechanism is decoupled from congestion control. This | The reliability mechanism is decoupled from congestion control. This | |||
allows invocation of alternative arrangements of transport services. | allows invocation of alternative arrangements of transport services, | |||
For example, to support, fixed-rate reliable delivery or unreliable | for example, to support, fixed-rate reliable delivery or unreliable | |||
delivery (that may optionally be "better than best effort" via packet | delivery (that may optionally be "better than best effort" via packet | |||
erasure coding) using TFRC. Alternative congestion control | erasure coding) using TFRC. Alternative congestion control | |||
techniques may be applied. For example, TFRC rate control with | techniques may be applied, for example, TFRC with congestion event | |||
congestion event detection based on ECN. | detection based on ECN. | |||
While NORM provides NACK-based reliability, it also supports a | While NORM provides NACK-based reliability, it also supports a | |||
positive acknowledgment (ACK) mechanism that can be used for receiver | positive acknowledgment (ACK) mechanism that can be used for receiver | |||
flow control. This mechanism is decoupled from the reliability and | flow control. This mechanism is decoupled from the reliability and | |||
congestion control, supporting applications with different needs. | congestion control, supporting applications with different needs. | |||
One example is use of NORM for quasi-reliable delivery, where timely | One example is use of NORM for quasi-reliable delivery, where timely | |||
delivery of newer content may be favored over completely reliable | delivery of newer content may be favored over completely reliable | |||
delivery of older content within buffering and RTT constraints. | delivery of older content within buffering and RTT constraints. | |||
3.11.2. Interface Description | 3.11.2. Interface Description | |||
The NORM specification does not describe a specific application | The NORM specification does not describe a specific API to control | |||
programming interface (API) to control protocol operation. A freely- | protocol operation. A freely available, open-source reference | |||
available, open source reference implementation of NORM is available | implementation of NORM is available at | |||
at https://www.nrl.navy.mil/itd/ncs/products/norm, and a documented | <https://www.nrl.navy.mil/itd/ncs/products/norm>, and a documented | |||
API is provided for this implementation. While a sockets-like API is | API is provided for this implementation. While a sockets-like API is | |||
not currently documented, the existing API supports the necessary | not currently documented, the existing API supports the necessary | |||
functions for that to be implemented. | functions for that to be implemented. | |||
3.11.3. Transport Features | 3.11.3. Transport Features | |||
The transport features provided by NORM are: | The transport features provided by NORM are: | |||
o unicast or multicast transport, | o unicast or multicast transport, | |||
skipping to change at page 35, line 37 ¶ | skipping to change at page 36, line 27 ¶ | |||
coding both proactively and as part of ARQ) delivery, | coding both proactively and as part of ARQ) delivery, | |||
o unordered delivery, | o unordered delivery, | |||
o error detection (relies on UDP checksum), | o error detection (relies on UDP checksum), | |||
o segmentation, | o segmentation, | |||
o data bundling (using Nagle's algorithm), | o data bundling (using Nagle's algorithm), | |||
o flow control (timer-based and/or ack-based), | o flow control (timer-based and/or ACK-based), and | |||
o congestion control (also supporting fixed rate reliable or | o congestion control (also supporting fixed-rate reliable or | |||
unreliable delivery). | unreliable delivery). | |||
3.12. Internet Control Message Protocol (ICMP) | 3.12. Internet Control Message Protocol (ICMP) | |||
The Internet Control Message Protocol (ICMP) [RFC0792] for IPv4 and | The Internet Control Message Protocol (ICMP) [RFC792] for IPv4 and | |||
ICMP for IPv6 [RFC4443] are IETF standards track protocols. It is a | ICMP for IPv6 [RFC4443] are IETF Standards Track protocols. It is a | |||
connection-less unidirectional protocol that delivers individual | connectionless unidirectional protocol that delivers individual | |||
messages, without error correction, congestion control, or flow | messages, without error correction, congestion control, or flow | |||
control. Messages may be sent as unicast, IPv4 broadcast or | control. Messages may be sent as unicast, IPv4 broadcast, or | |||
multicast datagrams (IPv4 and IPv6), in addition to anycast | multicast datagrams (IPv4 and IPv6), in addition to anycast | |||
datagrams. | datagrams. | |||
While ICMP is not typically described as a transport protocol, it | While ICMP is not typically described as a transport protocol, it | |||
does position itself over the network layer, and the operation of | does position itself over the network layer, and the operation of | |||
other transport protocols can be closely linked to the functions | other transport protocols can be closely linked to the functions | |||
provided by ICMP. | provided by ICMP. | |||
Transport Protocols and upper layer protocols can use received ICMP | Transport protocols and upper-layer protocols can use received ICMP | |||
messages to help them take appropriate decisions when network or | messages to help them make appropriate decisions when network or | |||
endpoint errors are reported. For example, to implement, ICMP-based | endpoint errors are reported, for example, to implement ICMP-based | |||
Path MTU discovery [RFC1191][RFC1981] or assist in Packetization | Path MTU Discovery (PMTUD) [RFC1191] [RFC1981] or assist in | |||
Layer Path MTU Discovery (PMTUD) [RFC4821]. Such reactions to | Packetization Layer PMTUD (PLPMTUD) [RFC4821]. Such reactions to | |||
received messages need to protect from off-path data injection | received messages need to protect from off-path data injection | |||
[I-D.ietf-tsvwg-rfc5405bis], to avoid an application receiving | ||||
packets created by an unauthorized third party. An application | [RFC8085] to avoid an application receiving packets created by an | |||
therefore needs to ensure that all messages are appropriately | unauthorized third party. An application therefore needs to ensure | |||
validated, by checking the payload of the messages to ensure these | that all messages are appropriately validated by checking the payload | |||
are received in response to actually transmitted traffic (e.g., a | of the messages to ensure they are received in response to actually | |||
reported error condition that corresponds to a UDP datagram or TCP | transmitted traffic (e.g., a reported error condition that | |||
segment was actually sent by the application). This requires context | corresponds to a UDP datagram or TCP segment was actually sent by the | |||
[RFC6056], such as local state about communication instances to each | application). This requires context [RFC6056], such as local state | |||
destination (e.g., in the TCP, DCCP, or SCTP protocols). This state | about communication instances to each destination (e.g., in TCP, | |||
is not always maintained by UDP-based applications | DCCP, or SCTP). This state is not always maintained by UDP-based | |||
[I-D.ietf-tsvwg-rfc5405bis]. | applications [RFC8085]. | |||
3.12.1. Protocol Description | 3.12.1. Protocol Description | |||
ICMP is a connection-less unidirectional protocol, It delivers | ICMP is a connectionless unidirectional protocol. It delivers | |||
independent messages, called datagrams. Each message is required to | independent messages, called "datagrams". Each message is required | |||
carry a checksum as an integrity check and to protect from mis- | to carry a checksum as an integrity check and to protect from | |||
delivery to an unintended endpoint. | misdelivery to an unintended endpoint. | |||
ICMP messages typically relay diagnostic information from an endpoint | ICMP messages typically relay diagnostic information from an endpoint | |||
[RFC1122] or network device [RFC1812] addressed to the sender of a | [RFC1122] or network device [RFC1812] addressed to the sender of a | |||
flow. This usually contains the network protocol header of a packet | flow. This usually contains the network protocol header of a packet | |||
that encountered a reported issue. Some formats of messages can also | that encountered a reported issue. Some formats of messages can also | |||
carry other payload data. Each message carries an integrity check | carry other payload data. Each message carries an integrity check | |||
calculated in the same way as for UDP, this checksum is not optional. | calculated in the same way as for UDP; this checksum is not optional. | |||
The RFC series defines additional IPv6 message formats to support a | The RFC Series defines additional IPv6 message formats to support a | |||
range of uses. In the case of IPv6 the protocol incorporates | range of uses. In the case of IPv6, the protocol incorporates | |||
neighbor discovery [RFC2461] [RFC3971] (provided by ARP for IPv4) and | neighbor discovery [RFC4861] [RFC3971] (provided by ARP for IPv4) and | |||
the Multicast Listener Discovery (MLD) [RFC2710] group management | Multicast Listener Discovery (MLD) [RFC2710] group management | |||
functions (provided by IGMP for IPv4). | functions (provided by IGMP for IPv4). | |||
Reliable transmission can not be assumed. A receiving application | Reliable transmission cannot be assumed. A receiving application | |||
that is unable to run sufficiently fast, or frequently, may miss | that is unable to run sufficiently fast, or frequently, may miss | |||
messages since there is no flow or congestion control. In addition | messages since there is no flow or congestion control. In addition, | |||
some network devices rate-limit ICMP messages. | some network devices rate-limit ICMP messages. | |||
3.12.2. Interface Description | 3.12.2. Interface Description | |||
ICMP processing is integrated in many connection-oriented transports, | ICMP processing is integrated in many connection-oriented transports | |||
but like other functions needs to be provided by an upper-layer | but, like other functions, needs to be provided by an upper-layer | |||
protocol when using UDP and UDP-Lite. | protocol when using UDP and UDP-Lite. | |||
On some stacks, a bound socket also allows a UDP application to be | On some stacks, a bound socket also allows a UDP application to be | |||
notified when ICMP error messages are received for its transmissions | notified when ICMP error messages are received for its transmissions | |||
[I-D.ietf-tsvwg-rfc5405bis]. | [RFC8085]. | |||
Any response to ICMP error messages ought to be robust to temporary | Any response to ICMP error messages ought to be robust to temporary | |||
routing failures (sometimes called "soft errors"), e.g., transient | routing failures (sometimes called "soft errors"), e.g., transient | |||
ICMP "unreachable" messages ought to not normally cause a | ICMP "unreachable" messages ought to not normally cause a | |||
communication abort [RFC5461] [I-D.ietf-tsvwg-rfc5405bis]. | communication abort [RFC5461] [RFC8085]. | |||
3.12.3. Transport Features | 3.12.3. Transport Features | |||
ICMP does not provide any transport service directly to applications. | ICMP does not provide any transport service directly to applications. | |||
Used together with other transport protocols, it provides | Used together with other transport protocols, it provides | |||
transmission of control, error, and measurement data between | transmission of control, error, and measurement data between | |||
endpoints, or from devices along the path to one endpoint. | endpoints or from devices along the path to one endpoint. | |||
4. Congestion Control | 4. Congestion Control | |||
Congestion control is critical to the stable operation of the | Congestion control is critical to the stable operation of the | |||
Internet. A variety of mechanisms are used to provide the congestion | Internet. A variety of mechanisms are used to provide the congestion | |||
control needed by many Internet transport protocols. Congestion is | control needed by many Internet transport protocols. Congestion is | |||
detected based on sensing of network conditions, whether through | detected based on sensing of network conditions, whether through | |||
explicit or implicit feedback. The congestion control mechanisms | explicit or implicit feedback. The congestion control mechanisms | |||
that can be applied by different transport protocols are largely | that can be applied by different transport protocols are largely | |||
orthogonal to the choice of transport protocol. This section | orthogonal to the choice of transport protocol. This section | |||
provides an overview of the congestion control mechanisms available | provides an overview of the congestion control mechanisms available | |||
to the protocols described in Section 3. | to the protocols described in Section 3. | |||
Many protocols use a separate window to determine the maximum sending | Many protocols use a separate window to determine the maximum sending | |||
rate that is allowed by the congestion control. The used congestion | rate that is allowed by the congestion control. The used congestion | |||
control mechanism will increase the congestion window if feedback is | control mechanism will increase the congestion window if feedback is | |||
received that indicates that the currently used network path is not | received that indicates that the currently used network path is not | |||
congested, and will reduce the window otherwise. Window-based | congested and will reduce the window otherwise. Window-based | |||
mechanisms often increase their window slowing over multiple RTTs, | mechanisms often increase their window slowing over multiple RTTs, | |||
while decreasing strongly when the first indication of congestion is | while decreasing strongly when the first indication of congestion is | |||
received. One example is an Additive Increase Multiplicative | received. One example is an Additive Increase Multiplicative | |||
Decrease (AIMD) scheme, where the window is increased by a certain | Decrease (AIMD) scheme, where the window is increased by a certain | |||
number of packets/bytes for each data segment that has been | number of packets/bytes for each data segment that has been | |||
successfully transmitted, while the window decreases multiplicatively | successfully transmitted, while the window decreases multiplicatively | |||
on the occurrence of a congestion event. This can lead to a rather | on the occurrence of a congestion event. This can lead to a rather | |||
unstable, oscillating sending rate, but will resolve a congestion | unstable, oscillating sending rate but will resolve a congestion | |||
situation quickly. TCP New Reno [RFC5681] which is one of the | situation quickly. Examples of window-based AIMD schemes include TCP | |||
initial proposed schemes for TCP as well as TCP Cubic | NewReno [RFC5681], TCP Cubic [CUBIC] (the default mechanism for TCP | |||
[I-D.ietf-tcpm-cubic] which is the default mechanism for TCP in Linux | in Linux), and CCID 2 specified for DCCP [RFC4341]. | |||
are two examples for window-based AIMD schemes. This approach is | ||||
also used by DCCP CCID-2 for datagram congestion control. | ||||
Some classes of applications prefer to use a transport service that | Some classes of applications prefer to use a transport service that | |||
allows sending at a more stable rate, that is slowly varied in | allows sending at a more stable rate that is slowly varied in | |||
response to congestion. Rate-based methods offer this type of | response to congestion. Rate-based methods offer this type of | |||
congestion control and have been defined based on the loss ratio and | congestion control and have been defined based on the loss ratio and | |||
observed round trip time, such as TFRC [RFC5348] and TFRC-SP | observed round-trip time, such as TFRC [RFC5348] and TFRC-SP | |||
[RFC4828]. These methods utilize a throughput equation to determine | [RFC4828]. These methods utilize a throughput equation to determine | |||
the maximum acceptable rate. Such methods are used with DCCP CCID-3 | the maximum acceptable rate. Such methods are used with DCCP CCID 3 | |||
[RFC4342] and CCID-4 [RFC5622], WEBRC [RFC3738], and other | [RFC4342], CCID 4 [RFC5622], WEBRC [RFC3738], and other applications. | |||
applications. | ||||
Another class of applications prefer a transport service that yields | Another class of applications prefers a transport service that yields | |||
to other (higher-priority) traffic, such as interactive | to other (higher-priority) traffic, such as interactive | |||
transmissions. While most traffic in the Internet uses loss-based | transmissions. While most traffic in the Internet uses loss-based | |||
congestion control and therefore tends to fill the network buffers | congestion control and therefore tends to fill the network buffers | |||
(to a certain level if Active Queue Management (AQM) is used), low- | (to a certain level if Active Queue Management (AQM) is used), low- | |||
priority congestion control methods often react to changes in delay | priority congestion control methods often react to changes in delay | |||
as an earlier indication of congestion. This approach tends to | as an earlier indication of congestion. This approach tends to | |||
induce less loss than a loss-based method but does generally not | induce less loss than a loss-based method but does generally not | |||
compete well with loss-based traffic across shared bottleneck links. | compete well with loss-based traffic across shared bottleneck links. | |||
Therefore, methods such as LEDBAT [RFC6824], are deployed in the | Therefore, methods such as LEDBAT [RFC6817] are deployed in the | |||
Internet for scavenger traffic that aim to only utilize otherwise | Internet for scavenger traffic that aims to only utilize otherwise | |||
unused capacity. | unused capacity. | |||
5. Transport Features | 5. Transport Features | |||
The transport protocol features described in this document can be | The transport protocol features described in this document can be | |||
used as a basis for defining common transport features, listed below | used as a basis for defining common transport features. These are | |||
with the protocols supporting them: | listed below with the protocols supporting them: | |||
o Control Functions | o Control Functions | |||
* Addressing | * Addressing | |||
+ unicast (TCP, MPTCP, UDP, UDP-Lite, SCTP, DCCP, TLS, RTP, | + unicast (TCP, MPTCP, UDP, UDP-Lite, SCTP, DCCP, TLS, RTP, | |||
HTTP, ICMP) | HTTP, ICMP) | |||
+ multicast (UDP, UDP-Lite, RTP, ICMP, FLUTE/ALC, NORM). Note | + multicast (UDP, UDP-Lite, RTP, ICMP, FLUTE/ALC, NORM). Note | |||
that, as TLS and DTLS are unicast-only, there is no widely | that, as TLS and DTLS are unicast-only, there is no widely | |||
deployed mechanism for supporting the features in the | deployed mechanism for supporting the features listed under | |||
Security section below when using multicast addressing. | the Security bullet (below) when using multicast addressing. | |||
+ IPv4 broadcast (UDP, UDP-Lite, ICMP) | + IPv4 broadcast (UDP, UDP-Lite, ICMP) | |||
+ anycast (UDP, UDP-Lite). Connection-oriented protocols such | + anycast (UDP, UDP-Lite). Connection-oriented protocols such | |||
as TCP and DCCP have also been deployed using anycast | as TCP and DCCP have also been deployed using anycast | |||
addressing, with the risk that routing changes may cause | addressing, with the risk that routing changes may cause | |||
connection failure. | connection failure. | |||
* Association type | * Association type | |||
+ connection-oriented (TCP, MPTCP, DCCP, SCTP, TLS, RTP, HTTP, | + connection-oriented (TCP, MPTCP, DCCP, SCTP, TLS, RTP, HTTP, | |||
NORM) | NORM) | |||
skipping to change at page 39, line 20 ¶ | skipping to change at page 40, line 9 ¶ | |||
+ connection-oriented (TCP, MPTCP, DCCP, SCTP, TLS, RTP, HTTP, | + connection-oriented (TCP, MPTCP, DCCP, SCTP, TLS, RTP, HTTP, | |||
NORM) | NORM) | |||
+ connectionless (UDP, UDP-Lite, FLUTE/ALC) | + connectionless (UDP, UDP-Lite, FLUTE/ALC) | |||
* Multihoming support | * Multihoming support | |||
+ resilience and mobility (MPTCP, SCTP) | + resilience and mobility (MPTCP, SCTP) | |||
+ load-balancing (MPTCP) | + load balancing (MPTCP) | |||
+ address family multiplexing (MPTCP, SCTP) | + address family multiplexing (MPTCP, SCTP) | |||
* Middlebox cooperation | * Middlebox cooperation | |||
+ application-class signaling to middleboxes (DCCP) | + application-class signaling to middleboxes (DCCP) | |||
+ error condition signaling from middleboxes and routers to | + error condition signaling from middleboxes and routers to | |||
endpoints (ICMP) | endpoints (ICMP) | |||
skipping to change at page 40, line 4 ¶ | skipping to change at page 40, line 40 ¶ | |||
+ fully reliable delivery (TCP, MPTCP, SCTP, TLS, HTTP, FLUTE/ | + fully reliable delivery (TCP, MPTCP, SCTP, TLS, HTTP, FLUTE/ | |||
ALC, NORM) | ALC, NORM) | |||
+ partially reliable delivery (SCTP, NORM) | + partially reliable delivery (SCTP, NORM) | |||
- using packet erasure coding (RTP, FLUTE/ALC, NORM) | - using packet erasure coding (RTP, FLUTE/ALC, NORM) | |||
- with specified policy for dropped messages (SCTP) | - with specified policy for dropped messages (SCTP) | |||
+ unreliable delivery (SCTP, UDP, UDP-Lite, DCCP, RTP) | + unreliable delivery (SCTP, UDP, UDP-Lite, DCCP, RTP) | |||
- with drop notification to sender (SCTP, DCCP, RTP) | - with drop notification to sender (SCTP, DCCP, RTP) | |||
+ error detection | + error detection | |||
- checksum for error detection (TCP, MPTCP, UDP, UDP-Lite, | - checksum for error detection (TCP, MPTCP, UDP, UDP-Lite, | |||
SCTP, DCCP, TLS, DTLS, FLUTE/ALC, NORM, ICMP) | SCTP, DCCP, TLS, DTLS, FLUTE/ALC, NORM, ICMP) | |||
- partial payload checksum protection (UDP-Lite, DCCP). | - partial payload checksum protection (UDP-Lite, DCCP). | |||
Some uses of RTP can exploit partial payload checksum | Some uses of RTP can exploit partial payload checksum | |||
protection feature to provide a corruption tolerant | protection feature to provide a corruption-tolerant | |||
transport service. | transport service. | |||
- checksum optional (UDP). Possible with IPv4 and in | - checksum optional (UDP). Possible with IPv4 and, in | |||
certain cases with IPv6. | certain cases, with IPv6. | |||
* Ordering | * Ordering | |||
+ ordered delivery (TCP, MPTCP, SCTP, TLS, RTP, HTTP, FLUTE) | + ordered delivery (TCP, MPTCP, SCTP, TLS, RTP, HTTP, FLUTE) | |||
+ unordered delivery permitted (UDP, UDP-Lite, SCTP, DCCP, | + unordered delivery permitted (UDP, UDP-Lite, SCTP, DCCP, | |||
RTP, NORM) | RTP, NORM) | |||
* Type/framing | * Type/framing | |||
skipping to change at page 41, line 4 ¶ | skipping to change at page 41, line 38 ¶ | |||
* Directionality | * Directionality | |||
+ unidirectional (UDP, UDP-Lite, DCCP, RTP, FLUTE/ALC, NORM) | + unidirectional (UDP, UDP-Lite, DCCP, RTP, FLUTE/ALC, NORM) | |||
+ bidirectional (TCP, MPTCP, SCTP, TLS, HTTP) | + bidirectional (TCP, MPTCP, SCTP, TLS, HTTP) | |||
o Transmission control | o Transmission control | |||
* flow control (TCP, MPTCP, SCTP, DCCP, TLS, RTP, HTTP) | * flow control (TCP, MPTCP, SCTP, DCCP, TLS, RTP, HTTP) | |||
* congestion control (TCP, MPTCP, SCTP, DCCP, RTP, FLUTE/ALC, | * congestion control (TCP, MPTCP, SCTP, DCCP, RTP, FLUTE/ALC, | |||
NORM). Congestion control can also provided by the transport | NORM). Congestion control can also provided by the transport | |||
supporting an upper later transport (e.g., TLS, RTP, HTTP). | supporting an upper-layer transport (e.g., TLS, RTP, HTTP). | |||
* segmentation (TCP, MPTCP, SCTP, TLS, RTP, HTTP, FLUTE/ALC, | * segmentation (TCP, MPTCP, SCTP, TLS, RTP, HTTP, FLUTE/ALC, | |||
NORM) | NORM) | |||
* data/message bundling (TCP, MPTCP, SCTP, TLS, HTTP) | * data/message bundling (TCP, MPTCP, SCTP, TLS, HTTP) | |||
* stream scheduling prioritization (SCTP, HTTP2) | * stream scheduling prioritization (SCTP, HTTP2) | |||
* endpoint multiplexing (MPTCP) | * endpoint multiplexing (MPTCP) | |||
skipping to change at page 41, line 32 ¶ | skipping to change at page 42, line 20 ¶ | |||
* authentication of both ends of a connection (TLS, DTLS) | * authentication of both ends of a connection (TLS, DTLS) | |||
* confidentiality (TLS, DTLS) | * confidentiality (TLS, DTLS) | |||
* cryptographic integrity protection (TLS, DTLS) | * cryptographic integrity protection (TLS, DTLS) | |||
* replay protection (TLS, DTLS, FLUTE/ALC) | * replay protection (TLS, DTLS, FLUTE/ALC) | |||
6. IANA Considerations | 6. IANA Considerations | |||
This document has no considerations for IANA. | This document does not require any IANA actions. | |||
7. Security Considerations | 7. Security Considerations | |||
This document surveys existing transport protocols and protocols | This document surveys existing transport protocols and protocols | |||
providing transport-like services. Confidentiality, integrity, and | providing transport-like services. Confidentiality, integrity, and | |||
authenticity are among the features provided by those services. This | authenticity are among the features provided by those services. This | |||
document does not specify any new features or mechanisms for | document does not specify any new features or mechanisms for | |||
providing these features. Each RFC referenced by this document | providing these features. Each RFC referenced by this document | |||
discusses the security considerations of the specification it | discusses the security considerations of the specification it | |||
contains. | contains. | |||
8. Contributors | 8. Informative References | |||
In addition to the editors, this document is the work of Brian | ||||
Adamson, Dragana Damjanovic, Kevin Fall, Simone Ferlin-Oliviera, | ||||
Ralph Holz, Olivier Mehani, Karen Nielsen, Colin Perkins, Vincent | ||||
Roca, and Michael Tuexen. | ||||
o Section 3.2 on MPTCP was contributed by Simone Ferlin-Oliviera | ||||
(ferlin@simula.no) and Olivier Mehani | ||||
(olivier.mehani@nicta.com.au) | ||||
o Section 3.3 on UDP was contributed by Kevin Fall (kfall@kfall.com) | ||||
o Section 3.5 on SCTP was contributed by Michael Tuexen (tuexen@fh- | ||||
muenster.de) and Karen Nielsen (karen.nielsen@tieto.com) | ||||
o Section 3.7 on TLS and DTLS was contributed by Ralph Holz | ||||
(ralph.holz@nicta.com.au) and Olivier Mehani | ||||
(olivier.mehani@nicta.com.au) | ||||
o Section 3.8 on RTP contains contributions from Colin Perkins | ||||
(csp@csperkins.org) | ||||
o Section 3.9 on HTTP was contributed by Dragana Damjanovic | [ClarkArch] | |||
(ddamjanovic@mozilla.com) | Clark, D. and D. Tennenhouse, "Architectural | |||
Considerations for a New Generation of Protocols", | ||||
Proceedings of ACM SIGCOMM, DOI 10.1145/99517.99553, 1990. | ||||
o Section 3.10 on FLUTE/ALC was contributed by Vincent Roca | [CUBIC] Rhee, I., Xu, L., Ha, S., Zimmermann, A., Eggert, L., and | |||
(vincent.roca@inria.fr) | R. Scheffenegger, "CUBIC for Fast Long-Distance Networks", | |||
Work in Progress, draft-ietf-tcpm-cubic-04, February 2017. | ||||
o Section 3.11 on NORM was contributed by Brian Adamson | [MBMS] 3GPP, "Multimedia Broadcast/Multicast Service (MBMS); | |||
(brian.adamson@nrl.navy.mil) | Protocols and codecs", 3GPP TS 26.346, 2015, | |||
<http://www.3gpp.org/DynaReport/26346.htm>. | ||||
9. Acknowledgments | [NAT-SUPP] Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control | |||
Transmission Protocol (SCTP) Network Address Translation | ||||
Support", Work in Progress, draft-ietf-tsvwg-natsupp-09, | ||||
May 2016. | ||||
Thanks to Joe Touch, Michael Welzl, Spencer Dawkins, and the TAPS | [POSIX] IEEE, "Standard for Information Technology -- Portable | |||
Working Group for the comments, feedback, and discussion. This work | Operating System Interface (POSIX(R)) Base Specifications, | |||
is supported by the European Commission under grant agreement No. | Issue 7", IEEE 1003.1, DOI 10.1109/ieeestd.2016.7582338, | |||
318627 mPlane and from the Horizon 2020 research and innovation | <http://ieeexplore.ieee.org/document/7582338/>. | |||
program under grant agreements No. 644334 (NEAT) and No. 688421 | ||||
(MAMI). This support does not imply endorsement. | ||||
10. Informative References | [REST] Fielding, R., "Architectural Styles and the Design of | |||
Network-based Software Architectures, Chapter 5: | ||||
Representational State Transfer", Ph.D. | ||||
Dissertation, University of California, Irvine, 2000. | ||||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
DOI 10.17487/RFC0768, August 1980, | DOI 10.17487/RFC0768, August 1980, | |||
<http://www.rfc-editor.org/info/rfc768>. | <http://www.rfc-editor.org/info/rfc768>. | |||
[RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, | [RFC792] Postel, J., "Internet Control Message Protocol", STD 5, | |||
RFC 792, DOI 10.17487/RFC0792, September 1981, | RFC 792, DOI 10.17487/RFC0792, September 1981, | |||
<http://www.rfc-editor.org/info/rfc792>. | <http://www.rfc-editor.org/info/rfc792>. | |||
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC793] 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>. | |||
[RFC0896] Nagle, J., "Congestion Control in IP/TCP Internetworks", | ||||
RFC 896, DOI 10.17487/RFC0896, January 1984, | ||||
<http://www.rfc-editor.org/info/rfc896>. | ||||
[RFC1071] Braden, R., Borman, D., and C. Partridge, "Computing the | [RFC1071] Braden, R., Borman, D., and C. Partridge, "Computing the | |||
Internet checksum", RFC 1071, DOI 10.17487/RFC1071, | Internet checksum", RFC 1071, DOI 10.17487/RFC1071, | |||
September 1988, <http://www.rfc-editor.org/info/rfc1071>. | September 1988, <http://www.rfc-editor.org/info/rfc1071>. | |||
[RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | |||
Communication Layers", STD 3, RFC 1122, | Communication Layers", STD 3, RFC 1122, | |||
DOI 10.17487/RFC1122, October 1989, | DOI 10.17487/RFC1122, October 1989, | |||
<http://www.rfc-editor.org/info/rfc1122>. | <http://www.rfc-editor.org/info/rfc1122>. | |||
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | |||
skipping to change at page 43, line 44 ¶ | skipping to change at page 44, line 14 ¶ | |||
[RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
Extensions (MIME) Part One: Format of Internet Message | Extensions (MIME) Part One: Format of Internet Message | |||
Bodies", RFC 2045, DOI 10.17487/RFC2045, November 1996, | Bodies", RFC 2045, DOI 10.17487/RFC2045, November 1996, | |||
<http://www.rfc-editor.org/info/rfc2045>. | <http://www.rfc-editor.org/info/rfc2045>. | |||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
(IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
December 1998, <http://www.rfc-editor.org/info/rfc2460>. | December 1998, <http://www.rfc-editor.org/info/rfc2460>. | |||
[RFC2461] Narten, T., Nordmark, E., and W. Simpson, "Neighbor | ||||
Discovery for IP Version 6 (IPv6)", RFC 2461, | ||||
DOI 10.17487/RFC2461, December 1998, | ||||
<http://www.rfc-editor.org/info/rfc2461>. | ||||
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | ||||
Leach, P., Luotonen, A., and L. Stewart, "HTTP | ||||
Authentication: Basic and Digest Access Authentication", | ||||
RFC 2617, DOI 10.17487/RFC2617, June 1999, | ||||
<http://www.rfc-editor.org/info/rfc2617>. | ||||
[RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast | [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast | |||
Listener Discovery (MLD) for IPv6", RFC 2710, | Listener Discovery (MLD) for IPv6", RFC 2710, | |||
DOI 10.17487/RFC2710, October 1999, | DOI 10.17487/RFC2710, October 1999, | |||
<http://www.rfc-editor.org/info/rfc2710>. | <http://www.rfc-editor.org/info/rfc2710>. | |||
[RFC2736] Handley, M. and C. Perkins, "Guidelines for Writers of RTP | [RFC2736] Handley, M. and C. Perkins, "Guidelines for Writers of RTP | |||
Payload Format Specifications", BCP 36, RFC 2736, | Payload Format Specifications", BCP 36, RFC 2736, | |||
DOI 10.17487/RFC2736, December 1999, | DOI 10.17487/RFC2736, December 1999, | |||
<http://www.rfc-editor.org/info/rfc2736>. | <http://www.rfc-editor.org/info/rfc2736>. | |||
skipping to change at page 44, line 44 ¶ | skipping to change at page 44, line 47 ¶ | |||
[RFC3436] Jungmaier, A., Rescorla, E., and M. Tuexen, "Transport | [RFC3436] Jungmaier, A., Rescorla, E., and M. Tuexen, "Transport | |||
Layer Security over Stream Control Transmission Protocol", | Layer Security over Stream Control Transmission Protocol", | |||
RFC 3436, DOI 10.17487/RFC3436, December 2002, | RFC 3436, DOI 10.17487/RFC3436, December 2002, | |||
<http://www.rfc-editor.org/info/rfc3436>. | <http://www.rfc-editor.org/info/rfc3436>. | |||
[RFC3450] Luby, M., Gemmell, J., Vicisano, L., Rizzo, L., and J. | [RFC3450] Luby, M., Gemmell, J., Vicisano, L., Rizzo, L., and J. | |||
Crowcroft, "Asynchronous Layered Coding (ALC) Protocol | Crowcroft, "Asynchronous Layered Coding (ALC) Protocol | |||
Instantiation", RFC 3450, DOI 10.17487/RFC3450, December | Instantiation", RFC 3450, DOI 10.17487/RFC3450, December | |||
2002, <http://www.rfc-editor.org/info/rfc3450>. | 2002, <http://www.rfc-editor.org/info/rfc3450>. | |||
[RFC3452] Luby, M., Vicisano, L., Gemmell, J., Rizzo, L., Handley, | ||||
M., and J. Crowcroft, "Forward Error Correction (FEC) | ||||
Building Block", RFC 3452, DOI 10.17487/RFC3452, December | ||||
2002, <http://www.rfc-editor.org/info/rfc3452>. | ||||
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. | [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. | |||
Jacobson, "RTP: A Transport Protocol for Real-Time | Jacobson, "RTP: A Transport Protocol for Real-Time | |||
Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, | Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, | |||
July 2003, <http://www.rfc-editor.org/info/rfc3550>. | July 2003, <http://www.rfc-editor.org/info/rfc3550>. | |||
[RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate | [RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate | |||
Control (WEBRC) Building Block", RFC 3738, | Control (WEBRC) Building Block", RFC 3738, | |||
DOI 10.17487/RFC3738, April 2004, | DOI 10.17487/RFC3738, April 2004, | |||
<http://www.rfc-editor.org/info/rfc3738>. | <http://www.rfc-editor.org/info/rfc3738>. | |||
skipping to change at page 45, line 31 ¶ | skipping to change at page 45, line 31 ¶ | |||
[RFC3926] Paila, T., Luby, M., Lehtonen, R., Roca, V., and R. Walsh, | [RFC3926] Paila, T., Luby, M., Lehtonen, R., Roca, V., and R. Walsh, | |||
"FLUTE - File Delivery over Unidirectional Transport", | "FLUTE - File Delivery over Unidirectional Transport", | |||
RFC 3926, DOI 10.17487/RFC3926, October 2004, | RFC 3926, DOI 10.17487/RFC3926, October 2004, | |||
<http://www.rfc-editor.org/info/rfc3926>. | <http://www.rfc-editor.org/info/rfc3926>. | |||
[RFC3971] Arkko, J., Ed., Kempf, J., Zill, B., and P. Nikander, | [RFC3971] Arkko, J., Ed., Kempf, J., Zill, B., and P. Nikander, | |||
"SEcure Neighbor Discovery (SEND)", RFC 3971, | "SEcure Neighbor Discovery (SEND)", RFC 3971, | |||
DOI 10.17487/RFC3971, March 2005, | DOI 10.17487/RFC3971, March 2005, | |||
<http://www.rfc-editor.org/info/rfc3971>. | <http://www.rfc-editor.org/info/rfc3971>. | |||
[RFC4324] Royer, D., Babics, G., and S. Mansour, "Calendar Access | ||||
Protocol (CAP)", RFC 4324, DOI 10.17487/RFC4324, December | ||||
2005, <http://www.rfc-editor.org/info/rfc4324>. | ||||
[RFC4336] Floyd, S., Handley, M., and E. Kohler, "Problem Statement | [RFC4336] Floyd, S., Handley, M., and E. Kohler, "Problem Statement | |||
for the Datagram Congestion Control Protocol (DCCP)", | for the Datagram Congestion Control Protocol (DCCP)", | |||
RFC 4336, DOI 10.17487/RFC4336, March 2006, | RFC 4336, DOI 10.17487/RFC4336, March 2006, | |||
<http://www.rfc-editor.org/info/rfc4336>. | <http://www.rfc-editor.org/info/rfc4336>. | |||
[RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram | [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram | |||
Congestion Control Protocol (DCCP)", RFC 4340, | Congestion Control Protocol (DCCP)", RFC 4340, | |||
DOI 10.17487/RFC4340, March 2006, | DOI 10.17487/RFC4340, March 2006, | |||
<http://www.rfc-editor.org/info/rfc4340>. | <http://www.rfc-editor.org/info/rfc4340>. | |||
skipping to change at page 46, line 36 ¶ | skipping to change at page 46, line 30 ¶ | |||
[RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | |||
Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007, | Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007, | |||
<http://www.rfc-editor.org/info/rfc4821>. | <http://www.rfc-editor.org/info/rfc4821>. | |||
[RFC4828] Floyd, S. and E. Kohler, "TCP Friendly Rate Control | [RFC4828] Floyd, S. and E. Kohler, "TCP Friendly Rate Control | |||
(TFRC): The Small-Packet (SP) Variant", RFC 4828, | (TFRC): The Small-Packet (SP) Variant", RFC 4828, | |||
DOI 10.17487/RFC4828, April 2007, | DOI 10.17487/RFC4828, April 2007, | |||
<http://www.rfc-editor.org/info/rfc4828>. | <http://www.rfc-editor.org/info/rfc4828>. | |||
[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | ||||
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | ||||
DOI 10.17487/RFC4861, September 2007, | ||||
<http://www.rfc-editor.org/info/rfc4861>. | ||||
[RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, | [RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, | |||
"Authenticated Chunks for the Stream Control Transmission | "Authenticated Chunks for the Stream Control Transmission | |||
Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August | Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August | |||
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>. | |||
[RFC5052] Watson, M., Luby, M., and L. Vicisano, "Forward Error | ||||
Correction (FEC) Building Block", RFC 5052, | ||||
DOI 10.17487/RFC5052, August 2007, | ||||
<http://www.rfc-editor.org/info/rfc5052>. | ||||
[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, | Dynamic Address Reconfiguration", RFC 5061, | |||
DOI 10.17487/RFC5061, September 2007, | DOI 10.17487/RFC5061, September 2007, | |||
<http://www.rfc-editor.org/info/rfc5061>. | <http://www.rfc-editor.org/info/rfc5061>. | |||
[RFC5097] Renker, G. and G. Fairhurst, "MIB for the UDP-Lite | [RFC5097] Renker, G. and G. Fairhurst, "MIB for the UDP-Lite | |||
protocol", RFC 5097, DOI 10.17487/RFC5097, January 2008, | protocol", RFC 5097, DOI 10.17487/RFC5097, January 2008, | |||
<http://www.rfc-editor.org/info/rfc5097>. | <http://www.rfc-editor.org/info/rfc5097>. | |||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | ||||
(TLS) Protocol Version 1.2", RFC 5246, | ||||
DOI 10.17487/RFC5246, August 2008, | ||||
<http://www.rfc-editor.org/info/rfc5246>. | ||||
[RFC5238] Phelan, T., "Datagram Transport Layer Security (DTLS) over | [RFC5238] Phelan, T., "Datagram Transport Layer Security (DTLS) over | |||
the Datagram Congestion Control Protocol (DCCP)", | the Datagram Congestion Control Protocol (DCCP)", | |||
RFC 5238, DOI 10.17487/RFC5238, May 2008, | RFC 5238, DOI 10.17487/RFC5238, May 2008, | |||
<http://www.rfc-editor.org/info/rfc5238>. | <http://www.rfc-editor.org/info/rfc5238>. | |||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | ||||
(TLS) Protocol Version 1.2", RFC 5246, | ||||
DOI 10.17487/RFC5246, August 2008, | ||||
<http://www.rfc-editor.org/info/rfc5246>. | ||||
[RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP | [RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP | |||
Friendly Rate Control (TFRC): Protocol Specification", | Friendly Rate Control (TFRC): Protocol Specification", | |||
RFC 5348, DOI 10.17487/RFC5348, September 2008, | RFC 5348, DOI 10.17487/RFC5348, September 2008, | |||
<http://www.rfc-editor.org/info/rfc5348>. | <http://www.rfc-editor.org/info/rfc5348>. | |||
[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>. | |||
[RFC5595] Fairhurst, G., "The Datagram Congestion Control Protocol | [RFC5595] Fairhurst, G., "The Datagram Congestion Control Protocol | |||
skipping to change at page 47, line 48 ¶ | skipping to change at page 48, line 5 ¶ | |||
Control Protocol (DCCP) Congestion ID 4: TCP-Friendly Rate | Control Protocol (DCCP) Congestion ID 4: TCP-Friendly Rate | |||
Control for Small Packets (TFRC-SP)", RFC 5622, | Control for Small Packets (TFRC-SP)", RFC 5622, | |||
DOI 10.17487/RFC5622, August 2009, | DOI 10.17487/RFC5622, August 2009, | |||
<http://www.rfc-editor.org/info/rfc5622>. | <http://www.rfc-editor.org/info/rfc5622>. | |||
[RFC5651] Luby, M., Watson, M., and L. Vicisano, "Layered Coding | [RFC5651] Luby, M., Watson, M., and L. Vicisano, "Layered Coding | |||
Transport (LCT) Building Block", RFC 5651, | Transport (LCT) Building Block", RFC 5651, | |||
DOI 10.17487/RFC5651, October 2009, | DOI 10.17487/RFC5651, October 2009, | |||
<http://www.rfc-editor.org/info/rfc5651>. | <http://www.rfc-editor.org/info/rfc5651>. | |||
[RFC5672] Crocker, D., Ed., "RFC 4871 DomainKeys Identified Mail | [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion | |||
(DKIM) Signatures -- Update", RFC 5672, | Control", RFC 5681, DOI 10.17487/RFC5681, September 2009, | |||
DOI 10.17487/RFC5672, August 2009, | <http://www.rfc-editor.org/info/rfc5681>. | |||
<http://www.rfc-editor.org/info/rfc5672>. | ||||
[RFC5740] Adamson, B., Bormann, C., Handley, M., and J. Macker, | [RFC5740] Adamson, B., Bormann, C., Handley, M., and J. Macker, | |||
"NACK-Oriented Reliable Multicast (NORM) Transport | "NACK-Oriented Reliable Multicast (NORM) Transport | |||
Protocol", RFC 5740, DOI 10.17487/RFC5740, November 2009, | Protocol", RFC 5740, DOI 10.17487/RFC5740, November 2009, | |||
<http://www.rfc-editor.org/info/rfc5740>. | <http://www.rfc-editor.org/info/rfc5740>. | |||
[RFC5762] Perkins, C., "RTP and the Datagram Congestion Control | ||||
Protocol (DCCP)", RFC 5762, DOI 10.17487/RFC5762, April | ||||
2010, <http://www.rfc-editor.org/info/rfc5762>. | ||||
[RFC5775] Luby, M., Watson, M., and L. Vicisano, "Asynchronous | [RFC5775] Luby, M., Watson, M., and L. Vicisano, "Asynchronous | |||
Layered Coding (ALC) Protocol Instantiation", RFC 5775, | Layered Coding (ALC) Protocol Instantiation", RFC 5775, | |||
DOI 10.17487/RFC5775, April 2010, | DOI 10.17487/RFC5775, April 2010, | |||
<http://www.rfc-editor.org/info/rfc5775>. | <http://www.rfc-editor.org/info/rfc5775>. | |||
[RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion | ||||
Control", RFC 5681, DOI 10.17487/RFC5681, September 2009, | ||||
<http://www.rfc-editor.org/info/rfc5681>. | ||||
[RFC6056] Larsen, M. and F. Gont, "Recommendations for Transport- | [RFC6056] Larsen, M. and F. Gont, "Recommendations for Transport- | |||
Protocol Port Randomization", BCP 156, RFC 6056, | Protocol Port Randomization", BCP 156, RFC 6056, | |||
DOI 10.17487/RFC6056, January 2011, | DOI 10.17487/RFC6056, January 2011, | |||
<http://www.rfc-editor.org/info/rfc6056>. | <http://www.rfc-editor.org/info/rfc6056>. | |||
[RFC6083] Tuexen, M., Seggelmann, R., and E. Rescorla, "Datagram | [RFC6083] Tuexen, M., Seggelmann, R., and E. Rescorla, "Datagram | |||
Transport Layer Security (DTLS) for Stream Control | Transport Layer Security (DTLS) for Stream Control | |||
Transmission Protocol (SCTP)", RFC 6083, | Transmission Protocol (SCTP)", RFC 6083, | |||
DOI 10.17487/RFC6083, January 2011, | DOI 10.17487/RFC6083, January 2011, | |||
<http://www.rfc-editor.org/info/rfc6083>. | <http://www.rfc-editor.org/info/rfc6083>. | |||
[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>. | |||
[RFC6101] Freier, A., Karlton, P., and P. Kocher, "The Secure | [RFC6101] Freier, A., Karlton, P., and P. Kocher, "The Secure | |||
Sockets Layer (SSL) Protocol Version 3.0", RFC 6101, | Sockets Layer (SSL) Protocol Version 3.0", RFC 6101, | |||
DOI 10.17487/RFC6101, August 2011, | DOI 10.17487/RFC6101, August 2011, | |||
<http://www.rfc-editor.org/info/rfc6101>. | <http://www.rfc-editor.org/info/rfc6101>. | |||
[RFC6525] Stewart, R., Tuexen, M., and P. Lei, "Stream Control | ||||
Transmission Protocol (SCTP) Stream Reconfiguration", | ||||
RFC 6525, DOI 10.17487/RFC6525, February 2012, | ||||
<http://www.rfc-editor.org/info/rfc6525>. | ||||
[RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | |||
Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | |||
January 2012, <http://www.rfc-editor.org/info/rfc6347>. | January 2012, <http://www.rfc-editor.org/info/rfc6347>. | |||
[RFC6356] Raiciu, C., Handley, M., and D. Wischik, "Coupled | [RFC6356] Raiciu, C., Handley, M., and D. Wischik, "Coupled | |||
Congestion Control for Multipath Transport Protocols", | Congestion Control for Multipath Transport Protocols", | |||
RFC 6356, DOI 10.17487/RFC6356, October 2011, | RFC 6356, DOI 10.17487/RFC6356, October 2011, | |||
<http://www.rfc-editor.org/info/rfc6356>. | <http://www.rfc-editor.org/info/rfc6356>. | |||
[RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error | [RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error | |||
Correction (FEC) Framework", RFC 6363, | Correction (FEC) Framework", RFC 6363, | |||
DOI 10.17487/RFC6363, October 2011, | DOI 10.17487/RFC6363, October 2011, | |||
<http://www.rfc-editor.org/info/rfc6363>. | <http://www.rfc-editor.org/info/rfc6363>. | |||
[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, | Transmission Protocol (SCTP)", RFC 6458, | |||
DOI 10.17487/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 | ||||
Transmission Protocol (SCTP) Stream Reconfiguration", | ||||
RFC 6525, DOI 10.17487/RFC6525, February 2012, | ||||
<http://www.rfc-editor.org/info/rfc6525>. | ||||
[RFC6582] Henderson, T., Floyd, S., Gurtov, A., and Y. Nishida, "The | [RFC6582] Henderson, T., Floyd, S., Gurtov, A., and Y. Nishida, "The | |||
NewReno Modification to TCP's Fast Recovery Algorithm", | NewReno Modification to TCP's Fast Recovery Algorithm", | |||
RFC 6582, DOI 10.17487/RFC6582, April 2012, | RFC 6582, DOI 10.17487/RFC6582, April 2012, | |||
<http://www.rfc-editor.org/info/rfc6582>. | <http://www.rfc-editor.org/info/rfc6582>. | |||
[RFC6584] Roca, V., "Simple Authentication Schemes for the | [RFC6584] Roca, V., "Simple Authentication Schemes for the | |||
Asynchronous Layered Coding (ALC) and NACK-Oriented | Asynchronous Layered Coding (ALC) and NACK-Oriented | |||
Reliable Multicast (NORM) Protocols", RFC 6584, | Reliable Multicast (NORM) Protocols", RFC 6584, | |||
DOI 10.17487/RFC6584, April 2012, | DOI 10.17487/RFC6584, April 2012, | |||
<http://www.rfc-editor.org/info/rfc6584>. | <http://www.rfc-editor.org/info/rfc6584>. | |||
skipping to change at page 52, line 5 ¶ | skipping to change at page 52, line 10 ¶ | |||
"Recommendations for Secure Use of Transport Layer | "Recommendations for Secure Use of Transport Layer | |||
Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
(DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | (DTLS)", BCP 195, RFC 7525, DOI 10.17487/RFC7525, May | |||
2015, <http://www.rfc-editor.org/info/rfc7525>. | 2015, <http://www.rfc-editor.org/info/rfc7525>. | |||
[RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | |||
DOI 10.17487/RFC7540, May 2015, | DOI 10.17487/RFC7540, May 2015, | |||
<http://www.rfc-editor.org/info/rfc7540>. | <http://www.rfc-editor.org/info/rfc7540>. | |||
[I-D.ietf-tsvwg-rfc5405bis] | [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | |||
Guidelines", draft-ietf-tsvwg-rfc5405bis-16 (work in | March 2017, <http://www.rfc-editor.org/info/rfc8085>. | |||
progress), July 2016. | ||||
[I-D.ietf-tsvwg-sctp-dtls-encaps] | [SCTP-DTLS-ENCAPS] | |||
Tuexen, M., Stewart, R., Jesup, R., and S. Loreto, "DTLS | Tuexen, M., Stewart, R., Jesup, R., and S. Loreto, "DTLS | |||
Encapsulation of SCTP Packets", draft-ietf-tsvwg-sctp- | Encapsulation of SCTP Packets", Work in Progress, | |||
dtls-encaps-09 (work in progress), January 2015. | draft-ietf-tsvwg-sctp-dtls-encaps-09, January 2015. | |||
[I-D.ietf-tsvwg-sctp-ndata] | [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", draft-ietf-tsvwg- | Stream Control Transmission Protocol", Work in Progress, | |||
sctp-ndata-07 (work in progress), July 2016. | draft-ietf-tsvwg-sctp-ndata-08, October 2016. | |||
[I-D.ietf-tsvwg-natsupp] | ||||
Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control | ||||
Transmission Protocol (SCTP) Network Address Translation | ||||
Support", draft-ietf-tsvwg-natsupp-09 (work in progress), | ||||
May 2016. | ||||
[I-D.ietf-tcpm-cubic] | [TCP-SPEC] Eddy, W., Ed., "Transmission Control Protocol | |||
Rhee, I., Xu, L., Ha, S., Zimmermann, A., Eggert, L., and | Specification", Work in Progress, draft-ietf-tcpm- | |||
R. Scheffenegger, "CUBIC for Fast Long-Distance Networks", | rfc793bis-04, December 2016. | |||
draft-ietf-tcpm-cubic-02 (work in progress), August 2016. | ||||
[I-D.ietf-rtcweb-transports] | [TLS-1.3] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Alvestrand, H., "Transports for WebRTC", draft-ietf- | Version 1.3", Work in Progress, draft-ietf-tls-tls13-18, | |||
rtcweb-transports-15 (work in progress), August 2016. | October 2016. | |||
[I-D.ietf-tls-tls13] | [WEBRTC-TRANS] | |||
Rescorla, E., "The Transport Layer Security (TLS) Protocol | Alvestrand, H., "Transports for WebRTC", Work in | |||
Version 1.3", draft-ietf-tls-tls13-14 (work in progress), | Progress, draft-ietf-rtcweb-transports-17, October 2016. | |||
July 2016. | ||||
[XHR] van Kesteren, A., Aubourg, J., Song, J., and H. Steen, | [XHR] van Kesteren, A., Aubourg, J., Song, J., and H. Steen, | |||
"XMLHttpRequest working draft | "XMLHttpRequest Level 1", World Wide Web Consortium NOTE- | |||
(http://www.w3.org/TR/XMLHttpRequest/)", 2000. | XMLHttpRequest-20161006, October 2016, | |||
<http://www.w3.org/TR/XMLHttpRequest/>. | ||||
[REST] Fielding, R., "Architectural Styles and the Design of | Acknowledgments | |||
Network-based Software Architectures, Ph. D. (UC Irvine), | ||||
Chapter 5: Representational State Transfer", 2000. | ||||
[POSIX] 1-2008, IEEE., "IEEE Standard for Information Technology | Thanks to Joe Touch, Michael Welzl, Spencer Dawkins, and the TAPS | |||
-- Portable Operating System Interface (POSIX) Base | working group for the comments, feedback, and discussion. This work | |||
Specifications, Issue 7", n.d.. | is supported by the European Commission under grant agreement No. | |||
318627 mPlane and from the Horizon 2020 research and innovation | ||||
program under grant agreements No. 644334 (NEAT) and No. 688421 | ||||
(MAMI). This support does not imply endorsement. | ||||
[MBMS] 3GPP TSG WS S4, ., "3GPP TS 26.346: Multimedia Broadcast/ | Contributors | |||
Multicast Service (MBMS); Protocols and codecs, release 13 | ||||
(http://www.3gpp.org/DynaReport/26346.htm).", 2015. | ||||
[ClarkArch] | In addition to the editors, this document is the work of Brian | |||
Clark, D. and D. Tennenhouse, "Architectural | Adamson, Dragana Damjanovic, Kevin Fall, Simone Ferlin-Oliviera, | |||
Considerations for a New Generation of Protocols (Proc. | Ralph Holz, Olivier Mehani, Karen Nielsen, Colin Perkins, Vincent | |||
ACM SIGCOMM)", 1990. | Roca, and Michael Tuexen. | |||
o Section 3.2 on MPTCP was contributed by Simone Ferlin-Oliviera | ||||
(ferlin@simula.no) and Olivier Mehani | ||||
(olivier.mehani@nicta.com.au). | ||||
o Section 3.3 on UDP was contributed by Kevin Fall | ||||
(kfall@kfall.com). | ||||
o Section 3.5 on SCTP was contributed by Michael Tuexen (tuexen@fh- | ||||
muenster.de) and Karen Nielsen (karen.nielsen@tieto.com). | ||||
o Section 3.7 on TLS and DTLS was contributed by Ralph Holz | ||||
(ralph.holz@nicta.com.au) and Olivier Mehani | ||||
(olivier.mehani@nicta.com.au). | ||||
o Section 3.8 on RTP contains contributions from Colin Perkins | ||||
(csp@csperkins.org). | ||||
o Section 3.9 on HTTP was contributed by Dragana Damjanovic | ||||
(ddamjanovic@mozilla.com). | ||||
o Section 3.10 on FLUTE/ALC was contributed by Vincent Roca | ||||
(vincent.roca@inria.fr). | ||||
o Section 3.11 on NORM was contributed by Brian Adamson | ||||
(brian.adamson@nrl.navy.mil). | ||||
Authors' Addresses | Authors' Addresses | |||
Godred Fairhurst (editor) | Godred Fairhurst (editor) | |||
University of Aberdeen | University of Aberdeen | |||
School of Engineering, Fraser Noble Building | School of Engineering, Fraser Noble Building | |||
Aberdeen AB24 3UE | Aberdeen AB24 3UE | |||
Email: gorry@erg.abdn.ac.uk | Email: gorry@erg.abdn.ac.uk | |||
End of changes. 294 change blocks. | ||||
781 lines changed or deleted | 776 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/ |