Квоты транспорта
Квоты транспорта — это механизм политики, позволяющий принимать решения о чрезмерном потреблении ресурсов подключением. Квота — это строгое ограничение, предотвращающее использование дополнительных ресурсов после превышения значения квоты. Квоты транспорта препятствуют злонамеренным или неумышленным атакам типа "отказ в обслуживании".
Значения квот транспортов 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 |
Квота транспорта MaxBufferSize доступна только в привязке BasicHttp. Привязки WSHttp предназначены для сценариев, которые не поддерживают режимы потоковых транспортов.
Квоты транспорта MaxPendingConnections и MaxOutboundConnectionsPerEndpoint объединяются в одну квоту транспорта, называемую MaxConnections.
Управление квотами транспорта из конфигурации
С помощью конфигурации приложения можно задавать те же квоты транспорта, что и посредством прямого доступа к свойствам в привязке. В файлах конфигурации имя квоты транспорта всегда начинается со строчной буквы. Например, свойство CloseTimeout в привязке соответствует параметру closeTimeout в конфигурации, а свойство MaxConnections в привязке — параметру maxConnections в конфигурации.
См. также
Справочник
HttpsTransportBindingElement
HttpTransportBindingElement
TcpTransportBindingElement
NamedPipeTransportBindingElement
ConnectionOrientedTransportBindingElement
TransportBindingElement