Juniper Class of Service

Введение

Традиционно, принимая во внимание, что cisco-адептов больше чем juniper-кунов, будут наблюдаться регулярные отсылки на названия и конкретные реализации той или иной технологии на Cisco IOS.

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

Легенда

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

Будет использоваться следующая схема, на базе реального оборудования:

  • S3 – Juniper EX4200 – источник немаркированного трафика
  • R1 – Juniper MX5 – точка выполнения CoS-манипуляций
  • R3 – Cisco 3845 – получатель трафика

Как видите, для некоторого упрощения процесса, один из узлов работает на базе Cisco IOS – к этому узлу трафик будет направляться и там будет выполнятся классификация трафика, с целью определения корректности выполнения маркировки на R1.

Далее будут вноситься разъяснения в задачу, но поэтапно, чтобы не вызвать чувства запутанности.

Весь трафик будет направляться к трём loopback-интерфейсам на R3, со следующими IP-адресами:

  • lo0 – 3.3.3.3
  • lo1 – 123.0.0.1
  • lo2 – 123.0.0.2

Эти адреса нужны чтобы можно было разделить трафик на три группы:

  • трафик с адресом назначения 123.0.0.1 – считается высокоприоритетным трафиком телефонии (будем называть его телефонным);
  • трафик с адресом назначения 123.0.0.2 – считается приоритетным трафиком важных корпоративных приложений (будем называть его серверным);
  • трафик с адресом назначения 3.3.3.3 – считается обычным трафиком.

(легко запомнить, если смотреть на последний октет как на степень важности – 1=первая, максимальная важность).

Итак, мы имеет условный трафик, направляемый посредством утилиты ping, с S3 в сторону R3, через транзитный R1, который выполняет следующие манипуляции на интерфейсе ge-1/1/0:

  • телефонный трафик маркируется DSCP EF, помещается в очередь VOICE и учитывается (кол-во байт и пакетов);
  • серверный трафик маркируется DSCP AF31, помещается в очередь DATA и учитывается;
  • обычный трафик маркируется DSCP BE, помещается в очередь OTHER и учитывается.

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

Далее, как бы внутри устройства выполняются следующие манипуляции:

  • очередь VOICE наделяется высшим приоритетом на передачу (LLQ), получает гарантированную полосу в 10% от общей полосы, без права выхода за рамки и 5% от общего объёма буферов без права выхода за рамки. Традиционно считается, что нет смысла давать много буферного пространства под трафик реального времени (голос, видео), ведь в случае перегрузки линии долгое время нахождения этого трафика в буфере будет бесполезной тратой ресурсов – к конечному узлу задержанный трафик придёт с большим опозданием, вероятно будучи уже не нужным, а значит его проще отбросить в момент когда мы предполагаем его уже опоздавшим;
  • очередь DATA наделяется средним приоритетом, получает гарантированную полосу в минимум 40% от общей полосы, т.е. с правом выхода за рамки и гарантированные 50% от общего объёма буферов с правом выхода за рамки;
  • очередь OTHER наделяется наименьшим приоритетом, получает всю незанятую кем-либо полосу и все незанятые кем-либо объёмы буферов от общего объёма буферов (доедает крошки со стола). При этом, за счёт именно этой очереди выполняется попытка избежания перегрузки (congestion avoidance – CA), с помощью WRED (weighted random early detection) – при достижении 70% занятости полосы отбрасываются 25% случайного трафика, при достижении 90%отбрасывается 50%. Это гораздо эффективнее чем базовый CA средствами Taildrop, благодаря которому при 100%перегрузке линии отбрасывается 100% трафика и рождается TCP global synchronization – график трафика будет выглядеть как зубчики пилы, ибо все TCP-сессии не получив ACK снижают свой MSS в 2 раза, показывая провал в графике и все вместе начинают передавать вновь, до повторения зубчика.

Настройка

Получатель

Давайте для начала выполним быструю настройку R3 – обеспечим классификацию трафика и убедимся, что весь трафик приходит немарированный: