Сайт о телевидении

Сайт о телевидении

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

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

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 ) можно оперативно реагировать на появление нетипичного всплеска трафика, создавая вручную для него класс и сильно ограничивая полосу для этого класса.

Рубрика «Консультация» 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.

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

Телефонная связь через интернет возможна благодаря SIP-протоколу, который решает вопросы взаимодействия мультимедийных протоколов (видео/аудио). Более подробно этот процесс описан в статье . Когда один из собеседников говорит, звук его голоса кодируется и разбивается на пакеты, которые в течение разговора передаются другому устройству.

Но никто не использует интернет только ради IP-телефонии, поэтому через один канал передаются различные виды данных. Для роутера все они условно одинаковы, и такое “равноправие” иногда приводит к проблемам со связью.

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

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

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

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

Источник изображения VAS Experts

Настройка QoS: что нужно учитывать

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

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

Поэтому обращайте внимание на характеристики роутера и максимальный размер очереди обработки пакетов. Например, на маршрутизаторах Cisco он составляет примерно 128–256 пакетов. Допустимо, если эта очередь превышает до 20% от его пропускной способности. Но если больше - то это повод заняться дизайном сети и прокладкой дополнительных маршрутов.

Настройка QoS

Чтобы избежать заторов в канале, мы должны “пометить” VoIP-данные и дать понять роутеру, что они важны для нас в первую очередь. Существует два варианта приоретизации трафика.

1. Выставление приоритета в веб-интерфейсе роутера

Не существует универсального способа настройки QoS для роутеров. Все зависит от конкретного устройства. Вот, например, как этот процесс описан в инструкции по настройке QoS для роутера TP-Link . В основном, приоритет назначается по протоколу - в случае с телефонией нам в первую очередь важен SIP/ RTP. RTP (Real-time Transport Protocol) - протокол, используемый для передачи звука.

Также приоретизацию можно настраивать по портам. В этом случае устройство будет понимать, что все данные, поступающие с конкретного порта, нужно пропускать в первую очередь. Так, при использовании программы для связи (диалера) VoIP-трафик будет поступать с порта 5060. Также доступна приоретизация по типу трафика. Выбор вида приоретизации зависит от количества трафика, его типа и настроек приложений, которые используются для связи и т. д.

2. Выставление приоритета в приложении для связи

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

В этом случае QoS настраивается не в устройстве для интернет-соединения, а в программе, с помощью которой вы звоните. Для этого нужно зайти в ее сетевые настройки и прописать нужные значения для пакетов с аудиоданными. Вот например, как это описано в инструкции для Zoiper .

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

В качестве примера разберем настройку приоритетизации в приложении Zoiper. Для этого нужно найти в папке программы для связи конфигурационный файл. Например, для Zoiper это «Config.xml». С помощью редактора, совместимого с XML, найдите нужные строки и впишите в них значение EF, CS или AF . Выбор нужного значения зависит от возможностей роутера - более подробно свойства значений описаны в статье на Википедии , которая включает в себя список стандартов.

В настройках нужно указать значения для параметров:

EF

EF

Вот как выглядит содержимое пакета после настройки QoS в программе Zoiper. На скриншоте видны: протокол, его заголовок и значение, которое мы ввели. EF означает Expedited forwarding (англ. “ускоренная пересылка”) - т. е. в данном случае наивысший приоритет:

Единственный минус этого способа - хоть большинство роутеров и могут понимать приоритет по заголовку, но не все. Детали настройки зависят от устройства и сервиса, которые вы используете. Но инструкцию несложно найти, достаточно загуглить “как настроить QoS для N”.

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

01.12.2016 | Владимир Хазов

Не весь интернет-трафик одинаково важен. Онлайн-видео без замираний картинки или звонок по Skype без заикания голоса важнее, чем загрузка большого файла с помощью торрент-клиента. Функция обеспечения качества обслуживания (QoS) маршрутизатора, шейпера или системы глубокого анализа трафика (DPI) позволяет расставлять приоритеты, какой трафик важнее, и предоставлять ему большую часть полосы пропускания.

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

Что такое качество обслуживания (QoS )

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

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

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

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

Маршрутизатор делит полосу поровну между всеми, не выделяя приоритета какому-либо виду трафика.

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

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

Как включить QoS

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

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

