Multi-Field

Наиболее часто встречающийся тип классификации на входе в DS-домен. Не доверяем имеющейся маркировке, а на основе заголовков пакета присваиваем класс.

Зачастую это способ вообще «включить» QoS, в случае, когда отправители не проставляют маркировку. Достаточно гибкий инструмент, но в то же время громоздкий — нужно создавать непростые правила для каждого класса. Поэтому внутри DS-домена актуальнее BA.

Практика по MF классификации

Схема та же:

Из практических примеров выше видно, что устройства сети по умолчанию доверяют маркировке приходящих пакетов.

Это прекрасно внутри DS-домена, но неприемлемо в точке входа. А давайте теперь не будем слепо доверять? На Linkmeup_R2 ICMP будем метить как EF (исключительно для примера), TCP как AF12, а всё остальное CS0. Это будет MF (Multi-Field) классификация.

  1. Процедура та же, но теперь матчить будем по ACL, которые выцепляют нужные категории трафика, поэтому сначала создаём их. На Linkmeup_R2:

    ip access-list extended TRISOLARANS_ICMP_ACL
    permit icmp any any
    ip access-list extended TRISOLARANS_TCP_ACL
    permit tcp any any
    ip access-list extended TRISOLARANS_OTHER_ACL
    permit ip any any
  2. Далее определяем классификаторы:

    class-map match-all TRISOLARANS_TCP_CM
    match access-group name TRISOLARANS_TCP_ACL
    class-map match-all TRISOLARANS_OTHER_CM
    match access-group name TRISOLARANS_OTHER_ACL
    class-map match-all TRISOLARANS_ICMP_CM
    match access-group name TRISOLARANS_ICMP_ACL
  3. А теперь определяем правила перемаркировки в политике:

    policy-map TRISOLARANS_ADMISSION_CONTROL
    class TRISOLARANS_ICMP_CM
    set ip dscp ef
    class TRISOLARANS_TCP_CM
    set ip dscp af11
    class TRISOLARANS_OTHER_CM
    set ip dscp default
  4. И вешаем политику на интерфейс. На input, соответственно, потому что решение нужно принять на входе в сеть.

    interface Ethernet0/1
    service-policy input TRISOLARANS_ADMISSION_CONTROL

ICMP-тест с конечного хоста Trisolaran1. Никак сознательно не указываем класс — по умолчанию 0.

Политику с Linkmeup_R1 я уже убрал, поэтому трафик приходит с маркировкой CS0, а не CS7.

Вот два дампа рядом, с Linkmeup_R1 и с Linkmeup_R2:

Linkmeup_R1. E0/0.

pcapng

Linkmeup_R2. E0/0.

pcapng

Видно, что после классификаторов и перемаркировки на Linkmeup_R2 на ICMP-пакетах не только DSCP поменялся на EF, но и MPLS Traffic Class стал равным 5. Аналогичный тест с telnet 172.16.2.2. 80 — так проверим TCP:

Linkmeup_R1. E0/0.

pcapng

Linkmeup_R2. E0/0.

pcapng

ЧИТО — Что И Требовалось Ожидать. TCP передаётся как AF11. Следующим тестом проверим UDP, который должен попасть в CS0 согласно нашим классификаторам. Для этого воспользуемся iperf (привезти его в Linux Tiny Core изи через Apps). На удалённой стороне iperf3 -s — запускаем сервер, на локальной iperf3 -c -u -t1 — клиент (-c), протокол UDP (-u), тест в течение 1 секунды (-t1).

Linkmeup_R1. E0/0.

pcapng

Linkmeup_R2. E0/0

pcapng

С этого момента всё, что приходит в этот интерфейс, будет классифицировано согласно настроенным правилам.