Virtual Network Computing
Virtual Network Computing (VNC) je grafický program, který umožňuje vzdálené připojení ke grafickému uživatelskému rozhraní pomocí počítačové sítě. VNC pracuje jako klient-server, kde server vytváří grafickou plochu v operační paměti počítače a komunikuje přes síť s klientem, který plochu zobrazuje uživateli (většinou na jiném počítači). Pro komunikaci se používá protokol RFB (anglicky remote framebuffer), jehož cílem je minimalizovat objem přenášených dat mezi klientem a serverem a umožnit tak komunikaci i přes pomalejší datové linky (např. přes Internet).
Historie
VNC byl původně vyvinut v Olivetti Research Laboratory (ORL) v Cambridge v Anglii. Původní zdrojový kód VNC a mnoho moderních odnoží je publikováno jako open source pod licencí GPL. V roce 1999 byla firma ORL koupena společností AT&T a v roce 2002 byl ukončen výzkum.
Na VNC pracovali vývojáři: Tristan Richardson, Andy Harter, Quentin Stafford-Fraser, James Weatherall, Ken Wood, Andy Hopper, Charles McLachlan, Paul Webster a další.
Po uzavření ORL byl v roce 2002 zformován několika členy vývojového týmu projekt RealVNC, jehož cílem bylo pokračovat ve vývoji VNC nejen jako open source, ale též komerčního software.
Charakteristika
Kompletní VNC systém se skládá z klienta, serveru a komunikačního protokolu.
- VNC server je program, který sdílí svoji obrazovku.
- VNC klient (viewer) je program, který zobrazuje sdílenou plochu a ovládá server.
- VNC protokol (RFB) je velmi jednoduchý, založený na primitivní grafické komunikaci mezi serverem a klientem ("Umísti obdélník pixelových dat na specifické X,Y pozici) a zasílání zpráv o událostech (event message) z klienta na server.
Server zasílá malé obdélníky framebuferu klientovi. V nejjednodušší formě VNC protokol může potřebovat velkou propustnost, proto je potřeba používat různé metody pro snížení množství přenášených dat. Například existují různé druhy kódování (metody určující nejvýhodnější způsob přenosu obdélníků). VNC protokol umožňuje klientovi a serveru dohodnout, které kódování bude použito. Nejjednodušší kódování, podporované všemi klienty a servery, je kódování RAW, kdy jsou pixelová data zasílána zleva doprava po jednotlivých řádcích, a poté co byla odeslána celá obrazovka, pouze odesílá obdélníky, kde došlo ke změně. Toto kódování funguje velice dobře, pokud se mění pouze malá část obrazovky (například, když se pohybuje kurzor myši po obrazovce, nebo je psán text), ale pokud se mění hodně pixelů najednou (například skrolování, zobrazování full-screen videa), nároky na propustnost rapidně rostou.
VNC standardně používá TCP porty 5900 až 5906. Každý port koresponduje s jednotlivými obrazovkami (:0 až :06). V mnoha implementacích (např. RealVNC) je dostupný Java prohlížeč na portech 5800 až 5806, umožňující klientům ovládání mimo jiné i přes webový prohlížeč, podporující Javu. Ostatgní porty mohou být použity, pokud jsou klient i server patřičně zkonfigurovány.
Použití VNC přes internet funguje dobře, pokud je na obou koncích širokopásmové připojení. Nicméně někdy je třeba pokročilá konfigurace NAT, firewallu a routeru, aby spojení bezproblému prošlo zkrz. Je možno použít VPN nebo Remobo aplikace pro usnadnění použití přes internet.
Na některých strojích server nemusí mít nutně fyzický displej. Xvnc je Unixový VNC server, založený na standardním X serveru. Xvnc může být považován jako dva servery v jednom. Pro aplikace se jedná o X server a pro vzdálené VNC uživatele je VNC serverem. Aplikace se tak mohou zobrazovat na Xvnc serveru stejně, jako na standardním X serveru, ale zobrazí se na jakémkoliv připojeném VNC vieweru namísto na fyzické obrazovce.
Navíc obraz zprostředkovaný VNC serverem nemusí být nutně stejný, jako obraz viděný uživatelem na serveru. Na Unixových/Linuxových počítačích existuje podpora několika současně běžících X11 sezení. VNC může fungovat jako jedno z existujících X11 sezení, nebo si nastartovat své vlastní. Je také možné spustit několik VNC sezení na jednom počítači. Na Microsoft Windows počítačích je možné zobrazovat pouze sezení přihlášeného uživatele. (VNC klient a uživatel sedící fyzicky u počítače vidí stejnou obrazovku).
VNC se většinou používá jako multiplatformní systém vzdálené plochy. Například Apple Remote desktop pro Mac OS X(a novější Back to My Mac ve verzi Leopard - Mac OS X 10.5) spolupracuje s VNC a připojí se k ploše linuxového uživatele přes x11vnc, nebo oddělenému sezení přes TightVNC. Z Linuxu se TightVNC viewer připojí k OS X sezení nabízeném Apple Remote Desktopem, pokud je aktivována volba VNC, nebo na VNC server běžící na Microsoft Windows. Aqua COnnect Terminal Server používá VNC pro dosažení multiplatformního spojení přinášející vzdálenou plochu MacOS na PC, Mac, smartphony a iPhone.
Bezpečnost
Komunikace mezi klientem a serverem standardně zabezpečena není. Samotná autentizace je poměrně bezpečná, protože se pro ověření hesla používá systém challenge-response (náhodná výzva a kontrolovaná odpověď), takže heslo neputuje po síti v nezašifrované podobě (je omezen útok Replay attack). Po autentizaci už však síťový provoz mezi klientem a serverem zašifrován není, a tak může být veškerá komunikace odposlouchávána (a rekonstruován nejen obsah obrazovky, ale zachyceny i všechny pohyby myši a stisky kláves, tj. útok Man in the middle). Proto se doporučuje VNC relaci navázat skrz zabezpečený tunel (SSH, VPN) nebo použít doplňující moduly, které umožňují automaticky veškerou komunikaci zašifrovat.
V tomto článku byl použit překlad textu z článku VNC na anglické Wikipedii.