Таймеры протокола BGP. Сходимость протокола.

Продолжаем небольшую серию статей о тюнинге таймеров протоколов маршрутизации.

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

При размышлении над темой статьи и анализе, как это будет выглядеть, я задался вопросом: А есть ли вообще смысл уменьшать таймеры BGP, как например мы делали в протоколе OSPF?

В протоколах IGP определенно смысл в уменьшении таймеров есть. Наша сеть небольшая, расстояния также не велики, главная задача быстро передавать трафик внутри сети и моментально реагировать на изменения в сети (изменение топологии и т.д.), а также обеспечить моментальное перенаправление трафика при возникновении аварий на сети. В BGP смысл в настройке таймеров также есть.

Протокол BGP — это протокол EGP, он используется для маршрутизации трафика между различными сетями, как внутри огранизации, для соединения отдаленых офисов, так и для самой популярной сетью — сетью Интернет. В зависимости от целей использования протокола, BGP делится на iBGP и eBGP.

BGP1

iBGP необходим для передачи BGP-маршрутов внутри одной автономной системы.  eBGP – обычный BGP между автономными системами.

Если посмотреть на протокол BGP в данном контексте (уменьшение таймеров), то здесь важна больше стабильность и надежность. Если учесть, что на данный момент маршрутов IPv4 в сети Интернет приближается к полумиллиону, частые сбросы сессий , частые обновления в рамках глобальных сетей не совсем уместны, они вносят нестабильность в работу сети. Поэтому важно помнить, быстрая сходимость не главная цель BGP, в отличие от протоколов IGP, надежность и стабильность. Однако, в некоторых реализациях MPLS VPN быстрая сходимость BGP крайне необходима, но это уже совсем другая тема.

Давайте опишем параметры, которые мы можем изменять в протоколе BGP, а затем более детально рассмотрим каждый из них.

BGP network timers (Keepalive and Holdtime) –Таймеры для поддержания сессии BGP

Advertisement Interval –Используется для контроля и управления минимальным интервалом отправки BGP Update

Initial delay for sending updates – Задержка перед отправкой обновления BGP маршрутов. Используется для улучшения сходимости сети, а также для защиты от нестабильных маршрутов.

Background BGP scanner – Используется для сортировки IP RIB и BGP RIB, а также удаления записей из них.

ConnectRetry timer – Таймер, определяющий время, после которого необходимо вновь попробовать установить разорванную сессию с BGP соседом.

Fast Fallover –Параметр, отвечающий за быстрое обнаружение проблем на сети и разрыв BGP сессии.

Bidirectional Forwarding Detection (BFD) – Протокол, отвечающий за быстрое обнаружение разрыва BGP сессии, постоянно опрашивает соседа

 

BGP network timers (Keepalive and Holdtime)

Таймеры необходимы чтобы контролировать и проверять статус доступности соседа. По умолчанию, Keepalive сообщения отправляются каждые 30 секунд. Таймер Holdtime рекомендуется устанавливать равным отправке трех Keepalive сообщений. Данные таймеры рекомендуемые и описаны в RFC 4271. Таким образом, если от соседа не поступает сообщения Keepalive в течении 90 секунд (3 сообщения keepalive), сосед считается недоступным.

В оборудовании Сisco по умолчанию используются другие таймеры 60 секунд и 180 секунд, Keepalive и Holdtime, соответственно. То есть данные таймеры могут быть различными в зависимости от вендора оборудования.

Как происходит согласование данных таймеров при установлении сессии BGP?
Когда соединениеу станавливается, происходит сначала согласование таймера Holdtime между соседями – выбирается наименьший из двух. Затем происходит согласование таймера Keeplive. Данный таймер настраивается локально, то есть каждый BGP маршрутизатор может использовать свое значение данного параметра.
Получается, если мы хотим уменьшить время Holdtime, то достаточно изменить его на нашей стороне. Важно помнить, что изменения применятся только после hard reset сессии BGP. Если же мы хотим защитить себя от изменения таймера другой стороной, то можно установить параметр min_HoldTime.

Пример настройки:

Router(config-router)#timers bgp <keepalive:0-65535> <HoldTime:0-65535> <min_HoldTime:0-65535>
Router(config-router)#neighbor x.x.x.x timers <keepalive:0-65535> <HoldTime:0-65535> <min_HoldTime:0-65535>

Стоит также отметить следящую особенность.Например, при согласовании HoldTime на локальном маршрутизаторе сконфигурирован min_HoldTime равный 60 секундам, а удалённый BGP маршрутизатор имеет HoldTime равный меньше 60 секунд, сессия не установится. То есть HoldTime удаленной стороны должен быть равным или больше min_HoldTime локального маршрутизатор. В противном случае получите следующее сообщение «unacceptable HoldTime»

Не рекомендуется устанавливать таймер HoldTime менее 20секунд.

Advertisement Interval

Таймер задержи отправки обновлений BGP соседям. Параметр необходим для стабилизации отправки обновлений BGP, а также для контроля обновлений BGP. По умолчанию обновления для iBGP соседей отправляются каждые 5 секунд, для eBGP соседей каждые 30 секунд. То есть, отправили обновление, следующее отправится только через 5 секунд.

Чтобы изменить данный интервал используется следующая команда:

Router(config-router)#neighbor x.x.x.x advertisement-interval <0-600>
Initial delay for sending updates

