draft-ietf-taps-transports-08.txt | draft-ietf-taps-transports-09.txt | |||
---|---|---|---|---|
Network Working Group G. Fairhurst, Ed. | Network Working Group G. Fairhurst, Ed. | |||
Internet-Draft University of Aberdeen | Internet-Draft University of Aberdeen | |||
Intended status: Informational B. Trammell, Ed. | Intended status: Informational B. Trammell, Ed. | |||
Expires: June 10, 2016 M. Kuehlewind, Ed. | Expires: July 31, 2016 M. Kuehlewind, Ed. | |||
ETH Zurich | ETH Zurich | |||
December 08, 2015 | January 28, 2016 | |||
Services provided by IETF transport protocols and congestion control | Services provided by IETF transport protocols and congestion control | |||
mechanisms | mechanisms | |||
draft-ietf-taps-transports-08 | draft-ietf-taps-transports-09 | |||
Abstract | Abstract | |||
This document describes transport services provided by existing IETF | This document describes, surveys, classifies and compares the | |||
protocols. It is designed to help application and network stack | protocol mechanisms provided by existing IETF protocols, as | |||
programmers and to inform the work of the IETF TAPS Working Group. | background for determining a common set of transport services. It | |||
examines the Transmission Control Protocol (TCP), Multipath TCP, the | ||||
Stream Control Transmission Protocol (SCTP), the User Datagram | ||||
Protocol (UDP), UDP-Lite, the Datagram Congestion Control Protocol | ||||
(DCCP), the Internet Control Message Protocol (ICMP), the Realtime | ||||
Transport Protocol (RTP), File Delivery over Unidirectional | ||||
Transport/Asynchronous Layered Coding Reliable Multicast (FLUTE/ALC), | ||||
and NACK-Oriented Reliable Multicast (NORM), Transport Layer Security | ||||
(TLS), Datagram TLS (DTLS), and the Hypertext Transport Protocol | ||||
(HTTP) when used as a pseudotransport. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on June 10, 2016. | This Internet-Draft will expire on July 31, 2016. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2016 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Overview of Transport Features . . . . . . . . . . . . . 4 | |||
3. Transport Service Features . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
3.1. Congestion Control . . . . . . . . . . . . . . . . . . . 5 | 3. Existing Transport Protocols . . . . . . . . . . . . . . . . 5 | |||
4. Existing Transport Protocols . . . . . . . . . . . . . . . . 6 | 3.1. Transport Control Protocol (TCP) . . . . . . . . . . . . 6 | |||
4.1. Transport Control Protocol (TCP) . . . . . . . . . . . . 6 | 3.1.1. Protocol Description . . . . . . . . . . . . . . . . 6 | |||
4.1.1. Protocol Description . . . . . . . . . . . . . . . . 6 | 3.1.2. Interface description . . . . . . . . . . . . . . . . 8 | |||
4.1.2. Interface description . . . . . . . . . . . . . . . . 8 | 3.1.3. Transport Features . . . . . . . . . . . . . . . . . 8 | |||
4.1.3. Transport Features . . . . . . . . . . . . . . . . . 8 | 3.2. Multipath TCP (MPTCP) . . . . . . . . . . . . . . . . . . 9 | |||
4.2. Multipath TCP (MPTCP) . . . . . . . . . . . . . . . . . . 9 | 3.2.1. Protocol Description . . . . . . . . . . . . . . . . 9 | |||
4.2.1. Protocol Description . . . . . . . . . . . . . . . . 9 | 3.2.2. Interface Description . . . . . . . . . . . . . . . . 9 | |||
4.2.2. Interface Description . . . . . . . . . . . . . . . . 9 | 3.2.3. Transport features . . . . . . . . . . . . . . . . . 10 | |||
4.2.3. Transport features . . . . . . . . . . . . . . . . . 10 | 3.3. Stream Control Transmission Protocol (SCTP) . . . . . . . 10 | |||
4.3. Stream Control Transmission Protocol (SCTP) . . . . . . . 10 | 3.3.1. Protocol Description . . . . . . . . . . . . . . . . 11 | |||
4.3.1. Protocol Description . . . . . . . . . . . . . . . . 11 | 3.3.2. Interface Description . . . . . . . . . . . . . . . . 13 | |||
4.3.2. Interface Description . . . . . . . . . . . . . . . . 13 | 3.3.3. Transport Features . . . . . . . . . . . . . . . . . 15 | |||
4.3.3. Transport Features . . . . . . . . . . . . . . . . . 15 | 3.4. User Datagram Protocol (UDP) . . . . . . . . . . . . . . 16 | |||
4.4. User Datagram Protocol (UDP) . . . . . . . . . . . . . . 16 | 3.4.1. Protocol Description . . . . . . . . . . . . . . . . 16 | |||
4.4.1. Protocol Description . . . . . . . . . . . . . . . . 16 | 3.4.2. Interface Description . . . . . . . . . . . . . . . . 17 | |||
4.4.2. Interface Description . . . . . . . . . . . . . . . . 17 | 3.4.3. Transport Features . . . . . . . . . . . . . . . . . 17 | |||
4.4.3. Transport Features . . . . . . . . . . . . . . . . . 18 | 3.5. Lightweight User Datagram Protocol (UDP-Lite) . . . . . . 18 | |||
4.5. Lightweight User Datagram Protocol (UDP-Lite) . . . . . . 18 | 3.5.1. Protocol Description . . . . . . . . . . . . . . . . 18 | |||
4.5.1. Protocol Description . . . . . . . . . . . . . . . . 18 | 3.5.2. Interface Description . . . . . . . . . . . . . . . . 19 | |||
4.5.2. Interface Description . . . . . . . . . . . . . . . . 19 | 3.5.3. Transport Features . . . . . . . . . . . . . . . . . 19 | |||
4.5.3. Transport Features . . . . . . . . . . . . . . . . . 19 | 3.6. Datagram Congestion Control Protocol (DCCP) . . . . . . . 19 | |||
4.6. Datagram Congestion Control Protocol (DCCP) . . . . . . . 20 | 3.6.1. Protocol Description . . . . . . . . . . . . . . . . 20 | |||
4.6.1. Protocol Description . . . . . . . . . . . . . . . . 20 | 3.6.2. Interface Description . . . . . . . . . . . . . . . . 21 | |||
4.6.2. Interface Description . . . . . . . . . . . . . . . . 21 | 3.6.3. Transport Features . . . . . . . . . . . . . . . . . 21 | |||
4.6.3. Transport Features . . . . . . . . . . . . . . . . . 22 | 3.7. Internet Control Message Protocol (ICMP) . . . . . . . . 22 | |||
4.7. Internet Control Message Protocol (ICMP) . . . . . . . . 22 | 3.7.1. Protocol Description . . . . . . . . . . . . . . . . 22 | |||
4.7.1. Protocol Description . . . . . . . . . . . . . . . . 23 | 3.7.2. Interface Description . . . . . . . . . . . . . . . . 23 | |||
4.7.2. Interface Description . . . . . . . . . . . . . . . . 24 | 3.7.3. Transport Features . . . . . . . . . . . . . . . . . 23 | |||
4.7.3. Transport Features . . . . . . . . . . . . . . . . . 24 | 3.8. Realtime Transport Protocol (RTP) . . . . . . . . . . . . 23 | |||
4.8. Realtime Transport Protocol (RTP) . . . . . . . . . . . . 24 | 3.8.1. Protocol Description . . . . . . . . . . . . . . . . 24 | |||
4.8.1. Protocol Description . . . . . . . . . . . . . . . . 24 | 3.8.2. Interface Description . . . . . . . . . . . . . . . . 25 | |||
4.8.2. Interface Description . . . . . . . . . . . . . . . . 25 | 3.8.3. Transport Features . . . . . . . . . . . . . . . . . 25 | |||
4.8.3. Transport Features . . . . . . . . . . . . . . . . . 26 | 3.9. File Delivery over Unidirectional Transport/Asynchronous | |||
4.9. File Delivery over Unidirectional Transport/Asynchronous | Layered Coding Reliable Multicast (FLUTE/ALC) . . . . . . 25 | |||
Layered Coding Reliable Multicast (FLUTE/ALC) . . . . . . 26 | 3.9.1. Protocol Description . . . . . . . . . . . . . . . . 26 | |||
4.9.1. Protocol Description . . . . . . . . . . . . . . . . 27 | 3.9.2. Interface Description . . . . . . . . . . . . . . . . 28 | |||
4.9.2. Interface Description . . . . . . . . . . . . . . . . 29 | 3.9.3. Transport Features . . . . . . . . . . . . . . . . . 28 | |||
4.9.3. Transport Features . . . . . . . . . . . . . . . . . 29 | 3.10. NACK-Oriented Reliable Multicast (NORM) . . . . . . . . . 29 | |||
4.10. NACK-Oriented Reliable Multicast (NORM) . . . . . . . . . 30 | 3.10.1. Protocol Description . . . . . . . . . . . . . . . . 29 | |||
4.10.1. Protocol Description . . . . . . . . . . . . . . . . 30 | 3.10.2. Interface Description . . . . . . . . . . . . . . . 30 | |||
4.10.2. Interface Description . . . . . . . . . . . . . . . 31 | 3.10.3. Transport Features . . . . . . . . . . . . . . . . . 30 | |||
4.10.3. Transport Features . . . . . . . . . . . . . . . . . 31 | 3.11. Transport Layer Security (TLS) and Datagram TLS (DTLS) as | |||
4.11. Transport Layer Security (TLS) and Datagram TLS (DTLS) as | a pseudotransport . . . . . . . . . . . . . . . . . . . . 31 | |||
a pseudotransport . . . . . . . . . . . . . . . . . . . . 32 | 3.11.1. Protocol Description . . . . . . . . . . . . . . . . 31 | |||
4.11.1. Protocol Description . . . . . . . . . . . . . . . . 32 | 3.11.2. Interface Description . . . . . . . . . . . . . . . 32 | |||
4.11.2. Interface Description . . . . . . . . . . . . . . . 33 | 3.11.3. Transport Features . . . . . . . . . . . . . . . . . 33 | |||
4.11.3. Transport Features . . . . . . . . . . . . . . . . . 34 | 3.12. Hypertext Transport Protocol (HTTP) over TCP as a | |||
4.12. Hypertext Transport Protocol (HTTP) over TCP as a | pseudotransport . . . . . . . . . . . . . . . . . . . . . 34 | |||
pseudotransport . . . . . . . . . . . . . . . . . . . . . 35 | 3.12.1. Protocol Description . . . . . . . . . . . . . . . . 35 | |||
4.12.1. Protocol Description . . . . . . . . . . . . . . . . 35 | 3.12.2. Interface Description . . . . . . . . . . . . . . . 35 | |||
4.12.2. Interface Description . . . . . . . . . . . . . . . 36 | 3.12.3. Transport features . . . . . . . . . . . . . . . . . 36 | |||
4.12.3. Transport features . . . . . . . . . . . . . . . . . 37 | 4. Congestion Control . . . . . . . . . . . . . . . . . . . . . 37 | |||
5. Transport Service Features . . . . . . . . . . . . . . . . . 37 | 5. Transport Features . . . . . . . . . . . . . . . . . . . . . 38 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | |||
8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 41 | 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 42 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 43 | |||
10. Informative References . . . . . . . . . . . . . . . . . . . 42 | 10. Informative References . . . . . . . . . . . . . . . . . . . 43 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 52 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
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, MP-TCP, 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, TFRC or | including a congestion control mechanism (such as NewReno, TFRC or | |||
LEDBAT). This extends the set of available Transport Services beyond | LEDBAT). This extends the set of available Transport Services beyond | |||
those provided to applications by TCP and UDP. | those provided to applications by TCP and UDP. | |||
1.1. Overview of Transport Features | ||||
Transport protocols can be differentiated by the features of the | ||||
services they provide. | ||||
Some of these provided features are closely related to basic control | ||||
function that a protocol needs to work over a network path, such as | ||||
addressing. The number of participants in a given association also | ||||
determines its applicability: if a connection is between endpoints | ||||
(unicast), to one of multiple endpoints (anycast), and/or | ||||
simultaneously to multiple endpoints (multicast). Unicast protocols | ||||
usually support bidirectional communication, while multicast is | ||||
generally unidirectional. Another feature is whether a transport | ||||
requires a control exchange across the network at setup (e.g., TCP), | ||||
or whether it connection-less (e.g., UDP). | ||||
For the delivery of the packets itself, reliability and integrity | ||||
protection, ordering, and framing are basic features. However, these | ||||
features are implemented with different levels of assurance in | ||||
different protocols. As an example, a transport service may provide | ||||
full reliability, providing detection of loss and retransmission | ||||
(e.g., TCP). SCTP offers a message-based service that can provide | ||||
full or partial reliability, and allows the protocol to minimize the | ||||
head of line blocking due to the support of ordered and unordered | ||||
message delivery within multiple streams. UDP-Lite and DCCP can | ||||
provide partial integrity protection to enable corruption tolerance. | ||||
Usually a protocol has been designed to support one specific type of | ||||
delivery/framing: data either needs to be divided into transmission | ||||
units based on network packets (datagram service), a data stream is | ||||
segmented and re-combined across multiple packets (stream service), | ||||
or whole objects such as files are handled accordingly. This | ||||
decision strongly influences the interface that is provided to the | ||||
upper layer. | ||||
In addition, transport protocols offer a certain support on | ||||
transmission control. For example, a transport service can provide | ||||
flow control to allow a receiver to regulate the transmission rate of | ||||
a sender. Further a transport service can provide congestion control | ||||
(see Section 4). As an example TCP and SCTP provide congestion | ||||
control for use in the Internet, whereas UDP leaves this function to | ||||
the upper layer protocol that uses UDP. | ||||
Security features are often provided independent of the transport | ||||
protocol, via Transport Layer Security (TLS, see {{transport-layer- | ||||
security-tls-and- datagram-tls-dtls-as-a-pseudotransport}}) or by the | ||||
application layer protocol itself. The security properties TLS | ||||
provides to the application (such as confidentiality, integrity, and | ||||
authenticity) are also features of the transport layer, even though | ||||
they are often presently implemented in a separate protocol. | ||||
2. Terminology | 2. Terminology | |||
The following terms are defined throughout this document, and in | The following terms are used throughout this document, and in | |||
subsequent documents produced by TAPS describing the composition and | subsequent documents produced by TAPS that describe the composition | |||
decomposition of transport services. | and decomposition of transport services. | |||
Transport Service Feature: a specific end-to-end feature that a | Transport Service Feature: a specific end-to-end feature that the | |||
transport service provides to its clients. Examples include | transport 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 service features, without an | Transport Service: a set of Transport Features, without an | |||
association to any given framing protocol, which provides a | association to any given framing protocol, which provides a | |||
complete service to an application. | complete service to an application. | |||
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 Protocol Component: an implementation of a transport | ||||
service feature within a protocol. | ||||
Transport Service Instance: an arrangement of transport protocols | Transport Service Instance: an arrangement of transport protocols | |||
with a selected set of features and configuration parameters that | with a selected set of features and configuration parameters that | |||
implements a single transport service, e.g., a protocol stack (RTP | implements a single transport service, e.g., a protocol stack (RTP | |||
over UDP). | over UDP). | |||
Application: an entity that uses the transport layer for end-to-end | Application: an entity that uses the transport layer for end-to-end | |||
delivery 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. Transport Service Features | 3. Existing Transport Protocols | |||
Transport protocols can be differentiated by the features of the | ||||
services they provide. | ||||
One fundamental feature is whether a transport offers a service that | ||||
divides the data into transmission units based on network packets | ||||
(known as a Datagram service), or whether it combines and segments | ||||
data across multiple packets (e.g., the Stream service provided by | ||||
TCP). | ||||
Another fundamental feature is whether a transport requires a control | ||||
exchange across the network at setup (e.g., TCP), or whether it | ||||
connection-less (e.g., UDP). | ||||
A transport service can also offer reliability, for instance, SCTP | ||||
offers a message-based service providing full or partial reliability | ||||
and allowing to minimize the head of line blocking due to the support | ||||
of unordered and unordered message delivery within multiple streams, | ||||
UDP-Lite and DCCP provide partial integrity protection. | ||||
A transport service can provide congestion control (see Section 3.1). | ||||
TCP and SCTP provide congestion control for use in the Internet, | ||||
whereas UDP leaves this function to the upper layer protocol that | ||||
uses UDP. DCCP offers a range of congestion control approaches and | ||||
LEDBAT can support low-priority "scavenger" communication, intending | ||||
to defer use of capacity to other Internet flows sharing a congested | ||||
bottleneck. | ||||
Transport services may be unidirectional or bidirectional, to a | ||||
single a single endpoint, to one of multiple endpoints, or multicast | ||||
simultaneously to multiple endpoints. | ||||
The service offered by transport protocols and frameworks can also be | ||||
differentiated in many other ways. | ||||
3.1. Congestion Control | ||||
Congestion control is critical to the stable operation of the | ||||
Internet, applications and other protocols that choose to use a | ||||
datagram protocol (e.g., UDP or UDP-Lite) need to employ mechanisms | ||||
to prevent congestion collapse and to establish some degree of | ||||
fairness with concurrent traffic. | ||||
A variety of techniques are used to provide congestion control in the | ||||
Internet. Each technique requires that the protocol provide a method | ||||
for deriving the metric the congestion control algorithm uses to | ||||
detect congestion and the property of a packet it uses to determine | ||||
when to send. Given these relatively wide constraints, the | ||||
congestion control techniques that can be applied by different | ||||
transport protocols are largely orthogonal to the choice of transport | ||||
protocols themselves. This section provides an overview of the | ||||
congestion control techniques available to the protocols described in | ||||
Section 4. | ||||
Most commonly deployed congestion control mechanisms use one of three | ||||
mechanisms to detect congestion: | ||||
o detection of loss, which is interpreted as a congestion signal; | ||||
o Explicit Congestion Notification (ECN) [RFC3168] to provide | ||||
explicit signaling of congestion without inducing loss (see | ||||
[I-D.ietf-aqm-ecn-benefits]); and/or | ||||
o a retransmission timer with exponential back-off. | ||||
Protocols such as SCTP and TCP [RFC5681] that use sliding-window- | ||||
based receiver flow control commonly use a separate congestion window | ||||
for congestion control. Each time congestion is detected, this | ||||
separate congestion window is reduced. Data in flight is capped to | ||||
the minimum of the two windows. This approach is also used by DCCP | ||||
CCID-2 for datagram congestion control. | ||||
Rate-based methods have also been defined based on the loss ratio and | ||||
observed round trip time, such as TFRC [RFC5348] and TFRC-SP | ||||
[RFC4828]. These methods utlise a throughput equation to determine | ||||
the maximum acceptable rate. Such methods are used with DCCP CCID-3 | ||||
[RFC4342] and CCID-4 [RFC5622], WEBRC [RFC3738], and other | ||||
applications. | ||||
In addition, a congestion control mechanism may react to changes in | ||||
delay as an indication for congestion. Delay-based congestion | ||||
detection methods tend to induce less loss than loss-based methods, | ||||
and therefore generally do not compete well with them across shared | ||||
bottleneck links. However, such methods, such as LEDBAT [RFC6824], | ||||
are are deployed in the Internet for scavenger traffic, which will | ||||
use unused capacity but readily yield to presumably interactive or | ||||
otherwise higher-priority, loss-based congestion-controlled traffic. | ||||
4. 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. | |||
4.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. [RFC0793] | |||
introduces TCP as follows: "The Transmission Control Protocol (TCP) | introduces TCP as follows: "The Transmission Control Protocol (TCP) | |||
is intended for use as a highly reliable host-to-host protocol | is intended for use as a highly reliable host-to-host protocol | |||
between hosts in packet-switched computer communication networks, and | between hosts in packet-switched computer communication networks, and | |||
in interconnected systems of such networks." Since its introduction, | in interconnected systems of such networks." Since its introduction, | |||
TCP has become the default connection- oriented, stream-based | TCP has become the default connection- oriented, stream-based | |||
transport protocol in the Internet. It is widely implemented by | transport protocol in the Internet. It is widely implemented by | |||
endpoints and widely used by common applications. | endpoints and widely used by common applications. | |||
4.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, providing 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 mechanisms for orderly completion and | |||
immediate teardown of a connection. TCP is defined by a family of | immediate teardown of a connection. TCP is defined by a family of | |||
RFCs [RFC4614]. | RFCs [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 port and remote port numbers. | |||
The destination port during connection setup is often used to | The destination port during connection setup is often used to | |||
indicate the requested service. | indicate 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. ICMP-based Path MTU discovery [RFC1191][RFC1981] | fit in IP packets based on a negotiated maximum segment size and | |||
as well as Packetization Layer Path MTU Discovery (PMTUD) [RFC4821] | further constrained by the effective MTU from PMTUD. ICMP-based Path | |||
have been defined by the IETF. | MTU discovery [RFC1191][RFC1981] as well as Packetization Layer Path | |||
MTU Discovery (PMTUD) [RFC4821] 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 | |||
[RFC2018] extends this mechanism by making it possible to identify | (SACK) [RFC2018] extends this mechanism by making it possible to | |||
missing segments more precisely, reducing spurious retransmission. | provide earlier identification of which segments are missing, | |||
allowing faster retransmission. SACK-based methods (e.g. DSACK) 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: limiting the | |||
amount of unacknowledged data that can be outstanding at a given | 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 64KB. | |||
TCP provides congestion control [RFC5681], described further in | All TCP senders provide congestion control, such as described in | |||
Section 3.1 below. | [RFC5681]. TCP's congestion control mechanism is tied to a sliding | |||
window as well [RFC5681]. Examples for different kind of congestion | ||||
control schemes are given in Section 4. The sending window at a | ||||
given point in time is the minimum of the receiver window and the | ||||
congestion window. The congestion window is increased in the absence | ||||
of congestion and, respectively, decreased if congestion is detected. | ||||
Often loss is implicitly handled as a congestion indication which is | ||||
detected in TCP (also as input for retransmission handling) based on | ||||
two mechanisms: A retransmission timer with exponential back-up or | ||||
the reception of three acknowledgment for the same segment, so called | ||||
duplicated ACKs (Fast retransmit). In addition, Explicit Congestion | ||||
Notification (ECN) [RFC3168] can be used in TCP, if supported by both | ||||
endpoints, that allows a network node to signal congestion without | ||||
inducing loss. Alternatively, a delay-based congestion control | ||||
scheme can be used in TCP that reacts to changes in delay as an early | ||||
indication of congestion as also further described in Section 4. | ||||
TCP protocol instances can be extended [RFC4614] and tuned. Some | TCP protocol instances can be extended [RFC7414] and tuned. Some | |||
features are sender-side only, requiring no negotiation with the | features are sender-side only, requiring no negotiation with the | |||
receiver; some are receiver-side only, some are explicitly negotiated | receiver; some are receiver-side only, some are explicitly negotiated | |||
during connection setup. | during connection setup. | |||
By default, TCP segment partitioning uses Nagle's algorithm [RFC0896] | TCP may buffer data, e.g., to optimize processing or capacity usage. | |||
to buffer data at the sender into large segments, potentially | TCP can therefore provides mechanisms to control this, including an | |||
incurring sender-side buffering delay; this algorithm can be disabled | optional "PUSH" function [RFC0793] that explicitly requests the | |||
by the sender to transmit more immediately, e.g., to reduce latency | transport service not to delay data. By default, TCP segment | |||
for interactive sessions. | partitioning uses Nagle's algorithm [RFC0896] to buffer data at the | |||
sender into large segments, potentially incurring sender-side | ||||
buffering delay; this algorithm can be disabled by the sender to | ||||
transmit more immediately, e.g., to reduce latency for interactive | ||||
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 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 | |||
does not support partial corruption protection (as in DCCP/UDP-Lite). | does not support partial payload protection (as in DCCP/UDP-Lite). | |||
TCP supports only unicast connections. | TCP supports only unicast connections. | |||
4.1.2. Interface description | 3.1.2. Interface description | |||
A User/TCP Interface is defined in [RFC0793] providing six user | A User/TCP Interface is defined in [RFC0793] providing six user | |||
commands: Open, Send, Receive, Close, Status. This interface does | commands: Open, Send, Receive, Close, Status. This interface does | |||
not describe configuration of TCP options or parameters beside use of | not describe configuration of TCP options or parameters beside use of | |||
the PUSH and URGENT flags. | 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) (formerly, the Type-of-Service, TOS) for | Code Point (DSCP) [RFC3260] (formerly, the Type-of-Service, TOS) | |||
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 current no documents in the RFC Series | tuned via this API. There are currently no documents in the RFC | |||
that describe this interface. | Series that describe this interface. | |||
4.1.3. Transport Features | 3.1.3. Transport Features | |||
The transport features provided by TCP are: | The transport features provided by TCP are: | |||
o unicast transport | o connection-oriented transport with feature negotiation and | |||
application-to-port mapping (implemented using SYN segments and | ||||
the TCP option field to negotiate features), | ||||
o connection setup with feature negotiation and application-to-port | o unicast transport (though anycast TCP is implemented, at risk of | |||
mapping, implemented using SYN segments and the TCP option field | instability due to rerouting), | |||
to negotiate features. | ||||
o port multiplexing: each TCP session is uniquely identified by a | o port multiplexing, | |||
combination of the ports and IP address fields. | ||||
o Uni-or bidirectional communication. | o uni- 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: a segment checksum verifies delivery to the | o error detection (implemented using a segment checksum to verify | |||
correct endpoint and integrity of the data and options. | delivery to the correct endpoint and integrity of the data and | |||
options), | ||||
o segmentation: packets are fragmented to a negotiated maximum | o segmentation, | |||
segment size, further constrained by the effective MTU from PMTUD. | ||||
o data bundling, an optional mechanism that uses Nagle's algorithm | o data bundling (optional; uses Nagle's algorithm to coalesce data | |||
to coalesce data sent within the same RTT into full-sized | sent within the same RTT into full-sized segments), | |||
segments. | ||||
o flow control using a window-based mechanism, where the receiver | o flow control (implemented using a window-based mechanism where the | |||
advertises the window that it is willing to buffer. | receiver advertises the window that it is willing to buffer), | |||
o congestion control: a window-based method that uses Additive | o congestion control (usually implemented using a window-based | |||
Increase Multiplicative Decrease (AIMD) to control the sending | mechanism and four algorithm for different phases of the | |||
rate and to conservatively choose a rate after congestion is | transmission: slow start, congestion avoidance, fast retransmit, | |||
detected. | and fast recovery [RFC5681]). | |||
4.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 multi- | |||
homing. It is designed to be as transparent as possible to middle- | homing for resilience, mobility and load-balancing. It is designed | |||
boxes. It does so by establishing regular TCP flows between a pair | to be as transparent as possible to middleboxes. It does so by | |||
of source/destination endpoints, and multiplexing the application's | establishing regular TCP flows between a pair of source/destination | |||
stream over these flows. | endpoints, and multiplexing the application's stream over these | |||
flows. Sub-flows can be started over IPv4 or IPv6 for the same | ||||
session. | ||||
4.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, and advertise other available IP addresses and establish new | |||
sessions between pairs of endpoints. | sessions between pairs of endpoints. | |||
4.2.2. Interface Description | By multiplexing one byte stream over separate paths, MPTCP can | |||
achieve a higher throughput than TCP in certain situations. However, | ||||
if coupled congestion control [RFC6356] is used, it might limit this | ||||
benefit to maintain fairness to other flows at the bottleneck. When | ||||
aggregating capacity over multiple paths, and depending on the way | ||||
packets are scheduled on each TCP subflow, additional delay and | ||||
higher jitter might be observed observed before in-order delivery of | ||||
data to the applications. | ||||
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. | [RFC6458] (see next section) to support multihoming for resilience | |||
and mobility. | ||||
4.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 should one of the paths | additionally provide soft failover solutions should one of the paths | |||
become unusable. In addition, by multiplexing one byte stream over | become unusable. | |||
separate paths, it can achieve a higher throughput than TCP in | ||||
certain situations. Note, however, that coupled congestion control | ||||
[RFC6356] might limit this benefit to maintain fairness to other | ||||
flows at the bottleneck. When aggregating capacity over multiple | ||||
paths, and depending on the way packets are scheduled on each TCP | ||||
subflow, an additional delay and higher jitter might be observed | ||||
observed before in-order delivery of data to the applications. | ||||
The transport features provided by MPTCP in addition to TCP therefore | The transport features provided by MPTCP in addition to TCP therefore | |||
are: | are: | |||
o congestion control with load balancing over multiple connections. | o multihoming for load-balancing, with endpoint multiplexing of a | |||
single byte stream, using either coupled congestion control or for | ||||
o endpoint multiplexing of a single byte stream (higher throughput). | throughput maximization, | |||
o address family multiplexing: sub-flows can be started over IPv4 or | o address family multiplexing (using IPv4 and IPv6 for the same | |||
IPv6 for the same session. | session), | |||
o resilience to network failure and/or handover. | o resilience to network failure and/or handover. | |||
4.3. Stream Control Transmission Protocol (SCTP) | 3.3. 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 multi- | |||
homing and path failover to provide resilience to path failures. An | homing and path failover to provide resilience to path failures. An | |||
SCTP association has multiple streams in each direction, providing | SCTP 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 is extensible. Currently defined extensions include mechanisms | SCTP was originally developed for transporting telephony signaling | |||
for dynamic re-configuration of streams [RFC6525] and IP addresses | messages and is deployed in telephony signaling networks, especially | |||
[RFC5061]. Furthermore, the extension specified in [RFC3758] | ||||
introduces the concept of partial reliability for user messages. | ||||
SCTP was originally developed for transporting telephony signalling | ||||
messages and is deployed in telephony signalling 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. It | services, for example, in the WebRTC framework for data channels. | |||
is therefore deployed in all Web browsers supporting WebRTC. | ||||
4.3.1. Protocol Description | 3.3.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 checksum coverage as provided by DCCP or UDP-Lite is not | partial payload checksum coverage as provided by DCCP or UDP-Lite is | |||
supported. | not supported. | |||
SCTP has been designed with extensibility in mind. Each SCTP packet | SCTP has been designed with extensibility in mind. A common header | |||
starts with a single common header containing the port numbers, a | is followed by a sequence of chunks. [RFC4960] defines how a | |||
verification tag and the CRC32c checksum. This common header is | ||||
followed by a sequence of chunks. Each chunk consists of a type | ||||
field, flags, a length field and a value. [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. | extensions can be negotiated during the SCTP handshake. Currently | |||
defined extensions include mechanisms for dynamic re-configuration of | ||||
streams [RFC6525] and IP addresses [RFC5061]. Furthermore, the | ||||
extension specified in [RFC3758] introduces the concept of partial | ||||
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 which 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. ICMP-based path | There is no protocol limit on the user message size. For MTU | |||
MTU discovery as specified for IPv4 in [RFC1191] and for IPv6 in | discovery the same mechanism than for TCP can be used | |||
[RFC1981] as well as packetization layer path MTU discovery as | [RFC1981][RFC4821], as well as utilizing probe packets with padding | |||
specified in [RFC4821] with probe packets using the padding chunks | chunks, as defined in [RFC4820]. | |||
defined in [RFC4820] are supported. | ||||
[RFC4960] specifies TCP-friendly congestion control to protect the | [RFC4960] specifies TCP-friendly congestion control to protect the | |||
network against overload; see Section 3.1 for more. SCTP also uses | network against overload. SCTP also uses sliding window flow control | |||
sliding window flow control to protect receivers against overflow. | to protect receivers against overflow. Similar to TCP, SCTP also | |||
Similar to TCP, SCTP also supports delaying acknowledgments. | supports delaying acknowledgments. [RFC7053] provides a way for the | |||
[RFC7053] provides a way for the sender of user messages to request | sender of user messages to request the immediate sending of the | |||
the 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 uni-directional 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 un-ordered, or ordered upon request by the upper | |||
upper layer. Un-ordered messages can be delivered as soon as they | layer. Un-ordered messages can be delivered as soon as they are | |||
are completely received. Ordered messages sent on the same stream | completely received. Ordered messages sent on the same stream are | |||
are delivered at the receiver in the same order as sent by the | delivered at the receiver in the same order as sent by the sender. | |||
sender. For user messages not requiring fragmentation, this | For user messages not requiring fragmentation, this minimizes head of | |||
minimizes head of line blocking. | line blocking. | |||
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. | |||
[I-D.ietf-tsvwg-sctp-ndata] overcomes this limitation. This draft | [I-D.ietf-tsvwg-sctp-ndata] overcomes this limitation. This draft | |||
also specifies multiple algorithms for the sender side selection of | also specifies multiple algorithms for the sender side selection of | |||
which streams to send data from, supporting a variety of scheduling | which streams to send data from, supporting a variety of scheduling | |||
algorithms including priority based methods. The stream re- | algorithms including priority based methods. The stream re- | |||
configuration extension defined in [RFC6525] allows streams to be | configuration extension defined in [RFC6525] allows streams to be | |||
reset during the lifetime of an association and to increase the | reset during the lifetime of an association and to increase the | |||
number of streams, if the number of streams negotiated in the SCTP | number of streams, if the number of streams negotiated in the SCTP | |||
handshake becomes insufficient. | handshake becomes insufficient. | |||
Each user message sent is either delivered to the receiver or, in | Each user message sent is either delivered to the receiver or, in | |||
case of excessive retransmissions, the association is terminated in a | case of excessive retransmissions, the association is terminated in a | |||
non-graceful way [RFC4960], similar to TCP behaviour. 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. Examples of these | specify the policy for abandoning user messages. | |||
policies defined in [RFC3758] and [RFC7496] are: | ||||
o Limiting the time a user message is dealt with by the sender. | ||||
o Limiting the number of retransmissions for each fragment of a user | ||||
message. If the number of retransmissions is limited to 0, one | ||||
gets a service similar to UDP. | ||||
o Abandoning messages of lower priority in case of a send buffer | ||||
shortage. | ||||
SCTP supports multi-homing. Each SCTP endpoint uses a list of IP- | SCTP supports multi-homing. 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 re-configuration 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 livetime 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. [I-D.ietf-tsvwg-sctp-failover] | reachable one, if one exists. | |||
specifies a quicker failover operation reducing the latency of the | ||||
failover. | ||||
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 un-ordered 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 | [I-D.ietf-tsvwg-natsupp] defines methods for endpoints and | |||
middleboxes to provide support NAT for SCTP over IPv4. For legacy | middleboxes to provide NAT traversal for SCTP over IPv4. For legacy | |||
NAT traversal, [RFC6951] defines the UDP encapsulation of SCTP- | NAT traversal, [RFC6951] defines the UDP encapsulation of SCTP- | |||
packets. Alternatively, SCTP packets can be encapsulated in DTLS | packets. Alternatively, SCTP packets can be encapsulated in DTLS | |||
packets as specified in [I-D.ietf-tsvwg-sctp-dtls-encaps]. The | packets as specified in [I-D.ietf-tsvwg-sctp-dtls-encaps]. The | |||
latter encapsulation is used within the WebRTC context. | latter encapsulation is used within the WebRTC context. | |||
SCTP has a well-defined API, described in the next subsection. | SCTP has a well-defined API, described in the next subsection. | |||
4.3.2. Interface Description | 3.3.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, 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 about parameters like | |||
retransmission thresholds, the path supervision parameters, the | retransmission thresholds, the path supervision parameters, the | |||
delayed acknowledgment timeout, and the fragmentation point. The | delayed acknowledgment timeout, and the fragmentation point. The | |||
API provides a mechanism to allow the SCTP stack to notify the | API provides a mechanism to allow the SCTP stack to notify the | |||
application about event 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 returned | |||
to the application. When sending user messages, the stream id, a | to the application. When sending user messages, the stream id, a | |||
payload protocol identifier, an indication whether ordered | payload protocol identifier, an indication whether ordered | |||
delivery is requested or not. These parameters can also be | delivery is requested or not. These parameters can also be | |||
provided on message reception. Additionally a context can be | provided on message reception. Additionally a context can be | |||
provided when sending, which can be use in case of send failures. | provided when sending, which can be use in case of send failures. | |||
The sending of arbitrary large user messages is supported. | The sending of arbitrary 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 PR-SCTP policy and the policy | |||
specific parameter. | specific parameter. Examples of these policies defined in | |||
[RFC3758] and [RFC7496] are: | ||||
* Limiting the time a user message is dealt with by the sender. | ||||
* Limiting the number of retransmissions for each fragment of a | ||||
user message. If the number of retransmissions is limited to | ||||
0, one gets a service similar to UDP. | ||||
* Abandoning messages of lower priority in case of a send buffer | ||||
shortage. | ||||
o the SCTP Authentication extension defined in [RFC4895] allowing to | o the SCTP Authentication extension defined in [RFC4895] allowing to | |||
manage the shared keys, the HMAC to use, set the chunk types which | manage the shared keys, the HMAC to use, set the chunk types which | |||
are only accepted in an authenticated way, and get the list of | are only accepted in an authenticated way, and get the list of | |||
chunks which are accepted by the local and remote end point in an | chunks which are accepted by the local and remote end point in an | |||
authenticated way. | 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 to manually add and delete local addresses | |||
for SCTP associations and the enabling of automatic address | for SCTP associations and the enabling of automatic address | |||
skipping to change at page 15, line 31 | skipping to change at page 15, line 21 | |||
are specifically marked as notifications. | 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 | cmsgs. These functions provide support for detecting partial | |||
delivery of user messages and notifications. | 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 | |||
behaviour 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. | |||
4.3.3. Transport Features | 3.3.3. Transport Features | |||
The transport features provided by SCTP are: | The transport features provided by SCTP are: | |||
o unicast. | o connection-oriented transport with feature negotiation and | |||
application-to-port mapping, | ||||
o connection setup with feature negotiation and application-to-port | ||||
mapping. | ||||
o port multiplexing. | ||||
o Uni-or bidirectional communication. | ||||
o message-oriented delivery supporting multiple concurrent streams. | o unicast transport, | |||
o fully reliable, partially reliable, or unreliable delivery. | o port multiplexing, | |||
o ordered and unordered delivery within a stream. | o uni- or bidirectional communication, | |||
o user message fragmentation and reassembly. | o message-oriented delivery with durable message framing supporting | |||
multiple concurrent streams, | ||||
o support for stream scheduling prioritization. | o fully reliable, partially reliable, or unreliable delivery (based | |||
on user specified policy to handle abandoned user messages) with | ||||
drop notification, | ||||
o user message bundling. | o ordered and unordered delivery within a stream, | |||
o flow control using a window-based mechanism. | o support for stream scheduling prioritization, | |||
o congestion control using methods similar to TCP. | o segmentation, | |||
o user message bundling, | ||||
o strong error/misdelivery detection (CRC32c). | o flow control using a window-based mechanism, | |||
o transport layer multihoming for resilience. | o congestion control using methods similar to TCP, | |||
o transport layer mobility. | o strong error detection (CRC32c), | |||
o resilience to network failure and/or handover. | o transport layer multihoming for resilience and mobility. | |||
4.4. User Datagram Protocol (UDP) | 3.4. User Datagram Protocol (UDP) | |||
The User Datagram Protocol (UDP) [RFC0768] [RFC2460] is an IETF | The User Datagram Protocol (UDP) [RFC0768] [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 used | error correction, congestion control, or flow control. It can be | |||
to send broadcast datagrams (IPv4) or multicast datagrams (IPv4 and | used to send broadcast datagrams (IPv4) or multicast datagrams (IPv4 | |||
IPv6), in addition to unicast and anycast datagrams. IETF guidance | and IPv6), in addition to unicast and anycast datagrams. IETF | |||
on the use of UDP is provided in {{I-D.ietf-tsvwg- rfc5405bis}}. UDP | guidance on the use of UDP is provided in | |||
is widely implemented and widely used by common applications, | [I-D.ietf-tsvwg-rfc5405bis]. UDP is widely implemented and widely | |||
including DNS. | used by common applications, including DNS. | |||
4.4.1. Protocol Description | 3.4.1. Protocol Description | |||
UDP is a connection-less protocol that maintains message boundaries, | UDP is a connection-less 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. Each stream of | independent messages, ordinarily called datagrams. It provides | |||
messages is independently managed, therefore retransmission does not | ||||
hold back data sent using other logical streams. 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, either 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] | |||
[I-D.ietf-tsvwg-rfc5405bis], certain special cases permit this use. | [I-D.ietf-tsvwg-rfc5405bis], certain special cases permit this use. | |||
These datagrams rely on the IPv4 header checksum to protect from | These datagrams rely on the IPv4 header checksum to protect from | |||
misdelivery to an unintended endpoint. IPv6 does not by permit UDP | misdelivery to an unintended endpoint. IPv6 does not permit UDP | |||
datagrams with no checksum, although in certain cases this rule may | datagrams with no checksum, although in certain cases this rule may | |||
be relaxed [RFC6935]. The checksum support considerations for | be relaxed [RFC6935]. | |||
omitting the checksum are defined in [RFC6936]. | ||||
UDP does not provide reliability and does not provide retransmission. | UDP does not provide reliability and does not provide retransmission. | |||
This implies messages may be re-ordered, lost, or duplicated in | This implies messages may be re-ordered, lost, or duplicated in | |||
transit. Note that due to the relatively weak form of checksum used | transit. Note that due to the relatively weak form of checksum used | |||
by UDP, applications that require end to end integrity of data are | by UDP, applications that require end to end integrity of data are | |||
recommended to include a stronger integrity check of their payload | recommended to include 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. | |||
skipping to change at page 17, line 17 | skipping to change at page 17, line 4 | |||
UDP does not provide reliability and does not provide retransmission. | UDP does not provide reliability and does not provide retransmission. | |||
This implies messages may be re-ordered, lost, or duplicated in | This implies messages may be re-ordered, lost, or duplicated in | |||
transit. Note that due to the relatively weak form of checksum used | transit. Note that due to the relatively weak form of checksum used | |||
by UDP, applications that require end to end integrity of data are | by UDP, applications that require end to end integrity of data are | |||
recommended to include a stronger integrity check of their payload | recommended to include 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 from other protocols (e.g., TCP) when sharing the same | messages from other protocols (e.g., TCP) when sharing the same | |||
network path. | network path. | |||
On transmission, UDP encapsulates each datagram into an IP packet, | On transmission, UDP encapsulates each datagram into a single IP | |||
which may in turn be fragmented by IP. Fragments are reassembled | packet or several IP packet fragments. This allows a datagram to be | |||
before delivery to the UDP receiver. | larger than the effective path MTU. Fragments are reassembled before | |||
delivery to the UDP receiver, making this transparent to the user of | ||||
the transport service. When the jumbograms are supported, larger | ||||
messages may be sent without performing fragmentation. | ||||
Applications that need to provide fragmentation or that have other | Applications that need to provide fragmentation or that have other | |||
requirements such as receiver flow control, congestion control, | requirements such as receiver flow control, congestion control, | |||
PathMTU discovery/PLPMTUD, support for ECN, etc need these to be | PathMTU discovery/PLPMTUD, support for ECN, etc. need these to be | |||
provided by protocols operating over UDP [I-D.ietf-tsvwg-rfc5405bis]. | provided by protocols operating over UDP [I-D.ietf-tsvwg-rfc5405bis]. | |||
4.4.2. Interface Description | 3.4.2. Interface Description | |||
[RFC0768] describes basic requirements for an API for UDP. Guidance | [RFC0768] describes basic requirements for an API for UDP. Guidance | |||
on use of common APIs is provided in [I-D.ietf-tsvwg-rfc5405bis]. | on use of common APIs is provided in [I-D.ietf-tsvwg-rfc5405bis]. | |||
A UDP endpoint consists of a tuple of (IP address, port number). | A UDP endpoint consists of a tuple of (IP address, port number). De- | |||
Demultiplexing using multiple abstract endpoints (sockets) on the | multiplexing using multiple abstract endpoints (sockets) on the same | |||
same IP address are supported. The same socket may be used by a | IP address is supported. The same socket may be used by a single | |||
single server to interact with multiple clients (note: this behavior | server to interact with multiple clients (note: this behavior differs | |||
differs from TCP, which uses a pair of tuples to identify a | from TCP, which uses a pair of tuples to identify a connection). | |||
connection). Multiple server instances (processes) that bind the | Multiple server instances (processes) that bind to the same socket | |||
same socket can cooperate to service multiple clients- the socket | can cooperate to service multiple clients. The socket implementation | |||
implementation arranges to not duplicate the same received unicast | arranges to not duplicate the same received unicast message to | |||
message to multiple server processes. | 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]. | [I-D.ietf-tsvwg-rfc5405bis]. | |||
4.4.3. Transport Features | 3.4.3. Transport Features | |||
The transport features provided by UDP are: | The transport features provided by UDP are: | |||
o unicast. | o unicast, multicast, anycast, or IPv4 broadcast transport, | |||
o multicast, anycast, or IPv4 broadcast. | ||||
o port multiplexing. A receiving port can be configured to receive | ||||
datagrams from multiple senders. | ||||
o message-oriented delivery. | o port multiplexing (where a receiving port can be configured to | |||
receive datagrams from multiple senders), | ||||
o Uni-or bidirectional communication. Transmission in each | o message-oriented delivery, | |||
direction is independent. | ||||
o non-reliable delivery. | o uni- or bidirectional communication where the transmissions in | |||
each direction are independent, | ||||
o non-ordered delivery. | o non-reliable delivery, | |||
o error detection: a segment checksum verifies delivery to the | o unordered delivery, | |||
correct endpoint and integrity of the data. This checksum is | ||||
optional for IPv4, and optional under specific conditions for IPv6 | ||||
where all or none of the payload data is protected. | ||||
o IPv6 jumbograms. | o error detection (implemented using a segment checksum to verify | |||
delivery to the correct endpoint and integrity of the data; | ||||
optional for IPv4 and optional under specific conditions for IPv6 | ||||
where all or none of the payload data is protected), | ||||
4.5. Lightweight User Datagram Protocol (UDP-Lite) | 3.5. 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 | |||
[I-D.ietf-tsvwg-rfc5405bis]. | [I-D.ietf-tsvwg-rfc5405bis]. A UDP-Lite service may support IPv4 | |||
broadcast, multicast, anycast and unicast, and IPv6 multicast, | ||||
4.5.1. Protocol Description | anycast and unicast. | |||
Like UDP, UDP-Lite is a connection-less datagram protocol, with no | ||||
connection setup or feature negotiation. It changes the semantics of | ||||
the UDP "payload length" field to that of a "checksum coverage | ||||
length" field, and is identified by a different IP protocol/next- | ||||
header value. Otherwise, UDP-Lite is semantically identical to UDP. | ||||
Applications using UDP-Lite therefore cannot make assumptions | ||||
regarding the correctness of the data received in the insensitive | ||||
part of the UDP-Lite payload. | ||||
In the same way as for UDP, mechanisms for receiver flow control, | ||||
congestion control, PMTU or PLPMTU discovery, support for ECN, etc | ||||
need to be provided by upper layer protocols | ||||
[I-D.ietf-tsvwg-rfc5405bis]. | ||||
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 support error tolerate payload corruption | discarded. One use is to support error tolerate payload corruption | |||
when used over paths that include error-prone links, another | when used over paths that include error-prone links, another | |||
application is when header integrity checks are required, but payload | application is when header integrity checks are required, but payload | |||
integrity is provided by some other mechanism (e.g., [RFC6936]). | integrity is provided by some other mechanism (e.g., [RFC6936]). | |||
A UDP-Lite service may support IPv4 broadcast, multicast, anycast and | 3.5.1. Protocol Description | |||
unicast, and IPv6 multicast, anycast and unicast. | ||||
4.5.2. Interface Description | Like UDP, UDP-Lite is a connection-less datagram protocol, with no | |||
connection setup or feature negotiation. It changes the semantics of | ||||
the UDP "payload length" field to that of a "checksum coverage | ||||
length" field, and is identified by a different IP protocol/next- | ||||
header value. The "checksum coverage length" field specifies the | ||||
intended checksum coverage, with the remaining unprotected part of | ||||
the payload called the "error-insensitive part". Applications using | ||||
UDP-Lite therefore cannot make assumptions regarding the correctness | ||||
of the data received in the insensitive part of the UDP-Lite payload. | ||||
Otherwise, UDP-Lite is semantically identical to UDP. In the same | ||||
way as for UDP, mechanisms for receiver flow control, congestion | ||||
control, PMTU or PLPMTU discovery, support for ECN, etc. needs to be | ||||
provided by upper layer protocols [I-D.ietf-tsvwg-rfc5405bis]. | ||||
3.5.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 [I-D.ietf-tsvwg-rfc5405bis]. | |||
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: at the sender, this specifies the intended checksum coverage, | value. The checksum coverage may also be made visible to the | |||
with the remaining unprotected part of the payload called the "error- | application via the UDP-Lite MIB module [RFC5097]. | |||
insensitive part". The checksum coverage may also be made visible to | ||||
the application via the UDP-Lite MIB module [RFC5097]. | ||||
4.5.3. Transport Features | 3.5.3. Transport Features | |||
The transport features provided by UDP-Lite are: | The transport features provided by UDP-Lite are: | |||
o unicast. | o unicast, multicast, anycast, or IPv4 broadcast transport (as for | |||
UDP), | ||||
o multicast, anycast, or IPv4 broadcast. | ||||
o port multiplexing (as for UDP). | ||||
o message-oriented delivery (as for UDP). | o port multiplexing (as for UDP), | |||
o Uni-or bidirectional communication. Transmission in each | o message-oriented delivery (as for UDP), | |||
direction is independent. | ||||
o non-reliable delivery (as for UDP). | o Uni- or bidirectional communication where the transmissions in | |||
each direction are independent (as for UDP), | ||||
o non-ordered delivery (as for UDP). | o non-reliable delivery (as for UDP), | |||
o misdelivery detection (the checksum always provides protection | o non-ordered delivery (as for UDP), | |||
from misdelivery). | ||||
o partial or full integrity protection. The checksum coverage field | o partial or full payload error detection (where the checksum | |||
indicates the size of the payload data covered by the checksum. | coverage field indicates the size of the payload data covered by | |||
the checksum). | ||||
4.6. Datagram Congestion Control Protocol (DCCP) | 3.6. Datagram Congestion Control Protocol (DCCP) | |||
Datagram Congestion Control Protocol (DCCP) [RFC4340] is an IETF | 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 describes the goals that DCCP sought to | |||
address [RFC4336]. It is suitable for applications that transfer | address [RFC4336]: 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 functions | application emerges. Specifically it includes core transport | |||
(feature negotiation, path state management, RTT calculation, PMTUD, | functions (feature negotiation, path state management, RTT | |||
etc): This allows applications to use a compatible method defining | calculation, PMTUD, etc.): DCCP applications select how they send | |||
how they send packets and where suitable to choose common algorithms | packets and, where suitable, choose common algorithms to manage their | |||
to manage their functions. Examples of suitable applications include | functions. Examples of applications that can benefit from such | |||
interactive applications, streaming media or on-line games [RFC4336]. | transport services include interactive applications, streaming media, | |||
or on-line games [RFC4336]. | ||||
4.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, providing a three- | |||
way handshake to allow a client and server to set up a connection, | way handshake to allow a client and server to set up a connection, | |||
and mechanisms for orderly completion and immediate teardown of a | and mechanisms for orderly completion and immediate teardown of a | |||
connection. The protocol is defined by a family of RFCs. | connection. | |||
A DCCP protocol instance can be extended [RFC4340] and tuned using | ||||
additional features. Some features are sender-side only, requiring | ||||
no negotiation with the receiver; some are receiver-side only; and | ||||
some are explicitly negotiated during connection setup. | ||||
DCCP uses a Connect packet to initiate a session, and permits each | ||||
endpoint to choose the features it wishes to support. Simultaneous | ||||
open [RFC5596], as in TCP, can enable interoperability in the | ||||
presence of middleboxes. The Connect packet includes a Service Code | ||||
[RFC5595] that identifies the application or protocol using DCCP, | ||||
providing middleboxes with information about the intended use of a | ||||
connection. | ||||
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 port and remote port | |||
numbers. At connection setup, DCCP also exchanges the service code | numbers. | |||
[RFC5595], a mechanism that allows transport instantiations to | ||||
indicate the service treatment that is expected from the network. | ||||
The protocol segments data into messages, typically sized to fit in | The protocol segments data into messages, typically sized to fit in | |||
IP packets, but which may be fragmented providing they are less than | IP packets, but which may be fragmented providing they are smaller | |||
the maximum packet size. A DCCP interface allows applications to | than the maximum packet size. A DCCP interface allows applications | |||
request fragmentation for packets larger than PMTU, but not larger | to request fragmentation for packets larger than PMTU, but not larger | |||
than the maximum packet size allowed by the current congestion | than the maximum packet size allowed by the current congestion | |||
control mechanism (CCMPS) [RFC4340]. | control mechanism (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 ordered or unordered delivery of data, and does not itself | support unordered delivery of data, and does not itself provide | |||
provide retransmission. DCCP supports reduced checksum coverage, a | retransmission. DCCP supports reduced checksum coverage, a partial | |||
partial integrity mechanism similar to UDP-Lite. There is also a | payload protection mechanism similar to UDP-Lite. There is also a | |||
Data Checksum option that when enabled, contains a strong CRC, to | Data Checksum option, which when enabled, contains a strong CRC, to | |||
enable endpoints to detect application data corruption - similar to | enable endpoints to detect application data corruption. | |||
SCTP. | ||||
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 protocol instance can be extended [RFC4340] and tuned using | DCCP supports negotiation of the congestion control profile between | |||
additional features. Some features are sender-side only, requiring | endpoints, to provide plug-and-play congestion control mechanisms. | |||
no negotiation with the receiver; some are receiver-side only; and | Examples of specified profiles include "TCP-like" [RFC4341], "TCP- | |||
some are explicitly negotiated during connection setup. | friendly" [RFC4342], and "TCP-friendly for small packets" [RFC5622]. | |||
Additional mechanisms are recorded in an IANA registry. | ||||
DCCP service is unicast-only. | ||||
It supports negotiation of the congestion control profile, to provide | ||||
plug- and-play congestion control mechanisms. Examples of specified | ||||
profiles include "TCP-like" [RFC4341], "TCP-friendly" [RFC4342], and | ||||
"TCP-friendly for small packets" [RFC5622]. Additional mechanisms | ||||
are recorded in an IANA registry. | ||||
DCCP uses a Connect packet to initiate a session, and permits half- | ||||
connections that allow each client to choose the features it wishes | ||||
to support. Simultaneous open [RFC5596], as in TCP, can enable | ||||
interoperability in the presence of middleboxes. The Connect packet | ||||
includes a Service Code field [RFC5595] designed to allow middleboxes | ||||
and endpoints to identify the characteristics required by a session. | ||||
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 in NAPT/NATs is defined in [RFC4340] and | natively supported. Support for DCCP in NAPT/NATs is defined in | |||
[RFC5595]. | [RFC4340] and [RFC5595]. Upper layer protocols specified on top of | |||
DCCP include DTLS [RFC5595], RTP [RFC5672], ICE/SDP [RFC6773]. | ||||
Upper layer protocols specified on top of DCCP include DTLS | ||||
[RFC5595], RTP [RFC5672], ICE/SDP [RFC6773]. | ||||
A common packet format has allowed tools to evolve that can read and | ||||
interpret DCCP packets (e.g., Wireshark). | ||||
4.6.2. Interface Description | 3.6.2. Interface Description | |||
API characteristics include: - Datagram transmission. - Notification | Functions expected for a DCCP API include: Open, Close and Management | |||
of the current maximum packet size. - Send and reception of zero- | of the progress a DCCP connection. The Open function provides | |||
length payloads. - Slow Receiver flow control at a receiver. - | feature negotiation, selection of an appropriate CCID for congestion | |||
ability to detect a slow receiver at the sender. | control and other parameters associated with the DCCP connection. A | |||
function allows an application to send DCCP datagrams, including | ||||
setting the required checksum coverage, and any required options. | ||||
(DCCP permits sending datagrams with a zero-length payload.) A | ||||
function allows reception of data, including indicating if the data | ||||
was used or dropped. Functions can also make the status of a | ||||
connection visible to an application, including detection of the | ||||
maximum packet size and the 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. | |||
4.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 setup with feature negotiation and application-to-port | ||||
mapping. | ||||
o Service Codes. Identifies the upper layer service to the endpoint | ||||
and network. | ||||
o port multiplexing. | ||||
o Uni-or bidirectional communication. | o connection-oriented communication with feature negotiation and | |||
application-to-port mapping, | ||||
o message-oriented delivery. | o signaling of application class for middlebox support (implemented | |||
using Service Codes), | ||||
o non-reliable delivery. | o port multiplexing, | |||
o ordered delivery. | o uni-or bidirectional communication, | |||
o message-oriented delivery, | ||||
o flow control. The slow receiver function allows a receiver to | o unreliable delivery with drop notification, | |||
control the rate of the sender. | ||||
o drop notification. Allows a receiver to notify which datagrams | o unordered delivery, | |||
were not delivered to the peer upper layer protocol. | ||||
o timestamps. | o flow control (implemented using the slow receiver function) | |||
o partial and full integrity protection (with optional strong | o partial and full payload error detection (with optional strong | |||
integrity check). | integrity check). | |||
4.7. Internet Control Message Protocol (ICMP) | 3.7. Internet Control Message Protocol (ICMP) | |||
The Internet Control Message Protocol (ICMP) [RFC0792] for IPv4 and | The Internet Control Message Protocol (ICMP) [RFC0792] for IPv4 and | |||
[RFC4433] for IPv6 are IETF standards track protocols. | ICMP for IPv6 [RFC4433] are IETF standards track protocols. It is a | |||
connection-less unidirectional protocol that delivers individual | ||||
ICMP is a connection-less unidirectional protocol that delivers | messages, without error correction, congestion control, or flow | |||
individual messages, without error correction, congestion control, or | control. Messages may be sent as unicast, IPv4 broadcast or | |||
flow 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. | |||
4.7.1. Protocol Description | Transport Protocols and upper layer protocols can use received ICMP | |||
messages to help them take appropriate decisions when network or | ||||
endpoint errors are reported. For example, to implement, ICMP-based | ||||
Path MTU discovery [RFC1191][RFC1981] or assist in Packetization | ||||
Layer Path MTU Discovery (PMTUD) [RFC4821]. Such reactions to | ||||
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 | ||||
therefore needs to ensure that all messages are appropriately | ||||
validated, by checking the payload of the messages to ensure these | ||||
are received in response to actually transmitted traffic (e.g., a | ||||
reported error condition that corresponds to a UDP datagram or TCP | ||||
segment was actually sent by the application). This requires context | ||||
[RFC6056], such as local state about communication instances to each | ||||
destination (e.g., in the TCP, DCCP, or SCTP protocols). This state | ||||
is not always maintained by UDP-based applications | ||||
[I-D.ietf-tsvwg-rfc5405bis]. | ||||
ICMP is a connection-less unidirectional protocol that delivers | 3.7.1. Protocol Description | |||
individual messages. The protocol uses independent messages, | ||||
ordinarily called datagrams. Each message is required to carry a | ICMP is a connection-less unidirectional protocol, It delivers | |||
checksum as an integrity check and to protect from misdelivery to an | independent messages, called datagrams. Each message is required to | |||
unintended endpoint. | carry a checksum as an integrity check and to protect from mis- | |||
delivery 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 [RFC1716] addressed to the sender of a | [RFC1122] or network device [RFC1716] 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) | neighbor discovery [RFC2461] [RFC3971]} (provided by ARP for IPv4) | |||
and the Multicast Listener Discovery (MLD) [RFC2710] group management | and the 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 can not 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. | |||
Transport Protocols and upper layer protocols can use received ICMP | 3.7.2. Interface Description | |||
messages to help them take appropriate decisions when network or | ||||
endpoint errors are reported. For example to implement, ICMP-based | ICMP processing is integrated in many connection-oriented transports, | |||
Path MTU discovery [RFC1191][RFC1981] or assist in Packetization | but like other functions needs to be provided by an upper-layer | |||
Layer Path MTU Discovery (PMTUD) [RFC4821]. Such reactions to | protocol when using UDP and UDP-Lite. | |||
received messages need to protects from off-path data injection | ||||
[I-D.ietf-tsvwg-rfc5405bis], avoiding an application receiving | On some stacks, a bound socket also allows a UDP application to be | |||
packets that were created by an unauthorized third party. An | notified when ICMP error messages are received for its transmissions | |||
application therefore needs to ensure that all messages are | ||||
appropriately validated, by checking the payload of the messages to | ||||
ensure these are received in response to actually transmitted traffic | ||||
(e.g., a reported error condition that corresponds to a UDP datagram | ||||
or TCP segment was actually sent by the application). This requires | ||||
context [RFC6056], such as local state about communication instances | ||||
to each destination (e.g., in the TCP, DCCP, or SCTP protocols). | ||||
This state is not always maintained by UDP-based applications | ||||
[I-D.ietf-tsvwg-rfc5405bis]. | [I-D.ietf-tsvwg-rfc5405bis]. | |||
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] [I-D.ietf-tsvwg-rfc5405bis]. | |||
4.7.2. Interface Description | 3.7.3. Transport Features | |||
ICMP processing is integrated into many connection-oriented | ||||
transports, but like other functions needs to be provided by an | ||||
upper-layer protocol when using UDP and UDP-Lite. On some stacks, a | ||||
bound socket also allows a UDP application to be notified when ICMP | ||||
error messages are received for its transmissions | ||||
[I-D.ietf-tsvwg-rfc5405bis]. | ||||
4.7.3. Transport Features | ||||
The transport features provided by ICMP are: | ||||
o unidirectional. | ||||
o multicast, anycast and IP4 broadcast. | ||||
o message-oriented delivery. | ||||
o non-reliable delivery. | ||||
o non-ordered delivery. | ||||
o error and misdelivery detection (checksum). | ICMP does not provide any transport service directly to applications. | |||
Used together with other transport protocols, it provides | ||||
transmission of control, error, and measurement data between | ||||
endpoints, or from devices along the path to one endpoint. | ||||
4.8. Realtime Transport Protocol (RTP) | 3.8. Realtime 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 network services, including TCP, UDP, | data, over multicast or unicast transport services, including TCP, | |||
UDP-Lite, or DCCP. | UDP, UDP-Lite, DCCP, TLS and DTLS. | |||
4.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 | |||
Real Time 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 media formats | transport media streams. The RFC-series specifies RTP payload | |||
allow packets to carry a wide range of media, and specifies a wide | formats that allow packets to carry a wide range of media, and | |||
range of multiplexing, error control and other support mechanisms. | specifies a wide range of multiplexing, error control and other | |||
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. RTP may run over a congestion-controlled or non- | single RTP packet. | |||
congestion-controlled transport protocol. | ||||
An RTP receiver collects RTP packets from network, validates them for | An RTP receiver collects RTP packets from the network, validates them | |||
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 | play-out 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. | are decompressed to display or store the data. Some uses of RTP are | |||
able to exploit the partial payload protection features offered by | ||||
DCCP and UDP-Lite. | ||||
RTCP is a control protocol that works alongside a RTP flow. Both the | RTCP is a control protocol that works alongside an RTP flow. Both | |||
RTP sender and receiver can send RTCP report packets. This is used | the RTP sender and receiver will send RTCP report packets. This is | |||
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. | |||
4.8.2. Interface Description | 3.8.2. Interface Description | |||
There is no standard application programming interface defined for | There is no standard application programming interface defined for | |||
RTP or RTCP. Implementations are typically tightly integrated with a | RTP or RTCP. Implementations are typically tightly integrated with a | |||
particular application, and closely follow the principles of | particular application, and closely follow the principles of | |||
application level framing and integrated layer processing [ClarkArch] | application level framing and integrated layer processing [ClarkArch] | |||
in media processing [RFC2736], error recovery and concealment, rate | in media processing [RFC2736], error recovery and concealment, rate | |||
adaptation, and security [RFC7202]. Accordingly, RTP implementations | adaptation, and security [RFC7202]. Accordingly, RTP implementations | |||
tend to be targeted at particular application domains (e.g., voice- | tend to be targeted at particular application domains (e.g., voice- | |||
over-IP, IPTV, or video conferencing), with a feature set optimised | over-IP, IPTV, or video conferencing), with a feature set optimized | |||
for that domain, rather than being general purpose implementations of | for that domain, rather than being general purpose implementations of | |||
the protocol. | the protocol. | |||
4.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 transport. | o unicast, multicast or IPv4 broadcast (provided by lower layer | |||
protocol), | ||||
o multicast, anycast or IPv4 broadcast. | ||||
o port multiplexing. | ||||
o Uni-or bidirectional communication. | ||||
o message-oriented delivery. | ||||
o associated protocols for connection setup with feature negotiation | o port multiplexing (provided by lower layer protocol), | |||
and application-to-port mapping. | ||||
o support for media types and other extensions. | o uni- or bidirectional communication (provided by lower layer | |||
protocol), | ||||
o a range of reliability functions, including the possibility of | o message-oriented delivery with support for media types and other | |||
using packet erasure coding. | extensions, | |||
o segmentation and aggregation. | o reliable delivery when using erasure coding or unreliable delivery | |||
with drop notification (if supported by lower layer protocol), | ||||
o performance reporting. | o connection setup with feature negotiation (using associated | |||
protocols) and application-to-port mapping (provided by lower | ||||
layer protocol), | ||||
o drop notification. | o segmentation, | |||
o timestamps. | o performance metric reporting (using associated protocols). | |||
4.9. File Delivery over Unidirectional Transport/Asynchronous Layered | 3.9. File Delivery over Unidirectional Transport/Asynchronous Layered | |||
Coding Reliable Multicast (FLUTE/ALC) | Coding Reliable Multicast (FLUTE/ALC) | |||
FLUTE/ALC is an IETF standards track protocol specified in [RFC6726] | FLUTE/ALC is an IETF standards track protocol specified in [RFC6726] | |||
and [RFC5775]. Asynchronous Layer Coding (ALC) provides an | and [RFC5775]. It provides object-oriented delivery of discrete data | |||
underlying reliable transport service and FLUTE a file-oriented | or files. Asynchronous Layer Coding (ALC) provides an underlying | |||
specialization of the ALC service (e.g., to carry associated | reliable transport service and FLUTE a file-oriented specialization | |||
metadata). The [RFC6726] and [RFC5775] protocols are non-backward- | of the ALC service (e.g., to carry associated metadata). The | |||
compatible updates of the [RFC3926] and [RFC3450] experimental | [RFC6726] and [RFC5775] protocols are non-backward-compatible updates | |||
protocols; these experimental protocols are currently largely | of the [RFC3926] and [RFC3450] experimental protocols; these | |||
deployed in the 3GPP Multimedia Broadcast and Multicast Services | experimental protocols are currently largely deployed in the 3GPP | |||
(MBMS) (see [MBMS], section 7) and similar contexts (e.g., the | Multimedia Broadcast and Multicast Services (MBMS) (see [MBMS], | |||
Japanese ISDB-Tmm standard). | section 7) and similar contexts (e.g., the Japanese ISDB-Tmm | |||
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". Transmissions happen either in push mode, | or memory-based "objects". Although FLUTE/ALC is not well adapted to | |||
where content is sent once, or in on-demand mode, where content is | byte- and message-streaming, there is an exception: FLUTE/ALC is used | |||
continuously sent during periods of time that can largely exceed the | to carry 3GPP Dynamic Adaptive Streaming over HTTP (DASH) when | |||
average time required to download the session objects (see [RFC5651], | scalability is a requirement (see [MBMS], section 5.6). | |||
section 4.2). | ||||
Although FLUTE/ALC is not well adapted to byte- and message- | FLUTE/ALC's reliability, delivery mode, congestion control, and flow/ | |||
streaming, there is an exception: FLUTE/ALC is used to carry 3GPP | rate control mechanisms can be separately controlled to meet | |||
Dynamic Adaptive Streaming over HTTP (DASH) when scalability is a | different application needs. Section 4.1 of | |||
requirement (see [MBMS], section 5.6). In that case, each Audio/ | ||||
Video segment is transmitted as a distinct FLUTE/ALC object in push | ||||
mode. FLUTE/ALC uses packet erasure coding (also known as | ||||
Application-Level Forward Erasure Correction, or AL-FEC) in a | ||||
proactive way. The goal of using AL-FEC is both to increase the | ||||
robustness in front of packet erasures and to improve the efficiency | ||||
of the on-demand service. FLUTE/ALC transmissions can be governed by | ||||
a congestion control mechanism such as the "Wave and Equation Based | ||||
Rate Control" (WEBRC) [RFC3738] when FLUTE/ALC is used in a layered | ||||
transmission manner, with several session channels over which ALC | ||||
packets are sent. However many FLUTE/ALC deployments target pre- | ||||
provisioned networks and involve only Constant Bit Rate (CBR) | ||||
channels with no competing flows, for which a sender-based rate | ||||
control mechanism is sufficient. In any case, FLUTE/ALC's | ||||
reliability, delivery mode, congestion control, and flow/rate control | ||||
mechanisms are distinct components that can be separately controlled | ||||
to meet different application needs. Section 4.1 of | ||||
[I-D.ietf-tsvwg-rfc5405bis] describes multicast congestion control | [I-D.ietf-tsvwg-rfc5405bis] describes multicast congestion control | |||
requirements for UDP. | requirements for UDP. | |||
4.9.1. Protocol Description | 3.9.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 in- | |||
memory content, using either a push or an on-demand mode. in push | 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. | exceed the average time required to download the session objects (see | |||
[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 case, | |||
data content is typically sent continuously, in loops (also known as | data content is typically sent continuously, in loops (also known as | |||
"carousels"). FLUTE/ALC also supports the transfer of an object | "carousels"). FLUTE/ALC also supports the transfer of an object | |||
stream, with loose real-time constraints. This is particularly | stream, with loose real-time constraints. This is particularly | |||
useful to carry 3GPP DASH when scalability is a requirement and | useful to carry 3GPP DASH when scalability is a requirement and | |||
unicast transmissions over HTTP cannot be used ([MBMS], section 5.6). | unicast transmissions over HTTP cannot be used ([MBMS], section 5.6). | |||
In this case, packets are sent in sequence using push mode. FLUTE/ | In this case, packets are sent in sequence using push mode. FLUTE/ | |||
ALC is not well adapted to byte- and message-streaming and other | ALC is not well adapted to byte- and message-streaming and other | |||
skipping to change at page 28, line 28 | skipping to change at page 27, line 21 | |||
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 | ||||
relies on the 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 (AL- | |||
FEC). AL-FEC encoding is proactive (since there is no feedback and | FEC). AL-FEC encoding is proactive (since there is no feedback and | |||
therefore no (N)ACK-based retransmission) and ALC packets containing | therefore no (N)ACK-based retransmission) and ALC packets containing | |||
repair data are sent along with ALC packets containing source data. | repair data are sent along with ALC packets containing source data. | |||
Several FEC Schemes have been standardized; FLUTE/ALC does not | Several FEC Schemes have been standardized; FLUTE/ALC does not | |||
mandate the use of any particular one. Several strategies concerning | mandate the use of any particular one. Several strategies concerning | |||
the transmission order of ALC source and repair packets are possible, | the transmission order of ALC source and repair packets are possible, | |||
in particular in on-demand mode where it can deeply impact the | in particular in on-demand mode where it can deeply impact the | |||
service provided (e.g., to favor the recovery of objects in sequence, | service provided (e.g., to favor the recovery of objects in sequence, | |||
skipping to change at page 29, line 16 | skipping to change at page 28, line 13 | |||
([RFC6726], section 1.1.4). FLUTE/ALC is often used over a network | ([RFC6726], section 1.1.4). FLUTE/ALC is often used over a network | |||
path with pre-provisioned capacity [I-D.ietf-tsvwg-rfc5405bis] where | path with pre-provisioned capacity [I-D.ietf-tsvwg-rfc5405bis] where | |||
there are no flows competing for capacity. In this case, a sender- | there are no flows competing for capacity. In this case, a sender- | |||
based rate control mechanism and a single channel is sufficient. | based rate control mechanism and a single channel is 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. | |||
4.9.2. Interface Description | 3.9.2. Interface Description | |||
The FLUTE/ALC specification does not describe a specific application | The FLUTE/ALC specification does not describe a specific application | |||
programming interface (API) to control protocol operation. | programming interface (API) to control protocol operation. | |||
Open source reference implementations of FLUTE/ALC are available at | Open source reference implementations of FLUTE/ALC are available at | |||
http://planete-bcast.inrialpes.fr/ (no longer maintained) and | http://planete-bcast.inrialpes.fr/ (no longer maintained) and | |||
http://mad.cs.tut.fi/ (no longer maintained), and these | http://mad.cs.tut.fi/ (no longer maintained), and these | |||
implementations specify and document their own APIs. Commercial | implementations specify and document their own APIs. Commercial | |||
versions are also available, some derived from the above | versions are also available, some derived from the above | |||
implementations, with their own API. | implementations, with their own API. | |||
4.9.3. Transport Features | 3.9.3. Transport Features | |||
The transport features provided by FLUTE/ALC are: | The transport features provided by FLUTE/ALC are: | |||
o unicast | o unicast, multicast, anycast or IPv4 broadcast transmission, | |||
o multicast, anycast or IPv4 broadcast. | ||||
o per-object dynamic meta-data delivery. | ||||
o push delivery or on-demand delivery service. | o object-oriented delivery of discrete data or files and associated | |||
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). | memory objects), using proactive packet erasure coding (AL-FEC) to | |||
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 per-packet authentication, integrity, and anti-replay services. | o error detection (based on the UDP checksum), | |||
o proactive packet erasure coding (AL-FEC) to recover from packet | o per-packet authentication, | |||
erasures and improve the on-demand delivery service, | ||||
o error detection (through UDP). | o per-packet integrity, | |||
o per-packet replay protection, | ||||
o congestion control for layered flows (e.g., with WEBRC). | o congestion control for layered flows (e.g., with WEBRC). | |||
4.10. NACK-Oriented Reliable Multicast (NORM) | 3.10. NACK-Oriented Reliable Multicast (NORM) | |||
NORM is an IETF standards track protocol specified in [RFC5740]. The | NORM is an IETF standards track protocol specified in [RFC5740]. It | |||
protocol was designed to support reliable bulk data dissemination to | provides object-oriented delivery of discrete data or files. | |||
receiver groups using IP Multicast but also provides for point-to- | ||||
The protocol was designed to support reliable bulk data dissemination | ||||
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. NORM is designed to incorporate packet | byte- and message-streaming. | |||
erasure coding as an inherent part of its selective ARQ in response | ||||
to receiver negative acknowledgments. The packet erasure coding can | ||||
also be proactively applied for forward protection from packet loss. | ||||
NORM transmissions are governed by the TCP-friendly congestion | ||||
control. NORM's reliability, congestion control, and flow control | ||||
mechanism are distinct components and can be separately controlled to | ||||
meet different application needs. | ||||
4.10.1. Protocol Description | NORM can incorporate packet erasure coding as a part of its selective | |||
ARQ in response to negative acknowledgments from the receiver. The | ||||
packet erasure coding can also be proactively applied for forward | ||||
protection from packet loss. NORM transmissions are governed by the | ||||
TCP-friendly congestion control. The reliability, congestion control | ||||
and flow control mechanisms can be separately controlled to meet | ||||
different application needs. | ||||
3.10.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 and 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/re-join 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 | [RFC3452] 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 uses 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) [RFC4324] 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 (e..g, loss event, ECN event, etc) information from | congestion event information (e.g., reflecting a loss event or ECN | |||
the receiver(s) to support dynamic rate control adjustment. The TCP- | event) from the receiver(s) to support dynamic adjustment or the | |||
Friendly Multicast Congestion Control (TFMCC) [RFC4654] used provides | rate. The TCP-Friendly Multicast Congestion Control (TFMCC) | |||
some extra features to support multicast but is functionally | [RFC4654] provides extra features to support multicast, but is | |||
equivalent to TFRC in the unicast case. | functionally equivalent to TFRC for unicast. | |||
NORM's reliability mechanism is decoupled from congestion control. | Error detection and verification of the protocol control information | |||
This allows alternative arrangements of transport services to be | relies on the on the underlying transport(e.g., UDP checksum). | |||
invoked. For example, fixed-rate reliable delivery can be supported | ||||
or unreliable (but optionally "better than best effort" via packet | ||||
erasure coding) delivery with rate- control per TFRC can be achieved. | ||||
Additionally, alternative congestion control techniques may be | ||||
applied. For example, TFRC rate control with congestion event | ||||
detection based on ECN for links with high packet loss (e.g., | ||||
wireless) has been implemented and demonstrated with NORM. | ||||
While NORM is NACK-based for reliability transfer, it also supports a | The reliability mechanism is decoupled from congestion control. This | |||
allows invocation of alternative arrangements of transport services. | ||||
For example, to support, fixed-rate reliable delivery or unreliable | ||||
delivery (that may optionally be "better than best effort" via packet | ||||
erasure coding) using TFRC. Alternative congestion control | ||||
techniques may be applied. For example, TFRC rate control with | ||||
congestion event detection based on ECN. | ||||
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. Again, since this mechanism is decoupled from the | flow control. This mechanism is decoupled from the reliability and | |||
reliability and congestion control, applications that have different | congestion control, supporting applications with different needs. | |||
needs in this aspect can use the protocol differently. One example | One example is use of NORM for quasi-reliable delivery, where timely | |||
is the use of NORM for quasi-reliable delivery where timely delivery | delivery of newer content may be favored over completely reliable | |||
of newer content may be favored over completely reliable delivery of | delivery of older content within buffering and RTT constraints. | |||
older content within buffering and RTT constraints. | ||||
4.10.2. Interface Description | 3.10.2. Interface Description | |||
The NORM specification does not describe a specific application | The NORM specification does not describe a specific application | |||
programming interface (API) to control protocol operation. A freely- | programming interface (API) to control protocol operation. A freely- | |||
available, open source reference implementation of NORM is available | available, open source reference implementation of NORM is available | |||
at https://www.nrl.navy.mil/itd/ncs/products/norm, and a documented | at 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. | |||
4.10.3. Transport Features | 3.10.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, | |||
o stream-oriented delivery in a single stream. | ||||
o object-oriented delivery of discrete data or file items. | o unidirectional communication, | |||
o reliable delivery. | o stream-oriented delivery in a single stream or object-oriented | |||
delivery of in-memory data or file bulk content objects, | ||||
o unordered unidirectional delivery (of in-memory data or file bulk | o fully reliable (NACK-based) or partially reliable (using erasure | |||
content objects). | coding both proactively and as part of ARQ) delivery, | |||
o error detection (UDP checksum). | o unordered delivery, | |||
o segmentation. | o error detection (relies on UDP checksum), | |||
o data bundling (Nagle's algorithm). | o segmentation, | |||
o flow control (timer-based and/or ack-based). | o data bundling (using Nagle's algorithm), | |||
o congestion control. | o flow control (timer-based and/or ack-based), | |||
o packet erasure coding (both proactively and as part of ARQ). | o congestion control (also supporting fixed rate reliable or | |||
unreliable delivery). | ||||
4.11. Transport Layer Security (TLS) and Datagram TLS (DTLS) as a | 3.11. Transport Layer Security (TLS) and Datagram TLS (DTLS) as a | |||
pseudotransport | pseudotransport | |||
Transport Layer Security (TLS) and Datagram TLS (DTLS) are IETF | Transport Layer Security (TLS) [RFC5246]} and Datagram TLS (DTLS) | |||
protocols that provide several security-related features to | [RFC6347]} are IETF protocols that provide several security-related | |||
applications. TLS is designed to run on top of a reliable streaming | features to applications. TLS is designed to run on top of a | |||
transport protocol (usually TCP), while DTLS is designed to run on | reliable streaming transport protocol (usually TCP), while DTLS is | |||
top of a best-effort datagram protocol (UDP or DCCP [RFC5238]). At | designed to run on top of a best-effort datagram protocol (UDP or | |||
the time of writing, the current version of TLS is 1.2; which is | DCCP [RFC5238]). At the time of writing, the current version of TLS | |||
defined in [RFC5246]. DTLS provides nearly identical functionality | is 1.2; which is defined in [RFC5246]. DTLS provides nearly | |||
to applications; it is defined in [RFC6347] and its current version | identical functionality to applications; it is defined in [RFC6347] | |||
is also 1.2. The TLS protocol evolved from the Secure Sockets Layer | and its current version is also 1.2. The TLS protocol evolved from | |||
(SSL) protocols developed in the mid 90s to support protection of | the Secure Sockets Layer (SSL) protocols developed in the mid-1990s | |||
HTTP traffic. | to support 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. | |||
4.11.1. Protocol Description | 3.11.1. Protocol Description | |||
Both TLS and DTLS provide the same security features and can thus be | Both TLS and DTLS provide the same security features and can thus be | |||
discussed together. The features they provide are: | discussed together. The features they provide are: | |||
o Confidentiality | o Confidentiality | |||
o Data integrity | o Data integrity | |||
o Peer authentication (optional) | o Peer authentication (optional) | |||
o Perfect forward secrecy (optional) | o Perfect forward secrecy (optional) | |||
The authentication of the peer entity can be omitted; a common web | The authentication of the peer entity can be omitted; a common web | |||
use case is where the server is authenticated and the client is not. | use case is where the server is authenticated and the client is not. | |||
TLS also provides a completely anonymous operation mode in which | TLS also provides a completely anonymous operation mode in which | |||
neither peer's identity is authenticated. It is important to note | neither peer's identity is authenticated. It is important to note | |||
that TLS itself does not specify how a peering entity's identity | that TLS itself does not specify how a peering entity's identity | |||
should be interpreted. For example, in the common use case of | should be interpreted. For example, in the common use case of | |||
authentication by means of an X.509 certificate, it is the | authentication by means of an X.509 certificate, it is the | |||
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. Perfect forward secrecy, | is acceptable for authorization decisions. | |||
if enabled and supported by the selected algorithms, ensures that | ||||
traffic encrypted and captured during a session at time t0 cannot be | Perfect forward secrecy, if enabled and supported by the selected | |||
later decrypted at time t1 (t1 > t0), even if the long-term secrets | algorithms, ensures that traffic encrypted and captured during a | |||
of the communicating peers are later compromised. | 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 | ||||
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, re-ordered, 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). | |||
skipping to change at page 33, line 45 | skipping to change at page 32, line 47 | |||
Generally, DTLS follows the TLS design as closely as possible. To | Generally, DTLS follows the TLS design as closely as possible. To | |||
operate over datagrams, DTLS includes a sequence number and limited | operate over datagrams, DTLS includes a sequence number and limited | |||
forms of retransmission and fragmentation for its internal | forms of retransmission and fragmentation for its internal | |||
operations. The sequence number may be used for detecting replayed | operations. The sequence number may be used for detecting replayed | |||
information, according to the windowing procedure described in | information, according to the windowing procedure described in | |||
Section 4.1.2.6 of [RFC6347]. DTLS forbids the use of stream | Section 4.1.2.6 of [RFC6347]. DTLS forbids the use of stream | |||
ciphers, which are essentially incompatible when operating on | ciphers, which are essentially incompatible when operating on | |||
independent encrypted records. | independent encrypted records. | |||
4.11.2. Interface Description | 3.11.2. Interface Description | |||
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. There may also be special APIs | and communications/connections. There may also be special APIs | |||
required to deal with time and/or random numbers, both of which are | required to deal with time and/or random numbers, both of which are | |||
needed by a variety of encryption algorithms and protocols. | needed by a variety of encryption algorithms and protocols. | |||
Considerable care is required in the use of TLS APIs to ensure | Considerable care is required in the use of TLS APIs to ensure | |||
skipping to change at page 34, line 24 | skipping to change at page 33, line 26 | |||
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 and method (protocol), session, context, cipher | |||
and connection. After initializing the library and setting the | and connection. After initializing the library and setting the | |||
method, a cipher suite is chosen and used to configure a context | method, a cipher suite is chosen and used to configure a context | |||
object. Session objects may then be minted according to the | object. Session objects may then be minted according to the | |||
parameters present in a context object and associated with individual | parameters 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. | |||
4.11.3. Transport Features | 3.11.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). | (MAC), | |||
o data encryption. | o data encryption, | |||
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 35, line 9 | skipping to change at page 34, line 11 | |||
compression parameters when a connection is first set up. In DTLS, | compression parameters when a connection is first set up. In DTLS, | |||
this protocol also has a basic fragmentation and retransmission | this protocol also has a basic fragmentation and retransmission | |||
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, | |||
o cryptographic integrity protection. | o cryptographic integrity protection. | |||
4.12. Hypertext Transport Protocol (HTTP) over TCP as a pseudotransport | Both TLS and DTLS are unicast-only. | |||
3.12. 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. Version 1.1 of the protocol is | protocol widely used on the Internet. It provides object-oriented | |||
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 in [RFC7540]. HTTP is usually transported | |||
over TCP using port 80 and 443, although it can be used with other | over TCP using port 80 and 443, although it can be used with other | |||
transports. When used over TCP it inherits its properties. | transports. When used over TCP it inherits its properties. | |||
HTTP is used as a substrate for other application-layer protocols. | Application layer protocols may use HTTP as a substrate with an | |||
There are various reasons for this practice listed in [RFC3205]; | existing method and data formats, or specify new methods and data | |||
these include being a well-known and well-understood protocol, | formats. There are various reasons for this practice listed in | |||
reusability of existing servers and client libraries, easy use of | [RFC3205]; these include being a well-known and well-understood | |||
existing security mechanisms such as HTTP digest authentication | protocol, reusability of existing servers and client libraries, easy | |||
[RFC2617] and TLS [RFC5246], the ability of HTTP to traverse | use of existing security mechanisms such as HTTP digest | |||
firewalls makes it work over many types of infrastructure, and in | authentication [RFC2617] and TLS [RFC5246], the ability of HTTP to | |||
cases where a application server often needs to support HTTP anyway. | traverse firewalls makes it work over many types of infrastructure, | |||
and in cases where an application server often needs 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 and provides | |||
some guidelines and concerns about the use of HTTP standard port 80 | some guidelines and identifies concerns about the use of HTTP | |||
and 443, the use of HTTP URL scheme and interaction with existing | standard port 80 and 443, the use of HTTP URL scheme and interaction | |||
firewalls, proxies and NATs. | with existing firewalls, proxies and NATs. | |||
4.12.1. Protocol Description | Representational State Transfer (REST) [REST] is another example of | |||
how applications can use HTTP as transport protocol. REST is an | ||||
architecture style that may be used to build applications using HTTP | ||||
as a communication protocol. | ||||
3.12.1. Protocol Description | ||||
Hypertext Transfer Protocol (HTTP) is a request/response protocol. A | Hypertext Transfer Protocol (HTTP) is a request/response protocol. A | |||
client sends a request containing a request method, URI and protocol | client sends a request containing a request method, URI and protocol | |||
version followed by a MIME-like message (see [RFC7231] for the | version followed by a MIME-like message (see [RFC7231] for the | |||
differences between an HTTP object and a MIME message), containing | differences between an HTTP object and a MIME message), containing | |||
information about the client and request modifiers. The message can | information about the client and request modifiers. The message can | |||
contain a message body carrying application data as well. The server | also contain a message body carrying application data. The server | |||
responds with a status or error code followed by a MIME-like message | responds with a status or error code followed by a MIME-like message | |||
containing information about the server and information about carried | containing information about the server and information about the | |||
data and it can include a message body. It is possible to specify a | data. This may include a message body. It is possible to specify a | |||
data format for the message body using MIME media types [RFC2045]. | data format for the message body using MIME media types [RFC2045]. | |||
Furthermore, the protocol has numerous additional features; features | The protocol has additional features, some relevant to pseudo- | |||
relevant to pseudotransport are described below. | transport are described below. | |||
Content negotiation, specified in [RFC7231], is a mechanism provided | Content negotiation, specified in [RFC7231], is a mechanism provided | |||
by HTTP for selecting a representation on a requested resource. The | by HTTP to allow selection of a representation for a requested | |||
client and server negotiate acceptable data formats, charsets, data | resource. The client and server negotiate acceptable data formats, | |||
encoding (e.g., data can be transferred compressed using gzip), etc. | character sets, data encoding (e.g., data can be transferred | |||
HTTP can accommodate exchange of messages as well as data streaming | compressed using gzip). HTTP can accommodate exchange of messages as | |||
(using chunked transfer encoding [RFC7230]). It is also possible to | well as data streaming (using chunked transfer encoding [RFC7230]). | |||
request a part of a resource using range requests specified in | It is also possible to request a part of a resource using an object | |||
[RFC7233]. The protocol provides powerful cache control signalling | range request [RFC7233]. The protocol provides powerful cache | |||
defined in [RFC7234]. | control signaling defined in [RFC7234]. | |||
HTTP 1.1's and HTTP 2.0's persistent connections can be use to | The persistent connections of HTTP 1.1 and HTTP 2.0 allow multiple | |||
perform multiple request-response transactions during the life-time | request- response transactions (streams) during the life-time of a | |||
of a single HTTP connection. Moreover, HTTP 2.0 connections can | single HTTP connection. HTTP 2.0 connections can multiplex many | |||
multiplex many request/response pairs in parallel on a single | request/response pairs in parallel on a single transport connection. | |||
transport connection. This reduces connection establishment overhead | This reduces overhead during connection establishment and mitigates | |||
and the effect of the transport layer slow-start on each transaction, | transport layer slow-start that would have otherwise been incurred | |||
important in reducing latency for HTTP's primary use case. | for each transaction. Both are important to reduce latency for | |||
HTTP's primary use case. | ||||
It is possible to combine HTTP with security mechanisms, like TLS | HTTP can be combined with security mechanisms, such as TLS (denoted | |||
(denoted by HTTPS), which 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, encryption). The TLS Application- | |||
Layer Protocol Negotiation (ALPN) extension [RFC7301] can be used for | Layer Protocol Negotiation (ALPN) extension [RFC7301] can be used to | |||
HTTP version negotiation within the TLS handshake, which eliminates | negotiate the HTTP version within the TLS handshake, eliminating the | |||
the latency of addition round-trips. Arbitrary cookie strings, | latency incurred by additional round-trip exchanges. Arbitrary | |||
included as part of the MIME headers, are often used as bearer tokens | cookie strings, included as part of the MIME headers, are often used | |||
in HTTP. | as bearer tokens in HTTP. | |||
Application layer protocols using HTTP as substrate may use an | ||||
existing method and data formats, or specify new methods and data | ||||
formats. Furthermore some protocols may not fit a request/response | ||||
paradigm and instead rely on HTTP to send messages (e.g., [RFC6546]). | ||||
Because HTTP works in many restricted infrastructures, it is also | ||||
used to tunnel other application-layer protocols. | ||||
4.12.2. Interface Description | 3.12.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 response, | |||
callbacks can be registered that will be invoked when the response is | callbacks can be registered that will be invoked when the response is | |||
received. If TLS is used, API expose a registration of callbacks in | received. If TLS is used, the API exposes a registration of | |||
case a server requests client authentication and when certificate | callbacks for a server that requests client authentication and when | |||
verification is needed. | certificate verification is needed. | |||
World Wide Web Consortium (W3C) standardized the XMLHttpRequest API | The World Wide Web Consortium (W3C) has standardized the | |||
[XHR], an API that can be use for sending HTTP/HTTPS requests and | XMLHttpRequest API [XHR]. This API can be used for sending HTTP/ | |||
receiving server responses. Besides XML data format, request and | HTTPS requests and receiving server responses. Besides the XML data | |||
response data format can also be JSON, HTML and plain text. | format, the request and response data format can also be JSON, HTML, | |||
Specifically JavaScript and XMLHttpRequest are a ubiquitous | and plain text. JavaScript and XMLHttpRequest are ubiquitous | |||
programming model 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. | |||
Representational State Transfer (REST) [REST] is another example how | 3.12.3. Transport features | |||
applications can use HTTP as transport protocol. REST is an | ||||
architecture style for building application on the Internet. It uses | ||||
HTTP as a communication protocol. | ||||
4.12.3. Transport features | The transport features provided by HTTP, when used as a pseudo- | |||
transport, are: | ||||
The transport features provided by HTTP, when used as a | o unicast transport (provided by the lower layer protocol, usually | |||
pseudotransport, are: | TCP), | |||
o unicast. | o uni- or bidirectional communication, | |||
o message and stream-oriented transfer. | o transfer of objects in multiple streams with object content type | |||
negotiation, supporting partial transmission of object ranges, | ||||
o bi- or unidirectional transmission. | o ordered delivery (provided by the lower layer protocol, usually | |||
TCP), | ||||
o ordered delivery. | o fully reliable delivery (provided by the lower layer protocol, | |||
usually TCP), | ||||
o fully reliable delivery. | o flow control (provided by the lower layer protocol, usually TCP). | |||
o object range request. | o congestion control (provided by the lower layer protocol, usually | |||
TCP). | ||||
o message content type negotiation. | HTTPS (HTTP over TLS) additionally provides the following features | |||
(as provided by TLS): | ||||
o flow control. | o authentication (of one or both ends of a connection), | |||
HTTPS (HTTP over TLS) additionally provides the following components: | o confidentiality, | |||
o authentication (of one or both ends of a connection). | o integrity protection. | |||
o confidentiality. | 4. Congestion Control | |||
o integrity protection. | Congestion control is critical to the stable operation of the | |||
Internet. A variety of mechanisms are used to provide the congestion | ||||
control needed by many Internet transport protocols. Congestion is | ||||
detected based on sensing of network conditions, whether through | ||||
explicit or implicit feedback. The congestion control mechanisms | ||||
that can be applied by different transport protocols are largely | ||||
orthogonal to the choice of transport protocol. This section | ||||
provides an overview of the congestion control mechanisms available | ||||
to the protocols described in Section 3. | ||||
5. Transport Service Features | Many protocols use a separate window to determine the maximum sending | |||
rate that is allowed by the congestion control. The used congestion | ||||
control mechanism will increase the congestion window if feedback is | ||||
received that indicates that the currently used network path is not | ||||
congested, and will reduce the window otherwise. Window-based | ||||
mechanisms often increase their window slowing over multiple RTTs, | ||||
while decreasing strongly when the first indication of congestion is | ||||
received. One example are Additive Increase Multiplicative Decrease | ||||
(AIMD) schemes, where the window is increased by a certain number of | ||||
packets/bytes for each data segment that has been successfully | ||||
transmitted, while the window is multiplicatively decrease on the | ||||
occurrence of a congestion event. This can lead to a rather | ||||
unstable, oscillating sending rate, but will resolve a congestion | ||||
situation quickly. TCP New Reno [RFC5681] which is one of the | ||||
initial proposed schemes for TCP as well as TCP Cubic | ||||
[I-D.ietf-tcpm-cubic] which is the default mechanism for TCP in Linux | ||||
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 | ||||
allows sending at a more stable rate, that is slowly varied in | ||||
response to congestion. Rate-based methods offer this type of | ||||
congestion control and have been defined based on the loss ratio and | ||||
observed round trip time, such as TFRC [RFC5348] and TFRC-SP | ||||
[RFC4828]. These methods utilize a throughput equation to determine | ||||
the maximum acceptable rate. Such methods are used with DCCP CCID-3 | ||||
[RFC4342] and CCID-4 [RFC5622], WEBRC [RFC3738], and other | ||||
applications. | ||||
Another class of applications prefer a transport service that yields | ||||
to other (higher-priority) traffic, such as interactive | ||||
transmissions. While most traffic in the Internet uses loss-based | ||||
congestion control and therefore need to fill the network buffers (to | ||||
a certain level if Active Queue Management (AQM) is used), low- | ||||
priority congestion control methods often react to changes in delay | ||||
as an earlier indication of congestion. This approach tends to | ||||
induce less loss than a loss-based method but does generally not | ||||
compete well with loss-based traffic across shared bottleneck links. | ||||
Therefore, methods such as LEDBAT [RFC6824], are deployed in the | ||||
Internet for scavenger traffic that aim to only utilize otherwise | ||||
unused capacity. | ||||
5. Transport Features | ||||
The tables below summarize some key features to illustrate the range | The tables below summarize some key features to illustrate the range | |||
of functions provided across the IETF-specified transports. Figure 1 | of functions provided across the IETF-specified transports. Figure 1 | |||
considers transports that may be directly layered over the network, | considers transports that may be directly layered over the network, | |||
and Figure 2 considers transports layered over another transport | and Figure 2 considers transports layered over another transport | |||
service. | service. Features that are permitted, but not required, are marked | |||
as "Poss" indicating that it is possible for the transport service to | ||||
offer this feature. | ||||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Feature | TCP | MPTCP| SCTP | UDP | UDP-L|DCCP |ICMP | | | Feature | TCP | MPTCP| SCTP | UDP | UDP-L|DCCP |ICMP | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Datagram | No | No | Yes | Yes | Yes | Yes | Yes | | | Datagram | No | No | Yes | Yes | Yes | Yes | Yes | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Conn. Oriented| Yes | Yes | Yes | No | No | Yes | No | | | Conn. Oriented| Yes | Yes | Yes | No | No | Yes | No | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Reliability | Yes | Yes | Yes | No | No | No | No | | | Reliability | Yes | Yes | Yes | No | No | No | No | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Partial Rel. | No | No | Pos | N/A | N/A | Yes | N/A | | | Partial Rel. | No | No | Poss | N/A | N/A | Yes | N/A | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Corupt. Tol | No | No | No | No | Yes | Yes | No | | | Corupt. Tol | No | No | No | No | Yes | Yes | No | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Cong.Control | Yes | Yes | Yes | No | No | Yes | No | | | Cong.Control | Yes | Yes | Yes | No | No | Yes | No | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Endpoint | 1 | >=1 | >=1 | 1 | 1 | 1 | 1 | | | Endpoint | 1 | >=1 | >=1 | 1 | 1 | 1 | 1 | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
| Multicast Cap.| No | No | No | Yes | Yes | No | No | | | Multicast Cap.| No | No | No | Yes | Yes | No | No | | |||
+---------------+------+------+------+------+------+------+------+ | +---------------+------+------+------+------+------+------+------+ | |||
Figure 1: Summary comparison: Transport protocols | Figure 1: Summary comparison: Transport protocols | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Feature | RTP | FLUTE| NORM |(D)TLS| HTTP | | | Feature | RTP | FLUTE| NORM |(D)TLS| HTTP | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Datagram | Yes | No | Both | Both | No | | | Datagram | Yes | No | Both | Both | No | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Conn. Oriented| No | Yes | Yes | Yes | Yes | | | Conn. Oriented| No | Yes | Yes | Yes | Yes | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Reliability | No | Yes | Pos | Pos | Yes | | | Reliability | No | Yes | Poss | Poss | Yes | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Partial R | Pos | No | Pos | No | No | | | Partial R | Poss | No | Poss | No | No | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Corupt. Tol | Poss | No | No | No | No | | | Corupt. Tol | Poss | No | No | No | No | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Cong.Control | Poss | Poss | Poss | N/A | N/A | | | Cong.Control | Poss | Poss | Poss | N/A | N/A | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Endpoint | >=1 | >=1 | >=1 | 1 | 1 | | | Endpoint | >=1 | >=1 | >=1 | 1 | 1 | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
| Multicast Cap.| Yes | Yes | Yes | No | No | | | Multicast Cap.| Yes | Yes | Yes | No | No | | |||
+---------------+------+------+------+------+------+ | +---------------+------+------+------+------+------+ | |||
Figure 2: Upper layer transports and frameworks | Figure 2: Upper layer transports and frameworks | |||
The transport protocol components analyzed in this document that can | The transport protocol features described in this document could be | |||
be used as a basis for defining common transport service features, | used as a basis for defining common transport features: | |||
normalized and separated into categories, are as follows: | ||||
o Control Functions | o Control Functions | |||
* Addressing | * Addressing | |||
+ unicast (TCP, MPTCP, SCTP, UDP, UDP-Lite, DCCP, TLS, HTTP) | + unicast (TCP, MPTCP, SCTP, UDP, UDP-Lite, DCCP, ICMP, RTP, | |||
TLS, HTTP) | ||||
+ multicast (UDP, UDP-Lite, DCCP, FLUTE/ALC, NORM) | + multicast (UDP, UDP-Lite, DCCP, ICMP, RTP, FLUTE/ALC, NORM). | |||
Note that, as TLS and DTLS are unicast-only, there is no | ||||
widely deployed mechanism for supporting the features in the | ||||
Security section below when using multicast addressing. | ||||
+ IPv4 broadcast (UDP, UDP-Lite, DCCP) | + IPv4 broadcast (UDP, UDP-Lite, ICMP) | |||
+ anycast (UDP, UDP-Lite, DCCP). Connection-oriented | + anycast (UDP, UDP-Lite). Connection-oriented protocols such | |||
protocols such as TCP can be and are used with anycast | as TCP and DCCP have also been deployed using anycast | |||
routing, with the risk that routing changes may cause | addressing, with the risk that routing changes may cause | |||
connection failure. | connection failure. | |||
* Association type | ||||
+ connection-oriented (TCP, MPTCP, SCTP, DCCP, RTP, NORM, TLS, | ||||
HTTP) | ||||
+ connectionless (UDP, UDP-Lite, FLUTE/ALC) | ||||
* Multihoming support | * Multihoming support | |||
+ multihoming for resilience (MPTCP, SCTP) | + resilience and mobility (MPTCP, SCTP) | |||
+ multihoming for mobility (MPTCP, SCTP) | + load-balancing (MPTCP) | |||
+ multihoming for load-balancing (MPTCP) | + address family multiplexing (MPTCP, SCTP) | |||
* Application to port mapping (TCP, MPTCP, SCTP, UDP, UDP-Lite, | * Middlebox cooperation | |||
DCCP, FLUTE/ALC, NORM, TLS, HTTP) | ||||
+ with commonly deployed support in NAPT (TCP, MPTCP, UDP, | + application-class signaling to middleboxes (DCCP) | |||
TLS, HTTP) | ||||
+ error condition signaling from middleboxes and routers to | ||||
endpoints (ICMP) | ||||
* Signaling | ||||
+ control information and error signaling (ICMP) | ||||
+ performance metric reporting (RTP) | ||||
o Delivery | o Delivery | |||
* reliability | * Reliability | |||
+ fully reliable delivery (TCP, MPTCP, SCTP, FLUTE/ALC, NORM, | + fully reliable delivery (TCP, MPTCP, SCTP, FLUTE/ALC, NORM, | |||
TLS, HTTP) | TLS, HTTP) | |||
+ partially reliable delivery (SCTP, NORM) | + partially reliable delivery (SCTP, NORM) | |||
- using packet erasure coding (NORM, FLUTE, RTP) | - using packet erasure coding (FLUTE/ALC, NORM, RTP) | |||
+ unreliable delivery (SCTP, UDP, UDP-Lite, DCCP) | - with specified policy for dropped messages (SCTP) | |||
- with drop notification (SCTP, DCCP) | + unreliable delivery (SCTP, UDP, UDP-Lite, DCCP, RTP) | |||
+ Integrity protection | - with drop notification to sender (RTP, SCTP, DCCP) | |||
+ error detection | ||||
- checksum for error detection (TCP, MPTCP, SCTP, UDP, UDP- | - checksum for error detection (TCP, MPTCP, SCTP, UDP, UDP- | |||
Lite, DCCP, FLUTE/ALC, NORM, TLS, HTTP) | Lite, DCCP, ICMP, FLUTE/ALC, NORM, TLS, DTLS) | |||
- partial payload checksum protection (UDP-Lite, DCCP) | - partial payload checksum protection (UDP-Lite, DCCP). | |||
Some uses of RTP can exploit partial payload checksum | ||||
protection feature to provide a corruption tolerant | ||||
transport service. | ||||
- checksum optional (UDP) | - checksum optional (UDP). Possible with IPv4 and in | |||
certain cases with IPv6. | ||||
* ordering | * Ordering | |||
+ ordered delivery (TCP, MPTCP, SCTP, TLS, HTTP) | + ordered delivery (TCP, MPTCP, SCTP, RTP, FLUTE, TLS, HTTP) | |||
+ unordered delivery (SCTP, UDP, UDP-Lite, DCCP, NORM) | + unordered delivery permitted (SCTP, UDP, UDP-Lite, DCCP, | |||
RTP, NORM) | ||||
* type/framing | * Type/framing | |||
+ stream-oriented delivery (TCP, MPTCP, SCTP, TLS) | + stream-oriented delivery (TCP, MPTCP, SCTP, TLS, HTTP) | |||
- with multiple streams per association (SCTP) | - with multiple streams per association (SCTP, HTTP2) | |||
+ message-oriented delivery (SCTP, UDP, UDP-Lite, DCCP, DTLS) | + message-oriented delivery (SCTP, UDP, UDP-Lite, DCCP, RTP, | |||
DTLS) | ||||
+ object-oriented delivery of discrete data or file items | + object-oriented delivery of discrete data or files and | |||
(FLUTE/ALC, NORM, HTTP) | associated metadata (FLUTE/ALC, NORM, HTTP) | |||
- with partial delivery of object ranges (HTTP) | ||||
* Directionality | ||||
+ unidirectional (TCP, SCTP, UDP, UDP-Lite DCCP, RTP, FLUTE/ | ||||
ALC, NORM) | ||||
+ bidirectional (TCP, MPTCP, SCTP, HTTP, TLS) | ||||
o Transmission control | o Transmission control | |||
* flow control (TCP, MPTCP, SCTP, DCCP, TLS, HTTP) | * flow control (TCP, MPTCP, SCTP, DCCP, RTP, TLS, HTTP) | |||
* congestion control (TCP, MPTCP, SCTP, DCCP, FLUTE/ALC, NORM, | * congestion control (TCP, MPTCP, SCTP, DCCP, RTP, FLUTE/ALC, | |||
TLS, HTTP) | NORM). Congestion control can also provided by the transport | |||
supporting an upper later transport (e.g., RTP,HTTP, TLS). | ||||
* segmentation (TCP, MPTCP, SCTP, FLUTE/ALC, NORM, TLS, HTTP) | * segmentation (TCP, MPTCP, SCTP, RTP, FLUTE/ALC, NORM, TLS, | |||
HTTP) | ||||
* 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) | * endpoint multiplexing (MPTCP) | |||
o Security (may be used in combination with other transports) | o Security | |||
* authentication of one end of a connection (TLS) | * authentication of one end of a connection (FLUTE/ALC, TLS, | |||
DTLS) | ||||
* authentication of both ends of a connection (TLS) | * authentication of both ends of a connection (TLS, DTLS) | |||
* confidentiality (TLS) | * confidentiality (TLS, DTLS) | |||
* cryptographic integrity protection (TLS) | * cryptographic integrity protection (TLS, DTLS) | |||
* replay protection (FLUTE/ALC, DTLS) | ||||
6. IANA Considerations | 6. IANA Considerations | |||
This document has no considerations for IANA. | This document has no considerations for IANA. | |||
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 components or mechanisms for | document does not specify any new features or mechanisms for | |||
providing these features. Each RFC listed in this document discusses | providing these features. Each RFC referenced by this document | |||
the security considerations of the specification it contains. | discusses the security considerations of the specification it | |||
contains. | ||||
8. Contributors | 8. Contributors | |||
In addition to the editors, this document is the work of Brian | In addition to the editors, this document is the work of Brian | |||
Adamson, Dragana Damjanovic, Kevin Fall, Simone Ferlin-Oliviera, | Adamson, Dragana Damjanovic, Kevin Fall, Simone Ferlin-Oliviera, | |||
Ralph Holz, Olivier Mehani, Karen Nielsen, Colin Perkins, Vincent | Ralph Holz, Olivier Mehani, Karen Nielsen, Colin Perkins, Vincent | |||
Roca, and Michael Tuexen. | Roca, and Michael Tuexen. | |||
o Section 4.2 on MPTCP was contributed by Simone Ferlin-Oliviera | o Section 3.2 on MPTCP was contributed by Simone Ferlin-Oliviera | |||
(ferlin@simula.no) and Olivier Mehani | (ferlin@simula.no) and Olivier Mehani | |||
(olivier.mehani@nicta.com.au) | (olivier.mehani@nicta.com.au) | |||
o Section 4.4 on UDP was contributed by Kevin Fall (kfall@kfall.com) | o Section 3.4 on UDP was contributed by Kevin Fall (kfall@kfall.com) | |||
o Section 4.3 on SCTP was contributed by Michael Tuexen (tuexen@fh- | o Section 3.3 on SCTP was contributed by Michael Tuexen (tuexen@fh- | |||
muenster.de) and Karen Nielsen (karen.nielsen@tieto.com) | muenster.de) and Karen Nielsen (karen.nielsen@tieto.com) | |||
o Section 4.8 on RTP contains contributions from Colin Perlins | o Section 3.8 on RTP contains contributions from Colin Perkins | |||
(csp@csperkins.org) | (csp@csperkins.org) | |||
o Section 4.9 on FLUTE/ALC was contributed by Vincent Roca | o Section 3.9 on FLUTE/ALC was contributed by Vincent Roca | |||
(vincent.roca@inria.fr) | (vincent.roca@inria.fr) | |||
o Section 4.10 on NORM was contributed by Brian Adamson | o Section 3.10 on NORM was contributed by Brian Adamson | |||
(brian.adamson@nrl.navy.mil) | (brian.adamson@nrl.navy.mil) | |||
o Section 4.11 on TLS and DTLS was contributed by Ralph Holz | o Section 3.11 on TLS and DTLS was contributed by Ralph Holz | |||
(ralph.holz@nicta.com.au) and Olivier Mehani | (ralph.holz@nicta.com.au) and Olivier Mehani | |||
(olivier.mehani@nicta.com.au) | (olivier.mehani@nicta.com.au) | |||
o Section 4.12 on HTTP was contributed by Dragana Damjanovic | o Section 3.12 on HTTP was contributed by Dragana Damjanovic | |||
(ddamjanovic@mozilla.com) | (ddamjanovic@mozilla.com) | |||
9. Acknowledgments | 9. Acknowledgments | |||
Thanks to Joe Touch, Michael Welzl, and the TAPS Working Group for | Thanks to Joe Touch, Michael Welzl, and the TAPS Working Group for | |||
the comments, feedback, and discussion. This work is partially | the comments, feedback, and discussion. This work is supported by | |||
supported by the European Commission under grant agreements | the European Commission under grant agreement No. 318627 mPlane and | |||
FP7-ICT-318627 mPlane and from the Horizon 2020 research and | from the Horizon 2020 research and innovation program under grant | |||
innovation program under grant agreement No. 644334 (NEAT); support | agreements No. 644334 (NEAT) and No. 688421 (MAMI). This support | |||
does not imply endorsement. | does not imply endorsement. | |||
10. Informative References | 10. Informative References | |||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] 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, | [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, | |||
RFC 792, DOI 10.17487/RFC0792, September 1981, | RFC 792, DOI 10.17487/RFC0792, September 1981, | |||
skipping to change at page 43, line 44 | skipping to change at page 45, line 14 | |||
[RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | |||
of Explicit Congestion Notification (ECN) to IP", | of Explicit Congestion Notification (ECN) to IP", | |||
RFC 3168, DOI 10.17487/RFC3168, September 2001, | RFC 3168, DOI 10.17487/RFC3168, September 2001, | |||
<http://www.rfc-editor.org/info/rfc3168>. | <http://www.rfc-editor.org/info/rfc3168>. | |||
[RFC3205] Moore, K., "On the use of HTTP as a Substrate", BCP 56, | [RFC3205] Moore, K., "On the use of HTTP as a Substrate", BCP 56, | |||
RFC 3205, DOI 10.17487/RFC3205, February 2002, | RFC 3205, DOI 10.17487/RFC3205, February 2002, | |||
<http://www.rfc-editor.org/info/rfc3205>. | <http://www.rfc-editor.org/info/rfc3205>. | |||
[RFC3260] Grossman, D., "New Terminology and Clarifications for | ||||
Diffserv", RFC 3260, DOI 10.17487/RFC3260, April 2002, | ||||
<http://www.rfc-editor.org/info/rfc3260>. | ||||
[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>. | |||
skipping to change at page 45, line 26 | skipping to change at page 46, line 45 | |||
Datagram Congestion Control Protocol (DCCP) Congestion | Datagram Congestion Control Protocol (DCCP) Congestion | |||
Control ID 3: TCP-Friendly Rate Control (TFRC)", RFC 4342, | Control ID 3: TCP-Friendly Rate Control (TFRC)", RFC 4342, | |||
DOI 10.17487/RFC4342, March 2006, | DOI 10.17487/RFC4342, March 2006, | |||
<http://www.rfc-editor.org/info/rfc4342>. | <http://www.rfc-editor.org/info/rfc4342>. | |||
[RFC4433] Kulkarni, M., Patel, A., and K. Leung, "Mobile IPv4 | [RFC4433] Kulkarni, M., Patel, A., and K. Leung, "Mobile IPv4 | |||
Dynamic Home Agent (HA) Assignment", RFC 4433, | Dynamic Home Agent (HA) Assignment", RFC 4433, | |||
DOI 10.17487/RFC4433, March 2006, | DOI 10.17487/RFC4433, March 2006, | |||
<http://www.rfc-editor.org/info/rfc4433>. | <http://www.rfc-editor.org/info/rfc4433>. | |||
[RFC4614] Duke, M., Braden, R., Eddy, W., and E. Blanton, "A Roadmap | ||||
for Transmission Control Protocol (TCP) Specification | ||||
Documents", RFC 4614, DOI 10.17487/RFC4614, September | ||||
2006, <http://www.rfc-editor.org/info/rfc4614>. | ||||
[RFC4654] Widmer, J. and M. Handley, "TCP-Friendly Multicast | [RFC4654] Widmer, J. and M. Handley, "TCP-Friendly Multicast | |||
Congestion Control (TFMCC): Protocol Specification", | Congestion Control (TFMCC): Protocol Specification", | |||
RFC 4654, DOI 10.17487/RFC4654, August 2006, | RFC 4654, DOI 10.17487/RFC4654, August 2006, | |||
<http://www.rfc-editor.org/info/rfc4654>. | <http://www.rfc-editor.org/info/rfc4654>. | |||
[RFC4820] Tuexen, M., Stewart, R., and P. Lei, "Padding Chunk and | [RFC4820] Tuexen, M., Stewart, R., and P. Lei, "Padding Chunk and | |||
Parameter for the Stream Control Transmission Protocol | Parameter for the Stream Control Transmission Protocol | |||
(SCTP)", RFC 4820, DOI 10.17487/RFC4820, March 2007, | (SCTP)", RFC 4820, DOI 10.17487/RFC4820, March 2007, | |||
<http://www.rfc-editor.org/info/rfc4820>. | <http://www.rfc-editor.org/info/rfc4820>. | |||
skipping to change at page 50, line 35 | skipping to change at page 51, line 45 | |||
[RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, | [RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, | |||
"Transport Layer Security (TLS) Application-Layer Protocol | "Transport Layer Security (TLS) Application-Layer Protocol | |||
Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | |||
July 2014, <http://www.rfc-editor.org/info/rfc7301>. | July 2014, <http://www.rfc-editor.org/info/rfc7301>. | |||
[RFC7323] Borman, D., Braden, B., Jacobson, V., and R. | [RFC7323] Borman, D., Braden, B., Jacobson, V., and R. | |||
Scheffenegger, Ed., "TCP Extensions for High Performance", | Scheffenegger, Ed., "TCP Extensions for High Performance", | |||
RFC 7323, DOI 10.17487/RFC7323, September 2014, | RFC 7323, DOI 10.17487/RFC7323, September 2014, | |||
<http://www.rfc-editor.org/info/rfc7323>. | <http://www.rfc-editor.org/info/rfc7323>. | |||
[RFC7414] Duke, M., Braden, R., Eddy, W., Blanton, E., and A. | ||||
Zimmermann, "A Roadmap for Transmission Control Protocol | ||||
(TCP) Specification Documents", RFC 7414, | ||||
DOI 10.17487/RFC7414, February 2015, | ||||
<http://www.rfc-editor.org/info/rfc7414>. | ||||
[RFC7457] Sheffer, Y., Holz, R., and P. Saint-Andre, "Summarizing | [RFC7457] Sheffer, Y., Holz, R., and P. Saint-Andre, "Summarizing | |||
Known Attacks on Transport Layer Security (TLS) and | Known Attacks on Transport Layer Security (TLS) and | |||
Datagram TLS (DTLS)", RFC 7457, DOI 10.17487/RFC7457, | Datagram TLS (DTLS)", RFC 7457, DOI 10.17487/RFC7457, | |||
February 2015, <http://www.rfc-editor.org/info/rfc7457>. | February 2015, <http://www.rfc-editor.org/info/rfc7457>. | |||
[RFC7496] Tuexen, M., Seggelmann, R., Stewart, R., and S. Loreto, | [RFC7496] Tuexen, M., Seggelmann, R., Stewart, R., and S. Loreto, | |||
"Additional Policies for the Partially Reliable Stream | "Additional Policies for the Partially Reliable Stream | |||
Control Transmission Protocol Extension", RFC 7496, | Control Transmission Protocol Extension", RFC 7496, | |||
DOI 10.17487/RFC7496, April 2015, | DOI 10.17487/RFC7496, April 2015, | |||
<http://www.rfc-editor.org/info/rfc7496>. | <http://www.rfc-editor.org/info/rfc7496>. | |||
skipping to change at page 51, line 10 | skipping to change at page 52, line 27 | |||
"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-aqm-ecn-benefits] | ||||
Fairhurst, G. and M. Welzl, "The Benefits of using | ||||
Explicit Congestion Notification (ECN)", draft-ietf-aqm- | ||||
ecn-benefits-08 (work in progress), November 2015. | ||||
[I-D.ietf-tsvwg-rfc5405bis] | [I-D.ietf-tsvwg-rfc5405bis] | |||
Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
Guidelines", draft-ietf-tsvwg-rfc5405bis-07 (work in | Guidelines", draft-ietf-tsvwg-rfc5405bis-07 (work in | |||
progress), November 2015. | progress), November 2015. | |||
[I-D.ietf-aqm-ecn-benefits] | ||||
Fairhurst, G. and M. Welzl, "The Benefits of using | ||||
Explicit Congestion Notification (ECN)", draft-ietf-aqm- | ||||
ecn-benefits-07 (work in progress), November 2015. | ||||
[I-D.ietf-tsvwg-sctp-dtls-encaps] | [I-D.ietf-tsvwg-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", draft-ietf-tsvwg-sctp- | |||
dtls-encaps-09 (work in progress), January 2015. | dtls-encaps-09 (work in progress), January 2015. | |||
[I-D.ietf-tsvwg-sctp-ndata] | [I-D.ietf-tsvwg-sctp-ndata] | |||
Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, | Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, | |||
"Stream Schedulers and User Message Interleaving for the | "Stream Schedulers and User Message Interleaving for the | |||
Stream Control Transmission Protocol", draft-ietf-tsvwg- | Stream Control Transmission Protocol", draft-ietf-tsvwg- | |||
sctp-ndata-04 (work in progress), July 2015. | sctp-ndata-04 (work in progress), July 2015. | |||
[I-D.ietf-tsvwg-sctp-failover] | [I-D.ietf-tsvwg-sctp-failover] | |||
Nishida, Y., Natarajan, P., Caro, A., Amer, P., and K. | Nishida, Y., Natarajan, P., Caro, A., Amer, P., and K. | |||
Nielsen, "SCTP-PF: Quick Failover Algorithm in SCTP", | Nielsen, "SCTP-PF: Quick Failover Algorithm in SCTP", | |||
draft-ietf-tsvwg-sctp-failover-13 (work in progress), | draft-ietf-tsvwg-sctp-failover-14 (work in progress), | |||
September 2015. | December 2015. | |||
[I-D.ietf-tsvwg-natsupp] | [I-D.ietf-tsvwg-natsupp] | |||
Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control | Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control | |||
Transmission Protocol (SCTP) Network Address Translation | Transmission Protocol (SCTP) Network Address Translation | |||
Support", draft-ietf-tsvwg-natsupp-08 (work in progress), | Support", draft-ietf-tsvwg-natsupp-08 (work in progress), | |||
July 2015. | July 2015. | |||
[I-D.ietf-tcpm-cubic] | ||||
Rhee, I., Xu, L., Ha, S., Zimmermann, A., Eggert, L., and | ||||
R. Scheffenegger, "CUBIC for Fast Long-Distance Networks", | ||||
draft-ietf-tcpm-cubic-00 (work in progress), June 2015. | ||||
[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 working draft | |||
(http://www.w3.org/TR/XMLHttpRequest/)", 2000. | (http://www.w3.org/TR/XMLHttpRequest/)", 2000. | |||
[REST] Fielding, R., "Architectural Styles and the Design of | [REST] Fielding, R., "Architectural Styles and the Design of | |||
Network-based Software Architectures, Ph. D. (UC Irvine), | Network-based Software Architectures, Ph. D. (UC Irvine), | |||
Chapter 5: Representational State Transfer", 2000. | Chapter 5: Representational State Transfer", 2000. | |||
[POSIX] 1-2008, IEEE., "IEEE Standard for Information Technology | [POSIX] 1-2008, IEEE., "IEEE Standard for Information Technology | |||
-- Portable Operating System Interface (POSIX) Base | -- Portable Operating System Interface (POSIX) Base | |||
End of changes. 302 change blocks. | ||||
845 lines changed or deleted | 903 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |