# Virtual Network Computing

Virtual Network Computing (VNC) is een manier om het bureaublad van een computer te delen, met behulp van het remote frame buffer protocol, hiermee kan een andere computer op afstand worden beheerd. Het verstuurt de toetsaanslagen en muisbewegingen van een computer naar een andere machine. Het beeld wordt de andere richting opgestuurd, via een computernetwerk.
VNC is platformonafhankelijk: een VNC Viewer (programma om VNC mee te bekijken) op een willekeurig besturingssysteem kan een VNC-server op een ander besturingssysteem benaderen. Er zijn clients en servers voor vrijwel ieder besturingssysteem. Meerdere clients kunnen een server op hetzelfde moment gebruiken. VNC is erg populair om vanaf afstand technische ondersteuning te bieden en om vanaf een willekeurige plek gebruik te maken van de documenten op de computer thuis.
VNC is uitgevonden door AT&T. De originele broncode is open source onder de GNU General Public License, er zijn heden ten dage vele varianten van beschikbaar.

## Geschiedenis

VNC werd ontwikkeld in het Olivetti & Oracle Research Lab, toentertijd eigendom van Olivetti en Oracle Corporation. In 1999 kocht AT&T het lab, en sloot in 2002 het researchgedeelte van het lab.
De naam stamt van een thin-client ATM Netwerkcomputer, de Videotile geheten, wat in essentie een lcd-scherm en een pen als invoermethode had, ondersteund door een snelle ATM-verbinding met het netwerk. VNC is in wezen een software-only versie van deze 'ATM Network Computer'.

## Werking

VNC bestaat uit twee delen, een cliënt en een server. De server draait op de computer waarvan het scherm gedeeld wordt, en de cliënt (of de Viewer) is het programma dat communiceert met de server en de andere computer, waarop de server draait, overneemt.
VNC is een zeer eenvoudig protocol, gebaseerd op één grafische primitief: "Zet een rechthoek van pixelgegevens bij een bepaald x,y positie ". Dat wil zeggen, de server stuurt kleine rechthoekjes van de framebuffer naar de client. Dit gebruikt veel bandbreedte, dus zijn er verschillende manieren om dit te verkleinen. Bijvoorbeeld, er zijn diverse encoding-methodes om de meest efficiënte manier te bepalen om deze rechthoeken over te brengen. Het VNC-protocol zorgt ervoor dat de cliënt en de server overeenkomen welke methode zal worden gebruikt. De eenvoudigste methode, ondersteund door alle clients en servers, is raw encoding waar de gegevens van links naar rechts, en dan van boven naar beneden worden verzonden, wanneer het scherm geladen is zullen alleen gewijzigde pixels worden verzonden. Hierdoor is dit een uitstekende methode, wanneer een stukje van het beeld verandert. (Het bewegen van de muis, het typen van tekst), maar wanneer er veel verandert wordt het moeilijker. (Een uitstekend voorbeeld hiervan is het afspelen van een videoclip op volledig scherm.)
Standaard gebruikt VNC poorten 5900 tot 5906, waar elke poort een X-scherm vertegenwoordigt. (Poorten 6000 tot 6006, voor schermen :0 tot :6). Een Java-viewer is beschikbaar in veel implementaties, zoals RealVNC op poorten 5800 tot 5806, die hetzelfde patroon aanhouden. De poortnummers kunnen gewijzigd worden.

## Veiligheid

VNC is standaard geen veilig protocol. Hoewel wachtwoorden niet als platte tekst worden verzonden (zoals bij telnet), kan een brute force attack succesvol zijn als zowel de encryptiesleutel als het gecodeerde wachtwoord van het netwerk worden afgeluisterd. Daarom wordt gebruik van een wachtwoord van minimaal 8 tekens aanbevolen.
VNC kan via een SSH of VPN-verbinding getunneld worden, wat een extra veiligheidslaag toevoegt. Jammer genoeg is dit niet altijd een werkbare oplossing, SSH-tunnels met Windows-machines openen is zeer moeilijk doordat het standaard geen ondersteuning voor SSH biedt.
UltraVNC ondersteunt het gebruik van een opensource-encryptieplug-in die de gehele VNC-sessie inclusief het wachtwoord en bestandsoverdrachten beveiligt. Authenticatie via NTLM en Active Directory is ook mogelijk.
RealVNC biedt sterke encryptie bij het commerciële pakket.
Workspot brengt AES-patches uit voor VNC.
Hoewel sommige mensen geloven dat VNC gemakkelijk kan worden gebruikt om in een systeem binnen te dringen, moet een gebruiker gewoonlijk uitdrukkelijk toegang krijgen tot de poorten die door VNC worden gebruikt. Een systeem met VNC op een netwerk kan dus slechts van binnen dat netwerk worden benaderd. Als de gebruiker dit anders specificeert, zoals in de configuratie van een router, is dit echter wel mogelijk.

## Projecten die van VNC gebruikmaken

* Apple Remote Desktop versie 2 gebruikt het VNC protocol.
* VNC Scan Enterprise Console zorgt voor het uitrollen van VNC via LAN of WAN
* VNCon, een simpele VNC-scanner

## VNC-versies en implementaties

* RealVNC - de officiële VNC-versie die door het AT&T team te Cambridge wordt beheerd.
* TightVNC - een VNC-versie die beter met bandbreedtebeheer om kan gaan.
* Tiger VNC - Tiger VNC
* UltraVNC - Windows client/server met extra functies zoals bestandsoverdracht, NTLM en Active Directory-gebaseerde beveiliging, tekstchat vensters, sessie-encryptie en compatibel met oudere versies.
* x11vnc
* MetaVNC
* OSXvnc
* Chicken of the VNC (Mac)
* VNCDimension
* PocketPC VNCServer (pocket-pc en Windows CE)
* PalmVNC (PalmOS)
* VNC Viewer (Risc OS)
* ViNCe (RISC OS)
* VNC Viewer (OS/2 PM]
* J2ME VNC (Multiplatform - Java voor mobiele telefoons vereist)
* VncSix
* krdc, de remote desktop client van KDE ondersteunt VNC
* VNCServer (MorphOS)
* MorphVNC (MorphOS)
* TwinVNC - VNC client voor MorphOS 3.1 en AmigaOS 4.0