rfc-8857

The WebSocket Protocol as a Transport for the Binary Floor Control Protocol (BFCP)

V. Pascual, A. Román, S. Cazeaux, G. Salgueiro, R. Ravindranath
date2021-01 streamIETF areaart wgbfcpbis statusPROPOSED STANDARD pages12 canonicalhttps://www.rfc-editor.org/rfc/rfc8857 doi10.17487/RFC8857
The WebSocket protocol enables two-way real-time communication between clients and servers. This document specifies the use of Binary Floor Control Protocol (BFCP) as a new WebSocket subprotocol enabling a reliable transport mechanism between BFCP entities in new scenarios.

Extracted elements (27)

design-rationale §4.2

If BFCP encoding changes from binary TLV (e.g., to JSON serialization), a new subprotocol identifier would need to be selected, keeping the 'bfcp' identifier tied specifically to the current binary encoding.

websocket, realtime

design-rationale §1

WebSocket was chosen as a BFCP transport to enable usage in modern web browsers and client applications (smartphones, PCs) that expose WebSocket client stacks per the W3C WebSocket API, extending BFCP applicability beyond traditional TCP/UDP deployments.

websocket, realtime, webrtc

design-rationale §6.1

While secure WebSocket (TCP/WSS) is recommended for security, TCP/WS is also permitted to achieve maximum compatibility among clients. A floor control server can enforce TLS upgrade via an error response if needed.

websocket, tls, security

interoperability-note §8

Browser-based WebSocket clients have no control over TLS algorithm selection via the WebSocket API, so standard web-based authentication methods are recommended instead of mutual TLS/DTLS as defined in RFC 8855.

websocket, tls, realtime

interoperability-note §1

Since WebSocket provides a reliable transport, the BFCP extensions defined in RFC 8855 for sending BFCP over unreliable transports are not applicable when using the WebSocket BFCP subprotocol.

websocket, realtime

interoperability-note §7.1

The server MUST assign the SDP 'setup' attribute with a value of 'passive' when acting as SDP offerer in response to an offerless INVITE. The 'proto' field MUST be 'TCP/WSS/BFCP' if WebSocket is over TLS, else 'TCP/WS/BFCP'.

websocket, realtime, sip

normative-requirement §5 MUST

A BFCP WebSocket client MUST actively initiate a connection towards a BFCP WebSocket server; clients cannot receive incoming WebSocket connections initiated by any other peer.

websocket, realtime

normative-requirement §7.1 MUST

An endpoint MUST create an SDP media description ('m=' line) for each BFCP-over-WebSocket media stream and MUST assign either 'TCP/WSS/BFCP' or 'TCP/WS/BFCP' to the 'proto' field. The server side MUST add a 'websocket-uri' attribute in the media section.

websocket, realtime, sip

normative-requirement §4.2 MUST

BFCP messages MUST be transported in unfragmented binary WebSocket frames (FIN: 1, opcode: %x2). The WebSocket frame data MUST be a valid BFCP message, and the payload length MUST be lower than 2^16 + 12 bytes.

websocket, realtime, rtp

normative-requirement §5 MUST

Client and server transactions using WebSocket for transport MUST follow the procedures for reliable transports as defined in RFC 8855 and RFC 8856, since WebSocket provides a reliable transport.

websocket, realtime

normative-requirement §4.2 MUST

Each BFCP message MUST be carried within a single WebSocket message, and a WebSocket message MUST NOT contain more than one BFCP message.

websocket, realtime

normative-requirement §8 MUST

If the signaling or control protocol traffic used to set up the conference is authenticated and confidentiality and integrity protected, secure WebSocket (WSS) MUST be used, and the floor control server MUST authenticate the client.

websocket, security, realtime

normative-requirement §9 RECOMMENDED

It is RECOMMENDED that BFCP traffic transported over WebSocket be protected by using a Secure WebSocket connection (WSS using TLS over TCP). The BFCP WebSocket client MUST follow RFC 7525 procedures when setting up TLS.

websocket, tls, security

normative-requirement §4.1 MUST

The BFCP WebSocket client MUST include the value 'bfcp' in the Sec-WebSocket-Protocol header field in its handshake request, and the 101 reply from the server MUST contain 'bfcp' in its corresponding Sec-WebSocket-Protocol header field.

websocket, realtime, webrtc

normative-requirement §6.2 MUST

The SDP attribute 'websocket-uri' defined in RFC 8124 MUST be used when BFCP runs on top of WS or WSS, and when present in the media section, the procedures in Section 4 of RFC 8124 MUST be followed.

websocket, realtime, sip

normative-requirement §8 MUST

The WebSocket client MUST follow the procedures in RFC 7525 (including hostname verification per Section 6.1) while setting up a TLS connection with the WebSocket server. The 'websocket-uri' value MUST contain a hostname.

websocket, tls, security

protocol-element §6.2

The SDP 'websocket-uri' attribute (from RFC 8124) is used in the media section to convey the WebSocket connection URI (ws-URI or wss-URI) for the BFCP WebSocket server.

websocket, realtime, sip

protocol-element §4

The WebSocket BFCP subprotocol identifier is 'bfcp', negotiated via the Sec-WebSocket-Protocol header during the WebSocket opening handshake. It enables transport of binary BFCP messages over a WebSocket connection.

websocket, realtime

protocol-element §6.1

Two new SDP 'proto' field values are defined: 'TCP/WS/BFCP' for BFCP over plain WebSocket over TCP, and 'TCP/WSS/BFCP' for BFCP over secure WebSocket (TLS over TCP).

websocket, realtime, sip

registry §10.1

IANA registered the WebSocket BFCP subprotocol under the 'WebSocket Subprotocol Name Registry' with subprotocol identifier 'bfcp' and common name 'WebSocket Transport for BFCP (Binary Floor Control Protocol)', referencing RFC 8857.

websocket, registry, realtime

registry §10.2

Two new values 'TCP/WS/BFCP' and 'TCP/WSS/BFCP' are registered in the SDP 'proto' subregistry within the 'Session Description Protocol (SDP) Parameters' registry, both referencing RFC 8857.

registry, realtime, sip

security-consideration §8

A floor control server that receives a message over TCP/WS can mandate the use of TCP/WSS by generating an Error message with error code 9 (Use TLS) as described in Section 13.8 of RFC 8855.

security, websocket, tls

security-consideration §9

An attacker attempting to impersonate a floor control server or client is mitigated by accepting BFCP messages over WSS only, with clients verifying the server certificate per RFC 7525 including hostname verification.

security, websocket, tls

security-consideration §9

Replay attacks are prevented by having floor control servers check that messages arriving over a given WSS connection use an authorized user ID. Message modification is prevented by using WSS between client and server.

security, websocket

security-consideration §9

The level of encryption protection when WSS is used is limited to the underlying TLS algorithm used by the WebSocket library, since the WebSocket API provides no way for applications to select specific encryption algorithms.

security, websocket, tls

security-consideration §9

When using BFCP over WebSocket, the security mechanisms defined in RFC 8855 (such as TLS/DTLS mutual authentication) are not used; instead the application must rely on WebSocket security mechanisms from RFC 6455. WSS with server certificate validation replaces the RFC 8855 security model.

security, websocket, tls

wire-format §4.2

BFCP messages use TLV (Type-Length-Value) binary encoding and MUST be carried in unfragmented binary WebSocket frames with FIN bit set to 1 and opcode %x2 (binary frame). Maximum payload size is 2^16 + 12 bytes per RFC 8855.

websocket, realtime