Protocolo RFB - RFB protocol
RFB (" remote framebuffer ") é um protocolo simples aberto para acesso remoto a interfaces gráficas de usuário . Como funciona no nível do framebuffer , é aplicável a todos os sistemas e aplicativos de janelas , incluindo Microsoft Windows , macOS e o X Window System . RFB é o protocolo usado em Virtual Network Computing (VNC) e seus derivados.
Descrição
Por padrão, um visualizador / cliente usa a porta TCP 5900 para se conectar a um servidor (ou 5800 para acesso do navegador), mas também pode ser configurado para usar qualquer outra porta. Como alternativa, um servidor pode se conectar a um visualizador no "modo de escuta" (por padrão na porta 5500). Uma vantagem do modo de escuta é que o site do servidor não precisa configurar seu firewall / NAT para permitir o acesso nas portas especificadas; a responsabilidade recai sobre o visualizador, o que é útil se o site do servidor não tiver experiência em computador, enquanto o usuário visualizador deveria ter mais conhecimento.
Embora o RFB tenha começado como um protocolo relativamente simples, ele foi aprimorado com recursos adicionais (como transferências de arquivos) e técnicas de compressão e segurança mais sofisticadas à medida que se desenvolveu. Para manter a compatibilidade cruzada perfeita entre as muitas implementações de cliente e servidor VNC diferentes, os clientes e servidores negociam uma conexão usando a melhor versão de RFB e as opções de compressão e segurança mais apropriadas que ambos podem suportar.
História
O RFB foi originalmente desenvolvido no Olivetti Research Laboratory (ORL) como uma tecnologia de exibição remota a ser usada por um thin client simples com conectividade ATM chamado Videotile. Para manter o dispositivo o mais simples possível, o RFB foi desenvolvido e usado preferencialmente a qualquer uma das tecnologias de exibição remota existentes.
A RFB encontrou um segundo uso e mais duradouro quando o VNC foi desenvolvido. O VNC foi lançado como software de código aberto e a especificação RFB publicada na web. Desde então, o RFB é um protocolo gratuito que qualquer pessoa pode usar.
Quando o ORL foi fechado em 2002, algumas das pessoas-chave por trás do VNC e RFB formaram a RealVNC , Ltd., a fim de continuar o desenvolvimento do VNC e manter o protocolo RFB. O protocolo RFB atual está publicado no site do RealVNC .
Versões de protocolo
As versões publicadas do protocolo RFB são as seguintes:
Versão | Publicados | Encontro: Data | Especificação |
---|---|---|---|
RFB 3.3 | ORL | Janeiro de 1998 | O Protocolo de Framebuffer Remoto 3.3 |
RFB 3.7 | RealVNC Ltd | Agosto de 2003 | O Protocolo Framebuffer Remoto 3.7 |
RFB 3.8 (atual) | RealVNC Ltd | Junho de 2007 | O Protocolo Framebuffer Remoto 3.8 |
IETF RFC (3.8) | RealVNC Ltd | Março de 2011 | RFC 6143 |
Os desenvolvedores são livres para adicionar codificação adicional e tipos de segurança, mas devem reservar números de identificação exclusivos para eles com os mantenedores do protocolo para que os números não entrem em conflito. Números de tipo conflitantes podem causar confusão ao estabelecer uma conexão e interromper a compatibilidade cruzada entre as implementações. A lista de tipos de codificação e segurança foi mantida pela RealVNC Ltd e é separada da especificação do protocolo para que novos tipos possam ser adicionados sem exigir que a especificação seja reeditada. Desde dezembro de 2012, a lista foi para IANA .
Uma versão da comunidade da especificação do protocolo RFB que visa documentar todas as extensões existentes é hospedada pelo projeto TigerVNC .
Tipos de codificação
Como as codificações fazem parte da negociação, algumas das codificações abaixo são pseudo-codificações usadas para anunciar a capacidade de lidar com uma determinada extensão.
Número | Codificação |
---|---|
0x00000000 | Cru |
0x00000001 | CopyRect |
0x00000002 | RRE (comprimento de execução do retângulo crescente) |
0x00000004 | CoRRE (Compact RRE) |
0x00000005 | Hextil (variante RRE) |
0x00000006 | Zlib |
0x00000007 | Justa |
0x00000008 | ZlibHex (Zlib + Hextil) |
0x00000009 | Ultra |
0x00000010 | ZRLE (comprimento de execução Zlib) |
0x00000011 | ZYWRLE |
0x00000014 | H.264 |
0x00000032 | Abra H.264 |
0xFFFF0001 | CacheEnable |
0xFFFF0006 | XOREnable |
0xFFFF8000 | ServerState (UltraVNC) |
0xFFFF8001 | EnableKeepAlive (UltraVNC) |
0xFFFF8002 | FTProtocolVersion (File Transfer Protocol Version - UltraVNC) |
0xFFFFFEC7 | Atualizações Contínuas |
0xFFFFFEC8 | Cerca |
0xFFFFFECC | ExtendedDesktopSize |
0xFFFFFECF | Interface de entrada geral (GII) |
0xFFFFFF00–0xFFFFFF09 | CompressLevel (codificação rigorosa) |
0xFFFFFF10 | XCursor |
0xFFFFFF11 | RichCursor |
0xFFFFFF18 | PointerPos |
0xFFFFFF20 | LastRect |
0xFFFFFF21 | NewFBSize |
0xFFFFFF74 | PNG apertado |
0xFFFFFFE0–0xFFFFFFE9 | QualityLevel (codificação rigorosa) |
Das codificações baseadas em imagens definidas publicamente, as mais eficientes são os tipos de codificação Tight. Dois tipos de codificações são definidos pelo TightVNC:
- Tight Encoding, uma mistura de retângulo, paleta e preenchimento gradiente com zlib e JPEG, além de um filtro Zlib mais "compactação básica".
- Codificação rígida de PNG, codificação rígida com compactação básica substituída por dados PNG .
O H.264 foi pesquisado para codificar dados RFB, mas os resultados preliminares (usando o formato Open H.264) foram descritos como sem brilho por um desenvolvedor TurboVNC . Ele se torna mais eficiente com menos quadros I (quadros-chave), mas a utilização da CPU continua sendo um problema.
Limitações
Em termos de transferência de dados da área de transferência, "atualmente não há maneira de transferir texto fora do conjunto de caracteres Latin-1". Uma extensão de pseudo-codificação comum resolve o problema usando UTF-8 em um formato estendido.
O protocolo VNC é baseado em pixels. Embora isso leve a uma grande flexibilidade (ou seja, qualquer tipo de desktop pode ser exibido), geralmente é menos eficiente do que as soluções que têm um melhor entendimento do layout gráfico subjacente, como X11 ou desktop, como RDP . Esses protocolos enviam primitivos gráficos ou comandos de alto nível em uma forma mais simples (por exemplo, janela aberta), enquanto o RFB apenas envia os dados de pixel brutos, embora compactados.
O protocolo VNC expressa o estado do botão do mouse em um único byte, como binário para cima / para baixo. Isso limita o número de botões do mouse a oito (efetivamente 7, dada a convenção do botão 0 que significa "desabilitado"). Muitos mouses modernos enumeram 9 ou mais botões, levando a botões de avançar / voltar sem efeito sobre o RFB. Uma extensão "GII" resolve esse problema.
Veja também
- Comparação de software de desktop remoto
- Tecnologia NX e Xpra para conexões remotas eficientes do X Window System
- ESPECIARIA