Управление QoS на платформе Windows. Как использовать QoS для обеспечения качества доступа в интернет

Существует такая служба как QoS . Расшифровывается сия аббревиатура, как Quality of Service . В случае настройки системы ее крайне нежелательно активировать, так как она имеет свойство существенно уменьшать пропускную способность сети (приблизительно на 20 процентов)

Сейчас, пожалуй, невозможно найти такого человека, который бы ни разу не читал ни одно из FAQ , касающихся работы Windows .

20% — это, разумеется, просто безумно много. И конечно же Майкрософт – должен погибнуть. Утверждения такого плана переходят из одного ФАКа в другой, бродят по форумам, средствам массовой информации, пользуются огромным успехом во всяких «твикалках» — программному обеспечению по «обучению» Windows . Раз облачать подобного рода утверждения необходимо крайне осторожно, этим-то мы сейчас и займемся, качественно применяя системный подход. То бишь крайне детально рассмотрим проблемный вопрос, будем опираться на авторитетные первоисточники.

Что есть сеть с качественным сервисом?

Предлагаем вам принять такое определение сетевой системы, которое максимально упрощено. Приложения начинают свою работу, делают ее на хостах и в результате своей деятельности меняются информацией друг с другом. Приложения шлют информацию ОС для передачи по сети. Как только нужная информация передается ОС, она автоматически становится сетевым трафиком.

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

Функциональные возможности этой службы созданы для того чтобы удовлетворять нескольких сетевых субъектов: во-первых, сетевых администраторов, а во-вторых, сами сетевые приложения. Зачастую, они имеют некоторые разногласия. Сетевой администратор стремится ограничить ресурсы, которые используются специфическим приложением, в то время как это же приложение стремится захватить как можно большее количество свободных ресурсов из сети. Интересы их могут согласовываться, если учитывать тот факто, что администратор сети будет играть самую главную роль, по отношению ко всем пользователям и приложениям.

Основные параметры службы QoS

Разные приложения имеют совершенно разные требования к переработке их трафика. Приложения в некоторой степени более или менее терпимы к потере и несущественным задержкам сетевого трафика.

Эти требования находят своё применение в таких параметрах, которые связанны с QoS :

Полоса пропускания (англ. Bandwidth) – та скорость с которой трафик, который генерируется приложением, может быть и должен быть передан по сети

Задержка (Latency) – время задержки, которое может допустить само приложение при доставке пакета информации

Изменение задержки (Jitter )

Потеря (Loss ) – коэффициент потери информации.

Если бы мы имели доступ к вечным ресурсам сети, то абсолютно весь трафик приложения мы могли бы распределять с нужной скоростью, с временем задержки, равным нулю, изменениями времени тоже равным нулю и с отсутствием каких-либо потерь. Но сетевые ресурсы далеко не вечны.

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

Базовые ресурсы службы QoS и способы обработки трафика

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

Сетевые устройства способны обрабатывать состояние перегрузки, организовывая целую цепь трафика в памяти устройства (в его буфере), пока она (перегрузка) не пройдет. В иных же случаях оборудование может не принимать трафик, для того чтобы сделать перегрузку менее тяжелой. Как результат, приложения встречаются со значительным изменением времени ожидания (потому что трафик остается в очередях на интерфейсах) или даже с полной потерей трафика.

Возможности интерфейсов, касающиеся пересылки сетевого трафика и наличие памяти, предназначенной для хранения трафика в сетевых устройствах будут составлять фундаментальные ресурсы, которые в свою очередь требуются для обеспечения службы QoS для продолжения потоков трафика в приложениях.

Распределение ресурсов службы QoS по сетевым устройствам

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

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

Механизмы и способы обработки трафика

Подавляющее большинство локальных сетей основывается на технологии iEEE 802 и включает token —ring , Ethernet и так далее. 802.1p является механизмом обработки трафика для поддержки службы QoS в подобного рода сетях.

802.1p способно определить поле (второй уровень в сетевой модели OSI ) в заглавии пакета 802, которое несет какое-то значение приоритета. Обычно, маршрутизаторы или же хосты, отсылая свой трафик в локальную сеть, маркируют все посланные ими пакеты, присваивая им какое-то значение приоритета. Подразумевается, что свичи, хабы, мосты и иные сетевые устройства будут обрабатывать пакеты путем организации очередей. Область применения указанного механизма обработки трафика ограничивается LAN . В тот же момент, когда пакет пересекает LAN (через третий уровень OSI ), приоритет 802.1p сразу же удаляется

Механизм третьего уровня – Diffserv , который определяет в поле в третьем уровне загаловка IP -пакетов, которые называются DSCP (расш. Diffserv codepoint )

Itserv представляет из себя законченный пакет услуг, который определяет гарантированных сервис и сервис, который управляет перегрузками. Гарантированный сервис способен нести какой-то объем трафика с ограниченной задержкой. Сервис, который управляет загрузкой,вызывается нести какой-то объем трафика когда «появляется легкая загруженность сетей». Они являются в какой-то степени измеримыми услугами, так как они определяются, для того чтобы обеспечить соотношение QoS к какому-то количеству трафика.

Так как технология ATM может фрагментировать пакеты в сравнительно небольшие ячейки, то оно способно предложить весьма заниженное время задержки. Если нужно передать пакет срочно, то интерфейс ATM может всегда освободиться для передачи на время, которое нужно, чтобы передать лишь одну ячейку.

Также служба QoS имеет в своём распоряжении довольно много непростых механизмов, которые обеспечивают работу такой технологии. Хотим отметить только лишь один, но очень существенный момент: для того, чтобы служба начала функционировать, нужна поддержка такой технологии и наличие необходимой настройки на всех передачах от первоначального пункта и до конечного

Нужно принять:

Абсолютно все маршрутизаторы принимают участиев передаче необходимых протоколов;

Первый QoS —сеанс, котор ый требует 64 кбпс, инициализируется между хостами A и B

Второй сеанс, который требует 64 кбпс, инициализируется между хостами A и D

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

Для нас важно, что один вопрос о резервировании 64 кбпс должен был достигнуть трех маршрутизаторов по пути потока информации между хостами A и B . Следующий запрос о 64 кбпс смог бы д остигнуть трех маршуртизаторов между хостами A и D . Маршрутизаторы бы смогли исполнить запросы на резервировании ресурсов, так как они не больше максимально указанной точки. Если же вместо этого любой из хостов B и C смог бы инициализировать 64 кбпс QoS -сеанс с А-хостом, то в таком случае маршрутизатор, который обслуживает указанные хосты, скорее всего запретил бы какое-то одно соединение.

А сейчас попробуем представить, что сетевой администратор выключает обработку службы в трех маршрутизаторах, которые обслуживают хост E ,D ,C ,B . В таком случае запросы о ресурсах больших 64 кбпс будут удовлетворяться вне зависимости от расположения хоста, который принимает участие в создании. В этом случае гарантии качества были бы крайне низки, так как трафик для единого хоста наносил бы ущерб трафику другого. Качество обслуживания, скорее всего, могло бы остаться прежним, если бы верхний маршрутизатор смог ограничить запросы до 64кбпс, но это бы привело к крайне неэффективному использованию ресурсов сети.

С другой же стороны, пропускную способность всех связей в сети мы могли бы увеличить до 128 кбпс. Однако увеличенная пропускная способность будет использоваться только лишь если два хоста будут одновременно требовать ресурсы. Если это не будет так, то сетевые ресурсы вновь станут использоваться крайне неэффективно

Майкрософтовские QoS -компонент ы

98 версия Windows располагает лишь компонентами QoS только для уровня пользователей:

QoS сервис провайдер

Winsock 2 (GQoS API )

Некоторые компоненты приложений

Более поздние операционные системы компании Майкрософт содержат все, что указано выше, а также такие компоненты, как:

Traffic .dll – возможность управления трафиком

Rsvpsp .dll и служб ы rsvp .exe ,а также QoS ACS . В XP и 2003 не используются

Mspgps .sys – классификатор пакетов, способен определить класс сервиса, принадлежащий пакету.

