# Multi-Field

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

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

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

```
Схема та же:
```

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIytdvfwUyrkTTR1oD1%2Fimage.png?alt=media\&token=80525d04-14ed-4741-9bd4-0df49e75fbba)

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

Это прекрасно внутри 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.**

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIytrzulq5Uxb2pqDES%2Fimage.png?alt=media\&token=0609e8ec-aef7-4e8e-88ae-f7e7f181bb5a)

```
Вот два дампа рядом, с Linkmeup\_R1 и с Linkmeup\_R2:
```

**Linkmeup\_R1. E0/0.**

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIyu1lvDLnRRM1dKWZE%2Fimage.png?alt=media\&token=7f549958-0a5a-4d5b-86f9-3677b055fb1a)

[_pcapng_](https://yadi.sk/d/dT8QCu7n3YkjZ4)

**Linkmeup\_R2. E0/0.**

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIyuFFJZWJSncyYgkEb%2Fimage.png?alt=media\&token=8df06fb5-33b1-44cd-9941-a2f38ef4ca55)

[_pcapng_](https://yadi.sk/d/3OOzH2Ww3YkjZ9)

```
Видно, что после классификаторов и перемаркировки на Linkmeup\_R2 на ICMP-пакетах не только DSCP поменялся на EF, но и MPLS Traffic Class стал равным 5.  

Аналогичный тест с telnet 172.16.2.2. 80 — так проверим TCP:
```

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIyuKOxJUoTfJL9xnED%2Fimage.png?alt=media\&token=2cd7fcb2-5e4f-450b-a13b-881d6191e5a1)

\*\*\*\*

**Linkmeup\_R1. E0/0.**

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIyv13Keo_igKxs5meX%2Fimage.png?alt=media\&token=14f8df4f-737c-46ec-a8fd-438f53f20e20)

[_pcapng_](https://yadi.sk/d/M21gTk2f3Ykkaa)

**Linkmeup\_R2. E0/0.**

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIyv5Kyeha6li_rBrgh%2Fimage.png?alt=media\&token=5ddd01d8-b931-4f02-97b2-cd2aa8b1d011)

[_pcapng_](https://yadi.sk/d/GdyZtBI-3YkkZa)

```
ЧИТО — Что И Требовалось Ожидать. TCP передаётся как AF11.  

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

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIyv92ahTogYPthGoLG%2Fimage.png?alt=media\&token=979ea055-981a-498c-9c05-c47a60a18aaf)

\*\*\*\*

**Linkmeup\_R1. E0/0.**

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIyvL69tntwSKpQWMx5%2Fimage.png?alt=media\&token=28e87384-09c3-43ba-a1f0-0ad14280b046)

[_pcapng_](https://yadi.sk/d/FG9eNhV93YkoD7)

**Linkmeup\_R2. E0/0**

![](https://3903873742-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LIgRTPaaN7wUujKIWEz%2F-LIy_T4fn9FETAa89h6y%2F-LIyvQT8OgNXtF12ZO1k%2Fimage.png?alt=media\&token=8db5b4de-30af-481a-856a-570a2180b8ba)

[_pcapng_](https://yadi.sk/d/t3hRvRMk3YkoDR)

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