Protocol de la distanță Framebuffer

RFB (Remote Framebuffer Protocol)
Familie: Familia de protocol Internet
Zona de operare: Transferul de date,
conținutul ecranului, introducerea utilizatorului
Port: 5900 / TCP (vezi text )
RFB în stiva de protocol TCP / IP :
cerere RFB
transport TCP
Internet IP ( IPv4 , IPv6 )
Acces la retea Ethernet
Autobuz cu token
Token
ring
FDDI ...

Remote Framebuffer Protocol ( RFB ) este un protocol de rețea pentru accesarea grafice cu utilizatorul interfețe (GUI) de alte calculatoare . Este folosit de VNC pentru a transmite conținutul ecranului și intrarea utilizatorului .

Principiu de bază

Un server RFB oferă așa-numitul „ecran”. De obicei, un „ desktop ” sau un singur program al unui mediu de lucru grafic care rulează pe un computer la distanță sau aplicațiile asociate este afișat pe acesta . Clientul RFB afișează de obicei acest desktop pe computerul stației de lucru a utilizatorului, primește intrarea utilizatorului ( tastatură , mișcări și clicuri ale mouse-ului etc.) și le transmite către serverul RFB, care controlează mediul de lucru de acolo.

Deoarece funcționează la nivelul memoriei grafice orientate pe bitmap ( framebuffer în engleză ), poate fi utilizat pe orice sistem de ferestre, cum ar fi Windows , Mac OS sau X11 . Conținutul ecranului este transmis ca hărți de biți, prin care, de obicei, numai modificările respective - în codificarea adecvată, vezi mai jos - sunt transmise clientului. Există adâncimi de culoare de 8, 16 și 32 de biți pe pixel , clientul RFB solicită adâncimea de culoare și codificarea dorite de la server, iar serverul trebuie să fie ghidat de dorințele clientului, dacă acesta acceptă codificarea dorită. Acest design permite cerințelor clientului să fie păstrate simple și, astfel, susține utilizarea clienților subțiri .

Conexiunile RFB sunt fără stat , astfel încât întreruperile conexiunii sau schimbarea clientului RFB sunt posibile fără probleme, fără ca sesiunea asociată să fie pierdută. Scopul final al RFB și VNC este de a sprijini munca la distanță pe computere într-un mediu de lucru uniform.

Numere de port și desktop

În versiunea originală Unix a VNC, fiecare server VNC este propriul său server X și reprezintă exact un desktop X ( Xvnc ). Primul număr de server X gratuit este utilizat de VNC în mod implicit. Dacă un server X local rulează deja pe aparat, care :0ocupă astfel desktopul X , VNC primește desktopul :1. Numărul de port TCP ocupat de VNC este de obicei 5901 în Unix. Unele servere VNC oferă portul 5800 sau un applet Java cu care desktopul poate fi vizualizat și controlat cu un browser web . 5900 + desktopnummer5800 + desktopnummer

De obicei, nu există niciun server X local care rulează sub Windows și Mac OS X , deci VNC ocupă desktopul și, prin urmare, numărul portului TCP 5900. Acest port este, de asemenea, utilizat de programul Unix x11vnc , care oferă serverul X local existent ca desktop VNC. :0:0

Detalii protocol

Strângere de mână și ID-uri de versiune

De îndată ce conexiunea TCP este stabilită, serverul trimite numărul de versiune RFB pe care îl acceptă clientului, la care clientul răspunde cu numărul său de versiune de protocol. Versiunea protocolului are structura versiunea majoră .versiunea minoră . Se presupune că versiunile de protocol cu ​​aceeași versiune majoră sunt compatibile între ele. Cel mai mare număr de versiune acceptat de ambii parteneri este considerat a fi convenit pentru conexiunea ulterioară. Cu toate acestea, fiecare partener de comunicare este liber să încheie conexiunea după schimbarea versiunilor de protocol dacă versiunea de protocol negociat nu poate sau nu ar trebui utilizată pentru comunicare.

Identificatorul de versiune este întotdeauna un șir ASCII de 12 octeți , care se termină cu un caracter LineFeed . Cele mai comune versiuni sunt 3.3, 3.7 și 3.8:

ID-uri de versiune RFB
versiune Identificator Identificator (hex) Eliberată
3.3 RFB 003.003\n 52 46 42 20 30 30 33 2E 30 30 33 0A Ianuarie 1998 de Olivetti Research Laboratories (ORL)
3.7 RFB 003.007\n 52 46 42 20 30 30 33 2E 30 30 37 0A Iulie 2003 de RealVNC Ltd.
3.8 RFB 003.008\n 52 46 42 20 30 30 33 2E 30 30 38 0A Iulie 2005 de RealVNC Ltd.

Unii clienți raportează incorect un protocol versiunea 3.5. Aceasta ar trebui tratată ca versiunea 3.3 pe partea serverului.

Autentificarea clientului

Dacă clientul și serverul au negociat o versiune RFB compatibilă, serverul trimite tipul de autentificare pe care îl solicită de la client. În specificația RFB originală sunt definite două tipuri: „autentificare VNC” sau „fără autentificare”. Cu toate acestea, alte tipuri de autentificare au fost definite de producători terți. Clientul decide care dintre tipurile de autentificare oferite de server dorește să se autentifice pe server.

initializare

După autentificarea cu succes, clientul trimite un mesaj de 1 octet „ClientInit”. Acesta conține doar un semn care indică dacă clientul acceptă o conexiune „partajată”, i. Aceasta înseamnă că sunt permise conexiunile posibile de la server la alți clienți sau (dacă semnalizatorul este setat la 0) ar trebui să fie încheiat.

Serverul trimite apoi un mesaj „ServerInit”. Acesta conține numele desktopului (care este adesea derivat din numele computerului serverului), dimensiunea desktopului (în pixeli) și adâncimea culorii native și dispunerea pixelilor de pe partea serverului. Datele de imagine sunt transmise clientului în acest format în mod implicit, cu excepția cazului în care clientul solicită datele într-un format diferit, care este mai ușor de procesat de către client printr-un mesaj „SetPixelFormat”.

Transfer de date

Clientul controlează dacă și când ar trebui transferate datele. Trimite tastatura locală și mouse-ul la server. În plus, trimite în mod regulat mesaje „FramebufferUpdateRequest” către server, care apoi trimite modificările la conținutul ecranului (de la ultima FramebufferUpdateRequest) către client.

În versiunea originală RFB, mișcările indicatorului mouse-ului au fost, de asemenea, trimise către client prin actualizări normale ale bufferului de cadre. Cantitatea de date de transferat este destul de mare și, mai ales, latențele asociate îngreunează funcționarea. Cu RFB versiunea 3.8 a fost introdusă o extensie care permite indicatorul mouse-ului să fie desenat local de către client și numai aspectul săgeții mouse-ului și modificările sale (de exemplu, atunci când săgeata mouse-ului se deplasează peste un câmp de intrare și apoi la I Cursorul va fi transferat clientului.

De la versiunea 3.8. o modificare a dimensiunii desktopului va fi transmisă clientului. În versiunile anterioare, serverul trebuia să încheie conexiunea la client, deoarece dimensiunea desktopului putea fi transferată clientului doar în faza de inițializare a unei conexiuni.

Link-uri web

  • RFC 6143 - Protocolul Remote Framebuffer