draft-ietf-rtcweb-data-channel-07.txt | draft-ietf-rtcweb-data-channel-08.txt | |||
---|---|---|---|---|
Network Working Group R. Jesup | Network Working Group R. Jesup | |||
Internet-Draft Mozilla | Internet-Draft Mozilla | |||
Intended status: Standards Track S. Loreto | Intended status: Standards Track S. Loreto | |||
Expires: August 15, 2014 Ericsson | Expires: October 11, 2014 Ericsson | |||
M. Tuexen | M. Tuexen | |||
Muenster Univ. of Appl. Sciences | Muenster Univ. of Appl. Sciences | |||
February 11, 2014 | April 9, 2014 | |||
WebRTC Data Channels | WebRTC Data Channels | |||
draft-ietf-rtcweb-data-channel-07.txt | draft-ietf-rtcweb-data-channel-08.txt | |||
Abstract | Abstract | |||
The Real-Time Communication in WEB-browsers working group is charged | The Real-Time Communication in WEB-browsers working group is charged | |||
to provide protocol support for direct interactive rich communication | to provide protocol support for direct interactive rich communication | |||
using audio, video, and data between two peers' web-browsers. This | using audio, video, and data between two peers' web-browsers. This | |||
document specifies the non-media data transport aspects of the WebRTC | document specifies the non-(S)RTP media data transport aspects of the | |||
framework. It provides an architectural overview of how the Stream | WebRTC framework. It provides an architectural overview of how the | |||
Control Transmission Protocol (SCTP) is used in the WebRTC context as | Stream Control Transmission Protocol (SCTP) is used in the WebRTC | |||
a generic transport service allowing WEB-browsers to exchange generic | context as a generic transport service allowing WEB-browsers to | |||
data from peer to peer. | exchange generic data from peer to peer. | |||
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 August 15, 2014. | This Internet-Draft will expire on October 11, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 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 | |||
skipping to change at page 2, line 20 | skipping to change at page 2, line 20 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3.1. Use Cases for Unreliable Data Channels . . . . . . . . . 3 | 3.1. Use Cases for Unreliable Data Channels . . . . . . . . . 3 | |||
3.2. Use Cases for Reliable Data Channels . . . . . . . . . . 4 | 3.2. Use Cases for Reliable Data Channels . . . . . . . . . . 4 | |||
4. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
5. SCTP over DTLS over UDP Considerations . . . . . . . . . . . 5 | 5. SCTP over DTLS over UDP Considerations . . . . . . . . . . . 5 | |||
6. The Usage of SCTP in the WebRTC Context . . . . . . . . . . . 8 | 6. The Usage of SCTP for Data Channels . . . . . . . . . . . . . 8 | |||
6.1. SCTP Protocol Considerations . . . . . . . . . . . . . . 8 | 6.1. SCTP Protocol Considerations . . . . . . . . . . . . . . 8 | |||
6.2. Association Setup . . . . . . . . . . . . . . . . . . . . 9 | 6.2. Association Setup . . . . . . . . . . . . . . . . . . . . 9 | |||
6.3. SCTP Streams . . . . . . . . . . . . . . . . . . . . . . 9 | 6.3. SCTP Streams . . . . . . . . . . . . . . . . . . . . . . 9 | |||
6.4. Channel Definition . . . . . . . . . . . . . . . . . . . 9 | 6.4. Channel Definition . . . . . . . . . . . . . . . . . . . 9 | |||
6.5. Opening a Channel . . . . . . . . . . . . . . . . . . . . 10 | 6.5. Opening a Channel . . . . . . . . . . . . . . . . . . . . 10 | |||
6.6. Transferring User Data on a Channel . . . . . . . . . . . 10 | 6.6. Transferring User Data on a Channel . . . . . . . . . . . 10 | |||
6.7. Closing a Channel . . . . . . . . . . . . . . . . . . . . 11 | 6.7. Closing a Channel . . . . . . . . . . . . . . . . . . . . 11 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 12 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 14 | 10.2. Informative References . . . . . . . . . . . . . . . . . 14 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
1. Introduction | 1. Introduction | |||
Non-media data types in the context of WebRTC are handled by using | Non-(S)RTP media data types in the context of WebRTC are handled by | |||
SCTP [RFC4960] encapsulated in DTLS [RFC6347]. | using SCTP [RFC4960] encapsulated in DTLS [RFC6347]. | |||
+----------+ | +----------+ | |||
| SCTP | | | SCTP | | |||
+----------+ | +----------+ | |||
| DTLS | | | DTLS | | |||
+----------+ | +----------+ | |||
| ICE/UDP | | | ICE/UDP | | |||
+----------+ | +----------+ | |||
Figure 1: Basic stack diagram | Figure 1: Basic stack diagram | |||
The encapsulation of SCTP over DTLS (see | The encapsulation of SCTP over DTLS (see | |||
[I-D.ietf-tsvwg-sctp-dtls-encaps]) over ICE/UDP (see [RFC5245]) | [I-D.ietf-tsvwg-sctp-dtls-encaps]) over ICE/UDP (see [RFC5245]) | |||
provides a NAT traversal solution together with confidentiality, | provides a NAT traversal solution together with confidentiality, | |||
source authentication, and integrity protected transfers. This data | source authentication, and integrity protected transfers. This data | |||
transport service operates in parallel to the media transports, and | transport service operates in parallel to the (S)RTP media | |||
all of them can eventually share a single transport-layer port | transports, and all of them can eventually share a single transport- | |||
number. | layer port number. | |||
SCTP as specified in [RFC4960] with the partial reliability extension | SCTP as specified in [RFC4960] with the partial reliability extension | |||
defined in [RFC3758] provides multiple streams natively with | defined in [RFC3758] and the additional policies defined in | |||
reliable, and partially-reliable delivery modes for user messages. | [I-D.ietf-tsvwg-sctp-prpolicies] provides multiple streams natively | |||
Using the reconfiguration extension defined in [RFC6525] allows to | with reliable, and the relevant partially-reliable delivery modes for | |||
increase the number of streams during the lifetime of an SCTP | user messages. Using the reconfiguration extension defined in | |||
association and to reset individual SCTP streams. | [RFC6525] allows to increase the number of streams during the | |||
lifetime of an SCTP association and to reset individual SCTP streams. | ||||
Using [I-D.ietf-tsvwg-sctp-ndata] allows to interleave large messages | ||||
to avoid the monopolization and adds the support of prioritizing of | ||||
SCTP streams. | ||||
The remainder of this document is organized as follows: Section 3 and | The remainder of this document is organized as follows: Section 3 and | |||
Section 4 provide use cases and requirements for both unreliable and | Section 4 provide use cases and requirements for both unreliable and | |||
reliable peer to peer data channels; Section 5 arguments SCTP over | reliable peer to peer data channels; Section 5 discusses SCTP over | |||
DTLS over UDP; Section 6 provides the specification of how SCTP | DTLS over UDP; Section 6 provides the specification of how SCTP | |||
should be used by the WebRTC protocol framework for transporting non- | should be used by the WebRTC protocol framework for transporting | |||
media data between WEB-browsers. | non-(S)RTP media data between WEB-browsers. | |||
2. Conventions | 2. Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
3. Use Cases | 3. Use Cases | |||
This section defined use cases specific to data channels. For | This section defines use cases specific to data channels. For | |||
general use cases see [I-D.ietf-rtcweb-use-cases-and-requirements]. | general use cases see [I-D.ietf-rtcweb-use-cases-and-requirements]. | |||
3.1. Use Cases for Unreliable Data Channels | 3.1. Use Cases for Unreliable Data Channels | |||
U-C 1: A real-time game where position and object state information | U-C 1: A real-time game where position and object state information | |||
is sent via one or more unreliable data channels. Note that | is sent via one or more unreliable data channels. Note that | |||
at any time there may be no media channels, or all media | at any time there may be no (S)RTP media channels, or all | |||
channels may be inactive, and that there may also be reliable | (S)RTP media channels may be inactive, and that there may | |||
data channels in use. | also be reliable data channels in use. | |||
U-C 2: Providing non-critical information to a user about the reason | U-C 2: Providing non-critical information to a user about the reason | |||
for a state update in a video chat or conference, such as | for a state update in a video chat or conference, such as | |||
mute state. | mute state. | |||
3.2. Use Cases for Reliable Data Channels | 3.2. Use Cases for Reliable Data Channels | |||
U-C 3: A real-time game where critical state information needs to be | U-C 3: A real-time game where critical state information needs to be | |||
transferred, such as control information. Such a game may | transferred, such as control information. Such a game may | |||
have no media channels, or they may be inactive at any given | have no (S)RTP media channels, or they may be inactive at any | |||
time, or may only be added due to in-game actions. | given time, or may only be added due to in-game actions. | |||
U-C 4: Non-realtime file transfers between people chatting. Note | U-C 4: Non-realtime file transfers between people chatting. Note | |||
that this may involve a large number of files to transfer | that this may involve a large number of files to transfer | |||
sequentially or in parallel, such as when sharing a folder of | sequentially or in parallel, such as when sharing a folder of | |||
images or a directory of files. | images or a directory of files. | |||
U-C 5: Realtime text chat during an audio and/or video call with an | U-C 5: Realtime text chat during an audio and/or video call with an | |||
individual or with multiple people in a conference. | individual or with multiple people in a conference. | |||
U-C 6: Renegotiation of the configuration of the PeerConnection. | U-C 6: Renegotiation of the configuration of the PeerConnection. | |||
skipping to change at page 4, line 33 | skipping to change at page 4, line 33 | |||
PeerConnection to send and receive HTTP/HTTPS requests and | PeerConnection to send and receive HTTP/HTTPS requests and | |||
data, for example to avoid local Internet filtering or | data, for example to avoid local Internet filtering or | |||
monitoring. | monitoring. | |||
4. Requirements | 4. Requirements | |||
This section lists the requirements for P2P data channels between two | This section lists the requirements for P2P data channels between two | |||
browsers. | browsers. | |||
Req. 1: Multiple simultaneous data channels MUST be supported. | Req. 1: Multiple simultaneous data channels MUST be supported. | |||
Note that there may 0 or more media streams in parallel | Note that there may be 0 or more (S)RTP media streams in | |||
with the data channels in the same PeerConnection, and the | parallel with the data channels in the same PeerConnection, | |||
number and state (active/inactive) of these media streams | and the number and state (active/inactive) of these (S)RTP | |||
may change at any time. | media streams may change at any time. | |||
Req. 2: Both reliable and unreliable data channels MUST be | Req. 2: Both reliable and unreliable data channels MUST be | |||
supported. | supported. | |||
Req. 3: Data channels of a PeerConnection MUST be congestion | Req. 3: Data channels of a PeerConnection MUST be congestion | |||
controlled; either individually, as a class, or in | controlled; either individually, as a class, or in | |||
conjunction with the media streams of the PeerConnection, | conjunction with the (S)RTP media streams of the | |||
to ensure that data channels don't cause congestion | PeerConnection, to ensure that data channels don't cause | |||
problems for these media streams, and that the WebRTC | congestion problems for these (S)RTP media streams, and | |||
PeerConnection as a whole is fair with competing traffic | that the WebRTC PeerConnection as a whole is fair with | |||
such as TCP. | competing traffic such as TCP. | |||
Req. 4: The application SHOULD be able to provide guidance as to | Req. 4: The application SHOULD be able to provide guidance as to | |||
the relative priority of each data channel relative to each | the relative priority of each data channel relative to each | |||
other, and relative to the media streams. This will | other, and relative to the (S)RTP media streams. This will | |||
interact with the congestion control algorithms. | interact with the congestion control algorithms. | |||
Req. 5: Data channels MUST be secured; allowing for | Req. 5: Data channels MUST be secured; allowing for | |||
confidentiality, integrity and source authentication. See | confidentiality, integrity and source authentication. See | |||
[I-D.ietf-rtcweb-security] and | [I-D.ietf-rtcweb-security] and | |||
[I-D.ietf-rtcweb-security-arch] for detailed info. | [I-D.ietf-rtcweb-security-arch] for detailed info. | |||
Req. 6: Data channels MUST provide message fragmentation support | Req. 6: Data channels MUST provide message fragmentation support | |||
such that IP-layer fragmentation can be avoided no matter | such that IP-layer fragmentation can be avoided no matter | |||
how large a message the JavaScript application passes to be | how large a message the JavaScript application passes to be | |||
skipping to change at page 5, line 42 | skipping to change at page 5, line 42 | |||
Req. 10: It MUST be possible to implement the protocol stack in the | Req. 10: It MUST be possible to implement the protocol stack in the | |||
user application space. | user application space. | |||
5. SCTP over DTLS over UDP Considerations | 5. SCTP over DTLS over UDP Considerations | |||
The important features of SCTP in the WebRTC context are: | The important features of SCTP in the WebRTC context are: | |||
o Usage of a TCP-friendly congestion control. | o Usage of a TCP-friendly congestion control. | |||
o The congestion control is modifiable for integration with media | o The congestion control is modifiable for integration with the | |||
stream congestion control. | (S)RTP media stream congestion control. | |||
o Support of multiple unidirectional streams, each providing its own | o Support of multiple unidirectional streams, each providing its own | |||
notion of ordered message delivery. | notion of ordered message delivery. | |||
o Support of ordered and out-of-order message delivery. | o Support of ordered and out-of-order message delivery. | |||
o Supporting arbitrary large user message by providing fragmentation | o Supporting arbitrary large user messages by providing | |||
and reassembly. | fragmentation and reassembly. | |||
o Support of PMTU-discovery. | o Support of PMTU-discovery. | |||
o Support of reliable or partially reliable message transport. | o Support of reliable or partially reliable message transport. | |||
SCTP multihoming will not be used in WebRTC. The SCTP layer will | SCTP multihoming will not be used in WebRTC. The SCTP layer will | |||
simply act as if it were running on a single-homed host, since that | simply act as if it were running on a single-homed host, since that | |||
is the abstraction that the lower layer (a connection oriented, | is the abstraction that the lower layer (a connection oriented, | |||
unreliable datagram service) exposes. | unreliable datagram service) exposes. | |||
The encapsulation of SCTP over DTLS defined in | The encapsulation of SCTP over DTLS defined in | |||
[I-D.ietf-tsvwg-sctp-dtls-encaps] provides confidentiality, source | [I-D.ietf-tsvwg-sctp-dtls-encaps] provides confidentiality, source | |||
authenticated, and integrity protected transfers. Using DTLS over | authenticated, and integrity protected transfers. Using DTLS over | |||
UDP in combination with ICE enables middlebox traversal in IPv4 and | UDP in combination with ICE enables middlebox traversal in IPv4 and | |||
IPv6 based networks. SCTP as specified in [RFC4960] MUST be used in | IPv6 based networks. SCTP as specified in [RFC4960] MUST be used in | |||
combination with the extension defined in [RFC3758] and provides the | combination with the extension defined in [RFC3758] and provides the | |||
following interesting features for transporting non-media data | following features for transporting non-(S)RTP media data between | |||
between browsers: | browsers: | |||
o Support of multiple unidirectional streams. | o Support of multiple unidirectional streams. | |||
o Ordered and unordered delivery of user messages. | o Ordered and unordered delivery of user messages. | |||
o Reliable and partial-reliable transport of user messages. | o Reliable and partial-reliable transport of user messages. | |||
Each SCTP user message contains a so called Payload Protocol | Each SCTP user message contains a Payload Protocol Identifier (PPID) | |||
Identifier (PPID) that is passed to SCTP by its upper layer and sent | that is passed to SCTP by its upper layer on the sending side and | |||
to its peer. This value can be used to multiplex multiple protocols | provided to its upper layer on the receiving side. The PPID can be | |||
over a single SCTP association. The sender provides for each | used to multiplex/demultiplex multiple upper layers over a single | |||
protocol a specific PPID and the receiver can demultiplex the | SCTP association. In the WebRTP context, the PPID is used to | |||
messages based on the received PPID. The PPID is used to distinguish | distinguish between UTF-8 encoded user data, binary encoded userdata | |||
UTF-8 encoded user data and binary encoded userdata. The Data | and the Data Channel Establishment Protocol defined in | |||
Channel Establishment Protocol defined in | [I-D.ietf-rtcweb-data-protocol]. Please note that the PPID is not | |||
[I-D.ietf-rtcweb-data-protocol] uses also a specific PPID to be | accessible via the Javascript API. | |||
distinguished from user data. | ||||
The encapsulation of SCTP over DTLS, together with the SCTP features | The encapsulation of SCTP over DTLS, together with the SCTP features | |||
listed above satisfies all the requirements listed in Section 4. | listed above satisfies all the requirements listed in Section 4. | |||
The layering of protocols for WebRTC is shown in the following | The layering of protocols for WebRTC is shown in the following | |||
Figure 2. | Figure 2. | |||
+------+ | +------+------+------+ | |||
|WEBRTC| | | DCEP | UTF-8|Binary| | |||
| DATA | | | | data | data | | |||
+------+ | +------+------+------+ | |||
| SCTP | | | SCTP | | |||
+--------------------+ | +----------------------------------+ | |||
| STUN | SRTP | DTLS | | | STUN | SRTP | DTLS | | |||
+--------------------+ | +----------------------------------+ | |||
| ICE | | | ICE | | |||
+--------------------+ | +----------------------------------+ | |||
| UDP1 | UDP2 | ... | | | UDP1 | UDP2 | ... | | |||
+--------------------+ | +----------------------------------+ | |||
Figure 2: WebRTC protocol layers | Figure 2: WebRTC protocol layers | |||
This stack (especially in contrast to DTLS over SCTP [RFC6083] in | This stack (especially in contrast to DTLS over SCTP [RFC6083] in | |||
combination with SCTP over UDP [RFC6951]) has been chosen because it | combination with SCTP over UDP [RFC6951]) has been chosen because it | |||
o supports the transmission of arbitrary large user messages. | o supports the transmission of arbitrary large user messages. | |||
o shares the DTLS connection with the media channels of the | o shares the DTLS connection with the (S)RTP media channels of the | |||
PeerConnection. | PeerConnection. | |||
o provides privacy for the SCTP control information. | o provides privacy for the SCTP control information. | |||
Considering the protocol stack of Figure 2 the usage of DTLS over UDP | Considering the protocol stack of Figure 2 the usage of DTLS over UDP | |||
is specified in [RFC6347], while the usage of SCTP on top of DTLS is | is specified in [RFC6347], while the usage of SCTP on top of DTLS is | |||
specified in [I-D.ietf-tsvwg-sctp-dtls-encaps]. Please note that the | specified in [I-D.ietf-tsvwg-sctp-dtls-encaps]. Please note that the | |||
demultiplexing STUN vs. SRTP vs. DTLS is done as described in | demultiplexing STUN vs. (S)RTP vs. DTLS is done as described in | |||
Section 5.1.2 of [RFC5764] and SCTP is the only payload of DTLS. | Section 5.1.2 of [RFC5764] and SCTP is the only payload of DTLS. | |||
Since DTLS is typically implemented in user-land, the SCTP stack also | Since DTLS is typically implemented in user-land, the SCTP stack also | |||
needs to be a user-land stack. | needs to be a user-land stack. | |||
When using DTLS as the lower layer, only single homed SCTP | When using DTLS as the lower layer, only single homed SCTP | |||
associations MUST be used, since DTLS does not expose any address | associations are supported, since DTLS does not expose any address | |||
management to its upper layer. The ICE/UDP layer can handle IP | management to its upper layer. The ICE/UDP layer can handle IP | |||
address changes during a session without needing to notify the DTLS | address changes during a session without needing interaction with the | |||
and SCTP layers, though it would be advantageous to retest Path MTU | DTLS and SCTP layers. However, SCTP SHOULD be notified when an | |||
on an IP address change. | address changes has happened. In this case SCTP SHOULD retest the | |||
Path MTU and reset the congestion state to the initial state. In | ||||
DTLS implementations used for this stack SHOULD support controlling | case of a window based congestion control like the one specified in | |||
fields of the IP layer like the Don't Fragment (DF)-bit in case of | [RFC4960], this means setting the congestion window and slow start | |||
IPv4 and the Differentiated Services Code Point (DSCP) field required | threshold to its initial values. | |||
for supporting [I-D.ietf-rtcweb-qos]. Being able to set the (DF)-bit | ||||
in case of IPv4 is required for performing path MTU discovery. The | ||||
DTLS implementation SHOULD also support sending user messages | ||||
exceeding the Path MTU. | ||||
Incoming ICMP or ICMPv6 messages can't be processed by the SCTP | Incoming ICMP or ICMPv6 messages can't be processed by the SCTP | |||
layer, since there is no way to identify the corresponding | layer, since there is no way to identify the corresponding | |||
association. Therefore SCTP MUST support performing Path MTU | association. Therefore SCTP MUST support performing Path MTU | |||
discovery without relying on ICMP or ICMPv6 as specified in [RFC4821] | discovery without relying on ICMP or ICMPv6 as specified in [RFC4821] | |||
using probing messages specified in [RFC4820]. The initial Path MTU | using probing messages specified in [RFC4820]. The initial Path MTU | |||
at the IP layer MUST NOT exceed 1200 bytes for IPv4 and 1280 for | at the IP layer SHOULD NOT exceed 1200 bytes for IPv4 and 1280 for | |||
IPv6. | IPv6. | |||
In general, the lower layer interface of an SCTP implementation | In general, the lower layer interface of an SCTP implementation | |||
SHOULD be adapted to address the differences between IPv4 and IPv6 | SHOULD be adapted to address the differences between IPv4 and IPv6 | |||
(being connection-less) or DTLS (being connection-oriented). | (being connection-less) or DTLS (being connection-oriented). | |||
When protocol stack of Figure 2 is used, DTLS protects the complete | When the protocol stack of Figure 2 is used, DTLS protects the | |||
SCTP packet, so it provides confidentiality, integrity and source | complete SCTP packet, so it provides confidentiality, integrity and | |||
authentication of the complete SCTP packet. | source authentication of the complete SCTP packet. | |||
This SCTP stack and its upper layer MUST support the usage of | This SCTP stack and its upper layer MUST support the usage of | |||
multiple SCTP streams. A user message can be sent ordered or | multiple SCTP streams. A user message can be sent ordered or | |||
unordered and with partial or full reliability. The partial | unordered and with partial or full reliability. The partial | |||
reliability extension MUST support policies to limit | reliability extension MUST support policies to limit | |||
o the transmission and retransmission by time. | o the transmission and retransmission by time. | |||
o the number of retransmissions. | o the number of retransmissions. | |||
Limiting the number of retransmissions to zero combined with | Limiting the number of retransmissions to zero combined with | |||
unordered delivery provides a UDP-like service where each user | unordered delivery provides a UDP-like service where each user | |||
message is sent exactly once and delivered in the order received. | message is sent exactly once and delivered in the order received. | |||
SCTP provides congestion control on a per-association base. This | SCTP provides congestion control on a per-association base. This | |||
means that all SCTP streams within a single SCTP association share | means that all SCTP streams within a single SCTP association share | |||
the same congestion window. Traffic not being sent over SCTP is not | the same congestion window. Traffic not being sent over SCTP is not | |||
covered by the SCTP congestion control. Using a congestion control | covered by the SCTP congestion control. Using a congestion control | |||
different from the standard one might improve the impact on the | different from than the standard one might improve the impact on the | |||
parallel SRTP media streams. Since SCTP does not support the | parallel (S)RTP media streams. | |||
negotiation of a congestion control algorithm yet, alternate | ||||
congestion controls SHOULD either only require a different sender | ||||
side behavior using existing information carried in the association | ||||
or need also specify a negotiation of of a congestion control | ||||
algorithm. | ||||
6. The Usage of SCTP in the WebRTC Context | 6. The Usage of SCTP for Data Channels | |||
6.1. SCTP Protocol Considerations | 6.1. SCTP Protocol Considerations | |||
The DTLS encapsulation of SCTP packets as described in | The DTLS encapsulation of SCTP packets as described in | |||
[I-D.ietf-tsvwg-sctp-dtls-encaps] MUST be used. | [I-D.ietf-tsvwg-sctp-dtls-encaps] MUST be used. | |||
The following SCTP protocol extensions are required: | The following SCTP protocol extensions are required: | |||
o The stream reset extension defined in [RFC6525] MUST be supported. | o The stream reset extension defined in [RFC6525] MUST be supported. | |||
It is used for closing channels. | It is used for closing channels. | |||
skipping to change at page 9, line 20 | skipping to change at page 9, line 12 | |||
o The dynamic address reconfiguration extension defined in [RFC5061] | o The dynamic address reconfiguration extension defined in [RFC5061] | |||
MUST be used to signal the support of the stream reset extension | MUST be used to signal the support of the stream reset extension | |||
defined in [RFC6525], other features of [RFC5061] are not REQUIRED | defined in [RFC6525], other features of [RFC5061] are not REQUIRED | |||
to be implemented. | to be implemented. | |||
o The partial reliability extension defined in [RFC3758] MUST be | o The partial reliability extension defined in [RFC3758] MUST be | |||
supported. In addition to the timed reliability PR-SCTP policy | supported. In addition to the timed reliability PR-SCTP policy | |||
defined in [RFC3758], the limited retransmission policy defined in | defined in [RFC3758], the limited retransmission policy defined in | |||
[I-D.ietf-tsvwg-sctp-prpolicies] MUST be supported. | [I-D.ietf-tsvwg-sctp-prpolicies] MUST be supported. | |||
Once support for message interleaving as currently being discussed in | The support for message interleaving as defined in | |||
[I-D.ietf-tsvwg-sctp-ndata] is available, it SHOULD be supported. | [I-D.ietf-tsvwg-sctp-ndata] SHOULD be used. | |||
6.2. Association Setup | 6.2. Association Setup | |||
The SCTP association will be set up when the two endpoints of the | The SCTP association will be set up when the two endpoints of the | |||
WebRTC PeerConnection agree on opening it, as negotiated by JSEP | WebRTC PeerConnection agree on opening it, as negotiated by JSEP | |||
(typically an exchange of SDP) [I-D.ietf-rtcweb-jsep]. Additionally, | (typically an exchange of SDP) [I-D.ietf-rtcweb-jsep]. It will use | |||
the negotiation SHOULD include some type of congestion control | the DTLS connection selected via ICE; typically this will be shared | |||
selection. It will use the DTLS connection selected via ICE; | via BUNDLE or equivalent with DTLS connections used to key the (S)RTP | |||
typically this will be shared via BUNDLE or equivalent with DTLS | media streams. | |||
connections used to key the DTLS-SRTP media streams. | ||||
The number of streams negotiated during SCTP association setup SHOULD | The number of streams negotiated during SCTP association setup SHOULD | |||
be 65535, which is the maximum number of streams that can negotiated | be 65535, which is the maximum number of streams that can negotiated | |||
during the association setup. | during the association setup. | |||
6.3. SCTP Streams | 6.3. SCTP Streams | |||
SCTP defines a stream as a unidirectional logical channel existing | SCTP defines a stream as a unidirectional logical channel existing | |||
within an SCTP association one to another SCTP endpoint. The streams | within an SCTP association to another SCTP endpoint. The streams are | |||
are used to provide the notion of in-sequence delivery and for | used to provide the notion of in-sequence delivery and for | |||
multiplexing. Each user message is sent on a particular stream, | multiplexing. Each user message is sent on a particular stream, | |||
either order or unordered. Ordering is preserved only for ordered | either ordered or unordered. Ordering is preserved only for ordered | |||
messages sent on the same stream. | messages sent on the same stream. | |||
6.4. Channel Definition | 6.4. Channel Definition | |||
The W3C has consensus on defining the application API for WebRTC | The W3C has consensus on defining the application API for WebRTC | |||
DataChannels to be bidirectional. They also consider the notions of | DataChannels to be bidirectional. They also consider the notions of | |||
in-sequence, out-of-sequence, reliable and unreliable as properties | in-sequence, out-of-sequence, reliable and unreliable as properties | |||
of Channels. One strong wish is for the application-level API to be | of Channels. One strong wish is for the application-level API to be | |||
close to the API for WebSockets, which implies bidirectional streams | close to the API for WebSockets, which implies bidirectional streams | |||
of data and waiting for onopen to fire before sending, a textual | of data and waiting for onopen to fire before sending, a textual | |||
skipping to change at page 10, line 18 | skipping to change at page 10, line 10 | |||
The realization of a bidirectional Data Channel is a pair of one | The realization of a bidirectional Data Channel is a pair of one | |||
incoming stream and one outgoing SCTP stream having the same stream | incoming stream and one outgoing SCTP stream having the same stream | |||
SCTP identifier. | SCTP identifier. | |||
How stream values are selected is protocol and implementation | How stream values are selected is protocol and implementation | |||
dependent. | dependent. | |||
6.5. Opening a Channel | 6.5. Opening a Channel | |||
Data channels can be opened by using internal or external | Data channels can be opened by using negotiation within the SCTP | |||
negotiation. The details are out of scope of this document. | association, called in-band negotiation, or out-of-band negotiation. | |||
Out-of-band negotiation is defined as any method which results in an | ||||
agreement as to the parameters of a channel and the creation thereof. | ||||
The details are out of scope of this document. | ||||
A simple protocol for internal negotiation is specified in | A simple protocol for in-band negotiation is specified in | |||
[I-D.ietf-rtcweb-data-protocol] and MUST be supported. | [I-D.ietf-rtcweb-data-protocol]. | |||
When one side wants to open a channel using external negotiation, it | When one side wants to open a channel using out-of-band negotiation, | |||
picks a stream. This can be based on the DTLS role (the client picks | it picks a stream. Unless otherwise defined or negotiated, the | |||
even stream identifiers, the server odd stream identifiers) or done | streams are picked based on the DTLS role (the client picks even | |||
in a different way. However, the application is responsible for | stream identifiers, the server odd stream identifiers). However, the | |||
avoiding collisions with existing streams. If it attempts to re-use | application is responsible for avoiding collisions with existing | |||
a stream which is part of an existing Channel, the addition SHOULD | streams. If it attempts to re-use a stream which is part of an | |||
fail. In addition to choosing a stream, the application SHOULD also | existing Channel, the addition SHOULD fail. In addition to choosing | |||
inform the protocol of the options to use for sending messages. The | a stream, the application SHOULD also determine the options to use | |||
application MUST ensure in an application-specific manner that the | for sending messages. The application MUST ensure in an application- | |||
other side will also inform the protocol that the selected stream is | specific manner that the application at the peer will also know the | |||
to be used, and the parameters for sending data from that side. | selected stream to be used, and the options for sending data from | |||
that side. | ||||
6.6. Transferring User Data on a Channel | 6.6. Transferring User Data on a Channel | |||
All data sent on a Channel in both directions MUST be sent over the | All data sent on a Channel in both directions MUST be sent over the | |||
underlying stream using the reliability defined when the Channel was | underlying stream using the reliability defined when the Channel was | |||
opened unless the options are changed, or per-message options are | opened unless the options are changed, or per-message options are | |||
specified by a higher level. | specified by a higher level. | |||
No more than one message should be put into an SCTP user message. | No more than one message should be put into an SCTP user message. | |||
The SCTP Payload Protocol Identifiers (PPIDs) are used to signal the | The SCTP Payload Protocol Identifiers (PPIDs) are used to signal the | |||
interpretation of the "Payload data". For identifying a JavaScript | interpretation of the "Payload data". For identifying a JavaScript | |||
string encoded in UTF-8 the PPID "WebRTC String" MUST be used, for | string encoded in UTF-8 the PPID "WebRTC String" MUST be used, for | |||
JavaScript binary data (ArrayBuffer or Blob) the PPID "WebRTC Binary" | JavaScript binary data (ArrayBuffer or Blob) the PPID "WebRTC Binary" | |||
MUST be used (see Section 8). | MUST be used (see Section 8). | |||
The usage of the PPIDs "WebRTC String Partial" and "WebRTC Binary | The usage of the PPIDs "WebRTC String Partial" and "WebRTC Binary | |||
Partial" is deprecated. They were used for a PPID based | Partial" is deprecated. They were used for a PPID-based | |||
fragmentation and reassembly of user messages belonging to reliable | fragmentation and reassembly of user messages belonging to reliable | |||
and ordered data channels. | and ordered data channels. | |||
If a message with an unsupported PPID is received or some error is | ||||
detected by the receiver (for example, illegal ordering), the | ||||
receiver SHOULD close the corresponding channel. | ||||
The SCTP base protocol specified in [RFC4960] does not support the | The SCTP base protocol specified in [RFC4960] does not support the | |||
interleaving of user messages. Therefore sending a large user | interleaving of user messages. Therefore sending a large user | |||
message can monopolize the SCTP association. To overcome this | message can monopolize the SCTP association. To overcome this | |||
limitation, [I-D.ietf-tsvwg-sctp-ndata] defines an extension to | limitation, [I-D.ietf-tsvwg-sctp-ndata] defines an extension to | |||
support message interleaving. Once this extension is available, it | support message interleaving, which SHOULD be used. As long as | |||
MUST be used. As long as message interleaving is not supported, the | message interleaving is not supported, the sender SHOULD limit the | |||
sender SHOULD limit the maximum message size to 16 KB to avoid | maximum message size to 16 KB to avoid monopolization. | |||
monopolization. | ||||
It is recommended that message size be kept within certain size | It is recommended that the message size be kept within certain size | |||
bounds as applications will not be able to support arbitrarily-large | bounds as applications will not be able to support arbitrarily-large | |||
single messages. This limit has to be negotiated, for example by | single messages. This limit has to be negotiated, for example by | |||
using [I-D.ietf-mmusic-sctp-sdp]. | using [I-D.ietf-mmusic-sctp-sdp]. | |||
The sender SHOULD disable the Nagle algorithm to minimize the | The sender SHOULD disable the Nagle algorithm to minimize the | |||
latency. | latency. | |||
6.7. Closing a Channel | 6.7. Closing a Channel | |||
Closing of a Data Channel MUST be signaled by resetting the | Closing of a Data Channel MUST be signaled by resetting the | |||
corresponding outgoing streams [RFC6525]. Resetting a stream set the | corresponding outgoing streams [RFC6525]. This means that if one | |||
side decides to close the channel, it resets the corresponding | ||||
outgoing stream. When the peer sees that an incoming stream was | ||||
reset, it also resets its corresponding outgoing stream. Once this | ||||
is completed, the channel is closed. Resetting a stream sets the | ||||
Stream Sequence Numbers (SSNs) of the stream back to 'zero' with a | Stream Sequence Numbers (SSNs) of the stream back to 'zero' with a | |||
corresponding notification to the application layer that the reset | corresponding notification to the application layer that the reset | |||
has been performed. Streams are available to reuse after a reset has | has been performed. Streams are available to reuse after a reset has | |||
been performed. | been performed. | |||
[RFC6525] also guarantees that all the messages are delivered (or | [RFC6525] also guarantees that all the messages are delivered (or | |||
abandoned) before resetting the stream. | abandoned) before resetting the stream. | |||
7. Security Considerations | 7. Security Considerations | |||
skipping to change at page 12, line 24 | skipping to change at page 12, line 27 | |||
+------------------------------------+-----------+-----------+ | +------------------------------------+-----------+-----------+ | |||
| WebRTC String | 51 | [RFCXXXX] | | | WebRTC String | 51 | [RFCXXXX] | | |||
| WebRTC Binary Partial (Deprecated) | 52 | [RFCXXXX] | | | WebRTC Binary Partial (Deprecated) | 52 | [RFCXXXX] | | |||
| WebRTC Binary | 53 | [RFCXXXX] | | | WebRTC Binary | 53 | [RFCXXXX] | | |||
| WebRTC String Partial (Deprecated) | 54 | [RFCXXXX] | | | WebRTC String Partial (Deprecated) | 54 | [RFCXXXX] | | |||
+------------------------------------+-----------+-----------+ | +------------------------------------+-----------+-----------+ | |||
9. Acknowledgments | 9. Acknowledgments | |||
Many thanks for comments, ideas, and text from Harald Alvestrand, | Many thanks for comments, ideas, and text from Harald Alvestrand, | |||
Adam Bergkvist, Cullen Jennings, Eric Rescorla, Randall Stewart, | Adam Bergkvist, Christer Holmberg, Cullen Jennings, Paul Kyzivat, | |||
Justin Uberti, and Magnus Westerlund. | Eric Rescorla, Irene Ruengeler, Randall Stewart, Justin Uberti, and | |||
Magnus Westerlund. | ||||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[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) | |||
skipping to change at page 13, line 25 | skipping to change at page 13, line 30 | |||
6525, February 2012. | 6525, February 2012. | |||
[I-D.ietf-tsvwg-sctp-ndata] | [I-D.ietf-tsvwg-sctp-ndata] | |||
Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, "A | Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, "A | |||
New Data Chunk for Stream Control Transmission Protocol", | New Data Chunk for Stream Control Transmission Protocol", | |||
draft-ietf-tsvwg-sctp-ndata-00 (work in progress), | draft-ietf-tsvwg-sctp-ndata-00 (work in progress), | |||
February 2014. | February 2014. | |||
[I-D.ietf-rtcweb-data-protocol] | [I-D.ietf-rtcweb-data-protocol] | |||
Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data Channel | Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data Channel | |||
Protocol", draft-ietf-rtcweb-data-protocol-02 (work in | Establishment Protocol", draft-ietf-rtcweb-data- | |||
progress), February 2014. | protocol-03 (work in progress), February 2014. | |||
[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-03 (work in progress), February 2014. | dtls-encaps-03 (work in progress), February 2014. | |||
[I-D.ietf-rtcweb-security] | [I-D.ietf-rtcweb-security] | |||
Rescorla, E., "Security Considerations for WebRTC", draft- | Rescorla, E., "Security Considerations for WebRTC", draft- | |||
ietf-rtcweb-security-06 (work in progress), January 2014. | ietf-rtcweb-security-06 (work in progress), January 2014. | |||
[I-D.ietf-rtcweb-security-arch] | [I-D.ietf-rtcweb-security-arch] | |||
Rescorla, E., "WebRTC Security Architecture", draft-ietf- | Rescorla, E., "WebRTC Security Architecture", draft-ietf- | |||
rtcweb-security-arch-08 (work in progress), January 2014. | rtcweb-security-arch-09 (work in progress), February 2014. | |||
[I-D.ietf-rtcweb-jsep] | [I-D.ietf-rtcweb-jsep] | |||
Uberti, J. and C. Jennings, "Javascript Session | Uberti, J. and C. Jennings, "Javascript Session | |||
Establishment Protocol", draft-ietf-rtcweb-jsep-05 (work | Establishment Protocol", draft-ietf-rtcweb-jsep-06 (work | |||
in progress), October 2013. | in progress), February 2014. | |||
[I-D.ietf-rtcweb-qos] | ||||
Dhesikan, S., Druta, D., Jones, P., and J. Polk, "DSCP and | ||||
other packet markings for RTCWeb QoS", draft-ietf-rtcweb- | ||||
qos-00 (work in progress), October 2012. | ||||
[I-D.ietf-tsvwg-sctp-prpolicies] | [I-D.ietf-tsvwg-sctp-prpolicies] | |||
Tuexen, M., Seggelmann, R., Stewart, R., and S. Loreto, | Tuexen, M., Seggelmann, R., Stewart, R., and S. Loreto, | |||
"Additional Policies for the Partial Reliability Extension | "Additional Policies for the Partial Reliability Extension | |||
of the Stream Control Transmission Protocol", draft-ietf- | of the Stream Control Transmission Protocol", draft-ietf- | |||
tsvwg-sctp-prpolicies-01 (work in progress), January 2014. | tsvwg-sctp-prpolicies-02 (work in progress), April 2014. | |||
[I-D.ietf-mmusic-sctp-sdp] | [I-D.ietf-mmusic-sctp-sdp] | |||
Loreto, S. and G. Camarillo, "Stream Control Transmission | Loreto, S. and G. Camarillo, "Stream Control Transmission | |||
Protocol (SCTP)-Based Media Transport in the Session | Protocol (SCTP)-Based Media Transport in the Session | |||
Description Protocol (SDP)", draft-ietf-mmusic-sctp-sdp-05 | Description Protocol (SDP)", draft-ietf-mmusic-sctp-sdp-06 | |||
(work in progress), October 2013. | (work in progress), February 2014. | |||
10.2. Informative References | 10.2. Informative References | |||
[RFC5764] McGrew, D. and E. Rescorla, "Datagram Transport Layer | [RFC5764] McGrew, D. and E. Rescorla, "Datagram Transport Layer | |||
Security (DTLS) Extension to Establish Keys for the Secure | Security (DTLS) Extension to Establish Keys for the Secure | |||
Real-time Transport Protocol (SRTP)", RFC 5764, May 2010. | Real-time Transport Protocol (SRTP)", RFC 5764, May 2010. | |||
[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, January 2011. | Transmission Protocol (SCTP)", RFC 6083, January 2011. | |||
[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, May 2013. | to End-Host Communication", RFC 6951, May 2013. | |||
[I-D.ietf-rtcweb-use-cases-and-requirements] | [I-D.ietf-rtcweb-use-cases-and-requirements] | |||
Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real- | Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real- | |||
Time Communication Use-cases and Requirements", draft- | Time Communication Use-cases and Requirements", draft- | |||
ietf-rtcweb-use-cases-and-requirements-13 (work in | ietf-rtcweb-use-cases-and-requirements-14 (work in | |||
progress), February 2014. | progress), February 2014. | |||
Authors' Addresses | Authors' Addresses | |||
Randell Jesup | Randell Jesup | |||
Mozilla | Mozilla | |||
US | US | |||
Email: randell-ietf@jesup.org | Email: randell-ietf@jesup.org | |||
End of changes. 50 change blocks. | ||||
149 lines changed or deleted | 149 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |