BGP Soft Reset

Базовым вариантом применения изменений в политиках BGP является полный сброс сессии с соседом и получения всех NLRI вновь. Данная статья содержит информацию о двух вариантах позволяющих избежать подобного.

1. Вводная часть

Аналогично LSDB у OSPF, Topology database у EIGRP, у BGP имеются собственные базы маршрутной информации (далее – RIB [Routing information base]).
BGP имеет аж 3 RIB содержащие следующую информацию:

  • Adj-RIB-In – база с нетронутым набором NLRI полученный от соседей, до применения к ним входящих политик;
  • Loc-RIB – база с актуальным набором NLRI, полученная из Adj-RIB-In обработанной входящими политиками;
  • Adj-RIB-Out – база, которую маршрутизатор посылает соседям. Создаётся из Loc-RIB обработанной исходящими политиками;

Общая последовательность использования баз и их взаимодействие с системой представлены на рисунке ниже (кликабельно):

 

bgp-ribs-12. Политики

Согласно схеме, входящие политики применяют на базу Adj-RIB-In, однако согласно этапу 2 база Ajd-RIB-In очищается по факту успешной обработки политик и перемещения результата в Loc-RIB. Таким образом, в случае обновления политик имеется необходимость получить всю информацию вновь, обеспечив выполнение этапов 1-3.

3. Hard reset

Базовый метод позволяющий выполнить повторный запрос информации у соседа называется Hard reset и обеспечивается полным сбросом соединения с соседом.

Для маршрутизаторов на базе ОС Cisco IOS данная операция выполняется следующей командой:

Для маршрутизаторов на базе ОС Juniper Junos OS данная операция выполняется следующей командой:

 

4. Route Refresh

RFC2918 описывает метод, позволяющий избежать полной реинициализации сессии с соседом, путём отправки в специального типа сообщения – ROUTE REFRESH. Сообщение запрашивает у соседа отправку всей информации. Во время процедуры, включающей: запрос REFRESH, получение информации, применение политик, обновление Loc-Rib – прерывания в маршрутизации не происходит.

Для возможности использования специального метода оба соседа должны поддерживать данную возможность (“Capability: REFRESH” в сообщениях отладки).

Для маршрутизаторов на базе ОС Cisco IOS данная операция выполняется вручную следующей командой:

Необходимость именно ручного запуска связана с отсутствием у ОС знания в какой момент проводить обновления, ведь не известно завершены ли работы по созданию/изменению политик, преждевременная обработка которых может привести к некорректным таблицам маршрутизации.

Для маршрутизаторов на ОС поддерживающих функцию подтверждения о завершении выполнения конфигурирования (commit), например Juniper Junos OS или Cisco IOS-XR, данная операция выполняется автоматически по факту завершения конфигурирования. Разумеется, имеется возможность ручного запуска процесса, например для OC Juniper Junos OS можно использовать следующую команду:

5. Soft Reconfiguration

Более того, имеется возможность обновления политик без необходимости повторного получения всей информации. Данный функционал называется Soft reconfiguration и заключается в локальном хранении базы Adj-RIB-In, т.е. в любой момент времени, локальная база Adj-RIB-In идентичная соседской базе Adj-RIB-Out. Таким образом, отсутствует необходимость на получение информации с целью применения политик и для данных нужд используется локальная база.

Метод, в течение всей работы, использует дополнительную оперативную память по сравнению с использованию оперативной памяти методом Route Refresh, только по факту получения информации.

Soft reconfiguration и Route refresh являются взаимоисключающими и единовременно может использовать только один из методов.

Для операционной системы Cisco IOS настройка происходит для каждого соседа индивидуально:

Несмотря на то, что используется ключевое слово “inbound“, варианта “outbound” не существует, так как сосед на другой стороне ничего не знает о использовании Soft reconfiguration у соседа.

Так же имеется возможность настроить использование Soft reconfuguration как fallback-механизма, т.е. только в случае отсутствия поддержки типа Route Refresh на соседском маршрутизаторе.

Для маршрутизаторов на базе Cisco IOS метод не исключает необходимость ручного запуска переработки Adj-RIB-In и выполняется вручную следующей командой:

Для маршрутизаторов на ОС поддерживающих функцию подтверждения о завершении выполнения конфигурирования (commit), например Juniper Junos OS или Cisco IOS-XR, данная операция выполняется автоматически по факту завершения конфигурирования.

Для оборудования на базе ОС Juniper Junos OS функция soft reconfiguration включена(!) по умолчанию, однако хранятся все маршруты кроме тех, в AS_PATH которых содержится номер нашей AS (loop). Имеется возможность управления данным поведением с помощью следующих команд:

, ключевое слово all обозначает “хранить локально всю BGP-информацию, включая содержащую номер нашей AS в атрибуте AS_PATH”, ключевое слово none отключает локальное хранение в Adj-RIB-In. Поведение по умолчанию можно обеспечить удалением слова keep.

6. Источники

RFC2918

BGP в Cisco [RU]

Книга BGP Design and Implementation

BGP Soft Reset Enhancement

Junos ® OS BGP Configuration Guide

SHARE: Tweet about this on TwitterShare on FacebookShare on VKShare on LinkedInShare on Google+Email this to someone
  • BonchBruevich

    Отлично. Хочется добавить, что Cisco-команда sh ip bgp показывает Loc-RIB.

    Если для соседа активирована функция soft-reconfiguration, то команда sh ip bgp x.x.x.x будет дополнительно содеражть статус для префикса x.x.x.x. Или received&used, если этот префикс успешно перешёл из Adj-RIB-in в LocIN и маршрут к нему используется при выборе лучшего пути. Или received-only, если префикс не прошёл по новым политикам. В последнем случае вывод sh ip bgp не будет содержать этот префикс и для выбора лучшего маршрута он использоваться не будет.

    Ещё слово soft в cisco-команде ставится после, а не перед ip-соседа.
    clear ip bgp soft
    Впрочем, возможно, это зависит от версии IOS.

    • Sk1f3r

      Спасибо за ваш комментарий.

      Статья задумывалась как вендоронейтральная, кроме исключительных показательных примеров, таких как требование ручного запуска. Разбавил статью несколькими командами для Juniper :)

      По поводу расположения ключевого слова “soft” это разумеется ошибка и вариантов где слово писалось бы до не встречал – спасибо, исправлено.