Psched .sys является планировщиком пакетов службы QoS . Его функция заключается в определении параметров службы для специфического потока информации. Весь трафик будет отмечаться каким-то значением приоритета. Планировщик пакетов будет определять трафик, путем постановки в очередь всех покетов и обрабатывать конкурирующие запросы через поставленные в очередь пакеты данных, которые нуждаются в своевременном доступе к сети.

Планировщик пакетов QoS (Psched.sys). Определяет параметры QoS для специфического потока данных. Трафик помечается определенным значением приоритета. Планировщик пакетов QoS определяет график постановки в очередь каждого пакета и обрабатывает конкурирующие запросы между поставленными в очередь пакетами, которые нуждаются в одновременном доступе к сети.

Финальный аккорд

Все вышеизложенные моменты не могут дать одного ответа на вопрос, куда же все-таки уходят те самые 20 процентов (которые, к слову сказать, никто еще точно не измерил). Исходя из всей информации, которая указана выше, этого быть ни в коем случае не должно. Однако оппоненты выдвигают свой довод: система QoS отличная, да вот реализована неважно. И, как следствие, 20% все же уходят. Скорее всего, проблема допекла и самого гиганта софта, так как он уже очень давно в свою очередь стал опровергать подобного плата мысли.

Рубрика «Консультация» cоздана на портале «Цифровая подстанция» для того, чтобы каждый читатель мог получить ответ на интересующий его вопрос. Свои вопросы участники могут направлять на адрес [email protected] . Сегодня мы рассматриваем следующий вопрос:

Когда речь идет о коммутаторах и о передаче данных по информационной сети Ethernet часто возникает такое понятие как QoS (Quality of Service). Что это такое?

Отвечает начальник отдела инжиниринга компании «ТЕКВЕЛ» Дмитрий Стешенко:

Под качеством обслуживания (QoS) понимается способность сетевой инфраструктуры предоставлять улучшенное обслуживание определенному виду передаваемого трафика при помощи различных технологий.

Качество обслуживания на втором уровне модели OSI (канальном) в пределах одного сетевого элемента обеспечивается за счет использования модели дифференцированного обслуживания (Differentiated Service – DiffServ) и обеспечивается:

  • Классификацией и разметкой трафика.
  • Управлением перегрузками (механизмы очередей).

Следует отметить, что данная модель начинает работать лишь в случае появления очередей и перегрузок.

Согласно стандарту МЭК 61850 все коммуникационные процессы передачи данных осуществляются посредством технологии Ethernet. Данная технология определяет формат Ethernet кадров (фреймов), линии соединения (среду передачи), электрические и световые сигналы на физическом уровне, протоколы управления доступом к среде - на втором уровне модели OSI (канальном). Основные методы и технологии Ethernet описываются семейством протоколов IEEE 802.3.

Протокол Ethernet в чистом виде не поддерживает функцию приоритезации трафика, поэтому наряду со стандартным протоколом Ethernet IEEE 802.3, организация IEEE разработала стандарт создания виртуальных локальных сетей VLAN IEEE 802.1q. В стандарте IEEE 802.1q предусматривается вставка дополнительного четырехбайтового тега VLAN в заголовок Ethernet исходного фрейма, содержащий метку приоритета (Priority) класса обслуживания (Class of Service – CoS) IEEE 802.1p (см. рис. 1).

Рис. 1. Структура кадра Ethernet согласно стандарту IEEE 802.1q

КЛАССИФИКАЦИЯ И РАЗМЕТКА ТРАФИКА

К примеру, коммутаторы 2–го уровня PULLNET семейства AGENT-2 позволяют различать кадры Ethernet (классифицировать трафик) по параметрам метки приоритета (Priority) IEEE 802.1p. Значения приоритета в зависимости от типа трафика приведены в таблице ниже. Стандарт МЭК 61850 по умолчанию предусматривает для GOOSE сообщений и выборок мгновенных значений SV приоритет равный 4.

Таблица 1. Классы трафика согласно стандарту IEEE 802.1p.

Биты приоритета

Обозначение

Класс приоритета трафика

NC (Network Controlled)

Критически важный для сети. Трафик управления сетью

Интерактивный мультимедийный (видео)

CL (Controlled Effort)

Контролируемый. Потоковый мультимедийный

EE (Excellent Effort)

Приоритетный

Стандартный (Экономный)

BE (Best Effort)

Низший. Трафик передаваемый с максимальными усилиями («по возможности»). Вариант по умолчанию

Таким образом, классификация и разметка трафика решает две задачи:

  • Отнесение передаваемых данных к определенному классу трафика.
  • Назначение передаваемому фрейму соответствующего приоритета.

УПРАВЛЕНИЕ ПЕРЕГРУЗКАМИ (МЕХАНИЗМЫ ОЧЕРЕДЕЙ)

Перегрузка возникает в случае переполнения выходных буферов передающего трафик оборудования. Основными механизмами возникновения перегрузок (или, что равнозначно, скоплений – congestions) является агрегация трафика (когда скорость входящего трафика превышает скорость исходящего) и несогласованность скоростей на интерфейсах. Управление пропускной способностью в случае перегрузок (узких мест) осуществляется с помощью механизма очередей. Кадры Ethernet помещаются в очереди, которые упорядоченно обрабатываются по определенному алгоритму. Фактически, управление перегрузками – это определение порядка, в котором фреймы выходят из интерфейса (очередей) на основе приоритетов. Если перегрузок нет – очереди не работают.

Так как очереди не бесконечны, они могут заполняться и переполняться. Если очередь уже заполнена, то новые пакеты в нее не попадают и отбрасываются. Это явление называется концевыми потерями. Проблема концевых потерь заключается в том, что в этой ситуации коммутатор не может не отбрасывать данный фрейм, даже если он имеет высокий приоритет. Таким образом, необходим механизм, выполняющий следующие две операции:

  • Выяснить, действительно ли очередь переполнена и нет ли в ней места для фреймов с высоким приоритетом.
  • Сформировать политику, согласно которой в первую очередь будут отбрасываться фреймы с более низким приоритетом, и только потом – с более высоким.

Приоритезация используется для классификации фреймов путем их привязки к одной из очередей выхода. Метка приоритета IEEE 802.1p для назначений очереди определяется пользователем. Коммутаторы 2–го уровня PULLNET семейства AGENT-2 поддерживают 4 очереди приоритетов. В таблице ниже представлена подробная информация по меткам приоритета для параметров очереди, установленных на коммутаторе PULLNET по умолчанию.

Таблица 2. Привязка Class of Service (CoS) к очереди пересылки данных по умолчанию.

Значение приоритета

CoS IEEE 802.1p

IEEE 802.1p

Номер очереди

по умолчанию

в PULLNET AGENT-2

q0 (низший приоритет)

q3 (максимальный приоритет)

После процесса классификации фреймы можно привязать к определенной очереди (очередям) в зависимости от метки приоритета CoS.

Настройка очередей выхода осуществляется с помощью схемы планирования одного из следующих способов:

  • Строгий приоритет (Strict Priority – SP).
  • Взвешенный циклический алгоритм (Weighted Round Robin –WRR).

Строгий приоритет (Strict Priority) – гарантирует, что чувствительные ко времени приложения передаются всегда. Строгий приоритет (Strict Priority) позволяет присвоить трафику, зависящему от целевого назначения и чувствительности ко времени, наивысший приоритет перед менее чувствительными ко времени данными. Т.е. фреймы, находящиеся в очереди с высоким приоритетом, обрабатываются первыми. Кадры Ethernet из следующей по приоритету обслуживания очереди начнут передаваться только после того, как опустеет высокоприоритетная очередь. Например, передача голоса по IP осуществляется до пересылки трафика FTP или электронной почты (SMTP). Недостатком данного метода является то, что данные с низким приоритетом могут длительное время не обрабатываться.


Рис. 2. Механизм обработки очередей “Строгий приоритет” (Strict Priority) при постановке фреймов в очередь в соответствии с настройками по умолчанию в коммутаторах PULLNET.

Взвешенный циклический алгоритм (WRR) − гарантирует, что отдельное приложение не будет использовать все ресурсы по пересылке, доступные посредством модуля коммутатора Ethernet. С помощью WRR осуществляется пересылка всех очередей в цикле.

