Поделиться через


Квоты транспорта

Квоты транспорта - это механизм политики, позволяющий принимать решения о чрезмерном потреблении ресурсов подключением. Квота - это строгое ограничение, предотвращающее использование дополнительных ресурсов после превышения значения квоты. Квоты транспорта препятствуют злонамеренным или неумышленным атакам типа "отказ в обслуживании".

Транспорты Windows Communication Foundation (WCF) имеют значения квот по умолчанию, основанные на консервативном выделении ресурсов. Эти значения по умолчанию подходят для сред разработки и небольших сценариев установки. Администраторы служб должны проверять квоты транспорта и настраивать отдельные значения квоты, если данной установке начинает не хватать ресурсов или если подключения ограничиваются, несмотря на доступность дополнительных ресурсов.

Типы квот транспорта

Транспорт WCF имеет три типа квот:

  • Время ожидания снижает атаки типа "отказ в обслуживании", которые зависят от связывания ресурсов в течение длительного периода времени.

  • Ограничения выделения памяти препятствуют нехватке памяти системы и запрету службы другим подключениям.

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

Описания квоты транспорта

В этом разделе описываются квоты транспорта, доступные для стандартных транспортов WCF: HTTP(S), TCP/IP и именованных каналов. Для пользовательских транспортов могут существовать собственные настраиваемые квоты, не включенные в этот список. Информация о квотах пользовательского транспорта содержится в документации по транспорту.

Каждый параметр квоты имеет тип, минимальное значение и значение по умолчанию. Максимальное значение квоты ограничивается ее типом. Аппаратные ограничения не всегда позволяют задать максимальное значение квоты.

Имя. Тип Мин.

значение
По умолчанию

значение
Описание
ChannelInitializationTimeout TimeSpan 1 такт 5 с Максимальное время ожидания подключения для отправки преамбулы во время начального считывания. Проверка подлинности происходит после получения этих данных. Как правило, этот параметр гораздо меньше значения квоты ReceiveTimeout.
CloseTimeout TimeSpan 0 1 мин Максимальное время ожидания закрытия соединения до того, как транспорт создаст исключение.
ConnectionBufferSize Целое 1 8 КБ Размер (в байтах) буфера передачи и приемного буфера используемого транспорта. Увеличение размера буфера может улучшить пропускную способность при отправке крупных сообщений.
IdleTimeout TimeSpan 0 2 мин Максимальное время бездействия соединения в пуле до закрытия.

Этот параметр применим только к подключениям в пуле.
LeaseTimeout TimeSpan 0 5 мин. Максимальное время существования активного соединения в пуле. По истечении указанного времени соединения закрывается после обработки текущего запроса.

Этот параметр применим только к подключениям в пуле.
ListenBacklog Целое 1 10 Максимальное число не обслуживаемых прослушивателем подключений (по достижении которого дополнительные подключения к этой конечной точке запрещаются).
MaxBufferPoolSize Long 0 512 КБ Максимальный объем памяти (в байтах), которую транспорт использует для помещения в пул буферов сообщений многократного использования. Если пул не может предоставить буфер сообщений, выделяется новый буфер для временного использования.

Установки, создающие множество фабрик каналов или прослушивателей, могут выделять буферным пулам большие объемы памяти. Уменьшение размера буфера может способствовать значительному снижению расхода памяти в этом сценарии.
MaxBufferSize Целое 1 64 КБ Максимальный размер (в байтах) буфера, который используется для потоковой передачи данных. Если эта квота транспорта не установлена или транспорт не использует потоковую передачу, значение квоты совпадает с меньшим из двух: значением квоты MaxReceivedMessageSize и значением MaxValue.
MaxOutboundConnectionsPerEndpoint Целое 1 10 Максимальное число исходящих подключений, которые могут быть связаны с конкретной конечной точкой.

Этот параметр применим только к подключениям в пуле.
MaxOutputDelay TimeSpan 0 200 мс Максимальное время ожидания после операции отправки для группирования дополнительных сообщений в одну операцию. Сообщения отправляются раньше, если буфер используемого транспорта переполнен. Отправка дополнительных сообщений не сбрасывает период задержки.
MaxPendingAccepts Целое 1 1 Максимальное число каналов, ожидающих принятия прослушивателем.