Первый шаг: определить цель

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

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

Оператор связи использует QoS для достижения более глобальных целей:

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

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

Второй шаг: определить скорость интернета

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

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

Чтобы получить реальную картину, вам необходимо закрыть на компьютере все приложения, которые создают нагрузку на сеть, подключить его к роутеру медным кабелем. Технология беспроводной сети Wi-Fi, особенно если она работает не по современным протоколам Wireless N или Wireless AC, может быть узким местом полосы пропускания. Измерения могут показать скорость в 40 Мб/с вместо доступных 75 Мб/с именно из-за ограничений скорости беспроводной передачи данных.

Зайдите на сайт www.speedtest.net и нажмите кнопку «Начать проверку». Полученный результат необходимо перевести из «Мбит/с» в «Кбит/с», так как настройки QoS чаще всего задаются в этих единицах. Это можно сделать, умножив полученные значения на 1000.

В данном примере мы получили входящую скорость 42 900 Кбит/с, а исходящую – 3980 Кбит/с. Именно эти значения можно распределять между пользователями и приложениями в сети.

Третий шаг: включить QoS на роутере

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

В большинстве случаев вам потребуется зайти на страницу управления устройством (набрать в браузере его адрес, чаще всего это 192.168.1.1), ввести логин и пароль администратора, которые указаны в руководстве пользователя, и перейти в раздел NAT сетевых настроек, вкладку QoS. Выберите Enable напротив функции Start QoS, порт для применения правил – WAN (порт соединения с провайдером), настройки входящей и исходящей скорости (downlink и uplink) должны указываться в размере 85–90 % от измеренной во втором шаге.

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

Как приоритизировать трафик

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

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

Если же роутер позволяет производить ручные настройки приоритетов, вам необходимо задать их «вилки» в процентах от общей полосы пропускания:

  • Maximum: 60–100 %
  • Premium: 25–100 %
  • Express: 10–100 %
  • Standard: 5–100 %
  • Bulk: 1–100 %

Эти параметры определяют значение пропускной способности для конкретного устройства или приложения. Например, установив для приложения Maximum, вы назначаете ему использовать 60 % от полосы пропускания во время загрузки сети и 100 %, если сеть полностью доступна. Если установить «Магистральный», то, когда сеть свободна, приложение может использовать любую скорость полосы пропускания, но, если появляется нагрузка, оно получит лишь 1 %.

Хотим напомнить, что к приоритизации надо подходить с четким пониманием того, что вы хотите ограничить.

Варианты приоритизации

1. Приоритет сервиса или приложения

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

2. Приоритет интерфейса

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

3. Приоритет устройств по IP-адресу

Вы можете назначить более высокий приоритет определенному устройству вашей сети по его IP-адресу (статическому или зарезервированному динамическому), тем самым обеспечить его более высокой скоростью доступа по сравнению с другими.

4. Приоритет устройств по MAC-адресу

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

Тест и оценка

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

Убедиться в правильности работы правил можно запустив сервисы с высоким и низким приоритетом и сравнив их скорости, или запустить speedtest на устройствах сети с разными приоритетами и посмотреть, которое из них покажет больший результат.

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


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

Рассмотрение вопроса подобной сложности лучше всего начинать с простых и понятных примеров настройки оборудования, например, фирмы Cisco. Представленный здесь материал, безусловно, не может конкурировать с www.cisco.com. Наша задача – начальная классификация огромного объема сведений в компактном виде с целью облегчения понимания и дальнейшего изучения.

1. Определения и термины.

Определений термина QoS настолько много, что мы выберем единственно верное - правильно, от Cisco: "QoS – QoS refers to the ability of a network to provide better service to selected network traffic over various underlying technologies…". Что можно литературно перевести как: "QoS – способность сети обеспечить необходимый сервис заданному трафику в определенных технологических рамках".

Необходимый сервис описывается многими параметрами, отметим среди них самые важные.

Bandwidth (BW) - полоса пропускания, описывает номинальную пропускную способность среды передачи информации, определяет ширину канала. Измеряется в bit/s (bps), kbit/s (kbps), mbit/s (mbps).

Delay - задержка при передаче пакета.

Jitter - колебание (вариация) задержки при передаче пакетов.

Packet Loss – потери пакетов. Определяет количество пакетов, отбрасываемых сетью во время передачи.