При наличии нескольких очередей фреймы могут быть помещены в разные очереди и обслуживаться по взвешенному циклическому алгоритму (Weighted Round Robin – WRR). Внутри очереди устанавливаются весовые коэффициенты (Weight Value) – в коммутаторах AGENT-2 это значения от 1 до 20. Они играют роль исходных точек, по которым определяется, с какой вероятностью может быть отброшен пакет. Процесс обработки очередей осуществляется по круговому принципу, начиная с самой приоритетной очереди. Из каждой непустой очереди передается некоторый объем трафика, пропорциональный назначенному ей весовому коэффициенту, после чего выполняется переход к следующей по убыванию приоритета очереди и так далее по кругу.


Рис. 3. Механизм обработки очередей “Взвешенный циклический алгоритм” (Weighted Round Robin).

Все очереди, за исключением очередей SP, могут работать по схеме WRR. Очереди SP обслуживаются непосредственно перед очередями WRR. Если поток трафика минимален и очереди SP не занимают всю полосу пропускания, назначенную для порта, то очереди WRR используют полосу пропускания совместно с очередями SP. При этом оставшаяся часть полосы пропускания распределяется в соответствии с весовыми коэффициентами. Данный комбинированный механизм «SP+WRR» доступен в коммутаторах PULLNET AGENT-2.

QoS – целая пачка технологий, без которых современная сеть работает крайне плохо, а ряд задач не может выполнить вообще. Это и логики классификации трафика, и схема marking’а, когда данные помечаются путём помещения в заголовок канального или сетевого уровня соответствующих пометок, и управление логикой работы очередей, когда надо отправить несколько потоков данных через ограниченный по пропускной способности интерфейс, и шейпинг, и многие другие дисциплины, без которых целостная картина просто не получится. Фундаментально это изучается разве что на курсе , да и то – в пять дней не всегда влезаем, материала там много.

Однако, сетевые настройки Windows в плане “глубже, чем просто айпишник назначить”, обычно являют собой что-то мистическое для администратора (да и для большинства тренеров Microsoft тоже, т.к. сетевые вопросы в авторизованных курсах Microsoft рассказываются крайне минималистично). Хотя ничего ужасного в сетевых технологиях нет, скорее, наоборот – зачастую бытует мнение, что “в Windows этого нет”, базирующееся на глубоком выводе о том, что говорящий это не нашёл за 10 секунд.

Попробуем разобраться.

Предположим, что Вы уже знаете сетевые технологии на базовом уровне, хотя бы слышали про ethernet, 802.1Q и формат IP-пакета. Если не слышали – имеет смысл послушать наш курс , это бесплатно. Конечно, лучше изучить QoS основательно , но это, в принципе, не строго необходимо для восприятия данного материала.

QoS в Windows Server 2012 и других версиях ОС

  • Глобальные настройки QoS
  • Настраиваем политики QoS
  • IP Precedence, DSCP – что и как
  • WMM_AC и специфика 802.11-сетей
  • Взаимодействие политик QoS

Включаем поддержку QoS в сетевой подсистеме Windows

Для того, чтобы маркировать и CoS и ToS, у Windows есть специальный сетевой компонент, который так и называется – QoS Packet Scheduler. Установите его и включите на всех сетевых интерфейсах, на которых планируется управление QoS.

QoS для старых версий Windows – Windows XP и Windows Server 2003

Для поддержки QoS в NT 5.1 / NT 5.2 Вам также необходимо в явном виде включить поддержку маркировки ToS – по умолчанию там она выключена. Это делается путём изменения DWORD32 значения DisableUserTOSSetting у ключа реестра HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters на нуль. Если такого значения нет – создайте его и обнулите в явном виде, а после перезапустите систему – без этого параметр не применится и ОС будет продолжать игнорировать заданную приложениями через Winsock опцию IP_TOS.

Теперь продолжим про настройки, общие для разных версий Windows.

Если посмотреть внимательно, то этот компонент по сути и есть NDIS-драйвер:

Далее. Для того, чтобы мы могли указывать не только L3-параметры QoS (которые в IP-заголовке в поле ToS), а ещё и L2-параметры (которые в 802.1Q заголовке, в части, называемой 802.1p), нам надо включить на сетевом адаптере поддержку 802.1Q. Это будет выглядеть по разному в разных сетевых адаптерах – но примерно так:

Если такого пункта нет, то ставить метки CoS в кадре 802.3 некуда. Это уменьшит практическую пользу от настроек QoS, но, в общем-то, не уберёт её. Суть в том, что обычный хост не добавляет этот заголовок в 802.3-кадр, и эта настройка, в зависимости от сетевого адаптера, может обозначать разное – или “принимать кадры с 802.1Q-заголовком и анализировать его, в том числе и 802.1p”, или “делать это только в случае, когда мы отправляем кадр с меткой 802.1Q”. Смотрите детальнее специфику своего сетевого адаптера, общий совет тут выдать можно только один – если заголовка 802.1Q нет, то данные о качестве обслуживания можно добавить лишь в L3-заголовок.

Если Вы проделали всё вышеуказанное – система готова к тому, чтобы реализовывать заданные Вами параметры QoS. Теперь надо их задать.

Глобальные настройки QoS в Windows

Глобальные настройки QoS коснутся двух моментов – того, как будет обрабатываться входящий TCP-трафик, и того, как будут взаимодействовать политики QoS и установки QoS на уровне отдельных приложений. Находятся они в объекте групповой политики, точнее – в , в контекстном меню Advanced QoS Settings… , вызываемом нажатием правой кнопки мыши. Рассмотрим их по отдельности.

Настройки Inbound TCP Traffic

Выглядеть они будут примерно так:

Это, по сути, никакой не QoS, а управление окном TCP для трафика в сторону данного хоста. Идея в том, что данная настройка напрямую влияет на то, какое максимальное значение receive window будет предлагаться при работе TCP-соединений. Начиная с NT 6.0, в Windows появилась человеческая поддержка окна TCP размером более 64К, вот данная политика и позволяет задать это максимальное значение окна централизованно. При задании уровня 0 окно будет ограничено 64КБ, при 1 – 256КБ, при 2 – 1МБ, а при 3 – 16МБ.

Учтите, что чем больше окно, тем реже TCP отправляет подтверждения о приёме, и тем менее “динамично” он реагирует на форс-мажорные ситуации, когда сегмент TCP задерживается или теряется. Чем меньше – тем быстрее реакция, но больше служебного трафика. В общем и целом в надёжных сетях при передаче больших объёмов данных (например, файл-сервер в локальной сети офиса) целесообразно устанавливать значение выше, а при сценарии “По tcp-сессии идёт не очень много данных, но у канала варьируется латентность и качество” – меньшее значение.

Настройки DSCP Marking Override

Выглядеть данные настройки будут так:

Это достаточно простая настройка, некий аналог mls qos trust cos в Cisco IOS. Суть – разрешать или нет приложениям, которые умеют метить трафик, делать это. Если выберете, что в явном виде можно – то когда приложение будет устанавливать поле ToS, то политики QoS будут игнорироваться, если нет – то наоборот; приложения на данном хосте будут безрезультатно вызывать функции API по маркировке трафика, а вся маркировка будет идти по явно указанной в политиках логике.

Давайте теперь посмотрим, как эти политики формируются.

Настраиваем политики QoS

Находятся они там же – Computer Configuration / Windows Settings / Policy-based QoS . Рассмотрим создание политики.

Первое, что надо учесть – ограничения политик. Под них может подпадать только трафик TCP и UDP. Другие IP-протоколы ограничить не получится. Плюс есть дополнительные настройки для HTTP-сессий, что улучшает ситуацию. Поэтому штатное решение по управлению качеством обслуживания затрагивает не весь возможный трафик, но в подавляющем большинстве случаев является достаточным. Приоритет исходящего IPSec или PPTP-трафика, например, задать не получится.

При создании политики первым делом надо будет указать её название (произвольное, технического назначения не имеет), значение DSCP и ограничение на полосу. Давайте чуток вспомним, что это и зачем.

