Event ID 20 Remote Desktop: ошибка в потоке протокола RDP — решение
Симптомы ошибки протокола RDP (Event ID 20)
В журнале Applications and Services Logs > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational или в системном журнале фиксируется ошибка: Event ID 20: The Terminal Server security layer detected an error in the protocol stream and has disconnected the client. Client IP: [IP_клиента].
| Симптом | Последствия |
|---|---|
| Внезапный разрыв RDP-сессии | Клиент RDP мгновенно отключается во время активной работы |
| Ошибка «Подключение было потеряно» | Диалоговое окно клиента: «The remote connection was lost because of an error in protocol» |
| Отказ подключения некоторых клиентов | Определенные версии RDP-клиентов (macOS, Linux, старые Windows) не могут подключиться |
Пошаговое устранение сбоя потока RDP (Event ID 20)
Ошибка указывает на повреждение пакетов в потоке данных RDP, несоответствие шифров TLS или сбой в работе аппаратного ускорения видеодрайвера (WDDM graphics driver for Remote Desktop).
- Отключите использование сетевого протокола UDP для RDP (принудительный TCP): нестабильные сетевые каналы с потерями пакетов UDP часто повреждают поток RDP:
# Отключение RDP over UDP через реестр (PowerShell от имени Администратора):
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Client"
if (-not (Test-Path $regPath)) { New-Item -Path $regPath -Force }
Set-ItemProperty -Path $regPath -Name "fClientDisableUDP" -Value 1 -Type DWord -Force
# На стороне сервера:
$regServerPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"
Set-ItemProperty -Path $regServerPath -Name "SelectTransport" -Value 1 -Type DWord -Force # 1 = Только TCP- Отключите графический драйвер WDDM для сессий Remote Desktop: переключитесь на классический драйвер XDDM для предотвращения сбоев потока рендеринга:
# Отключение драйвера WDDM для RDP через реестр:
$tsPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"
Set-ItemProperty -Path $tsPath -Name "fEnableWddmDriver" -Value 0 -Type DWord -Force- Настройте требуемый уровень безопасности RDP (TLS 1.2 / NLA):
# Принудительное включение согласования безопасности и TLS:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "SecurityLayer" -Value 2 -Type DWord -Force
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "UserAuthentication" -Value 1 -Type DWord -ForceСовет: Значения SecurityLayer: 0 — RDP Encryption, 1 — Negotiate (Согласование), 2 — SSL/TLS (Рекомендуется для максимальной стабильности и безопасности).
Частые вопросы (FAQ)
Почему RDP-сессия внезапно обрывается с ошибкой протокола?
Служба безопасности RDS обнаружила поврежденный или нераспознанный пакет данных в потоке TLS/RDP, что расценивается системой как потенциальная атака или сбой связи.
Помогает ли отключение UDP для Remote Desktop?
Да, на нестабильных каналах связи (Wi-Fi, мобильный интернет, плохой VPN) протокол UDP теряет пакеты, вызывая сбой потока. Перевод на TCP решает проблему разрывов.
Что такое NLA (Network Level Authentication)?
NLA — это аутентификация на уровне сети, требующая проверки учетных данных пользователя ДО создания графической сессии RDP.
Как перезапустить службу RDP без перезагрузки сервера?
Выполните в PowerShell: Restart-Service -Name TermService -Force (все активные сессии RDP будут сброшены).