Quality of Service (QoS, дословно «качество обслуживания») — общее название технологий приоритизации трафика для обеспечения передачи данных, имеющих первоочередное значение (более важны в условиях ограниченных ресурсов сети).
Таким может быть, например, голосовой трафик (VoIP, SIP) или потоковое видео (UDP). В то время как TCP и прочие лояльные к задержкам и потерям IMAP, FTP, WEB будут ждать своей очереди
Качество обслуживания определяется как мера производительности передающей системы, отражающая качество передачи и доступность услуг. Доступность услуг является важнейшим элементом QoS. Для успешного внедрения QoS необходимо обеспечить максимально высокую доступность сетевой инфраструктуры. (Конечной цели высокой доступности соответствует уровень 99,999 процентов,
QoS не увеличивает скорость канала. QoS даёт приоритет чему-то важному, пожертвовав не очень важным
Зачем нужен QoS?
QoS нужен для того, чтобы критичные данные в любом случае были доставлены. Выставляя приоритет для определенного типа трафика (отдавая им предпочтение), оставшиеся будут ожидать своего обслуживания, как менее приоритетные. Особенно это важно при нестабильном канале или проблемах с пограничным оборудованием. Как работает схема ниже мы разберём чуть позже:
Можно только представить какого качества связь будет на видеоконференции при канале 10 мбит/с, если в это время ушлый сотрудник будет качать нового Бэтмена с торрент-трекера, а это значит много открытых сокетов и TCP-соединений.
При забитом напрочь канале без QoS в первую очередь страдает видео и аудио-потоки, поэтому QoS — гарант передачи критически важного трафика в первую очередь.
Подытожим. QoS может:
- Приоритизировать разные типы трафика, основываясь на протоколе и интерфейсе
- Управлять пропускной способностью канала, путем установки определенных значений в заголовки L2 и L3
- Перемаркировать трафик и изменить приоритет в потоке
- Отправлять трафик наибольшего приоритета при проблемах в сети на основе данных планировщика
- Определять потери пакетов на раннем этапе
- etc…
Простая аналогия
На дороге все равны. Ну или почти. Представьте, что маркированный трафик QoS — это скорая помощь, у которой есть приоритет над обычными водителями. Несмотря на то, что дорога не увеличивается в ширине и на машине медицинского персонала на стоит турбированный мотор от Nissan Skyline GT-R, Скорая помощь доедет до пункта назначения быстрее просто потому, что у неё приоритет на дороге — ей не нужно ждать своей очереди, как другим автомобилистам (ip-пакетам), попавшим в пробку (буфер)
В реальности выглядит примерно так:
Ниже по статье будут пояснения.
Основные параметры, по которым оценивается QoS
Бизнес ожидает от сетевого стека того, что он будет просто хорошо выполнять свою несложную функцию — доставлять битовый поток от одного хоста до другого: без потерь и за предсказуемое время. Все эти метрики позволяет контролировать и не допускать критичных значений технология QoS.
Delay (Задержка)
Тут всё конкретно — задержка при маршрутизации данных от отправителя до получателя. Иногда вместо неё можно увидеть RTT (Round Trip Time) — путь туда-сюда. При команде ping оценивается именно RTT. Не совсем одно и тоже, но понятия близкие. Задержки особенно критичны для real-time трафика (та же самая телефония)
Сама задержка складывается из нескольких…задержек:
- Serialization Delay (Задержка сериализации) — время, необходимое порту для передачи пакета для следующего линка. Зависит от скорости интерфейса и от того, как быстро маршрутизатор сможет преобразовать пакеты в сигнал для дальнейшей передачи.
- Propagation Delay (Задержка передачи сигнала в среде) — это время, необходимое для того, чтобы сигнал достиг пункта назначения. Его можно рассчитать как отношение между длиной канала и скоростью распространения в конкретной среде.
- Задержки, вносимые QoS — ожидание пакетов в очередях (Queuing Delay) и последствия шейпинга (Shaping Delay)
- Processing Delay (Задержка обработки пакетов) — время, необходимое маршрутизаторам для обработки заголовка пакета. Во время обработки пакета маршрутизаторы могут проверять наличие ошибок на уровне битов в пакете, возникших во время передачи, а также определять, где находится следующий пункт назначения пакета. После этой узловой обработки маршрутизатор направляет пакет в очередь, где может произойти дальнейшая задержка (задержка в очереди Qos)
Jitter (Джиттер)
Задержка между доставкой последовательных пакетов — это Джиттер. Если точнее, то это величина изменения времени между прибытием пакетов, от чего они могут не попадать в буфер и не приняться.
Предположим, что пакет всё-таки принят. Тогда какая нам разница какой у нас джиттер? Равномерно приходящий поток важен для real-time трафика, например, для телефонии. Такие пакеты называются чанками и они должны последовательно и равномерно поступать на интерфейс, чтобы не было «кваканья» и «чавканья» при разговоре.
Packet loss (Потери пакетов)
Количество потерянных пакетов. Характеристика показывает сколько пакетов не дошло от отправителя к получателю данных по различным причинам.
Протокол UDP не будет запрашивать повторную отправку. TCP — будет, т.к. обязан гарантировать доставку отправленных пакетов.
Bandwidth (Полоса пропускания)
Она же ширина канала (или ширина пропускания канала) — скорость передачи данных внутри сети по которой передаётся пакет, т.е. объём данных между двумя точками в сети за промежуток времени. Выражается в байтах в секунду. Входящий трафик обозначается как ingress, исходящий — egress.
Обычно полосу пропускания не выделяют, как самостоятельную характеристику качества сети, однако, проблемы с полосой пропускания могут вылиться в задержку, джиттер и потери пакетов поскольку фактически её недостаток выливается в три указанные выше
Три модели обеспечения QoS
Best Effort — никакой гарантии качества. Все равны, поэтому нет нормы по задержке, полосе пропускания или джиттеру. Это состоянии по умолчанию, т.е. весь трафик равнозначно важен и никакого приоритета нет. Если канал достаточно толстые, то Best Effort вполне себе уместен
IntServ — гарантия качества для каждого потока. Резервирование ресурсов от источника до получателя. Не рассматриваем.
DiffServ — нет никакого резервирования. Каждый узел сам определяет, как обеспечить нужное качество. Именно тут трафик делится на классы и его мы будем рассматривать далее
Как это работает?
QoS работает путем маркирования пакетов Ethernet (поле которые в 802.1Q заголовке, в части, называемой 802.1p) или IP (поле ToS) специальными метками.
Для начала запомним несколько понятий:
- Marking — Разметка пакетов и кадров
- Scheduler — Планировщик используется для определения свойств выходных очередей. Эти свойства включают пропускную способность интерфейса, назначенную очереди, размер буфера памяти, выделенного для хранения пакетов, приоритет очереди. Интерфейс отдельного устройства имеет несколько очередей, назначенных для временного хранения пакетов перед передачей
- Classifier — Классификатор связывает пакеты с классом пересылки и приоритетом потери, а пакеты связываются с выходной очередью на основе класса пересылки
- Queuing — Формирование очереди для отправки нескольких потоков с разными метками (через один интерфейс)
- Shaping — Сбрасывание лишнего трафика для этих очередей
Итак, маршрутизатор в сети получает пакеты во входящий интерфейс и начинает дифференцировать трафик в зависимости от модели поведения (Behavior или Per-Hop Behavior) — анализировать и классифицировать (Classification) трафик по группе сервиса (классы обслуживания — Class of Service). Если настроен ограничитель он может ограничить трафик или присвоить ему другой класс.
Чтобы измерить количество трафика этого класса попало на интерфейс используется измерение (Metering). Далее, в зависимости от лимита происходит окрашивание (Coloring): Зеленый (всё ок), жёлтый (вышел за рамки), красный (вышел за рамки на максималках). Здесь же может срабатывать полисер (Policer) — он смотрит на цвет и решает, что делать дальше с пакетом — дропнуть его или пропустить (а может и перемаркировать)
Дальше пакеты томятся в очередях, ожидая ресурсов передачи (Queuing). Для каждого класса сервиса выделена отдельная очередь. На выходе из очереди их ждет шейпер (Shaper), который режет трафик до установленного значения. Почти как полисер, с единственной разницей, что шейпер старается не отбрасывать пакеты и не лезет в заголовки пакета, в то время как полисер их либо режет, либо маркирует по новой.
В конце планировщик (Scheduler) выводит пакеты из очередей и передаёт их в интерфейс. Если настроен формирователь, то маршрутизатор сформирует трафик с учетом заданной скорости.
Также может быть настроена перемаркировка — устройство меняет маркировку значения поля DSCP (или просто DS) заголовка IP-адреса, чтобы следующее устройство, которое получит пакет, знало, как его классифицировать.
А что с Ethernet?
Изначально протокол Ethernet (в чистом виде) не поддерживал функцию приоритезации трафика. Но ничто не стоит на месте, поэтому для маркировки класса трафика (CoS) в среде Ethernet используется — стандарт тегирования IEEE 802.1Q.
Стандарт помещает внутрь фрейма тег, который передает информацию о принадлежности трафика к определенному VLAN (про кадр Ethernet мы подробно писали здесь). В этом теге есть специальное 3-битовое поле под метку приоритета (Priority) класса обслуживания (CoS) IEEE 802.1p:
Классы и модели
У провайдеров могут быть уже готовые классы трафика, например:
- Real-time — голосовой трафик, видео
- Business Critical — трафик ERP (SAP, Oracle)
- Best Effort — интернет, передача данных
Но все они основаны на модели поведения (PHB). PHB на сетевом узле реализуется, например, с помощью обслуживания очередей на исходящем интерфейсе на основе weighted round-robin (WRR). Какие бывают модели?
Default Forwarding (DF) — это и есть тот самый Best Effort. Стандартная пересылка пакета, если классу трафика не назначена никакая модель
Assured Forwarding (AF) — она же «гарантированная пересылка». здесь уже лучше, но задержки всё равно могут быть. Гарантия здесь только полосы и ничего более.
Expedited Forwarding (EF) — экстренная пересылка. Модель для приложений, боящихся дилея и джиттера, но при этом они не занимают огромное количество пропускной способности канала.
Class Selector (CS) — непосредственно классы. Они могут быть CS0, CS1, CS2, CS3, CS4, CS5, CS6, CS7. Самые стойкие — это CS 6 и 7: не должны допускать задержек и потерь даже при экстремальных нагрузках на канал.
Всё это классы IPP — изначально в поле ToS в IP-пакете были выделены 3 бита, которые были названы IP Precedence (IPP) — т.е. это старый формат.
Позже был определен новый формат поля ToS и появился DSCP.
Сетевые узлы, которые трактуют поле ToS как IPP, прочитают только первые три бита из DSCP и трафик будет обслужен в соответствии с приоритетами IPP. Хотя узлы, которые работают с использованием DiffServ, могут, получив пакет с таким же значением DSCP, обрабатывать его дополнительно.
А это уже рекомендованные имена классов и соответствующие значения DSCP:
Про QoS понятно. А что такое H-QoS?
Hierarchical Quality of Service (H-QoS) — иерархическое качество обслуживания использует механизм планирования иерархической очереди для обеспечения пропускной способности различных служб для пользователей в модели дифференцированных служб (DiffServ)
Обычное QoS выполняет одноуровневое планирование трафика. Один порт может различать только службы, но не пользователей. H-QoS реализует иерархическое планирование на основе нескольких уровней очередей и дифференцирует трафик разных пользователей и служб, чтобы обеспечить улучшенную гарантию качества обслуживания.
Разница между H-QoS и QoS в том, что H-QoS не является отдельным решением. Он лишь добавляет иерархическое планирование, основанное на обычном QoS для улучшенного управления трафиком.
Иерархическое планирование HQoS обычно использует древовидную структуру планирования. Два уровня планировщиков могут использоваться для реализации трехуровневой структуры планирования (например, двухуровневое планирование сервис-пользователь)
Предположим, что есть обычные пользователи и VIP-пользователи. Оба типа пользователей имеют услуги передачи данных, голоса и видео. HQoS обеспечивает двухуровневое планирование: планирование на основе пользователей и планирование на основе служб.
Планирование на основе пользователей обеспечивает приоритетную отправку пакетов пользователей VIP. Планирование на основе служб выполняется для различных служб каждого пользователя, чтобы обеспечить предпочтительную обработку важных служб, что аналогично одноуровневому планированию обычного QoS.