Чаще всего для описания пропускной способности канала проводят аналогию с водопроводной трубой. В ее рамках Bandwidth – это ширина трубы, а Delay – длина.

Время передачи пакета через канал Transmit time [s] = packet size / bw .

Например, найдем время передачи пакета размером 64 байта по каналу шириной 64 килобита/c:

Packet size = 64*8=512 (bit) Transmit Time = 512/64000 = 0.008 (c)

2. Сервисные модели QoS.

2.1. Best Effort Service.

Негарантированная доставка. Абсолютное отсутствие механизмов QoS. Используются все доступные ресурсы сети без какого-либо выделения отдельных классов трафика и регулирования. Считается, что лучшим механизмом обеспечения QoS является увеличение пропускной способности. Это в принципе правильно, однако некоторые виды трафика (например, голосовой) очень чувствительны к задержкам пакетов и вариации скорости их прохождения. Модель Best Effort Service даже при наличии больших резервов допускает возникновение перегрузок в случае резких всплесков трафика. Поэтому были разработаны и другие подходы к обеспечению QoS.

2.2. Integrated Service (IntServ).

Integrated Service (IntServ, RFC 1633) - модель интегрированного обслуживания. Может обеспечить сквозное (End-to-End) качество обслуживания, гарантируя необходимую пропускную способность. IntServ использует для своих целей протокол сигнализации RSVP. Позволяет приложениям выражать сквозные требования к ресурсам и содержит механизмы обеспечения данных требований. IntServ можно кратко охарактеризовать как резервирование ресурсов (Resource reservation).

2.3. Differentiated Service (DiffServ).

Differentiated Service (DiffServ, RFC 2474/2475) - Модель дифференцированного обслуживания. Определяет обеспечение QoS на основе четко определенных компонентов, комбинируемых с целью предоставления требуемых услуг. Архитектура DiffServ предполагает наличие классификаторов и формирователей трафика на границе сети, а также поддержку функции распределения ресурсов в ядре сети в целях обеспечения требуемой политики пошагового обслуживания (Per-Hop Behavior - PHB). Разделяет трафик на классы, вводя несколько уровней QoS. DiffServ состоит из следующих функциональных блоков: граничные формирователи трафика (классификация пакетов, маркировка, управление интенсивностью) и реализаторы PHB политики (распределение ресурсов, политика отбрасывания пакетов). DiffServ можно кратко охарактеризовать как приоритезацию трафика (Prioritization).

3. Базовые функции QoS.

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

3.1. Классификация и разметка (Classification and Marking).

Классификация пакетов (Packet Classification) представляет собой механизм соотнесения пакета к определенному классу трафика.

Другой не менее важной задачей при обработке пакетов является маркировка пакетов (Packet Marking) - назначение соответствующего приоритета (метки).

В зависимости от уровня рассмотрения (имеется в виду OSI) эти задачи решаются по-разному.

3.1.1. Layer 2 Classification and Marking.

Коммутаторы Ethernet (Layer 2) используют протоколы канального уровня. Протокол Ethernet в чистом виде не поддерживает поле приоритета. Поэтому на Ethernet портах (Access Port) возможна лишь внутренняя (по отношению к коммутатору) классификация по номеру входящего порта и отсутствует какая-либо маркировка.

Более гибким решением является использование стандарта IEEE 802.1P, который разрабатывался совместно с 802.1Q. Иерархия отношений здесь следующая: 802.1D описывает технологию мостов и является базовой для 802.1Q и 802.1P. 802.1Q описывает технологию виртуальных сетей (VLAN), а 802.1P обеспечение качества обслуживания. В целом, включение поддержки 802.1Q (транк с виланами), автоматически дает возможность использования 802.1P. Согласно стандарту используются 3 бита в заголовке второго уровня, которые называются Class of Service (CoS). Таким образом, CoS может принимать значения от 0 до 7.

3.1.2. Layer 3 Classification and Marking.

Маршрутизирующее оборудование (Layer 3) оперирует IP пакетами, в которых под цели маркировки предусмотрено соответствующее поле в заголовке - IP Type of Service (ToS) размером один байт. ToS может быть заполнен классификатором IP Precedence или DSCP в зависимости от задачи. IP precedence (IPP) имеет размерность 3 бита (принимает значения 0-7). DSCP относится к модели DiffServ и состоит из 6 бит (значения 0-63).

