WebRTC Data Channels Salvatore Loreto Randell Jesup Michael Tuexen Interim June 2012 - Stockholm Outline › Protocol stack › Dependencies outside RTCWeb wg › Inbound vs Outbound › Data Channel Protocol overview Protocol Stack STUN SRTP Keying … SSRCN SSRC1 › consensus for SCTP encapsulated on DTLS SRTP Data SCTP DTLS UDP IP Data Channel Requirements › Multiple data channels › Reliable and unreliable › MUST be congestion-controlled › Provide relative priority › Data streams MUST be encrypted › MUST provide message fragmentation support › Quality open-source userland implementation needed for deployment › See draft for other implementation requirements Dependencies: IETF TSVWG DTLS Encapsulation of SCTP Packets for RTCWEB draft-tuexen-tsvwg-sctp-dtls-encaps-00.txt Status: it needs mail comments/support in tsvwg Dependencies: IETF MMUSIC Stream Control Transmission Protocol (SCTP)-Based Media Transport in the Session Description Protocol (SDP) draft-ietf-mmusic-sctp-sdp-01 This document defines (other then SCTP identifier) a new protocol identifier DTLS/SCTP : to allow the usage of SCTP on top of the Datagram Transport Layer Security (DTLS) protocol, as defined in [I-D.tuexen-tsvwg-sctp-dtls-encaps], using SDP. SCTP over DTLS is used by the RTCWeb protocol suite for transporting nonmedia data between browsers. Status: waiting for comments/feedback… Discussion: In-band vs Out-of-band › Out-of-band: more/everything to be negotiated via SDP (i.e. define all the SDP parameters necessary) › In-band: everything other the SCTP Association startup is negotiated inbound. The SCTP association is created with a initial number of streams specified by the application (i.e. default 16) Data Channel Protocol WebRTC Data Channel Protocol draft-jesup-rtcweb-data-protocol-01 a protocol for how the JS-layer dataChannel objects provide the data channels between the peers. Adding a Channel Control Messages are sent to manage opening bidirectional channels setting PPID = WebRTC (TBD by IANA). msg_type = DATA_CHANNEL_OPEN_REQUEST msg_type = DATA_CHANNEL_OPEN_RESPONSE Reverse_direction_stream = Stream number the DATA_CHANNEL_OPEN was sent on msg_type = DATA_CHANNEL_ACK DATA Reset stream DATA_CHANNEL_OPEN_REQUEST 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Type | Channel Type | Flags | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reliability Parameter | Priority | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ | / / Label | \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ DATA_CHANNEL_OPEN_RESPONSE 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Type | Error | Flags | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reverse Stream | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ DATA_CHANNEL_ACK 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Type | +-+-+-+-+-+-+-+-+ Closing a Channel Data Channels are closed by resetting the outgoing stream: If an incoming stream is reset by the peer, an corresponding outgoing stream reset SHOULD be issued. Once both streams of a channel are reset, the channel is closed and the streams are available for reuse. new SCTP Payload Protocol Identifiers (PPIDs) WebRTC Control - #To Be Assigned DOMString - #To Be Assigned Binary Data - #To Be Assigned.