QoS – это большая пачка технологий. Это и то, как помечать пакеты и кадры (Marking), и то, как формировать очереди для отправки нескольких потоков с разными метками через один интерфейс (Queuing), и то, как сбрасывать из этих очередей лишний трафик (Shaping). Когда речь идёт о сегменте сети, в котором эта логика единообразна и продумана (трафик X помечается на всех устройствах однотипно и однотипно же добавляется в очереди), говорят о том, что это – домен QoS. Мы будем рассчитывать на то, что установки, которые мы сейчас делаем через групповую политику, будут аналогично восприниматься сетевыми устройствами – это уже out of scope для этой статьи, но для полноценной поддержки QoS в организации это сделать нужно. Иначе нет никакого особого смысла тщательно классифицировать трафик, потом помечать, а потом на первом же коммутаторе в процессе отправки в uplink валить всё в одну кучу с логикой FIFO.

Когда деревья были большими – 31 год назад, в 1981 году – в заголовке IP-пакета тоже, как и сейчас, было одинокое поле размером с байт и с названием ToS – Type of Service. То, что делать с этим полем, написали в RFC 791 и назвали IP Precedence. Делать предлагалось многое – помечать каждый пакет “уровнем важности” от 0 до 7, используя 3 бита этого поля, и добавлять пожелания вида “если есть возможность, отправь трафик по каналу с меньшей латентностью / большей надёжностью / большей номинальной полосой пропускания”, используя ещё 3 бита. Два бита отложили до лучших времён. Как-то так:

[
Бит приоритета N0 |
Бит приоритета N1 |
Бит приоритета N2 |
Бит задержки |
Бит толщины |
Бит надёжности |
Unused |
Unused
]

Потом ещё чуток подумали и задействовали дополнительный бит, добавив 4е пожелание – “чтобы через тот канал, который подешевле в плане денег” – RFC 1349 . Итого остался один незадействованный бит, получилось 8 уровней приоритета трафика плюс 4 бита и их комбинации влияли на выбор “при прочих равных условиях”.

Предполагалось, что этого хватит. Стало так:

[
Бит приоритета N0
Бит приоритета N1
Бит приоритета N2
Бит нежелательной задержки
Бит толщины (канала)
Бит надёжности
По любви или за деньги
Unused
]

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

Модель IP Precedence была простой и предполагала, что весь трафик можно разбить на 8 классов, между которыми будет простое логическое соотношение вида “5 всегда важнее, чем 4”, плюс добавить некоторые пожелания. Все задачи по реализации этой схемы (чтобы одинаковый трафик метили одинаковыми IP Precedence, и обрабатывали схожим способом, плюс учитывали пожелания в виде 4х дополнительных бит) ложились на администратора. Впоследствии 4 бита “пожеланий” практически перестали использовать, и схема IP Precedence превратилась в минималистичную “8 глобальных типов трафика, выстроеных по важности”. Их можно трактовать и называть по-разному, логики работы это не поменяет, например так:

  • 0 – То, что называется Best Effort – трафик, который будет доставляться по остаточному принципу, когда будет возможность. Best Effort – это не “наилучшим способом”, это “хотели, как лучше, а как получится – посмотрим”. Обычно 0 – это весь неклассифицированный трафик.
  • 1 – Распознаный трафик. Например, HTTP, SMB, FTP. Это не значит, что этот трафик какой-то особенный. Он хотя бы “понятно какой”.
  • 2 – Приоритетный трафик. Например, RDP – при перекачке файла будет не очень хорошо, если начнёт тормозить работа с терминальным сервером.

Но 14 лет назад, в 1998 году, парни из EMC и Cisco решили, что не хватит, и придумали ощутимо более гибкую систему, притом сразу и для ToS в IPv4, и для его потомка – Traffic Class в IPv6 . Назвали её Differentiated Services. Система задействовала уже все 8 бит поля ToS – 6 на идентификатор класса (DSCP), и 2 на сигнализацию в случае заторов в сети (ECN). Как раз этот, более современный способ, и используется в политиках Windows. Метки, заданные по DSCP, более многочисленные, поэтому разбиваются на несколько групп.

DSCP-метки группы CS – Class Selector’ы

Этот механизм, который описан в RFC 2474 , нужен для совместимости с предыдущей реализацией. В этом случае используется только 3 первые бита из 6, остальные устанавливаются в нули, поэтому с точки зрения расположения данных внутри байта ToS, CS’ы задают те же самые биты, что и IP Precedence. Соответственно, CS’ов будет 8 штук – от CS0 до CS7, и выглядеть они будут предсказуемо:

  • CS0 = 000 000
  • CS1 = 001 000
  • CS2 = 010 000
  • CS3 = 011 000
  • CS4 = 100 000
  • CS5 = 101 000
  • CS6 = 110 000
  • CS7 = 111 000

DSCP-метки группы AF – Assured Forwarding

Эти метки, логика которых есть в RFC 2597 , уже интереснее – они содержат по 2 значения, x и y, поэтому записываются в читаемом варианте как AFxy.

Первое значение – x – будет обозначать класс трафика. Классов определено 4 – от единицы до четвёрки. Их иногда называют словами – единица = бронзовый, двойка = серебряный, тройка = золотой, четвёрка = платиновый. Это значение будет записано в первые 3 бита. Во вторые будет записан y – он будет обозначать приоритет при необходимости сброса трафика. Будет определено три значения – единица будет обозначать low drop priority, двойка – medium, тройка – high. Это будет обозначать, что трафик одного и того же класса, но с разными приоритетами, будет при возникновении ситуации удаляться исходя из этого приоритета – вначале low, потом medium, потом high. Не запутайтесь – пакет с high drop priority сбрасывается последним, а с low – первым.

Если сеть не поддерживает 3 приоритета, то она должна поддерживать хотя бы 2 – тогда они выглядят как AFx1 в роли “менее важного” и AFx2-AFx3 в роли “более важного”.

Определены следующие значения:

  • AF11 = 001 010 (в десятичном варианте DSCP = 10)
  • AF12 = 001 100 (в десятичном варианте DSCP = 12)
  • AF13 = 001 110 (в десятичном варианте DSCP = 14)
  • AF21 = 010 010 (в десятичном варианте DSCP = 18)
  • AF22 = 010 100 (в десятичном варианте DSCP = 20)
  • AF23 = 010 110 (в десятичном варианте DSCP = 22)
  • AF31 = 011 010 (в десятичном варианте DSCP = 26)
  • AF32 = 011 100 (в десятичном варианте DSCP = 28)
  • AF33 = 011 110 (в десятичном варианте DSCP = 30)
  • AF41 = 100 010 (в десятичном варианте DSCP = 34)
  • AF42 = 100 100 (в десятичном варианте DSCP = 36)
  • AF43 = 100 110 (в десятичном варианте DSCP = 38)

DSCP-метка EF – Expedited Forwarding

Это – высший, “premium” класс обслуживания. Значение этой метки – 46, она обозначает трафик, который надо отправить самым лучшим по всем параметрам способом.

Вкратце всё. Как понятно, значение DSCP равное нулю будет обозначать Best-Effort доставку.

Специфика 802.11-сетей

У WiFi будет своя классификация типов трафика. Она будет называться WMM_AC (Wireless MultiMedia Access Categories) и будет достаточно несложной.

  1. Весь трафик с DSCP от 48 и выше относится к Voice-классу (обозначается как VO)
  2. Весь трафик с DSCP от 32 до 47 относится к Video-классу (обозначается как VI)
  3. Весь трафик с DSCP от 24 до 31 относится к BestEffort-классу (обозначается как BE)
  4. Весь трафик с DSCP от 8 до 23 относится к Background-классу (обозначается как BK)
  5. Весь трафик с DSCP от 0 до 7 относится (опять, да?) к BestEffort-классу (обозначается тоже как BE)

Соответственно, если Ваш WiFi-адаптер поддерживает WMM, то Вы можете включить это на уровне драйвера WiFi-адаптера, и он будет классифицировать свой исходящий трафик по 4м очередям в соответствии с “VO самый главный, VI второй, BE обычный, а BK – фоновый”. Если в Вашей сети политики QoS будут действовать на хосты с WiFi-адаптерами – учитывайте эти моменты при планировании политик.

Создаём политику

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

Применение политики на указанные приложения

Здесь есть три варианта – политика будет действовать на трафик от любого приложения, от указанного (указывается исполняемый модуль), или только на HTTP-ответы от наших приложений, подпадающих под нужные критерии. Третий вариант будет интересен, когда надо будет через политику ограничить полосу отдаваемого трафика для указанных HTTP-ресурсов – допустим, если мы хотим ограничить “отдаваемые с нас” видеофайлы, подпадающие под критерий вида “http://www..