Кроме цифровой формы, значения DSCP могут быть выражены с использованием специальных ключевых слов: доставка по возможности BE – Best Effort, гарантированная доставка AF – Assured Forwarding и срочная доставка EF – Expedited Forwarding. В дополнение к этим трем классам существуют коды селектора классов, которые добавляются к обозначению класса и обратно совместимы с IPP. Например, значение DSCP равное 26 можно записать как AF31, что полностью равнозначно.

MPLS содержит индикатор QoS внутри метки в соответствующих битах MPLS EXP (3 бита).

Промаркировать IP пакеты значением QoS можно разными способами: PBR, CAR, BGP.

Пример 1. Маркировка PBR

Policy Based Route (PBR) можно использовать с целью маркировки, производя ее в соответствующей подпрограмме (Route-map может содержать параметр set ip precedence):

!
interface FastEthernet0/0
ip policy route-map MARK
speed 100
full-duplex
no cdp enable
!
!
route-map MARK permit 10
match ip address 1
set ip precedence priority
!

На выходе интерфейса можно увидеть результат (например, программой tcpdump под unix):

# tcpdump -vv -n -i em0
... IP (tos 0x20 ...)

Пример 2. Маркировка CAR.

Механизм Committed Access Rate (CAR) разработан для ограничения скорости, однако дополнительно может и маркировать пакеты (параметр set-prec-transmit в rate-limit):

!
interface FastEthernet0/0
ip address 192.168.0.2 255.255.255.252
rate-limit input access-group 1 1000000 10000 10000 conform-action set-prec-transmit 3 exceed-action set-prec-transmit 3
no cdp enable
!
access-list 1 permit 192.168.0.0 0.0.0.255
!

#sh interface FastEthernet0/0 rate-limit

3.2. Управление перегрузками (Congestion Management). Механизм очередей.

3.2.1. Перегрузки (Congestions).

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

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

3.2.2. Layer 2 Queuing.

Физическое устройство классического коммутатора можно упрощенно представить следующим образом: пакет приходит на входной порт, обрабатывается механизмом коммутации, который решает, куда направить пакет, и попадает в аппаратные очереди выходного порта. Аппаратные очереди представляет собой быструю память, хранящую пакеты перед тем, как они попадут непосредственно на выходной порт. Далее, согласно определенному механизму обработки, пакеты извлекаются из очередей и покидают коммутатор. Изначально очереди равноправны и именно механизм обработки очередей (Scheduling) определяет приоритезацию. Обычно каждый порт коммутатора содержит ограниченное число очередей: 2, 4, 8 и так далее.

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

1. Изначально очереди равноправны. Поэтому предварительно необходимо их настроить, то есть определить очередность (или пропорциональность объема) их обработки. Чаще всего это делается привязкой приоритетов 802.1P к очередям.

2. Необходимо сконфигурировать обработчик очередей (Scheduler). Чаще всего используются взвешенный циклический алгоритм (Weighted Round Robin WRR) или строгая очередь приоритетов (Strict Priority Queuing).

3. Назначение приоритета поступающим пакетам: по входному порту, по CoS или, в случае дополнительных возможностей (Layer 3 switch), по каким-то полям IP.

Работает все это следующим образом:

1. Пакет попадает в коммутатор. Если это обычный Ethernet пакет (клиентский Access Port), то он не имеет меток приоритета и таковая может выставляться коммутатором, например, по номеру входного порта, если это нужно. Если входной порт транковый (802.1Q или ISL), то пакет может нести метку приоритета и коммутатор может ее принять или заменить на необходимую. В любом случае пакет на данном этапе попал в коммутатор и имеет необходимую разметку CoS.

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

3. Механизм обработки (Scheduling) извлекает пакеты из очередей согласно их приоритетам. Из высокоприоритетной очереди за единицу времени будет выдано на выходной порт больше пакетов, чем из низкоприоритетной.


3.2.3. Layer 3 Queuing.

Маршрутизирующие устройства оперируют пакетами на третьем уровне OSI (Layer 3). Чаще всего поддержка очередей обеспечивается программно. Это означает в большинстве случаев отсутствие аппаратных ограничений на их число и более гибкое конфигурирование механизмов обработки. Общая парадигма QoS Layer 3 включает маркировку и классификацию пакетов на входе (Marking & Classification), распределение по очередям и их обработку (Scheduling) по определенным алгоритмам.

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

