Как работает терминальный сервер windows

Поное руководство по серверу терминалов: запуск, подключение и приложение

В этой статье описывается процесс инициализации сервера терминалов и описывается, что происходит, когда пользователь подключается к серверу и запускает приложение.

Исходная версия продукта: Windows Server 2012 R2
Исходный номер КБ: 186572

Инициализация сервера терминалов Windows

По мере загрузки и загрузки операционной системы Windows Terminal Server служба сервера терминалов (Termsrv.exe) запущена и создает стеки прослушивания (по одному на протокол и на транспортную пару), которые прослушивают входящие подключения. Каждому подключению предоставляется уникальный идентификатор сеанса или sessionID для представления отдельного сеанса серверу терминалов. Каждый процесс, созданный в сеансе, «помечен» связанным sessionID, чтобы отличать пространство имен от любого другого пространства имен подключения.

Консоль (клавиатура сервера терминалов, мышь и видео) всегда загружается первым и рассматривается как подключение клиента в особом случае и назначенное sessionID. Сеанс консоли начинается как обычный сеанс Windows NT с настроенным Windows NT дисплеем, мышью и драйверами клавиатуры.

Затем служба сервера терминалов вызывает диспетчер сеансов Windows NT (Smss.exe), чтобы создать два (по умолчанию = 2) бездействия клиентских сеансов (после создания сеанса консоли), ожидающим клиентских подключений. Чтобы создать сеансы бездействия, диспетчер сеансов выполняет процесс Windows NT подсистемы клиента или сервера (Csrss.exe), и этому процессу назначен новый sessionID. Процесс CSRSS также вызывает процесс Winlogon (Winlogon.exe) и модуль ядра Win32k.sys (Window Manager и интерфейс графического устройства — GDI) в новом связанном sessionID. Измененный загрузчик Windows NT распознает этот Win32k.sys как загружаемый образ SessionSpace по предопределенным битам, установленным в заголке изображения. Затем кодовая часть изображения будет переместиться в физическую память с указателями из виртуального адресного пространства ядра для этого сеанса, если Win32k.sys еще не загружен. По дизайну он всегда присоединяется к ранее загруженным коду изображения (Win32k.sys), если он уже существует в памяти. Например, из любого активного приложения или сеанса.

Затем раздел данных (или не общий) этого изображения будет выделен для нового сеанса из созданного раздела памяти ядра SessionSpace, доступного для страниц. В отличие от сеанса консоли, сеансы клиента сервера терминалов настроены для загрузки отдельных драйверов для дисплея, клавиатуры и мыши.

Новым драйвером дисплея является устройство RDP, Tsharedd.dll. Драйверы мыши и клавиатуры взаимодействуют с стеком через диспетчер стека нескольких экземпляров, termdd.sys. Termdd.sys отправит сообщения о действиях с помощью мыши и клавиатуры драйверу RDP, Wdtshare.sys. Эти драйверы позволяют удаленно и интерактивно использовать клиентский сеанс RDP. Наконец, сервер терминалов также вызывает поток прослушиватель подключения для протокола RDP, который снова управляется диспетчером стека нескольких экземпляров (Termdd.sys), который прослушивает подключения клиентов RDP по номеру порта TCP 3389.

На этом этапе процесс CSRSS существует под собственным пространством имен SessionID, и при необходимости для каждого процесса для каждого процесса будут сданы его данные. Все процессы, созданные в рамках этого SessionID, будут автоматически выполняться в sessionSpace процесса CSRSS. Это предотвращает доступ процессов с разными sessionID к данным другого сеанса.

Подключение клиента

Клиент RDP можно установить и запустить на любом терминале под управлением Windows (на основе WinCE), Windows для workgroups 3.11 с TCP/IP-32b или платформе на основе API Microsoft Win32. Надстройка citrix Metaframe поддерживает клиенты не из Windows. Размер исполняемого файла клиента RDP для Windows для рабочих групп составляет примерно 70 КБ, используется рабочий набор размером 300 КБ и 100 КБ для отображения данных. Размер клиента на основе Win32 составляет примерно 130 КБ, для отображения данных используется рабочий набор размером 300 КБ и 100 КБ.

Клиент инициирует подключение к серверу терминалов через TCP-порт 3389. Поток прослушиватель RDP сервера терминалов обнаружит запрос сеанса и создаст новый экземпляр Стека RDP для обработки нового запроса сеанса. Поток прослушиватель передает входящий сеанс новому экземпляру стека RDP и продолжает прослушивать TCP-порт 3389 для дальнейших попыток подключения. Каждый стек RDP создается по мере подключения клиентских сеансов для обработки согласования сведений о конфигурации сеанса. В первую очередь необходимо установить уровень шифрования для сеанса. Сервер терминалов изначально поддерживает три уровня шифрования: низкий, средний и высокий.