Применение политики на указанные source/destination IPv4/IPv6-адреса

Достаточно тривиальные настройки – можно дополнительно ограничить применение политик QoS на трафик по L3-критерию. Замечу, что если в предыдущей настройке было выбрано “ограничить отдаваемый от нас в ответ на специфичный HTTP-запрос трафик”, то будет доступна только фильтрафия по destination, т.к. откуда исходит трафик и так понятно – от нас.

Применение политики на указанные source/destination TCP/UDP порты

Это просто – разве что не забудьте, что диапазон портов указывается через двоеточие (вида 1024:65535, а не 1024-65535).

В общем-то всё, политика создана. Можно создать и ещё. Как они будут взаимодействовать в случае пересечения?

Взаимодействие политик QoS

В случае, когда трафик будет подпадать под несколько политик, будет определяться “выигравшая”, приоритеты будут выставляться так:

  • Политики QoS уровня пользователя перекрывают политики QoS уровня компьютера
  • Если определена политика, влияющая на конкретное приложение, и есть политика, под которую тот же трафик подпадает, но уже по сетевым критериям (адреса, номера портов), то выигрывает политика приложения
  • Политика, действующая на настройку более конкретно, перекроет общую. Это отнесётся и к подпадению сразу под две политики сетевого плана (подпасть под 192.168.1.0/24 важнее, чем под 192.168.0.0/16), и под “указанный явно порт лучше чем диапазон портов”, и под “более конкретный URL вида http://host/video/* лучше, чем http://host/*”

Зафиксируйте также интересную штуку – на серверных ОС Microsoft настройки QoS применяются всегда, а на клиентских – только в случае, когда сетевой интерфейс для исходящего трафика распознан как Domain Network. Это сделано специально, чтобы ограничения, действующие на ноутбук сотрудника при работе в корп.сети, не ограничивали бы по скорости и качеству его работу во внешних сетях. Это не влияет на безопасность, поэтому не является ослаблением оной; это лишь ограничения исходящего трафика.

Теперь – о глобальных настройках “движка QoS” – сетевого компонента QoS Packet Scheduler.

Данные параметры будут указывать общесистемные (не относящиеся к конкретному типу трафика и сетевому интерфейсу) настройки этого механизма. Располагаться они будут в соответствующей ветке групповых политик:

Параметр QoS Packet Scheduler – Limit Outstanding Packets

Данная настройка указывает максимальный размер системной очереди исходящих пакетов. Т.е. если пакет назначен для отправки через конкретный интерфейс (найден next-hop и назначен egress interface), он считается “отправляемым” по данному критерию, и увеличивает этот счётчик на единицу. Как только пакет будет успешно отправлен (заметьте – именно пакет, этот счётчик работает только для L3-пакетов), счётчик уменьшится. Технически в Windows L3-очереди для конкретного интерфейса нет, есть только L2 (т.е. из кадров), поэтому если суммарное количество таких вот “ожидающих” пакетов будет больше указанного числа, то новый пакет не будет отправлен вообще, пока очередь не будет разгружена. От размера пакета это не зависит, считаются “головы” ожидающих пакетов. Пакеты всех сетевых протоколов (и IPv4, и IPv6) считаются вместе, т.е. при значении по умолчанию – 65536 – поставить “в очередь” по, допустим, 35 тысяч пакетов IPv4 и IPv6 не получится – 65537й пакет любого протокола будет отброшен по логике tail drop (т.е. не помещён в очередь).

Я бы рекомендовал помнить, что исходящий пакет лимитируется кадровым MTU, которое в случае включения поддержки Jumbo Frames на сетевых интерфейсах будет 9КБ, поэтому даже дефолтная настройка, по сути, выделяет буфер для ожидающих пакетов суммарным размером до 589.824.000 байт, т.е. более полугигабайта (в случае обычного сетевого интерфейса 10/100Мбит – поменьше, 98.304.000 байт). Этого более чем достаточно на все случаи жизни (просто подумайте, что это за приложение такое, которое будет пытаться впихнуть в исходящую очередь интерфейса столько пакетов), поэтому зачастую целесообразно это значение уменьшать – уменьшается объём RAM, занимаемый служебными структурами драйвера QoS Packet Scheduler. Я ставлю на хосты, у которых виртуальные сетевые интерфейсы и не-интенсивная нагрузка (например, DC/GC) значение в 4096, и footprint драйвера QoS проседает.

Для узлов, к которым подключается много внешних сессий, плюс настроен QoS, плюс отдаваемые данные состоят из мелких пакетов (голос, торренты) это значение может быть увеличено. Общая логика, думается, понятна – есть память и потребность отдавать очень много мелких пакетов – вполне можно и в ограничение в 65536 упереться.

Параметр QoS Packet Scheduler – Set Timer Resolution

В случае, когда настроено ограничение какого-либо типа исходящего трафика по полосе (“шейпинг”), данный параметр указывает то, какой минимальный квант времени используется для расчётов.

Логика проста – допустим, используется стандартное значение в 10ms. Это значит, что секунда делится на 100 равных частей. Допустим, есть правило, которое ограничивает сервис X по отправке до 5МБайт в секунду. Следовательно, 100 раз в секунду будет запускаться счётчик, который будет измерять трафик, фактически отправленный подпадающим под правило сервисом. Если этот трафик за учётный период в 10ms наберёт 50КБ, то больше он отправляться не будет и начнёт уходить в “ожидающую” очередь, про которую рассказано в предыдущем пункте. Ну а когда начнётся новый период в 10ms, опять сможет быть отправлено 50КБ.

Соответственно, чем это число больше, тем шейпинг будет “грубее”, но меньше будет тратиться процессорных ресурсов. А чем число меньше, тем более “гладко” будет уходить трафик – заметьте, это всё относится только к трафику, подпадающему под правила QoS, трафик без маркировки это затрагивать не будет. Имеет смысл увеличить разрешение таймера (до 2ms например) в случае, когда есть правило по отправке голосового трафика – это положительно повлияет на качество исходящего потока.

Параметр QoS Packet Scheduler – Limit Reservable Bandwidth

Самая страшная настройка – сколько про неё сказок рассказывается уже лет 10, просто ппц. Легенды о том, что “венда по дефолту 20% сетевой полосы пропускания просто так зажимает”, я слышал в десятках вариантов – от безобидного “потому что они тупые там и не могут нормально сетевуху полностью нагрузить” до шизоидного “это чтобы данные с винта пользователя в Пентагон отправлять”.

На самом деле всё просто. Это – суммарное количество резервируемой всеми правилами QoS, работающими на данной системе, полосы пропускания. Т.е. если оно 20%, а у Вас сетевой интерфейс в 100 Мбит, то как бы Вы не старались, и не создавали, например, 3 правила, каждое из которых резервирует под приложение по 15 мегабит (3*15=45), то Вы никак больше 20 мегабит не займёте в результате своим приоритезированным трафиком.

Грубо говоря, это значение показывает, сколько “QoS’овского классифицированного” трафика в процентах от номинальной полосы пропускания интерфейса может быть. Целесообразно, если Вы пишете политики QoS, увеличить это число например до 90%. Почему не до 100? Потому что в случае, когда по каким-то причинам весь трафик некоего приложения станет супер-приоритетным, и полоса резервирования будет 100%, другой трафик будет вечно проигрывать соревнование за очерёдность отправки, и система не сможет делать свои задачи – грубо говоря, например, отвалятся всякие служебные протоколы типа IKE, который ходит по 500му порту UDP, NTP, DNS, и прочие. Вот от этого идёт страховка, когда делают не 100, а не от того, что “винда просто так берёт и часть сети не использует”.

Quality Windows Audio Video Experience (qWave) – что такое и нужен ли