Проведем классификацию Layer 3 QoS по методам обработки очередей.

3.2.3.1. FIFO.

Элементарная очередь с последовательным прохождением пакетов, работающая по принципу первый пришел – первый ушел (First In First Out - FIFO), имеющему русский эквивалент кто первый встал того и тапки. По сути, здесь нет никакой приоритезации. Включается по умолчанию на интерфейсах со скоростью больше 2 мбит/с.

3.2.3.2. PQ. Очереди приоритетов.

Priority Queuing (PQ) обеспечивает безусловный приоритет одних пакетов над другими. Всего 4 очереди: high, medium, normal и low. Обработка ведется последовательно (от high до low), начинается с высокоприоритетной очереди и до ее полной очистки не переходит к менее приоритетным очередям. Таким образом, возможна монополизация канала высокоприоритетными очередями. Трафик, приоритет которого явно не указан, попадет в очередь по умолчанию (default).

Параметры команды.
распределение протоколов по очередям:
priority-list LIST_NUMBER protocol PROTOCOL {high|medium|normal|low} list ACCESS_LIST_NUMBER
определение очереди по умолчанию:
priority-list LIST_NUMBER default {high|medium|normal|low}
определение размеров очередей (в пакетах):
priority-list LIST_NUMBER queue-limit HIGH_QUEUE_SIZE MEDIUM_QUEUE_SIZE NORMAL_QUEUE_SIZE LOW_QUEUE_SIZE

обозначения:
LIST_NUMBER – номер обработчика PQ (листа)
PROTOCOL - протокол
ACCESS_LIST_NUMBER – номер аксесс листа
HIGH_QUEUE_SIZE – размер очереди HIGH
MEDIUM_QUEUE_SIZE - размер очереди MEDIUM
NORMAL_QUEUE_SIZE - размер очереди NORMAL
LOW_QUEUE_SIZE - размер очереди LOW

Алгоритм настройки.

1. Определяем 4 очереди
access-list 110 permit ip any any precedence network
access-list 120 permit ip any any precedence critical
access-list 130 permit ip any any precedence internet
access-list 140 permit ip any any precedence routine

priority-list 1 protocol ip high list 110
priority-list 1 protocol ip medium list 120
priority-list 1 protocol ip normal list 130
priority-list 1 protocol ip low list 140
priority-list 1 default low


priority-list 1 queue-limit 30 60 90 120

2. Привязываем к интерфейсу

!
interface FastEthernet0/0
ip address 192.168.0.2 255.255.255.0
speed 100
full-duplex
priority-group 1
no cdp enable
!

3. Просмотр результата
# sh queueing priority

Current priority queue configuration:

List Queue Args - - 1 low default - 1 high protocol ip list 110 1 medium protocol ip list 120 1 normal protocol ip list 130 1 low protocol ip list 140

#sh interfaces fastEthernet 0/0

Queueing strategy: priority-list 1


Interface FastEthernet0/0 queueing strategy: priority


high/19 medium/0 normal/363 low/0

3.2.3.3. CQ. Произвольные очереди.

Custom Queuing (CQ) обеспечивает настраиваемые очереди. Предусматириваетмя управление долей полосы пропускания канала для каждой очереди. Поддерживается 17 очередей. Системная 0 очередь зарезервирована для управляющих высокоприоритетных пакетов (маршрутизация и т.п.) и пользователю недоступна.

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

Параметры команды.
определение полосы пропускания очередей:
queue-list LIST-NUMBER queue QUEUE_NUMBER byte-count
BYTE_COUT

определение размеров очередей:
queue-list LIST-NUMBER queue QUEUE_NUMBER limit QUEUE_SIZE

обозначения:
LIST-NUMBER – номер обработчика
QUEUE_NUMBER – номер очереди
BYTE_COUT – размер очереди в пакетах

Алгоритм настройки.

1. Определяем очереди
access-list 110 permit ip host 192.168.0.100 any
access-list 120 permit ip host 192.168.0.200 any

queue-list 1 protocol ip 1 list 110
queue-list 1 protocol ip 2 list 120
queue-list 1 default 3