Читайте также:  Дополнительные настройки ос astra linux

Низкое шифрование шифрует только пакеты, от отправленные клиентом на сервер терминалов. Это «только входное» шифрование используется для защиты ввода конфиденциальных данных, таких как пароль пользователя. Среднее шифрование шифрует исходяющие пакеты от клиента так же, как и низкоуровневый шифрование, но также шифрует все отображаемого пакета, возвращаемого клиенту с сервера терминалов. Этот метод шифрования обеспечивает защиту конфиденциальных данных, так как они по сети отображаются на удаленном экране. Как низкое, так и среднее шифрование используют алгоритм Microsoft-RC4 (измененный алгоритм RC4 с улучшенной производительностью) с 40-битным ключом. При высоком шифровании пакеты шифруются в обоих направлениях, в клиенте и из клиента, но будут использовать стандартный алгоритм шифрования RC4 с 40-битным ключом. Неэкспортируемая версия Windows NT Terminal Server будет обеспечивать 128-битное шифрование RC4 высокого уровня.

Между клиентом и сервером будет происходить обмен шрифтами, чтобы определить, какие распространенные системные шрифты установлены. Клиент уведомит сервер терминалов о всех установленных системных шрифтах, чтобы ускорить отрисовку текста во время сеанса RDP. Когда сервер терминалов знает, какие шрифты доступны клиенту, вы можете сэкономить пропускную способность сети, передав в клиент сжатые шрифты и строки символов Юникода, а не большие растры.

По умолчанию все клиенты резервируют 1,5 МБ памяти для кэша точечек, который используется для кэширования точек-карт, таких как значки, панели инструментов, курсоры и так далее, но не используется для удержания строк Юникода. Кэш не удается (с помощью ключа реестра) и перезаписывается с помощью алгоритма LRU. Сервер терминалов также содержит буферы, позволяющие управлять потоком передачи обновлений экрана клиентам, а не постоянному потоку. Когда взаимодействие с пользователем в клиенте высоко, буфер очищается приблизительно 20 раз в секунду. Во время простоя или при бездействии пользователя буфер сбрасывается только 10 раз в секунду. Вы можете настроить все эти номера с помощью реестра.

После согласования сведений о сеансе экземпляр стека RDP сервера для этого подключения будет соединен с существующим бездействующим сеансом пользователя Win32k, и пользователю будет предложено Windows NT экрана для Windows NT. Если автономная настройка настроена, зашифрованное имя пользователя и пароль будут переданы серверу терминалов и продолжится процесс логин. Если в настоящее время не существует бездействующим сеансов Win32k, служба сервера терминалов будет вызывать диспетчер сеансов (SMSS), чтобы создать новое пространство пользователей для нового сеанса. Большая часть сеанса пользователя Win32k использует общий код и загружается значительно быстрее после загрузки одного экземпляра.

После вводить имя пользователя и пароль пакеты отправляются на сервер терминалов. Затем процесс Winlogon выполняет необходимую проверку подлинности учетной записи, чтобы убедиться, что пользователь имеет привилегии для входа в систему и передает домен и имя пользователя службе сервера терминалов, которая поддерживает список SessionID домена или имени пользователя. Если с этим пользователем уже связан SessionID (например, отключенный сеанс), текущий активный стек сеанса присоединяется к старому сеансу. Затем удаляется временный сеанс Win32, используемый для первоначального сеанса. В противном случае подключение переходит в обычное состояние, и служба сервера терминалов создает новое сопоставление sessionID домен/имя пользователя. Если по какой-либо причине для этого пользователя активно несколько сеансов, отображается список сеансов, и пользователь решает, какой из них выбрать для повторного подключения.

Запуск приложения

После этого для пользователя отображается рабочий стол (или приложение, если в режиме с одним приложением). Когда пользователь выбирает 32-битное приложение для запуска, команды мыши передаются на сервер терминалов, который запускает выбранное приложение в новое виртуальное пространство памяти (2 ГБ приложения, ядро 2 ГБ). Все процессы на сервере терминалов будут совместно работать с кодом в режимах ядра и пользователя, где это возможно. Чтобы обеспечить общий доступ к коду между процессами, Windows NT виртуальной памяти (VM) использует защиту страниц при копировании при записи. Если нескольким процессам необходимо считывать и записывать одно и то же содержимое памяти, диспетчер ВМ назначит область памяти защиту страниц при копировании при записи. Процессы (сеансы) будут использовать то же содержимое памяти, пока не будет выполнена операция записи, после чего диспетчер виртуальной системы скопирует физический фрейм страницы в другое расположение, обновает виртуальный адрес процесса, указав на новое расположение страницы, а затем пометит страницу как чтение и записи. Копирование при записи удобно и эффективно для приложений, работающих на сервере терминалов.

