# Virtual Network Computing

Virtual Network Computing, kurz VNC, ist eine Software, die den Bildschirminhalt eines entfernten Rechners (Server) auf einem lokalen Rechner (Client) anzeigt und im Gegenzug Tastatur- und Mausbewegungen des lokalen Rechners an den entfernten Rechner sendet. Damit kann man auf einem entfernten Rechner arbeiten, als säße man direkt davor. VNC implementiert das Remote Framebuffer Protocol und ist damit, im Gegensatz zu anderer Fernwartungssoftware, plattformunabhängig benutzbar.

## Geschichtliche Hintergründe

VNC wurde im Olivetti Research Laboratory (ORL) entwickelt. Das Forschungslabor wurde im Jahr 1986 mit Andy Hopper als Direktor gegründet, im Jahr 1999 von AT&T übernommen und im Jahr 2002 geschlossen. Die ursprünglichen Entwickler von VNC gründeten im Jahr 2002 das Unternehmen RealVNC. Der Projektleiter von VNC war Andy Harter, und Tristan Richardson schuf die Architektur und die Protokolle von VNC sowie Referenzimplementierungen für Unix und Java.
Seit dem Jahr 1998 ist VNC als Open Source veröffentlicht. Das ursprüngliche VNC steht unter der GNU General Public License. Dessen grundlegendes Remote Framebuffer Protocol hat RealVNC in einem Request for Comments vom März 2011 veröffentlicht.
Es gibt viele Forks von VNC, die verschiedene Verbesserungen und Zusatzfunktionen enthalten, aber weitgehend kompatibel zur Originalversion sind und als „kleinsten gemeinsamen Nenner“ dessen Netzwerkprotokoll unterstützen. Es existieren Implementierungen für alle gängigen Betriebssysteme, sodass VNC als plattformunabhängig gilt.

## Funktionsweise

VNC arbeitet nach dem Client-Server-Modell. Das Server-Programm bietet Bildschirmausgaben und Eingabemöglichkeiten mittels Maus und Tastatur an, die das Client-Programm darstellen und nutzen kann.
Der Begriff Virtual bei VNC kommt daher, dass er als ein virtueller Ersatz für Thin Clients angesehen werden kann.

## Datenschutz

Mit VNC ist es beispielsweise möglich, dass der Administrator eines Netzwerkes die Kontrolle über den Computer eines Mitarbeiters übernimmt, um Software zu installieren oder Fehler zu beheben. Allerdings kann VNC auch als Spionagesoftware missbraucht werden. Viele Implementierungen ermöglichen einen für den Benutzer des überwachten Computers unauffälligen Einsatz. In gleichem Maße kann die Benutzung von VNC-Software aber auch abgesichert sein: So zeigt die Windows-Version des RealVNC-Servers in der Taskleiste mit einem weißen Icon an, dass der Server läuft. Dieses verfärbt sich schwarz, sobald sich ein Viewer mit dem Server verbindet, so dass der Benutzer des Computers, auf dem der Server läuft, dies bemerken kann. Viele Implementierungen bieten zudem die Möglichkeit, bei Verbindungsaufbau Passwörter abzufragen (nicht im RFP-Standard vorgesehen) oder in einer auf dem zu überwachenden Computer angezeigten Dialogbox eine Einverständniserklärung vom Benutzer des zu überwachenden Computers zum Verbindungsaufbau einzuholen. Alternativ ist auch ein Nur-„Lese“-Modus möglich, bei dem also lokale Eingaben beim Viewer keine Auswirkungen auf den entfernten VNC-Server-Rechner haben.
Da das Remote-Framebuffer-Protokoll unverschlüsselt ist, werden prinzipbedingt auch alle Tastatureingaben des Viewers unverschlüsselt über das Netzwerk versendet. Bei Eingabe sensibler Daten (z. B. Passwörtern) besteht so wie bei jedem anderen Netzwerkprotokoll die Gefahr der Ausspähung der Daten. Zum Absichern der Verbindung gibt es daher die Möglichkeit der SSL-Verschlüsselung der Transportschicht ähnlich HTTPS sowie das speziell für VNC optimierte Verschlüsselungsprotokoll VeNCrypt.

## Bekannte Implementierungen