queue-list 1 queue 1 byte-count 3000
queue-list 1 queue 2 byte-count 1500
queue-list 1 queue 3 byte-count 1000

Дополнительно можно установить размеры очередей в пакетах
queue-list 1 queue 1 limit 50
queue-list 1 queue 2 limit 50
queue-list 1 queue 3 limit 50

2. Привязываем к интерфейсу
!
interface FastEthernet0/0
ip address 192.168.0.2 255.255.255.0
speed 100
full-duplex
custom-queue-list 1
no cdp enable
!

3. Просмотр результата
#sh queueing custom

Current custom queue configuration:

List Queue Args - 1 3 default - 1 1 protocol ip list 110 1 2 protocol ip list 120 1 1 byte-count 1000 - 1 2 byte-count 1000 - 1 3 byte-count 2000 -

#sh interface FastEthernet0/0

Queueing strategy: custom-list 1

#sh queueing interface fastEthernet 0/0
Interface FastEthernet0/0 queueing strategy: custom

Output queue utilization (queue/count)
0/90 1/0 2/364 3/0 4/0 5/0 6/0 7/0 8/0
9/0 10/0 11/0 12/0 13/0 14/0 15/0 16/0

3.2.3.4. WFQ. Взвешенные справедливые очереди.

Weighted Fair Queuing (WFQ) автоматически разбивает трафик на потоки (flows). По умолчанию их число равно 256, но может быть изменено (параметр dynamic-queues в команде fair-queue). Если потоков больше, чем очередей, то в одну очередь помещается несколько потоков. Принадлежность пакета к потоку (классификация) определяется на основе TOS, протокола, IP адреса источника, IP адреса назначения, порта источника и порта назначения. Каждый поток использует отдельную очередь.

Обработчик WFQ (scheduler) обеспечивает равномерное (fair - честное) разделение полосы между существующими потоками. Для этого доступная полоса делится на число потоков и каждый получает равную часть. Кроме того, каждый поток получает свой вес (weight), с некоторым коэффициентом обратно пропорциональный IP приоритету (TOS). Вес потока также учитывается обработчиком.

В итоге WFQ а втоматически справедливо распределяет доступную пропускную способность, дополнительно учитывая TOS. Потоки с одинаковыми IP приоритетами TOS получат равные доли полосы пропускания; потоки с большим IP приоритетом – большую долю полосы. В случае перегрузок ненагруженные высокоприоритетные потоки функционируют без изменений, а низкоприоритетные высоконагруженные – ограничиваются.

Вместе с WFQ работает RSVP. По умолчанию WFQ включается на низкоскоростных интерфейсах.

Алгоритм настройки.
1. Помечаем трафик каким-либо способом (устанавливаем IP приоритет - TOS) или получаем его помеченным

2. Включаем WFQ на интерфейсе
interface FastEthernet0/0
fair-queue

interface FastEthernet0/0
fair-queue CONGESTIVE_DISCARD_THRESHOLD DYNAMIC_QUEUES

Параметры:
CONGESTIVE_DISCARD_THRESHOLD – число пакетов в каждой очереди, при превышении которого пакеты игнорируются (по умолчанию - 64)
DYNAMIC_QUEUES – число подочередей, по которым классифицируется трафик (по умолчанию - 256)

3. Просмотр результата
# sh queueing fair
# sh queueing interface FastEthernet0/0

3.2.3.5. CBWFQ.

Class Based Weighted Fair Queuing (CBWFQ) соответствует механизму обслуживания очередей на основе классов. Весь трафик разбивается на 64 класса на основании следующих параметров: входной интерфейс, аксесс лист (access list), протокол, значение DSCP, метка MPLS QoS.

Общая пропускная способность выходного интерфейса распределяется по классам. Выделяемую каждому классу полосу пропускания можно определять как в абсолютное значение (bandwidth в kbit/s) или в процентах (bandwidth percent) относительно установленного значения на интерфейсе.

Пакеты, не попадающие в сконфигурированные классы, попадают в класс по умолчанию, который можно дополнительно настроить и который получает оставшуюся свободной полосу пропускания канала. При переполнении очереди любого класса пакеты данного класса игнорируются. Алгоритм отклонения пакетов внутри каждого класса можно выбирать: включенное по умолчанию обычное отбрасывание (tail-drop, параметр queue-limit) или WRED (параметр random-detect). Только для класса по умолчанию можно включить равномерное (честное) деление полосы (параметр fair-queue).

