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


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

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

Значения квот транспортов 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

TimeSpan

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

X

X

MaxOutboundConnectionsPerEndpoint

2

2

MaxOutputDelay

MaxPendingAccepts

MaxPendingConnections

2

2

MaxReceivedMessageSize

X

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 в конфигурации.

См. также

Справочник

HttpsTransportBindingElement
HttpTransportBindingElement
TcpTransportBindingElement
NamedPipeTransportBindingElement
ConnectionOrientedTransportBindingElement
TransportBindingElement