BGP. Received-routes vs. Accepted-routes
Сегодня я размышляю про функционал Route-Refresh. Нужен он для того, чтобы не разрывать соединение с соседом, не сбрасывать таблицу маршрутизации, не прерывать сервисы, а просто перезапросить маршруты. И ей уже семь лет в обет.
Например, одна из наиболее частых ситуаций, где востребован этот функционал — обновление политики.
Итак, есть политика на импорт маршрутов в таблицу маршрутизации — она фильтрует, к примеру, все префиксы длиннее 23 битов, то есть /24 уже не проходит и не попадает в ТМ. Потом мы бац — и меняем правило — решили блокировать только префиксы длиннее 25. И /24 тогда уже должны быть импортированы.
Тогда BGP по-быстрому перезапрашивает их и применяет обновлённую политику.
Собственно, ввиду беспрецедентного удобства данной возможности, на хуавее упразднён альтернативный путь применить политику без разрыва BGP-сессии: хранить все полученные от соседа маршруты.
Настало время сказать, что существует две BGP-таблицы:
— полученные маршруты — хранит всё.
— одобренные маршруты — хранит только то, что осталось после применения политик (и удовлетворяет прочим требованиям BGP).
И есть даже две команды, которые позволяют посмотреть эти таблицы
display bgp routing-table peer ipv4-address received-routes
display bgp routing-table peer ipv4-address accepted-routes
Однако в связи с упразднением показывают они одно и то же. Для экономии оперативной памяти маршруты, не прошедшие проверки, не хранятся в таблице полученных маршрутов. А при необходимости перезапрашиваются через Route Refresh.
Выключить этот режим можно командой peer keep-all-routes (для конкретного, как вы понимаете, соседа — ибо не плодите сверх необходимого — Оккама). К примеру, если сосед не поддерживает Route-Refresh (такие троглодиты ещё существуют?)
Ну, а если поддерживает, то не обязательно включать keep-all-routes. Технически и наоборот верно — если хранить все маршруты, то можно и не перезапрашивать, но кто ж его выключит — он же базовый функционал BGP (уже почти).
Эти две функции или, хотите, называйте их особенностями поведения, взаимосвязаны, но, строго говоря, не являются полными синонимами.
Например, имея Route-refresh, вы, вероятно, могли бы захотеть в таблице полученных от соседа маршрутов видеть полный список до фильтрации, чтобы лицезреть работу политик.