Данный компонент, появившийся со времен NT 6.0, представляет из себя клиент-серверный сервис, технически работающий по портам 2177 TCP/UDP, и нужный для того, чтобы две службы на разных хостах могли “договориться” о том, какому потоку данных какой приоритет предоставить. Сервер, инициирующий передачу данных, имеет роль initiator, принимающая сторона имеет роль sink. Суть в том, что приложение, которое сможет “заказать” у qWave уровень качества для своих данных, должно быть соответствующим способом разработано (например, использовать для установки сессии функционал.NET). qWave, по сути, будет перекрывать своими настройками, если они есть, системные. Плюсов у интегрированного подхода много – qWave автоматически определяет, поддерживается ли 802.1p не только на конечных хостах, но и на промежуточном сетевом оборудовании, позволяет гибко и на ходу переопределять резервируемую полосу для нужного трафика, а также постоянно отслеживать такие параметры, как latency канала (QoS Packet Scheduler этого делать не может), периодически отправляя тестовые пакеты и “промеряя” качество линии между двумя хостами.

Напомню – “просто так” установить этот компонент можно, но нужен софт, который будет уметь запросить у него функционал. По умолчанию qWave не работает, т.к. если бы он работал, то он тратил бы ресурсы сети на тестовые измерения качества канала.

Вместо заключения

Надеюсь, что эта краткая экскурсия в достаточно интересный мир управления трафиком была интересна и будет Вам полезна на практике.

QoS - тема большая. Прежде чем рассказывать про тонкости настроек и различные подходы в применении правил обработки трафика, имеет смысл напомнить, что такое вообще QoS.

Quality of Service (QoS) - технология предоставления различным классам трафика различных приоритетов в обслуживании.

Во-первых, легко понять, что любая приоритезация имеет смысл только в том случае, когда возникает очередь на обслуживание. Именно там, в очереди, можно «проскользнуть» первым, используя своё право.
Очередь же образуется там, где узко (обычно такие места называются «бутылочным горлышком», bottle-neck). Типичное «горлышко» - выход в Интернет офиса, где компьютеры, подключенные к сети как минимум на скорости 100 Мбит/сек, все используют канал к провайдеру, который редко превышает 100 МБит/сек, а часто составляет мизерные 1-2-10МБит/сек. На всех.

Во-вторых, QoS не панацея: если «горлышко» уж слишком узкое, то часто переполняется физический буфер интерфейса, куда помещаются все пакеты, собирающиеся выйти через этот интерфейс. И тогда новопришедшие пакеты будут уничтожены, даже если они сверхнужные. Поэтому, если очередь на интерфейсе в среднем превышает 20% от максимального своего размера (на маршрутизаторах cisco максимальный размер очереди составляет как правило 128-256 пакетов), есть повод крепко задуматься над дизайном своей сети, проложить дополнительные маршруты или расширить полосу до провайдера.

Разберемся с составными элементами технологии

(дальше под катом, много)

Маркировка. В полях заголовков различных сетевых протоколов (Ethernet, IP, ATM, MPLS и др.) присутствуют специальные поля, выделенные для маркирования трафика. Маркировать же трафик нужно для последующей более простой обработки в очередях.

Ethernet. Поле Class of Service (CoS) - 3 бита. Позволяет разделить трафик на 8 потоков с различной маркировкой

IP. Есть 2 стандарта: старый и новый. В старом было поле ToS (8 бит), из которого в свою очередь выделялись 3 бита под названием IP Precedence. Это поле копировалось в поле CoS Ethernet заголовка.
Позднее был определен новый стандарт. Поле ToS было переименовано в DiffServ, и дополнительно выделено 6 бит для поля Differencial Service Code Point (DSCP), в котором можно передавать требуемые для данного типа трафика параметры.

Маркировать данные лучше всего ближе к источнику этих данных. По этой причине большинство IP-телефонов самостоятельно добавляют в IP-заголовок голосовых пакетов поле DSCP = EF или CS5. Многие приложения также маркируют трафик самостоятельно в надежде, что их пакеты будут обработаны приоритетно. Например, этим «грешат» пиринговые сети.

Очереди.

Даже если мы не используем никаких технологий приоритезации, это не значит, что не возникает очередей. В узком месте очередь возникнет в любом случае и будет предоставлять стандартный механизм FIFO (First In First Out). Такая очередь, очевидно, позволит не уничтожать пакеты сразу, сохраняя их до отправки в буфере, но никаких преференций, скажем, голосовому трафику не предоставит.

Если хочется предоставить некоторому выделенному классу абсолютный приоритет (т.е. пакеты из этого класса всегда будут обрабатываться первыми), то такая технология называется Priority queuing . Все пакеты, находящиеся в физическом исходящем буфере интерфейса будут разделены на 2 логических очереди и пакеты из привилегированной очереди будут отсылаться, пока она не опустеет. Только после этого начнут передаваться пакеты из второй очереди. Эта технология простая, довольно грубая, её можно считать устаревшей, т.к. обработка неприоритетного трафика будет постоянно останавливаться. На маршрутизаторах cisco можно создать
4 очереди с разными приоритетами. В них соблюдается строгая иерархия: пакеты из менее привилегированных очередей не будут обслуживаться до тех пор, пока не опустеют все очереди с более высоким приоритетом.

Справедливая очередь (Fair Queuing ). Технология, которая позволяет каждому классу трафика предоставить одинаковые права. Как правило не используется, т.к. мало даёт с точки зрения улучшения качества сервиса.

Взвешенная справедливая очередь (Weighted Fair Queuing, WFQ ). Технология, которая предоставляет разным классам трафика разные права (можно сказать, что «вес» у разных очередей разный), но одновременно обслуживает все очереди. «На пальцах» это выглядит так: все пакеты делятся на логические очереди, используя в
качестве критерия поле IP Precedence. Это же поле задаёт и приоритет (чем больше, тем лучше). Дальше, маршрутизатор вычисляет, пакет из какой очереди «быстрее» передать и передаёт именно его.

Считает он это по формуле:

DT=(t(i)-t(0))/(1+IPP)

IPP - значение поля IP Precedence
t(i) - Время, требуемое на реальную передачу пакета интерфейсом. Можно вычислить, как L/Speed, где L - длина пакета, а Speed - скорость передачи интерфейса

Такая очередь по умолчанию включена на всех интерфейсах маршрутизаторов cisco, кроме интерфейсов точка-точка (инкапсуляция HDLC или РРР).

WFQ имеет ряд минусов: такая очередизация использует уже отмаркированные ранее пакеты, и не позволяет самостоятельно определять классы трафика и выделяемую полосу. Мало того, как правило уже никто не маркирует полем IP Precedence, поэтому пакеты идут немаркированные, т.е. все попадают в одну очередь.

Развитием WFQ стала взвешенная справедливая очередь, основанная на классах (Class-Based Weighted Fair Queuing, CBWFQ ). В этой очереди администратор сам задаёт классы трафика, следуя различным критериям, например, используя ACL, как шаблон или анализируя заголовки протоколов (см.NBAR). Далее, для этих классов
определяется «вес» и пакеты их очередей обслуживаются, соразмерно весу (больше вес - больше пакетов из этой очереди уйдёт в единицу времени)

Но такая очередь не обеспечивает строгого пропускания наиболее важных пакетов (как правило голосовых или пакетов других интерактивных приложений). Поэтому появился гибрид Priority и Class-Based Weighted Fair Queuing - PQ-CBWFQ , также известный как, Low Latency Queuing (LLQ) . В этой технологии можно задать до 4х приоритетных очередей, остальные классы обслуживать по механизму CBWFQ

LLQ - наиболее удобный, гибкий и часто используемый механизм. Но он требует настройки классов, настройки политики и применения политики на интерфейсе.

Таким образом процесс предоставления качества обслуживания можно поделить на 2 этапа:
Маркировка . Поближе к источникам.
Обработка пакетов . Помещение их в физическую очередь на интерфейсе, подразделение на логические очереди и предоставление этим логическим очередям различных ресурсов.

Технология QoS - достаточно ресурсоёмкая и весьма существенно грузит процессор. И тем сильнее грузит, чем глубже в заголовки приходится залезать для классификации пакетов. Для сравнения: маршрутизатору гораздо проще заглянуть в заголовок IP пакета и проанализировать там 3 бита IPP, нежели раскручивать поток практически до уровня приложения, определяя, что за протокол идёт внутри (технология NBAR)

