In computing, Virtual Network Computing (VNC) is a graphical desktop-sharing system that uses the Remote Frame Buffer protocol (RFB) to remotely control another computer. It transmits the keyboard and mouse events from one computer to another, relaying the graphical-screen updates back in the other direction, over a network.
VNC is platform-independent – there are clients and servers for many GUI-based operating systems and for Java. Multiple clients may connect to a VNC server at the same time. Popular uses for this technology include remote technical support and accessing files on one's work computer from one's home computer, or vice versa.
VNC was originally developed at the Olivetti & Oracle Research Lab in Cambridge, United Kingdom. The original VNC source code and many modern derivatives are open source under the GNU General Public License.
There are a number of variants of VNC which offer their own particular functionality; e.g., some optimised for Microsoft Windows, or offering file transfer (not part of VNC proper), etc. Many are compatible (without their added features) with VNC proper in the sense that a viewer of one flavour can connect with a server of another; others are based on VNC code but not compatible with standard VNC.
The VNC server is the program on the machine that shares some screen (and may not be related to a physical display – the server can be "headless"), and allows the client to share control of it.
The VNC client (or viewer) is the program that represents the screen data originating from the server, receives updates from it, and presumably controls it by informing the server of collected local input.
The VNC protocol (RFB protocol) is very simple, based on transmitting one graphic primitive from server to client ("Put a rectangle of pixel data at the specified X,Y position") and event messages from client to server.
In the normal method of operation a viewer connects to a port on the server (default port: 5900). Alternatively (depending on the implementation) a browser can connect to the server (default port: 5800). And a server can connect to a viewer in "listening mode" on port 5500. One advantage of listening mode is that the server site does not have to configure its firewall to allow access on port 5900 (or 5800); the duty is on the viewer, which is useful if the server site has no computer expertise and the viewer user is more knowledgeable.
VNC by default uses TCP port 5900+N, where N is the display number (usually :0 for a physical display). Several implementations also start a basic HTTP server on port 5800+N to provide a VNC viewer as a Java applet, allowing easy connection through any Java-enabled web-browser. Different port assignments can be used as long as both client and server are configured accordingly. A HTML5 VNC client implementation for modern browsers (no plugins required) exists too.
Remote desktop protocol (RDP) is a secure network communications protocol developed by Microsoft. It enables network administrators to remotely diagnose problems that users encounter and gives users remote access to their physical work desktop computers.
Employees who need access to their work computers while working from home or traveling can use RDP. It's also often used by support technicians who need to diagnose and repair a user's system remotely and by administrators providing system maintenance.
RDP can also be used for accessing files, running applications and printing documents remotely. Its use extends beyond PCs to include server and virtual server environments, especially in enterprise settings.
Connection Setup: The user runs an RDP client to connect to a remote desktop or server running RDP server software. The connection typically happens over TCP/IP using port 3389.
Data Transmission: User actions like mouse movements and keystrokes are sent from the client to the server. In response, the server sends back graphical updates, including the remote desktop display and other outputs, to the client.
Multichannel Protocol: RDP uses multiple virtual channels to transfer presentation data, device communication, licensing, and highly encrypted inputs like keyboard and mouse activity.
Encryption and Optimization: All data is encrypted for security, and the protocol employs compression and caching to optimize performance and minimize lag. Occasionally, small delays can occur due to the encryption and transmission process.
The main open source RDP (Remote Desktop Protocol) solution for Linux is xrdp, which acts as an RDP server allowing graphical remote access to Linux machines. On the client side, popular open source applications include Remmina and FreeRDP.
xrdp: Provides a graphical login to remote Linux machines using the RDP protocol. It is widely supported, works with major distributions like Ubuntu, Fedora, and Debian, and allows connections from Windows' built-in RDP client and many others. Security features include TLS encryption, clipboard, audio, microphone, and drive redirection.
FreeRDP: A robust, open source implementation of the RDP client, great for advanced users who want command-line operation or custom scripting.
Remmina: A feature-rich, user-friendly remote desktop client supporting RDP, VNC, and other protocols. It is open source, comes pre-installed with many Linux distributions, and supports features like file transfers and microphone redirection.