Кратко

  • Агрегация создаёт новый менее специфичный маршрут из нескольких более специфичных. В современной модели RFC 9774 AS_SET больше не является штатным результатом: ATOMIC_AGGREGATE сообщает о потере сведений, а AGGREGATOR называет последнего speaker, сформировавшего сводный маршрут.
  • Наличие агрегата, корректный ROA и Established-сессия не доказывают доступность каждого адреса внутри покрытия. При исчезновении компонента правильным результатом может быть локальный discard, хотя публичный control plane не меняется.
  • Руководство должно разрешать потерю детализации только при заранее выбранном origin AS, фильтрах по каждому contributor, журнале до сжатия, проверках RIB/FIB и пакетов и rollback всего договора агрегации.

В 02:13 AS 64505 формирует 203.0.112.0/22 из четырёх клиентских /24. Цель обычна: уменьшить churn и дать upstream одну стабильную запись. ROA разрешает 64505 объявлять /22; UPDATE несёт ATOMIC_AGGREGATE и AGGREGATOR.

В 03:07 во время клиентских работ исчезает 203.0.114.0/24. Остальные три компонента активны, поэтому платформа сохраняет /22. Публичные collectors не видят withdrawal, RPKI-ROV остаётся Valid, BGP-сессия — Established, а агрегат — в FIB.

Probe к адресу пропавшего /24 входит в 64505, не находит более длинного совпадения и попадает на discard route агрегата. Это предотвращает выход по другому менее специфичному маршруту и возврат в петлю. Защита сработала правильно, но услуга не была оказана. Метрика «aggregate up» скрывает различие.

Сценарий синтетический, механика нормативная. ATOMIC_AGGREGATE не обещает доставку. Атрибут предупреждает, что публичный AS_PATH не может перечислить все пути, на основе которых возникло объявление.

Сводный маршрут — самостоятельное утверждение

BGP не сокращает строку для удобства экрана. Он объединяет несколько more-specific NLRI в новую less-specific NLRI со своими атрибутами, условием активации, export policy и последствиями в forwarding. Новый маршрут способен пережить исчезновение одного источника.

Исходная процедура RFC 4271 сохраняла самый длинный общий начальный фрагмент всех AS_PATH, а оставшиеся AS могла помещать в неупорядоченный AS_SET. Множество сохраняло участие, но теряло порядок прохождения. Оно делало неясным и origin AS, необходимый для однозначной проверки происхождения.

RFC 6472 в 2011 году рекомендовала отказаться от AS_SET и AS_CONFED_SET. В мае 2025 года RFC 9774 превратила рекомендацию в требование стандарта и заменила прежний документ. Если оператор явно не настроил исключение, например для перехода, speaker не должен отправлять UPDATE с такими сегментами, а полученный маршрут с ними должен обрабатываться как withdrawn.

Агрегация осталась. Изменилась дисциплина: вместо двусмысленного множества оператор выбирает стабильный origin, обозначает автора операции и открыто маркирует утрату сведений.

Пустой атрибут устанавливает границу знания

ATOMIC_AGGREGATE имеет код 6, является well-known discretionary и содержит значение нулевой длины. В нём нет удалённых AS, списка contributors, времени или подписи.

Если отказ от AS_SET удалил номера, присутствовавшие в исходных путях, агрегат должен нести этот атрибут. Получатель не должен снимать его при распространении и не вправе создавать из NLRI более специфичные объявления. Он обязан учитывать, что реальный путь может проходить через ASes, отсутствующие в показанном AS_PATH.

Это признание ограничения, а не сертификат качества. Атрибут не восстанавливает утрату, не удостоверяет агрегатора, не разрешает prefix и не подтверждает reachability. Если один contributor уже имел ATOMIC_AGGREGATE, новый агрегат обязан унаследовать его: последующее сжатие не отмывает прежнюю потерю.

Тонкая публичная информация полезна для координации. Но она не получает власть над исключёнными фактами. Короткий путь содержит меньше доказательств, а не более сильные доказательства.

AGGREGATOR называет последнюю операцию

AGGREGATOR — optional transitive атрибут с кодом 7. Сформировавший агрегат speaker может добавить собственный AS и IP-адрес, обычно BGP Identifier. В consistent brief aggregation по RFC 9774 он присутствует вместе с ATOMIC_AGGREGATE.

Первый атрибут говорит о потере, второй — о последнем представленном акте агрегации. Они не перечисляют contributors, не фиксируют policy version и не строят историю всех предыдущих преобразований. Значения AGGREGATOR исходных маршрутов нельзя просто перенести в новый.