Читайте также:  Benq 5160c драйвер mac os

Когда приложение на основе Win32, например Microsoft Word, загружается в физическую память одним процессом (сеансом), оно помечается как копирование при записи. Когда новые процессы (сеансы) также вызывают Word, загрузчик изображений просто будет указать новые процессы (сеансы) на существующую копию, так как приложение уже загружено в память. Если требуются буферы и пользовательские данные (например, сохранение в файл), необходимые страницы будут скопированы в новое физическое расположение памяти и помечены как чтение и записи для отдельного процесса (сеанса). Диспетчер ВМ защищает это пространство памяти от других процессов. Однако большая часть приложения является кодом для совместной работы и будет иметь только один экземпляр кода в физической памяти независимо от того, сколько раз оно будет запускаться.

Предпочтительно (хотя и необязательно) запускать 32-битные приложения в среде сервера терминалов. 32-bit applications (Win32) will allow sharing of code and run more efficiently in multi-user sessions. Windows NT позволяет запускать 16-битные приложения (Win16) в среде Win32 путем создания виртуального компьютера на основе MS-DOS (VDM) для каждого приложения Win16. Все 16-битные выходные данные преобразуются в вызовы Win32, которые выполняют необходимые действия. Так как приложения Win16 выполняются в своей собственной VDM, код нельзя совместно использовать между приложениями в нескольких сеансах. Для перевода между вызовами Win16 и Win32 также необходимы системные ресурсы. Запуск приложений Win16 в среде сервера терминалов потенциально может потреблять вдвое больше ресурсов, чем в сравнимом приложении на основе Win32.

Отключение сеанса и отключение пользователя

Отключение сеанса

Если пользователь решит отключить сеанс, процессы и все пространство виртуальной памяти останутся на физическом диске, если для других процессов требуется физическая память. Так как сервер терминалов сохраняет сопоставление домена/имени пользователя и связанного с ним sessionID, при повторном подсоединение одного и того же пользователя существующий сеанс будет загружен и снова доступен. Дополнительное преимущество RDP состоит в возможности изменения разрешений экрана сеанса в зависимости от того, что пользователь запрашивает для сеанса. Например, предположим, что пользователь ранее подключился к сеансу сервера терминалов с разрешением 800 x 600 и отключил его. Если пользователь переходит на другой компьютер, который поддерживает разрешение только 640 x 480, и повторно подключен к существующему сеансу, рабочий стол будет перерисован для поддержки нового разрешения.

Вход пользователя

Как правило, выйдите из нее просто. После выхода пользователя из сеанса все процессы, связанные с SessionID, будут завершены, а память, выделенная для сеанса, будет отпущена. Если пользователь работает с 32-битным приложением, например Microsoft Word, и выходит из сеанса, код самого приложения остается в памяти, пока последний пользователь не выйдет из приложения.

Терминальный сервер Windows

Читайте статью, если хотите узнать, как настроить терминальный сервер Windows. Мы расскажем, что это такое, зачем его использовать и покажем оптимальный способ установки на Windows.

Что такое сервер терминалов

Терминальный сервер (англ. terminal server) — это мощный компьютер или кластер, который предоставляет более «слабым» устройствам ресурсы и мощности (дисковое пространство, память) для выполнения задач. С его помощью можно работать в программах дистанционно — их не придётся устанавливать на локальный компьютер, достаточно будет подключиться по сети.

Терминальный сервер является хорошим решением для тех компаний, которым нужно предоставить доступ к одной программе нескольким работникам. Например, в компании «Х» планируют установить 1C. Перед покупкой необходимо рассчитать количество сотрудников, которые будут в ней работать. Допустим, что доступ к 1С потребуется 54-м сотрудникам. При этом не каждый из них будет работать в ней в течение всего рабочего дня. Кто-то будет использовать программу два-три часа в день, а кто-то один-два раза в неделю. Получается, что покупать лицензию для каждого рабочего компьютера или удалённого сотрудника нецелесообразно.

Благодаря терминальному серверу можно приобрести оптимальное количество лицензий или настроить совместный доступ — для работы сотрудники будут использовать удаленный рабочий стол. Это позволит сэкономить ресурсы компании. Также местоположение сотрудников не будет влиять на качество и скорость работы.

Читайте также:  Игровые компоненты для windows 10 64 bit

Таким образом, сервер выступает в качестве центрального узла, к которому по сети подключаются другие устройства. Он соединяет их с нужным ресурсом, а также выделяет мощности для работы.

