# Virtual Network Computing

Virtual Network Computing (ou somente VNC) é um sistema de compartilhamento gráfico de desktop que usa o Remote Frame Buffer protocol(RFB) para remotamente controlar outro computador. Através deste protocolo um usuário pode conectar-se a um computador remotamente, e utilizar as suas funcionalidades visuais como se estivesse sentado em frente do computador.
Algumas das aplicações práticas incluem a 'assistência remota' ao usuário remoto.
Uma das grandes vantagens é poder fazer a conexão de diferentes ambientes UNIX (Linux e outros) em WinNT (Windows X).
VNC é independente da plataforma - há clientes e servidores para muitos sistemas operacionais GUI-based (baseados em interface gráfica), bem como para Java. Múltiplos clientes se conectam ao VNC server ao mesmo tempo. Geralmente essa tecnologia é usada para suporte técnico remoto e acesso de arquivos em um computador de trabalho de um computador de casa, ou vice-versa.
VNC foi originalmente desenvolvido no Olivetti & Oracle Research Lab em Cambridge, Reino Unido. O código fonte original VNC e muitos derivados modernos são open source pelo GNU General Public License.
Há um número de variantes de VNC que oferecem suas funcionalidades particulares; e.g. , alguns otimizados para Microsoft Windows, ou oferecendo arquivo de transferência, etc.
VNC e RFB são marcas registradas da RealIVNC Ltd. nos Estados Unidos e em outros países.

## História

A Olivetti & Oracle Research Lab (ORL) em Cambridge no Reino Unido desenvolveu o VNC quando Olivetti e a Oracle Corporation ganharam o laboratório. Em 1999 AT&T adquiriram o laboratório, e em 2002 o laboratório foi fechado.
Desenvolvedores que trabalharam no VNC quando ainda na AT&T laboratório de pesquisa inclui:
* Tristan Richardson(inventor)
* Andy Harter (líder do projeto)
* Quentin Stafford-Fraser
* James Weatherall
* Andy Hoper
Após o encerramento da ORL em 2002, muitos membros da equipe de desenvolvimento formaram a RealIVNC para continuar trabalhando no open-source e software comercial VNC, com esse nome.

## Etimologia

O nome 'Virtual Network Computer/Computing' é originário do trabalho da ORL com um cliente chamado Videotile que também usa o protocolo RFB.

## Operação

* O servidor do VNC é o programa na máquina que compartilha sua tela. O servidor permite passivamente que o cliente tenha controle sobre ele.
* O protocolo VNC(protocolo RFB) é muito simples, baseado em um gráfico primitivo do servidor para o cliente e envia mensagens do cliente para o servidor.
Note que a máquina em que o servidor VNC está rodando não precisa de display físico. No método normal de operação, um observador se conecta a uma porta no servidor. Alternativamente o browser pode se conectar a um servidor. E o servidor pode se conectar ao observador em "modo de escuta". Uma vantagem do modo de escuta é que o site servidor não tem que configurar seu firewall para permitir acesso na porta.
O servidor envia pequenos retângulos no framebuffer para o cliente. Em sua foram simples, o protocolo VNC pode usar uma grande parte do bandwidth, então vários métodos tem sido direcionados a reduzir a comunicação. Por exemplo, há muitas codificações (métodos que determinam o meio mais eficiente de transmitir esses retângulos). O protocolo VNC permite ao cliente e o servidor à negociar qual decodificação será utilizada. A codificação mais simples, que é suportada por todos os clientes e servidores, é a codificação crua onde dados em pixel são enviados da esquerda-para-direita da linha de scaneio, e depois que a tela original completa seja transmitida, somente retângulos de transferência mudam. Essa codificação trabalha muito bem se apenas uma pequena porção da tela muda de um frame para o próximo, mas a demanda da largura da banda fica muito alta se muitos pixels mudam ao mesmo tempo, assim como quando rolamos uma janela ou visualizamos um vídeo em tela cheia.
O uso do VNC por meio da internet trabalha bem se o usuário possui uma conexão de banda larga em ambas as pontas. Entretanto, talvez seja necessário NAT, firewall e configuração de roteador. Alguns usuários escolhem a aplicação instantânea Virtual Private Network(VPN) como a Hamachi para fazer o uso através da internet mais fácil. Alternativamente a conexão VPN pode ser estabelecida como uma conexão LAN se o VPN é utilizado como proxy.
Em adição, a tela que é oferecida pelo VNC não é necessariamente a mesma tela vista pelo usuário no servidor. Em computadores Linux/Unix que suportam múltiplos e simultâneos seções X11, VNC pode ser configurado para servir a uma seção X11 particular existente, ou começar uma por sua própria conta. É possível também rodar múltiplas seções VNC do mesmo computador. No Microsoft Windows a seção VNC oferecida é sempre a atual seção de usuário.

## Segurança

Por padrão, RFB não é um protocolo seguro. Enquanto senhas não são enviadas em texto simples, a quebra pode ser bem sucedida se ambos a chave de criptografia e senha codificados são revelados da rede. Por essa razão é recomendado uma senha de pelo menos 8 caracteres. Por outro lado há apenas um limite de 8 caracteres em algumas versões de VNC; se uma senha é enviada excedendo 8 caracteres, o excesso é removido e as strings truncadas são comparadas a senha.
Um adicional concernimento de segurança para o uso de VNC é a verificação dos requerimentos de autorização da versão para o dono do computador remoto antes de ter controle sobre o dispositivo.

## Limitações

A clipboard que contém o texto Unicode não é suportada. É impossível transferir qualquer clipboard de texto que não seja o conjunto de caracteres Latin-1.
O protocolo VNC é baseado em pixels. Embora isso leve a uma grande flexibilidade, é também menos eficiente do que soluções que tem um melhor entendimento do model ode gráficos subjacentes como X11 ou Windows Remote Desktop Protocol. Esses protocolos enviam gráficos primitivos ou comandos de alto nível de uma forma simples onde o RFB envia apenas os dados de pixel cru.