RFC 8835
Transports for WebRTC
RFC 8835: Transports for WebRTC πβ¨
Okay bestie, let's get into it. This is RFC 8835, and it's giving "the transport layer rules for WebRTC" π . It's a Standards Track doc from the IETF, written by H. Alvestrand at Google, and it was published in January 2021. It's an official IETF spec, not just vibes, and it doesn't obsolete or update any other RFCs π¦. The ISSN is 2070-1721 if you're into that kind of thing π€.
Abstract
This doc describes the data transport protocols that WebRTC uses π, including the protocols for talking to middleboxes like firewalls, relays, and NAT boxes π§.
Status of This Memo
This is an Internet Standards Track document π. It's a product of the IETF, it represents consensus from the IETF community, and it went through public review and got approved by the IESG. If you want more info on Internet Standards, check Section 2 of RFC 7841 π.
Info about the current status, errata, and feedback lives at https://www.rfc-editor.org/info/rfc8835 β¨.
Copyright Notice
Copyright (c) 2021 IETF Trust and the document authors. All rights reserved π. This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as they were on the publication date. Read those carefully, bestie, because they set out your rights and restrictions π«Ά. Any Code Components pulled from this doc need Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty π₯.
Table of Contents
1. Introduction 2. Requirements Language 3. Transport and Middlebox Specification 3.1. System-Provided Interfaces 3.2. Ability to Use IPv4 and IPv6 3.3. Usage of Temporary IPv6 Addresses 3.4. Middlebox-Related Functions 3.5. Transport Protocols Implemented 4. Media Prioritization 4.1. Local Prioritization 4.2. Usage of Quality of Service -- DSCP and Multiplexing 5. IANA Considerations 6. Security Considerations 7. References 7.1. Normative References 7.2. Informative References Acknowledgements Author's Address
1. Introduction πΈ
WebRTC is a protocol suite for real-time multimedia exchange π₯. It works between browsers, and between browsers and other entities too π.
WebRTC is described in the WebRTC overview document [RFC8825], which also defines the terms "WebRTC endpoint" and "WebRTC browser" π . Terminology for RTP sources comes from [RFC7656] π§.
This doc focuses on the data transport protocols that conforming implementations use π¦. That includes the protocols for talking to intermediate boxes like firewalls, relays, and NAT boxes π.
This protocol suite is meant to satisfy the security considerations in the WebRTC security documents, [RFC8826] and [RFC8827] π₯. Lowkey important stuff π.
This document describes requirements that apply to all WebRTC endpoints π. When something only applies to WebRTC browsers, the doc calls it out explicitly β¨.
2. Requirements Language π«Ά
Okay, so the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this doc are interpreted as described in BCP 14 [RFC2119] [RFC8174] π. But only when they show up in all capitals, exactly like that π. Lowercase versions are just regular words, no cap π.
3. Transport and Middlebox Specification π
3.1. System-Provided Interfaces π
The protocol specs here assume these protocols are available to WebRTC implementations π:
UDP [RFC0768]: This is the protocol assumed by most protocol elements described π¦.
TCP [RFC0793]: This is used for HTTP/WebSockets, as well as TURN/TLS and ICE-TCP π§.
Both protocols are assumed to support IPv4 and IPv6 π.
For UDP, the spec assumes you can set the Differentiated Services Code Point (DSCP) on sockets opened on a per-packet basis π. That's how you get the prioritizations described in [RFC8837] (see Section 4.2 of this doc) when multiple media types are multiplexed β¨. It does not assume the DSCPs will be honored π. It does assume they may be zeroed or changed, since that's a local configuration issue π«Ά.
Platforms that don't give access to these interfaces won't be able to support a conforming WebRTC endpoint π. Not it π .
This spec does not assume the implementation has access to ICMP or raw IP π₯.
These protocols may be used, but a WebRTC endpoint can implement them itself, so they aren't defined as "system-provided interfaces" π:
TURN: Traversal Using Relays Around NAT [RFC8656] π§
STUN: Session Traversal Utilities for NAT [RFC5389] π¦
ICE: Interactive Connectivity Establishment [RFC8445] π
TLS: Transport Layer Security [RFC8446] πΈ
DTLS: Datagram Transport Layer Security [RFC6347] β¨
3.2. Ability to Use IPv4 and IPv6 π
Web apps running in a WebRTC browser MUST be able to use both IPv4 and IPv6 where available π. So if two peers only have IPv4 connectivity to each other, or only IPv6 connectivity, apps in the WebRTC browser MUST still be able to communicate π. No excuses, periodt π .
When TURN is used, and the TURN server has IPv4 or IPv6 connectivity to the peer or the peer's TURN server, candidates of the appropriate types MUST be supported π. The "Happy Eyeballs" spec for ICE [RFC8421] SHOULD be supported π¦.
3.3. Usage of Temporary IPv6 Addresses π§
Okay this one is giving privacy π. The IPv6 default address selection spec [RFC6724] says temporary addresses [RFC4941] are preferred over permanent addresses β¨. That's a change from the rules in [RFC3484] π . For apps that pick a single address, this is usually handled by the IPV6_PREFER_SRC_TMP preference flag from [RFC5014] π.
But here's the tea: this rule is meant to make sure privacy-enhanced addresses get used over static ones, and it doesn't quite work in ICE π. ICE gathers all addresses and reveals them to the app, so the rule doesn't have the right effect π. So the doc applies this rule instead π₯:
When a WebRTC endpoint gathers all IPv6 addresses on its host, and both nondeprecated temporary addresses and permanent addresses of the same scope are present, the WebRTC endpoint SHOULD discard the permanent addresses before exposing addresses to the application or using them in ICE. This is consistent with the default policy described in [RFC6724].
If some, but not all, of the temporary IPv6 addresses are marked deprecated, the WebRTC endpoint SHOULD discard the deprecated addresses, unless they are used by an ongoing connection. In an ICE restart, deprecated addresses that are currently in use MAY be retained.
3.4. Middlebox-Related Functions π¦
The main way to handle middleboxes is ICE π. It's the right tool for NAT boxes and firewalls that accept traffic from the inside, but only let outside traffic in if it's responding to inside traffic (simple stateful firewalls) πΈ.
ICE [RFC8445] MUST be supported β¨. The implementation MUST be a full ICE implementation, not ICE-Lite π. A full ICE implementation can interwork with both ICE and ICE-Lite implementations when they're deployed properly π«Ά.
For situations where both parties are behind NATs that do endpoint-dependent mapping (as defined in Section 2.4 of [RFC5128]), TURN [RFC8656] MUST be supported π₯.
WebRTC browsers MUST support configuring STUN and TURN servers, from both browser configuration and an application π.
Other work exists around STUN and TURN server discovery and management, including [RFC8155] for server discovery, and [RETURN] π§.
For firewalls that block all UDP traffic, the mode of TURN that uses TCP between the WebRTC endpoint and the TURN server MUST be supported π. The mode of TURN that uses TLS over TCP between the WebRTC endpoint and the TURN server MUST also be supported π. See Section 3.1 of [RFC8656] for details π¦.
For situations where one party is on an IPv4 network and the other is on an IPv6 network, TURN extensions for IPv6 MUST be supported π.
TURN TCP candidates, where the connection from the WebRTC endpoint's TURN server to the peer is a TCP connection, [RFC6062] MAY be supported π.
However, these candidates aren't seen as giving any significant benefit, for a few reasons π .
First, TURN TCP candidates would only matter when both peers are required to use TCP to set up a connection π.
Second, that use case is handled a different way, by both sides setting up UDP relay candidates using TURN over TCP to connect to their relay servers π§.
Third, using TCP between the WebRTC endpoint's TURN server and the peer may cause more performance problems than UDP, e.g., because of head of line blocking π.
ICE-TCP candidates [RFC6544] MUST be supported π₯. This may let apps talk to peers with public IP addresses across UDP-blocking firewalls without using a TURN server β¨.
If TCP connections are used, RTP framing according to [RFC4571] MUST be used for all packets π«Ά. That includes RTP packets, DTLS packets carrying data channels, and STUN connectivity check packets πΈ.
The ALTERNATE-SERVER mechanism in Section 11 of [RFC5389] (300 Try Alternate) MUST be supported π.
The WebRTC endpoint MAY support accessing the Internet through an HTTP proxy π. If it does, it MUST include the "ALPN" header as specified in [RFC7639] π, and proxy authentication as described in Section 4.3.6 of [RFC7231] and [RFC7235] MUST also be supported π.
Part 1 of 3. More parts coming, so stay tuned, bestie ππ¦
Okay bestie, picking up right where we left off π Section 3.5 is where the transport stuff gets really real, so let's go! β¨
3.5. Transport Protocols Implemented π
Okay so for moving media around, we use secure RTP π¦. The full scoop on the RTP profile is in "Media Transport and Use of RTP in WebRTC" [RFC8834], which MUST use a circuit breaker [RFC8083] and congestion control (check out [RFC8836] if you want more guidance, it's giving very helpful vibes π ).
Key exchange MUST be done using DTLS-SRTP, as described in [RFC8827]. No cap, this part is non-negotiable π₯.
For data transport over the WebRTC data channel [RFC8831], WebRTC endpoints MUST support SCTP over DTLS over ICE π«Ά. This encapsulation is specified in [RFC8261]. Negotiating this transport in the Session Description Protocol (SDP) is defined in [RFC8841]. The SCTP extension for I-DATA [RFC8260] MUST be supported too π.
The setup protocol for WebRTC data channels described in [RFC8832] MUST be supported π.
Note: The interaction between DTLS-SRTP as defined in [RFC5764] and ICE as defined in [RFC8445] is described in Section 6 of [RFC8842]. The effect of this specification is that all ICE candidate pairs associated with a single component are part of the same DTLS association. Thus, there will only be one DTLS handshake, even if there are multiple valid candidate pairs. π§
WebRTC endpoints MUST support multiplexing of DTLS and RTP over the same port pair, as described in the DTLS-SRTP specification [RFC5764], Section 5.1.2, with clarifications in [RFC7983] π. All application-layer protocol payloads over this DTLS connection are SCTP packets, so it's all one vibe β¨.
Protocol identification MUST be supplied as part of the DTLS handshake, as specified in [RFC8833] π.
4. Media Prioritization π
Okay this section is my absolute favorite, it's giving priority queue drama π. In the WebRTC prioritization model, the application tells the WebRTC endpoint how important each piece of media and data is, and all of that is controlled from the API π .
Here's the lingo: a "flow" is the unit that gets a specific priority through the WebRTC API π¦.
For media, a "media flow" (which can be an "audio flow" or a "video flow") is what [RFC7656] calls a "media source". That results in a "source RTP stream" plus one or more "redundancy RTP streams". This spec doesn't describe prioritization between the RTP streams that come from a single media source, so that's a plot twist for another day πΈ.
All media flows in WebRTC are assumed to be interactive, as defined in [RFC4594]. There's no browser API support for saying whether media is interactive or noninteractive, so everything is treated as interactive π.
A "data flow" is the outgoing data on a single WebRTC data channel π.
The priority of a media flow or data flow is classified as "very-low", "low", "medium", or "high". There are only four priority levels in the API, so keep it simple bestie π§.
The priority settings affect two pieces of behavior: packet send sequence decisions and packet markings. Each one gets its own section below π.
4.1. Local Prioritization π¦
Local prioritization happens at the local node, before the packet is sent. Because of that, the prioritization has full access to the data about the individual packets and can choose different treatment based on the stream each packet belongs to. Main character energy π.
When a WebRTC endpoint has packets to send on multiple streams that are congestion controlled under the same congestion control regime, the WebRTC endpoint SHOULD cause data to be emitted so that each stream at each level of priority gets approximately twice the transmission capacity (measured in payload bytes) of the level below it πΈ.
So when congestion happens, a high-priority flow can send 8 times as much data as a very-low-priority flow, as long as both have data to send. This prioritization doesn't depend on the media type β¨. The details of which packet goes first are implementation defined π.
For example, say there's a high-priority audio flow sending 100-byte packets and a low-priority video flow sending 1000-byte packets, and outgoing capacity exists for sending more than 5000 payload bytes. It would be appropriate to send 4000 bytes (40 packets) of audio and 1000 bytes (one packet) of video in a single pass of sending decisions π.
Now flip it. If the audio flow is marked low priority and the video flow is marked high priority, the scheduler may decide to send 2 video packets (2000 bytes) and 5 audio packets (500 bytes) when outgoing capacity exists for sending more than 2500 payload bytes π.
If there are two high-priority audio flows, each one can send 4000 bytes in the same period where a low-priority video flow can send 1000 bytes. Iconic distribution π .
Two example implementation strategies are:
- When the available bandwidth is known from the congestion control algorithm, configure each codec and each data channel with a target send rate that fits its share of the available bandwidth π¦.
- When congestion control indicates that a specified number of packets can be sent, send the packets that are ready using a weighted round-robin scheme across the connections π.
Any combination of these, or other schemes that have the same effect, is valid, as long as the distribution of transmission capacity is approximately correct β¨.
For media, it's usually inappropriate to use deep queues for sending. It's more useful to, for instance, skip intermediate frames that have no dependencies on them, so you get a lower bitrate π. For reliable data, queues are useful π«Ά.
Note that this specification doesn't dictate when disparate streams are to be "congestion controlled under the same congestion control regime". The issue of coupling congestion controllers is explored further in [RFC8699] π§.
4.2. Usage of Quality of Service -- DSCP and Multiplexing π
When a packet is sent, the network makes decisions about queueing and/or discarding it, and those decisions can affect the quality of the call. The sender can try to set the DSCP field of the packet to influence those decisions π.
Implementations SHOULD attempt to set QoS on the packets they send, following the guidelines in [RFC8837]. It's fine to depart from this recommendation when running on platforms where QoS marking isn't implemented πΈ.
The implementation MAY turn off DSCP markings if it detects symptoms of unexpected behavior, such as priority inversion or blocking of packets with certain DSCP markings. Some examples of these behaviors are described in [ANRW16]. How to detect these conditions is implementation dependent π.
A particularly hard problem is when one media transport uses multiple DSCPs, where one may be blocked and another allowed. This is allowed even within a single media flow for video in [RFC8837]. Implementations need to diagnose this scenario π. One possible approach is to send initial ICE probes with DSCP 0, and then send ICE probes on all the DSCPs that are intended to be used once a candidate pair has been selected. If one or more of the DSCP-marked probes fail, the sender will switch the media type to using DSCP 0. This can be done at the same time as the initial media traffic; on failure, the initial data may need to be resent. This switch will, of course, invalidate any congestion information gathered up to that point π.
Failures can also start happening during the lifetime of the call. This case is expected to be rarer and can be handled by the normal mechanisms for transport failure, which may involve an ICE restart π¦.
Note that when a DSCP causes nondelivery, you have to switch the whole media flow to DSCP 0, since all traffic for a single media flow needs to be on the same queue for congestion control purposes. Other flows on the same transport, using different DSCPs, don't need to change π .
All packets carrying data from the SCTP association supporting the data channels MUST use a single DSCP. The code point used SHOULD be the one recommended by [RFC8837] for the highest-priority data channel carried. Note that this means all data packets, no matter their relative priority, will be treated the same by the network π«Ά.
All packets on one TCP connection, no matter what it carries, MUST use a single DSCP π.
More advice on using DSCPs with RTP, plus the relationship between DSCP and congestion control, is given in [RFC7657] π§.
There are a bunch of QoS schemes that don't depend only on DSCPs. Some of them classify traffic into flows based on a 5-tuple (source address, source port, protocol, destination address, destination port) or a 6-tuple (5-tuple + DSCP). Under different conditions, it may make sense for a sending application to choose any of the following configurations π:
- Each media stream carried on its own 5-tuple
- Media streams grouped by media type into 5-tuples (such as carrying all audio on one 5-tuple)
- All media sent over a single 5-tuple, with or without differentiation into 6-tuples based on DSCPs
In each of the configurations mentioned, data channels may be carried on their own 5-tuple or multiplexed together with one of the media flows π.
More complex setups are also possible, like sending a high-priority video stream on one 5-tuple and all other video streams multiplexed together over another 5-tuple. More information on mapping media flows to 5-tuples can be found in [RFC8834] π¦.
A sending implementation MUST be able to support the following configurations:
- Multiplex all media and data on a single 5-tuple (fully bundled)
- Send each media stream on its own 5-tuple and data on its own 5-tuple (fully unbundled)
The sending implementation MAY choose to support other configurations, such as bundling each media type (audio, video, or data) into its own 5-tuple (bundling by media type) πΈ.
Sending data channel data over multiple 5-tuples is not supported π .
A receiving implementation MUST be able to receive media and data in all of these configurations π.
5. IANA Considerations π
This document has no IANA actions β¨.
6. Security Considerations π₯
Okay this one is SERIOUS bestie π Security is not something to vibe-check, so read these carefully!
WebRTC security considerations are enumerated in [RFC8826] π.
Security considerations pertaining to the use of DSCP are enumerated in [RFC8837] π‘οΈ.
7. References π
7.1. Normative References π
okay bestie, these are the must-read refs that the spec leans on, so they're basically load-bearing π«Ά
[RFC0768]Postel, J., "User Datagram Protocol", STD 6, RFC 768, DOI 10.17487/RFC0768, August 1980,<https://www.rfc-editor.org/info/rfc768>.[RFC0793]Postel, J., "Transmission Control Protocol", STD 7, RFC 793, DOI 10.17487/RFC0793, September 1981,<https://www.rfc-editor.org/info/rfc793>.[RFC2119]Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997,<https://www.rfc-editor.org/info/rfc2119>.[RFC4571]Lazzaro, J., "Framing Real-time Transport Protocol (RTP) and RTP Control Protocol (RTCP) Packets over Connection-Oriented Transport", RFC 4571, DOI 10.17487/RFC4571, July 2006,<https://www.rfc-editor.org/info/rfc4571>.[RFC4594]Babiarz, J., Chan, K., and F. Baker, "Configuration Guidelines for DiffServ Service Classes", RFC 4594, DOI 10.17487/RFC4594, August 2006,<https://www.rfc-editor.org/info/rfc4594>.[RFC4941]Narten, T., Draves, R., and S. Krishnan, "Privacy Extensions for Stateless Address Autoconfiguration in IPv6", RFC 4941, DOI 10.17487/RFC4941, September 2007,<https://www.rfc-editor.org/info/rfc4941>.[RFC5389]Rosenberg, J., Mahy, R., Matthews, P., and D. Wing, "Session Traversal Utilities for NAT (STUN)", RFC 5389, DOI 10.17487/RFC5389, October 2008,<https://www.rfc-editor.org/info/rfc5389>.[RFC5764]McGrew, D. and E. Rescorla, "Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP)", RFC 5764, DOI 10.17487/RFC5764, May 2010,<https://www.rfc-editor.org/info/rfc5764>.[RFC6062]Perreault, S., Ed. and J. Rosenberg, "Traversal Using Relays around NAT (TURN) Extensions for TCP Allocations", RFC 6062, DOI 10.17487/RFC6062, November 2010,<https://www.rfc-editor.org/info/rfc6062>.[RFC6347]Rescorla, E. and N. Modadugu, "Datagram Transport Layer Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, January 2012,<https://www.rfc-editor.org/info/rfc6347>.[RFC6544]Rosenberg, J., Keranen, A., Lowekamp, B. B., and A. B. Roach, "TCP Candidates with Interactive Connectivity Establishment (ICE)", RFC 6544, DOI 10.17487/RFC6544, March 2012,<https://www.rfc-editor.org/info/rfc6544>.[RFC6724]Thaler, D., Ed., Draves, R., Matsumoto, A., and T. Chown, "Default Address Selection for Internet Protocol Version 6 (IPv6)", RFC 6724, DOI 10.17487/RFC6724, September 2012,<https://www.rfc-editor.org/info/rfc6724>.[RFC7231]Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content", RFC 7231, DOI 10.17487/RFC7231, June 2014,<https://www.rfc-editor.org/info/rfc7231>.[RFC7235]Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer Protocol (HTTP/1.1): Authentication", RFC 7235, DOI 10.17487/RFC7235, June 2014,<https://www.rfc-editor.org/info/rfc7235>.[RFC7639]Hutton, A., Uberti, J., and M. Thomson, "The ALPN HTTP Header Field", RFC 7639, DOI 10.17487/RFC7639, August 2015,<https://www.rfc-editor.org/info/rfc7639>.[RFC7656]Lennox, J., Gross, K., Nandakumar, S., Salgueiro, G., and B. Burman, Ed., "A Taxonomy of Semantics and Mechanisms for Real-Time Transport Protocol (RTP) Sources", RFC 7656, DOI 10.17487/RFC7656, November 2015,<https://www.rfc-editor.org/info/rfc7656>.[RFC7983]Petit-Huguenin, M. and G. Salgueiro, "Multiplexing Scheme Updates for Secure Real-time Transport Protocol (SRTP) Extension for Datagram Transport Layer Security (DTLS)", RFC 7983, DOI 10.17487/RFC7983, September 2016,<https://www.rfc-editor.org/info/rfc7983>.[RFC8083]Perkins, C. and V. Singh, "Multimedia Congestion Control: Circuit Breakers for Unicast RTP Sessions", RFC 8083, DOI 10.17487/RFC8083, March 2017,<https://www.rfc-editor.org/info/rfc8083>.[RFC8174]Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017,<https://www.rfc-editor.org/info/rfc8174>.[RFC8260]Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, "Stream Schedulers and User Message Interleaving for the Stream Control Transmission Protocol", RFC 8260, DOI 10.17487/RFC8260, November 2017,<https://www.rfc-editor.org/info/rfc8260>.[RFC8261]Tuexen, M., Stewart, R., Jesup, R., and S. Loreto, "Datagram Transport Layer Security (DTLS) Encapsulation of SCTP Packets", RFC 8261, DOI 10.17487/RFC8261, November 2017,<https://www.rfc-editor.org/info/rfc8261>.[RFC8421]Martinsen, P., Reddy, T., and P. Patil, "Guidelines for Multihomed and IPv4/IPv6 Dual-Stack Interactive Connectivity Establishment (ICE)", BCP 217, RFC 8421, DOI 10.17487/RFC8421, July 2018,<https://www.rfc-editor.org/info/rfc8421>.[RFC8445]Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal", RFC 8445, DOI 10.17487/RFC8445, July 2018,<https://www.rfc-editor.org/info/rfc8445>.[RFC8446]Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,<https://www.rfc-editor.org/info/rfc8446>.[RFC8656]Reddy, T., Ed., Johnston, A., Ed., Matthews, P., and J. Rosenberg, "Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)", RFC 8656, DOI 10.17487/RFC8656, February 2020,<https://www.rfc-editor.org/info/rfc8656>.[RFC8825]Alvestrand, H., "Overview: Real-Time Protocols for Browser-Based Applications", RFC 8825, DOI 10.17487/RFC8825, January 2021,<https://www.rfc-editor.org/info/rfc8825>.[RFC8826]Rescorla, E., "Security Considerations for WebRTC", RFC 8826, DOI 10.17487/RFC8826, January 2021,<https://www.rfc-editor.org/info/rfc8826>.[RFC8827]Rescorla, E., "WebRTC Security Architecture", RFC 8827, DOI 10.17487/RFC8827, January 2021,<https://www.rfc-editor.org/info/rfc8827>.[RFC8831]Jesup, R., Loreto, S., and M. TΓΌxen, "WebRTC Data Channels", RFC 8831, DOI 10.17487/RFC8831, January 2021,<https://www.rfc-editor.org/info/rfc8831>.[RFC8832]Jesup, R., Loreto, S., and M. TΓΌxen, "WebRTC Data Channel Establishment Protocol", RFC 8832, DOI 10.17487/RFC8832, January 2021,<https://www.rfc-editor.org/info/rfc8832>.[RFC8833]Thomson, M., "Application-Layer Protocol Negotiation (ALPN) for WebRTC", RFC 8833, DOI 10.17487/RFC8833, January 2021,<https://www.rfc-editor.org/info/rfc8833>.[RFC8834]Perkins, C., Westerlund, M., and J. Ott, "Media Transport and Use of RTP in WebRTC", RFC 8834, DOI 10.17487/RFC8834, January 2021,<https://www.rfc-editor.org/info/rfc8834>.[RFC8836]Jesup, R. and Z. Sarker, Ed., "Congestion Control Requirements for Interactive Real-Time Media", RFC 8836, DOI 10.17487/RFC8836, January 2021,<https://www.rfc-editor.org/info/rfc8836>.[RFC8837]Jones, P., Dhesikan, S., Jennings, C., and D. Druta, "Differentiated Services Code Point (DSCP) Packet Markings for WebRTC QoS", RFC 8837, DOI 10.17487/RFC8837, January 2021,<https://www.rfc-editor.org/info/rfc8837>.[RFC8841]Holmberg, C., Shpount, R., Loreto, S., and G. Camarillo, "Session Description Protocol (SDP) Offer/Answer Procedures for Stream Control Transmission Protocol (SCTP) over Datagram Transport Layer Security (DTLS) Transport", RFC 8841, DOI 10.17487/RFC8841, January 2021,<https://www.rfc-editor.org/info/rfc8841>.[RFC8842]Holmberg, C. and R. Shpount, "Session Description Protocol (SDP) Offer/Answer Considerations for Datagram Transport Layer Security (DTLS) and Transport Layer Security (TLS)", RFC 8842, DOI 10.17487/RFC8842, January 2021,<https://www.rfc-editor.org/info/rfc8842>.
7.2. Informative References πΈ
these ones are the extra-credit reading, the stuff that gives context but isn't strictly needed to build the thing π§
[ANRW16]Barik, R., Welzl, M., and A. Elmokashfi, "How to say that you're special: Can we use bits in the IPv4 header?", ANRW '16: Proceedings of the 2016 Applied Networking Research Workshop, pages 68-70, DOI 10.1145/2959424.2959442, July 2016,<https://irtf.org/anrw/2016/anrw16-final17.pdf>.[RETURN]Schwartz, B. and J. Uberti, "Recursively Encapsulated TURN (RETURN) for Connectivity and Privacy in WebRTC", Work in Progress, Internet-Draft, draft-ietf-rtcweb-return-02, 27 March 2017,<https://tools.ietf.org/html/draft-ietf-rtcweb-return-02>.[RFC3484]Draves, R., "Default Address Selection for Internet Protocol version 6 (IPv6)", RFC 3484, DOI 10.17487/RFC3484, February 2003,<https://www.rfc-editor.org/info/rfc3484>.[RFC5014]Nordmark, E., Chakrabarti, S., and J. Laganier, "IPv6 Socket API for Source Address Selection", RFC 5014, DOI 10.17487/RFC5014, September 2007,<https://www.rfc-editor.org/info/rfc5014>.[RFC5128]Srisuresh, P., Ford, B., and D. Kegel, "State of Peer-to-Peer (P2P) Communication across Network Address Translators (NATs)", RFC 5128, DOI 10.17487/RFC5128, March 2008,<https://www.rfc-editor.org/info/rfc5128>.[RFC7657]Black, D., Ed. and P. Jones, "Differentiated Services (Diffserv) and Real-Time Communication", RFC 7657, DOI 10.17487/RFC7657, November 2015,<https://www.rfc-editor.org/info/rfc7657>.[RFC8155]Patil, P., Reddy, T., and D. Wing, "Traversal Using Relays around NAT (TURN) Server Auto Discovery", RFC 8155, DOI 10.17487/RFC8155, April 2017,<https://www.rfc-editor.org/info/rfc8155>.[RFC8699]Islam, S., Welzl, M., and S. Gjessing, "Coupled Congestion Control for RTP Media", RFC 8699, DOI 10.17487/RFC8699, January 2020,<https://www.rfc-editor.org/info/rfc8699>.
Acknowledgements π«Ά
this doc is built on earlier draft versions that got embedded in [RFC8825], and those drafts came from loads of RTCWEB Working Group members. so many brains, honestly iconic π
special shoutout to the people who reviewed earlier drafts: Eduardo Gueiros, Magnus Westerlund, Markus Isomaki, and Dan Wing π and Andrew Hutton's contributions deserve a special mention too β¨
Author's Address π
Harald Alvestrand Google
Email: harald@alvestrand.no
π¦ where this page comes from
- ietf: rfc8835 2021-01
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms