Найти в Дзене
УЦ Микротест

Качество обслуживания трафика QoS

Оглавление

Своим экспертным мнением делится Андрей Пономарев, инструктор Учебного Центра «Микротест»

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

Для более наглядного описания проблемы, давайте представим офис. Мы приходим на работу и надеемся на спокойное утро за чашкой кофе. А что на самом деле? А на самом деле ваш коммутатор, как перегруженный муравейник, трещит по швам от трафика. IP-телефония заикается, файлы с NAS ползут со скоростью бронепоезда, а кто-то (не будем показывать пальцем!) залипает в YouTube, потребляя гигабайты трафика в 4K. Знакомо, правда?

И в этот момент перед нами встает очень важный вопрос: как сделать так, чтобы важные звонки не обрывались, а критичные файлы переносились вовремя? Вариант с ковровой блокировкой всего что можно есть, но он совершенно не гибкий и в перспективе может и нам самим встать боком. Есть более элегантное решение – приоритезация трафика. И в представленной серии статей как раз и пойдет речь о том, как заставить коммутатор раскладывать весь трафик по разным виртуальным корзинкам (или, умным словом, очередям) и обрабатывать очереди в соответствии с их важностью.

Записаться на курс по Eltex - https://training-microtest.ru/courses/?use_filter=Y&Search=eltex
Записаться на курс по Eltex - https://training-microtest.ru/courses/?use_filter=Y&Search=eltex

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

1. BEST EFFORT SERVICE
В этом режиме нет никакой классификации трафика и, соответственно, никакого разделения на всякие очереди не используется. Весь трафик передается в рамках одного общего потока и обрабатывается соответственно. Если канал внезапно кончится под резким всплеском активности в сети - терять мы будем все без разбора: и ютуб и созвон с начальством. Подобный подход широко распространен в наших сетях и предполагает, что никаких политик не настроено и весь трафик обрабатывается одинакого.

2. INTEGRATED SERVICE (IntServ)
Данный режим подразумевает, что все оборудование под нашим управлением следует каким-то единым заранее заданным правилам. Нам нужно выделить для каждого потока данных отдельный набор ресурсов, причем проделать это надо на каждом сетевом устройстве на всей протяженности маршрута следования. Данный подход не получил широкого распространения и ближайшим примером его использования являются сети с использованием технологии MPLS совместно с RSVP-TE. Эти технологии и протоколы - тема для отдельного цикла статей и здесь мы про них говорить не будем.

3. DIFFERENTIATED SERVICES (DiffServ)
А вот этот режим уже интересует нас куда больше. Он подразумевает, что каждое устройство обрабатывает трафик самостоятельно (опираясь на свои локальные правила). В данном случае нам необходимо каким-то образом подкрасить каждый передаваемый пакет (или кадр) в рамках сетевого взаимодействия. И уже опираясь на "цвет" передаваемого пакета совершать над ним какие-то действия и определять приоритет его обработки.

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

Записаться на курс по Eltex - https://training-microtest.ru/courses/?use_filter=Y&Search=eltex
Записаться на курс по Eltex - https://training-microtest.ru/courses/?use_filter=Y&Search=eltex

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

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

Наша задача — не пускать всех подряд, а проводить жесткий фейс-контроль.

Список VIP-персон (проходим без очереди):

Господин Телефонный Звонок — он должен пройти мгновенно, иначе разговор прервется.

Серьёзный Господин Видеоконференция — тоже важная птица, без него совещание встанет.

Курьер с Секретными Документами (передача файлов) — его посылка должна быть доставлена целой и невредимой.

А теперь — список тех, кого мы можем завернуть или заставить подождать:

Толпа ребят, желающих посмотреть котиков на YouTube — постоят в сторонке, пока не пройдут VIP-персоны.

Любители соцсетей — их мемы могут подождать.

Любые подозрительные типы (неопознанный или ненужный трафик) — им сразу говорят: "Вас нет в списке".

Раньше вышибала, когда начиналась давка, просто слепо хватал и выкидывал кого попало. Но теперь у нас есть система! Мы даем ему специальную инструкцию — смотреть на бирки (поля в заголовках пакетов), которые есть у каждого гостя. По этой бирке сразу видно, кто важный, а кто — так, зайти развлечься. Так мы сохраняем порядок и пускаем только тех, кто действительно нужен для бизнеса. Вот как работает приоритизация!

Итак, как мы уже сказали, сетевое устройство должно получить к себе на вход поток пакетов, проанализировать их и на основе какого-то поля (то, что я ранее назвал "цветом"), принять решение о том, какое действие необходимо над этим пакетом совершить. А что это за такие поля и где мы их можем найти? Давайте разберем этот вопрос подробнее.

Если говорить про канальный уровень и поток Ethernet - кадров, то для работы механизмов DiffServ необходимо, чтобы наш трафик был тегированный (т.е. чтобы в наш кадр была добавлена метка VLAN). Соответственно, формат кадра с меткой VLAN (их принято называть кадрами 802.1q) представлен на картинке ниже.

-3

Интересующее нас поле называется PCP или Priority Code Point. Это трехбитное поле позволяет установить для кадра одно из 8 доступных значений - от 0 до 7. Соответственно, если трафик идет с меткой 0, то он является наименее приоритетным и обрабатывается по остаточному принципу. А вот если установлена метка 7, то такой трафик считается наиболее приоритетным и должен обрабатываться в первую очередь.

