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

Две ключевые функции развития Segment Routing - TI-LFA (Topology-Independent Loop-Free Alternate) и SR Policy с Flexible Algorithm (Flex-Algo). 1. TI-LFA даёт предрассчитанную защиту линка (а также узла и SRLG) в любой топологии, где после отказа остаётся альтернативный путь. Классический LFA и Remote LFA не покрывают часть топологий (например, колец), а TI-LFA строит резервный путь вдоль кратчайшего пути после сходимости (post-convergence) и при необходимости кодирует его списком SID, поэтому не создаёт микропетель. Время переключения определяется обнаружением отказа и платформой; цель - десятки миллисекунд. 2. SR Policy задаёт путь списком сегментов (статически или динамически, в том числе через контроллер/PCE) и заменяет RSVP-TE-туннели без сигнализации по пути. 3. Flex-Algo (RFC 9350) разделяет одну топологию на логические плоскости с собственной метрикой и ограничениями: номера алгоритмов 128-255 назначает оператор (например, 128 - по минимальной задержке, 129 - с ограничением по affinity).

Два механизма поверх SR: защита и управление путём

Первая задача - быстро восстановить трафик при отказе линка или узла без RSVP-TE. Её решает TI-LFA (Topology-Independent LFA): резервный путь рассчитывается заранее и записывается в FIB. Вторая задача - провести трафик не по кратчайшему пути IGP, а по заданному: для неё используется SR Policy (RFC 9256), список сегментов в стеке меток вместо сигнализируемого туннеля. Оба механизма работают на тех же SID, что рассматривались раньше.

TI-LFA: расчёт

Классический LFA (RFC 5286) выбирает соседа, у которого кратчайший путь к цели не проходит через защищаемый элемент; в кольцах и во многих топологиях такого соседа нет. Remote LFA (RFC 7490) добавляет туннель к удалённому узлу, но требует targeted LDP. TI-LFA (RFC 9855, ранее draft-ietf-rtgwg-segment-routing-ti-lfa) обходит оба ограничения: резервный путь строится как post-convergence путь, то есть путь, который IGP выберет после отказа, а стек SID направляет по нему трафик.

Расчёт для защиты линка выполняет узел PLR (Point of Local Repair):

  1. Из топологии убирается защищаемый линк, SPF находит post-convergence путь к каждому префиксу.
  2. P-space - узлы, достижимые от PLR по кратчайшим путям без прохода через защищаемый линк (расширенный P-space добавляет узлы, достижимые от соседей PLR). Q-space - узлы, которые достигают цели по кратчайшему пути без этого линка (обратный SPF от цели).
  3. Идём по post-convergence пути: если на нём есть узел P-space, который также входит в Q-space (PQ-узел), ремонтный список состоит из одного Node-SID этого узла. Если P и Q не пересекаются, но соединены линком, в список добавляют Adjacency-SID между ними: [Node-SID P, Adj-SID P-Q]. Чаще всего список состоит из 1-2 меток, но при сложных метриках может быть длиннее.
  4. Для защиты узла и SRLG вычисление повторяют с исключением узла или группы линков.

Подход даёт покрытие при любой топологии, где вообще есть альтернативный путь (после отказа сеть должна оставаться связной). Ограничения реализации: список должен уместиться в MSD головного узла, все узлы ремонтного пути обязаны поддерживать SR и Prefix-SID, а на LAN-интерфейсах защита зависит от платформы.

TI-LFA: время и поведение

Backup-next-hop записан в FIB заранее. После обнаружения отказа (потеря сигнала, BFD; цель - до 50 мс при быстром обнаружении) линейная карта переключает трафик, не дожидаясь IGP. Далее IGP сходится и тот же путь становится основным, поэтому второго переключения нет. Реальное время зависит от способа обнаружения и платформы: без BFD на медленных интерфейсах оно определяется таймерами IS-IS.

Во время сходимости возможны микропетли: узлы пересчитывают SPF в разное время, и пакет может ходить между узлом, уже перешедшим на новый путь, и узлом, который ещё на старом. Механизм SR microloop avoidance (draft-bashandy-rtgwg-segment-routing-uloop) временно использует на PLR сегментный список с post-convergence путём, откладывая обновление RIB на заданный интервал.

SR Policy: структура

SR Policy (RFC 9256) однозначно задаётся тройкой headend, color, endpoint. Color - 32-битное число, смысл которого определяет оператор (например 100 - низкая задержка); endpoint - адрес узла назначения. У политики есть один или несколько candidate path; каждый определяется признаками preference (по умолчанию 100, выше лучше), protocol-origin (по умолчанию: PCEP 10, BGP SR-TE 20, локальная конфигурация 30), originator и discriminator. Активным становится валидный candidate path с наибольшим preference, а при равенстве решают origin, originator, discriminator. Candidate path содержит один или несколько segment list с весами (взвешенный ECMP).

Path бывает explicit (список задан оператором) или dynamic (headend или PCE вычисляет путь по ограничениям: метрика IGP, TE metric или delay, affinity, disjoint-path, Flex-Algo). Candidate path невалиден, если не резолвится первый сегмент, превышен MSD или нет пути. Для связи с контроллером служит PCEP (RFC 8664) и BGP SR-TE.

Binding SID (BSID) - локальная метка политики. Пакет с этой меткой на headend отправляется в политику. Применение: сокращение стека (внешний узел знает один BSID вместо десяти меток), вложение политик, переход между доменами.