Криптографической аутентификации здесь нет. AS и адрес в collector не доказывают контроль над ресурсом или правильность policy. Поддержка четырёхоктетных ASN сохраняет число, а не доверие: современные speakers используют восьмиоктетный AGGREGATOR; через старое устройство возможны AS_TRANS и AS4_AGGREGATOR.

RFC 7606 предписывает attribute discard для повреждённых ATOMIC_AGGREGATE и AGGREGATOR вместо сброса всей сессии. Это уменьшает радиус отказа, но маршрут может пережить потерю предупреждения или авторства. Событие ошибки нужно хранить независимо от состояния peer.

Origin должен быть решением, а не случайностью

Brief aggregation оставляет только общую начальную последовательность. Набор contributors меняется — меняется и результат. Два непересекающихся пути могут дать пустой AS_PATH; после исчезновения одного AS оставшегося маршрута может внезапно стать видимым origin.

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

Consistent brief aggregation обрезает AS_PATH после самого правого вхождения выбранного origin AS. Им может быть сам агрегирующий AS. ROA сводного prefix должен разрешать именно его. 64505 становится ответственным по явному решению, а не потому, что оказался последним выжившим вкладом.

Origin AS следует отличать от атрибута ORIGIN. Первый выводится из правой части AS_PATH; второй сообщает IGP, EGP или INCOMPLETE и при агрегации принимает наименее предпочтительное значение contributors. Результат Valid тоже узок: ROA разрешает AS объявлять prefix, но не проверяет удалённые пути, AGGREGATOR, NEXT_HOP, FIB и доставку.

После AS_SET защита от петли становится политикой

AS_SET мог содержать номер contributing AS. Если агрегат возвращался к нему, обычная loop detection отвергала путь. После удаления множества эта память исчезает.

RFC 9774 рекомендует не объявлять агрегат contributing ASes. Каждый из них получает другие подходящие more-specific, кроме маршрута, полученного от него самого. Это policy, зависящая от соседа и направления. Устаревшую карту contributors сжатый AS_PATH уже не исправит.

В data plane нужен второй барьер. RFC 4632 требует, чтобы генератор отбрасывал пакеты, совпавшие с агрегатом, но не с достижимым более специфичным маршрутом. Обычно это null/discard route. Без неё пакет может уйти по default или peer-маршруту и вернуться в петлю.

Discard доказывает containment, не сервис. Пакет на нём одновременно подтверждает работу loop guard и отсутствие активного пути к цели. Эти факты нельзя объединять в один зелёный показатель.

Доказательство создаётся до сжатия

Публичный collector видит только конечный /22. Он не восстанавливает отклонённый до policy маршрут, молчащий peer или пропавшие AS. Нужен локальный ledger: prefix, обязательные и необязательные contributors, их peers, pre-policy и accepted AS_PATH, рассчитанная общая последовательность, выбранный origin, ROA, версия policy и выполняющий speaker.

Затем сохраняются Loc-RIB, Adj-RIB-Out до и после policy, ATOMIC_AGGREGATE, AGGREGATOR или AS4_AGGREGATOR, NEXT_HOP, ORIGIN и suppression more-specific. Ошибки атрибутов сохраняются даже после attribute discard.

Цепочку завершают RIB, hardware FIB и пакеты. Адрес каждого активного contributor должен отвечать; адрес намеренно отсутствующего компонента должен локально отбрасываться. Четыре состояния требуют разных тревог: contributor есть; contributor нет, но агрегат легитимен; агрегата нет; агрегат есть без discard. Последнее выглядит устойчивым и лишено loop guard.

Canary и rollback охватывают весь договор

Изменение агрегации меняет NLRI, contributors, активацию, origin, ROA, предупреждение, авторство, export, suppression и discard. Canary должен содержать положительный и отрицательный тест. Активный адрес достигается; после контролируемого withdrawal тестового contributor адрес из его диапазона заканчивается внутри агрегирующего AS и не уходит к соседу.

Одновременно фиксируются AS_PATH, ATOMIC_AGGREGATE, AGGREGATOR, ROV и more-specific. На границе старых и новых speakers проверяется реконструкция AS4_AGGREGATOR.

Rollback единым набором возвращает импорт, suppression, generation, origin, ROA, outbound filters и null route. Возврат одной команды без восстановления конкретных путей не возвращает прежнее обслуживание.