Между завершением одной операции приема и началом другой операции приема проходит определенный промежуток времени. Увеличение размера этой коллекции предотвращает сброс клиентов, подключающихся в этот промежуток времени.
MaxPendingConnections Целое 1 10 Максимальное число подключений, принятия которых приложением может ожидать прослушиватель. После превышения значения этой квоты новые входящие подключения сбрасываются, а не ожидают принятия.

Возможности подключения (такие как безопасность сообщения) могут вынудить клиента открыть несколько подключений. При установке значения квоты администраторы службы должны учитывать возможность установления дополнительных подключений.
MaxReceivedMessageSize Long 1 64 КБ Максимальный размер (в байтах) сообщения, включая заголовки, при получении которого транспорт не создает исключение.
OpenTimeout TimeSpan 0 1 мин Максимальное время ожидания установления соединения до того, как транспорт создаст исключение.
ReceiveTimeout TimeSpan 0 10 мин. Максимальное время ожидания завершения операции считывания до того, как транспорт создаст исключение.
SendTimeout Временной диапазон 0 1 мин Максимальное время ожидания завершения операции записи до того, как транспорт создаст исключение.

При задании через привязку или конфигурацию квоты транспорта MaxPendingConnections и MaxOutboundConnectionsPerEndpoint объединяются в одну квоту транспорта, называемую MaxConnections. Только элемент привязки позволяет настроить значения этих квот отдельно. Минимальное значение квоты транспорта MaxConnections совпадает с ее значением по умолчанию.

Задание квот транспорта

Квоты транспорта задаются через элемент привязки транспорта, привязку транспорта, конфигурацию приложения или политику ведущего приложения. В этом документе не описывается установка транспортов через политику ведущего приложения. Для получения информации о настройках квот через политику ведущего приложения обратитесь к документации по используемому транспорту. В разделе "Настройка HTTP и HTTPS " описываются параметры квоты для драйвера Http.sys. Дополнительную информацию о настройке ограничений Windows для протоколов HTTP, TCP/IP и подключений по именованному каналу можно найти в базе знаний Майкрософт.

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

Управление квотами транспорта из элемента привязки

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

Имя. HTTP TCP/IP Именованный канал
ChannelInitializationTimeout X X
CloseTimeout
ConnectionBufferSize X X
IdleTimeout X X
LeaseTimeout X
ListenBacklog X
MaxBufferPoolSize X X X
MaxBufferSize X X X
MaxOutboundConnectionsPerEndpoint X X
MaxOutputDelay X X
MaxPendingAccepts X X
MaxPendingConnections X X
MaxReceivedMessageSize X X X
OpenTimeout
ReceiveTimeout
SendTimeout

Управление квотами транспорта из привязки

Задание квот транспорта через привязку предоставляет упрощенный набор доступных квот и при этом позволяет получать доступ к наиболее распространенным значениям квот.

Имя. HTTP TCP/IP Именованный канал
ChannelInitializationTimeout
CloseTimeout X X X
ConnectionBufferSize
IdleTimeout
LeaseTimeout
ListenBacklog X
MaxBufferPoolSize X X X
MaxBufferSize 1 Х Х
MaxOutboundConnectionsPerEndpoint 2 2
MaxOutputDelay
MaxPendingAccepts
MaxPendingConnections 2 2
MaxReceivedMessageSize Х X X
OpenTimeout X X X
ReceiveTimeout X X X
SendTimeout X X X
  1. Квота транспорта MaxBufferSize доступна только в привязке BasicHttp. Привязки WSHttp предназначены для сценариев, которые не поддерживают режимы потоковых транспортов.

  2. Квоты транспорта MaxPendingConnections и MaxOutboundConnectionsPerEndpoint объединяются в одну квоту транспорта, называемую MaxConnections.

Управление квотами транспорта из конфигурации

С помощью конфигурации приложения можно задавать те же квоты транспорта, что и посредством прямого доступа к свойствам в привязке. В файлах конфигурации имя квоты транспорта всегда начинается со строчной буквы. Например, свойство CloseTimeout в привязке соответствует параметру closeTimeout в конфигурации, а свойство MaxConnections в привязке - параметру maxConnections в конфигурации.

См. также