RFB (zkr. z anglického remote framebuffer ) je síťový protokol klient-server pro vzdálený přístup ke grafické ploše počítače. Používá se v systémech vzdáleného přístupu VNC [1] . Protože funguje na úrovni framebufferu , lze jej použít pro grafické okenní systémy, jako je X Window System , Windows , Quartz Compositor .
Ve výchozím nastavení používá RFB rozsah portů TCP 5900 až 5906. Každý port představuje odpovídající obrazovku X serveru (porty 5900 až 5906 jsou spojeny s obrazovkami :0 až :6). Klienti Java, kteří jsou k dispozici v mnoha implementacích, které pro tento účel používají vestavěný webový server, jako je RealVNC , komunikují s obrazovkami stejným způsobem, ale na portech v rozsahu od 5800 do 5806. Mnoho počítačů se systémem Windows může používat pouze jeden port kvůli nedostatek funkcí pro více uživatelů, které jsou součástí systémů UNIX. Pro systémy Windows je výchozí obrazovka :0, což odpovídá portu 5900.
Existuje možnost zpětného připojení ze serveru ke klientovi. V tomto případě je klient uveden do režimu naslouchání a připojení je iniciováno serverem na klientově TCP portu 5500. Jednou z výhod tohoto režimu je, že uživatel nemusí konfigurovat Firewall / NAT , aby umožnil přístup k určeným portům.
Ačkoli RFB začínal jako relativně jednoduchý protokol, postupem času byl rozšířen o nové funkce, jako je přenos souborů, sofistikovanější metody zabezpečení a komprese. Klient a server v okamžiku připojení porovnají verze protokolů v nich implementované a dohodnou se na kompatibilní sadě možností komprese a zabezpečení.
RFB byl vyvinut v Olivetti Research Laboratory (ORL) jako technologie vzdáleného zobrazení pro použití s tenkým klientem Videotile připojeným přes připojení ATM. Vývoj našeho protokolu nám umožnil zjednodušit klienta.
Implementace VNC byla vydána jako software s otevřeným zdrojovým kódem a specifikace RFB byla zveřejněna online. Od té doby se RFB stal populárnějším protokolem.
Po uzavření ORL v roce 2002 někteří klíčoví vývojáři VNC a RFB vytvořili RealVNC Ltd., aby pokračovali ve vývoji VNC a podpoře protokolu RFB. Aktuální specifikace protokolu RFB je zveřejněna na webu RealVNC.
Publikované verze protokolu RFB:
Verze |
Vydavatel |
datum |
Specifikace |
RFB 3.3 |
ORL |
ledna 1998 |
Protokol Remote Framebuffer 3.3 |
RFB 3.7 |
Společnost RealVNC Ltd |
srpna 2003 |
Protokol Remote Framebuffer 3.7 |
RFB 3.8 (aktuální) |
Společnost RealVNC Ltd |
června 2007 |
Protokol Remote Framebuffer 3.8 |
Vývojáři mohou přidat další typy kódování a zabezpečení, ale musí se dohodnout na jedinečných identifikačních číslech pro jejich přidání se správci protokolu, aby se čísla neopakovala. Stejná čísla mohou způsobit zmatek, když dojde k připojení, a narušit vzájemnou kompatibilitu mezi implementacemi. Seznam bezpečnostních kódování a typů spravuje společnost RealVNC Ltd odděleně od specifikace protokolu, takže lze přidávat nové typy bez nutnosti opětovného vydání specifikace.
0x00000000 – surový 0x00000001 – Kopírovat obdélníky (CopyRect) 0x00000002 – rostoucí obdélník 0x00000004 - CoRRE (kompaktní rostoucí obdélník) 0x00000005 - Hextile 0x00000006 - komprese Zlib 0x00000007 – Pevná verze klienta 0x00000008 - ZlibHex 0x00000009 – verze klienta Ultra 0x00000010 - Komprese ZRLE 0x00000011 - ZYWRLE komprese (ZLib YUV Wavelet Run Length Encoding) 0xFFFF0001 - Příznak ukládání do mezipaměti (CacheEnable) |
0xFFFF0006 - Bitový příznak XOR (XOREnable) 0xFFFF8000 - ServerState (UltraVNC) 0xFFFF8001 - EnableKeepAlive (UltraVNC) 0xFFFF8002 - Přenos souborů (FTProtocolVersion - UltraVNC) 0xFFFFFF00 - 0xFFFFFF09 - CompressLevel (Tight) 0xFFFFFF10 - XCursor 0xFFFFFF11 - RichCursor 0xFFFFFF18 - PointerPos 0xFFFFFF20 - LastRect 0xFFFFFF21 - Nová velikost FBS 0xFFFFFFE0 - 0xFFFFFFFE9 - Úroveň kvality (Tight) |
Pokud jde o přenos dat ze schránky , RFB je schopen přenášet text pouze v kódování Latin-1. [2]
Protokol VNC je založen na přenosu rastrů (pole pixelů). I když to vede k velké flexibilitě (tj. lze zobrazit jakýkoli typ pracovní plochy), tato metoda je často méně účinná než řešení blíže grafickým systémům typu X11 nebo RDP . V takových protokolech je možné posílat složitější grafická primitiva a příkazy vyšší úrovně v jednodušší podobě (např. vytvoření okna), zatímco RFB jednoduše posílá nezpracovaná pixelová data, i když komprimovaná.