Основы Segment Routing: декодирование SRv6 и сетевое программирование [Часть 2]

Источник: Cisco Blogs•

Основы Segment Routing: декодирование SRv6 и сетевое программирование [Часть 2]

Часть 2 серии материалов об основах Segment Routing посвящена архитектуре SRv6, сетевому программированию и соглашениям об именовании SID.

В первой статье этой серии из двух частей, посвященной основам маршрутизации по сегментам (segment routing), мы рассмотрели более абстрактное определение segment routing и его реализацию с использованием MPLS. В конце мы отметили, что как сервисы Layer 3, так и Layer 2 могут извлечь выгоду из segment routing, и объяснили как именно. Если вы присоединились к нам только сейчас, можете сделать паузу и ознакомиться с Частью 1 здесь.

Готовы погрузиться в Часть 2? Давайте вернемся к самому segment routing!

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

Логика SRv6: сетевое программирование

В SRv6 используется собственное уникальное соглашение для именования сегментов.

Префиксный сегмент IGP изначально назывался «End», а сегмент смежности — «End.X». Другие сегменты, более актуальные (на практике) для особых ситуаций, связанных с межсетевым взаимодействием и миграцией, получили в SRv6 названия «End.B6.Encaps.Red» или «End.B6.BM».

Термин, используемый маршрутизатором на входе в сеть (ingress), — «H.Encaps» или «H.Encaps.Red». Где-то посередине может встретиться что-то вроде «H.Insert» или «H.Insert.Red».

Кажется ли вам знакомым этот синтаксис на основе нотации с точками? Если это напоминает вам объектно-ориентированные языки программирования, такие как Python или Java, вы не ошибаетесь. Так как же это стало частью Segment Routing?

С точки зрения Segment Routing, SID сегмента кодирует инструкцию, которую должна выполнить сеть. Таким образом, сеть ведет себя во многом как программа, инструкции которой обрабатываются компьютером.

В контексте Segment Routing люди часто говорят о «программируемой сети» («programmable network») или «сетевом программировании» («network programming»). Последний термин даже вошел в название RFC, имеющего ключевое значение для SRv6: «Segment Routing over IPv6 (SRv6) Network Programming» (RFC 8986). Это объясняет соглашение об именовании для SRv6, которое поначалу может показаться странным.

В SRv6 некоторые сегменты используют SID с аргументом, который обрабатывается при выполнении инструкции. Это происходит, например, при использовании SRv6 в качестве плоскости данных для сервисов EVPN.

Анатомия SRv6 SID

В завершение обсуждения Segment Routing давайте заглянем «за кулисы» SRv6.

В SR MPLS легко воспроизвести фундаментальную концепцию маршрутизации по сегментам, используя метки в качестве SID и стек меток в качестве списка SID. Но как это работает, когда в качестве платформы для Segment Routing используется IPv6? Здесь в качестве SID выступают специально отформатированные адреса IPv6.

Обычно для этих целей зарезервировано адресное пространство IPv6 (известное как блок SR), как правило, в диапазоне /33, /40 или /48. За ним следует идентификатор узла (Node ID), обычно длиной 16 бит, затем 16-битное поле функции (Function), аргумент и некоторое заполнение (padding).

От локатора к исполнению

Вместе блок SR и идентификатор узла образуют локатор (Locator). Он не появляется из ниоткуда и не может быть автоматически сгенерирован интеллектуальными маршрутизаторами SRv6 (в RFC это называется «узлом с поддержкой SRv6»).

Вместо этого он должен быть настроен администратором. Остальная часть SID затем генерируется автоматически в зависимости от задачи маршрутизатора. Маршрутизатор SRv6 публикует локатор в IGP (OSPF или IS-IS), чтобы все сформированные из него SID были доступны по всей сети посредством маршрутизации IPv6.

Часть «Function» в сочетании с «Argument» кодирует инструкцию, подлежащую выполнению на маршрутизаторе SRv6.

Инструкции должны выполняться на маршрутизаторе SRv6 на основе маршрутизации IPv6. Для этого маршрутизатор SRv6 создает запись в таблице маршрутизации IPv6 для каждого SID, сгенерированного из локатора, включая примечание с указанием выполняемой инструкции.

Это позволяет убить двух зайцев одним выстрелом: обеспечить транспорт до маршрутизатора SRv6 и обработку на этом маршрутизаторе.

Другими словами: что именно должно происходить с трафиком в конечной точке сегмента? Вот некоторые идеи: ничего особенного, просто пересылка в следующий сегмент; пересылка на определенный канал; передача в контекст L3 или L2 для дальнейшей обработки; пересылка по пути инженерии трафика (traffic engineering); и так далее. Здесь поле для фантазии практически безгранично.

Как работает список SID

Итак, как же работает список SID? Поскольку в заголовке IPv6 помещается только один SID, в инкапсуляцию пакетов добавляется заголовок Segment Routing. Он содержит индексированный список SID.

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

Поле «Segments Left» указывает на SID текущего сегмента, который также обнаруживается в качестве адреса назначения IPv6 в заголовке IPv6. По прибытии в конечную точку сегмента поле «Segments Left» смещается на следующий индекс, и этот SID затем принимается в качестве адреса назначения IPv6; быстрый взгляд на таблицу маршрутизации IPv6 — и пакет отправляется дальше.

Накладные расходы и роль SDN

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

Хорошая новость заключается в том, что SDN нужна вам только в контексте инженерии трафика. Таким образом, в сети segment routing без инженерии трафика SDN не нужна! Даже в сети с инженерией трафика она не является строго обязательной. Сеть может справиться со многими задачами инженерии трафика самостоятельно!

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

  • Междоменная инженерия трафика
  • ДиЗъюнктный путь
  • Пропускная способность по требованию
  • Двунаправленный путь с общим маршрутом

Segment routing в экосистеме Cisco

Cisco с творческой энергией поддерживала разработку Segment Routing с самого начала, сыграв ведущую роль в процессах стандартизации. Теперь Segment Routing в Cisco полностью созрел и стал стандартной функцией линейки продуктов для сервис-провайдеров на базе IOS XR (маршрутизаторы Cisco серии 8000, NCS и др.).

Будучи платиновым партнером по обучению Cisco (Cisco Platinum Learning Partner), мы в ExperTeach рады сопровождать Cisco на ее пути в мире Segment Routing и знакомить жаждущих знаний специалистов с внутренним устройством этой захватывающей, постоянно развивающейся технологии в рамках наших учебных курсов.

О чём эта статья

Ещё в разделе «Hardware и электроника»

Все →

Ещё от Cisco