Для упрощения дальнейшей обработки трафика, а также для создания так называемой «области доверия» (trusted boundary), где мы верим всем заголовкам, относящимся к QoS, мы можем делать следующее:
1. На коммутаторах и маршрутизаторах уровня доступа (близко к клиентским машинам) ловить пакеты, раскидывать их по классам
2.В политике качестве действия перекрашивать заголовки по-своему или переносить значения QoS-заголовков более высокого уровня на нижние.

Например, на маршрутизаторе ловим все пакеты из гостевого WiFi домена (предполагаем, что там могут быть не управляемые нами компьютеры и софт, который может использовать нестандартные QoS-заголовки), меняем любые заголовки IP на дефолтные, сопоставляем заголовкам 3 уровня (DSCP) заголовки канального уровня (CoS),
чтобы дальше и коммутаторы могли эффективно приоритезировать трафик, используя только метку канального уровня.

Настройка LLQ

Настройка очередей заключается в настройке классов, затем для этих классов надо определить параметры полосы пропускания и применить всю созданную конструкцию на интерфейс.

Создание классов:

class-map NAME
match?

access-group Access group
any Any packets
class-map Class map
cos IEEE 802.1Q/ISL class of service/user priority values
destination-address Destination address
discard-class Discard behavior identifier
dscp Match DSCP in IP(v4) and IPv6 packets
flow Flow based QoS parameters
fr-de Match on Frame-relay DE bit
fr-dlci Match on fr-dlci
input-interface Select an input interface to match
ip IP specific values
mpls Multi Protocol Label Switching specific values
not Negate this match result
packet Layer 3 Packet length
precedence Match Precedence in IP(v4) and IPv6 packets
protocol Protocol
qos-group Qos-group
source-address Source address
vlan VLANs to match

Пакеты в классы можно рассортировывать по различным атрибутам, например, указывая ACL, как шаблон, либо по полю DSCP, либо выделяя конкретный протокол (включается технология NBAR)

Создание политики:

policy-map POLICY
class NAME1
?

bandwidth Bandwidth
compression Activate Compression
drop Drop all packets
log Log IPv4 and ARP packets
netflow-sampler NetFlow action
police Police
priority Strict Scheduling Priority for this Class
queue-limit Queue Max Threshold for Tail Drop
random-detect Enable Random Early Detection as drop policy
service-policy Configure Flow Next
set Set QoS values
shape Traffic Shaping


Для каждого класса в политике можно либо выделить приритетно кусок полосы:

policy-map POLICY
class NAME1
priority?

Kilo Bits per second
percent % of total bandwidth


и тогда пакеты этого класса смогут всегда рассчитывать как минимум на этот кусок.

Либо описать, какой «вес» имеет данный класс в рамках CBWFQ

policy-map POLICY
class NAME1
bandwidth?

Kilo Bits per second
percent % of total Bandwidth
remaining % of the remaining bandwidth


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

Возникает резонный вопрос: а откуда маршрутизатор знает ВСЮ полосу? Ответ банален: из параметра bandwidth на интерфейсе. Даже если он не сконфигурирован явно, какое то его значение обязательно есть. Его можно посмотреть командой sh int.

Также обязательно помнить, что по умолчанию вы распоряжаетсь не всей полосой, а лишь 75%. Пакеты, явно не попавшие в другие классы, попадают в class-default. Эту настройку для дефолтного класса можно задать явно

policy-map POLICY
class class-default
bandwidth percent 10

(UPD, спасибо OlegD)
Изменить максимальную доступную полосу с дефолтных 75% можно командой на интерфейсе

max-reserved-bandwidth

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

Создаётся впечатление, что политика будет выдавать классам не больше, чем написано. Однако, такая ситуация будет лишь в том случае, если все очереди наполнены. Если же какая то пустует, то выделенную ей полосу наполненные очереди поделят пропорционально своему «весу».

Работать же вся эта конструкция будет так:

Если идут пакеты из класса с указанием priority, то маршрутизатор сосредотачивается на передаче этих пакетов. Причем, т.к. таких приоритетных очередей может быть несколько, то между ними полоса делится пропорционально указанным процентам.

Как только все приоритетные пакеты закончились, наступает очередь CBWFQ. За каждый отсчёт времени из каждой очереди «зачёрпывается» доля пакетов, указанная в настройке для данного класса. Если же часть очередей пустует, то их полоса делится пропорционально «весу» класса между загруженными очередями.

Применение на интерфейсе:

int s0/0
service-policy POLICY

А что же делать, если надо строго рубить пакеты из класса, выходящие за дозволенную скорость? Ведь указание bandwidth лишь распределяет полосу между классами, когда очереди загружены.

Для решения этой задачи для класса трафика в политике есть технология

police conform-action [действие] exceed-action [действие]

Она позволяет явно указать желаемую среднюю скорость (speed), максимальный «выброс», т.е. количество передаваемых данных за единицу времени. Чем больше «выброс», тем больше реальная скорость передачи может отклоняться от желаемой средней. Также указываются: действие для нормального трафика, не превышающего
указанную скорость и действие для трафика, превысившего среднюю скорость. Действия могут быть такими

police 100000 8000 conform-action?

drop drop packet
exceed-action action when rate is within conform and
conform + exceed burst
set-clp-transmit set atm clp and send it
set-discard-class-transmit set discard-class and send it
set-dscp-transmit set dscp and send it
set-frde-transmit set FR DE and send it
set-mpls-exp-imposition-transmit set exp at tag imposition and send it
set-mpls-exp-topmost-transmit set exp on topmost label and send it
set-prec-transmit rewrite packet precedence and send it
set-qos-transmit set qos-group and send it
transmit transmit packet

Часто возникает также и другая задача. Предположим, что надо ограничить поток, идущий в сторону соседа с медленным каналом.

Дабы точно предсказать, какие пакеты дойдут до соседа, а какие будут уничтожены в силу загруженности канала на «медленной» стороне, надо на «быстрой» стороне создать политику, которая бы заранее обрабатывала очереди и уничтожала избыточные пакеты.

И тут мы сталкиваемся с одной очень важной вещью: для решения этой задачи надо сэмулировать «медленный» канал. Для этой эмуляции не достаточно только раскидать пакеты по очередям, надо ещё сэмулировать физический буфер «медленного» интерфейса. У каждого интерфейса есть скорость передачи пакетов. Т.е. в единицу времени каждый интерфейс может передать не более, чем N пакетов. Обычно физический буфер интерфейса рассчитывают так, чтобы обеспечить «автономную» работу интерфейсу на несколько единиц вермени. Поэтому физический буфер, скажем, GigabitEthernet будет в десятки раз больше какого-нибудь интерфейса Serial.

Что же плохого в том, чтобы запомнить много? Давайте рассмотрим подробно, что произойдёт, в случае если буфер на быстрой передающей стороне будет существенно больше буфера принимающей.

Пусть для простоты есть 1 очередь. На «быстрой» стороне сэмулируем малую скорость передачи. Это значит, что попадая под нашу политику пакеты начнут накапливаться в очереди. Т.к. физический буфер большой, то и логическая очередь получится внушительной. Часть приложений (работающих через ТСР) поздно получат уведомление о том, что часть пакетов не получена и долго будут держать большой размер окна, нагружая сторону-приемник. Это будет происходить в том идеальном случае, когда скорость передачи будет равна или меньше скорости приёма. Но интерфейс принимающей стороны может быть сам загружен и другими пакетами
и тогда маленькая очередь на принимающей стороне не сможет вместить всех пакетов, передаваемых ей из центра. Начнутся потери, которые повлекут за собой дополнительные передачи, но в передающем буфере ведь ещё останется солидный «хвост» ранее накопленных пакетов, которые будут передаваться «вхолостую», т.к. на принимающей стороне не дождались более раннего пакета, а значит более позние будут просто проигнорированы.

Поэтому для корректного решения задачи понижения скорости передачи к медленному соседу физический буфер тоже надо ограничить.

Делается это командой

shape average

Ну а теперь самое интересное: а как быть, если мне помимо эмуляции физического буфера надо внутри него создать логические очереди? Например, выделить приоритетно голос?

Для это создаётся так называемая вложенная политика, которая применяется внутри основной и делит на логические очереди то, что в неё попадает из родительской.

Пришло время разобрать какой-нибудь залихватский пример на основе приведенной картинки.