Die bekanntesten VNC-Programme, die sowohl über Client als auch Server verfügen, sind:
* RealVNC ist die „offizielle“ Weiterentwicklung des ursprünglichen VNC, in seiner unverschlüsselten Variante zur privaten Nutzung Freeware, und in seiner Vollversion beispielsweise für Single Sign-on geeignet.
* macOS bietet serienmäßig Screen Sharing durch VNC, seit OS X 10.5 den enthaltenen Server für Apple Remote Desktop durch einen zugehörigen VNC-Client ergänzte.
* TightVNC: Ein VNC-Server und -Client unter der GPL, verfügbar für Windows und Linux; außerdem existiert eine plattformunabhängige Implementierung des Clients für Java, die nicht installiert werden muss. TightVNC ist eine umfangreiche Weiterentwicklung des VNC-Programmes, besonders hervorzuheben sind die Kompressionsmöglichkeiten, um VNC auch bei schmalbandigen Verbindungen problemlos zu ermöglichen („Tight“-Encoding). Das Programm kann nur Passwörter verschlüsselt übertragen, die Datenübertragung an sich erfolgt unverschlüsselt.
* UltraVNC: Ein VNC-Server und -Client für Windows unter der GPL. Er bietet Zusatzfunktionen wie Dateitransfer, Chat und Mirror Video Driver für sehr kurze Übertragungsintervalle für Breitbandverbindungen (wie DSL oder lokales Netzwerk), außerdem das „Tight“-Encoding von TightVNC. Bei UltraVNC ist die Authentifizierung nicht nur über die reguläre Passwort-Verschlüsselung möglich, sondern auch über die Microsoft-Logon-I- und -II-Authentifizierungsverfahren, die im NT-Domänenkonzept und Microsoft-Verzeichnisdienst ihre Anwendung finden. Für die Verschlüsselung des Datenstroms zwischen Server und Client von UltraVNC werden externe DSM-Plugin-Module verwendet. Die DSM-Plugin-Module ermöglichen eine RC4- bzw. AES-Verschlüsselung bis zu einer Schlüssellänge von 128 Bit.
* x11vnc (GPL): Leitet X-Window real displays (physischer Bildschirm, Tastatur und Maus) an beliebigen VNC-Client weiter. Mit eingebauter SSL-Verschlüsselung und -Authentifizierung, UNIX-Benutzer- und -Passwort-Unterstützung sowie Dateitransfer mit TightVNC und UltraVNC. Außerdem erweitert für Webcams, TV-Tuner und eingebettete Linux-Systeme. Zusätzlicher Enhanced TightVNC Viewer für Unix und Windows.
* LibVNCServer/LibVNCClient: Plattformübergreifende einsetzbare C-Bibliotheken unter der GPL, die es ermöglichen, VNC-Server- oder -Client-Funktionalität in eigene Anwendungen zu integrieren.
* Contiki VNC-Server als CTK-Thema (Contiki Toolkit)
* Krdc und Krfb: Client und Server für KDE.
* Vino: Client und Server für Gnome.
* CSpace: Fernsteuerung für Windowsrechner per VNC, kostenlos, Open Source, die Authentifizierung und Kommunikation erfolgen verschlüsselt, es werden bei der Installation RSA-Schlüsselpaare mit 2048 Bit erzeugt und der öffentliche Schlüssel auf einem zentralen Server abgelegt.
* DirectVNC ist ein VNC-Client für Framebuffer-Ausgaben. Er verwendet DirectFB und benötigt daher keinen X-Server. Damit eignet er sich für sehr leistungsarme Unix-Systeme.
* Chicken of The VNC: VNC-Client für Mac OS X (GPL)
* JollysFastVNC: VNC-Client für Mac OS X
* VineServer (ehemals OSXvnc): VNC-Server für Mac OS X (GPL)
* OS9vnc: VNC-Server für Mac OS 9 und Mac OS 8
* PalmVNC: VNC-Client für Palm-Geräte
* Mocha VNC Lite: Ermöglicht VNC als Anwendung für iPod touch und iPhone. Kompatibel zu PC und Macintosh.
* Portable VNC: VNC Viewer für die PlayStation Portable
* mVNC: VNC-Server für Symbian S60 Handys
* VNsea: VNC-Viewer für das Apple iPhone
* TouchpadPro: VNC-Viewer für das Apple iPhone basierend auf VNsea
* TigerVNC: Abspaltung von TightVNC
* TurboVNC: Abspaltung von TightVNC (GPL)
* EfonVNC (GPL): VNC-Server für Windows CE .NET (4.x), Windows CE 5.0 und Windows Embedded CE 6.0.
* PocketVNC: VNC-Server und HTML5-Viewer für Windows Mobile, Windows CE 4.x, CE 5.0 und CE 6.0.
* Android-VNC-Viewer: VNC-Viewer, der das bekannte Open-Source-Programm TightVNC klont.
* VNC Viewer for Android von RealVNC: VNC-Viewer ist eine kostenlose App, welche Remotezugriff und Kontrolle beliebiger Rechner von Android-Geräten aus erlaubt.
* VMLite VNC Server: Erlaubt das Remote-Anzeigen und -Steuern von Android-Smartphones oder -Tablets z. B. von einem PC aus.

## Xvnc

Xvnc ist eine Software, die auf einem normalen X-Server basiert. Anstelle eines echten, physischen Desktop-Computers nutzt Xvnc dabei einen virtuellen Desktop. X-Applikationen werden dabei wie auf einem normalen X-Server dargestellt, können aber nur über einen VNC-Viewer angezeigt und bedient werden.
Xvnc stellt dabei zwei unterschiedliche Server zur Verfügung: zum einen den X-Server, in dem der voreingestellte Window-Manager (z. B. Gnome oder KDE) gestartet wird, zum anderen einen VNC-Server, auf den mittels Client zugegriffen werden kann. Aufgrund der Technik der Unix X-Server ist es so möglich, mehrere Xvnc-Instanzen auf einem Rechner zu starten.
Der VNC-Server wird normalerweise nicht direkt über Xvnc gestartet, sondern über das mitgelieferte Perl-Script vncserver.
Xvnc ist fester Bestandteil von fast allen auf UNIX-Systemen laufenden VNC-Servern.

## VNC als Mehrbildschirmbetrieb

Dank seiner enormen Popularität wird das VNC-Protokoll vermehrt dazu genutzt, Multi-Head-fähige Grafikkarten zu simulieren. Dazu läuft ein Computer mit einer speziellen „Multimonitorsoftware“, die üblicherweise einen virtuellen VNC-Server zur Verfügung stellt. Von dem zweiten Rechner, dessen Monitor man als Erweiterung zum Ersten benutzen möchte, reicht dann ein gewöhnlicher VNC-Client, um sich mit dem virtuellen VNC-Server zu verbinden. Dargestellt wird dann nicht der Monitorinhalt des anderen, sondern der entsprechend simulierte virtuelle Erweiterungsteil.
Bekannte proprietäre „Multimonitor-Anwendungen“ sind ScreenRecycler für Apple Macintosh (Shareware) sowie ZoneScreen (Freeware) als auch MaxiVista für Microsoft Windows.