Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
RFB (protocol)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{short description|Computer network protocol}} {{multiple issues| {{lead too short|date=March 2014}} {{more citations needed|date=March 2014}} }} '''RFB''' ("'''remote framebuffer'''") is an open simple [[Communications protocol|protocol]] for [[Remote desktop software|remote access]] to [[graphical user interface]]s. Because it works at the [[framebuffer]] level it is applicable to all [[windowing system]]s and applications, including [[Microsoft Windows]], [[macOS]], the [[X Window System]] and [[Wayland (protocol)|Wayland]]. RFB is the protocol used in [[Virtual Network Computing]] (VNC) and its derivatives. ==Description== By default, a viewer/client uses TCP port 5900 to connect to a server (or 5800 for browser access), but can also be set to use any other port. Alternatively, a server can connect to a viewer in "listening mode" (by default on port 5500). One advantage of listening mode is that the server site does not have to configure its firewall/NAT to allow access on the specified ports; the burden is on the viewer, which is useful if the server site has no computer expertise, while the viewer user would be expected to be more knowledgeable. Although RFB started as a relatively simple protocol, it has been enhanced with additional features (such as file transfers) and more sophisticated [[Data compression|compression]] and security techniques as it has developed. To maintain seamless cross-compatibility between the many different VNC client and server implementations, the clients and servers negotiate a connection using the best RFB version, and the most appropriate compression and security options that they can both support. ==History== RFB was originally developed at [[Olivetti Research Laboratory]] (ORL) as a remote display technology to be used by a simple [[thin client]] with [[Asynchronous Transfer Mode]] connectivity called a Videotile. In order to keep the device as simple as possible, RFB was developed and used in preference to any of the existing remote display technologies. RFB found a second and more enduring use when VNC was developed. VNC was released as [[Open-source software|open source]] software and the RFB specification published on the web. Since then RFB has been a free protocol which anybody can use. When ORL was closed in 2002 some of the key people behind VNC and RFB formed [[RealVNC]], Ltd., in order to continue development of VNC and to maintain the RFB protocol. The current RFB protocol is published on the [https://help.realvnc.com/hc/en-us/articles/360002720337-RFB-protocol-specification RealVNC website]. == Versions == Published versions of the RFB protocol are as follows: {| class="wikitable" |- ! Version ! Published ! Date ! Specification |- | RFB 3.3 | ORL | January 1998 | [https://web.archive.org/web/20140921005313/http://grox.net/doc/apps/vnc/rfbproto.pdf The Remote Framebuffer Protocol 3.3] |- | RFB 3.7 | RealVNC Ltd | August 2003 | [https://web.archive.org/web/20040325204925/http://www.realvnc.com/docs/rfbproto.pdf The Remote Framebuffer Protocol 3.7] |- | RFB 3.8 (current) | RealVNC Ltd | June 2007 | [https://web.archive.org/web/20070703000012/http://www.realvnc.com/docs/rfbproto.pdf The Remote Framebuffer Protocol 3.8] |- | IETF RFC (3.8) | RealVNC Ltd | March 2011 | {{IETF RFC|6143}} |} Developers are free to add additional encoding and security types but they must book unique identification numbers for these with the maintainers of the protocol so that the numbers do not clash. Clashing type numbers would cause confusion when handshaking a connection and break cross-compatibility between implementations. The list of encoding and security types was maintained by RealVNC Ltd and is separate from the protocol specification so that new types can be added without requiring the specification to be reissued. Since December 2012, the list went to [[IANA]].<ref>{{cite web |title=Remote Framebuffer (RFB) |url=https://www.iana.org/assignments/rfb/rfb.xml |website=www.iana.org}}</ref> A community version of the RFB protocol specification which aims to document all existing extensions is hosted by the [[TigerVNC]] project.<ref name="rfbproto"/> == Encoding types == Multiple encodings are part of the negotiation. Some of the encodings are pseudo-encodings used to advertise the ability to handle a certain extension.{{cn|date=September 2024}} Encodings include:<ref name="rfbproto">{{cite web |title=The RFB Protocol, Community Edition |url=https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst |website=GitHub |date=12 May 2025 |language=en}}</ref> * Raw * Zlib * Tight * XZ * [[H.264]] * Tight PNG Of the publicly-defined picture-based encodings, the most efficient ones are the Tight encoding types. Two types of encodings are defined by TightVNC: Tight Encoding (a mixture of rectangle, palette and gradient filling with zlib and JPEG, plus a Zlib-plus-filter "basic compression")<ref>{{cite web |title=VNC Tight Encoder - Comparison Results |url=https://www.tightvnc.com/archive/compare.html |website=www.tightvnc.com}}</ref> and Tight PNG Encoding (Tight encoding with basic compression replaced with [[Portable Network Graphics|PNG]] data). [[H.264]] has been researched for encoding RFB data, but the preliminary results (using Open H.264 format) were described as lackluster by a [[TurboVNC]] developer. It does become more efficient with fewer I-frames (keyframes), but CPU utilization remains a problem.<ref>{{cite web |last1=Commander |first1=DR |title=A Study on the Usefulness of H.264 Encoding in a VNC Environment |url=https://turbovnc.org/About/H264 |website=turbovnc.org}}</ref> ==Limitations== In terms of transferring clipboard data, "there is currently no way to transfer text outside the Latin-1 character set".<ref name="RFB-charset">{{cite book | title = The RFB Protocol - Version 3.8 | last = Richardson | first = Tristan | year = 2010 | chapter = Sections 6.4.6, 6.5.4 }}</ref> A common pseudo-encoding extension solves the problem by using [[UTF-8]] in an extended format.<ref name="rfbproto"/>{{rp|at=Β§ 7.7.27}} The VNC protocol is pixel based. Although this leads to great flexibility (i.e. any type of desktop can be displayed), it is often less efficient than solutions that have a better understanding of the underlying graphic layout like [[X11]] or desktop such as [[Remote Desktop Protocol|RDP]]. Those protocols send graphic primitives or high level commands in a simpler form (e.g. open window), whereas RFB just sends the raw pixel data, albeit compressed. The VNC protocol expresses mouse button state in a single byte, as binary up/down. This limits the number of mouse buttons to eight (effectively 7 given convention of button 0 meaning "disabled"). Many modern mice enumerate 9 or more buttons, leading to forward/back buttons having no effect over RFB. A "GII" extension solves this problem.<ref name="rfbproto"/>{{rp|at=Β§ 7.7.11}} The original protocol specification does not define any way to transfer sound data at all, with the sole exception that the server may signal a [[Bell character|bell]] (audible beep, notification sound) should be played by the client.<ref name="rfbproto"/>{{rp|at=Β§ 7.6.3}} There is, however, a "QEMU Audio" extension defined in the RFB protocol's community version.<ref name="rfbproto"/> ==See also== * [[Comparison of remote desktop software]] * [[NX technology]] and [[Xpra]] for efficient remote X Window System connections * [[SPICE (protocol)|SPICE]] * [[Remote Desktop Protocol]] (RDP) ==References== {{Reflist}} ==External links== * [https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst The RFB Protocol - Community Version] * [https://tools.ietf.org/html/rfc6143 RFC 6143: The Remote Framebuffer Protocol (describes Version 3.8, 2011)] * [https://web.archive.org/web/20160410055332/http://www.realvnc.com/docs/rfbproto.pdf The RFB Protocol - Version 3.8 (2010-11-26)] * [https://web.archive.org/web/20040325204925/http://www.realvnc.com/docs/rfbproto.pdf The RFB Protocol - Version 3.7 (2003-08-12)] * [http://grox.net/doc/apps/vnc/rfbproto.pdf The RFB Protocol - Version 3.3 (1998-01)] [[Category:Virtual Network Computing]] [[Category:Application layer protocols]] [[Category:Remote desktop protocols]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite book
(
edit
)
Template:Cite web
(
edit
)
Template:Cn
(
edit
)
Template:IETF RFC
(
edit
)
Template:Multiple issues
(
edit
)
Template:Reflist
(
edit
)
Template:Rp
(
edit
)
Template:Short description
(
edit
)