Cisco QoS – классификация и маркировка

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

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

Является ли маркировка обязательной для работы QoS? Нет, но она помогает сохранить ресурсы других устройств в сети, занимающихся коммутацией или маршрутизацией, так как поиск определенных полей в заголовке пакета операция во много раз более дешевая, чем анализ l5-l7 с помощью того же NBAR. Именно по этому Cisco советует маркировать пакеты как можно ближе к источнику трафика, в том случае если вы ему доверяете. Если телефон в состоянии маркировать свой трафик – отлично, пусть это будет телефон.

Trusted Boundaries

Что имеется ввиду под “доверием к маркировке”? Cisco использует понятие trust boundary, чтобы обозначить зону доверия, место, начиная с которого предоставленная в специфический полях фрейма или пакета информация может считаться достоверной.

trust boundary

Информация, которая не считается достоверной, переопределяется как раз на границе такой зоны доверия.

Маркировать пакеты можно как на втором, так и на третьем уровне модели OSI.

Маркировка на канальном уровне

  • Class of Service (COS) – поле в 3 бита, позволяющее маркировать ваш трафик 8-ю различными способами.
  • Frame Relay Discard Eligible (DE) bit – поле в один бит. В случае затора трафик, с установленным битом в поле DE, первый в списке на отсечение.
  • ATM Cell Loss Priority (CLP) bit – та же концепция, что и выше.
  • MPLS EXP (experimental) / TC (traffic class) bits.

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

Маркировка на сетевом уровне

  • IP Precedence (IPP) – значение, использующее первые 3 бита поля Type of Service (ToS) в заголовке пакета, позволяющее установить одно из значений от 0 до 7, где 0 наименее важный трафик, а 7 наиболее важный. Значения 6 и 7 зарезервированы и предназначены для протоколов маршрутизации и сигнализации (таких на BFD). Данные в IPP могут быть загружены из поля CoS.
    precedence  data type protocol/application example
    0 – routine Low–priority data web, bittorrent
    1 – priority Medium–priority data SQL, AD
    2 – immediate High-priority data Citrix ICA, Salesforce
    3 – flash Call Signnaling RTCP
    4 – flash-override VideoСonferencing WebEx, GoToMeeting
    5 – critical Voice RTP
    6 – internet control reserved
    7 – network control reserved

    Проблема с IPP состоит в том, что мы не можем сказать какое приложение нам более важно – WebEx или GoToMeeting, репликация AD или MSSQL. IPP просто не обладает достаточной гибкостью. Here comes DSCP.

  • Differential Service Code Point (DSCP) использует все 8 бит поля ToS, которое было переименовано в DS – Differential Services. DSCP имеет обратную совместимость с IPP благодаря первым 3ем битам. Достигается она следующим образом: устройства, не подразумевающие о DSCP продолжают доверять IPP битам, а более современные девайсы в состоянии понять, что в внутри класса с precedence 2 могут существовать вложенные классы с разной степенью важности.ds byteБиты с 0 по 5 используются для DSCP, а последние два для Explicit Congestion Notification (ECP).  ECP пока отложим в сторону, а вот про DSCP имеет смысл поговорить несколько более развернуто. 

DSCP

Default Forwarding

В предыдущей статье существовал такой class defaut, трафик, принадлежащий к которому имел IPP = 0 и доставлялся по принципу best effort. С DSCP ничего не поменялось – если все биты от 0 до 5 установлены в 0 – это как раз и есть наше первое значение – Default Forwarding (DF). Его принимают либо не маркированные пакеты, либо пакеты обладающие наименьшим приоритетом.

Class Selector

Одновременно такая категория default является и первым class selector’ом (CS) – CS0, которые по сути представляют собой значения IPP и имеют только первые 3 бита значимыми. Последние 3 бита в CS0-CS7 равны нулю (xxx 000).

Assured Forwarding

Как только вы начинаете указывать 3-5 биты в рамках CS начиная с первого CS1 (001xxx) и заканчивая CS4 (100xxx) включительно, появляются 4 новых подтип пересылки пакетов – Assured Forwarding (AF) – AF1-4.

Expedited Forwarding

И так вы “доходите” до CS5 (101000), который, как вы помните, соответствует IPP 5 – наибольшему значению, которое рекомендуется назначать трафику. Все животные равны, но некоторые ровнее, по этому в рамках CS5 существует отдельный класс, позволяющий повысить приоритет в рамках CS5 – Expedited Forwarding (EF) (101110). Это буквально говорит нам о том, что данный трафик обладает исключительными требованиями к полосе пропускания, потере пакетов, задержке и джиттеру. На EF не распространяется правило Drop Preference, свойственное AF, но об это ниже.

Drop Preference

Следующая вещь, которую стоит осмыслить, это так называемая Drop Preference. Если в рамках первых трех бит важность трафика нарастает от CS0 до CS7, то следующие 3 бита указывают на вероятность данного типа трафика быть отброшенным при образовании затора. Иными словами при возникновении затора в рамках AF2 трафик, попавший в класс AF21 (010010), будет с большей вероятностью доставлен чем трафик, попавший в класс AF23 (010110).

Тут я остановился, перечитал то, что я написал, поставил себя на место читателя и выложил кирпич. К несчастью лучше объяснить я не могу и, надеюсь, следующая табличка поможет разобраться лучше:

dscp chart

  • Sk1f3r

    Хорошая табличка – http://dqnetworks.ie/toolsinfo/dscp/

  • Андрей

    Подскажите пожалуйста
    На коммутаторах (каталист 2950) есть таблички преобразования из cos в dscp, и наоборот. Зачем они нужны? Только для организации очереди на коммутаторе? Или, например, по входящему значению cos будет вычислен dscp, и это значение dscp запишется в заголовок третьего уровня?

  • Андрей, не хочется быть капитаном очевидность, но нужны они для преобразования COS>DSCP. Если ваш access коммутатор – trusted boundary то почему бы прямо там и не маркировать пакет, на основе COS битов фрейма, перенося (или, наоборот, не перенося) значения в TOS поле пакета.

    Безусловно на коммутаторе можно так же организовывать очереди. Уж не знаю как там дела у 2950, но 2960(S) позволяет создавать исходящие/входящие очереди + имеется механизм назначению им разного веса, позволяя обрабатывать тот же голос с более высоким приоритетом.