Пусть мы собираеися создать устойчиво работающие голосовые каналы через интернет между CO и Remote. Для простоты пусть сеть Remote (172.16.1.0/24) имеет только связь с СО (10.0.0.0/8). Скорость интерфейса на Remote - 1 Мбит/сек и выделяется 25% этой скорости на голосовой трафик.

Тогда для начала нам надо выделить приоритетный класс трафика с обеих сторон и создать политику для данного класса. На СО дополнительно создадим класс, описывающий трафик между офисами

class-map RTP
match protocol rtp

Policy-map RTP
class RTP
priority percent 25

Ip access-list extended CO_REMOTE
permit ip 10.0.0.0 0.255.255.255 172.16.1.0 0.0.0.255

Class-map CO_REMOTE
match access-list CO_REMOTE


На Remote поступим иначе: пусть в силу дохлости железа мы не можем использовать NBAR, тогда нам остаётся только явно описать порты для RTP

ip access-list extended RTP
permit udp 172.16.1.0 0.0.0.255 range 16384 32768 10.0.0.0 0.255.255.255 range 16384 32768

Class-map RTP
match access-list RTP

Policy-map QoS
class RTP
priority percent 25

policy-map QoS
class CO_REMOTE
shape average 1000000
service-policy RTP


и применить политику на интерфейсе

int g0/0
service-policy output QoS

На Remote установим параметр bandwidth (в кбит/сек) в соответствие со скоростью интерфейса. Напомню, что именно от этого параметра будет считаться 25%. И применим политику.

int s0/0
bandwidth 1000
service-policy output QoS

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

На более умных L2/3 коммутаторах на маршрутизируемых интерфейсах (т.е. либо на interface vlan, либо если порт выведен со второго уровня командой no switchport ) применяется та же конструкция, что работает и на маршрутизаторах, а если порт или весь коммутатор работает в режиме L2 (верно для моделей 2950/60), то там для класса трафика можно использовать только указание police, а priority или bandwidth не доступны.

Причем часто червь распространяется по нужным для работы портам (ТСР/135,445,80 и др.) Просто закрыть на маршрутизаторе эти порты было бы опрометчиво, поэтому гуманнее поступать так:

1. Собираем статистику по сетевому трафику. Либо по NetFlow, либо NBARом, либо по SNMP.

2. Выявляем профиль нормального трафика, т.е. по статистике, в среднем, протокол HTTP занимает не больше 70%, ICMP - не больше 5% и т.д. Такой профиль можно либо создать вручную, либо применив накопленную NBARом статистику. Мало того, можно даже автоматически создать классы, политику и применить на интерфейсе
командой autoqos :)

3. Далее, можно ограничить для нетипичного сетевого трафика полосу. Если вдруг и подцепим заразу по нестандартному порту, большой беды для шлюза не будет: на загруженном интерфейсе зараза займет не более выделенной части.

4. Создав конструкцию (class-map - policy-map - service-policy ) можно оперативно реагировать на появление нетипичного всплеска трафика, создавая вручную для него класс и сильно ограничивая полосу для этого класса.

«Кос » — это технология, обеспечивающая выделение предпочтений высокоприоритетному сетевому трафику, устройству или критичному приложению, необходимая для работы Ип-телефонов , видеоконференций, потокового видео, CITRIX-Приложений, телефонии Voip и подобного чувствительного к задержкам трафика.
Упрощённо говоря, с её помощью приложения наподобие Скайпа, сетевого медиа-проигрывателя, (VLC-Player какой-нибудь), коллективной онлайн игры, смогут получить достаточную полосу пропускания (скорость) при любой степени загрузки Интернет-канала, тем самым не будут "тупить" и "лагать".


Видео: основы Qos, как это работает.

QoS оперирует некоторыми параметрами передачи данных, вот основные:
Полоса пропускания Bandwidth , или (BW ). Данный параметр определяет ширину канала, описывает номинальную пропускную способность среды передачи. Может измеряться в: Бит/сек (bps), Кбит/сек (kbps), Мбит/сек (mbps).
Delay: описывает величину возможной задержки передачи пакета по сети.
Jitter: флуктуации (диапазон возможных задержек) при передаче сетевых пакетов.
Packet Loss: этот параметр задает количество пакетов, которые отбрасываются в процессе передачи.

МЕТОДЫ ВНЕДРЕНИЯ в вычислительную сеть

Технология QoS может обеспечиваться различными способами. Каждый способ имеет свои особенности, преимущества и недостатки. Рассмотрим их подробнее.
1) Резервирование. Суть метода резервирования сетевых ресурсов заключена в его названии. Непосредственно перед передачей информации происходит запрос и резервирование необходимой приложению полосы пропускания. Реализуется посредством технологии интегрированного обслуживания IntServ вместе с протоколом RSVP .
2) Приоритезация. Трафик делится на классы различного приоритета. Некоторые классы, например видео, имеют приоритет над голосом. Технология осуществляется посредством дифференцированного обслуживания DiffServ .
3) Перемаршрутизация. Механизм пересылает трафик по резервному маршруту при перегрузке основного.

Вам также может быть интересен следующий материал. Как работает приоритезация в беспроводных сетях .

глобальные виды Qos

УРОВЕНЬ 2

CoS (Class of service) - технология второго уровня, простая схема разметки, реализуемая посредством протокола 802 1P . Для реализации данной технологии необходимо задействовать протокол 802 1Q (TRUNK + VLAN), после чего станет возможным активация CoS посредством 802_1P. Стандарт 802_1P маркирует кадры Ethernet 2го уровня трехбитным полем CoS, принимающем значения от 0 до 7.
Метод поддерживается бюджетными коммутаторами сиско, наподобие Каталист Экспресс Series 500, старшими Catalysts 2900 Switches. Такой вид приоритезации используется внутри локальной сети на втором уровне модели OSI и не выходит за пределы ЛВС. Для корректной работы QoS уровня 2 требуется включить и сконфигурировать его поддержку на всех коммутаторах сети.

Классификация и маркировка трафика на третьем уровне

Qos третьего уровня может называться ToS (от Type of service) . Маршрутизационное оборудование работает с IP пакетами (Layer 3), в заголовке у которых под приоритезационные цели выделено специальное поле: «Tos» объемом один байт. Поле может быть заполнено разными классификаторами.
1) Трехбитный IPP (IP PRECEDENCE) может принимать значения 0-7.
2) Шестибитный DSCP (модель: DiffServ) более гибок, позволяет выставить значение с 0 по 63.
Используется для приоритезации ИП трафика, (третий уровень OSI); настраивается на маршрутизаторах. Поддерживается всеми моделями маршрутизаторов Сиско Systems, включая бюджетную серию ЦИСКО ИСР 870. В КоСе 3-го уровня могут использоваться две схемы разметки пакетов. Internet Protocol Precedence — простая система приоритезации. В ней заголовок АЙ-ПИ пакета размечается значениями с 0 по 7.
Ip Dscp (differentiated services code point) - глубокая дифференцированная приоритезация с точкой отсчета. Она позволяет более гибко настраивать приоритеты для нужд конвергентной сети.

Каким сетям критически необходим QoS?

Полная поддержка "качества обслуживания" необходима при проектировании корпоративных мультисервисных, конвергентных сетей, где планируется перегон критичного голосового, видео трафика по каналу совместно с данными. Особенно остро возникает необходимость корректного внедрения QoS при прогоне на роутере конвергентного трафика через каналы WAN ограниченной пропускной способности (DSL, ISDN, E-3) как вариант, при межофисном обмене в сетях VPN между удаленными офисами.

Или если в организации один провайдер, через который клиентские рабочие станции выходят в Сеть Internet; и через него же осуществляется проброс портов на внутренние Web- и почтовые сервера из Интернета. В такой ситуации необходимо произвести настройку службы качества сервиса с целью выдать бОльший приоритет входящим соединениям, а если внутренних серверов несколько, то грамотно распределить приоритеты между ними.

какие устройства и в какой мере поддерживают QoS

Ip телефоны Cisko требуют комплексной поддержки КоСа (АйПи DSCP). Хотя есть модели (Циско 7920), поддерживающие базовый набор параметров «QBSS», что может выражаться в сужении универсальности, гибкости при работе данного устройства в сложной сетевой среде.