В первой статье этой серии из двух частей, посвященной основам маршрутизации по сегментам (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 и знакомить жаждущих знаний специалистов с внутренним устройством этой захватывающей, постоянно развивающейся технологии в рамках наших учебных курсов.
![Основы Segment Routing: декодирование SRv6 и сетевое программирование [Часть 2]](https://blogs.cisco.com/gcs/ciscoblogs/1/2026/10/Data-Center-GettyPA-Unlimited-953537948-1200x800-9b9f185.png)









