draft-ietf-taps-transports-07.txt | draft-ietf-taps-transports-08.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: April 9, 2016 M. Kuehlewind, Ed. | Expires: June 10, 2016 M. Kuehlewind, Ed. | |||
ETH Zurich | ETH Zurich | |||
October 07, 2015 | December 08, 2015 | |||
Services provided by IETF transport protocols and congestion control | Services provided by IETF transport protocols and congestion control | |||
mechanisms | mechanisms | |||
draft-ietf-taps-transports-07 | draft-ietf-taps-transports-08 | |||
Abstract | Abstract | |||
This document describes services provided by existing IETF protocols | This document describes transport services provided by existing IETF | |||
and congestion control mechanisms. It is designed to help | protocols. It is designed to help application and network stack | |||
application and network stack programmers and to inform the work of | programmers and to inform the work of the IETF TAPS Working Group. | |||
the IETF TAPS Working Group. | ||||
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 April 9, 2016. | This Internet-Draft will expire on June 10, 2016. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 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 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Existing Transport Protocols . . . . . . . . . . . . . . . . 5 | 3. Transport Service Features . . . . . . . . . . . . . . . . . 4 | |||
3.1. Transport Control Protocol (TCP) . . . . . . . . . . . . 5 | 3.1. Congestion Control . . . . . . . . . . . . . . . . . . . 5 | |||
3.1.1. Protocol Description . . . . . . . . . . . . . . . . 5 | 4. Existing Transport Protocols . . . . . . . . . . . . . . . . 6 | |||
3.1.2. Interface description . . . . . . . . . . . . . . . . 6 | 4.1. Transport Control Protocol (TCP) . . . . . . . . . . . . 6 | |||
3.1.3. Transport Features . . . . . . . . . . . . . . . . . 7 | 4.1.1. Protocol Description . . . . . . . . . . . . . . . . 6 | |||
3.2. Multipath TCP (MPTCP) . . . . . . . . . . . . . . . . . . 8 | 4.1.2. Interface description . . . . . . . . . . . . . . . . 8 | |||
3.2.1. Protocol Description . . . . . . . . . . . . . . . . 8 | 4.1.3. Transport Features . . . . . . . . . . . . . . . . . 8 | |||
3.2.2. Interface Description . . . . . . . . . . . . . . . . 8 | 4.2. Multipath TCP (MPTCP) . . . . . . . . . . . . . . . . . . 9 | |||
3.2.3. Transport features . . . . . . . . . . . . . . . . . 8 | 4.2.1. Protocol Description . . . . . . . . . . . . . . . . 9 | |||
3.3. Stream Control Transmission Protocol (SCTP) . . . . . . . 9 | 4.2.2. Interface Description . . . . . . . . . . . . . . . . 9 | |||
3.3.1. Protocol Description . . . . . . . . . . . . . . . . 9 | 4.2.3. Transport features . . . . . . . . . . . . . . . . . 10 | |||
3.3.2. Interface Description . . . . . . . . . . . . . . . . 12 | 4.3. Stream Control Transmission Protocol (SCTP) . . . . . . . 10 | |||
3.3.3. Transport Features . . . . . . . . . . . . . . . . . 14 | 4.3.1. Protocol Description . . . . . . . . . . . . . . . . 11 | |||
3.4. User Datagram Protocol (UDP) . . . . . . . . . . . . . . 15 | 4.3.2. Interface Description . . . . . . . . . . . . . . . . 13 | |||
3.4.1. Protocol Description . . . . . . . . . . . . . . . . 15 | 4.3.3. Transport Features . . . . . . . . . . . . . . . . . 15 | |||
3.4.2. Interface Description . . . . . . . . . . . . . . . . 16 | 4.4. User Datagram Protocol (UDP) . . . . . . . . . . . . . . 16 | |||
3.4.3. Transport Features . . . . . . . . . . . . . . . . . 16 | 4.4.1. Protocol Description . . . . . . . . . . . . . . . . 16 | |||
3.5. Lightweight User Datagram Protocol (UDP-Lite) . . . . . . 17 | 4.4.2. Interface Description . . . . . . . . . . . . . . . . 17 | |||
3.5.1. Protocol Description . . . . . . . . . . . . . . . . 17 | 4.4.3. Transport Features . . . . . . . . . . . . . . . . . 18 | |||
3.5.2. Interface Description . . . . . . . . . . . . . . . . 18 | 4.5. Lightweight User Datagram Protocol (UDP-Lite) . . . . . . 18 | |||
3.5.3. Transport Features . . . . . . . . . . . . . . . . . 18 | 4.5.1. Protocol Description . . . . . . . . . . . . . . . . 18 | |||
3.6. Datagram Congestion Control Protocol (DCCP) . . . . . . . 19 | 4.5.2. Interface Description . . . . . . . . . . . . . . . . 19 | |||
3.6.1. Protocol Description . . . . . . . . . . . . . . . . 19 | 4.5.3. Transport Features . . . . . . . . . . . . . . . . . 19 | |||
3.6.2. Interface Description . . . . . . . . . . . . . . . . 20 | 4.6. Datagram Congestion Control Protocol (DCCP) . . . . . . . 20 | |||
3.6.3. Transport Features . . . . . . . . . . . . . . . . . 21 | 4.6.1. Protocol Description . . . . . . . . . . . . . . . . 20 | |||
3.7. Lightweight User Datagram Protocol (UDP-Lite) . . . . . . 21 | 4.6.2. Interface Description . . . . . . . . . . . . . . . . 21 | |||
3.7.1. Protocol Description . . . . . . . . . . . . . . . . 21 | 4.6.3. Transport Features . . . . . . . . . . . . . . . . . 22 | |||
3.7.2. Interface Description . . . . . . . . . . . . . . . . 22 | 4.7. Internet Control Message Protocol (ICMP) . . . . . . . . 22 | |||
3.7.3. Transport Features . . . . . . . . . . . . . . . . . 22 | 4.7.1. Protocol Description . . . . . . . . . . . . . . . . 23 | |||
3.8. Internet Control Message Protocol (ICMP) . . . . . . . . 23 | 4.7.2. Interface Description . . . . . . . . . . . . . . . . 24 | |||
3.8.1. Protocol Description . . . . . . . . . . . . . . . . 23 | 4.7.3. Transport Features . . . . . . . . . . . . . . . . . 24 | |||
3.8.2. Interface Description . . . . . . . . . . . . . . . . 24 | 4.8. Realtime Transport Protocol (RTP) . . . . . . . . . . . . 24 | |||
3.8.3. Transport Features . . . . . . . . . . . . . . . . . 24 | 4.8.1. Protocol Description . . . . . . . . . . . . . . . . 24 | |||
3.9. Realtime Transport Protocol (RTP) . . . . . . . . . . . . 25 | 4.8.2. Interface Description . . . . . . . . . . . . . . . . 25 | |||
3.9.1. Protocol Description . . . . . . . . . . . . . . . . 25 | 4.8.3. Transport Features . . . . . . . . . . . . . . . . . 26 | |||
3.9.2. Interface Description . . . . . . . . . . . . . . . . 26 | 4.9. File Delivery over Unidirectional Transport/Asynchronous | |||
3.9.3. Transport Features . . . . . . . . . . . . . . . . . 26 | ||||
3.10. File Delivery over Unidirectional Transport/Asynchronous | ||||
Layered Coding Reliable Multicast (FLUTE/ALC) . . . . . . 26 | Layered Coding Reliable Multicast (FLUTE/ALC) . . . . . . 26 | |||
3.10.1. Protocol Description . . . . . . . . . . . . . . . . 27 | 4.9.1. Protocol Description . . . . . . . . . . . . . . . . 27 | |||
3.10.2. Interface Description . . . . . . . . . . . . . . . 29 | 4.9.2. Interface Description . . . . . . . . . . . . . . . . 29 | |||
3.10.3. Transport Features . . . . . . . . . . . . . . . . . 29 | 4.9.3. Transport Features . . . . . . . . . . . . . . . . . 29 | |||
3.11. NACK-Oriented Reliable Multicast (NORM) . . . . . . . . . 30 | 4.10. NACK-Oriented Reliable Multicast (NORM) . . . . . . . . . 30 | |||
3.11.1. Protocol Description . . . . . . . . . . . . . . . . 30 | 4.10.1. Protocol Description . . . . . . . . . . . . . . . . 30 | |||
3.11.2. Interface Description . . . . . . . . . . . . . . . 31 | 4.10.2. Interface Description . . . . . . . . . . . . . . . 31 | |||
3.11.3. Transport Features . . . . . . . . . . . . . . . . . 32 | 4.10.3. Transport Features . . . . . . . . . . . . . . . . . 31 | |||
3.12. Transport Layer Security (TLS) and Datagram TLS (DTLS) as | 4.11. Transport Layer Security (TLS) and Datagram TLS (DTLS) as | |||
a pseudotransport . . . . . . . . . . . . . . . . . . . . 32 | a pseudotransport . . . . . . . . . . . . . . . . . . . . 32 | |||
3.12.1. Protocol Description . . . . . . . . . . . . . . . . 33 | 4.11.1. Protocol Description . . . . . . . . . . . . . . . . 32 | |||
3.12.2. Interface Description . . . . . . . . . . . . . . . 34 | 4.11.2. Interface Description . . . . . . . . . . . . . . . 33 | |||
3.12.3. Transport Features . . . . . . . . . . . . . . . . . 34 | 4.11.3. Transport Features . . . . . . . . . . . . . . . . . 34 | |||
3.13. Hypertext Transport Protocol (HTTP) over TCP as a | 4.12. Hypertext Transport Protocol (HTTP) over TCP as a | |||
pseudotransport . . . . . . . . . . . . . . . . . . . . . 35 | pseudotransport . . . . . . . . . . . . . . . . . . . . . 35 | |||
3.13.1. Protocol Description . . . . . . . . . . . . . . . . 36 | 4.12.1. Protocol Description . . . . . . . . . . . . . . . . 35 | |||
3.13.2. Interface Description . . . . . . . . . . . . . . . 37 | 4.12.2. Interface Description . . . . . . . . . . . . . . . 36 | |||
3.13.3. Transport features . . . . . . . . . . . . . . . . . 37 | 4.12.3. Transport features . . . . . . . . . . . . . . . . . 37 | |||
4. Transport Service Features . . . . . . . . . . . . . . . . . 38 | 5. Transport Service Features . . . . . . . . . . . . . . . . . 37 | |||
4.1. Complete Protocol Feature Matrix . . . . . . . . . . . . 40 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
7. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 42 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 43 | 10. Informative References . . . . . . . . . . . . . . . . . . . 42 | |||
9. Informative References . . . . . . . . . . . . . . . . . . . 43 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 52 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
1. Introduction | 1. Introduction | |||
Most Internet applications make use of the Transport Services | Internet applications make use of the Services provided by a | |||
provided by TCP (a reliable, in-order stream protocol) or UDP (an | Transport protocol, such as TCP (a reliable, in-order stream | |||
unreliable datagram protocol). We use the term "Transport Service" | protocol) or UDP (an unreliable datagram protocol). We use the term | |||
to mean the end-to-end service provided to an application by the | "Transport Service" to mean the end-to-end service provided to an | |||
transport layer. That service can only be provided correctly if | application by the transport layer. That service can only be | |||
information about the intended usage is supplied from the | provided correctly if information about the intended usage is | |||
application. The application may determine this information at | supplied from the application. The application may determine this | |||
design time, compile time, or run time, and may include guidance on | information at design time, compile time, or run time, and may | |||
whether a feature is required, a preference by the application, or | include guidance on whether a feature is required, a preference by | |||
something in between. Examples of features of Transport Services are | the application, or something in between. Examples of features of | |||
reliable delivery, ordered delivery, content privacy to in-path | Transport Services are reliable delivery, ordered delivery, content | |||
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, MP-TCP, 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. | |||
[GF: Ledbat is a mechanism, not protocol - hence use the work | ||||
"support" in para below.] | ||||
Transport protocols can also be differentiated by the features of the | ||||
services they provide: 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, and LEDBAT can support | ||||
low-priority "scavenger" communication. | ||||
2. Terminology | 2. Terminology | |||
The following terms are defined throughout this document, and in | The following terms are defined throughout this document, and in | |||
subsequent documents produced by TAPS describing the composition and | subsequent documents produced by TAPS describing the composition and | |||
decomposition of transport services. | decomposition of transport services. | |||
[EDITOR'S NOTE: we may want to add definitions for the different | ||||
kinds of interfaces that are important here.] | ||||
[GF: Interfaces may be covered by Micahel Welzl's companion | ||||
document?] | ||||
Transport Service Feature: a specific end-to-end feature that a | Transport Service Feature: a specific end-to-end feature that a | |||
transport service provides to its clients. Examples include | transport service provides to its clients. 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 service 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 | Transport Protocol Component: an implementation of a transport | |||
service feature within a protocol. | 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. Existing Transport Protocols | 3. Transport Service Features | |||
This section provides a list of known IETF transport protocol and | Transport protocols can be differentiated by the features of the | |||
transport protocol frameworks. | services they provide. | |||
3.1. Transport Control Protocol (TCP) | 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 | ||||
transport protocol frameworks. It does not make an assessment about | ||||
whether specific implementations of protocols are fully compliant to | ||||
current IETF specifications. | ||||
4.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. | |||
3.1.1. Protocol Description | 4.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 [RFC4614]. | |||
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 PathMTU discovery [RFC1191][RFC1981] | fit in IP packets. ICMP-based Path MTU discovery [RFC1191][RFC1981] | |||
as well as Packetization Layer Path MTU Discovery (PMTUD) [RFC4821] | as well as Packetization Layer Path MTU Discovery (PMTUD) [RFC4821] | |||
are supported. | 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 | [RFC2018] extends this mechanism by making it possible to identify | |||
missing segments more precisely, reducing spurious retransmission. | missing segments more precisely, reducing 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. | |||
All TCP senders provide Congestion Control [RFC5681]: This uses a | TCP provides congestion control [RFC5681], described further in | |||
separate window, where each time congestion is detected, this | Section 3.1 below. | |||
congestion window is reduced. Most of the used congestion control | ||||
mechanisms use one of three mechanisms to detect congestion: A | ||||
retransmission timer (with exponential back-up), detection of loss | ||||
(interpreted as a congestion signal), or Explicit Congestion | ||||
Notification (ECN) [RFC3168] to provide early signaling (see | ||||
[I-D.ietf-aqm-ecn-benefits]). In addition, a congestion control | ||||
mechanism may react to changes in delay as an early indication for | ||||
congestion. | ||||
A TCP protocol instance can be extended [RFC4614] and tuned. Some | TCP protocol instances can be extended [RFC4614] 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] | By default, TCP segment partitioning uses Nagle's algorithm [RFC0896] | |||
to buffer data at the sender into large segments, potentially | to buffer data at the sender into large segments, potentially | |||
incurring sender-side buffering delay; this algorithm can be disabled | incurring sender-side buffering delay; this algorithm can be disabled | |||
by the sender to transmit more immediately, e.g., to reduce latency | by the sender to transmit more immediately, e.g., to reduce latency | |||
for interactive sessions. | for interactive sessions. | |||
TCP provides a push and a urgent function to enable data to be | TCP provides an "urgent data" function for limited out-of-order | |||
directly accessed by the receiver wihout having to wait for in-order | delivery of the data. This function is deprecated [RFC6093]. | |||
delivery of the data. However, [RFC6093] does not recommend the use | ||||
of the urgent flag due to the range of TCP implementations that | ||||
process TCP urgent indications differently. | ||||
A checksum provides an Integrity Check and is mandatory across the | A mandatory checksum provides a basic integrity check against | |||
entire packet. This check protects from delivery of corrupted data | misdelivery and data corruption over the entire packet. Applications | |||
and miselivery of packets to the wrong endpoint. This check is | that require end to end integrity of data are recommended to include | |||
relatively weak, applications that require end to end integrity of | a stronger integrity check of their payload data. The TCP checksum | |||
data are recommended to include a stronger integrity check of their | does not support partial corruption protection (as in DCCP/UDP-Lite). | |||
payload data. The TCP checksum does not support partial corruption | ||||
protection (as in DCCP/UDP-Lite). | ||||
TCP only supports unicast connections. | TCP supports only unicast connections. | |||
3.1.2. Interface description | 4.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 1) reporting soft errors such as reception fo ICMP error | for: | |||
messages, extensive retransmission or urgent pointer advance, 2) | ||||
providing a possibility to specify the Type-of-Service (TOS) for | o reporting soft errors such as reception of ICMP error messages, | |||
segments, 3) providing a fush call to empty the TCP send queue, and | extensive retransmission or urgent pointer advance, | |||
4) multihoming support. | ||||
o providing a possibility to specify the Differentiated Services | ||||
Code Point (DSCP) (formerly, the Type-of-Service, TOS) for | ||||
segments, | ||||
o providing a flush call to empty the TCP send queue, and | ||||
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. However, there is no RFC that documents this | tuned via this API. There are current no documents in the RFC Series | |||
interface. | that describe this interface. | |||
3.1.3. Transport Features | 4.1.3. Transport Features | |||
The transport features provided by TCP are: | The transport features provided by TCP are: | |||
[EDITOR'S NOTE: expand each of these slightly] | ||||
o unicast transport | o unicast transport | |||
o connection setup with feature negotiation and application-to-port | o connection setup with feature negotiation and application-to-port | |||
mapping, implemented using SYN segments and the TCP option field | mapping, implemented using SYN segments and the TCP option field | |||
to negotiate features. | to negotiate features. | |||
o port multiplexing: each TCP session is uniquely identified by a | o port multiplexing: each TCP session is uniquely identified by a | |||
combination of the ports and IP address fields. | 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: a segment checksum verifies delivery to the | |||
correct endpoint and integrity of the data and options. | correct endpoint and integrity of the data and options. | |||
o segmentation: packets are fragmented to a negotiated maximum | o segmentation: packets are fragmented to a negotiated maximum | |||
segment size, further constrained by the effective MTU from PMTUD. | segment size, further constrained by the effective MTU from PMTUD. | |||
o data bundling, an optional mechanism that uses Nagle's algorithm | o data bundling, an optional mechanism that uses Nagle's algorithm | |||
to coalesce data sent within the same RTT into full-sized | to coalesce data sent within the same RTT into full-sized | |||
segments. | segments. | |||
o flow control using a window-based mechanism, where the receiver | o flow control using a window-based mechanism, where the receiver | |||
advertises the window that it is willing to buffer. | advertises the window that it is willing to buffer. | |||
o congestion control: a window-based method that uses AIMD to | o congestion control: a window-based method that uses Additive | |||
control the sending rate and to conservatively choose a rate after | Increase Multiplicative Decrease (AIMD) to control the sending | |||
congestion is detected. | rate and to conservatively choose a rate after congestion is | |||
detected. | ||||
3.2. Multipath TCP (MPTCP) | 4.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. It is designed to be as transparent as possible to middle- | |||
boxes. It does so by establishing regular TCP flows between a pair | boxes. It does so by establishing regular TCP flows between a pair | |||
of source/destination endpoints, and multiplexing the application's | of source/destination endpoints, and multiplexing the application's | |||
stream over these flows. | stream over these flows. | |||
3.2.1. Protocol Description | 4.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. | |||
3.2.2. Interface Description | 4.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. | |||
3.2.3. Transport features | 4.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. In addition, by multiplexing one byte stream over | |||
separate paths, it can achieve a higher throughput than TCP in | separate paths, it can achieve a higher throughput than TCP in | |||
certain situations (note however that coupled congestion control | certain situations. Note, however, that coupled congestion control | |||
[RFC6356] might limit this benefit to maintain fairness to other | [RFC6356] might limit this benefit to maintain fairness to other | |||
flows at the bottleneck). When aggregating capacity over multiple | flows at the bottleneck. When aggregating capacity over multiple | |||
paths, and depending on the way packets are scheduled on each TCP | paths, and depending on the way packets are scheduled on each TCP | |||
subflow, an additional delay and higher jitter might be observed | subflow, an additional delay and higher jitter might be observed | |||
observed before in-order delivery of data to the applications. | 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 mutiple connections. | o congestion control with load balancing over multiple connections. | |||
o endpoint multiplexing of a single byte stream (higher throughput). | o endpoint multiplexing of a single byte stream (higher throughput). | |||
o address family multiplexing: sub-flows can be started over IPv4 or | o address family multiplexing: sub-flows can be started over IPv4 or | |||
IPv6 for the same session. | IPv6 for the same session. | |||
o resilience to network failure and/or handover. | o resilience to network failure and/or handover. | |||
[AUTHOR'S NOTE: it is unclear whether MPTCP has to provide data | 4.3. Stream Control Transmission Protocol (SCTP) | |||
bundling.] | ||||
3.3. Stream Control Transmission Protocol (SCTP) | SCTP is a message-oriented IETF standards track transport protocol. | |||
The base protocol is specified in [RFC4960]. It supports multi- | ||||
homing and path failover to provide resilience to path failures. An | ||||
SCTP association has multiple streams in each direction, providing | ||||
in-sequence delivery of user messages within each stream. This | ||||
allows it to minimize head of line blocking. SCTP supports multiple | ||||
stream scheduling schemes controlling stream multiplexing, including | ||||
priority and fair weighting schemes. | ||||
SCTP is a message-oriented standards track transport protocol. The | SCTP is extensible. Currently defined extensions include mechanisms | |||
base protocol is specified in [RFC4960]. It supports multi-homing to | for dynamic re-configuration of streams [RFC6525] and IP addresses | |||
handle path failures. It also optionally supports path failover to | ||||
provide resilliance to path failures. An SCTP association has | [RFC5061]. Furthermore, the extension specified in [RFC3758] | |||
multiple unidirectional streams in each direction and provides in- | introduces the concept of partial reliability for user messages. | |||
sequence delivery of user messages only within each stream. This | ||||
allows it to minimize head of line blocking. SCTP is extensible and | ||||
the currently defined extensions include mechanisms for dynamic re- | ||||
configurations of streams [RFC6525] and IP-addresses [RFC5061]. | ||||
Furthermore, the extension specified in [RFC3758] introduces the | ||||
concept of partial reliability for user messages. | ||||
SCTP was originally developed for transporting telephony signalling | SCTP was originally developed for transporting telephony signalling | |||
messages and is deployed in telephony signalling networks, especially | 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 and | services, for example in the WebRTC framework for data channels. It | |||
is therefore deployed in all WEB-browsers supporting WebRTC. | is therefore deployed in all Web browsers supporting WebRTC. | |||
3.3.1. Protocol Description | 4.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, and 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 miselivery of packets to the wrong 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, a | 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 checksum coverage as provided by DCCP or UDP-Lite is not | |||
supported. | supported. | |||
SCTP has been designed with extensibility in mind. Each SCTP packet | SCTP has been designed with extensibility in mind. Each SCTP packet | |||
starts with a single common header containing the port numbers, a | starts with a single common header containing the port numbers, a | |||
verification tag and the CRC32c checksum. This common header is | verification tag and the CRC32c checksum. This common header is | |||
followed by a sequence of chunks. Each chunk consists of a type | followed by a sequence of chunks. Each chunk consists of a type | |||
field, flags, a length field and a value. [RFC4960] defines how a | 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. | |||
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 the | 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 the Nagle 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. ICMP-based path | |||
MTU discovery as specified for IPv4 in [RFC1191] and for IPv6 in | MTU discovery as specified for IPv4 in [RFC1191] and for IPv6 in | |||
[RFC1981] as well as packetization layer path MTU discovery as | [RFC1981] as well as packetization layer path MTU discovery as | |||
specified in [RFC4821] with probe packets using the padding chunks | specified in [RFC4821] with probe packets using the padding chunks | |||
defined the [RFC4820] are supported. | defined in [RFC4820] are supported. | |||
[RFC4960] specifies a TCP friendly congestion control to protect the | [RFC4960] specifies TCP-friendly congestion control to protect the | |||
network against overload. SCTP also uses a sliding window flow | network against overload; see Section 3.1 for more. SCTP also uses | |||
control to protect receivers against overflow. Similar to TCP, SCTP | sliding window flow control to protect receivers against overflow. | |||
also supports delaying acknowledgements. [RFC7053] provides a way | Similar to TCP, SCTP also supports delaying acknowledgments. | |||
for the sender of user messages to request the immediate sending of | [RFC7053] provides a way for the sender of user messages to request | |||
the corresponding acknowledgements. | the immediate sending of the 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 upper | messages can be sent un- ordered, or ordered upon request by the | |||
layer. Un-ordered messages can be delivered as soon as they are | upper layer. Un-ordered messages can be delivered as soon as they | |||
completely received. Ordered messages sent on the same stream are | are completely received. Ordered messages sent on the same stream | |||
delivered at the receiver in the same order as sent by the sender. | are delivered at the receiver in the same order as sent by the | |||
For user messages not requiring fragmentation, this minimises head of | sender. For user messages not requiring fragmentation, this | |||
line blocking. | minimizes head of 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, which results in sending a large message on one stream | user- messages. Large messages on one stream can therefore block the | |||
can 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. Furthermore, | [I-D.ietf-tsvwg-sctp-ndata] overcomes this limitation. This draft | |||
[I-D.ietf-tsvwg-sctp-ndata] specifies multiple algorithms for the | also specifies multiple algorithms for the sender side selection of | |||
sender side selection of which streams to send data from supporting a | which streams to send data from, supporting a variety of scheduling | |||
variety of scheduling algorithms including priority based methods. | algorithms including priority based methods. The stream re- | |||
The stream re-configuration extension defined in [RFC6525] allows | configuration extension defined in [RFC6525] allows streams to be | |||
streams to be reset during the lifetime of an association and to | reset during the lifetime of an association and to increase the | |||
increase the number of streams, if the number of streams negotiated | number of streams, if the number of streams negotiated in the SCTP | |||
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 behaviour. 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 for these | specify the policy for abandoning user messages. Examples of these | |||
policies defined in [RFC3758] and [RFC7496] are: | policies defined in [RFC3758] and [RFC7496] are: | |||
o Limiting the time a user message is dealt with by the sender. | 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 | o Limiting the number of retransmissions for each fragment of a user | |||
message. If the number of retransmissions is limited to 0, one | message. If the number of retransmissions is limited to 0, one | |||
gets a service similar to UDP. | gets a service similar to UDP. | |||
o Abandoning messages of lower priority in case of a send buffer | o Abandoning messages of lower priority in case of a send buffer | |||
shortage. | 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 livetime 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. Each SCTP end-point supervises | reachable one, if one exists. [I-D.ietf-tsvwg-sctp-failover] | |||
continuously the reachability of all peer addresses using a heartbeat | specifies a quicker failover operation reducing the latency of the | |||
mechanism. | 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 (for example un-ordered delivery or partial | services provided by SCTP, such as un-ordered delivery or partial | |||
reliability), and therefore the use of DTLS over SCTP has been | reliability. Therefore, the use of DTLS over SCTP has been specified | |||
specified in [RFC6083] to overcome these limitations. When using | in [RFC6083] to overcome these limitations. When using DTLS over | |||
DTLS over SCTP, the application can use almost all services provided | SCTP, the application can use almost all services provided by SCTP. | |||
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 support NAT 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. | |||
3.3.2. Interface Description | 4.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 to control | o the base protocol defined in [RFC4960]. The API allows control | |||
the 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 acknowledgement 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 event 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 that application can also be notified and user messages | failures, including drop of messages sent unreliably, the | |||
can be returned to the application. When sending user messages, | application can also be notified and user messages can be returned | |||
the stream id, a payload protocol identifier, an indication | to the application. When sending user messages, the stream id, a | |||
whether ordered delivery is requested or not. These parameters | payload protocol identifier, an indication whether ordered | |||
can also be provided on message reception. Additionally a context | delivery is requested or not. These parameters can also be | |||
can be provided when sending, which can be use in case of send | provided on message reception. Additionally a context can be | |||
failures. The sending of arbitrary large user messages is | provided when sending, which can be use in case of send failures. | |||
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. | |||
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. | |||
skipping to change at page 13, line 30 | skipping to change at page 14, line 41 | |||
outgoing streams and the whole association. It provides also a | outgoing streams and the whole association. It provides also a | |||
way to notify the association about the corresponding events. | way to notify the association about the corresponding events. | |||
Furthermore the application can increase the number of streams. | Furthermore the application can increase the number of streams. | |||
o the UDP Encapsulation of SCTP packets extension defined in | o the UDP Encapsulation of SCTP packets extension defined in | |||
[RFC6951]. The API allows the management of the remote UDP | [RFC6951]. The API allows the management of the remote UDP | |||
encapsulation port. | encapsulation port. | |||
o the SCTP SACK-IMMEDIATELY extension defined in [RFC7053]. The API | o the SCTP SACK-IMMEDIATELY extension defined in [RFC7053]. The API | |||
allows the sender of a user message to request the receiver to | allows the sender of a user message to request the receiver to | |||
send the corresponding acknowledgement immediately. | send the corresponding acknowledgment immediately. | |||
o the additional PR-SCTP policies defined in [RFC7496]. The API | o the additional PR-SCTP policies defined in [RFC7496]. The API | |||
allows to enable/disable the PR-SCTP extension, choose the PR-SCTP | allows to enable/disable the PR-SCTP extension, choose the PR-SCTP | |||
policies defined in the document and provide statistical | policies defined in the document and provide statistical | |||
information about abandoned messages. | information about abandoned messages. | |||
Future documents describing SCTP protocol extensions are expected to | Future documents describing SCTP protocol extensions are expected to | |||
describe the corresponding BSD Sockets API extension in a "Socket API | describe the corresponding BSD Sockets API extension in a "Socket API | |||
Considerations" section. | Considerations" section. | |||
skipping to change at page 14, line 15 | skipping to change at page 15, line 26 | |||
the sockets and the SCTP associations. | the sockets and the SCTP associations. | |||
The SCTP stack can provide information to the applications about | The SCTP stack can provide information to the applications about | |||
state changes of the individual paths and the association whenever | state changes of the individual paths and the association whenever | |||
they occur. These events are delivered similar to user messages but | they occur. These events are delivered similar to user messages but | |||
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 snet 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. | behaviour through an extensive set of socket options. | |||
The SCTP kernel implementations of FreeBSD, Linux and Solaris follow | The SCTP kernel implementations of FreeBSD, Linux and Solaris follow | |||
mostly the specified extension to the BSD Sockets API for the base | mostly the specified extension to the BSD Sockets API for the base | |||
protocol and the corresponding supported protocol extensions. | protocol and the corresponding supported protocol extensions. | |||
3.3.3. Transport Features | 4.3.3. Transport Features | |||
The transport features provided by SCTP are: | The transport features provided by SCTP are: | |||
[GF: This needs to be harmonised with the components for TCP] | ||||
o unicast. | o unicast. | |||
o connection setup with feature negotiation and application-to-port | o connection setup with feature negotiation and application-to-port | |||
mapping. | mapping. | |||
o port multiplexing. | o port multiplexing. | |||
o message-oriented delivery. | o Uni-or bidirectional communication. | |||
o fully reliable or partially reliable delivery. | o message-oriented delivery supporting multiple concurrent streams. | |||
o fully reliable, partially reliable, or unreliable delivery. | ||||
o ordered and unordered delivery within a stream. | o ordered and unordered delivery within a stream. | |||
o support for multiple concurrent streams. | o user message fragmentation and reassembly. | |||
o support for stream scheduling prioritization. | o support for stream scheduling prioritization. | |||
o flow control. | ||||
o congestion control. | ||||
o user message bundling. | o user message bundling. | |||
o user message fragmentation and reassembly. | o flow control using a window-based mechanism. | |||
o congestion control using methods similar to TCP. | ||||
o strong error/misdelivery detection (CRC32c). | o strong error/misdelivery detection (CRC32c). | |||
o transport layer multihoming for resilience. | o transport layer multihoming for resilience. | |||
o transport layer mobility. | o transport layer mobility. | |||
3.4. User Datagram Protocol (UDP) | o resilience to network failure and/or handover. | |||
4.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 | datagram protocol that preserves message boundaries. It provides no | |||
none of the following transport features: error correction, | error correction,congestion control, or flow control. It can be used | |||
congestion control, or flow control. It can be used to send | to send broadcast datagrams (IPv4) or multicast datagrams (IPv4 and | |||
broadcast datagrams (IPv4) or multicast datagrams (IPv4 and IPv6), in | IPv6), in addition to unicast and anycast datagrams. IETF guidance | |||
addition to unicast (and anycast) datagrams. IETF guidance on the | on the use of UDP is provided in {{I-D.ietf-tsvwg- rfc5405bis}}. UDP | |||
use of UDP is provided in[I-D.ietf-tsvwg-rfc5405bis]. UDP is widely | is widely implemented and widely used by common applications, | |||
implemented and widely used by common applications, including DNS. | including DNS. | |||
3.4.1. Protocol Description | 4.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. Each stream of | |||
messages is independently managed, therefore retransmission does not | messages is independently managed, therefore retransmission does not | |||
hold back data sent using other logical streams. It provides | hold back data sent using other logical streams. It provides | |||
detection of payload errors and misdelivery of packets to the wrong | detection of payload errors and misdelivery of packets to an | |||
endpoint, either of which result in discard of received datagrams. | unintended endpoint, either of which result in discard of received | |||
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 its use. | [I-D.ietf-tsvwg-rfc5405bis], certain special cases permit this use. | |||
These datagrams relie on the IPv4 header checksum to protect from | These datagrams rely on the IPv4 header checksum to protect from | |||
misdelivery to the wrong endpoint. IPv6 does not by permit UDP | misdelivery to an unintended endpoint. IPv6 does not by 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]. The checksum support considerations for | |||
omitting the checksum are defined in [RFC6936]. Note that due to the | omitting the checksum are defined in [RFC6936]. | |||
relatively weak form of checksum used by UDP, applications that | ||||
require end to end integrity of data are recommended to include a | ||||
stronger integrity check of their payload data. | ||||
It 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. | transit. Note that due to the relatively weak form of checksum used | |||
by UDP, applications that require end to end integrity of data are | ||||
A receiving application that is unable to run sufficiently fast, or | recommended to include a stronger integrity check of their payload | |||
frequently, may miss messages since there is no flow control. The | data. | |||
lack of congestion handling implies UDP traffic may experience loss | ||||
when using an overlaoded path and may cause the loss of messages from | ||||
other protocols (e.g., TCP) when sharing the same network path. | ||||
[GF: This para isn't needed": Messages with payload errors are | Because UDP provides no flow control, a receiving application that is | |||
ordinarily detected by an invalid end- to-end checksum and are | unable to run sufficiently fast, or frequently, may miss messages. | |||
discarded before being delivered to an application. UDP-Lite (see | The lack of congestion handling implies UDP traffic may experience | |||
[RFC3828], and below) provides the ability for portions of the | loss when using an overloaded path, and may cause the loss of | |||
message contents to be exempt from checksum coverage.] | messages from other protocols (e.g., TCP) when sharing the same | |||
network path. | ||||
On transmission, UDP encapsulates each datagram into an IP packet, | On transmission, UDP encapsulates each datagram into an IP packet, | |||
which may in turn be fragmented by IP and are reassembled before | which may in turn be fragmented by IP. Fragments are reassembled | |||
delivery to the UDP receiver. | before delivery to the UDP receiver. | |||
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]. | |||
3.4.2. Interface Description | 4.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). | |||
Demultiplexing using multiple abstract endpoints (sockets) on the | Demultiplexing using multiple abstract endpoints (sockets) on the | |||
same IP address are supported. The same socket may be used by a | same IP address are supported. The same socket may be used by a | |||
single server to interact with multiple clients (note: this behavior | single server to interact with multiple clients (note: this behavior | |||
differs from TCP, which uses a pair of tuples to identify a | differs from TCP, which uses a pair of tuples to identify a | |||
connection). Multiple server instances (processes) that bind the | connection). Multiple server instances (processes) that bind the | |||
skipping to change at page 16, line 48 | skipping to change at page 18, line 5 | |||
implementation arranges to not duplicate the same received unicast | implementation arranges to not duplicate the same received unicast | |||
message to multiple server processes. | message to multiple server processes. | |||
Many operating systems also allow a UDP socket to be "connected", | Many operating systems also allow a UDP socket to be "connected", | |||
i.e., to bind a UDP socket to a specific (remote) UDP endpoint. | i.e., to bind a UDP socket to a specific (remote) UDP endpoint. | |||
Unlike TCP's connect primitive, for UDP, this is only a local | Unlike TCP's connect primitive, for UDP, this is only a local | |||
operation that serves to simplify the local send/receive functions | operation that serves to simplify the local send/receive functions | |||
and to filter the traffic for the specified addresses and ports | and to filter the traffic for the specified addresses and ports | |||
[I-D.ietf-tsvwg-rfc5405bis]. | [I-D.ietf-tsvwg-rfc5405bis]. | |||
3.4.3. Transport Features | 4.4.3. Transport Features | |||
The transport features provided by UDP are: | The transport features provided by UDP are: | |||
o unicast. | o unicast. | |||
o multicast, anycast, or IPv4 broadcast. | o multicast, anycast, or IPv4 broadcast. | |||
o port multiplexing. A receiving port can be configured to receive | o port multiplexing. A receiving port can be configured to receive | |||
datagrams from multiple senders. | datagrams from multiple senders. | |||
o message-oriented delivery. | o message-oriented delivery. | |||
o unidirectional or bidirectional. Transmission in each direction | o Uni-or bidirectional communication. Transmission in each | |||
is independent. | direction is independent. | |||
o non-reliable delivery. | o non-reliable delivery. | |||
o non-ordered delivery. | o non-ordered delivery. | |||
o IPv6 jumbograms. | o error detection: a segment checksum verifies delivery to the | |||
correct endpoint and integrity of the data. This checksum is | ||||
o error and misdelivery detection (checksum). | optional for IPv4, and optional under specific conditions for IPv6 | |||
where all or none of the payload data is protected. | ||||
o optional checksum. All or none of the payload data is protected. | o IPv6 jumbograms. | |||
3.5. Lightweight User Datagram Protocol (UDP-Lite) | 4.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]. | |||
3.5.1. Protocol Description | 4.5.1. Protocol Description | |||
UDP-Lite is a connection-less datagram protocol, with no connection | ||||
setup or feature negotiation. The protocol use messages, rather than | ||||
a byte-stream. Each stream of messages is independently managed, | ||||
therefore retransmission does not hold back data sent using other | ||||
logical streams. | ||||
It provides multiplexing to multiple sockets on each host using port | ||||
numbers, and its operation follows that for UDP. An active UDP-Lite | ||||
session is identified by its four-tuple of local and remote IP | ||||
addresses and local port and remote port numbers. | ||||
UDP-Lite changes the semantics of the UDP "payload length" field to | Like UDP, UDP-Lite is a connection-less datagram protocol, with no | |||
that of a "checksum coverage length" field, and is identified by a | connection setup or feature negotiation. It changes the semantics of | |||
different IP protocol/next-header value. Otherwise, UDP-Lite is | the UDP "payload length" field to that of a "checksum coverage | |||
semantically identical to UDP. Applications using UDP-Lite therefore | length" field, and is identified by a different IP protocol/next- | |||
can not make assumptions regarding the correctness of the data | header value. Otherwise, UDP-Lite is semantically identical to UDP. | |||
received in the insensitive part of the UDP-Lite payload. | Applications using UDP-Lite therefore cannot make assumptions | |||
regarding the correctness of the data received in the insensitive | ||||
part of the UDP-Lite payload. | ||||
As for UDP, mechanisms for receiver flow control, congestion control, | In the same way as for UDP, mechanisms for receiver flow control, | |||
PMTU or PLPMTU discovery, support for ECN, etc need to be provided by | congestion control, PMTU or PLPMTU discovery, support for ECN, etc | |||
upper layer protocols [I-D.ietf-tsvwg-rfc5405bis]. | 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 | A UDP-Lite service may support IPv4 broadcast, multicast, anycast and | |||
unicast, and IPv6 multicast, anycast and unicast. | unicast, and IPv6 multicast, anycast and unicast. | |||
3.5.2. Interface Description | 4.5.2. Interface Description | |||
There is no current API specified in the RFC Series, but guidance on | There is no API currently specified in the RFC Series, but guidance | |||
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: at the sender, this specifies the intended checksum coverage, | |||
with the remaining unprotected part of the payload called the "error- | with the remaining unprotected part of the payload called the "error- | |||
insensitive part". The checksum coverage may also be made visible to | insensitive part". The checksum coverage may also be made visible to | |||
the application via the UDP-Lite MIB module [RFC5097]. | the application via the UDP-Lite MIB module [RFC5097]. | |||
3.5.3. Transport Features | 4.5.3. Transport Features | |||
The transport features provided by UDP-Lite are: | The transport features provided by UDP-Lite are: | |||
o unicast. | o unicast. | |||
o multicast, anycast, or IPv4 broadcast. | o multicast, anycast, or IPv4 broadcast. | |||
o port multiplexing (as for UDP). | o port multiplexing (as for UDP). | |||
o message-oriented delivery (as for UDP). | o message-oriented delivery (as for UDP). | |||
o Uni-or bidirectional communication. Transmission in each | ||||
direction is independent. | ||||
o non-reliable delivery (as for UDP). | o non-reliable delivery (as for UDP). | |||
o non-ordered delivery (as for UDP). | o non-ordered delivery (as for UDP). | |||
o error and misdelivery detection (checksum). | o misdelivery detection (the checksum always provides protection | |||
from misdelivery). | ||||
o partialor full integrity protection. The checksum coverage field | o partial or full integrity protection. The checksum coverage field | |||
indicates the size of the payload data covered by the checksum. | indicates the size of the payload data covered by the checksum. | |||
3.6. Datagram Congestion Control Protocol (DCCP) | 4.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]. | |||
It 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 functions | |||
(feature negotiation, path state management, RTT calculation, PMTUD, | (feature negotiation, path state management, RTT calculation, PMTUD, | |||
etc): This allows applications to use a compatible method defining | etc): This allows applications to use a compatible method defining | |||
how they send packets and where suitable to choose common algorithms | how they send packets and where suitable to choose common algorithms | |||
to manage their functions. Examples of suitable applications include | to manage their functions. Examples of suitable applications include | |||
interactive applications, streaming media or on-line games [RFC4336]. | interactive applications, streaming media or on-line games [RFC4336]. | |||
3.6.1. Protocol Description | 4.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. The protocol is defined by a family of RFCs. | |||
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. At connection setup, DCCP also exchanges the service code | |||
[RFC5595], a mechanism that allows transport instantiations to | [RFC5595], a mechanism that allows transport instantiations to | |||
indicate the service treatment that is expected from the network. | indicate the service treatment that is expected from the network. | |||
skipping to change at page 19, line 52 | skipping to change at page 21, line 6 | |||
the maximum packet size. A DCCP interface allows applications to | the maximum packet size. A DCCP interface allows applications to | |||
request fragmentation for packets larger than PMTU, but not larger | 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 ordered or unordered delivery of data, and does not itself | |||
provide retransmission. DCCP supports reduced checksum coverage, a | provide retransmission. DCCP supports reduced checksum coverage, a | |||
partial integrity mechanisms similar to UDP-lIte. There is also a | partial integrity mechanism similar to UDP-Lite. There is also a | |||
Data Checksum option that when enabled, contains a strong CRC, to | Data Checksum option that when enabled, contains a strong CRC, to | |||
enable endpoints to detect application data corruption. | enable endpoints to detect application data corruption - similar to | |||
SCTP. | ||||
Receiver flow control is supported: limiting 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 | A DCCP protocol instance can be extended [RFC4340] and tuned using | |||
features. Some features are sender-side only, requiring no | additional features. Some features are sender-side only, requiring | |||
negotiation with the receiver; some are receiver-side only, some are | no negotiation with the receiver; some are receiver-side only; and | |||
explicitly negotiated during connection setup. | some are explicitly negotiated during connection setup. | |||
A DCCP service is unicast. | DCCP service is unicast-only. | |||
DCCP supports negotiation of the congestion control profile, to | It supports negotiation of the congestion control profile, to provide | |||
provide Plug and Play congestion control mechanisms. Examples of | plug- and-play congestion control mechanisms. Examples of specified | |||
specified profiles include [RFC4341] [RFC4342] [RFC5662]. All IETF- | profiles include "TCP-like" [RFC4341], "TCP-friendly" [RFC4342], and | |||
defined methods provide Congestion Control. | "TCP-friendly for small packets" [RFC5622]. Additional mechanisms | |||
are recorded in an IANA registry. | ||||
DCCP use a Connect packet to initiate a session, and permits half- | DCCP uses a Connect packet to initiate a session, and permits half- | |||
connections that allow each client to choose the features it wishes | connections that allow each client to choose the features it wishes | |||
to support. Simultaneous open [RFC5596], as in TCP, can enable | to support. Simultaneous open [RFC5596], as in TCP, can enable | |||
interoperability in the presence of middleboxes. The Connect packet | interoperability in the presence of middleboxes. The Connect packet | |||
includes a Service Code field [RFC5595] designed to allow middle | includes a Service Code field [RFC5595] designed to allow middleboxes | |||
boxes and endpoints to identify the characteristics required by a | and endpoints to identify the characteristics required by a session. | |||
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 it 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 in NAPT/NATs is defined in [RFC4340] and | |||
[RFC5595]. | [RFC5595]. | |||
Upper layer protocols specified on top of DCCP include: DTLS | Upper layer protocols specified on top of DCCP include DTLS | |||
[RFC5595], RTP [RFC5672], ICE/SDP [RFC6773]. | [RFC5595], RTP [RFC5672], ICE/SDP [RFC6773]. | |||
A common packet format has allowed tools to evolve that can read and | A common packet format has allowed tools to evolve that can read and | |||
interpret DCCP packets (e.g. Wireshark). | interpret DCCP packets (e.g., Wireshark). | |||
3.6.2. Interface Description | 4.6.2. Interface Description | |||
API characteristics include: - Datagram transmission. - Notification | API characteristics include: - Datagram transmission. - Notification | |||
of the current maximum packet size. - Send and reception of zero- | of the current maximum packet size. - Send and reception of zero- | |||
length payloads. - Slow Receiver flow control at a receiver. - | length payloads. - Slow Receiver flow control at a receiver. - | |||
Detect a Slow receiver at the sender. | ability to detect a slow receiver at the sender. | |||
There is no current API curremntly specified in the RFC Series. | There is no API currently specified in the RFC Series. | |||
3.6.3. Transport Features | 4.6.3. Transport Features | |||
The transport features provided by DCCP are: | The transport features provided by DCCP are: | |||
o unicast. | o unicast transport. | |||
o connection setup with feature negotiation and application-to-port | o connection setup with feature negotiation and application-to-port | |||
mapping. | mapping. | |||
o Service Codes. Identifies the upper layer service to the endpoint | o Service Codes. Identifies the upper layer service to the endpoint | |||
and network. | and network. | |||
o port multiplexing. | o port multiplexing. | |||
o Uni-or bidirectional communication. | ||||
o message-oriented delivery. | o message-oriented delivery. | |||
o non-reliable delivery. | o non-reliable delivery. | |||
o ordered delivery. | o ordered delivery. | |||
o flow control. The slow receiver function allows a receiver to | o flow control. The slow receiver function allows a receiver to | |||
control the rate of the sender. | control the rate of the sender. | |||
o drop notification. Allows a receiver to notify which datagrams | o drop notification. Allows a receiver to notify which datagrams | |||
were not delivered to the peer upper layer protocol. | were not delivered to the peer upper layer protocol. | |||
o timestamps. | o timestamps. | |||
o partial and full integrity protection (with optional strong | o partial and full integrity protection (with optional strong | |||
integrity check). | integrity check). | |||
3.7. Lightweight User Datagram Protocol (UDP-Lite) | 4.7. Internet Control Message Protocol (ICMP) | |||
The Lightweight User Datagram Protocol (UDP-Lite) [RFC3828] is an | ||||
IETF standards track transport protocol. It provides a | ||||
unidirectional, datagram protocol that preserves message boundaries. | ||||
IETF guidance on the use of UDP-Lite is provided in | ||||
[I-D.ietf-tsvwg-rfc5405bis]. | ||||
3.7.1. Protocol Description | ||||
UDP-Lite is a connection-less datagram protocol, with no connection | ||||
setup or feature negotiation. The protocol use messages, rather than | ||||
a byte-stream. Each stream of messages is independently managed, | ||||
therefore retransmission does not hold back data sent using other | ||||
logical streams. | ||||
It provides multiplexing to multiple sockets on each host using port | ||||
numbers, and its operation follows that for UDP. An active UDP-Lite | ||||
session is identified by its four-tuple of local and remote IP | ||||
addresses and local port and remote port numbers. | ||||
UDP-Lite 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 | ||||
can not make assumptions regarding the correctness of the data | ||||
received in the insensitive part of the UDP-Lite payload. | ||||
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 | ||||
benefit from having partially-damaged payloads delivered, rather than | ||||
discarded. One use is to support error tolerate payload corruption | ||||
when used over paths that include error-prone links, another | ||||
application is when header integrity checks are required, but payload | ||||
integrity is provided by some other mechanism (e.g., [RFC6936]. | ||||
A UDP-Lite service may support IPv4 broadcast, multicast, anycast and | ||||
unicast, and IPv6 multicast, anycast and unicast. | ||||
3.7.2. Interface Description | ||||
There is no current API specified in the RFC Series, but guidance 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 | ||||
a single (socket) option that communicates a checksum coverage length | ||||
value: at the sender, this specifies the intended checksum coverage, | ||||
with the remaining unprotected part of the payload called the "error- | ||||
insensitive part". The checksum coverage may also be made visible to | ||||
the application via the UDP-Lite MIB module [RFC5097]. | ||||
3.7.3. Transport Features | ||||
The transport features provided by UDP-Lite are: | ||||
o unicast | ||||
o multicast, anycast, or IPv4 broadcast. | ||||
o port multiplexing (as for UDP). | ||||
o message-oriented delivery (as for UDP). | ||||
o non-reliable delivery(as for UDP). | ||||
o non-ordered delivery (as for UDP). | ||||
o partial or full integrity protection. | ||||
3.8. 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. | [RFC4433] for IPv6 are IETF standards track protocols. | |||
It provides a conection-less unidirectional protocol that delivers | ICMP is a connection-less unidirectional protocol that delivers | |||
individual messages. It provides none of the following transport | individual messages, without error correction, congestion control, or | |||
features: error correction, congestion control, or flow control. | flow control. Messages may be sent as unicast, IPv4 broadcast or | |||
Some messages may be sent as broadcast datagrams (IPv4) or multicast | multicast datagrams (IPv4 and IPv6), in addition to anycast | |||
datagrams (IPv4 and IPv6), in addition to unicast (and anycast) | ||||
datagrams. | datagrams. | |||
3.8.1. Protocol Description | 4.7.1. Protocol Description | |||
ICMP is a conection-less unidirectional protocol that delivers | ICMP is a connection-less unidirectional protocol that delivers | |||
individual messages. The protocol uses independent messages, | individual messages. The protocol uses independent messages, | |||
ordinarily called datagrams. Each message is required to carry a | ordinarily called datagrams. Each message is required to carry a | |||
checksum as an integrity check and to protect from misdelivery to the | checksum as an integrity check and to protect from misdelivery to an | |||
wrong endpoint. | 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 the reported issue. Some formats of messages may | that encountered a reported issue. Some formats of messages can also | |||
also carry other payload data. Each message carries an integrity | carry other payload data. Each message carries an integrity check | |||
check calculated in the same way as UDP. | 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 | |||
neighbour 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 ICMP messages | Transport Protocols and upper layer protocols can use received ICMP | |||
to help them take appropriate decisions when network or endpoint | messages to help them take appropriate decisions when network or | |||
errors are reported. For example to implement, ICMP-based PathMTU | endpoint errors are reported. For example to implement, ICMP-based | |||
discovery [RFC1191][RFC1981] or assist in Packetization Layer Path | Path MTU discovery [RFC1191][RFC1981] or assist in Packetization | |||
MTU Discovery (PMTUD) [RFC4821]. Such reactions to received messages | Layer Path MTU Discovery (PMTUD) [RFC4821]. Such reactions to | |||
needs to protects from off-path data injection | received messages need to protects from off-path data injection | |||
[I-D.ietf-tsvwg-rfc5405bis], avoiding an application receiving | [I-D.ietf-tsvwg-rfc5405bis], avoiding an application receiving | |||
packets that were created by an unauthorized third party. An | packets that were created by an unauthorized third party. An | |||
application therefore needs to ensure that aLL messaged are | application therefore needs to ensure that all messages are | |||
appropriately validated, by checking the payload of the messages to | appropriately validated, by checking the payload of the messages to | |||
ensure these are received in response to actually transmitted traffic | ensure these are received in response to actually transmitted traffic | |||
(e.g., a reported error condition that corresponds to a UDP datagram | (e.g., a reported error condition that corresponds to a UDP datagram | |||
or TCP segment was actually sent by the application). This requires | or TCP segment was actually sent by the application). This requires | |||
context [RFC6056], such as local state about communication instances | context [RFC6056], such as local state about communication instances | |||
to each destination (e.g., in the TCP, DCCP, or SCTP protocols). | to each destination (e.g., in the TCP, DCCP, or SCTP protocols). | |||
This state is not always maintained by UDP-based applications | 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]. | |||
3.8.2. Interface Description | 4.7.2. Interface Description | |||
ICMP processing is integrated into many connection-oriented | ICMP processing is integrated into many connection-oriented | |||
transports, but like other functions needs to be provided by an | transports, but like other functions needs to be provided by an | |||
upper-layer protocol when using UDP and UDP-Lite. On some stacks, a | 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 | bound socket also allows a UDP application to be notified when ICMP | |||
error messages are received for its transmissions | error messages are received for its transmissions | |||
[I-D.ietf-tsvwg-rfc5405bis]. | [I-D.ietf-tsvwg-rfc5405bis]. | |||
3.8.3. Transport Features | 4.7.3. Transport Features | |||
The transport features provided by ICMP are: | The transport features provided by ICMP are: | |||
o unidirectional. | o unidirectional. | |||
o multicast, anycast and IP4 broadcast. | o multicast, anycast and IP4 broadcast. | |||
o message-oriented delivery. | o message-oriented delivery. | |||
o non-reliable delivery. | o non-reliable delivery. | |||
o non-ordered delivery. | o non-ordered delivery. | |||
o error and misdelivery detection (checksum). | o error and misdelivery detection (checksum). | |||
3.9. Realtime Transport Protocol (RTP) | 4.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 network services, including TCP, UDP, | |||
UDP-Lite, or DCCP. | UDP-Lite, or DCCP. | |||
[EDITOR'S NOTE: Varun Singh signed up as contributor for this | 4.8.1. Protocol Description | |||
section. Given the complexity of RTP, suggest to have an abbreviated | ||||
section here contrasting RTP with other transports, and focusing on | ||||
those features that are RTP-unique. Gorry Fairhurst contributed this | ||||
stub section] | ||||
3.9.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 | Real Time Control Protocol, RTCP. The transport does not provide | |||
connection setup, but relies on out-of-band techniques or associated | connection setup, instead relying on out-of-band techniques or | |||
control protocols to setup, negotiate parameters or tear-down a | associated control protocols to setup, negotiate parameters or tear | |||
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 media formats | |||
allow packets to carry a wide range of media, and specifies a wide | allow packets to carry a wide range of media, and specifies a wide | |||
range of mulriplexing, error control and other support mechanisms. | range of multiplexing, error control and other support mechanisms. | |||
If a frame of media data is large, it will be fragment this into | If a frame of media data is large, it will be fragmented into several | |||
several RTP packets. If small, several frames may be bundled into a | RTP packets. Likewise, several small frames may be bundled into a | |||
single RTP packet. RTP may runs over a congestion-controlled or non- | single RTP packet. RTP may run over a congestion-controlled or non- | |||
congestion-controlled transport protocol. | congestion-controlled transport protocol. | |||
An RTP receiver collects RTP packets from network, validates them for | An RTP receiver collects RTP packets from network, validates them for | |||
correctness, and sends them to the media decoder input-queue. | 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. | |||
RTCP is an associated control protocol that works with RTP. Both the | RTCP is a control protocol that works alongside a RTP flow. Both the | |||
RTP sender and receiver can send RTCP report packets. This is used | RTP sender and receiver can send RTCP report packets. This is used | |||
to periodically send control information and report performance. | 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 randomised to avoid | high rate sessions. The interval is randomized to avoid | |||
synchronization of reports from multiple receivers. | synchronization of reports from multiple receivers. | |||
3.9.2. Interface Description | 4.8.2. Interface Description | |||
[EDITOR'S NOTE: to do] | There is no standard application programming interface defined for | |||
RTP or RTCP. Implementations are typically tightly integrated with a | ||||
particular application, and closely follow the principles of | ||||
application level framing and integrated layer processing [ClarkArch] | ||||
in media processing [RFC2736], error recovery and concealment, rate | ||||
adaptation, and security [RFC7202]. Accordingly, RTP implementations | ||||
tend to be targeted at particular application domains (e.g., voice- | ||||
over-IP, IPTV, or video conferencing), with a feature set optimised | ||||
for that domain, rather than being general purpose implementations of | ||||
the protocol. | ||||
3.9.3. Transport Features | 4.8.3. Transport Features | |||
The transport features provided by RTP are: | The transport features provided by RTP are: | |||
o unicast. | o unicast transport. | |||
o multicast, anycast or IPv4 broadcast. | o multicast, anycast or IPv4 broadcast. | |||
o port multiplexing. | o port multiplexing. | |||
o Uni-or bidirectional communication. | ||||
o message-oriented delivery. | o message-oriented delivery. | |||
o associated protocols for connection setup with feature negotiation | o associated protocols for connection setup with feature negotiation | |||
and application-to-port mapping. | and application-to-port mapping. | |||
o support for media types and other extensions. | o support for media types and other extensions. | |||
o a range of reliability functions, including the possibility of | ||||
using packet erasure coding. | ||||
o segmentation and aggregation. | o segmentation and aggregation. | |||
o performance reporting. | o performance reporting. | |||
o drop notification. | o drop notification. | |||
o timestamps. | o timestamps. | |||
3.10. File Delivery over Unidirectional Transport/Asynchronous Layered | 4.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],. ALC provides an underlying reliable transport service | and [RFC5775]. Asynchronous Layer Coding (ALC) provides an | |||
and FLUTE a file-oriented specialization of the ALC service (e.g., to | underlying reliable transport service and FLUTE a file-oriented | |||
carry associated metadata). The [RFC6726] and [RFC5775] protocols | specialization of the ALC service (e.g., to carry associated | |||
are non-backward-compatible updates of the [RFC3926] and [RFC3450] | metadata). The [RFC6726] and [RFC5775] protocols are non-backward- | |||
experimental protocols; these experimental protocols are currently | compatible updates of the [RFC3926] and [RFC3450] experimental | |||
largely deployed in the 3GPP Multimedia Broadcast and Multicast | protocols; these experimental protocols are currently largely | |||
Services (MBMS) (see [MBMS], section 7) and similar contexts (e.g., | deployed in the 3GPP Multimedia Broadcast and Multicast Services | |||
the Japanese ISDB-Tmm standard). | (MBMS) (see [MBMS], 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". Transmissions happen either in push mode, | |||
where content is sent once, or in on-demand mode, where content is | where content is sent once, or in on-demand mode, where content is | |||
continuously sent during periods of time that can largely exceed the | continuously sent during periods of time that can largely exceed the | |||
average time required to download the session objects (see [RFC5651], | average time required to download the session objects (see [RFC5651], | |||
section 4.2). | section 4.2). | |||
Altough FLUTE/ALC is not well adapted to byte- and message-streaming, | Although FLUTE/ALC is not well adapted to byte- and message- | |||
there is an exception: FLUTE/ALC is used to carry 3GPP Dynamic | streaming, there is an exception: FLUTE/ALC is used to carry 3GPP | |||
Adaptive Streaming over HTTP (DASH) when scalability is a requirement | Dynamic Adaptive Streaming over HTTP (DASH) when scalability is a | |||
(see [MBMS], section 5.6). In that case, each Audio/Video segment is | requirement (see [MBMS], section 5.6). In that case, each Audio/ | |||
transmitted as a distinct FLUTE/ALC object in push mode. FLUTE/ALC | Video segment is transmitted as a distinct FLUTE/ALC object in push | |||
uses packet erasure coding (also known as Application-Level Forward | mode. FLUTE/ALC uses packet erasure coding (also known as | |||
Erasure Correction, or AL-FEC) in a proactive way. The goal of using | Application-Level Forward Erasure Correction, or AL-FEC) in a | |||
AL-FEC is both to increase the robustness in front of packet erasures | proactive way. The goal of using AL-FEC is both to increase the | |||
and to improve the efficiency of the on-demand service. FLUTE/ALC | robustness in front of packet erasures and to improve the efficiency | |||
transmissions can be governed by a congestion control mechanism such | of the on-demand service. FLUTE/ALC transmissions can be governed by | |||
as the "Wave and Equation Based Rate Control" (WEBRC) [RFC3738] when | a congestion control mechanism such as the "Wave and Equation Based | |||
FLUTE/ALC is used in a layered transmission manner, with several | Rate Control" (WEBRC) [RFC3738] when FLUTE/ALC is used in a layered | |||
session channels over which ALC packets are sent. However many | transmission manner, with several session channels over which ALC | |||
FLUTE/ALC deployments involve only Constant Bit Rate (CBR) channels | packets are sent. However many FLUTE/ALC deployments target pre- | |||
with no competing flows, for which a sender-based rate control | provisioned networks and involve only Constant Bit Rate (CBR) | |||
mechanism is sufficient. In any case, FLUTE/ALC's reliability, | channels with no competing flows, for which a sender-based rate | |||
delivery mode, congestion control, and flow/rate control mechanisms | control mechanism is sufficient. In any case, FLUTE/ALC's | |||
are distinct components that can be separately controlled to meet | reliability, delivery mode, congestion control, and flow/rate control | |||
different application needs. | 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 | ||||
requirements for UDP. | ||||
3.10.1. Protocol Description | 4.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 regardness 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. | |||
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, | |||
skipping to change at page 29, line 11 | skipping to change at page 29, line 5 | |||
packets are sent in those channels at a certain transmission rate, | packets are sent in those channels at a certain transmission rate, | |||
with a rate that often differs depending on the channel. FLUTE/ALC | with a rate that often differs depending on the channel. FLUTE/ALC | |||
does not mandate nor recommend any strategy to select which ALC | does not mandate nor recommend any strategy to select which ALC | |||
packet to send on which channel. FLUTE/ALC can use a multiple rate | packet to send on which channel. FLUTE/ALC can use a multiple rate | |||
congestion control building block (e.g., WEBRC) to provide congestion | congestion control building block (e.g., WEBRC) to provide congestion | |||
control that is feedback free, where receivers adjust their reception | control that is feedback free, where receivers adjust their reception | |||
rates individually by joining and leaving channels associated with | rates individually by joining and leaving channels associated with | |||
the session. To that purpose, the ALC header provides a specific | the session. To that purpose, the ALC header provides a specific | |||
field to carry congestion control specific information. However | field to carry congestion control specific information. However | |||
FLUTE/ALC does not mandate the use of a particular congestion control | FLUTE/ALC does not mandate the use of a particular congestion control | |||
mechanism although WEBRC is mandatory to support in case of Internet | mechanism although WEBRC is mandatory to support for the Internet | |||
([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-provisoned capacity [RFC5404] whete theres are no flows | path with pre-provisioned capacity [I-D.ietf-tsvwg-rfc5405bis] where | |||
competing for capacity. In this case, a sender-based rate control | there are no flows competing for capacity. In this case, a sender- | |||
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. | |||
3.10.2. Interface Description | 4.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. | |||
3.10.3. Transport Features | 4.9.3. Transport Features | |||
The transport features provided by FLUTE/ALC are: | The transport features provided by FLUTE/ALC are: | |||
o unicast | o unicast | |||
o multicast, anycast or IPv4 broadcast. | o multicast, anycast or IPv4 broadcast. | |||
o per-object dynamic meta-data delivery. | o per-object dynamic meta-data delivery. | |||
o push delivery or on-demand delivery service. | o push delivery or on-demand delivery service. | |||
skipping to change at page 30, line 8 | skipping to change at page 29, line 49 | |||
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). | |||
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 per-packet authentication, integrity, and anti-replay services. | |||
o proactive packet erasure coding (AL-FEC) to recover from packet | o proactive packet erasure coding (AL-FEC) to recover from packet | |||
erasures and improve the on-demand delivery service, | erasures and improve the on-demand delivery service, | |||
o error detection (through UDP and lower level checksums). | o error detection (through UDP). | |||
o congestion control for layered flows (e.g., with WEBRC). | o congestion control for layered flows (e.g., with WEBRC). | |||
o rate control transmission in a given channel. | 4.10. NACK-Oriented Reliable Multicast (NORM) | |||
3.11. 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]. The | |||
protocol was designed to support reliable bulk data dissemination to | protocol was designed to support reliable bulk data dissemination to | |||
receiver groups using IP Multicast but also provides for point-to- | receiver groups using IP Multicast but also provides for point-to- | |||
point unicast operation. Its 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. NORM is designed to incorporate packet | |||
erasure coding as an inherent part of its selective ARQ in response | erasure coding as an inherent part of its selective ARQ in response | |||
to receiver negative acknowledgements. The packet erasure coding can | to receiver negative acknowledgments. The packet erasure coding can | |||
also be proactively applied for forward protection from packet loss. | also be proactively applied for forward protection from packet loss. | |||
NORM transmissions are governed by the TCP-friendly congestion | NORM transmissions are governed by the TCP-friendly congestion | |||
control. NORM's reliability, congestion control, and flow control | control. NORM's reliability, congestion control, and flow control | |||
mechanism are distinct components and can be separately controlled to | mechanism are distinct components and can be separately controlled to | |||
meet different application needs. | meet different application needs. | |||
3.11.1. Protocol Description | 4.10.1. Protocol Description | |||
[EDITOR'S NOTE: needs to be more clear about the application of FEC | ||||
and packet erasure coding; expand ARQ.] | ||||
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 | |||
purposes of loosely coordinated IP Multicast, NORM is not strictly | loosely coordinated IP Multicast, NORM is not strictly connection- | |||
connection-oriented although per-sender state is maintained by | oriented although per-sender state is maintained by receivers for | |||
receivers for protocol operation. [RFC5740] does not specify a | protocol operation. [RFC5740] does not specify a handshake protocol | |||
handshake protocol for connection establishment and separate session | for connection establishment and separate session initiation can be | |||
initiation can be used to coordinate port numbers. However, in-band | used to coordinate port numbers. However, in-band "client-server" | |||
"client-server" style connection establishment can be accomplished | style connection establishment can be accomplished with the NORM | |||
with the NORM congestion control signaling messages using port | congestion control signaling messages using port binding techniques | |||
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 (e..g, loss event, ECN event, etc) information from | |||
the receiver(s) to support dynamic rate control adjustment. The TCP- | the receiver(s) to support dynamic rate control adjustment. The TCP- | |||
Friendly Multicast Congestion Control (TFMCC) [RFC4654] used provides | Friendly Multicast Congestion Control (TFMCC) [RFC4654] used provides | |||
some extra features to support multicast but is functionally | some extra features to support multicast but is functionally | |||
equivalent to TFRC in the unicast case. | equivalent to TFRC in the unicast case. | |||
NORM's reliability mechanism is decoupled from congestion control. | NORM's reliability mechanism is decoupled from congestion control. | |||
This allows alternative arrangements of transport services to be | This allows alternative arrangements of transport services to be | |||
invoked. For example, fixed-rate reliable delivery can be supported | invoked. For example, fixed-rate reliable delivery can be supported | |||
skipping to change at page 31, line 27 | skipping to change at page 31, line 16 | |||
congestion event (e..g, loss event, ECN event, etc) information from | congestion event (e..g, loss event, ECN event, etc) information from | |||
the receiver(s) to support dynamic rate control adjustment. The TCP- | the receiver(s) to support dynamic rate control adjustment. The TCP- | |||
Friendly Multicast Congestion Control (TFMCC) [RFC4654] used provides | Friendly Multicast Congestion Control (TFMCC) [RFC4654] used provides | |||
some extra features to support multicast but is functionally | some extra features to support multicast but is functionally | |||
equivalent to TFRC in the unicast case. | equivalent to TFRC in the unicast case. | |||
NORM's reliability mechanism is decoupled from congestion control. | NORM's reliability mechanism is decoupled from congestion control. | |||
This allows alternative arrangements of transport services to be | This allows alternative arrangements of transport services to be | |||
invoked. For example, fixed-rate reliable delivery can be supported | invoked. For example, fixed-rate reliable delivery can be supported | |||
or unreliable (but optionally "better than best effort" via packet | or unreliable (but optionally "better than best effort" via packet | |||
erasure coding) delivery with rate-control per TFRC can be achieved. | erasure coding) delivery with rate- control per TFRC can be achieved. | |||
Additionally, alternative congestion control techniques may be | Additionally, alternative congestion control techniques may be | |||
applied. For example, TFRC rate control with congestion event | applied. For example, TFRC rate control with congestion event | |||
detection based on ECN for links with high packet loss (e.g., | detection based on ECN for links with high packet loss (e.g., | |||
wireless) has been implemented and demonstrated with NORM. | wireless) has been implemented and demonstrated with NORM. | |||
While NORM is NACK-based for reliability transfer, it also supports a | While NORM is NACK-based for reliability transfer, 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. Again, since this mechanism is decoupled from the | |||
reliability and congestion control, applications that have different | reliability and congestion control, applications that have different | |||
needs in this aspect can use the protocol differently. One example | needs in this aspect can use the protocol differently. One example | |||
is the use of NORM for quasi-reliable delivery where timely delivery | is the use of NORM for quasi-reliable delivery where timely delivery | |||
of newer content may be favored over completely reliable delivery of | of newer content may be favored over completely reliable delivery of | |||
older content within buffering and RTT constraints. | older content within buffering and RTT constraints. | |||
3.11.2. Interface Description | 4.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. | |||
3.11.3. Transport Features | 4.10.3. Transport Features | |||
The transport features provided by NORM are: | The transport features provided by NORM are: | |||
o unicast or multicast. | o unicast or multicast transport. | |||
o stream-oriented delivery in a single stream. | o stream-oriented delivery in a single stream. | |||
o object-oriented delivery of discrete data or file items. | o object-oriented delivery of discrete data or file items. | |||
o reliable delivery. | o reliable delivery. | |||
o unordered unidirectional delivery (of in-memory data or file bulk | o unordered unidirectional delivery (of in-memory data or file bulk | |||
content objects). | content objects). | |||
skipping to change at page 32, line 32 | skipping to change at page 32, line 20 | |||
o segmentation. | o segmentation. | |||
o data bundling (Nagle's algorithm). | o data bundling (Nagle's algorithm). | |||
o flow control (timer-based and/or ack-based). | o flow control (timer-based and/or ack-based). | |||
o congestion control. | o congestion control. | |||
o packet erasure coding (both proactively and as part of ARQ). | o packet erasure coding (both proactively and as part of ARQ). | |||
3.12. Transport Layer Security (TLS) and Datagram TLS (DTLS) as a | 4.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) and Datagram TLS (DTLS) are IETF | |||
protocols that provide several security-related features to | protocols that provide several security-related features to | |||
applications. TLS is designed to run on top of a reliable streaming | applications. TLS is designed to run on top of a reliable streaming | |||
transport protocol (usually TCP), while DTLS is designed to run on | transport protocol (usually TCP), while DTLS is designed to run on | |||
top of a best-effort datagram protocol (UDP or DCCP [RFC5238]). At | top of a best-effort datagram protocol (UDP or DCCP [RFC5238]). At | |||
the time of writing, the current version of TLS is 1.2; it is defined | the time of writing, the current version of TLS is 1.2; which is | |||
in [RFC5246]. DTLS provides nearly identical functionality to | defined in [RFC5246]. DTLS provides nearly identical functionality | |||
applications; it is defined in [RFC6347] and its current version is | to applications; it is defined in [RFC6347] and its current version | |||
also 1.2. The TLS protocol evolved from the Secure Sockets Layer | is also 1.2. The TLS protocol evolved from the Secure Sockets Layer | |||
(SSL) protocols developed in the mid 90s to support protection of | (SSL) protocols developed in the mid 90s to support protection of | |||
HTTP traffic. | 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. | |||
[NOTE: The Logjam authors (weakdh.org) give (inconclusive) evidence | 4.11.1. Protocol Description | |||
that one of the recommendations of [RFC7525], namely the use of | ||||
DHE-1024 as a fallback, may not be sufficient in all cases to counter | ||||
an attacker with the resources of a nation-state. It is unclear at | ||||
this time if the RFC is going to be updated as a result, or whether | ||||
there will be an RFC7525bis.] | ||||
3.12.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 | |||
skipping to change at page 33, line 40 | skipping to change at page 33, line 21 | |||
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. Perfect forward secrecy, | |||
if enabled and supported by the selected algorithms, ensures that | if enabled and supported by the selected algorithms, ensures that | |||
traffic encrypted and captured during a session at time t0 cannot be | traffic encrypted and captured during a session at time t0 cannot be | |||
later decrypted at time t1 (t1 > t0), even if the long-term secrets | later decrypted at time t1 (t1 > t0), even if the long-term secrets | |||
of the communicating peers are later compromised. | 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 loss, 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). | |||
o Record size negotiation (estimates of PMTU and record size | o Record size negotiation (estimates of PMTU and record size | |||
expansion factor). | expansion factor). | |||
o Coveyance of IP don't fragment (DF) bit settings by application. | o Coveyance of IP don't fragment (DF) bit settings by application. | |||
o An anti-DoS stateless cookie mechanism (optional). | o An anti-DoS stateless cookie mechanism (optional). | |||
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]. Note also that DTLS forbids the use of | Section 4.1.2.6 of [RFC6347]. DTLS forbids the use of stream | |||
stream ciphers, which are essentially incompatible when operating on | ciphers, which are essentially incompatible when operating on | |||
independent encrypted records. | independent encrypted records. | |||
3.12.2. Interface Description | 4.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 in order to | Considerable care is required in the use of TLS APIs to ensure | |||
create a secure application. The programmer should have at least a | creation of a secure application. The programmer should have at | |||
basic understanding of encryption and digital signature algorithms | least a basic understanding of encryption and digital signature | |||
and their strengths, public key infrastructure (including X.509 | algorithms and their strengths, public key infrastructure (including | |||
certificates and certificate revocation), and the sockets API. See | X.509 certificates and certificate revocation), and the sockets API. | |||
[RFC7525] and [RFC7457], as mentioned above. | See [RFC7525] and [RFC7457], as mentioned above. | |||
As an example, in the case of OpenSSL, the primary abstractions are | As an example, in the case of OpenSSL, the primary abstractions are | |||
the library itself and method (protocol), session, context, cipher | the library itself 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. | |||
3.12.3. Transport Features | 4.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. | |||
There is also the data protocol, used to carry application traffic. | There is also the data protocol, used to carry application traffic. | |||
The handshake protocol is used to establish cryptographic and | The handshake protocol is used to establish cryptographic and | |||
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. | |||
3.13. Hypertext Transport Protocol (HTTP) over TCP as a pseudotransport | The data protocol, when used with an appropriate cipher, provides: | |||
Hypertext Transfer Protocol (HTTP) is an application-level protocol | o authentication of one end or both ends of a connection. | |||
widely used on the Internet. Version 1.1 of the protocol is | ||||
o confidentiality. | ||||
o cryptographic integrity protection. | ||||
4.12. Hypertext Transport Protocol (HTTP) over TCP as a pseudotransport | ||||
The Hypertext Transfer Protocol (HTTP) is an application-level | ||||
protocol widely used on the Internet. 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]. Furthermore, HTTP is used as | [RFC7235], and version 2 in [RFC7540]. HTTP is usually transported | |||
a substrate for other application-layer protocols. There are various | over TCP using port 80 and 443, although it can be used with other | |||
reasons for this practice listed in [RFC3205]; these include being a | transports. When used over TCP it inherits its properties. | |||
well-known and well-understood protocol, reusability of existing | ||||
servers and client libraries, easy use of existing security | ||||
mechanisms such as HTTP digest authentication [RFC2617] and TLS | ||||
[RFC5246], the ability of HTTP to traverse firewalls which makes it | ||||
work with a lot of infrastructure, and cases where a application | ||||
server often needs to support HTTP anyway. | ||||
Depending on application's needs, the use of HTTP as a substrate | HTTP is used as a substrate for other application-layer protocols. | |||
There are various reasons for this practice listed in [RFC3205]; | ||||
these include being a well-known and well-understood protocol, | ||||
reusability of existing servers and client libraries, easy use of | ||||
existing security mechanisms such as HTTP digest authentication | ||||
[RFC2617] and TLS [RFC5246], the ability of HTTP to traverse | ||||
firewalls makes it work over many types of infrastructure, and in | ||||
cases where a application server often needs to support HTTP anyway. | ||||
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] address this issues 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 concerns about the use of HTTP standard port 80 | |||
and 443, the use of HTTP URL scheme and interaction with existing | and 443, the use of HTTP URL scheme and interaction with existing | |||
firewalls, proxies and NATs. | firewalls, proxies and NATs. | |||
Though not strictly bound to TCP, HTTP is almost exclusively run over | 4.12.1. Protocol Description | |||
TCP, and therefore inherits its properties when used in this way. | ||||
3.13.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 | contain a message body carrying application data as well. 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 carried | |||
data and it can include a message body. It is possible to specify a | data and it can 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 | Furthermore, the protocol has numerous additional features; features | |||
relevant to pseudotransport are described below. | relevant to pseudotransport are described below. | |||
Content negotiation, specified in [RFC7231], is a mechanism provided | Content negotiation, specified in [RFC7231], is a mechanism provided | |||
by HTTP for selecting a representation on a requested resource. The | by HTTP for selecting a representation on a requested resource. The | |||
client and server negotiate acceptable data formats, charsets, data | client and server negotiate acceptable data formats, charsets, data | |||
encoding (e.g. data can be transferred compressed, gzip), etc. HTTP | encoding (e.g., data can be transferred compressed using gzip), etc. | |||
can accommodate exchange of messages as well as data streaming (using | HTTP can accommodate exchange of messages as well as data streaming | |||
chunked transfer encoding [RFC7230]). It is also possible to request | (using chunked transfer encoding [RFC7230]). It is also possible to | |||
a part of a resource using range requests specified in [RFC7233]. | request a part of a resource using range requests specified in | |||
The protocol provides powerful cache control signalling defined in | [RFC7233]. The protocol provides powerful cache control signalling | |||
[RFC7234]. | defined in [RFC7234]. | |||
HTTP 1.1's and HTTP 2.0's persistent connections can be use to | HTTP 1.1's and HTTP 2.0's persistent connections can be use to | |||
perform multiple request-response transactions during the life-time | perform multiple request-response transactions during the life-time | |||
of a single HTTP connection. Moreover, HTTP 2.0 connections can | of a single HTTP connection. Moreover, HTTP 2.0 connections can | |||
multiplex many request/response pairs in parallel on a single | multiplex many request/response pairs in parallel on a single | |||
connection. This reduces connection establishment overhead and the | transport connection. This reduces connection establishment overhead | |||
effect of TCP slow-start on each transaction, important for HTTP's | and the effect of the transport layer slow-start on each transaction, | |||
primary use case. | important in reducing latency for HTTP's primary use case. | |||
It is possible to combine HTTP with security mechanisms, like TLS | It is possible to combine HTTP with security mechanisms, like TLS | |||
(denoted by HTTPS), which adds protocol properties provided by such a | (denoted by HTTPS), which adds protocol properties provided by such a | |||
mechanism (e.g. authentication, encryption, etc.). TLS's | mechanism (e.g., authentication, encryption). The TLS Application- | |||
Application-Layer Protocol Negotiation (ALPN) extension [RFC7301] can | Layer Protocol Negotiation (ALPN) extension [RFC7301] can be used for | |||
be used for HTTP version negotiation within TLS handshake which | HTTP version negotiation within the TLS handshake, which eliminates | |||
eliminates addition round-trip. Arbitrary cookie strings, included | the latency of addition round-trips. Arbitrary cookie strings, | |||
as part of the MIME headers, are often used as bearer tokens in HTTP. | included as part of the MIME headers, are often used as bearer tokens | |||
in HTTP. | ||||
Application layer protocols using HTTP as substrate may use existing | Application layer protocols using HTTP as substrate may use an | |||
method and data formats, or specify new methods and data formats. | existing method and data formats, or specify new methods and data | |||
Furthermore some protocols may not fit a request/response paradigm | formats. Furthermore some protocols may not fit a request/response | |||
and instead rely on HTTP to send messages (e.g. [RFC6546]). Because | paradigm and instead rely on HTTP to send messages (e.g., [RFC6546]). | |||
HTTP is working in many restricted infrastructures, it is also used | Because HTTP works in many restricted infrastructures, it is also | |||
to tunnel other application-layer protocols. | used to tunnel other application-layer protocols. | |||
3.13.2. Interface Description | 4.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, API expose a registration of callbacks in | |||
case a server requests client authentication and when certificate | case a server requests client authentication and when certificate | |||
verification is needed. | verification is needed. | |||
World Wide Web Consortium (W3C) standardized the XMLHttpRequest API | World Wide Web Consortium (W3C) standardized the XMLHttpRequest API | |||
skipping to change at page 37, line 28 | skipping to change at page 37, line 18 | |||
response data format can also be JSON, HTML and plain text. | response data format can also be JSON, HTML and plain text. | |||
Specifically JavaScript and XMLHttpRequest are a ubiquitous | Specifically JavaScript and XMLHttpRequest are a ubiquitous | |||
programming model for websites, and more general applications, where | programming model 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 | Representational State Transfer (REST) [REST] is another example how | |||
applications can use HTTP as transport protocol. REST is an | applications can use HTTP as transport protocol. REST is an | |||
architecture style for building application on the Internet. It uses | architecture style for building application on the Internet. It uses | |||
HTTP as a communication protocol. | HTTP as a communication protocol. | |||
3.13.3. Transport features | 4.12.3. Transport features | |||
The transport features provided by HTTP, when used as a | The transport features provided by HTTP, when used as a | |||
pseudotransport, are: | pseudotransport, are: | |||
o unicast. | o unicast. | |||
o message and stream-oriented transfer. | o message and stream-oriented transfer. | |||
o bi- or unidirectional transmission. | o bi- or unidirectional transmission. | |||
skipping to change at page 38, line 9 | skipping to change at page 37, line 47 | |||
o flow control. | o flow control. | |||
HTTPS (HTTP over TLS) additionally provides the following components: | HTTPS (HTTP over TLS) additionally provides the following components: | |||
o authentication (of one or both ends of a connection). | o authentication (of one or both ends of a connection). | |||
o confidentiality. | o confidentiality. | |||
o integrity protection. | o integrity protection. | |||
4. Transport Service Features | 5. Transport Service Features | |||
[EDITOR'S NOTE: This section is still work-in-progress. This list is | The tables below summarize some key features to illustrate the range | |||
probably not complete and/or too detailed.] | of functions provided across the IETF-specified transports. Figure 1 | |||
considers transports that may be directly layered over the network, | ||||
and Figure 2 considers transports layered over another transport | ||||
service. | ||||
The transport protocol components analyzed in this document which can | +---------------+------+------+------+------+------+------+------+ | |||
| Feature | TCP | MPTCP| SCTP | UDP | UDP-L|DCCP |ICMP | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
| Datagram | No | No | Yes | Yes | Yes | Yes | Yes | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
| Conn. Oriented| Yes | Yes | Yes | No | No | Yes | No | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
| Reliability | Yes | Yes | Yes | No | No | No | No | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
| Partial Rel. | No | No | Pos | N/A | N/A | Yes | N/A | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
| Corupt. Tol | No | No | No | No | Yes | Yes | No | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
| Cong.Control | Yes | Yes | Yes | No | No | Yes | No | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
| Endpoint | 1 | >=1 | >=1 | 1 | 1 | 1 | 1 | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
| Multicast Cap.| No | No | No | Yes | Yes | No | No | | ||||
+---------------+------+------+------+------+------+------+------+ | ||||
Figure 1: Summary comparison: Transport protocols | ||||
+---------------+------+------+------+------+------+ | ||||
| Feature | RTP | FLUTE| NORM |(D)TLS| HTTP | | ||||
+---------------+------+------+------+------+------+ | ||||
| Datagram | Yes | No | Both | Both | No | | ||||
+---------------+------+------+------+------+------+ | ||||
| Conn. Oriented| No | Yes | Yes | Yes | Yes | | ||||
+---------------+------+------+------+------+------+ | ||||
| Reliability | No | Yes | Pos | Pos | Yes | | ||||
+---------------+------+------+------+------+------+ | ||||
| Partial R | Pos | No | Pos | No | No | | ||||
+---------------+------+------+------+------+------+ | ||||
| Corupt. Tol | Poss | No | No | No | No | | ||||
+---------------+------+------+------+------+------+ | ||||
| Cong.Control | Poss | Poss | Poss | N/A | N/A | | ||||
+---------------+------+------+------+------+------+ | ||||
| Endpoint | >=1 | >=1 | >=1 | 1 | 1 | | ||||
+---------------+------+------+------+------+------+ | ||||
| Multicast Cap.| Yes | Yes | Yes | No | No | | ||||
+---------------+------+------+------+------+------+ | ||||
Figure 2: Upper layer transports and frameworks | ||||
The transport protocol components analyzed in this document that can | ||||
be used as a basis for defining common transport service features, | be used as a basis for defining common transport service features, | |||
normalized and separated into categories, are as follows: | normalized and separated into categories, are as follows: | |||
o Control Functions | o Control Functions | |||
* Addressing | * Addressing | |||
+ unicast | + unicast (TCP, MPTCP, SCTP, UDP, UDP-Lite, DCCP, TLS, HTTP) | |||
+ multicast, anycast and IPv4 broadcast | ||||
+ use of NAPT-compatible port numbers | ||||
* Multihoming support | + multicast (UDP, UDP-Lite, DCCP, FLUTE/ALC, NORM) | |||
+ multihoming for resilience | + IPv4 broadcast (UDP, UDP-Lite, DCCP) | |||
+ multihoming for mobility | + anycast (UDP, UDP-Lite, DCCP). Connection-oriented | |||
protocols such as TCP can be and are used with anycast | ||||
routing, with the risk that routing changes may cause | ||||
connection failure. | ||||
- specify handover latency? | * Multihoming support | |||
+ multihoming for load-balancing | + multihoming for resilience (MPTCP, SCTP) | |||
- specify interleaving delay? | + multihoming for mobility (MPTCP, SCTP) | |||
* Multiplexing | + multihoming for load-balancing (MPTCP) | |||
+ application to port mapping | * Application to port mapping (TCP, MPTCP, SCTP, UDP, UDP-Lite, | |||
DCCP, FLUTE/ALC, NORM, TLS, HTTP) | ||||
+ single vs. multiple streaming | + with commonly deployed support in NAPT (TCP, MPTCP, UDP, | |||
TLS, HTTP) | ||||
o Delivery | o Delivery | |||
* reliability | * reliability | |||
+ fully reliable delivery | + fully reliable delivery (TCP, MPTCP, SCTP, FLUTE/ALC, NORM, | |||
TLS, HTTP) | ||||
+ partially reliable delivery | + partially reliable delivery (SCTP, NORM) | |||
- packet erasure coding | ||||
+ unreliable delivery | - using packet erasure coding (NORM, FLUTE, RTP) | |||
- drop notification | + unreliable delivery (SCTP, UDP, UDP-Lite, DCCP) | |||
- Integrity protection | - with drop notification (SCTP, DCCP) | |||
o checksum for error detection | + Integrity protection | |||
o partial payload checksum protection | - checksum for error detection (TCP, MPTCP, SCTP, UDP, UDP- | |||
Lite, DCCP, FLUTE/ALC, NORM, TLS, HTTP) | ||||
o checksum optional | - partial payload checksum protection (UDP-Lite, DCCP) | |||
* ordering | - checksum optional (UDP) | |||
+ ordered delivery | * ordering | |||
+ unordered delivery | + ordered delivery (TCP, MPTCP, SCTP, TLS, HTTP) | |||
- unordered delivery of in-memory data | + unordered delivery (SCTP, UDP, UDP-Lite, DCCP, NORM) | |||
* type/framing | * type/framing | |||
+ stream-oriented delivery | + stream-oriented delivery (TCP, MPTCP, SCTP, TLS) | |||
+ message-oriented delivery | ||||
+ object-oriented delivery of discrete data or file items | ||||
- object content type negotiation | - with multiple streams per association (SCTP) | |||
+ range-based partical object transmission | + message-oriented delivery (SCTP, UDP, UDP-Lite, DCCP, DTLS) | |||
+ file bulk content objects | + object-oriented delivery of discrete data or file items | |||
(FLUTE/ALC, NORM, HTTP) | ||||
o Transmission control | o Transmission control | |||
* rate control | * flow control (TCP, MPTCP, SCTP, DCCP, TLS, HTTP) | |||
+ timer-based | ||||
+ ACK-based | ||||
* congestion control | ||||
* flow control | ||||
* segmentation | ||||
* data/message bundling (Nagle's algorithm) | ||||
* stream scheduling prioritization | ||||
o Security | ||||
* authentication of one end of a connection | ||||
* authentication of both ends of a connection | ||||
* confidentiality | ||||
* cryptographic integrity protection | ||||
A future revision of this document will define transport service | * congestion control (TCP, MPTCP, SCTP, DCCP, FLUTE/ALC, NORM, | |||
features based upon this list. | TLS, HTTP) | |||
[EDITOR'S NOTE: this section will drawn from the candidate features | * segmentation (TCP, MPTCP, SCTP, FLUTE/ALC, NORM, TLS, HTTP) | |||
provided by protocol components in the previous section - please | ||||
discuss on taps@ietf.org list] | ||||
4.1. Complete Protocol Feature Matrix | * data/message bundling (TCP, MPTCP, SCTP, TLS, HTTP) | |||
[EDITOR'S NOTE: Dave Thaler has signed up as a contributor for this | * stream scheduling prioritization (SCTP) | |||
section. Michael Welzl also has a beginning of a matrix which could | ||||
be useful here.] | ||||
[EDITOR'S NOTE: The below is a strawman proposal below by Gorry | o Security (may be used in combination with other transports) | |||
Fairhurst for initial discussion] | ||||
The table below summarises protocol mechanisms that have been | * authentication of one end of a connection (TLS) | |||
standardised. It does not make an assessment on whether specific | ||||
implementations are fully compliant to these specifications. | ||||
+-----------------+---------+---------+---------+---------+---------+ | * authentication of both ends of a connection (TLS) | |||
| Mechanism | UDP | UDP-L | DCCP | SCTP | TCP | | ||||
+-----------------+---------+---------+---------+---------+---------+ | ||||
| Unicast | Yes | Yes | Yes | Yes | Yes | | ||||
| | | | | | | | ||||
| Mcast/IPv4Bcast | Yes(2) | Yes | No | No | No | | ||||
| | | | | | | | ||||
| Port Mux | Yes | Yes | Yes | Yes | Yes | | ||||
| | | | | | | | ||||
| Mode | Dgram | Dgram | Dgram | Dgram | Stream | | ||||
| | | | | | | | ||||
| Connected | No | No | Yes | Yes | Yes | | ||||
| | | | | | | | ||||
| Data bundling | No | No | No | Yes | Yes | | ||||
| | | | | | | | ||||
| Feature Nego | No | No | Yes | Yes | Yes | | ||||
| | | | | | | | ||||
| Options | No | No | Support | Support | Support | | ||||
| | | | | | | | ||||
| Data priority | * | * | * | Yes | No | | ||||
| | | | | | | | ||||
| Data bundling | No | No | No | Yes | Yes | | ||||
| | | | | | | | ||||
| Reliability | None | None | None | Select | Full | | ||||
| | | | | | | | ||||
| Ordered deliv | No | No | No | Stream | Yes | | ||||
| | | | | | | | ||||
| Corruption Tol. | No | Support | Support | No | No | | ||||
| | | | | | | | ||||
| Flow Control | No | No | Support | Yes | Yes | | ||||
| | | | | | | | ||||
| PMTU/PLPMTU | (1) | (1) | Yes | Yes | Yes | | ||||
| | | | | | | | ||||
| Cong Control | (1) | (1) | Yes | Yes | Yes | | ||||
| | | | | | | | ||||
| ECN Support | (1) | (1) | Yes | TBD | Yes | | ||||
| | | | | | | | ||||
| NAT support | Limited | Limited | Support | TBD | Support | | ||||
| | | | | | | | ||||
| Security | DTLS | DTLS | DTLS | DTLS | TLS, AO | | ||||
| | | | | | | | ||||
| UDP encaps | N/A | None | Yes | Yes | None | | ||||
| | | | | | | | ||||
| RTP support | Support | Support | Support | ? | Support | | ||||
+-----------------+---------+---------+---------+---------+---------+ | ||||
Note (1): this feature requires support in an upper layer protocol. | * confidentiality (TLS) | |||
Note (2): this feature requires support in an upper layer protocol | * cryptographic integrity protection (TLS) | |||
when used with IPv6. | ||||
5. IANA Considerations | 6. IANA Considerations | |||
This document has no considerations for IANA. | This document has no considerations for IANA. | |||
6. 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 components or mechanisms for | |||
providing these features. Each RFC listed in this document discusses | providing these features. Each RFC listed in this document discusses | |||
the security considerations of the specification it contains. | the security considerations of the specification it contains. | |||
7. Contributors | 8. Contributors | |||
[Editor's Note: turn this into a real contributors section with | In addition to the editors, this document is the work of Brian | |||
addresses once we figure out how to trick the toolchain into doing | Adamson, Dragana Damjanovic, Kevin Fall, Simone Ferlin-Oliviera, | |||
so] | Ralph Holz, Olivier Mehani, Karen Nielsen, Colin Perkins, Vincent | |||
Roca, and Michael Tuexen. | ||||
o Section 3.2 on MPTCP was contributed by Simone Ferlin-Oliviera | o Section 4.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 3.4 on UDP was contributed by Kevin Fall (kfall@kfall.com) | o Section 4.4 on UDP was contributed by Kevin Fall (kfall@kfall.com) | |||
o Section 3.3 on SCTP was contributed by Michael Tuexen (tuexen@fh- | o Section 4.3 on SCTP was contributed by Michael Tuexen (tuexen@fh- | |||
muenster.de) | muenster.de) and Karen Nielsen (karen.nielsen@tieto.com) | |||
o Section 3.10 on FLUTE/ALC was contributed by Vincent Roca | o Section 4.8 on RTP contains contributions from Colin Perlins | |||
(csp@csperkins.org) | ||||
o Section 4.9 on FLUTE/ALC was contributed by Vincent Roca | ||||
(vincent.roca@inria.fr) | (vincent.roca@inria.fr) | |||
o Section 3.11 on NORM was contributed by Brian Adamson | o Section 4.10 on NORM was contributed by Brian Adamson | |||
(brian.adamson@nrl.navy.mil) | (brian.adamson@nrl.navy.mil) | |||
o Section 3.12 on TLS and DTLS was contributed by Ralph Holz | o Section 4.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 3.13 on HTTP was contributed by Dragana Damjanovic | o Section 4.12 on HTTP was contributed by Dragana Damjanovic | |||
(ddamjanovic@mozilla.com) | (ddamjanovic@mozilla.com) | |||
8. Acknowledgments | 9. Acknowledgments | |||
Thanks to Karen Nielsen, Joe Touch, and Michael Welzl for the | Thanks to Joe Touch, Michael Welzl, and the TAPS Working Group for | |||
comments, feedback, and discussion. This work is partially supported | the comments, feedback, and discussion. This work is partially | |||
by the European Commission under grant agreements FP7-ICT-318627 | supported by the European Commission under grant agreements | |||
mPlane and from the Horizon 2020 research and innovation program | FP7-ICT-318627 mPlane and from the Horizon 2020 research and | |||
under grant agreement No. 644334 (NEAT); support does not imply | innovation program under grant agreement No. 644334 (NEAT); support | |||
endorsement. | does not imply endorsement. | |||
9. Informative References | 10. Informative References | |||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, DOI | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
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, | |||
<http://www.rfc-editor.org/info/rfc792>. | <http://www.rfc-editor.org/info/rfc792>. | |||
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, RFC | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
793, DOI 10.17487/RFC0793, September 1981, | RFC 793, DOI 10.17487/RFC0793, September 1981, | |||
<http://www.rfc-editor.org/info/rfc793>. | <http://www.rfc-editor.org/info/rfc793>. | |||
[RFC0896] Nagle, J., "Congestion Control in IP/TCP Internetworks", | [RFC0896] Nagle, J., "Congestion Control in IP/TCP Internetworks", | |||
RFC 896, DOI 10.17487/RFC0896, January 1984, | RFC 896, DOI 10.17487/RFC0896, January 1984, | |||
<http://www.rfc-editor.org/info/rfc896>. | <http://www.rfc-editor.org/info/rfc896>. | |||
[RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | |||
Communication Layers", STD 3, RFC 1122, DOI 10.17487/ | Communication Layers", STD 3, RFC 1122, | |||
RFC1122, October 1989, | DOI 10.17487/RFC1122, October 1989, | |||
<http://www.rfc-editor.org/info/rfc1122>. | <http://www.rfc-editor.org/info/rfc1122>. | |||
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, | |||
DOI 10.17487/RFC1191, November 1990, | DOI 10.17487/RFC1191, November 1990, | |||
<http://www.rfc-editor.org/info/rfc1191>. | <http://www.rfc-editor.org/info/rfc1191>. | |||
[RFC1716] Almquist, P. and F. Kastenholz, "Towards Requirements for | [RFC1716] Almquist, P. and F. Kastenholz, "Towards Requirements for | |||
IP Routers", RFC 1716, DOI 10.17487/RFC1716, November | IP Routers", RFC 1716, DOI 10.17487/RFC1716, November | |||
1994, <http://www.rfc-editor.org/info/rfc1716>. | 1994, <http://www.rfc-editor.org/info/rfc1716>. | |||
[RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery | [RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery | |||
for IP version 6", RFC 1981, DOI 10.17487/RFC1981, August | for IP version 6", RFC 1981, DOI 10.17487/RFC1981, August | |||
1996, <http://www.rfc-editor.org/info/rfc1981>. | 1996, <http://www.rfc-editor.org/info/rfc1981>. | |||
[RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP | [RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP | |||
Selective Acknowledgment Options", RFC 2018, DOI 10.17487/ | Selective Acknowledgment Options", RFC 2018, | |||
RFC2018, October 1996, | DOI 10.17487/RFC2018, October 1996, | |||
<http://www.rfc-editor.org/info/rfc2018>. | <http://www.rfc-editor.org/info/rfc2018>. | |||
[RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
Extensions (MIME) Part One: Format of Internet Message | Extensions (MIME) Part One: Format of Internet Message | |||
Bodies", RFC 2045, DOI 10.17487/RFC2045, November 1996, | Bodies", RFC 2045, DOI 10.17487/RFC2045, November 1996, | |||
<http://www.rfc-editor.org/info/rfc2045>. | <http://www.rfc-editor.org/info/rfc2045>. | |||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
(IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
December 1998, <http://www.rfc-editor.org/info/rfc2460>. | December 1998, <http://www.rfc-editor.org/info/rfc2460>. | |||
[RFC2461] Narten, T., Nordmark, E., and W. Simpson, "Neighbor | [RFC2461] Narten, T., Nordmark, E., and W. Simpson, "Neighbor | |||
Discovery for IP Version 6 (IPv6)", RFC 2461, DOI | Discovery for IP Version 6 (IPv6)", RFC 2461, | |||
10.17487/RFC2461, December 1998, | DOI 10.17487/RFC2461, December 1998, | |||
<http://www.rfc-editor.org/info/rfc2461>. | <http://www.rfc-editor.org/info/rfc2461>. | |||
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
Leach, P., Luotonen, A., and L. Stewart, "HTTP | Leach, P., Luotonen, A., and L. Stewart, "HTTP | |||
Authentication: Basic and Digest Access Authentication", | Authentication: Basic and Digest Access Authentication", | |||
RFC 2617, DOI 10.17487/RFC2617, June 1999, | RFC 2617, DOI 10.17487/RFC2617, June 1999, | |||
<http://www.rfc-editor.org/info/rfc2617>. | <http://www.rfc-editor.org/info/rfc2617>. | |||
[RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast | [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast | |||
Listener Discovery (MLD) for IPv6", RFC 2710, DOI | Listener Discovery (MLD) for IPv6", RFC 2710, | |||
10.17487/RFC2710, October 1999, | DOI 10.17487/RFC2710, October 1999, | |||
<http://www.rfc-editor.org/info/rfc2710>. | <http://www.rfc-editor.org/info/rfc2710>. | |||
[RFC2736] Handley, M. and C. Perkins, "Guidelines for Writers of RTP | ||||
Payload Format Specifications", BCP 36, RFC 2736, | ||||
DOI 10.17487/RFC2736, December 1999, | ||||
<http://www.rfc-editor.org/info/rfc2736>. | ||||
[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", RFC | of Explicit Congestion Notification (ECN) to IP", | |||
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>. | |||
[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>. | |||
skipping to change at page 45, line 11 | skipping to change at page 44, line 16 | |||
M., and J. Crowcroft, "Forward Error Correction (FEC) | M., and J. Crowcroft, "Forward Error Correction (FEC) | |||
Building Block", RFC 3452, DOI 10.17487/RFC3452, December | Building Block", RFC 3452, DOI 10.17487/RFC3452, December | |||
2002, <http://www.rfc-editor.org/info/rfc3452>. | 2002, <http://www.rfc-editor.org/info/rfc3452>. | |||
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. | [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. | |||
Jacobson, "RTP: A Transport Protocol for Real-Time | Jacobson, "RTP: A Transport Protocol for Real-Time | |||
Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, | Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, | |||
July 2003, <http://www.rfc-editor.org/info/rfc3550>. | July 2003, <http://www.rfc-editor.org/info/rfc3550>. | |||
[RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate | [RFC3738] Luby, M. and V. Goyal, "Wave and Equation Based Rate | |||
Control (WEBRC) Building Block", RFC 3738, DOI 10.17487/ | Control (WEBRC) Building Block", RFC 3738, | |||
RFC3738, April 2004, | DOI 10.17487/RFC3738, April 2004, | |||
<http://www.rfc-editor.org/info/rfc3738>. | <http://www.rfc-editor.org/info/rfc3738>. | |||
[RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | [RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. | |||
Conrad, "Stream Control Transmission Protocol (SCTP) | Conrad, "Stream Control Transmission Protocol (SCTP) | |||
Partial Reliability Extension", RFC 3758, DOI 10.17487/ | Partial Reliability Extension", RFC 3758, | |||
RFC3758, May 2004, | DOI 10.17487/RFC3758, May 2004, | |||
<http://www.rfc-editor.org/info/rfc3758>. | <http://www.rfc-editor.org/info/rfc3758>. | |||
[RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., Ed., | [RFC3828] Larzon, L-A., Degermark, M., Pink, S., Jonsson, L-E., Ed., | |||
and G. Fairhurst, Ed., "The Lightweight User Datagram | and G. Fairhurst, Ed., "The Lightweight User Datagram | |||
Protocol (UDP-Lite)", RFC 3828, DOI 10.17487/RFC3828, July | Protocol (UDP-Lite)", RFC 3828, DOI 10.17487/RFC3828, July | |||
2004, <http://www.rfc-editor.org/info/rfc3828>. | 2004, <http://www.rfc-editor.org/info/rfc3828>. | |||
[RFC3926] Paila, T., Luby, M., Lehtonen, R., Roca, V., and R. Walsh, | [RFC3926] Paila, T., Luby, M., Lehtonen, R., Roca, V., and R. Walsh, | |||
"FLUTE - File Delivery over Unidirectional Transport", RFC | "FLUTE - File Delivery over Unidirectional Transport", | |||
3926, DOI 10.17487/RFC3926, October 2004, | RFC 3926, DOI 10.17487/RFC3926, October 2004, | |||
<http://www.rfc-editor.org/info/rfc3926>. | <http://www.rfc-editor.org/info/rfc3926>. | |||
[RFC3971] Arkko, J., Ed., Kempf, J., Zill, B., and P. Nikander, | [RFC3971] Arkko, J., Ed., Kempf, J., Zill, B., and P. Nikander, | |||
"SEcure Neighbor Discovery (SEND)", RFC 3971, DOI | "SEcure Neighbor Discovery (SEND)", RFC 3971, | |||
10.17487/RFC3971, March 2005, | DOI 10.17487/RFC3971, March 2005, | |||
<http://www.rfc-editor.org/info/rfc3971>. | <http://www.rfc-editor.org/info/rfc3971>. | |||
[RFC4324] Royer, D., Babics, G., and S. Mansour, "Calendar Access | [RFC4324] Royer, D., Babics, G., and S. Mansour, "Calendar Access | |||
Protocol (CAP)", RFC 4324, DOI 10.17487/RFC4324, December | Protocol (CAP)", RFC 4324, DOI 10.17487/RFC4324, December | |||
2005, <http://www.rfc-editor.org/info/rfc4324>. | 2005, <http://www.rfc-editor.org/info/rfc4324>. | |||
[RFC4336] Floyd, S., Handley, M., and E. Kohler, "Problem Statement | [RFC4336] Floyd, S., Handley, M., and E. Kohler, "Problem Statement | |||
for the Datagram Congestion Control Protocol (DCCP)", RFC | for the Datagram Congestion Control Protocol (DCCP)", | |||
4336, DOI 10.17487/RFC4336, March 2006, | RFC 4336, DOI 10.17487/RFC4336, March 2006, | |||
<http://www.rfc-editor.org/info/rfc4336>. | <http://www.rfc-editor.org/info/rfc4336>. | |||
[RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram | [RFC4340] Kohler, E., Handley, M., and S. Floyd, "Datagram | |||
Congestion Control Protocol (DCCP)", RFC 4340, DOI | Congestion Control Protocol (DCCP)", RFC 4340, | |||
10.17487/RFC4340, March 2006, | DOI 10.17487/RFC4340, March 2006, | |||
<http://www.rfc-editor.org/info/rfc4340>. | <http://www.rfc-editor.org/info/rfc4340>. | |||
[RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion | [RFC4341] Floyd, S. and E. Kohler, "Profile for Datagram Congestion | |||
Control Protocol (DCCP) Congestion Control ID 2: TCP-like | Control Protocol (DCCP) Congestion Control ID 2: TCP-like | |||
Congestion Control", RFC 4341, DOI 10.17487/RFC4341, March | Congestion Control", RFC 4341, DOI 10.17487/RFC4341, March | |||
2006, <http://www.rfc-editor.org/info/rfc4341>. | 2006, <http://www.rfc-editor.org/info/rfc4341>. | |||
[RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for | [RFC4342] Floyd, S., Kohler, E., and J. Padhye, "Profile for | |||
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, DOI | Dynamic Home Agent (HA) Assignment", RFC 4433, | |||
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 | [RFC4614] Duke, M., Braden, R., Eddy, W., and E. Blanton, "A Roadmap | |||
for Transmission Control Protocol (TCP) Specification | for Transmission Control Protocol (TCP) Specification | |||
Documents", RFC 4614, DOI 10.17487/RFC4614, September | Documents", RFC 4614, DOI 10.17487/RFC4614, September | |||
2006, <http://www.rfc-editor.org/info/rfc4614>. | 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", RFC | Congestion Control (TFMCC): Protocol Specification", | |||
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>. | |||
[RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU | |||
Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007, | Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007, | |||
<http://www.rfc-editor.org/info/rfc4821>. | <http://www.rfc-editor.org/info/rfc4821>. | |||
[RFC4828] Floyd, S. and E. Kohler, "TCP Friendly Rate Control | ||||
(TFRC): The Small-Packet (SP) Variant", RFC 4828, | ||||
DOI 10.17487/RFC4828, April 2007, | ||||
<http://www.rfc-editor.org/info/rfc4828>. | ||||
[RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, | [RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, | |||
"Authenticated Chunks for the Stream Control Transmission | "Authenticated Chunks for the Stream Control Transmission | |||
Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August | Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August | |||
2007, <http://www.rfc-editor.org/info/rfc4895>. | 2007, <http://www.rfc-editor.org/info/rfc4895>. | |||
[RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", | [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", | |||
RFC 4960, DOI 10.17487/RFC4960, September 2007, | RFC 4960, DOI 10.17487/RFC4960, September 2007, | |||
<http://www.rfc-editor.org/info/rfc4960>. | <http://www.rfc-editor.org/info/rfc4960>. | |||
[RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M. | [RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M. | |||
Kozuka, "Stream Control Transmission Protocol (SCTP) | Kozuka, "Stream Control Transmission Protocol (SCTP) | |||
Dynamic Address Reconfiguration", RFC 5061, DOI 10.17487/ | Dynamic Address Reconfiguration", RFC 5061, | |||
RFC5061, September 2007, | DOI 10.17487/RFC5061, September 2007, | |||
<http://www.rfc-editor.org/info/rfc5061>. | <http://www.rfc-editor.org/info/rfc5061>. | |||
[RFC5097] Renker, G. and G. Fairhurst, "MIB for the UDP-Lite | [RFC5097] Renker, G. and G. Fairhurst, "MIB for the UDP-Lite | |||
protocol", RFC 5097, DOI 10.17487/RFC5097, January 2008, | protocol", RFC 5097, DOI 10.17487/RFC5097, January 2008, | |||
<http://www.rfc-editor.org/info/rfc5097>. | <http://www.rfc-editor.org/info/rfc5097>. | |||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
(TLS) Protocol Version 1.2", RFC 5246, DOI 10.17487/ | (TLS) Protocol Version 1.2", RFC 5246, | |||
RFC5246, August 2008, | DOI 10.17487/RFC5246, August 2008, | |||
<http://www.rfc-editor.org/info/rfc5246>. | <http://www.rfc-editor.org/info/rfc5246>. | |||
[RFC5238] Phelan, T., "Datagram Transport Layer Security (DTLS) over | [RFC5238] Phelan, T., "Datagram Transport Layer Security (DTLS) over | |||
the Datagram Congestion Control Protocol (DCCP)", RFC | the Datagram Congestion Control Protocol (DCCP)", | |||
5238, DOI 10.17487/RFC5238, May 2008, | RFC 5238, DOI 10.17487/RFC5238, May 2008, | |||
<http://www.rfc-editor.org/info/rfc5238>. | <http://www.rfc-editor.org/info/rfc5238>. | |||
[RFC5404] Westerlund, M. and I. Johansson, "RTP Payload Format for | [RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP | |||
G.719", RFC 5404, DOI 10.17487/RFC5404, January 2009, | Friendly Rate Control (TFRC): Protocol Specification", | |||
<http://www.rfc-editor.org/info/rfc5404>. | RFC 5348, DOI 10.17487/RFC5348, September 2008, | |||
<http://www.rfc-editor.org/info/rfc5348>. | ||||
[RFC5461] Gont, F., "TCP's Reaction to Soft Errors", RFC 5461, DOI | [RFC5461] Gont, F., "TCP's Reaction to Soft Errors", RFC 5461, | |||
10.17487/RFC5461, February 2009, | DOI 10.17487/RFC5461, February 2009, | |||
<http://www.rfc-editor.org/info/rfc5461>. | <http://www.rfc-editor.org/info/rfc5461>. | |||
[RFC5595] Fairhurst, G., "The Datagram Congestion Control Protocol | [RFC5595] Fairhurst, G., "The Datagram Congestion Control Protocol | |||
(DCCP) Service Codes", RFC 5595, DOI 10.17487/RFC5595, | (DCCP) Service Codes", RFC 5595, DOI 10.17487/RFC5595, | |||
September 2009, <http://www.rfc-editor.org/info/rfc5595>. | September 2009, <http://www.rfc-editor.org/info/rfc5595>. | |||
[RFC5596] Fairhurst, G., "Datagram Congestion Control Protocol | [RFC5596] Fairhurst, G., "Datagram Congestion Control Protocol | |||
(DCCP) Simultaneous-Open Technique to Facilitate NAT/ | (DCCP) Simultaneous-Open Technique to Facilitate NAT/ | |||
Middlebox Traversal", RFC 5596, DOI 10.17487/RFC5596, | Middlebox Traversal", RFC 5596, DOI 10.17487/RFC5596, | |||
September 2009, <http://www.rfc-editor.org/info/rfc5596>. | September 2009, <http://www.rfc-editor.org/info/rfc5596>. | |||
[RFC5622] Floyd, S. and E. Kohler, "Profile for Datagram Congestion | ||||
Control Protocol (DCCP) Congestion ID 4: TCP-Friendly Rate | ||||
Control for Small Packets (TFRC-SP)", RFC 5622, | ||||
DOI 10.17487/RFC5622, August 2009, | ||||
<http://www.rfc-editor.org/info/rfc5622>. | ||||
[RFC5651] Luby, M., Watson, M., and L. Vicisano, "Layered Coding | [RFC5651] Luby, M., Watson, M., and L. Vicisano, "Layered Coding | |||
Transport (LCT) Building Block", RFC 5651, DOI 10.17487/ | Transport (LCT) Building Block", RFC 5651, | |||
RFC5651, October 2009, | DOI 10.17487/RFC5651, October 2009, | |||
<http://www.rfc-editor.org/info/rfc5651>. | <http://www.rfc-editor.org/info/rfc5651>. | |||
[RFC5662] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed., | ||||
"Network File System (NFS) Version 4 Minor Version 1 | ||||
External Data Representation Standard (XDR) Description", | ||||
RFC 5662, DOI 10.17487/RFC5662, January 2010, | ||||
<http://www.rfc-editor.org/info/rfc5662>. | ||||
[RFC5672] Crocker, D., Ed., "RFC 4871 DomainKeys Identified Mail | [RFC5672] Crocker, D., Ed., "RFC 4871 DomainKeys Identified Mail | |||
(DKIM) Signatures -- Update", RFC 5672, DOI 10.17487/ | (DKIM) Signatures -- Update", RFC 5672, | |||
RFC5672, August 2009, | DOI 10.17487/RFC5672, August 2009, | |||
<http://www.rfc-editor.org/info/rfc5672>. | <http://www.rfc-editor.org/info/rfc5672>. | |||
[RFC5740] Adamson, B., Bormann, C., Handley, M., and J. Macker, | [RFC5740] Adamson, B., Bormann, C., Handley, M., and J. Macker, | |||
"NACK-Oriented Reliable Multicast (NORM) Transport | "NACK-Oriented Reliable Multicast (NORM) Transport | |||
Protocol", RFC 5740, DOI 10.17487/RFC5740, November 2009, | Protocol", RFC 5740, DOI 10.17487/RFC5740, November 2009, | |||
<http://www.rfc-editor.org/info/rfc5740>. | <http://www.rfc-editor.org/info/rfc5740>. | |||
[RFC5775] Luby, M., Watson, M., and L. Vicisano, "Asynchronous | [RFC5775] Luby, M., Watson, M., and L. Vicisano, "Asynchronous | |||
Layered Coding (ALC) Protocol Instantiation", RFC 5775, | Layered Coding (ALC) Protocol Instantiation", RFC 5775, | |||
DOI 10.17487/RFC5775, April 2010, | DOI 10.17487/RFC5775, April 2010, | |||
<http://www.rfc-editor.org/info/rfc5775>. | <http://www.rfc-editor.org/info/rfc5775>. | |||
[RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion | [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion | |||
Control", RFC 5681, DOI 10.17487/RFC5681, September 2009, | Control", RFC 5681, DOI 10.17487/RFC5681, September 2009, | |||
<http://www.rfc-editor.org/info/rfc5681>. | <http://www.rfc-editor.org/info/rfc5681>. | |||
[RFC6056] Larsen, M. and F. Gont, "Recommendations for Transport- | [RFC6056] Larsen, M. and F. Gont, "Recommendations for Transport- | |||
Protocol Port Randomization", BCP 156, RFC 6056, DOI | Protocol Port Randomization", BCP 156, RFC 6056, | |||
10.17487/RFC6056, January 2011, | DOI 10.17487/RFC6056, January 2011, | |||
<http://www.rfc-editor.org/info/rfc6056>. | <http://www.rfc-editor.org/info/rfc6056>. | |||
[RFC6083] Tuexen, M., Seggelmann, R., and E. Rescorla, "Datagram | [RFC6083] Tuexen, M., Seggelmann, R., and E. Rescorla, "Datagram | |||
Transport Layer Security (DTLS) for Stream Control | Transport Layer Security (DTLS) for Stream Control | |||
Transmission Protocol (SCTP)", RFC 6083, DOI 10.17487/ | Transmission Protocol (SCTP)", RFC 6083, | |||
RFC6083, January 2011, | DOI 10.17487/RFC6083, January 2011, | |||
<http://www.rfc-editor.org/info/rfc6083>. | <http://www.rfc-editor.org/info/rfc6083>. | |||
[RFC6093] Gont, F. and A. Yourtchenko, "On the Implementation of the | [RFC6093] Gont, F. and A. Yourtchenko, "On the Implementation of the | |||
TCP Urgent Mechanism", RFC 6093, DOI 10.17487/RFC6093, | TCP Urgent Mechanism", RFC 6093, DOI 10.17487/RFC6093, | |||
January 2011, <http://www.rfc-editor.org/info/rfc6093>. | January 2011, <http://www.rfc-editor.org/info/rfc6093>. | |||
[RFC6525] Stewart, R., Tuexen, M., and P. Lei, "Stream Control | [RFC6525] Stewart, R., Tuexen, M., and P. Lei, "Stream Control | |||
Transmission Protocol (SCTP) Stream Reconfiguration", RFC | Transmission Protocol (SCTP) Stream Reconfiguration", | |||
6525, DOI 10.17487/RFC6525, February 2012, | RFC 6525, DOI 10.17487/RFC6525, February 2012, | |||
<http://www.rfc-editor.org/info/rfc6525>. | <http://www.rfc-editor.org/info/rfc6525>. | |||
[RFC6546] Trammell, B., "Transport of Real-time Inter-network | [RFC6546] Trammell, B., "Transport of Real-time Inter-network | |||
Defense (RID) Messages over HTTP/TLS", RFC 6546, DOI | Defense (RID) Messages over HTTP/TLS", RFC 6546, | |||
10.17487/RFC6546, April 2012, | DOI 10.17487/RFC6546, April 2012, | |||
<http://www.rfc-editor.org/info/rfc6546>. | <http://www.rfc-editor.org/info/rfc6546>. | |||
[RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | |||
Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | |||
January 2012, <http://www.rfc-editor.org/info/rfc6347>. | January 2012, <http://www.rfc-editor.org/info/rfc6347>. | |||
[RFC6356] Raiciu, C., Handley, M., and D. Wischik, "Coupled | [RFC6356] Raiciu, C., Handley, M., and D. Wischik, "Coupled | |||
Congestion Control for Multipath Transport Protocols", RFC | Congestion Control for Multipath Transport Protocols", | |||
6356, DOI 10.17487/RFC6356, October 2011, | RFC 6356, DOI 10.17487/RFC6356, October 2011, | |||
<http://www.rfc-editor.org/info/rfc6356>. | <http://www.rfc-editor.org/info/rfc6356>. | |||
[RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error | [RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error | |||
Correction (FEC) Framework", RFC 6363, DOI 10.17487/ | Correction (FEC) Framework", RFC 6363, | |||
RFC6363, October 2011, | DOI 10.17487/RFC6363, October 2011, | |||
<http://www.rfc-editor.org/info/rfc6363>. | <http://www.rfc-editor.org/info/rfc6363>. | |||
[RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", RFC | ||||
6455, DOI 10.17487/RFC6455, December 2011, | ||||
<http://www.rfc-editor.org/info/rfc6455>. | ||||
[RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V. | [RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V. | |||
Yasevich, "Sockets API Extensions for the Stream Control | Yasevich, "Sockets API Extensions for the Stream Control | |||
Transmission Protocol (SCTP)", RFC 6458, DOI 10.17487/ | Transmission Protocol (SCTP)", RFC 6458, | |||
RFC6458, December 2011, | DOI 10.17487/RFC6458, December 2011, | |||
<http://www.rfc-editor.org/info/rfc6458>. | <http://www.rfc-editor.org/info/rfc6458>. | |||
[RFC6584] Roca, V., "Simple Authentication Schemes for the | [RFC6584] Roca, V., "Simple Authentication Schemes for the | |||
Asynchronous Layered Coding (ALC) and NACK-Oriented | Asynchronous Layered Coding (ALC) and NACK-Oriented | |||
Reliable Multicast (NORM) Protocols", RFC 6584, DOI | Reliable Multicast (NORM) Protocols", RFC 6584, | |||
10.17487/RFC6584, April 2012, | DOI 10.17487/RFC6584, April 2012, | |||
<http://www.rfc-editor.org/info/rfc6584>. | <http://www.rfc-editor.org/info/rfc6584>. | |||
[RFC6726] Paila, T., Walsh, R., Luby, M., Roca, V., and R. Lehtonen, | [RFC6726] Paila, T., Walsh, R., Luby, M., Roca, V., and R. Lehtonen, | |||
"FLUTE - File Delivery over Unidirectional Transport", RFC | "FLUTE - File Delivery over Unidirectional Transport", | |||
6726, DOI 10.17487/RFC6726, November 2012, | RFC 6726, DOI 10.17487/RFC6726, November 2012, | |||
<http://www.rfc-editor.org/info/rfc6726>. | <http://www.rfc-editor.org/info/rfc6726>. | |||
[RFC6773] Phelan, T., Fairhurst, G., and C. Perkins, "DCCP-UDP: A | [RFC6773] Phelan, T., Fairhurst, G., and C. Perkins, "DCCP-UDP: A | |||
Datagram Congestion Control Protocol UDP Encapsulation for | Datagram Congestion Control Protocol UDP Encapsulation for | |||
NAT Traversal", RFC 6773, DOI 10.17487/RFC6773, November | NAT Traversal", RFC 6773, DOI 10.17487/RFC6773, November | |||
2012, <http://www.rfc-editor.org/info/rfc6773>. | 2012, <http://www.rfc-editor.org/info/rfc6773>. | |||
[RFC6824] Ford, A., Raiciu, C., Handley, M., and O. Bonaventure, | [RFC6824] Ford, A., Raiciu, C., Handley, M., and O. Bonaventure, | |||
"TCP Extensions for Multipath Operation with Multiple | "TCP Extensions for Multipath Operation with Multiple | |||
Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013, | Addresses", RFC 6824, DOI 10.17487/RFC6824, January 2013, | |||
<http://www.rfc-editor.org/info/rfc6824>. | <http://www.rfc-editor.org/info/rfc6824>. | |||
[RFC6897] Scharf, M. and A. Ford, "Multipath TCP (MPTCP) Application | [RFC6897] Scharf, M. and A. Ford, "Multipath TCP (MPTCP) Application | |||
Interface Considerations", RFC 6897, DOI 10.17487/RFC6897, | Interface Considerations", RFC 6897, DOI 10.17487/RFC6897, | |||
March 2013, <http://www.rfc-editor.org/info/rfc6897>. | March 2013, <http://www.rfc-editor.org/info/rfc6897>. | |||
[RFC6935] Eubanks, M., Chimento, P., and M. Westerlund, "IPv6 and | [RFC6935] Eubanks, M., Chimento, P., and M. Westerlund, "IPv6 and | |||
UDP Checksums for Tunneled Packets", RFC 6935, DOI | UDP Checksums for Tunneled Packets", RFC 6935, | |||
10.17487/RFC6935, April 2013, | DOI 10.17487/RFC6935, April 2013, | |||
<http://www.rfc-editor.org/info/rfc6935>. | <http://www.rfc-editor.org/info/rfc6935>. | |||
[RFC6936] Fairhurst, G. and M. Westerlund, "Applicability Statement | [RFC6936] Fairhurst, G. and M. Westerlund, "Applicability Statement | |||
for the Use of IPv6 UDP Datagrams with Zero Checksums", | for the Use of IPv6 UDP Datagrams with Zero Checksums", | |||
RFC 6936, DOI 10.17487/RFC6936, April 2013, | RFC 6936, DOI 10.17487/RFC6936, April 2013, | |||
<http://www.rfc-editor.org/info/rfc6936>. | <http://www.rfc-editor.org/info/rfc6936>. | |||
[RFC6951] Tuexen, M. and R. Stewart, "UDP Encapsulation of Stream | [RFC6951] Tuexen, M. and R. Stewart, "UDP Encapsulation of Stream | |||
Control Transmission Protocol (SCTP) Packets for End-Host | Control Transmission Protocol (SCTP) Packets for End-Host | |||
to End-Host Communication", RFC 6951, DOI 10.17487/ | to End-Host Communication", RFC 6951, | |||
RFC6951, May 2013, | DOI 10.17487/RFC6951, May 2013, | |||
<http://www.rfc-editor.org/info/rfc6951>. | <http://www.rfc-editor.org/info/rfc6951>. | |||
[RFC7053] Tuexen, M., Ruengeler, I., and R. Stewart, "SACK- | [RFC7053] Tuexen, M., Ruengeler, I., and R. Stewart, "SACK- | |||
IMMEDIATELY Extension for the Stream Control Transmission | IMMEDIATELY Extension for the Stream Control Transmission | |||
Protocol", RFC 7053, DOI 10.17487/RFC7053, November 2013, | Protocol", RFC 7053, DOI 10.17487/RFC7053, November 2013, | |||
<http://www.rfc-editor.org/info/rfc7053>. | <http://www.rfc-editor.org/info/rfc7053>. | |||
[RFC7202] Perkins, C. and M. Westerlund, "Securing the RTP | ||||
Framework: Why RTP Does Not Mandate a Single Media | ||||
Security Solution", RFC 7202, DOI 10.17487/RFC7202, April | ||||
2014, <http://www.rfc-editor.org/info/rfc7202>. | ||||
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Message Syntax and Routing", RFC | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
7230, DOI 10.17487/RFC7230, June 2014, | RFC 7230, DOI 10.17487/RFC7230, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7230>. | <http://www.rfc-editor.org/info/rfc7230>. | |||
[RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Semantics and Content", RFC 7231, DOI | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
10.17487/RFC7231, June 2014, | DOI 10.17487/RFC7231, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7231>. | <http://www.rfc-editor.org/info/rfc7231>. | |||
[RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7232] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Conditional Requests", RFC 7232, DOI | Protocol (HTTP/1.1): Conditional Requests", RFC 7232, | |||
10.17487/RFC7232, June 2014, | DOI 10.17487/RFC7232, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7232>. | <http://www.rfc-editor.org/info/rfc7232>. | |||
[RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed., | [RFC7233] Fielding, R., Ed., Lafon, Y., Ed., and J. Reschke, Ed., | |||
"Hypertext Transfer Protocol (HTTP/1.1): Range Requests", | "Hypertext Transfer Protocol (HTTP/1.1): Range Requests", | |||
RFC 7233, DOI 10.17487/RFC7233, June 2014, | RFC 7233, DOI 10.17487/RFC7233, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7233>. | <http://www.rfc-editor.org/info/rfc7233>. | |||
[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
RFC 7234, DOI 10.17487/RFC7234, June 2014, | RFC 7234, DOI 10.17487/RFC7234, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7234>. | <http://www.rfc-editor.org/info/rfc7234>. | |||
[RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7235] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Authentication", RFC 7235, DOI | Protocol (HTTP/1.1): Authentication", RFC 7235, | |||
10.17487/RFC7235, June 2014, | DOI 10.17487/RFC7235, June 2014, | |||
<http://www.rfc-editor.org/info/rfc7235>. | <http://www.rfc-editor.org/info/rfc7235>. | |||
[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>. | |||
[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, DOI | Control Transmission Protocol Extension", RFC 7496, | |||
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>. | |||
[RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | [RFC7525] Sheffer, Y., Holz, R., and P. Saint-Andre, | |||
"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, DOI | Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | |||
10.17487/RFC7540, May 2015, | DOI 10.17487/RFC7540, May 2015, | |||
<http://www.rfc-editor.org/info/rfc7540>. | <http://www.rfc-editor.org/info/rfc7540>. | |||
[I-D.ietf-tsvwg-rfc5405bis] | [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-05 (work in | Guidelines", draft-ietf-tsvwg-rfc5405bis-07 (work in | |||
progress), August 2015. | progress), November 2015. | |||
[I-D.ietf-aqm-ecn-benefits] | [I-D.ietf-aqm-ecn-benefits] | |||
Fairhurst, G. and M. Welzl, "The Benefits of using | Fairhurst, G. and M. Welzl, "The Benefits of using | |||
Explicit Congestion Notification (ECN)", draft-ietf-aqm- | Explicit Congestion Notification (ECN)", draft-ietf-aqm- | |||
ecn-benefits-06 (work in progress), July 2015. | 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] | ||||
Nishida, Y., Natarajan, P., Caro, A., Amer, P., and K. | ||||
Nielsen, "SCTP-PF: Quick Failover Algorithm in SCTP", | ||||
draft-ietf-tsvwg-sctp-failover-13 (work in progress), | ||||
September 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. | |||
[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. | |||
skipping to change at page 52, line 38 | skipping to change at page 52, line 13 | |||
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 | |||
Specifications, Issue 7", n.d.. | Specifications, Issue 7", n.d.. | |||
[MBMS] 3GPP TSG WS S4, ., "3GPP TS 26.346: Multimedia Broadcast/ | [MBMS] 3GPP TSG WS S4, ., "3GPP TS 26.346: Multimedia Broadcast/ | |||
Multicast Service (MBMS); Protocols and codecs, release 13 | Multicast Service (MBMS); Protocols and codecs, release 13 | |||
(http://www.3gpp.org/DynaReport/26346.htm).", 2015. | (http://www.3gpp.org/DynaReport/26346.htm).", 2015. | |||
[ClarkArch] | ||||
Clark, D. and D. Tennenhouse, "Architectural | ||||
Considerations for a New Generation of Protocols (Proc. | ||||
ACM SIGCOMM)", 1990. | ||||
Authors' Addresses | Authors' Addresses | |||
Godred Fairhurst (editor) | Godred Fairhurst (editor) | |||
University of Aberdeen | University of Aberdeen | |||
School of Engineering, Fraser Noble Building | School of Engineering, Fraser Noble Building | |||
Aberdeen AB24 3UE | Aberdeen AB24 3UE | |||
Email: gorry@erg.abdn.ac.uk | Email: gorry@erg.abdn.ac.uk | |||
Brian Trammell (editor) | Brian Trammell (editor) | |||
ETH Zurich | ETH Zurich | |||
Gloriastrasse 35 | Gloriastrasse 35 | |||
8092 Zurich | 8092 Zurich | |||
Switzerland | Switzerland | |||
Email: ietf@trammell.ch | Email: ietf@trammell.ch | |||
Mirja Kuehlewind (editor) | Mirja Kuehlewind (editor) | |||
ETH Zurich | ETH Zurich | |||
End of changes. 297 change blocks. | ||||
826 lines changed or deleted | 819 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/ |