Максимальная начальная задержка перед отправкой обновлений. Этот таймер определяет время между установлением сессии BGP и началом обмена префиксами между двумя BGP пирами. Использование данного таймера улучшает сходимость протокола, так как за это время у маршрутизатора есть возможность определить свои лучшие маршруты, чтобы потом быстрей принять верное решение для передачи трафика. Значение таймера по умолчанию составляет 120 секунд. Если мы уверены в том, что лучшие маршруты уже в RIB, да и вообще их немного, то можем обменяться ими раньше.

Мы можем настроить таймер следующей командой:

Router(config-router)#bgp update-delay <1-3600>

Background BGP scanner

Данный параметр ответственен за сканирование таблиц BGP RIB и IP RIB маршрутизатора, а также за сортировку и удаление записей из них.
Как известно, BGP использует только маршруты с доступным next-hop и в случае его исчезновения удаляет из таблиц. Этим и занимается backgroundscanner, он пробегает все маршруты 1 раз в 60 секунд для IPv4 и 15 секунд для VPNv4 по умолчанию. Если в нашей внутренней сети у BGP маршрутизатора нестабильно работает IGP, то в этих интервалах возможны образования петель маршрутизации.

Изменить данный таймер можно следующей командой:

Router(config-router)#bgp scan-time <5-60>

Стоить заметить, что командой, написанной выше, мы изменим таймер только для IPv4, настройки для VPNv4 настраиваются отдельно для каждой address-family.

ConnectRetry timer

Данный таймер необходим для постоянного контроля и управления BGP сессиями. Этот таймер описывает время проверки TCP сессий между BGP узлами, если при проверке обнаруживается, что TCP сессия не установлена, то выполняется новая попытка установить сессию. Другими словами, это время, которое должно пройти, прежде чем вновь установить соединение с потерянным соседом. Например, есть работающая сеть и два маршрутизатора, вдруг на канале происходит обрыв, сессия рвётся, и попытка вновь установить сессию будет через 120 секунд и так далее, пока не восстановится канал.

По умолчанию на оборудовании Cisco данный таймер равен 120 секунд, и изменить его нельзя.

Fast Fallover

Следующий параметр настраивается для сброса bgp сессий при возникновении проблем с каналом. Существует две настройки данной функции в зависимости от способа подключения.

Первый случай.
Настройки производятся на интерфейсе и используется для EBGP узлов, непосредственно подключенных друг к другу.

Router(config-if)#ip bgp fast-external-fallover <permit/deny>

По умолчанию установлено значение permit. Этот параметр позволяет сразу после того как пропал EBGP сосед, сбросить EBGP сессию с ним, не дожидаясь истечения таймера HoldTime.

Второй случай.
Настройки производятся в самом протоколе BGPна маршрутизаторе, для каждого BGP соседа.

Router(config-router)#neighbor x.x.x.x fall-over

Смысл тот же, если сосед становиться недоступным, сессия EBGP сбрасывается, не дожидаясь истечения таймера HoldTime.
Также данную команду можно вводить c параметром route-map, а в route-map записать необходимые нам параметры.

Router(config-router)#neighbor x.x.x.x fall-over <route-map>

Например, на соседа можно прописать следующее: Если становится недоступна определенная сеть, которую анонсировал сосед, то мы разрываем тут же соседские отношения.

neighbor x.x.x.x fall-over route-map BGP_map
route-map BGP_map permit 10
match ip address prefix-list 15

Фактически данный параметр сначала переводит сеанс BGP в нерабочее состояние, а затем адрес удаляется из таблицы маршрутизации и после удаления возможна новая попытка установления сессии с этим же соседом, не дожидаясь истечения таймера ConnectRetry.

Bidirectional Forwarding Detection

Протокол для обнаружения проблем доступности BGP соседа. BFD может использоваться не только с BGP, но и с другими протоколами маршрутизации.
Bidirectional Forwarding Detection (BFD) – это протокол, работающий поверх других протоколов, позволяющий сократить время обнаружения проблемы до 50мс. BFD является двусторонним протоколом, т.е. требует настройки обоих маршрутизаторов (Оба генерируют BFD пакеты и отвечают друг другу). Данный протокол подробно описан в RFC 5880 5881.

Каждый из двух маршрутизаторов, на которых настроен протокол BFD, периодически посылает «Hello» сообщения своему соседу. Получение данного сообщения означает работоспособность канала в одном определенном направлении, неполучение «Hello» сообщения говорит о неработоспособности канала, что и фиксирует протокол BFD. По умолчанию на неработоспособность канала указывают 3 подряд не полученных пакета «Hello». Количество пакетов и их интервал отправки может быть изменен при конфигурации протокола.

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

Настройка BFD для соседа BGP:

Router(config-router)#neighbor x.x.x.x fall-over bfd

Настройка BFD на интерфейсе:

Router(config-if)#bfd interval <50-999>min_rx<50-999> multiplier <3-50>

Первый интервал -интервал генерации пакетов протоколом BFD (в миллисекундах), от 50 до 999
Второй интервал — минимальный интервал между входящими control пакетами, от 50 до 999
multiplier — количество пакетов, которые BFD может пропустить, прежде чем информировать 3 уровень модели OSI о проблеме.

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

Надеюсь, материал был полезен и поможет вам в решении ваших задач.

До новых встреч.

 

Best regards
Dmitry Sultanakhmetov


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Hide me
Получать регулярно свежие материалы, лабораторные и вебинары
Email Имя
Show me