Virtual Network Computing

Virtual Network Computing, förkortat som VNC, är en programvara för skärmdelning. Den använder RFB-protokollet för att fjärrstyra en annan dator genom att överföra tangentbords- och muskommandon från en klient till en server, och skärmbilden tillbaka till klienten, över ett nätverk.

VNC är plattformsoberoende. En VNC-klient på ett operativsystem kan koppla upp sig till en VNC-server
som körs på ett annat operativsystem. Det finns klienter och servrar för många GUI-baserade operativsystem samt för Java. Flera klienter kan koppla upp sig till en VNC-server på samma gång. Populära användningsområden för denna teknologi inkluderar fjärrstyrning av användares skrivbord vid datorsupport samt åtkomst av arbetsdator från hemmet eller vice versa.

Den ursprungliga källkoden för VNC och många moderna släktingar är fri programvara utgiven under upphovsrättslicensen GNU General Public License.

Det finns ett antal varianter av VNC som erbjuder sin egen speciella funktionalitet. Till exempel kan de vara optimerade för Windows eller ha möjlighet till filöverföringar (vilket inte är en del av riktiga VNC). Många är kompatibla (förutom specialfunktioner) med riktig VNC på så sätt att klienten från en variant kan koppla upp sig till en annan; andra är baserade på VNC-kod men är inkompatibla med standard-VNC.

VNC är ett registrerat varumärke av RealVNC Limited i EU, USA och i andra jurisdiktioner.

Historia
VNC utvecklades ursprungligen vid Olivetti & Oracle Research Lab (ORL), vilket vid denna tidpunkt ägdes av Olivetti och Oracle. 1999 köptes labbet av AT&T som stängde det 2002.

Utvecklare som arbetade med VNC vid AT&T var:

 Tristan Richardson (uppfinnare)
 Andy Harter (projektledare)
 Quentin Stafford-Fraser
 James Weatherall

Efter stängningen av ORL 2002 bildade flera medlemmar av utvecklingsteamet (inklusive Richardson, Harter, Weatherall och Hopper) företaget RealVNC för att kunna fortsätta arbeta på öppen källkodsprojekt och kommersiell VNC mjukvara under detta namn.

Flera versioner har utvecklats ur den ursprungliga fria källkoden. Sådana här avknoppningar har inte lett till kompatibilitetsproblem då RFB-protokollet är utformat för att vara utbyggbart. VNC-klienter och -servrar informerar varandra om sina kapabiliteter genom handskakning vid uppkopplingen för att kunna använda de mest optimala inställningar som supportas i båda ändar.

Etymologi
Namnet "Virtual Network Computer/Computing" kommer från ORL:s arbete med en tunn klient kallad Videotile som också använde RFB-protokollet. Detta var i huvudsak en LCD-skärm med en penna för inmatning och snabb asynkron uppkoppling till nätet. Vid den här tidpunkten användes termen "nätverksdator" synonymt med "tunn klient". VNC är väsentligen en virtuell version (en mjukvaruversion) av denna nätverksdator.

Funktionalitet
Ett VNC-system består av en klient, en server och ett kommunikationsprotokoll.

 VNC-servern är programmet på maskinen som delar sin skärm. Servern tillåter passivt att klienten tar kontroll över den.
 VNC-klienten är programmet som tittar på, kontrollerar och interagerar med servern. Klienten kontrollerar servern.
 VNC-protokollet (RFB) är väldigt enkelt. Det är baserat på en grafisk primitiv från server till klient ("Lägg en rektangel pixeldata vid den specificerade positionen") samt händelsemeddelanden från klient till server.

Vanligen kopplar klienten upp sig mot en port (standard är 5900) på servern. Alternativt kan en webbläsare koppla upp sig mot servern (standard är då 5800). En server kan också koppla upp sig mot klienten i "lyssnarläge" på port 5500. En fördel med lyssnarläge är att servern inte är beroende av att kunna koppla upp sig mot port 5900 eller 5800; ansvaret ligger på klienten. Detta är användbart om den eller de som sitter vid servern har begränsad datorkompetens; klientanvändaren behöver dock större kompetens.