CBWFQ поддерживает взаимодействие с RSVP.

Параметры команды.

критерии отбора пакетов классом:
class-map match-all CLASS
match access-group
match input-interface
match protocol
match ip dscp
match ip rtp
match mpls experimental

определение класса:

class CLASS
bandwidth BANDWIDTH
queue-limit QUEUE-LIMIT
random-detect

определение класса по умолчанию (default):

class class-default
bandwidth BANDWIDTH
bandwidth percent BANDWIDTH_PERCENT
queue-limit QUEUE-LIMIT
random-detect
fair-queue

обозначения:
CLASS – название класса.
BANDWIDTH – минимальная полоса kbit/s, значение независимо от bandwidth на интерфейсе.
BANDWIDTH_PERCENT - процентное соотношение от bandwidth на интерфейсе.
QUEUE-LIMIT – максимальное количество пакетов в очереди.
random-detect – использование WRED.
fair-queue – равномерное деление полосы, только для класса по умолчанию

По умолчанию абсолютное значение Bandwidth в классе CBWFQ не может превышать 75% значение Bandwidth на интерфейсе. Это можно изменить командой max-reserved-bandwidth на интерфейсе.

Алгоритм настройки.

1. Распределение пакетов по классам - class-map

class-map match-all Class1
match access-group 101

2. Описание правил для каждого класса - policy-map
policy-map Policy1
class Class1
bandwidth 100
queue-limit 20
class class-default
bandwidth 50
random-detect

3. Запуск заданной политики на интерфейсе - service-policy
interface FastEthernet0/0
bandwidth 256

4. Просмотр результата
#sh class Class1
#sh policy Policy1
#sh policy interface FastEthernet0/0

Пример 1.

Деление общей полосы по классам в процентном соотношении (40, 30, 20).
access-list 101 permit ip host 192.168.0.10 any
access-list 102 permit ip host 192.168.0.20 any
access-list 103 permit ip host 192.168.0.30 any

class-map match-all Platinum
match access-group 101
class-map match-all Gold
match access-group 102
class-map match-all Silver
match access-group 103

policy-map Isp
class Platinum
bandwidth percent 40
class Gold
bandwidth percent 30
class Silver
bandwidth percent 20

interface FastEthernet0/0
bandwidth 256
service-policy output Isp

3.2.3.6. LLQ.

Low Latency Queuing (LLQ) – очередность с низкой задержкой. LLQ можно рассматривать как механизм CBWFQ с приоритетной очередью PQ (LLQ = PQ + CBWFQ).
PQ в LLQ позволяет обеспечить обслуживание чувствительного к задержке трафика. LLQ рекомендуется в случае наличия голосового (VoIP) трафика. Кроме того, он хорошо работает с видеоконференциями.

Алгоритм настройки.

1. Распределение пакетов по классам - Class-map
access-list 101 permit ip any any precedence critical

class-map match-all Voice
match ip precedence 6
class-map match-all Class1
match access-group 101

2. Описание правил для каждого класса - Policy-map

Аналогично CBWFQ, только для приоритетного класса (он один) указывается параметр priority.
policy-map Policy1
class Voice
priority 1000
class Class1
bandwidth 100
queue-limit 20
class class-default
bandwidth 50
random-detect

3. Запуск заданной политики на интерфейсе - Service-policy
interface FastEthernet0/0
bandwidth 256
service-policy output Policy1

Пример 1.
Относим класс Voice к PQ, а все остальное к CQWFQ.
!
class-map match-any Voice
match ip precedence 5
!
policy-map Voice
class Voice
priority 1000
class VPN
bandwidth percent 50
class class-default
fair-queue 16
!
interface X
Sevice-policy output Voice
!

Пример 2.
Дополнительно ограничиваем общую скорость для PQ в LLQ, чтобы он не монополизировал весь канал в случае неправильной работы.
!
class-map match-any Voice
match ip precedence 5
!
policy-map Voice
class Voice
priority 1000
police 1024000 32000 32000 conform-action transmit exceed-action drop
class Vpn
bandwidth percent 50
class class-default
fair-queue 16
!
interface FastEthernet0/0
service-policy output Voice
!