RFC 8825
Overview: Real-Time Protocols for Browser-Based Applications
RFC 8825: Overview: Real-Time Protocols for Browser-Based Applications π
Bestie, here's the title block: it's by H. Alvestrand from Google π . It's a Standards Track doc, dated January 2021, with ISSN 2070-1721 π¦. The title block doesn't list anything it obsoletes or updates β¨.
Abstract π
okay so this doc gives you the big-picture overview and context for a suite of protocols for real-time apps that run inside browsers. Basically, "real-time communication on the Web" πΈ
its whole goal is to be the starting and coordination point so that (1) every piece you need to make this work is easy to find, and (2) the parts that belong in the Internet protocol suite are fully specified and on the right publication track π
this doc is an applicability statement. it doesn't specify any protocol itself π instead it says which other specs implementations are supposed to follow to be compliant with Web Real-Time Communication (WebRTC) π§
Status of This Memo π
this is an Internet Standards Track document π₯
it's a product of the Internet Engineering Task Force (IETF). it represents the consensus of the IETF community, received public review, and got approved for publication by the Internet Engineering Steering Group (IESG) π if you want more on Internet Standards, check out Section 2 of RFC 7841 β¨
for the current status, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc8825 π«Ά
Copyright Notice π
Copyright (c) 2021 IETF Trust and the persons identified as 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 stand on the date of publication. please actually read those, bestie, because they spell out your rights and restrictions for this doc π
Code Components extracted from this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions. They're also provided without warranty, as described in the Simplified BSD License β οΈ
Table of Contents π¦
1. Introduction
2. Principles and Terminology
2.1. Goals of This Document
2.2. Relationship between API and Protocol
2.3. On Interoperability and Innovation
2.4. Terminology
3. Architecture and Functionality Groups
4. Data Transport
5. Data Framing and Securing
6. Data Formats
7. Connection Management
8. Presentation and Control
9. Local System Support Functions
10. IANA Considerations
11. Security Considerations
12. References
12.1. Normative References
12.2. Informative References
Acknowledgements
Author's Address
1. Introduction πΈ
okay, so the Internet was basically designed from very early on to be a possible home for real-time, interactive apps. the most obvious examples are audio calls ("Internet telephony") and video conferencing π
the first attempts at these needed special networks, special hardware, and custom-built software. they were often super expensive or low quality, and they put a lot of stress on the infrastructure π
then bandwidth went up and processors and other hardware got way faster. so the barriers to joining dropped, and now you can get a solid experience on normal everyday computers β¨
still, there are some blockers to talking to literally anyone. one is that there's no single set of communication protocols everyone agrees should be available for communication π another is that there's no universal identification system, like the one telephone numbers or email addresses give you in other systems π
"The Universal Solution" has, however, proved really hard to build π₯²
the last few years also gave us a new platform for deploying services: the browser-embedded application, aka the "web application". turns out that as long as the browser has the interfaces it needs, you can deliver almost any kind of service on it π§
traditionally those interfaces came from plugins, which you had to download and install separately from the browser. but with HTML5 [HTML5], app developers are seeing a lot of promise in making those interfaces available in a standardized way inside the browser itself π
this memo describes a set of building blocks that (1) can be accessed and controlled through a JavaScript API in a browser, and (2) together give you a sufficient set of functions to use interactive audio and video in apps that talk directly between browsers across the Internet π₯ The resulting protocol suite is meant to enable all the applications listed as required scenarios in the WebRTC "use cases" document [RFC7478] π
other efforts, like the W3C Web Real-Time Communications, Web Applications Security, and Devices and Sensors Working Groups, focus on making standardized APIs and interfaces available for those functions, either inside HTML5 or alongside it π this memo is all about specifying the protocols and subprotocols needed to define the interactions over the network π«Ά
Operators, pay attention! WebRTC deployment is going to change how signaling for real-time media works on the network, and it may shift the kinds of devices people use to create and consume media π¨
for signaling, WebRTC session setup will typically happen over TLS-secured web technologies using application-specific protocols. operational techniques that insert network elements to interpret the Session Description Protocol (SDP) will not work with that signaling π¬ that includes either (1) the endpoint asking the network for a SIP server [RFC3361], or (2) transparently inserting SIP Application Layer Gateways (ALGs) π ββοΈ
for networks with cooperative endpoints, the approaches defined in [RFC8155] may be a suitable replacement for [RFC3361] π¦
more browser-based calling may also mean fewer dedicated real-time communications devices, like SIP desk phones π± That will weaken techniques that put dedicated real-time devices on their own network segment, address range, or VLAN, for things like traffic filtering and QoS π₯² The markings described in [RFC8837] may be appropriate replacements for those techniques π
while this document formally relies on [RFC8445], at the time of publication most WebRTC implementations support the version of Interactive Connectivity Establishment (ICE) described in [RFC5245]. they also use a pre-standard version of the Trickle ICE mechanism described in [RFC8838] π The ice2 attribute defined in [RFC8445] can detect which version a remote endpoint is using and give you a smooth transition from the older spec to the newer one β¨
finally, this memo uses the term "WebRTC" (note the capitalization!) to refer to the whole effort, covering both the IETF and W3C work π
2. Principles and Terminology π
2.1. Goals of This Document π§
the goal of the WebRTC protocol spec is to define a set of protocols that, if all are implemented, let one implementation talk to another using audio, video, and data, sent along the most direct possible path between the participants πΈ
this doc is meant to be the roadmap to the WebRTC specs. it defines terms used by other parts of the WebRTC protocol specs, lists references to other specs that don't need more explaining in the WebRTC context, and points to other docs that are part of the WebRTC suite π¦
if you read this doc and the ones it points to, you should have everything you need to build a WebRTC-compatible implementation π«Άβ¨
2.2. Relationship between API and Protocol π
okay so the whole WebRTC effort is two big pieces, and each one is made of multiple documents π :
- A protocol specification, done in the IETF
- A JavaScript API specification, defined in a series of W3C documents [W3C.WD-webrtc] [W3C.WD-mediacapture-streams]
Together, these two specs are trying to make a world where JavaScript on any page, once its user has suitably authorized it, can set up communication using audio, video, and auxiliary data, as long as the browser supports these specs β¨. The browser environment doesn't limit what kinds of apps can use this functionality, so it's giving open-door energy π¦.
The protocol spec doesn't assume that every implementation implements this API π. It isn't meant to be necessary for interoperation to know whether the entity you're talking to is a browser or another device implementing the protocol spec. Totally not your business, bestie π
The goal is that the protocol spec and the API spec work together π₯. For all options and features of the protocol spec, it should be clear which API calls to make to exercise that option or feature. Similarly, for any sequence of API calls, it should be clear which protocol options and features will be invoked. Both are subject to constraints of the implementation, of course.
The following terms are used across the documents specifying the WebRTC suite, with the specific meanings given here. Not all terms are used in this document, and other terms just mean what they normally mean πΈ.
Agent: Undefined term. See "SDP Agent" and "ICE Agent".
Application Programming Interface (API): A specification of a set of calls and events, usually tied to a programming language or an abstract formal specification such as WebIDL, with its defined semantics.
Browser: Used synonymously with "interactive user agent" as defined in [HTML5]. See also the "WebRTC Browser" (aka "WebRTC User Agent") definition below.
Data Channel: An abstraction that allows data to be sent between WebRTC endpoints in the form of messages. Two endpoints can have multiple data channels between them.
ICE Agent: An implementation of the Interactive Connectivity Establishment (ICE) protocol [RFC8445]. An ICE Agent may also be an SDP Agent, but there exist ICE Agents that do not use SDP (for instance, those that use Jingle [XEP-0166]).
Interactive: Communication between multiple parties, where the expectation is that an action from one party can cause a reaction by another party, and the reaction can be observed by the first party, where the total time required for the action/reaction/observation is on the order of no more than hundreds of milliseconds. β
Media: Audio and video content. Not to be confused with "transmission media" such as wires.
Media Path: The path that media data follows from one WebRTC endpoint to another.
Protocol: A specification of a set of data units, their representation, and rules for their transmission, with their defined semantics. A protocol is usually thought of as going between systems.
Real-Time Media: Media where the generation and display of content are intended to occur closely together in time (on the order of no more than hundreds of milliseconds). Real-time media can be used to support interactive communication. π§
SDP Agent: The protocol implementation involved in the Session Description Protocol (SDP) offer/answer exchange, as defined in [RFC3264], Section 3.
Signaling: Communication that happens in order to establish, manage, and control media paths and data paths.
Signaling Path: The communication channels used between entities participating in signaling to transfer signaling. There may be more entities in the signaling path than in the media path.
WebRTC Browser (also called a "WebRTC User Agent" or "WebRTC UA"): Something that conforms to both the protocol specification and the JavaScript API cited above. π
WebRTC Non-Browser: Something that conforms to the protocol specification but does not claim to implement the JavaScript API. This can also be called a "WebRTC device" or "WebRTC native application".
WebRTC Endpoint: Either a WebRTC browser or a WebRTC non-browser. It conforms to the protocol specification.
WebRTC-Compatible Endpoint: An endpoint that is able to successfully communicate with a WebRTC endpoint but may fail to meet some requirements of a WebRTC endpoint. This may limit where in the network such an endpoint can be attached or may limit the security guarantees that it offers to others. It is not constrained by this specification. When it is mentioned at all, it is to note the implications on WebRTC-compatible endpoints of the requirements placed on WebRTC endpoints. π
WebRTC Gateway: A WebRTC-compatible endpoint that mediates media traffic to non-WebRTC entities.
All WebRTC browsers are WebRTC endpoints, so any requirement on a WebRTC endpoint also applies to a WebRTC browser. Periodt π .
A WebRTC non-browser may be capable of hosting applications in a way that is similar to the way a browser can host JavaScript applications, typically by offering APIs in other languages. For instance, it may be implemented as a library that offers a C++ API intended to be loaded into applications. In this case, security considerations similar to those for JavaScript may be needed. However, since such APIs are not defined or referenced here, this document cannot give any specific rules for those interfaces. π
WebRTC gateways are described in a separate document [WebRTC-Gateways]. π
2.3. On Interoperability and Innovation π¦
The "Mission statement for the IETF" [RFC3935] states that "The benefit of a standard to the Internet is in interoperability - that multiple products implementing a standard are able to work together in order to deliver valuable functions to the Internet's users." π
Communication on the Internet frequently happens in two phases:
- Two parties communicate, through some mechanism, what functionality they are both able to support.
- They use that shared functionality to communicate, or, failing to find anything in common, give up on communication.
There are often many choices for communicative functionality. The history of the Internet is absolutely packed with the proposal, standardization, implementation, and success or failure of many types of options, in all sorts of protocols π.
The goal of having a mandatory-to-implement function set is to prevent negotiation failure, not to preempt or prevent negotiation. β¨
The presence of a mandatory-to-implement function set is a strong changer of the marketplace of deployment, because it gives a guarantee that you can communicate successfully as long as (1) you conform to a specification and (2) the other party is willing to accept communication at the base level of that specification. It's giving guaranteed-good-vibes π«Ά.
The alternative, not having a mandatory-to-implement function, does not mean you cannot communicate. It merely means that in order to be part of the communications partnership, you have to implement the standard "and then some". The "and then some" is usually called a profile of some sort. In the version most antithetical to the Internet ethos, that "and then some" consists of having to use a specific vendor's product only. π
2.4. Terminology π
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. π
3. Architecture and Functionality Groups β¨
Okay so, for browser-based apps, the real-time model does not assume the browser has every single function needed for something like a phone call or a video conference ππ The vision is that the browser brings the functions a web app needs, and then that app teams up with its backend servers to pull off the rest. Teamwork makes the dream work, bestie π«Ά
That means two big interfaces need specs: the protocols browsers use to talk to each other directly (no middleman servers in the way π¦), and the APIs that give a JavaScript app access to all that browser magic β¨
+------------------------+ On-the-wire
| | Protocols
| Servers |--------->
| |
| |
+------------------------+
^
|
|
| HTTPS/
| WebSockets
|
|
+----------------------------+
| JavaScript/HTML/CSS |
+----------------------------+
Other ^ ^ RTC
APIs | | APIs
+---|-----------------|------+
| | | |
| +---------+|
| | Browser || On-the-wire
| Browser | RTC || Protocols
| | Function|----------->
| | ||
| | ||
| +---------+|
+---------------------|------+
|
V
Native OS Services
Figure 1: Browser Model
Quick note: HTTPS and WebSockets are also available to the JavaScript app through browser APIs πΈ
Also, nothing says the protocols can only be used to chat with another browser π Since they're fully specified, any endpoint that implements them faithfully should be able to interoperate with the app running in the browser. Main character energy for interop π
A super common deployment picture looks like this (JS = JavaScript, btw π ):
+-----------+ +-----------+
| Web | | Web |
| | | |
| |------------------| |
| Server | Signaling Path | Server |
| | | |
+-----------+ +-----------+
/ \
/ \ Application-defined
/ \ over
/ \ HTTPS/WebSockets
/ Application-defined over \
/ HTTPS/WebSockets \
/ \
+-----------+ +-----------+
|JS/HTML/CSS| |JS/HTML/CSS|
+-----------+ +-----------+
+-----------+ +-----------+
| | | |
| | | |
| Browser |--------------------------------| Browser |
| | Media Path | |
| | | |
+-----------+ +-----------+
Figure 2: Browser RTC Trapezoid
The key thing to clock in this drawing π is that the media path (the "low path") goes straight between the browsers, so it has to conform to the WebRTC protocol suite specs. The signaling path (the "high path") goes through servers that can modify, translate, or manipulate the signals as needed. Two different vibes, two different routes π§
If the two web servers belong to different entities, the inter-server signaling mechanism needs to be agreed upon, either through standardization or some other form of agreement π€ Existing protocols like SIP [RFC3261] or the Extensible Messaging and Presence Protocol (XMPP) [RFC6120] could be used between servers, while either a standards-based or proprietary protocol could be used between the browser and the web server. Mix and match, iykyk π
For example, if both operators' servers speak SIP, SIP could handle the server-to-server chatter. Then the browser-to-server part could be either a standardized mechanism (like SIP over WebSockets) or a proprietary one that the browser app and the web server agree on π Same deal for XMPP: if both servers run it, XMPP could talk between XMPP servers, with the browser side using either a standardized option (like XMPP over WebSockets or Bidirectional-streams Over Synchronous HTTP (BOSH) [XEP-0124]) or a proprietary signaling mechanism between the app and the web server π
Choosing the protocols for client-server and inter-server signaling, and defining how to translate between them? Not this doc's problem π ββοΈ Those are outside the scope of the WebRTC protocol suite described here.
Okay, now the functionality groups that the browser needs, roughly from the bottom up πͺ
- Data transport: Think TCP and UDP, plus the means to securely set up connections between entities, and the functions for deciding when to send data: congestion management, bandwidth estimation, and so on π
- Data framing: RTP, the Stream Control Transmission Protocol (SCTP), DTLS, and other data formats that act as containers, along with their functions for data confidentiality and integrity π¦
- Data formats: Codec specs, format specs, and functionality specs for the data passed between systems. Audio and video codecs, plus formats for data and document sharing, live in this group πΆ To actually use data formats, you need a way to describe them (e.g., a session description) π
- Connection management: Setting up connections, agreeing on data formats, and changing data formats mid-call. SDP, SIP, and Jingle/XMPP belong here π
- Presentation and control: What needs to happen so interactions behave in an unsurprising way π This can include floor control, screen layout, voice-activated image switching, and other functions where part of the system needs cooperation between parties. Centralized Conferencing (XCON) [RFC6501] and Cisco/Tandberg's Telepresence Interoperability Protocol (TIP) were some attempts at specifying this kind of thing, but lots of apps have been built without standardized interfaces to these functions π
- Local system support functions: Stuff that doesn't need uniform specs, because each participant can implement it however they like without affecting the bits on the wire in a way others have to care about π§Ό Examples include echo cancellation (some forms of it), local authentication and authorization mechanisms, OS access control, and the ability to record conversations locally ποΈ
Within each functionality group, it's important to protect both freedom to innovate and the ability to communicate globally π Freedom to innovate is helped by specifying things in terms of interfaces rather than implementations. Any implementation that can communicate according to the interfaces is a valid implementation π Global communication is helped by (1) keeping core specs unencumbered by IPR issues and (2) making formats and protocols specified enough to allow independent implementation π«Ά
Here's the vibe check: the first three groups form a "media transport infrastructure," and the last three form a "media service" β¨ In lots of contexts, it makes sense to use a common spec for the media transport infrastructure, which can be built into browsers and accessed through standard interfaces, and then "let a thousand flowers bloom" in the "media service" layer πΈ To get interoperable services, though, at least the first five of the six groups need to be specified π₯
4. Data Transport π
Data transport is all about sending and receiving data over network interfaces, choosing the network-layer addresses at each end of the communication, and interacting with any intermediate entities that handle the data without modifying it (like Traversal Using Relays around NAT (TURN) relays) π¦
It also covers the necessary functions for congestion control, retransmission, and in-order delivery π¬
WebRTC endpoints MUST implement the transport protocols described in [RFC8835].
5. Data Framing and Securing π
The format for media transport is RTP [RFC3550] πΆ Implementation of the Secure Real-time Transport Protocol (SRTP) [RFC3711] is REQUIRED for all implementations π
The detailed considerations for using RTP and SRTP functions are in [RFC8834] π The security considerations for the WebRTC use case are in [RFC8826], and the resulting security functions are described in [RFC8827] π‘οΈ
Considerations for transferring data that isn't in RTP format are described in [RFC8831], and a supporting protocol for establishing individual data channels is described in [RFC8832] π§ WebRTC endpoints MUST implement these two specifications.
WebRTC endpoints MUST implement [RFC8834], [RFC8826], [RFC8827], and the requirements they include π
6. Data Formats π
The whole point is letting each communications event use the data formats that suit that particular instance best, as long as both sides of the connection support the format π But a minimum standard is super helpful so communication can actually happen π This document specifies a minimum baseline that will be supported by all implementations of this specification, and it leaves further codecs up to the implementer's discretion π§
WebRTC endpoints that support audio and/or video MUST implement the codecs and profiles required in [RFC7874] and [RFC7742] πΆ
7. Connection Management πβ¨
okay so connection management is a whole big topic bestie, the methods, mechanisms, and requirements for setting up, negotiating, and tearing down connections π and the vibe is we want BOTH interoperability AND room to innovate. like, both at once. iconic π¦
The following principles apply:
- The WebRTC media negotiations will be capable of representing the same SDP offer/answer semantics [RFC3264] that are used in SIP, in such a way that it is possible to build a signaling gateway between SIP and the WebRTC media negotiation. π
- It will be possible to gateway between legacy SIP devices that support ICE and appropriate RTP/SDP mechanisms, codecs, and security mechanisms without using a media gateway. A signaling gateway to convert between the signaling on the web side and the SIP signaling may be needed. πΈ
- When an SDP for a new codec is specified, no other standardization should be required for it to be possible to use that codec in the web browsers. Adding new codecs that might have new SDP parameters should not change the APIs between the browser and the JavaScript application. As soon as the browsers support the new codecs, old applications written before the codecs were specified should automatically be able to use the new codecs where appropriate, with no changes to the JavaScript applications. π§ this one is giving "future-proof and no drama" energy, no cap π
The particular choices made for WebRTC, and their implications for the API offered by a browser implementing WebRTC, are described in [RFC8829].
WebRTC browsers MUST implement [RFC8829]. π
WebRTC endpoints MUST implement those functions described in [RFC8829] that relate to the network layer (e.g., BUNDLE [RFC8843], "rtcp-mux" [RFC5761], and Trickle ICE [RFC8838]), but these endpoints do not need to support the API functionality described in [RFC8829]. ngl the split here is so clean π«Ά network layer stuff is a MUST, the API bits are not required for endpoints.
8. Presentation and Control π
the most important part of control is the users' control over the browser's interaction with input/output devices and communications channels. users need some way of figuring out where their audio, video, or texting is being sent π, for what purported reason, and what guarantees are made by the parties that form part of this control channel. this is mostly a local thing between the browser, the operating system, and the user interface, and it's specified in the peer connection API [W3C.WD-webrtc] and the media capture API [W3C.WD-mediacapture-streams]. π
WebRTC browsers MUST implement these two specifications. β¨
9. Local System Support Functions π§
these functions are kind of special because the quality of an implementation seriously affects the user experience, but the exact algorithm doesn't need coordination. sometimes (like echo cancellation, more on that below) the overall system definition might need to say the system has certain characteristics that these facilities are useful for, without requiring them to be built a certain way. π
local functions include echo cancellation, volume control, camera management (focus, zoom, and pan/tilt controls, if available), and more. π·
one would want to see certain parts of the system conform to certain properties, for instance:
- Echo cancellation should be good enough to achieve the suppression of acoustical feedback loops below a perceptually noticeable level. π
- Privacy concerns MUST be satisfied; for instance, if remote control of a camera is offered, the APIs should be available to let the local participant figure out who's controlling the camera and possibly decide to revoke the permission for camera usage. π privacy is NOT a vibe you skip, periodt.
- Automatic Gain Control (AGC), if present, should normalize a speaking voice into a reasonable dB range. ποΈ
the requirements on WebRTC systems for audio processing are found in [RFC7874], and that document has more guidance about echo cancellation and AGC. the APIs for control of local devices are found in [W3C.WD-mediacapture-streams]. π§
WebRTC endpoints MUST implement the processing functions in [RFC7874]. (Together with the requirement in Section 6, this means that WebRTC endpoints MUST implement the whole document.) π
10. IANA Considerations π
This document has no IANA actions. π«§
11. Security Considerations ππ
okay this section is SERIOUS bestie, security of web real-time comms comes in several pieces π
Security of the components: The browsers, and other servers involved. The most target-rich environment here is probably the browser, so the aim should be that bringing these components in introduces no additional vulnerability. π¨
Security of the communication channels: It should be easy for participants to reassure themselves of the security of their communication, by verifying the crypto parameters of the links they participate in, and to get reassurances from the other parties that those parties promise appropriate measures are taken. π
Security of the partners' identities: Verifying that the participants are who they say they are (when positive identification is appropriate), or that their identities cannot be uncovered (when anonymity is a goal of the application). π΅οΈββοΈ
The security analysis, and the requirements derived from that analysis, are contained in [RFC8826]. π
It is also important to read the security sections of [W3C.WD-mediacapture-streams] and [W3C.WD-webrtc]. π
12. References π
12.1. Normative References π
[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>.
[RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, DOI 10.17487/RFC3264, June 2002, <https://www.rfc-editor.org/info/rfc3264>.
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, July 2003, <https://www.rfc-editor.org/info/rfc3550>.
[RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. Norrman, "The Secure Real-time Transport Protocol (SRTP)", RFC 3711, DOI 10.17487/RFC3711, March 2004, <https://www.rfc-editor.org/info/rfc3711>.
[RFC7742] Roach, A.B., "WebRTC Video Processing and Codec Requirements", RFC 7742, DOI 10.17487/RFC7742, March 2016, <https://www.rfc-editor.org/info/rfc7742>.
[RFC7874] Valin, JM. and C. Bran, "WebRTC Audio Codec and Processing Requirements", RFC 7874, DOI 10.17487/RFC7874, May 2016, <https://www.rfc-editor.org/info/rfc7874>.
[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>.
[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>.
[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>.
[RFC8829] Uberti, J., Jennings, C., and E. Rescorla, Ed., "JavaScript Session Establishment Protocol (JSEP)", RFC 8829, DOI 10.17487/RFC8829, January 2021, <https://www.rfc-editor.org/info/rfc8829>.
[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>.
[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>.
[RFC8835] Alvestrand, H., "Transports for WebRTC", RFC 8835, DOI 10.17487/RFC8835, January 2021, <https://www.rfc-editor.org/info/rfc8835>.
[W3C.WD-mediacapture-streams] Jennings, C., Aboba, B., Bruaroey, J-I., and H. BostrΓΆm, "Media Capture and Streams", W3C Candidate Recommendation, <https://www.w3.org/TR/mediacapture-streams/>.
[W3C.WD-webrtc] Jennings, C., BostrΓΆm, H., and J-I. Bruaroey, "WebRTC 1.0: Real-time Communication Between Browsers", W3C Proposed Recommendation, <https://www.w3.org/TR/webrtc/>.
12.2. Informative References β¨
okay so these are the informative refs, bestie π they're not required reading to implement, but they're the background reads that make the whole thing make sense π«Ά
- [HTML5] WHATWG, "HTML - Living Standard", January 2021,
https://html.spec.whatwg.org/. - [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, DOI 10.17487/RFC3261, June 2002,
https://www.rfc-editor.org/info/rfc3261. - [RFC3361] Schulzrinne, H., "Dynamic Host Configuration Protocol (DHCP-for-IPv4) Option for Session Initiation Protocol (SIP) Servers", RFC 3361, DOI 10.17487/RFC3361, August 2002,
https://www.rfc-editor.org/info/rfc3361. - [RFC3935] Alvestrand, H., "A Mission Statement for the IETF", BCP 95, RFC 3935, DOI 10.17487/RFC3935, October 2004,
https://www.rfc-editor.org/info/rfc3935. - [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols", RFC 5245, DOI 10.17487/RFC5245, April 2010,
https://www.rfc-editor.org/info/rfc5245. - [RFC5761] Perkins, C. and M. Westerlund, "Multiplexing RTP Data and Control Packets on a Single Port", RFC 5761, DOI 10.17487/RFC5761, April 2010,
https://www.rfc-editor.org/info/rfc5761. - [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence Protocol (XMPP): Core", RFC 6120, DOI 10.17487/RFC6120, March 2011,
https://www.rfc-editor.org/info/rfc6120. - [RFC6501] Novo, O., Camarillo, G., Morgan, D., and J. Urpalainen, "Conference Information Data Model for Centralized Conferencing (XCON)", RFC 6501, DOI 10.17487/RFC6501, March 2012,
https://www.rfc-editor.org/info/rfc6501. - [RFC7478] Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real-Time Communication Use Cases and Requirements", RFC 7478, DOI 10.17487/RFC7478, March 2015,
https://www.rfc-editor.org/info/rfc7478. - [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. - [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. - [RFC8838] Ivov, E., Uberti, J., and P. Saint-Andre, "Trickle ICE: Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (ICE) Protocol", RFC 8838, DOI 10.17487/RFC8838, January 2021,
https://www.rfc-editor.org/info/rfc8838. - [RFC8843] Holmberg, C., Alvestrand, H., and C. Jennings, "Negotiating Media Multiplexing Using the Session Description Protocol (SDP)", RFC 8843, DOI 10.17487/RFC8843, January 2021,
https://www.rfc-editor.org/info/rfc8843. - [WebRTC-Gateways] Alvestrand, H. and U. Rauschenbach, "WebRTC Gateways", Work in Progress, Internet-Draft, draft-ietf-rtcweb-gateways-02, 21 January 2016,
https://tools.ietf.org/html/draft-ietf-rtcweb-gateways-02. - [XEP-0124] Paterson, I., Smith, D., Saint-Andre, P., Moffitt, J., Stout, L., and W. Tilanus, "Bidirectional-streams Over Synchronous HTTP (BOSH)", XSF XEP 0124, November 2016,
https://xmpp.org/extensions/xep-0124.html. - [XEP-0166] Ludwig, S., Beda, J., Saint-Andre, P., McQueen, R., Egan, S., and J. Hildebrand, "Jingle", XSF XEP 0166, September 2018,
https://xmpp.org/extensions/xep-0166.html.
Acknowledgements πΈ
The list of people who joined the discussions around this document is way too long to write out, or even to count π The people named below made special, easy-to-spot contributions, but that doesn't mean anyone else's work was less important π
Thanks to Cary Bran, Cullen Jennings, Colin Perkins, Magnus Westerlund, and JΓΆrg Ott, who offered technical contributions to various draft versions of this document π
Thanks to Jonathan Rosenberg, Matthew Kaufman, and others at Skype for the ASCII drawings in Section 3 π¦
Thanks to Alissa Cooper, BjΓΆrn HΓΆhrmann, Colin Perkins, Colton Shields, Eric Rescorla, Heath Matlock, Henry Sinnreich, Justin Uberti, Keith Drage, Magnus Westerlund, Olle E. Johansson, Sean Turner, and Simon Leinen for document review πβ¨
Author's Address π
Harald T. Alvestrand
Google
Kungsbron 2
SE-11122 Stockholm
Sweden
Email: harald@alvestrand.no
π¦ where this page comes from
- ietf: rfc8825 2021-01
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms