Теоретические основы и архитектура

Segment Routing over MPLS (SR-MPLS, RFC 8402) - парадигма source routing, которая убирает отдельные протоколы выдачи меток (LDP) и сигнализации путей (RSVP-TE). В классическом MPLS транзитные маршрутизаторы хранят динамическое состояние LDP-сессий и RSVP-сигнализации. В SR головной узел кодирует путь упорядоченным списком Segment Identifier (SID), каждый SID становится обычной 20-битной MPLS-меткой, а транзитные узлы не хранят состояния отдельных LSP: достаточно записей LFIB по SID, которые они выводят из IGP. SID анонсируются расширениями IS-IS/OSPF. Основа SR-MPLS - Segment Routing Global Block (SRGB): диапазон меток, который каждый маршрутизатор резервирует для глобальных SID. Prefix-SID анонсируется как индекс, а метка вычисляется как база SRGB + индекс. Значение 16000-23999 - частый выбор и default у Cisco, но RFC 8402 его не фиксирует: у других вендоров default другие, поэтому SRGB лучше задавать явно и одинаково на всех узлах домена.

Что такое сегмент и почему ядро без состояния

Segment Routing (RFC 8402) переносит путь пакета в самом пакете. Сегмент - это инструкция ("доставь до узла X по кратчайшему пути", "выйди в линк Y"), а маршрут задаётся упорядоченным списком сегментов. В SR-MPLS (RFC 8660) сегмент - обычная 20-битная MPLS-метка, список сегментов - стек меток, поэтому ASIC и формат заголовка не меняются. Отличие от LDP и RSVP-TE в том, что метки не согласуются отдельным протоколом: их рассылает сам IGP (IS-IS или OSPF), а транзитный узел хранит только записи LFIB для SID, но не состояние туннелей. Число записей в ядре растёт с числом узлов и смежностей, а не с числом LSP.

SRGB: индекс и абсолютная метка

Prefix-SID анонсируется не меткой, а индексом - небольшим числом, уникальным в SR-домене. Реальная метка вычисляется как начало SRGB + индекс. SRGB (Segment Routing Global Block) - диапазон меток, который каждый маршрутизатор резервирует под глобальные SID и анонсирует соседям. Для PE1 с индексом 1 и SRGB 16000-23999 метка 16001, для PE2 с индексом 2 метка 16002. Значение 16000-23999 (8000 меток) - типичный выбор и умолчание Cisco, но RFC 8402 его не фиксирует: у других вендоров умолчания иные, поэтому SRGB всегда задают явно и одинаково на всех узлах.

Важная деталь: метка на проводе определяется получателем. Узел A, отправляя пакет к префиксу с индексом i соседу B, ставит метку SRGB_B.начало + i, где SRGB_B взят из анонса B. Если SRGB одинаковы, значение метки не меняется по всему пути (в LFIB это swap на то же число, RFC 8660 называет операцию CONTINUE), и трассировка читается без таблиц. Если у B другой диапазон, пересылка продолжит работать, но на каждом хопе значение будет другим, а отладка и политики с ручными стеками усложнятся. SRGB может состоять из нескольких диапазонов (индексы нумеруются сквозь них), но на практике используют один непрерывный блок.

Ограничения SRGB:

  • метки 0-15 зарезервированы, блок не должен пересекаться со статическими метками, с уже выделенными динамическими метками LDP/RSVP и с SRLB;
  • индекс должен быть меньше размера блока: при размере 1000 индекс 1200 не даёт метки, узел не программирует префикс (в IGP маршрут есть, в LFIB его нет);
  • два узла с одним индексом создают конфликт SID: по RFC 8660 конфликтующие записи не программируются, детали поведения зависят от реализации;
  • смена SRGB на работающем узле вызывает перепрограммирование LFIB и при занятых метках может быть отклонена.

SRLB и локальные сегменты

SRLB (Segment Routing Local Block) - диапазон для локальных SID, например Adjacency-SID, заданных вручную, или SID, которые контроллер выделяет под политики. Он не используется как глобальный: значение имеет смысл только на узле-владельце, а соседям SRLB сообщают, чтобы контроллер знал допустимые значения. У Cisco умолчание SRLB 15000-15999, SRGB и SRLB не должны пересекаться. Динамические Adjacency-SID берутся из пула динамических меток, а не из SRGB.

Как SID попадают в IGP

IS-IS (RFC 8667). Возможности узла передаёт Router Capability TLV 242. Внутри него: SR-Capabilities sub-TLV (тип 2) с флагами I (SR-MPLS IPv4) и V (IPv6) и дескрипторами SRGB (размер диапазона 3 байта и SID/Label sub-TLV типа 1 с первой меткой), SR-Algorithm sub-TLV (тип 19), SR Local Block sub-TLV (тип 22) и Node MSD sub-TLV (тип 23, RFC 8491). Prefix-SID - sub-TLV типа 3 внутри TLV достижимости префикса (135, 235, 236, 237). Для этого нужны wide-метрики: с narrow-метриками (TLV 128/130) sub-TLV перенести нельзя, SR на таком IS-IS не заработает.

OSPFv2 (RFC 8665). Возможности передаёт Router Information Opaque LSA (тип 4): SR-Algorithm TLV (тип 8), SID/Label Range TLV (тип 9), SR Local Block TLV (тип 14), SRMS Preference TLV (тип 15) и Node MSD TLV (тип 12, RFC 8476). Prefix-SID лежит в Extended Prefix Opaque LSA (Opaque тип 7), Adjacency-SID - в Extended Link Opaque LSA (тип 8). Поэтому в OSPF необходима работающая opaque-функциональность, а область флудинга определяет, кто увидит SID.