VNC ( Virtual Network Computing ) — это графическая система совместного использования рабочего стола, которая использует протокол Remote Frame Buffer (RFB) для удаленного управления другим компьютером . Она передает ввод с клавиатуры и мыши с одного компьютера на другой, передавая графические обновления экрана по сети . [1] Популярные применения этой технологии включают удаленную техническую поддержку и доступ к файлам на рабочем компьютере с домашнего компьютера или наоборот.
VNC не зависит от платформы, с клиентами и серверами для многих операционных систем на основе графического интерфейса и для Java . Несколько клиентов могут подключаться к серверу VNC одновременно. Существует ряд вариантов VNC [2] , которые предлагают свою собственную функциональность; например, некоторые оптимизированы для Microsoft Windows или предлагают передачу файлов (не являются частью VNC) и т. д. Многие совместимы (без дополнительных функций) с VNC в том смысле, что зритель одного варианта может подключиться к серверу другого; другие основаны на коде VNC, но несовместимы со стандартным VNC.
VNC изначально был разработан в Olivetti & Oracle Research Lab в Кембридже, Великобритания, разработчики которой впоследствии создали RealVNC Ltd и заявили VNC и RFB как зарегистрированные товарные знаки в США и некоторых других странах. Исходный код оригинального VNC и многих современных производных являются открытыми по лицензии GNU General Public License .
Исследовательская лаборатория Olivetti & Oracle (ORL) [3] в Кембридже в Великобритании разработала VNC в то время, когда лабораторией владели Olivetti и Oracle Corporation . Разработчиками, работавшими над VNC в исследовательской лаборатории AT&T, были Тристан Ричардсон (изобретатель), Энди Хартер (руководитель проекта), Квентин Стаффорд-Фрейзер , Джеймс Уэзеролл и Энди Хоппер . [4] Название Virtual Network Computer/Computing (VNC) возникло в связи с работой ORL над тонким клиентом под названием Videotile, который также использовал протокол RFB. Videotile имел ЖК-дисплей с перьевым вводом и быстрое подключение к сети ATM . В то время сетевой компьютер обычно использовался как синоним тонкого клиента; VNC по сути является программным (т. е. виртуальным) сетевым компьютером. [ необходима цитата ]
В 1999 году AT&T приобрела лабораторию, а в 2002 году закрыла исследовательские работы лаборатории. После этого несколько членов команды разработчиков (включая Ричардсона, Хартера, Уэзеролла и Хоппера) сформировали RealVNC, чтобы продолжить работу над открытым исходным кодом и коммерческим программным обеспечением VNC под этим названием. По состоянию на 2013 год [обновлять]RealVNC Ltd заявляет термин «VNC» как зарегистрированную торговую марку в Соединенных Штатах и других странах. [5]
Исходный код GPL был передан нескольким другим версиям VNC. Такое разветвление не привело к проблемам совместимости, поскольку протокол RFB разработан с расчетом на расширение. Клиенты и серверы VNC согласовывают свои возможности с помощью рукопожатия , чтобы использовать наиболее подходящие параметры, поддерживаемые на обоих концах.
VNC- сервер — это программа на машине, которая разделяет некоторый экран (и может не быть связана с физическим дисплеем: сервер может быть «безголовым» ) и позволяет клиенту совместно управлять им. VNC- клиент (или средство просмотра) — это программа, которая представляет данные экрана, исходящие от сервера, получает обновления от него и, предположительно, управляет им, информируя сервер о собранных локальных входных данных. Протокол VNC ( протокол RFB ) очень прост, основан на передаче одного графического примитива от сервера к клиенту («Поместить прямоугольник пиксельных данных в указанную позицию X, Y») и сообщений о событиях от клиента к серверу.
При обычном методе работы зритель подключается к порту на сервере (порт по умолчанию: 5900). В качестве альтернативы (в зависимости от реализации) браузер может подключиться к серверу (порт по умолчанию: 5800). А сервер может подключиться к зрителю в «режиме прослушивания» на порту 5500. Одним из преимуществ режима прослушивания является то, что серверному сайту не нужно настраивать свой брандмауэр для разрешения доступа на порт 5900 (или 5800); эта обязанность лежит на зрителе, что полезно, если на сервере нет компьютерных знаний, а пользователь-зритель более осведомлен.
Сервер отправляет клиенту небольшие прямоугольники кадрового буфера . В своей простейшей форме протокол VNC может использовать большую полосу пропускания , поэтому были разработаны различные методы для снижения накладных расходов на связь. Например, существуют различные кодировки (методы определения наиболее эффективного способа передачи этих прямоугольников). Протокол VNC позволяет клиенту и серверу договариваться, какую кодировку они будут использовать. Самая простая кодировка, поддерживаемая всеми клиентами и серверами, — это необработанная кодировка , которая отправляет данные пикселей в порядке скан-линий слева направо и после передачи исходного полного экрана передает только изменяющиеся прямоугольники. Эта кодировка работает очень хорошо, если от одного кадра к другому меняется только небольшая часть экрана (например, когда указатель мыши перемещается по рабочему столу или когда текст пишется под курсором), но требования к полосе пропускания становятся очень высокими, если одновременно изменяется много пикселей (например, при прокрутке окна или просмотре полноэкранного видео).
VNC по умолчанию использует TCP-порт 5900+ N , [6] [7] где N — номер дисплея (обычно :0 для физического дисплея). Несколько реализаций также запускают базовый HTTP- сервер на порту 5800+ N , чтобы предоставить средство просмотра VNC в качестве Java-апплета , что позволяет легко подключаться через любой веб-браузер с поддержкой Java. Можно использовать различные назначения портов, если и клиент, и сервер настроены соответствующим образом. Также существует реализация HTML5 VNC-клиента для современных браузеров (плагины не требуются). [8]
Хотя это возможно даже при низкой пропускной способности, использование VNC через Интернет облегчается, если у пользователя есть широкополосное соединение на обоих концах. Однако для того, чтобы соединение прошло, может потребоваться расширенная трансляция сетевых адресов (NAT), настройка брандмауэра и маршрутизатора, например переадресация портов. Пользователи могут устанавливать связь через технологии виртуальной частной сети (VPN) для облегчения использования через Интернет или как подключение по локальной сети, если VPN используется как прокси, или через повторитель VNC (полезно при наличии NAT). [9] [10]
Кроме того, дисплей, обслуживаемый VNC, не обязательно является тем же дисплеем, который видит пользователь на сервере. На компьютерах Unix/Linux, которые поддерживают несколько одновременных сеансов X11, VNC может быть настроен на обслуживание определенного существующего сеанса X11 или на запуск одного из своих собственных. Также возможно запустить несколько сеансов VNC с одного компьютера. В Microsoft Windows обслуживаемый сеанс VNC всегда является текущим сеансом пользователя. [ необходима цитата ]
В июле 2014 года RealVNC опубликовала предварительную версию Wayland для разработчиков. [11] [12]
По умолчанию RFB не является безопасным протоколом. Хотя пароли не отправляются в виде открытого текста (как в telnet ), взлом может оказаться успешным, если и ключ шифрования , и закодированный пароль будут перехвачены из сети. По этой причине рекомендуется использовать пароль длиной не менее 8 символов. С другой стороны, в некоторых версиях VNC также существует ограничение в 8 символов; если отправляется пароль, превышающий 8 символов, лишние символы удаляются, а усеченная строка сравнивается с паролем.
UltraVNC поддерживает использование плагина шифрования с открытым исходным кодом, который шифрует весь сеанс VNC, включая аутентификацию по паролю и передачу данных. Он также позволяет выполнять аутентификацию на основе учетных записей пользователей NTLM и Active Directory . Однако использование таких плагинов шифрования делает его несовместимым с другими программами VNC. RealVNC предлагает высокопрочное шифрование AES как часть своего коммерческого пакета вместе с интеграцией с Active Directory. Workspot выпустил исправления шифрования AES для VNC. Согласно TightVNC, [13] TightVNC не является безопасным, поскольку данные изображений передаются без шифрования. Чтобы обойти это, его следует туннелировать через соединение SSH (см. ниже).
VNC может быть туннелирован через SSH или VPN- соединение, что добавит дополнительный уровень безопасности с более сильным шифрованием. [ необходима цитата ]
Дополнительным вопросом безопасности при использовании VNC является проверка того, требует ли используемая версия авторизации от владельца удаленного компьютера, прежде чем кто-либо получит контроль над его устройством. Это позволит избежать ситуации, когда владелец компьютера, к которому осуществляется доступ, понимает, что кто-то контролирует его устройство без предварительного уведомления. [ оригинальное исследование? ]
Xvnc — это Unix VNC-сервер, основанный на стандартном X-сервере . Для приложений Xvnc выглядит как X-"сервер" (т. е. он отображает клиентские окна), а для удаленных пользователей VNC — как VNC-сервер. Приложения могут отображаться на Xvnc так, как если бы это был обычный X-дисплей, но они будут отображаться на любых подключенных средствах просмотра VNC, а не на физическом экране. [14] В качестве альтернативы можно настроить машину (которая может быть рабочей станцией или сетевым сервером) с экраном, клавиатурой и мышью для загрузки и запуска VNC-сервера в качестве службы или демона, затем можно снять экран, клавиатуру и мышь и хранить машину в труднодоступном месте.
Пользователи обычно развертывают VNC как кроссплатформенную систему удаленного рабочего стола. Например, Apple Remote Desktop для Mac OS X (и « Back to My Mac » в версиях с 10.5 по 10.13) взаимодействует с VNC и подключается к текущему рабочему столу пользователя Unix, если он обслуживается x11vnc , или к отдельному сеансу X11, если он обслуживается TightVNC . Из Unix TightVNC подключается к сеансу Mac OS X, обслуживаемому Apple Remote Desktop, если включена опция VNC, или к серверу VNC, работающему в Microsoft Windows. [15]
Другие программы или программные библиотеки, реализующие VNC, включают Krfb , Libvncserver , PocketVNC , Remmina , TigerVNC , TightVNC , VirtualGL и Vinagre .