| rfc8857xml2.original.xml | rfc8857.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!-- This template is for creating an Internet Draft using xml2rfc, | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| which is available here: http://xml.resource.org. --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | docName="draft-ietf-bfcpbis-bfcp-websocket-15" number="8857" ipr="trust200902" o | |||
| <!-- One method to get references from the online citation libraries. | bsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" toc | |||
| There has to be one entity for each item to be referenced. | Depth="4" symRefs="true" sortRefs="true" version="3"> | |||
| An alternate method (rfc include) is described in the references. --> | ||||
| <!-- Normative References --> | ||||
| <!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .2119.xml"> | ||||
| <!-- MUST, SHOULD, MAY --> | ||||
| <!ENTITY RFC7235 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7235.xml"> | ||||
| <!-- HTTP Over TLS --> | ||||
| <!ENTITY RFC3261 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3261.xml"> | ||||
| <!-- SIP --> | ||||
| <!ENTITY RFC3263 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3263.xml"> | ||||
| <!-- Locating SIP Servers --> | ||||
| <!ENTITY RFC3403 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3403.xml"> | ||||
| <!-- NAPTR --> | ||||
| <!ENTITY RFC5234 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5234.xml"> | ||||
| <!-- ABNF --> | ||||
| <!ENTITY RFC6455 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6455.xml"> | ||||
| <!-- WebSocket --> | ||||
| <!ENTITY RFC7525 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7525.xml"> | ||||
| <!-- Recommendations for TLS --> | ||||
| <!ENTITY RFC5018 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5018.xml"> | ||||
| <!-- TCP --> | ||||
| <!ENTITY RFC4582 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4582.xml"> | ||||
| <!-- BFCP --> | ||||
| <!ENTITY RFC4583 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4583.xml"> | ||||
| <!-- BFCP SDP --> | ||||
| <!ENTITY BFCPbis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I- | ||||
| D.ietf-bfcpbis-rfc4582bis.xml"> | ||||
| <!-- rfc4582bis --> | ||||
| <!ENTITY SDPBFCPbis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference | ||||
| .I-D.ietf-bfcpbis-rfc4583bis.xml"> | ||||
| <!-- rfc4583bis --> | ||||
| <!-- Informative References --> | ||||
| <!ENTITY RFC2606 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .2606.xml"> | ||||
| <!-- Reserved Top Level DNS Names --> | ||||
| <!ENTITY RFC7230 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7230.xml"> | ||||
| <!ENTITY RFC7616 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7616.xml"> | ||||
| <!ENTITY RFC7617 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7617.xml"> | ||||
| <!ENTITY RFC7486 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .7486.xml"> | ||||
| <!-- HTTP --> | ||||
| <!ENTITY RFC3327 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3327.xml"> | ||||
| <!-- Path --> | ||||
| <!ENTITY RFC3986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .3986.xml"> | ||||
| <!-- URI --> | ||||
| <!ENTITY RFC4168 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4168.xml"> | ||||
| <!-- SIP STCP --> | ||||
| <!ENTITY RFC5246 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5246.xml"> | ||||
| <!-- TLS --> | ||||
| <!ENTITY RFC5626 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5626.xml"> | ||||
| <!-- Outbound --> | ||||
| <!ENTITY RFC5627 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5627.xml"> | ||||
| <!-- GRUU --> | ||||
| <!ENTITY RFC6223 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6223.xml"> | ||||
| <!-- SUpport for Keep-Alive --> | ||||
| <!ENTITY RFC6265 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .6265.xml"> | ||||
| <!-- HTTP State Management Mechanism --> | ||||
| <!ENTITY RFC4145 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4145.xml"> | ||||
| <!-- TCP-Based Media Transport in SDP --> | ||||
| ]> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <!-- used by XSLT processors --> | ||||
| <!-- For a complete list and description of processing instructions (PIs), | ||||
| please see http://xml.resource.org/authoring/README.html. --> | ||||
| <!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | ||||
| might want to use. | ||||
| (Here they are set differently than their defaults in xml2rfc v1.32) --> | ||||
| <?rfc strict="yes" ?> | ||||
| <!-- give errors regarding ID-nits and DTD validation --> | ||||
| <!-- control the table of contents (ToC) --> | ||||
| <?rfc toc="yes"?> | ||||
| <!-- generate a ToC --> | ||||
| <?rfc tocdepth="4"?> | ||||
| <!-- the number of levels of subsections in ToC. default: 3 --> | ||||
| <!-- control references --> | ||||
| <?rfc symrefs="yes"?> | ||||
| <!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <!-- sort the reference entries alphabetically --> | ||||
| <!-- control vertical white space | ||||
| (using these PIs as follows is recommended by the RFC Editor) --> | ||||
| <?rfc compact="yes" ?> | ||||
| <!-- do not start each main section on a new page --> | ||||
| <?rfc subcompact="no" ?> | ||||
| <!-- keep one blank line between list items --> | ||||
| <!-- end of list of popular I-D processing instructions --> | ||||
| <?rfc tocappendix="yes" ?> | ||||
| <rfc category="std" docName="draft-ietf-bfcpbis-bfcp-websocket-15" | ||||
| ipr="trust200902"> | ||||
| <!-- category values: std, bcp, info, exp, and historic | ||||
| ipr values: full3667, noModification3667, noDerivatives3667 | ||||
| you can add the attributes updates="NNNN" and obsoletes="NNNN" | ||||
| they will automatically be output with "(if approved)" --> | ||||
| <!-- ***** FRONT MATTER ***** --> | ||||
| <!-- xml2rfc v2v3 conversion 2.35.0 --> | ||||
| <front> | <front> | |||
| <!-- The abbreviated title is used in the page header - it is only necessary | ||||
| if the | ||||
| full title is longer than 39 characters --> | ||||
| <title abbrev="WebSocket as a Transport for BFCP">The WebSocket | <title abbrev="WebSocket as a Transport for BFCP">The WebSocket | |||
| Protocol as a Transport for the Binary Floor Control Protocol | Protocol as a Transport for the Binary Floor Control Protocol | |||
| (BFCP)</title> | (BFCP)</title> | |||
| <seriesInfo name="RFC" value="8857"/> | ||||
| <!-- add 'role="editor"' below for the editors if appropriate --> | <author fullname="Victor Pascual" initials="V." surname="Pascual"> | |||
| <organization>Nokia</organization> | ||||
| <!-- Another author who claims to be an editor --> | ||||
| <author fullname="Victor Pascual" initials="V.P." | ||||
| surname="Pascual"> | ||||
| <organization>Genaker</organization> | ||||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street/> | <city>Barcelona</city> | |||
| <code/> | <country>Spain</country> | |||
| <city>Barcelona</city> | </postal> | |||
| <region/> | <email>victor.pascual_avila@nokia.com</email> | |||
| <country>Spain</country> | ||||
| </postal> | ||||
| <email>victor.pascual@genaker.net</email> | ||||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Antón Román" initials="A." surname="Román"> | ||||
| <author fullname="Antón Román" initials="A.R." | ||||
| surname="Román"> | ||||
| <organization>Quobis</organization> | <organization>Quobis</organization> | |||
| <address> | <address> | |||
| <postal> | ||||
| <extaddr>Pol. Ind. A Granxa, Casa de Pedra</extaddr> | ||||
| <city>O Porriño</city> | ||||
| <code>36475</code> | ||||
| <country>Spain</country> | ||||
| </postal> | ||||
| <email>anton.roman@quobis.com</email> | <email>anton.roman@quobis.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Stéphane Cazeaux" initials="S." surname="Cazeaux"> | ||||
| <author fullname="Stéphane Cazeaux" initials="S.C." | <organization>Orange</organization> | |||
| surname="Cazeaux"> | ||||
| <organization>France Telecom Orange</organization> | ||||
| <address> | <address> | |||
| <postal> | ||||
| <street>42 rue des Coutures</street> | ||||
| <city>Caen</city> | ||||
| <code>14000</code> | ||||
| <country>France</country> | ||||
| </postal> | ||||
| <email>stephane.cazeaux@orange.com</email> | <email>stephane.cazeaux@orange.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Gonzalo Salgueiro" initials="G." surname="Salgueiro"> | ||||
| <author fullname="Gonzalo Salgueiro" initials="G.S." | ||||
| surname="Salgueiro"> | ||||
| <organization abbrev="Cisco">Cisco Systems, Inc.</organization> | <organization abbrev="Cisco">Cisco Systems, Inc.</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>7200-12 Kit Creek Road</street> | <street>7200-12 Kit Creek Road</street> | |||
| <city>Research Triangle Park</city> | <city>Research Triangle Park</city> | |||
| <region>NC</region> | <region>NC</region> | |||
| <code>27709</code> | <code>27709</code> | |||
| <country>US</country> | <country>US</country> | |||
| </postal> | </postal> | |||
| <email>gsalguei@cisco.com</email> | <email>gsalguei@cisco.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="R." surname="Ravindranath" fullname="Ram Mohan Ravindranat | ||||
| <author initials="R" surname="Ravindranath" fullname="Ram Mohan Ravindranat | h"> | |||
| h"> | <organization abbrev="Cisco">Cisco Systems, Inc.</organization> | |||
| <organization abbrev="Cisco">Cisco Systems, Inc.</organiz | <address> | |||
| ation> | <postal> | |||
| <address> | <extaddr>Cessna Business Park</extaddr> | |||
| <postal> | <extaddr>Kadabeesanahalli Village, Varthur Hobli,</extaddr> | |||
| <street>Cessna Business Park,</street> | <street>Sarjapur-Marathahalli Outer Ring Road</street> | |||
| <street>Kadabeesanahalli Village, Varthur | <city>Bangalore</city> | |||
| Hobli,</street> | <region>Karnataka</region> | |||
| <street>Sarjapur-Marathahalli Outer Ring | <code>560103</code> | |||
| Road</street> | <country>India</country> | |||
| <city>Bangalore</city> | </postal> | |||
| <region>Karnataka</region> | <email>rmohanr@cisco.com</email> | |||
| <code>560103</code> | </address> | |||
| <country>India</country> | </author> | |||
| </postal> | <date month="May" year="2020"/> | |||
| <email>rmohanr@cisco.com</email> | ||||
| </address> | ||||
| </author> | ||||
| <date year="2017"/> | ||||
| <!-- If the month and year are both specified and are the current ones, xml2 | ||||
| rfc will fill | ||||
| in the current day for you. If only the current year is specified, xml2 | ||||
| rfc will fill | ||||
| in the current day and month for you. If the year is not the current on | ||||
| e, it is | ||||
| necessary to specify at least a month (xml2rfc assumes day="1" if not s | ||||
| pecified for the | ||||
| purpose of calculating the expiry date). With drafts it is normally su | ||||
| fficient to | ||||
| specify just the year. --> | ||||
| <!-- Meta-data Declarations --> | ||||
| <area>IETF</area> | <area>IETF</area> | |||
| <workgroup>BFCPBIS Working Group</workgroup> | <workgroup>BFCPBIS Working Group</workgroup> | |||
| <!-- WG name at the upperleft corner of the doc, | ||||
| IETF is fine for individual submissions. | ||||
| If this element is not present, the default is "Network Working Group", | ||||
| which is used by the RFC Editor as a nod to the history of the IETF. -- | ||||
| > | ||||
| <keyword>BFCP</keyword> | <keyword>BFCP</keyword> | |||
| <keyword>WebSocket</keyword> | <keyword>WebSocket</keyword> | |||
| <!-- Keywords will be incorporated into HTML output | ||||
| files in a meta tag but they have no effect on text or nroff | ||||
| output. If you submit your draft to the RFC Editor, the | ||||
| keywords will be used for the search engine. --> | ||||
| <abstract> | <abstract> | |||
| <t> The WebSocket protocol enables two-way realtime communication | <t> The WebSocket protocol enables two-way real-time communication | |||
| between clients and servers. This document specifies the use of Binary Flo or | between clients and servers. This document specifies the use of Binary Flo or | |||
| Control Protocol(BFCP) as a new WebSocket sub-protocol enabling a reliabl e | Control Protocol (BFCP) as a new WebSocket subprotocol enabling a reliabl e | |||
| transport mechanism between BFCP entities in new scenarios. </t> | transport mechanism between BFCP entities in new scenarios. </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="introduction" title="Introduction"> | <section anchor="introduction" numbered="true" toc="default"> | |||
| <t>The WebSocket(WS) <xref target="RFC6455"/> protocol enables | <name>Introduction</name> | |||
| <t>The WebSocket (WS) protocol <xref target="RFC6455" format="default"/> e | ||||
| nables | ||||
| two-way message exchange between clients and servers on top of a | two-way message exchange between clients and servers on top of a | |||
| persistent TCP connection, optionally secured with Transport Layer Securit y (TLS) | persistent TCP connection, optionally secured with Transport Layer Securit y (TLS) | |||
| <xref target="RFC5246"/>. The initial protocol handshake makes use of | <xref target="RFC8446" format="default"/>. The initial protocol handshake | |||
| Hypertext Transfer Protocol (HTTP) <xref target="RFC7230"/> semantics, all | makes use of | |||
| owing the WebSocket | Hypertext Transfer Protocol (HTTP) <xref target="RFC7230" format="default" | |||
| /> semantics, allowing the WebSocket | ||||
| protocol to reuse existing HTTP infrastructure.</t> | protocol to reuse existing HTTP infrastructure.</t> | |||
| <t>The Binary Floor Control Protocol (BFCP) is a protocol to | <t>The Binary Floor Control Protocol (BFCP) is a protocol to | |||
| coordinate access to shared resources in a conference. It is | coordinate access to shared resources in a conference. It is | |||
| defined in <xref target="I-D.ietf-bfcpbis-rfc4582bis"/> and is | defined in <xref target="RFC8855" format="default"/> and is | |||
| used between floor participants and floor control servers, and | used between floor participants and floor control servers, and | |||
| between floor chairs (i.e., moderators) and floor control | between floor chairs (i.e., moderators) and floor control | |||
| servers.</t> | servers.</t> | |||
| <t>Modern web browsers include a WebSocket client stack | <t>Modern web browsers include a WebSocket client stack | |||
| complying with the WebSocket API <xref target="WS-API"/> as | complying with the WebSocket API <xref target="WS-API" format="default"/> as | |||
| specified by the W3C. It is expected that other client | specified by the W3C. It is expected that other client | |||
| applications (those running in personal computers and devices | applications (those running in personal computers and devices | |||
| such as smartphones) will also make a WebSocket client stack | such as smartphones) will also make a WebSocket client stack | |||
| available. This document extends the applicability of | available. This document extends the applicability of | |||
| <xref target="I-D.ietf-bfcpbis-rfc4582bis"/> and | <xref target="RFC8855" format="default"/> and | |||
| <xref target="I-D.ietf-bfcpbis-rfc4583bis"/> to enable the | <xref target="RFC8856" format="default"/> to enable the | |||
| usage of BFCP in these scenarios.</t> | usage of BFCP in these scenarios.</t> | |||
| <t>The transport over which BFCP entities exchange messages | <t>The transport over which BFCP entities exchange messages | |||
| depends on how the clients obtain information to contact the | depends on how the clients obtain information to contact the | |||
| floor control server (e.g. using an Session Description Protocol (SDP) | floor control server (e.g., using a Session Description Protocol (SDP) | |||
| offer/answer exchange per <xref target="I-D.ietf-bfcpbis-rfc4583bis"/> or | offer/answer exchange per <xref target="RFC8856" format="default"/> or the | |||
| the | procedure described in RFC 5018 <xref target="RFC5018" format="default"/>) | |||
| procedure described in RFC5018 <xref target="RFC5018"/>). | . | |||
| <xref target="I-D.ietf-bfcpbis-rfc4582bis"/> defines two transports | <xref target="RFC8855" format="default"/> defines two transports | |||
| for BFCP: TCP and UDP. This specification defines a new | for BFCP: TCP and UDP. This specification defines a new | |||
| WebSocket sub-protocol (as defined in Section 1.9 in <xref | WebSocket subprotocol (as defined in | |||
| target="RFC6455"/>) for transporting BFCP messages between a | <xref target="RFC6455" section="1.9" sectionFormat="of" format="default"/> | |||
| WebSocket client and server. This sub-protocol provides a reliable and bou | ) for transporting BFCP messages between a | |||
| ndary | WebSocket client and server. This subprotocol provides a reliable and | |||
| preserving transport for BFCP when run on top of TCP. Since WebSocket prov | boundary-preserving transport for BFCP when run on top of TCP. Since WebSo | |||
| ides | cket provides | |||
| a reliable transport, the extensions defined in <xref | a reliable transport, the extensions defined in <xref target="RFC8855" for | |||
| target="I-D.ietf-bfcpbis-rfc4582bis"/> for sending BFCP over unreliabl | mat="default"/> for sending BFCP over unreliable | |||
| e | ||||
| transports are not applicable. </t> | transports are not applicable. </t> | |||
| </section> | </section> | |||
| <section anchor="terminology" numbered="true" toc="default"> | ||||
| <section anchor="terminology" title="Terminology"> | <name>Terminology</name> | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp1 | |||
| "OPTIONAL" in this document are to be interpreted as described | 4>", | |||
| in <xref target="RFC2119"/>.</t> | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED< | |||
| /bcp14>", | ||||
| <section anchor="definitions" title="Definitions"> | "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTION | |||
| <t><list hangIndent="6" style="hanging"> | AL</bcp14>" | |||
| <t hangText="BFCP WebSocket Client:">Any BFCP entity capable | in this document are to be interpreted as described in BCP 14 | |||
| <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, | ||||
| they appear in all capitals, as shown here.</t> | ||||
| <section anchor="definitions" numbered="true" toc="default"> | ||||
| <name>Definitions</name> | ||||
| <dl newline="false" spacing="normal" indent="6"> | ||||
| <dt>BFCP WebSocket Client:</dt> | ||||
| <dd>Any BFCP entity capable | ||||
| of opening outbound connections to WebSocket servers and | of opening outbound connections to WebSocket servers and | |||
| communicating using the WebSocket BFCP sub-protocol as | communicating using the WebSocket BFCP subprotocol as | |||
| defined by this document.</t> | defined by this document.</dd> | |||
| <dt>BFCP WebSocket Server:</dt> | ||||
| <t hangText="BFCP WebSocket Server:">Any BFCP entity capable | <dd>Any BFCP entity capable | |||
| of listening for inbound connections from WebSocket | of listening for inbound connections from WebSocket | |||
| clients and communicating using the WebSocket BFCP | clients and communicating using the WebSocket BFCP | |||
| sub-protocol as defined by this document.</t> | subprotocol as defined by this document.</dd> | |||
| </list></t> | </dl> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="the_websocket_protocol" numbered="true" toc="default"> | ||||
| <section anchor="the_websocket_protocol" | <name>The WebSocket Protocol</name> | |||
| title="The WebSocket Protocol"> | <t>The WebSocket protocol <xref target="RFC6455" format="default"/> is a | |||
| <t>The WebSocket protocol <xref target="RFC6455"/> is a | transport layer on top of TCP (optionally secured with | |||
| transport layer on top of TCP (optionally secured with TLS <xref | TLS <xref target="RFC8446" format="default"/>) in which both client and se | |||
| target="RFC5246"/>) in which both client and server exchange | rver exchange | |||
| message units in both directions. The protocol defines a | message units in both directions. The protocol defines a | |||
| connection handshake, WebSocket sub-protocol and extensions | connection handshake, WebSocket subprotocol and extensions | |||
| negotiation, a frame format for sending application and control | negotiation, a frame format for sending application and control | |||
| data, a masking mechanism, and status codes for indicating | data, a masking mechanism, and status codes for indicating | |||
| disconnection causes.</t> | disconnection causes.</t> | |||
| <t>The WebSocket connection handshake is based on | ||||
| <t>The WebSocket connection handshake is based on HTTP <xref | HTTP <xref target="RFC7230" format="default"/> and utilizes the HTTP GET m | |||
| target="RFC7230"/> and utilizes the HTTP GET method with an | ethod with an | |||
| "Upgrade" request. This is sent by the client and then answered | Upgrade header field. This is sent by the client and then answered | |||
| by the server (if the negotiation succeeded) with an HTTP 101 | by the server (if the negotiation succeeded) with an HTTP 101 | |||
| status code. Once the handshake is completed the connection | status code. Once the handshake is completed, the connection | |||
| upgrades from HTTP to the WebSocket protocol. This handshake | upgrades from HTTP to the WebSocket protocol. This handshake | |||
| procedure is designed to reuse the existing HTTP infrastructure. | procedure is designed to reuse the existing HTTP infrastructure. | |||
| During the connection handshake, client and server agree on the | During the connection handshake, the client and server agree on the | |||
| application protocol to use on top of the WebSocket transport. | application protocol to use on top of the WebSocket transport. | |||
| Such an application protocol (also known as a "WebSocket | Such an application protocol (also known as a "WebSocket | |||
| sub-protocol") defines the format and semantics of the messages | subprotocol") defines the format and semantics of the messages | |||
| exchanged by the endpoints. This could be a custom protocol or a | exchanged by the endpoints. This could be a custom protocol or a | |||
| standardized one (as the WebSocket BFCP sub-protocol defined in | standardized one (as the WebSocket BFCP subprotocol defined in | |||
| this document). Once the HTTP 101 response is processed both | this document). Once the HTTP 101 response is processed, both | |||
| client and server reuse the underlying TCP connection for | the client and server reuse the underlying TCP connection for | |||
| sending WebSocket messages and control frames to each other. | sending WebSocket messages and control frames to each other. | |||
| Unlike plain HTTP, this connection is persistent and can be used | Unlike plain HTTP, this connection is persistent and can be used | |||
| for multiple message exchanges.</t> | for multiple message exchanges.</t> | |||
| <t>The WebSocket protocol defines message units to be used by | <t>The WebSocket protocol defines message units to be used by | |||
| applications for the exchange of data, so it provides a message | applications for the exchange of data, so it provides a message | |||
| boundary-preserving transport layer.</t> | boundary-preserving transport layer.</t> | |||
| </section> | </section> | |||
| <section anchor="the_websocket_bfcp_subprotocol" numbered="true" toc="defaul | ||||
| <section anchor="the_websocket_bfcp_subprotocol" | t"> | |||
| title="The WebSocket BFCP Sub-Protocol"> | <name>The WebSocket BFCP Subprotocol</name> | |||
| <t>The term WebSocket sub-protocol refers to an | <t>The term WebSocket subprotocol refers to an | |||
| application-level protocol layered on top of a WebSocket | application-level protocol layered on top of a WebSocket | |||
| connection. This document specifies the WebSocket BFCP | connection. This document specifies the WebSocket BFCP | |||
| sub-protocol for carrying BFCP messages over a WebSocket | subprotocol for carrying BFCP messages over a WebSocket | |||
| connection.</t> | connection.</t> | |||
| <section anchor="handshake" numbered="true" toc="default"> | ||||
| <section anchor="handshake" title="Handshake"> | <name>Handshake</name> | |||
| <t>The BFCP WebSocket Client and BFCP WebSocket Server | <t>The BFCP WebSocket client and BFCP WebSocket server | |||
| negotiate usage of the WebSocket BFCP sub-protocol during the | negotiate usage of the WebSocket BFCP subprotocol during the | |||
| WebSocket handshake procedure as defined in Section 1.3 of | WebSocket handshake procedure as defined in | |||
| <xref target="RFC6455"/>. The Client MUST include the value | <xref target="RFC6455" section="1.3" sectionFormat="of" format="default" | |||
| "BFCP" in the Sec-WebSocket-Protocol header in its handshake | />. | |||
| request. The 101 reply from the Server MUST contain "BFCP" in | The client <bcp14>MUST</bcp14> include the value | |||
| its corresponding Sec-WebSocket-Protocol header.</t> | "bfcp" in the Sec-WebSocket-Protocol header field in its handshake | |||
| request. The 101 reply from the server <bcp14>MUST</bcp14> contain "bfcp | ||||
| " in | ||||
| its corresponding Sec-WebSocket-Protocol header field.</t> | ||||
| <t>Below is an example of a WebSocket handshake in which the | <t>Below is an example of a WebSocket handshake in which the | |||
| Client requests the WebSocket BFCP sub-protocol support from | client requests the WebSocket BFCP subprotocol support from | |||
| the Server:<figure> | the server:</t> | |||
| <artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| GET / HTTP/1.1 | GET / HTTP/1.1 | |||
| Host: bfcp-ws.example.com | Host: bfcp-ws.example.com | |||
| Upgrade: websocket | Upgrade: websocket | |||
| Connection: Upgrade | Connection: Upgrade | |||
| Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== | Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== | |||
| Origin: http://www.example.com | Origin: http://www.example.com | |||
| Sec-WebSocket-Protocol: BFCP | Sec-WebSocket-Protocol: bfcp | |||
| Sec-WebSocket-Version: 13 | Sec-WebSocket-Version: 13 | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | <t>The handshake response from the server accepting the | |||
| WebSocket BFCP subprotocol would look as follows:</t> | ||||
| <t>The handshake response from the Server accepting the | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| WebSocket BFCP sub-protocol would look as follows:<figure> | ||||
| <artwork><![CDATA[ | ||||
| HTTP/1.1 101 Switching Protocols | HTTP/1.1 101 Switching Protocols | |||
| Upgrade: websocket | Upgrade: websocket | |||
| Connection: Upgrade | Connection: Upgrade | |||
| Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= | Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= | |||
| Sec-WebSocket-Protocol: BFCP | Sec-WebSocket-Protocol: bfcp | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | ||||
| <t>Once the negotiation has been completed, the WebSocket | <t>Once the negotiation has been completed, the WebSocket | |||
| connection is established and can be used for the transport of | connection is established and can be used for the transport of | |||
| BFCP messages. </t> | BFCP messages. </t> | |||
| </section> | </section> | |||
| <section anchor="bfcp_encoding" numbered="true" toc="default"> | ||||
| <section anchor="bfcp_encoding" title="BFCP Encoding"> | <name>BFCP Encoding</name> | |||
| <t>BFCP messages use a TLV (Type-Length-Value) binary | <t>BFCP messages use a TLV (Type-Length-Value) binary | |||
| encoding, therefore BFCP WebSocket Clients and BFCP WebSocket | encoding, therefore BFCP WebSocket clients and BFCP WebSocket | |||
| Servers MUST be transported in unfragmented binary WebSocket | servers <bcp14>MUST</bcp14> be transported in unfragmented binary WebSoc | |||
| frames (FIN:1,opcode:%x2) to exchange BFCP messages. The | ket | |||
| WebSocket frame data MUST be a valid BCFP message, so the | frames (FIN: 1, opcode: %x2) to exchange BFCP messages. The | |||
| length of the payload of the WebSocket frame MUST be lower | WebSocket frame data <bcp14>MUST</bcp14> be a valid BFCP message, so the | |||
| than the maximum size allowed (2^16 +12 bytes) for a BCFP | length of the payload of the WebSocket frame <bcp14>MUST</bcp14> be lowe | |||
| message as described in <xref | r | |||
| target="I-D.ietf-bfcpbis-rfc4582bis"/>. In addition, the | than the maximum size allowed (2<sup>16</sup> +12 bytes) for a BFCP | |||
| encoding rules for reliable protocols defined in <xref | message as described in <xref target="RFC8855" format="default"/>. In ad | |||
| target="I-D.ietf-bfcpbis-rfc4582bis"/> MUST be followed.</t> | dition, the | |||
| encoding rules for reliable protocols defined in <xref target="RFC8855" | ||||
| format="default"/> | ||||
| <bcp14>MUST</bcp14> be followed.</t> | ||||
| <t>While this specification assumes that BFCP encoding is only TLV binar y, | <t>While this specification assumes that BFCP encoding is only TLV binar y, | |||
| future documents may define other mechanisms like JSON serialization. | future documents may define other mechanisms, like JSON serialization. | |||
| if encoding changes a new subprotocol identifier would need to be selec | If encoding changes, a new subprotocol identifier would need to be sele | |||
| ted.</t> | cted.</t> | |||
| <t>Each BFCP message MUST be carried within a single WebSocket | <t>Each BFCP message <bcp14>MUST</bcp14> be carried within a single WebS | |||
| message, and a WebSocket message MUST NOT contain more than one | ocket | |||
| message, and a WebSocket message <bcp14>MUST NOT</bcp14> contain more than | ||||
| one | ||||
| BFCP message.</t> | BFCP message.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="bfcp_websocket_transport" numbered="true" toc="default"> | ||||
| <section anchor="bfcp_websocket_transport" | <name>Transport Reliability</name> | |||
| title="Transport Reliability"> | <t>The WebSocket protocol <xref target="RFC6455" format="default"/> provid | |||
| <t>WebSocket <xref target="RFC6455"/> provides a reliable transport and | es a reliable transport, and | |||
| therefore the BFCP WebSocket sub-protocol defined by this | therefore the BFCP WebSocket subprotocol defined by this | |||
| document also provides reliable BFCP transport. Thus, client and server | document also provides reliable BFCP transport. Thus, client and server | |||
| transactions using WebSocket for transport MUST follow the | transactions using the WebSocket protocol for transport <bcp14>MUST</bcp14 | |||
| procedures for reliable transports as defined in <xref | > follow the | |||
| target="I-D.ietf-bfcpbis-rfc4582bis"/> and <xref | procedures for reliable transports as defined in <xref target="RFC8855" fo | |||
| target="I-D.ietf-bfcpbis-rfc4583bis"/>.</t> | rmat="default"/> | |||
| and <xref target="RFC8856" format="default"/>.</t> | ||||
| <t>BFCP WebSocket clients cannot receive incoming WebSocket | <t>BFCP WebSocket clients cannot receive incoming WebSocket | |||
| connections initiated by any other peer. This means that a BFCP | connections initiated by any other peer. This means that a BFCP | |||
| WebSocket client MUST actively initiate a connection towards a | WebSocket client <bcp14>MUST</bcp14> actively initiate a connection toward | |||
| BFCP WebSocket server. The BFCP server is a will have a globally routable | s a | |||
| address | BFCP WebSocket server. The BFCP server will have a globally routable addre | |||
| and thus does not require ICE as clients always initiate connections to it | ss | |||
| . </t> | and thus does not require ICE, as clients always initiate connections to i | |||
| t. </t> | ||||
| </section> | </section> | |||
| <section anchor="sdp_con" numbered="true" toc="default"> | ||||
| <name>SDP Considerations</name> | ||||
| <section anchor="updates_to_rfc_4583bis" numbered="true" toc="default"> | ||||
| <name>Transport Negotiation</name> | ||||
| <t>Rules to generate an "m=" line for a BFCP stream are described | ||||
| in <xref target="RFC8856" section="4" sectionFormat="comma" format="defaul | ||||
| t"/>.</t> | ||||
| <section anchor="sdp_con" | <t>New values are defined for the SDP "proto" field: 'TCP/WS/BFCP' | |||
| title="SDP Considerations"> | and 'TCP/WSS/BFCP'. </t> | |||
| <ul empty="true" spacing="normal"> | ||||
| <section anchor="updates_to_rfc_4583bis" | <li>'TCP/WS/BFCP' is used when BFCP runs on top of WS, which in | |||
| title="Transport Negotiation"> | turn runs on top of TCP.</li> | |||
| <t>Rules to generate an 'm' line for a BFCP stream are described | <li>'TCP/WSS/BFCP' is used when BFCP runs on top of secure WebSocket ( | |||
| in <xref target="I-D.ietf-bfcpbis-rfc4583bis"/>, Section 3</t> | WSS), which | |||
| in turn runs on top of TLS and TCP.</li> | ||||
| <t>New values are defined for the transport field: TCP/WS/BFCP | </ul> | |||
| and TCP/WSS/BFCP. <list style="empty"> | <t>The "port" field is set following the rules in Section | |||
| <t>TCP/WS/BFCP is used when BFCP runs on top of WS, which in | <xref target="RFC8856" section="4" sectionFormat="bare" format="default"/> | |||
| turn runs on top of TCP.</t> | and Section | |||
| <xref target="RFC8856" section="7.1" sectionFormat="bare" format="default" | ||||
| <t>TCP/WSS/BFCP is used when BFCP runs on top of WSS, which | /> | |||
| in turn runs on top of TLS and TCP.</t> | of <xref target="RFC8856" format="default"/>. Depending on the value | |||
| </list></t> | of the SDP 'setup' attribute defined in <xref target="RFC4145" format="def | |||
| ault"/>, | ||||
| <t>The port field is set following the rules in Section 3 and Section 8.1 | the "port" field contains the port to which the remote endpoint will | |||
| of <xref | direct BFCP messages, or it is irrelevant (i.e., the endpoint will initiat | |||
| target="I-D.ietf-bfcpbis-rfc4583bis"/>. Depending on the value | e the connection | |||
| of the SDP 'setup' attribute defined in <xref target="RFC4145"/>, | towards the remote endpoint) and should be set to a value of '9', | |||
| the port field contains the port to which the remote endpoint will | which is the discard port. The 'connection' attribute and port <bcp14>MUST | |||
| direct BFCP messages or is irrelevant (i.e., the endpoint will initiate th | </bcp14> | |||
| e connection | follow the rules of <xref target="RFC4145" format="default"/>.</t> | |||
| towards the remote endpoint) and should be set to a value of 9, | <t>While this document recommends the use of secure WebSocket (i.e., TC | |||
| which is the discard port. Connection attribute and port MUST | P/WSS) | |||
| follow the rules of <xref target="RFC4145"/></t> | ||||
| <t>While this document recommends the use of secure WebSockets (i.e.TCP/WS | ||||
| S) | ||||
| for security reasons, TCP/WS is also permitted so as to achieve maximum | for security reasons, TCP/WS is also permitted so as to achieve maximum | |||
| compatibility among clients.</t> | compatibility among clients.</t> | |||
| </section> | </section> | |||
| <section anchor="attribute" numbered="true" toc="default"> | ||||
| <section anchor="attribute" | <name>SDP Media Attributes</name> | |||
| title="SDP Media Attributes"> | <t><xref target="RFC8124" format="default"/> defines a new SDP attribute | |||
| <t><xref target="I-D.ietf-bfcpbis-sdp-ws-uri"/> defines a new SDP attribu | to indicate the connection Uniform Resource Identifier (URI) for the WebSo | |||
| te | cket client. | |||
| to indicate the connection Uniform Resource Identifier (URI) for the WebSo | The SDP attribute 'websocket-uri' defined in <xref target="RFC8124" sectio | |||
| cket Client. | n="3" sectionFormat="of" format="default"/> | |||
| The SDP attribute 'websocket-uri' defined in Section 3 of <xref target="I- | <bcp14>MUST</bcp14> be used when BFCP runs on top of WS or WSS. | |||
| D.ietf-bfcpbis-sdp-ws-uri"/> | ||||
| MUST be used when BFCP runs on top of WS or WSS. | ||||
| When the 'websocket-uri' attribute is present in the media section of the SDP, | When the 'websocket-uri' attribute is present in the media section of the SDP, | |||
| the procedures mentioned in Section 4 of <xref target="I-D.ietf-bfcpbis-sd | the procedures mentioned in <xref target="RFC8124" section="4" sectionForm | |||
| p-ws-uri"/> | at="of" format="default"/> | |||
| MUST be followed.</t> | <bcp14>MUST</bcp14> be followed.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>SDP Offer/Answer Procedures</name> | ||||
| <section anchor="general" numbered="true" toc="default"> | ||||
| <name>General</name> | ||||
| </section> | <t> An endpoint (i.e., both the offerer and the answerer) <bcp14>MUST</b | |||
| cp14> create an SDP media description ("m=" line) | ||||
| <section title="SDP Offer/Answer Procedures"> | for each BFCP-over-WebSocket media stream and <bcp14>MUST</bcp14> assign e | |||
| <section anchor="general" title="General"> | ither a 'TCP/WSS/BFCP' or 'TCP/WS/BFCP' value to the | |||
| <t> An endpoint (i.e., both the offerer and the answerer) MUST create an SD | ||||
| P media description ("m=" line) | ||||
| for each BFCP-over-WebSocket media stream and MUST assign either TCP/WSS/B | ||||
| FCP or TCP/WS/BFCP value to the | ||||
| "proto" field of the "m=" line depending on whether the endpoint wishes to use secure WebSocket or WebSocket. | "proto" field of the "m=" line depending on whether the endpoint wishes to use secure WebSocket or WebSocket. | |||
| Furthermore, the server side, which could be either the offerer or answere r, MUST add an "a=websocket-uri" | Furthermore, the server side, which could be either the offerer or answere r, <bcp14>MUST</bcp14> add a 'websocket-uri' | |||
| attribute in the media section depending on whether it wishes to use WebSo cket or secure WebSocket. This new | attribute in the media section depending on whether it wishes to use WebSo cket or secure WebSocket. This new | |||
| attribute MUST follow the syntax defined in <xref target="I-D.ietf-bfcpbis | attribute <bcp14>MUST</bcp14> follow the syntax defined in <xref target="R | |||
| -sdp-ws-uri"/>. Additionally, | FC8124" format="default"/>. Additionally, | |||
| the SDP Offer/Answer procedures defined in Section 4 of <xref target="I- | the SDP offer/answer procedures defined in <xref target="RFC8124" section= | |||
| D.ietf-bfcpbis-sdp-ws-uri"/> MUST | "4" sectionFormat="of" format="default"/> <bcp14>MUST</bcp14> | |||
| be followed for the "m=" line associated with a BFCP-over-WebSocket media stream.</t> | be followed for the "m=" line associated with a BFCP-over-WebSocket media stream.</t> | |||
| </section> | </section> | |||
| <section anchor="example" title="Example Usage of 'websocket-uri' SDP Attri | <section anchor="example" numbered="true" toc="default"> | |||
| bute"> | <name>Example Usage of 'websocket-uri' SDP Attribute</name> | |||
| <t>The following is an example of an "m=" line for a BFCP connection. In | <t>The following is an example of an "m=" line for a BFCP connection. | |||
| this example, the offerer sends the SDP with the "proto" field having a value o | In this example, the offerer sends the SDP with the "proto" field having a | |||
| f TCP/WSS/BFCP * indicating that the offerer wishes to use secure WebSocket as a | value of 'TCP/WSS/BFCP', indicating that the offerer wishes to use secure | |||
| transport for the media stream.</t> | WebSocket as a transport for the media stream, and the "fmt" field having | |||
| <t> | a value of '*' (for details on the "fmt" field, see | |||
| <figure> | <xref target="RFC8856" section="4" sectionFormat="of" format="default"/>).</t> | |||
| <artwork><![CDATA[ | ||||
| <sourcecode type="sdp"><![CDATA[ | ||||
| Offer (browser): | Offer (browser): | |||
| m=application 9 TCP/WSS/BFCP * | m=application 9 TCP/WSS/BFCP * | |||
| a=setup:active | a=setup:active | |||
| a=connection:new | a=connection:new | |||
| a=floorctrl:c-only | a=floorctrl:c-only | |||
| m=audio 55000 RTP/AVP 0 | m=audio 55000 RTP/AVP 0 | |||
| m=video 55002 RTP/AVP 31 | m=video 55002 RTP/AVP 31 | |||
| Answer (server): | Answer (server): | |||
| m=application 50000 TCP/WSS/BFCP * | m=application 50000 TCP/WSS/BFCP * | |||
| skipping to change at line 488 ¶ | skipping to change at line 344 ¶ | |||
| a=websocket-uri:wss://bfcp-ws.example.com?token=3170449312 | a=websocket-uri:wss://bfcp-ws.example.com?token=3170449312 | |||
| a=floorctrl:s-only | a=floorctrl:s-only | |||
| a=confid:4321 | a=confid:4321 | |||
| a=userid:1234 | a=userid:1234 | |||
| a=floorid:1 m-stream:10 | a=floorid:1 m-stream:10 | |||
| a=floorid:2 m-stream:11 | a=floorid:2 m-stream:11 | |||
| m=audio 50002 RTP/AVP 0 | m=audio 50002 RTP/AVP 0 | |||
| a=label:10 | a=label:10 | |||
| m=video 50004 RTP/AVP 31 | m=video 50004 RTP/AVP 31 | |||
| a=label:11 | a=label:11 | |||
| ]]></artwork> | ]]></sourcecode> | |||
| </figure></t> | ||||
| <t> | <t> | |||
| It is possible that an endpoint (e.g., a browser) sends an offerless I NVITE to the server. | It is possible that an endpoint (e.g., a browser) sends an offerless I NVITE to the server. | |||
| In such cases the server will act as SDP offerer. The server MUST assi | In such cases, the server will act as SDP offerer. The server <bcp14>M | |||
| gn the SDP "setup" | UST</bcp14> assign the SDP 'setup' | |||
| attribute with a value of "passive". The server MUST have an "a=websoc | attribute with a value of 'passive'. The server <bcp14>MUST</bcp14> ha | |||
| ket-uri" attribute | ve a 'websocket-uri' attribute | |||
| with a "ws-URI" or "wss-URI" value depending on whether the server wis | with a 'ws-URI' or 'wss-URI' value depending on whether the server wis | |||
| hes to use WebSocket or secure WebSocket. | hes to use WebSocket or secure WebSocket. | |||
| This attribute MUST follow the syntax defined in Section 3 of <xref t | This attribute <bcp14>MUST</bcp14> follow the syntax defined in | |||
| arget="I-D.ietf-bfcpbis-sdp-ws-uri"/> . | <xref target="RFC8124" section="3" sectionFormat="of" format="default" | |||
| For BFCP application, the "proto" value in the "m=" line MUST be TCP/ | />. | |||
| WSS/BFCP if WebSocket is over TLS, | For BFCP application, the "proto" value in the "m=" line <bcp14>MUST< | |||
| else it MUST be TCP/WS/BFCP. | /bcp14> be 'TCP/WSS/BFCP' if WebSocket is over TLS, | |||
| else it <bcp14>MUST</bcp14> be 'TCP/WS/BFCP'. | ||||
| </t> | </t> | |||
| </section> | ||||
| </section> | </section> | |||
| </section> | <section anchor="authentication" numbered="true" toc="default"> | |||
| <name>Authentication</name> | ||||
| <section anchor="authentication" title="Authentication"> | <t><xref target="RFC8855" section="9" sectionFormat="of" format="default"/ | |||
| <t>Section 9 of <xref target="I-D.ietf-bfcpbis-rfc4582bis"/> | > | |||
| states that BFCP clients and floor control servers SHOULD | states that BFCP clients and floor control servers <bcp14>SHOULD</bcp14> | |||
| authenticate each other prior to accepting messages, and | authenticate each other prior to accepting messages, and | |||
| RECOMMENDS that mutual TLS/DTLS authentication be used. However, | RECOMMENDS that mutual TLS/DTLS authentication be used. However, | |||
| browser-based WebSocket clients have no control over the use of | browser-based WebSocket clients have no control over the use of | |||
| TLS in the WebSocket API <xref target="WS-API"/>, so it is | TLS in the WebSocket API <xref target="WS-API" format="default"/>, so it i | |||
| RECOMMENDED that standard Web-based methods for client and | s | |||
| <bcp14>RECOMMENDED</bcp14> that standard web-based methods for client and | ||||
| server authentication are used, as follows.</t> | server authentication are used, as follows.</t> | |||
| <t>When a BFCP WebSocket client connects to a BFCP WebSocket | <t>When a BFCP WebSocket client connects to a BFCP WebSocket | |||
| server, it SHOULD use TCP/WSS as its transport. If the signaling | server, it <bcp14>SHOULD</bcp14> use TCP/WSS as its transport. If the sign aling | |||
| or control protocol traffic used to set up the conference is authenticated | or control protocol traffic used to set up the conference is authenticated | |||
| and confidentiality and integrity protected, Secure WebSocket (WSS) MUST b | and confidentiality and integrity protected, secure WebSocket (WSS) <bcp14 | |||
| e used, | >MUST</bcp14> be used, | |||
| and the floor control server MUST authenticate the client. The WebSocket c | and the floor control server <bcp14>MUST</bcp14> authenticate the client. | |||
| lient | The WebSocket client | |||
| MUST follow the procedures in <xref target="RFC7525"/> while setting up TL | <bcp14>MUST</bcp14> follow the procedures in <xref target="RFC7525" format | |||
| S | ="default"/> while setting up TLS | |||
| connection with the WebSocket server. | connection with the WebSocket server. | |||
| The BFCP client validates the server by means of verifying the server cert ificate. | The BFCP client validates the server by means of verifying the server cert ificate. | |||
| This means the "websocket-uri" value MUST contain a hostname. | This means the 'websocket-uri' value <bcp14>MUST</bcp14> contain a hostnam | |||
| The verification process does not use a=fingerprint.</t> | e. | |||
| The verification process does not use "a=fingerprint".</t> | ||||
| <t>A floor control server that receives a message over TCP/WS | <t>A floor control server that receives a message over TCP/WS | |||
| can mandate the use of TCP/WSS by generating an Error message, | can mandate the use of TCP/WSS by generating an Error message, | |||
| as described in Section 13.8 of <xref | as described in <xref target="RFC8855" section="13.8" sectionFormat="of" f | |||
| target="I-D.ietf-bfcpbis-rfc4582bis"/>, with an Error code with | ormat="default"/>, | |||
| a value of 9 (use TLS).</t> | with an error code with a value of 9 (Use TLS).</t> | |||
| <t>Prior to sending BFCP requests, a BFCP WebSocket client | <t>Prior to sending BFCP requests, a BFCP WebSocket client | |||
| connects to a BFCP WebSocket server and performs the connection | connects to a BFCP WebSocket server and performs the connection | |||
| handshake. As described in <xref | handshake. As described in <xref target="handshake" format="default"/>, th | |||
| target="the_websocket_protocol"/> the handshake procedure | e handshake procedure | |||
| involves a HTTP GET method request from the client and a | involves an HTTP GET method request from the client and a | |||
| response from the server including an HTTP 101 status code.</t> | response from the server including an HTTP 101 status code.</t> | |||
| <t>In order to authorize the WebSocket connection, the BFCP | <t>In order to authorize the WebSocket connection, the BFCP | |||
| WebSocket server SHOULD inspect any cookie <xref target="RFC6265"/> | WebSocket server <bcp14>SHOULD</bcp14> inspect any cookie header fields | |||
| headers present in the HTTP GET request. For many web | <xref target="RFC6265" format="default"/> present in the HTTP GET request. | |||
| applications the value of such a cookie is provided by the web | For many web | |||
| applications, the value of such a cookie is provided by the web | ||||
| server once the user has authenticated themselves to the web | server once the user has authenticated themselves to the web | |||
| server, which could be done by many existing mechanisms. As an | server, which could be done by many existing mechanisms. As an | |||
| alternative method, the BFCP WebSocket Server could request HTTP | alternative method, the BFCP WebSocket server could request HTTP | |||
| authentication by replying to the Client's GET method request | authentication by replying to the client's GET method request | |||
| with a HTTP 401 status code. The WebSocket protocol <xref | with an HTTP 401 status code. The WebSocket protocol <xref target="RFC6455 | |||
| target="RFC6455"/> covers this usage in Section 4.1: | " format="default"/> | |||
| <list style="empty"> | covers this usage in Section <xref target="RFC6455" section="4.1" sectionF | |||
| <t>If the status code received from the server is not 101, | ormat="bare" format="default"/>: | |||
| the WebSocket client stack handles the response per HTTP | </t> | |||
| <xref target="RFC7230"/> procedures, in particular the | <ul empty="true" spacing="normal"> | |||
| client might perform authentication if it receives 401 | <li>If the status code received from the server is not 101, | |||
| status code.</t> | ||||
| <t>If the status code received from the server is not 101, | ||||
| the WebSocket client stack handles the response per HTTP | the WebSocket client stack handles the response per HTTP | |||
| <xref target="RFC7230"/> procedures, in particular the | <xref target="RFC7230" format="default"/> procedures; in particular, t | |||
| client might perform authentication if it receives 401 | he | |||
| client might perform authentication if it receives an 401 | ||||
| status code. The WebSocket clients are vulnerable to the attacks | status code. The WebSocket clients are vulnerable to the attacks | |||
| of basic authentication (mentioned in Section 4 of <xref target="RFC761 | of basic authentication (mentioned in <xref target="RFC7617" section="4 | |||
| 7"/>) and | " sectionFormat="of" format="default"/>) and | |||
| digest authentication (mentioned in Section 5 of <xref target="RFC7616"/ | digest authentication (mentioned in <xref target="RFC7616" section="5" s | |||
| >]). To overcome | ectionFormat="of" format="default"/>). To overcome | |||
| some of these weakness, the WebSocket clients for example can use | some of these weaknesses, WebSocket clients can use the | |||
| HTTP Origin-Bound Authentication (HOBA) mechanism mentioned in <xref tar | HTTP Origin-Bound Authentication (HOBA) mechanism mentioned in | |||
| get="RFC7486"/>.</t> | <xref target="RFC7486" format="default"/>, for example.</li> | |||
| </list></t> | </ul> | |||
| </section> | </section> | |||
| <section anchor="security_considerations" numbered="true" toc="default"> | ||||
| <section anchor="security_considerations" | <name>Security Considerations</name> | |||
| title="Security Considerations"> | <t>Considerations from <xref target="RFC8855" format="default"/>, | |||
| <t>Considerations from <xref | <xref target="RFC8856" format="default"/>, and <xref target="RFC5018" form | |||
| target="I-D.ietf-bfcpbis-rfc4582bis"/>, <xref | at="default"/> apply.</t> | |||
| target="I-D.ietf-bfcpbis-rfc4583bis"/> and RFC5018 <xref | ||||
| target="RFC5018"/> apply.</t> | ||||
| <t>BFCP relies on lower-layer security mechanisms to provide | <t>BFCP relies on lower-layer security mechanisms to provide | |||
| replay and integrity protection and confidentiality. It is | replay and integrity protection and confidentiality. It is | |||
| RECOMMENDED that the BFCP traffic transported over a WebSocket | <bcp14>RECOMMENDED</bcp14> that the BFCP traffic transported over WebSocke | |||
| communication be protected by using a secure WebSocket | t | |||
| connection (using TLS <xref target="RFC5246"/> over TCP). The security | be protected by using a Secure WebSocket | |||
| considerations in <xref target="RFC6455"/> apply for BFCP over WebSocket a | connection (using TLS <xref target="RFC8446" format="default"/> over TCP). | |||
| s well. | The security | |||
| considerations in <xref target="RFC6455" format="default"/> apply for BFCP | ||||
| over WebSocket as well. | ||||
| The security model here is a typical webserver-client model | The security model here is a typical webserver-client model | |||
| where the client validates the server certificate and then connects to the server. | where the client validates the server certificate and then connects to the server. | |||
| <xref target="authentication"/> describes the authentication procedures be tween client | <xref target="authentication" format="default"/> describes the authenticat ion procedures between client | |||
| and server.</t> | and server.</t> | |||
| <t>When using BFCP over WebSocket, the security mechanisms defined in | ||||
| <t>When using BFCP over websockets, the security mechanisms defined in | <xref target="RFC8855" format="default"/> are not used. Instead, the | |||
| <xref target="I-D.ietf-bfcpbis-rfc4582bis"/> are not used. Instead, the | application is required to build and rely on the security mechanisms in <xre | |||
| application is required to build and rely on the security mechanisms in <xre | f target="RFC6455" format="default"/>.</t> | |||
| f target="RFC6455"/>.</t> | <t>The rest of this section analyses the threats described in | |||
| <xref target="RFC8855" section="14" sectionFormat="of" format="default"/> | ||||
| <t>The rest of this section analyses the threats described in Section 14 of | when WebSocket is used as a transport | |||
| <xref target="I-D.ietf-bfcpbis-rfc4582bis"/> when WebSocket is used as tra | ||||
| nsport | ||||
| protocol for BFCP.</t> | protocol for BFCP.</t> | |||
| <t>An attacker attempting to impersonate a floor control server is avoided | <t>An attacker attempting to impersonate a floor control server is | |||
| by having | avoided by having servers accept BFCP messages over WSS | |||
| servers accept BFCP messages over WSS only. As with any other web connecti | only. As with any other web connection, the clients will verify the server | |||
| on, the clients | 's | |||
| will verify the servers certificate. The floor control WebSocket client M | certificate. The BFCP WebSocket client <bcp14>MUST</bcp14> follow the | |||
| UST follow the | procedures in <xref target="RFC7525" format="default"/> (including hostnam | |||
| procedures in <xref target="RFC7525"/> (including hostname verification as | e verification as per | |||
| per | <xref target="RFC7525" section="6.1" sectionFormat="of" format="default"/> | |||
| Section 6.1 in <xref target="RFC7525"/>) while setting up TLS connection w | ) while setting up a TLS connection with floor | |||
| ith floor | control WebSocket server.</t> | |||
| control webSocket server.</t> | ||||
| <t>An attacker attempting to impersonate a floor control client is avoided by | <t>An attacker attempting to impersonate a floor control client is avoided by | |||
| having servers accept BFCP messages over WSS only. As described in | having servers accept BFCP messages over WSS only. As described in | |||
| Section 10.5 of <xref target="RFC6455"/> the floor control server can us | <xref target="RFC6455" section="10.5" sectionFormat="of" format="default | |||
| e | "/> the floor control server can use | |||
| any client authentication mechanism and follow the steps in <xref target | any client authentication mechanism and follow the steps in <xref target | |||
| ="authentication"/> | ="authentication" format="default"/> | |||
| of this document.</t> | of this document.</t> | |||
| <t>Attackers may attempt to modify messages exchanged by a client and a | <t>Attackers may attempt to modify messages exchanged by a client and a | |||
| floor control server. This can be prevented by having WSS between client a nd server.</t> | floor control server. This can be prevented by having WSS between client a nd server.</t> | |||
| <t>An attacker trying to replay the messages is prevented by | ||||
| <t>An attacker trying to replay the messages is prevented by | ||||
| having floor control servers check that messages arriving over a | having floor control servers check that messages arriving over a | |||
| given WSS connection use an authorized user ID. </t> | given WSS connection use an authorized user ID. </t> | |||
| <t>Attackers may eavesdrop on the network to get access | ||||
| <t>Attackers may may eavesdrop on the network to get access | ||||
| to confidential information between the floor control server and a | to confidential information between the floor control server and a | |||
| client (e.g., why a floor request was denied). In order to ensure that | client (e.g., why a floor request was denied). In order to ensure that | |||
| BFCP users are getting the level of protection that they would get using | BFCP users are getting the level of protection that they would get using | |||
| the BFCP protocol directly, applications need to have a way to | BFCP directly, applications need to have a way to | |||
| control the websocket libraries to use encryption algorithms specified in | control the WebSocket libraries to use encryption algorithms specified in | |||
| Section 7 of <xref target="I-D.ietf-bfcpbis-rfc4582bis"/> . Since the | <xref target="RFC8855" section="7" sectionFormat="of" format="default"/>. Sin | |||
| WebSocket API <xref target="WS-API"/> does not have a way to allow an | ce the | |||
| WebSocket API <xref target="WS-API" format="default"/> does not have a way to | ||||
| allow an | ||||
| application to select the encryption algorithm to be used, the protection lev el | application to select the encryption algorithm to be used, the protection lev el | |||
| provided when WSS is used is limited to the underlying TLS algorithm used by | provided when WSS is used is limited to the underlying TLS algorithm used by | |||
| WebSocket library.</t> | the WebSocket library.</t> | |||
| </section> | </section> | |||
| <section anchor="iana_considerations" numbered="true" toc="default"> | ||||
| <section anchor="iana_considerations" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <section title="Registration of the WebSocket BFCP Sub-Protocol"> | <section numbered="true" toc="default"> | |||
| <t>This specification requests IANA to register the WebSocket | <name>Registration of the WebSocket BFCP Subprotocol</name> | |||
| BFCP sub-protocol under the "WebSocket Subprotocol Name" | <t>IANA has registered the WebSocket | |||
| Registry with the following data:</t> | BFCP subprotocol under the "WebSocket Subprotocol Name Registry" | |||
| as follows:</t> | ||||
| <t><list style="hanging"> | <dl newline="false" spacing="normal"> | |||
| <t hangText="Subprotocol Identifier:">BFCP</t> | <dt>Subprotocol Identifier:</dt> | |||
| <dd>bfcp</dd> | ||||
| <t hangText="Subprotocol Common Name:">WebSocket Transport | <dt>Subprotocol Common Name:</dt> | |||
| for BFCP (Binary Floor Control Protocol)</t> | <dd>WebSocket Transport | |||
| for BFCP (Binary Floor Control Protocol)</dd> | ||||
| <t hangText="Subprotocol Definition:">RFC&rfc.number;</t> | <dt>Subprotocol Definition:</dt> | |||
| </list></t> | <dd>RFC 8857</dd> | |||
| <t>[[NOTE TO RFC EDITOR: Please change &rfc.number; to the number as | </dl> | |||
| signed to this specification, and remove this paragraph on publication.]]</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>Registration of the 'TCP/WS/BFCP' and 'TCP/WSS/BFCP' SDP "proto" V | ||||
| alues</name> | ||||
| <t>This document defines two new values for the SDP "proto" | ||||
| subregistry within the "Session Description Protocol (SDP) Parameters" | ||||
| registry. The resulting entries are shown in <xref target="IANA_SDP_prot | ||||
| o" format="default"/>:</t> | ||||
| <section title="Registration of the 'TCP/WS/BFCP' and 'TCP/WSS/BFCP' SDP ' | <table anchor="IANA_SDP_proto"> | |||
| proto' Values"> | <name>Values for the SDP "proto" Field</name> | |||
| <t>This document defines two new values for the SDP 'proto' | <thead> | |||
| field under the Session Description Protocol (SDP) Parameters | <tr> | |||
| registry. The resulting entries are shown in <xref | <th>Value</th> | |||
| target="IANA_SDP_proto"/> below:<figure | <th>Reference</th> | |||
| anchor="IANA_SDP_proto" align="center" | </tr> | |||
| title="Values for the SDP 'proto' Field"> | </thead> | |||
| <artwork><![CDATA[ | <tbody> | |||
| Value Reference | <tr> | |||
| ---------- ----------- | <td>TCP/WS/BFCP</td> | |||
| TCP/WS/BFCP RFCXXXX; | <td>RFC 8857</td> | |||
| TCP/WSS/BFCP RFCXXXX; | </tr> | |||
| ]]></artwork> | <tr> | |||
| </figure></t> | <td>TCP/WSS/BFCP</td> | |||
| <td>RFC 8857</td> | ||||
| <t>[[NOTE TO RFC EDITOR: Please change &rfc.number; to the number assi | </tr> | |||
| gned to this specification, and remove this paragraph on publication.]]</t> | </tbody> | |||
| </section> | </table> | |||
| </section> | ||||
| <section anchor="acknowledgements" title="Acknowledgements"> | ||||
| <t>The authors want to thank Robert Welbourn, from Acme Packet and Sergi | ||||
| o Garcia Murillo | ||||
| who made significant contributions to the first version of | ||||
| this document. This work benefited from the thorough review | ||||
| and constructive comments of Charles Eckel, Christer Holmberg, Paul Kyzi | ||||
| vat, Dan Wing and Alissa Cooper. | ||||
| Thanks to Bert Wijnen, Robert Sparks and Mirja Kuehlewind for their revi | ||||
| ews and comments on this document. | ||||
| </t> | ||||
| <t> Thanks for Spencers Dawkin, Ben Campbell, Kathleen Moriarty, Alexey | ||||
| Melnikov, Jari Arkko and Stephen Farrell for | ||||
| their feedback and comments during IESG reviews. </t> | ||||
| </section> | </section> | |||
| </section> | ||||
| </middle> | </middle> | |||
| <!-- *****BACK MATTER ***** --> | ||||
| <back> | <back> | |||
| <!-- References split into informative and normative --> | <references> | |||
| <name>References</name> | ||||
| <!-- There are 2 ways to insert reference entries from the citation librarie | <references> | |||
| s: | <name>Normative References</name> | |||
| 1. define an ENTITY at the top, and use "ampersand character"RFC2629; here | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| (as shown) | FC.2119.xml"/> | |||
| 2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xm | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| l"?> here | FC.8174.xml"/> | |||
| (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis. | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| xml") | FC.4145.xml"/> | |||
| Both are cited textually in the same manner: by using xref elements. | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| If you use the PI option, xml2rfc will, by default, try to find included fi | FC.6455.xml"/> | |||
| les in the same | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| directory as the including file. You can also define the XML_LIBRARY enviro | FC.5018.xml"/> | |||
| nment variable | ||||
| with a value containing a set of directories to search. These can be eithe | ||||
| r in the local | ||||
| filing system or remote ones accessed by http (http://domain/dir/... ).--> | ||||
| <references title="Normative References"> | ||||
| &RFC2119; | ||||
| &RFC4145; | <reference anchor="RFC8855" target="https://www.rfc-editor.org/info/rfc8855"> | |||
| &RFC6455; | <front> | |||
| <title>The Binary Floor Control Protocol (BFCP)</title> | ||||
| &RFC5018; | <author initials="G." surname="Camarillo" fullname="Gonzalo Camarillo"> | |||
| <organization /> | ||||
| </author> | ||||
| &BFCPbis; | <author initials="K." surname="Drage" fullname="Keith Drage"> | |||
| <organization /> | ||||
| </author> | ||||
| &RFC7525; | <author initials="T." surname="Kristensen" fullname="Tom Kristensen"> | |||
| <organization /> | ||||
| </author> | ||||
| &SDPBFCPbis; | <author initials="J." surname="Ott" fullname="Jörg Ott"> | |||
| <organization /> | ||||
| </author> | ||||
| <?rfc include="reference.I-D.ietf-bfcpbis-sdp-ws-uri"?> | <author initials="C." surname="Eckel" fullname="Charles Eckel"> | |||
| <organization /> | ||||
| </author> | ||||
| </references> | <date month="May" year="2020" /> | |||
| </front> | ||||
| <seriesInfo name="RFC" value="8855" /> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8855"/> | ||||
| <references title="Informative References"> | </reference> | |||
| &RFC7230; | ||||
| &RFC5246; | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer ence.RFC.7525.xml"/> | |||
| &RFC6265; | <reference anchor='RFC8856' target="https://www.rfc-editor.org/info/rfc8856"> | |||
| <front> | ||||
| <title>Session Description Protocol (SDP) Format for Binary Floor Control | ||||
| Protocol (BFCP) Streams</title> | ||||
| &RFC7616; | <author initials='G' surname='Camarillo' fullname='Gonzalo Camarillo'> | |||
| <organization /> | ||||
| </author> | ||||
| &RFC7617; | <author initials='T' surname='Kristensen' fullname='Tom Kristensen'> | |||
| <organization /> | ||||
| </author> | ||||
| &RFC7486; | <author initials='C.' surname='Holmberg' fullname='Christer Holmberg'> | |||
| <organization /> | ||||
| </author> | ||||
| <reference anchor="WS-API"> | <date month='May' year='2020' /> | |||
| <front> | </front> | |||
| <title>The WebSocket API</title> | <seriesInfo name="RFC" value="8856"/> | |||
| <seriesInfo name="DOI" value="10.17487/RFC8856"/> | ||||
| </reference> | ||||
| <author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <organization>W3C</organization> | FC.8124.xml"/> | |||
| </author> | </references> | |||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7230.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8446.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6265.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7616.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7617.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7486.xml"/> | ||||
| <author fullname="Ian Hickson" initials="I." role="editor" | <reference anchor="WS-API" target="https://www.w3.org/TR/2012/CR-websock | |||
| surname="Hickson"> | ets-20120920/"> | |||
| <organization>Google, Inc.</organization> | <front> | |||
| </author> | <title>The WebSocket API</title> | |||
| <author fullname="Ian Hickson" initials="I." role="editor" surname=" | ||||
| Hickson"> | ||||
| </author> | ||||
| </front> | ||||
| <refcontent>W3C Candidate Recommendation, September 2012</refcontent> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="acknowledgements" numbered="false" toc="default"> | ||||
| <name>Acknowledgements</name> | ||||
| <date month="May" year="2012"/> | <t>The authors want to thank <contact fullname="Robert Welbourn"/> from Ac | |||
| </front> | me Packet and | |||
| </reference> | <contact fullname="Sergio Garcia Murillo"/>, | |||
| </references> | who made significant contributions to the first draft version of | |||
| this document. This work benefited from the thorough review | ||||
| and constructive comments of <contact fullname="Charles Eckel"/>, <conta | ||||
| ct fullname="Christer Holmberg"/>, | ||||
| <contact fullname="Paul Kyzivat"/>, <contact fullname="Dan Wing"/>, and | ||||
| <contact fullname="Alissa Cooper"/>. | ||||
| Thanks to <contact fullname="Bert Wijnen"/>, <contact fullname="Robert S | ||||
| parks"/>, and <contact fullname="Mirja Kühlewind"/> | ||||
| for their reviews and comments on this document. | ||||
| </t> | ||||
| <t> Thanks to <contact fullname="Spencer Dawkins"/>, <contact fullname="Be | ||||
| n Campbell"/>, | ||||
| <contact fullname="Kathleen Moriarty"/>, <contact fullname="Alexey Melni | ||||
| kov"/>, <contact fullname="Jari Arkko"/>, | ||||
| and <contact fullname="Stephen Farrell"/> for | ||||
| their feedback and comments during IESG reviews. </t> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 124 change blocks. | ||||
| 623 lines changed or deleted | 503 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||