Servern skickar små rektanglar av skärmbilden till klienten. I sin enklaste form kan protokollet förbruka mycket bandbredd, så olika metoder har utvecklas för att reducera förbrukningen. Till exempel finns det olika kodningar (metoder för att bestämma de mest effektiva sättet att överföra rektanglarna). RFB-protokollet låter klienten och servern förhandla om vilken kodning som skall användas. Den enklaste kodningen, som stöds av alla klienter och servrar, är råformatskodning där pixeldata skickas vänster-till-höger, uppifrån och ned. När hela den ursprungliga skärmbilden en gång har överförts överförs bara de rektanglar som förändras. Denna kodning fungerar mycket bra om bara en liten del av skärmbilden förändras från en bild till nästa (som en muspekare som rör sig över skrivbordet, eller text som skrivs vid markören), men bandbreddsbehovet blir stort om många pixlar förändras på en gång, som när man bläddrar i en lång text eller tittar på fullskärmsvideo. 

Standardbeteendet för VNC är att använda TCP portarna 5900 till 5903, där varje port motsvarar en separat skärm (:0 to :3). En Java-klient finns tillgänglig i många implementationer som till exempel RealVNC på portarna 5800 till 5806, detta tillåter klienter att interagera med, bland annat, en webbrowser med Java-stöd. Andra portar kan användas så länge som både klient och server konfigureras för detta.

Det går bra att använda VNC över Internet om användaren har en bredbandsuppkoppling i båda ändar. Det kan dock krävas brandväggskonfiguration för att tillåta port forwarding för att få VNC att fungera. En del använder VPN för att göra användning över Internet lättare. Ett annat alternativ kan vara att göra uppkopplingen genom en SSH-tunnel.

Maskinen som VNC-servern körs på behöver inte ha en fysisk bildskärm, mus eller tangentbord. Xvnc är Unix VNC-server, vilken är baserad på en standard-X-server. Xvnc kan anses ha två servrar i en: för applikationer är det en X-server, för fjärranvändare är det en VNC-server. Applikationer kan visa sig själva på Xvnc som om det var en vanlig X-skärm, men de kommer att visas på uppkopplade VNC-klienters skärm i stället för på en fysisk skärm.

Även om det finns en fysisk skärm så behöver inte skärmen som visas av VNC-servern nödvändigtvis vara densamma som den som ses av en användare på den fysiska servern. På Unixdatorer som har support för flera simultana X11-sessioner kan man specificera att VNC-servern ska visa en redan existerande X11-session, eller skapa en ny. Det är också möjligt att köra multipla VNC-sessioner från samma dator. På Microsoft Windows visas alltid den existerande användarsessionen.

Det är vanligt att VNC används som ett plattformsoberoende fjärrskrivbordssystem. Till exempel kan en Mac OS-dator koppla upp sig mot ett existerande GNOME-skrivbord på ett Linuxsystem, eller till Windows, och vice versa.

Säkerhet
Som standard är VNC inte ett säkert protokoll. Lösenorden skickas inte i klartext som med telnet men bruteforce-cracking kan lyckas om både krypteringsnyckeln och det kodade lösenordet sniffas från nätverket. Därför rekommenderas att man använder ett lösenord som är minst åtta tecken långt. Några versioner av VNC har en åttateckensbegränsning i sin lösenordshantering. Om ett lösenord skickas som har mer än åtta tecken tas de överflödiga tecknen bort och denna sträng jämförs med det lagrade lösenordet.

VNC kan tunnlas över en SSH- eller VPN-tunnel vilket lägger till ett extra säkerhetslager med starkare kryptering.

UltraVNC har support för ett insticksprogram som krypterar hela VNC-sessionen, inklusive lösenordsautenticering och datatransport. Den tillåter också att autenticering kan göras baserad på NTLM- och Active Directory-användarkonton. Användning av den här typen av krypteringsplugins gör den dock inkompatibel med andra VNC-program. RealVNC erbjuder kraftfull kryptering i sin kommersiella distribution. Workspot har släppt AES-krypteringspatchar för VNC.

Begränsningar
VNC har inte support för Unicode, vilket framför allt påverkar kopiering av text mellan klient- och värddatorn, som måste hålla sig till 8-bitarskodning. RFB-protokollet är pixelbaserat. Detta leder till stor flexibilitet (alla typer av skrivbord kan visas) men kan ibland vara mindre effektivt. Protokoll som X11 och RDP har en bättre förståelse för den underliggande grafiska layouten. De skickar grafiska primitiver eller högnivåkommandon i en enklare form (till exempel: öppna ett fönster).

Se även
 Rdesktop
 Tunna klienter

Referenser

Externa länkar
 AT&T VNC - Ursprungliga AT&T-Cambridge VNC webbplats
 RealVNC - RealVNC 
 x11vnc - VNC programvara för att komma åt den fysiska X konsolen

Fjärradministrationsprogram
Fria fönsterhanterare