Если же мы посмотрим на IP заголовок на сетевом уровне, то там тоже есть отдельное поле, которое позволяет разделить трафик на различные уровни обслуживания. Это поле называется DSCP или Differentiated Services Code Point. Это поле присутствует как в IPv4, так и в IPv6 пакетах и работает идентично.

Поле DSCP содержит в себе 6 бит и позволяет куда более гибко управлять трафиком, чем поле PCP. Формат этого поля для IPv4 представлен на рисунке ниже.

-4

Мы вернемся к более подробному разговору про формирование кода DSCP в следующей статье, а пока давайте зафиксируем важные для нас моменты:

Устройство определяет, каким образом обрабатывать кадр/пакет данных на основе специального поля, которое находится или в заголовке L2 802.1q кадра или в заголовке L3 IP пакета.

В кадре 802.1q поле называется PCP или Priority Code Point

В IP пакете поле называется DSCP или Differentiated Services Code Point

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

Записаться на курс по Eltex - https://training-microtest.ru/courses/?use_filter=Y&Search=eltex
Записаться на курс по Eltex - https://training-microtest.ru/courses/?use_filter=Y&Search=eltex

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

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

Классификация (Classification)

Окрашивание (Coloring)

Ограничение трафика отбрасыванием (Policing)

Создание очередей (Queuing)

Обработка очередей (Scheduler)

Ограничение трафика буферизацией (Shaping)

Давайте поймем что делает каждая из вышеописанных функций.

Классификация

Всего в рамках QoS принято говорить о возможности разделить весь существующий трафик на 8 разных классов (именно эти номера классов и содержатся в полях PCP и DSCP). Соответственно, для каждого отдельного класса мы с вами можем создать отдельную уникальную модель поведения коммутатора (т.е. как он этот трафик будет обрабатывать).

И вот мы с вами получаем несколько разных сценариев. В первом к нам на вход устройства приходит пакет, в котором уже содержится код DSCP и мы этому коду полностью доверяем. В таком случае, этот трафик сохранит свое значение класса и будет обрабатываться в соответствии с настройками ограничения трафика, которые мы для этого класса сделали. Такая модель классификации называется Behavior Aggregate.

Второй сценарий - к нам на какой-то интерфейс приходит поток трафика и весь этот трафик мы хотим обозначить кодом какого-то из 8 доступных нам классов. В таком случае на этом интерфейсе поле, например, DSCP будет либо перезаписано либо заполнено с нуля. Такой метод классификации называется интерфейсным методом.

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

На этом этапе весь наш трафик классифицирован, посчитан объем пришедшего трафика и мы готовы приступать к дальнейшим шагам.

Окрашивание

На основе информации о классе трафика и пришедшем объеме мы добавляем нашим пришедшим пакетам один из трех цветов - зеленый, желтый или красный.

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

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

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

Ограничение трафика отбрасыванием (Policing)

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

-6

Давайте рассмотрим пример работы Policing на примере. Предположим, что объем трафика в единицу времени, который поступает к нам на коммутатор, формирует график, представленный на картинке выше. Если мы включим Policing по ограничению входящей пропускной способности, то весь трафик выше лимита будет краситься в красный цвет и отбрасываться. Такой подход называется Строгим ограничением (Hard Policing).

Есть у более мягкий подход. Вместо того, чтобы безапелляционно отбрасывать весь трафик выше установленного лимита, мы можем этот трафик "понизить" в звании. Т.е. перезаписать, например, поле DSCP установив в него более низкое значение приоритета обработки трафика. Это действие называется перемаркировкой, а сам подход уже считается мягким - Soft Policing.

Ограничение трафика буферизацией (Shaping)

Это альтернативный механизм, который может использоваться вместо Ограничения трафика отбрасыванием (Policing). Главное отличие тут в том, что сетевое устройство не будет отбрасывать все, что выше лимита. Вместо этого, весь избыточный трафик будет помещаться в буфер и с постоянной скоростью изыматься из буфера и отправляться в дальнейшую обработку. Таким образом, если в буфере есть свободное место, то мы получим ограничение скорости трафика (ведь трафик достается из буфера со скоростью установленного ограничения), но вместо отбрасывания мы будем увеличивать задержку.

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

Тут можно сделать вывод, что для трафика, который критичен к задержкам (например, голосовой трафик) имеет смысл использовать Ограничение трафика отбрасыванием (Policing). А вот для трафика, который чувствителен к потерям данных (например, передача данных до NAS) имеет смысл использовать Ограничение трафика буферизацией (Shaping).

Создание очередей (Queuing)

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

Смысл создания очередей в том, чтобы для каждой отдельной очереди выделить отдельный приоритет (или даже отдельный подход) при обработке пакета в исходящем направлении. Тут важно помнить, что мы сначала один сплошной поток данных делим на виртуальные очереди, а затем все эти очереди снова собираем в один поток, но уже на выходе.

Обработка очередей (Scheduler)

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

Итоги!

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

Для решения этой проблемы существуют специальные поля в заголовках кадра и пакета (PCP и DSCP), которые позволяют на основе значения поля привязать к данному пакету уникальную модель поведения коммутатора при его обработке. Модели поведения настраиваются администраторомм и существуют изолированно на устройстве.

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

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

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

-7

Готовы к практике? Записывайтесь на курсы по Eltex уже сейчас!
https://training-microtest.ru/courses/?use_filter=Y&Search=eltex