Для успешного подключения необходимы:

  1. Клиентская программа, с помощью которой можно подключиться к терминалу с локального компьютера.
  2. Протокол, который обеспечивает подключение.
  3. Многоядерный сервер, на котором установлена и настроена основная программа.

Можно установить терминальный сервер как на Linux (например, Ubuntu или Centos), так и на Windows и другие операционные системы.

Все версии терминалов после Windows 2008 имеют лицензию RDS CAL. Она бывает двух типов: для отдельного пользователя и для конкретного устройства, с которого могут подключаться несколько устройств. Мы подготовили инструкцию для установки терминала на Windows Server 2019.

Подготовка: присвоение статического IP-адреса

Перед установкой серверу нужно присвоить статический IP-адрес. Благодаря этому пользователи смогут подключаться к терминальному серверу по локальной сети.

Кликните правой кнопкой мыши по доступному подключению, выберите в списке компонентов «IP версии 4 (TCP/IPv4)» и нажмите Свойства:

Укажите параметры и заполните поля в соответствии со скриншотом, затем нажмите OK:

Обратите внимание, что значения в 3 шаге могут отличаться и зависят от настроек вашей сети. Узнайте собственные значения через командную строку при помощи команды ipconfig. Чтобы открыть командную строку, нажмите комбинацию клавиш WIN+R и введите cmd. Затем введите команду ipconfig:

Готово, статический IP-адрес присвоен.

Установка терминального сервера

Инструкция подойдёт для Windows Server 2019, а также для Windows 2016. Мы использовали бесплатную пробную версию Windows Server 2019, которую можно скачать с официального сайта Microsoft. В инструкции мы описали минимальную настройку, после которой к серверу можно будет подключаться с устройств из локальной сети по протоколу RDP.

Нажмите ПускДиспетчер серверов:

Затем нажмите УправлениеДобавить роли и компоненты:

Чтобы продолжить, нажмите Далее:

Выберите «Установка ролей и компонентов» и кликните Далее:

Выберите текущий сервер и нажмите Далее:

Поставьте галочку напротив пункта «Службы удаленных рабочих столов» и нажмите Далее:

На странице «Выбор компонентов» кликните Далее:

Чтобы продолжить установку, нажмите Далее:

Поставьте галочку напротив пункта «Remote Desktop Session Host» (Узел сеансов удаленных рабочих столов):

Затем нажмите Добавить компоненты:

Поставьте галочку напротив пункта «Лицензирование удаленных рабочих столов»:

Напомним, что в инструкции не рассматривается активация лицензий. Однако компоненты лицензирования могут пригодиться в будущем, поэтому мы рекомендуем установить их. Для этого нажмите Добавить компоненты:

Если вы хотите настроить автоматическую перезагрузку, поставьте галочку напротив пункта «Автоматический перезапуск конечного сервера, если требуется», подтвердите действие и кликните Установить:

Дождитесь окончания установки компонентов и перезагрузите Windows Server вручную, если не выбрали автоматическую перезагрузку. После перезагрузки и завершения установки нажмите Закрыть:

Готово, вы установили терминал на удаленный сервер Windows.

Настройка пользователей

Настройка терминального сервера начинается с создания пользователей и добавления их в группу пользователей рабочего стола.

Чтобы открыть «Управление компьютером», нажмите комбинацию клавиш WIN+R и введите команду compmgmt.msc:

Перейдите в «Локальные пользователи и группы» — «Пользователи». Кликните правой кнопкой мыши по пустой области и нажмите Новый пользователь:

Заполните поля, задайте пароль и параметры. Затем нажмите Создать:

Правой кнопкой мыши кликните на пользователя, которого создали на предыдущем шаге, и выберите Свойства:

Перейдите во вкладку «Членство в группах» и нажмите Добавить:

Нажмите Поиск. Затем в результатах поиска выделите строку «Пользователи удаленного рабочего стола» и нажмите OK:

Если в окне появится строка «Имя компьютера/Пользователи удаленного рабочего стола», нажмите OK в окнах «Выбор» и «Свойства»:

Готово, вы создали пользователя и включили его в группу.

Подключиться к серверу по RDP можно по инструкции. При подключении используйте IP-адрес, имя пользователя и пароль, которые вы указали при создании.

Как проверить текущие подключения

Давайте проверим текущие подключения. Для этого откройте Диспетчер задач (комбинация клавиш CTRL+SHIFT+ESC) и выберите вкладку «Пользователи»:

На скриншоте видно, что на сервере находится администратор и один пользователь, который подключился по RDP.

Windows VPS — выделенный сервер в виртуальной среде, который активируется сразу после оплаты.

Оцените статью