Сейчас сложно представить себе мало-мальски серьезную сеть, в которой не использовался бы протокол BGP. И чаще всего используется он на стыке с другими операторами и солидными клиентами, а потому надеюсь статья будет полезна даже тем, кто ни разу не слышал про RR и не думал, включать next-hop-self или нет. Сразу оговорюсь, все примеры я буду приводить использую маршрутизаторы Cisco. Под оптимизацией я подразумеваю в первую очередь уменьшение времени простоя сети в случае аварии и сходимости после ее устранения. И, да, часть методов требует настройки спикера на другом конце кабеля.
Итак, 5 способов оптимизировать поведения протокола BGP на границе сети при помощи таймеров:
Наименее популярный способ увеличения производительности протокола BGP — изменения значений таймеров, а потому и наименее освещенный. Предполагается что квалифицированные разработчики IEEE заложили значения влияющих на поведение протокола констант по-умолчанию оптимальными. Все же иногда реальность вынуждает их изменить. Вот что мы можем сделать:
Эти таймеры отвечают за поддержание сессии, если спикер в течении периода Holdtime не получит от соседа посылаемое через Keepalive интервал сообщение, то он помечает его недоступным и маршруты — недействительными. Согласно RFC4271 значения этих таймеров рекомендуется выставить соответственно 30 и 90 (keepalive * 3) секунд. На маршрутизаторах Cisco эти значения по умолчанию равны 60 и 180 секундам.
Во время установления BGP сессии спикеры обмениваются значениями Holdtime и для работы выбирается наименьший, следовательно если мы таки решили их подкрутить, то согласие удаленной стороны нам не требуется. Итак, выставим значения Keepalive и Holdtime согласно RFC.
Параметр min_HoldTime позволяет указать минимальное значение HoldTime, которое будет принято для установление сессии. Т.е. если администратор на другом конце в отчаянии выставит HoldTime равным 30 секундам, то мы такую сессию попросту не примем. После изменения таймеров BGP нужно передернуть.
Отвечает за скорость обмена префиксами (advertisement и withdrawal), по умолчанию равен 30 секундам в случае ebgp. Чаще всего его использование разумно совместно с conditional advertisement, да и вообще на всех нестабильных multihomed площадках.
Этот параметр определяет время между установлением BGP сессии между спикерами и началом обмена префиксами. Использование init delay таймера улучшает сходимость, так как удаленный маршрутизатор использует это время с пользой. А именно определяет свои лучшие маршруты, дабы потом быстро принять верное решение. По-умолчанию равно 120 секундам,
но если мы уверены в том, что лучшие маршруты уже в RIB, да и вообще их немного, то можем обменяться ими раньше и наоборот.
Контролирует поведение Background BGP scanner. Который в свою очередь сканирует, сортирует и чистит IP и BGP RIB, поддерживая таким образом работу всего протокола. Как известно BGP использует только маршруты с доступным next-hop и в случае его исчезновения из IP RIB удаляет и префикс. Этой проверкой и занимается background scanner, пробегающий все маршруты раз в 60 секунд для IPv4 и раз в 15 для VPNv4. Если за спиной у спикера нестабильно работающий IGP, то в эти интервалы возможны временные петли и черные дыры. В обмен на загрузку маршрутизатора мы можем изменить частоту сканирования (отдельно для каждый address-family):
Этот таймер определяет время, по прошествии которого протокол проверяет установлена ли TCP сессия между спикерами. Если нет, то пробует ее установить. Этот процесс никак не связан с реакцией на входящее соединение. На маршрутизаторах Cisco значение этого таймера равно 120 секундам и в настоящий момент изменить его нельзя. Так как считается что это может помешать корректной установке TCP сессии. Тем не менее на Juniper его поменять можно.
Далее — 5 способов оптимизировать BGP на границе сети при помощи сторонних протоколов.
— Используемая литература:
RFC4271 — A Border Gateway Protocol 4 (BGP-4)
Border Gateway Protocol (BGP) — Cisco.com
Configuring BGP Routing — Juniper
Итак, 5 способов оптимизировать поведения протокола BGP на границе сети при помощи таймеров:
Наименее популярный способ увеличения производительности протокола BGP — изменения значений таймеров, а потому и наименее освещенный. Предполагается что квалифицированные разработчики IEEE заложили значения влияющих на поведение протокола констант по-умолчанию оптимальными. Все же иногда реальность вынуждает их изменить. Вот что мы можем сделать:
1. Keepalive и Holdtime
Эти таймеры отвечают за поддержание сессии, если спикер в течении периода Holdtime не получит от соседа посылаемое через Keepalive интервал сообщение, то он помечает его недоступным и маршруты — недействительными. Согласно RFC4271 значения этих таймеров рекомендуется выставить соответственно 30 и 90 (keepalive * 3) секунд. На маршрутизаторах Cisco эти значения по умолчанию равны 60 и 180 секундам.
Во время установления BGP сессии спикеры обмениваются значениями Holdtime и для работы выбирается наименьший, следовательно если мы таки решили их подкрутить, то согласие удаленной стороны нам не требуется. Итак, выставим значения Keepalive и Holdtime согласно RFC.
Router(config-router)#timers bgp 30 <keepalive:0-65535> 90 <HoldTime:0-65535> 90 <min_HoldTime:0-65535>
Router(config-router)#neighbor x.x.x.x timers 30 <keepalive:0-65535> 90 <HoldTime:0-65535> 90 <min_HoldTime:0-65535>
Параметр min_HoldTime позволяет указать минимальное значение HoldTime, которое будет принято для установление сессии. Т.е. если администратор на другом конце в отчаянии выставит HoldTime равным 30 секундам, то мы такую сессию попросту не примем. После изменения таймеров BGP нужно передернуть.
2. Advertisement Interval
Отвечает за скорость обмена префиксами (advertisement и withdrawal), по умолчанию равен 30 секундам в случае ebgp. Чаще всего его использование разумно совместно с conditional advertisement, да и вообще на всех нестабильных multihomed площадках.
Router(config-router)#neighbor x.x.x.x advertisement-interval <0-600>
3. Initial delay
Этот параметр определяет время между установлением BGP сессии между спикерами и началом обмена префиксами. Использование init delay таймера улучшает сходимость, так как удаленный маршрутизатор использует это время с пользой. А именно определяет свои лучшие маршруты, дабы потом быстро принять верное решение. По-умолчанию равно 120 секундам,
но если мы уверены в том, что лучшие маршруты уже в RIB, да и вообще их немного, то можем обменяться ими раньше и наоборот.
Router(config-router)#bgp update-delay <1-3600>
4. BGP scanner
Контролирует поведение Background BGP scanner. Который в свою очередь сканирует, сортирует и чистит IP и BGP RIB, поддерживая таким образом работу всего протокола. Как известно BGP использует только маршруты с доступным next-hop и в случае его исчезновения из IP RIB удаляет и префикс. Этой проверкой и занимается background scanner, пробегающий все маршруты раз в 60 секунд для IPv4 и раз в 15 для VPNv4. Если за спиной у спикера нестабильно работающий IGP, то в эти интервалы возможны временные петли и черные дыры. В обмен на загрузку маршрутизатора мы можем изменить частоту сканирования (отдельно для каждый address-family):
Router(config-router)#bgp scan-time <5-60>
5.Connect Retry timer
Этот таймер определяет время, по прошествии которого протокол проверяет установлена ли TCP сессия между спикерами. Если нет, то пробует ее установить. Этот процесс никак не связан с реакцией на входящее соединение. На маршрутизаторах Cisco значение этого таймера равно 120 секундам и в настоящий момент изменить его нельзя. Так как считается что это может помешать корректной установке TCP сессии. Тем не менее на Juniper его поменять можно.
Далее — 5 способов оптимизировать BGP на границе сети при помощи сторонних протоколов.
— Используемая литература:
RFC4271 — A Border Gateway Protocol 4 (BGP-4)
Border Gateway Protocol (BGP) — Cisco.com
Configuring BGP Routing — Juniper