MSSQL Error 17836: Length specified in network packet payload did not match bytes read — Решение
- В журнале SQL Server Errorlog появляется ошибка:
Error: 17836, Severity: 20, State: 17. Length specified in network packet payload did not match number of bytes read; the connection has been closed. - Клиенты 1С:Предприятие аварийно завершают работу с сообщением: «Удаленный хост принудительно разорвал существующее подключение» или «Ошибка сетевого взаимодействия с сервером 1С».
- В системном журнале Windows System/Application фиксируются события Schannel или разрывы TCP-сессий с кодом Event ID 36888 / 36874.
- Сбои происходят преимущественно при передаче больших выборок данных (выгрузка отчетов, регламентные задания фонового обновления).
1. Анализ сетевых параметров и фрагментации пакетов (Jumbo Frames / MTU)
Несоответствие размера полезной нагрузки TDS (Tabular Data Stream) часто вызвано аппаратной фрагментацией или включенными функциями разгрузки сетевой карты (Offloading).
# Проверка текущего MTU на сетевых интерфейсах
Get-NetIPInterface | Select-Object InterfaceAlias, NlMtu, AddressFamily
# Отключение аппаратных оптимизаций NIC, вызывающих повреждение пакетов TDS
Disable-NetAdapterLso -Name "*" -IPv4 -IPv6
Disable-NetAdapterChecksumOffload -Name "*"
Disable-NetAdapterRsc -Name "*"2. Проверка и фиксация размера сетевого пакета в SQL Server
По умолчанию 1С:Предприятие и MSSQL согласовывают размер сетевого пакета (Network Packet Size) 4096 байт. Не рекомендуется завышать этот параметр глобально на сервере.
-- Проверка глобального размера сетевого пакета
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'network packet size';
-- Возврат к эталонному значению по умолчанию (4096 байт)
EXEC sp_configure 'network packet size', 4096;
RECONFIGURE WITH OVERRIDE;3. Исключение промежуточных инспекторов трафика (IPS / Antivirus / TLS Inspection)
Антивирусные экраны и межсетевые экраны нового поколения (NGFW), выполняющие глубокую инспекцию пакетов (Deep Packet Inspection), могут модифицировать TDS-заголовки. Добавьте порты SQL Server (по умолчанию TCP 1433) и процессы sqlservr.exe, ragent.exe, rmngr.exe, rphost.exe в исключения сканирования сетевой активности.
4. Трассировка сбоя через Extended Events
CREATE EVENT SESSION [Track_TDS_Errors] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(package0.last_error, sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.session_id)
WHERE ([error_number]=(17836))
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB, EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS);
GO
ALTER EVENT SESSION [Track_TDS_Errors] ON SERVER STATE = START; Частые вопросы (FAQ)
Что вызывает ошибку 17836 на уровне протокола TDS?
Протокол TDS предписывает передачу 8-байтового заголовка в каждом пакете, где указана общая длина пакета. Ошибка 17836 возникает, когда ядро SQL Server вычитывает из сокета меньше байтов, чем заявлено в полученном заголовке.
Может ли ошибка 17836 быть вызвана нестабильностью сетевой карты гипервизора (VMXNET3 / Hyper-V Network Adapter)?
Да, устаревшие версии драйверов VMXNET3 или включенные функции LSO/TSO (Large Send/Task Offload) в гостевой ОС часто приводят к искажению смещений в сетевых буферах.
Связана ли данная ошибка с шифрованием TLS/SSL в SQL Server?
Да, если на стороне SQL Server активирован параметр Force Encryption, а клиентские компоненты (ODBC/OLE DB драйверы на сервере 1С) не поддерживают согласованную версию TLS (например, TLS 1.2/1.3), рукопожатие может завершиться повреждением пакета.
Требуется ли перезапуск экземпляра SQL Server после изменения MTU или отключения LSO?
Перезапуск СУБД не обязателен, но рекомендуется сбросить сетевой адаптер или выполнить перезагрузку сервера в технологическое окно для сброса пулов TCP-соединений.