RIP BGP

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

acb2a914de87611a7f6d42b2832f0e51.png

Сразу отвечу на несколько вопросов, которые могут у вас возникнуть:

  • BGP всё? Нет, конечно. BGP — наше всё. На мой взгляд, это лучший из имеющихся механизмов для передачи маршрутной информации. Максимально гибкий, адаптивный, функциональный и прочие «ий» и «ый».

  • Это было в проде? Нет, это история из лаборатории.

Отдельно отмечу то, что для лучшего понимания нижеописанного стоит почитать что-то на тему VXLAN-EVPN фабрик, хотя в целом, это не является чем-то обязательным, т.к. разговор пойдёт немного о другом, нежели о чистых технологиях.

Дополнительно, дам справку по тем терминам, которые буду использовать ниже:

Underlay — опорная сеть или транспорт, поверх которого строится всё остальное;
Overlay — сервисная часть, или сеть внутри которой ходят наши VPNы и вcе хосты между собой взаимодействуют;
BUM — сокращение от broadcast, unknown unicast и multicast. Тип трафика, который возникает внутри сети и тот механизм, с помощью которого обеспечивается его доставка;
DCI — datacenter interconnect, участок сети и соответствующий ему набор технологий, позволяющий соединять между собой сайты;
EXT — внешняя сеть, условная граница VXLAN-EVPN, откуда к нам могут приходить префиксы 0.0.0.0/0 и т.д.

Теперь, раскрыв сразу все карты, я готов продолжать повествование.

Часть первая. Погружение

Рассказ начну немного издалека. За прошедшие несколько лет я принял участие в построении нескольких десятков фабрик разных масштабов. Если посмотреть по верхам, то можно отследить несколько крупных и достаточно ключевых проектов.

Проект №1.

Это была история про модернизацию сети. Требования были просты и понятны. Две площадки, лифов чуть больше сотни, и только Cisco кругом. Мы не стали ничего выдумывать и сделали всё ровно так, как вендор завещал.

Как вы видите, дизайн был выбран стандартный. Всё это на тот момент было стандартной рекомендацией от Cisco, да и сейчас если что, очень даже неплохо работает.

Проект №2.

Успех первого проекта видимо дал свой результат и к нам обратились ребята покрупнее. Теперь задача выглядела чуть шире, нужно было не только модернизировать ЦОД, но ещё и расширить его новым сервисом.

Мы подошли к этой задаче основательно. Собрали стенд и тщательно исследовали его. В результате увидели, что IS-IS работает не так как нам хочется, зато вот OSPF отлично себя проявил. Обратились к вендору, они нам подтвердили опасения и быстренько валидировали новый дизайн, где в underlay уже крутится OSPF.

Получилась история немного отличная от предыдущей, но всё так же не сильно уникальная. Ну да, добавили стык с MPLS, ну да, поменяли IS-IS на OSPF, но в остальном всё тоже самое.

Проект №3.

Спустя некоторое время, к нам обратились с новой задачей. Теперь уже она стояла немного иначе. Мало того, что нужно было расширить фабрику, так ещё и нужно было добавить туда нового вендора. Новые площадки планировались на базе Huawei, и перед нами стала задача интегрировать их в имеющиеся фабрики на Cisco.

Получается достаточно сложный interop, что в целом всегда не простая задача. Те кто сталкивался, прекрасно меня поймут :).

Получается достаточно сложный interop, что в целом всегда не простая задача. Те кто сталкивался, прекрасно меня поймут :).

Тут нам пришлось очень глубоко покопать в пучинах китайской документации и исследовать в лабе. Честно, это было очень непросто. Документация Huawei очень скудная по данной теме и совсем не включает в себя сценарии включения других вендоров, впрочем как и Cisco, да и вообще любого другого вендора.

Но в конечном итоге, всё получилось. В качестве передачи BUM мы уже на стороне Huawei использовали IR (ingress replication), для underlay eBGP, а для overlay iBGP. Интересно то, что только Huawei позволяет это делать в разных инстансах и запускать параллельно 2 BGP процесса. Очень удобно.

Проект №3

Проект №3

Собственно сайты больше, а в андрелее уже не только бывает OSPF или IS-IS, но ещё и eBGP.

Проект №4.

Пришёл 2022 год. Импортозамещение пришло вместе с ним.

Не буду тут описывать детали всего проекта, подробно всё было на моём первом докладе, вот тут — https://youtu.be/MIW8IQhesaM

Коробки, которые мы использовали, построены на Broadcom Trident3-X7, и очень хорошо дружат со сценариями eBGP-only, мы это подтвердили и в тестах, и от вендора, да и вся индустрия за последнее время. Не стали идти наперекор, сделали так. В итоге вот что получилось.

Проект №4

Проект №4

Как видите, это было больно. Причем больно для всех. И для нас, и для Заказчиков, и для вендоров. Но в итоге тоже всё получилось и данная сеть работает по сей день.

Проект №5.

В тот же самый год у нас появилась новая потребность в импортозамещении, только с некоторыми нюансами.

Нюанс №1. Заказчик хотел себе только связку IS-IS + iBGP в рамках underlay/overlay. Если с оверлеем никаких проблем, то с андрелеем они были.

Нюанс №2. Было требование по некоторым «интересным» сервисам, в рамках которых мы делали overlay через overlay…

Нюанс №3. Дополнительную боль, вызвал ещё момент с оптимизацией стыков через Option-A.

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

Промежуточный итог

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

Если посмотреть на них вместе, то можно выделить следующее:

  • Ни одного полностью одинакового дизайна

  • Каждая архитектура показала превосходный результат и полностью удовлетворила требования заказчика

  • За всё время эксплуатации вышеописанных сетей, ни у одного из заказчиков, не возникло желания перейти на другой набор технологий и протоколов

И тут, я хотел бы подвести всех вас к следующим мыслям:

  • А действительно ли вам нужны все «новые» технологии?

  • Насколько тот же SRv6 поможет вашему бизнесу в решении задач?

  • Как часто у вас вообще случаются сбои в сети, и точно ли они по причине маршрутизации?

  • Действительно ли у вас такой масштаб, что только дизайны ЦОДов пришедшие из Facebook будут для вас актуальны? (отсылка к RFC7938)

  • И многое, многое другое…

Хочу ещё раз уточнить, тут поднимается вопрос не целесообразности новых технологий как таковых, или ставится под сомнение актуальность SRv6 как решения в целом. Нет, конечно. SRv6 отлично себя показывает в облачных технологиях, впрочем как и дизайны из Facebook отлично лягут на какой-то гиперскейл. Я хочу указать вам на то, что не всегда стоит смотреть на других и копировать. Порой стоит оглянуться, и возможно, что-то из имеющегося и давно работающего уже есть под рукой и отлично будет решать вашу задачу.

Собственно тут я предлагаю перейти ко второй части, которая касается непосредственно самого исследования.

Я её озаглавил фразой писателя-фантаста Владимира Савченко, «Прежде чем делать открытие — загляни в справочник ©».

Часть вторая. Прежде чем делать открытие — загляни в справочник ©.

Как вы уже догадались, я вам не просто так до этого рассказывал про определенный набор технологий и решений. Говорить дальше будем тоже про них, а конкретно про EVPN-VXLAN.

Как говорится…

Ни один Иннокентий не пострадал

Ни один Иннокентий не пострадал

Собственно, как я ранее озвучил, у нас есть несколько плоскостей — underlay и overlay. Плюс есть ещё особенность распределения BUM трафика. Мы можем этими вещами управлять и выбирать те протоколы и механизмы, которые будут работать внутри нашего дизайна. Однако, если говорить про BUM или overlay, то тут вариантов практически нет. Грубо говоря, их всего 2 для BUM — ingress replication и multicast, и также 2 для overlay — iBGP и eBGP. Больше выбора то и нет. Причем, часто, работает только какой-то один.

Зато у нас масса вариантов для построения underlay — это и будет цель нашего исследования.

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

Значения которые я привёл выше, взяты из нескольких наших проектов и соответствуют тем требованиям, которые к ним выставляются. Естественно, они не являются абсолютно верными и совершенно точно могут отличаться, как в большую, так и в меньшую стороны.

Отдельно, ещё хочу заметить, что на мой взгляд чем система проще, тем она стабильней. Меньше звеньев — меньше чему ломаться и проще (быстрее или дешевле) чинить.

Собственно, задача сформирована. Пора приступать.

Исследование будем проводить в качестве сравнения разных популярных и не очень протоколов, которые я ранее описывал.

Конкретно взял следующие:

  • OSPF

  • IS-IS

  • BGP

И…

Прошу любить и жаловать!

Протокол, который победил саму смерть!

Протокол, которому в этом году (2024) исполняется 55 лет!

И это, никто иной, как

RIP.

Из плюсов, это самый простой протокол динамической маршрутизации по моему мнению. Да он называется — Routing Information Protocol или Протокол Маршрутной Информации. Что может быть проще?

Также, за такой срок существования, было собрано огромное количество багов и подводных камней.

Ну и отдельно, я предлагаю вам рассматривать его не в ключе, чем он хорош, а «Чем он нам не подходит?».

Собственно, тут стоит озвучить все его минусы. Я выделил 4:

  • Максимальное количество хопов — 16

  • Время реагирования — multiplayer от таймера response (по дефолту 3 минуты)

  • Каждый пакет — это полный набор маршрутной информации

  • Отсутствие всяких фич и прочих «приколов».

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

Давайте пойдём по порядку и рассмотрим каждый из минусов, описанных выше.

Ограничение в 16 hop.

Как вы прекрасно знаете, если маршрут передать больше 15 раз, то на 16 он будет признан недостижимым и если говорить про какую-то большую сеть, это действительно становится проблемой.

Но, мы говорим про ЦОДы, а конкретно про underlay. Давайте посмотрим что же действительно будет происходить в нескольких разных сценариях, если топология будет CLOS.

Вариант 1. 3-tier Clos. Штатная ситуация.

Трафик идёт от leaf-1 до leaf-2, максимальное количество хопов равняется 3, ну нас это более чем устраивает.

Ок, смотрим дальше.

Вариант 2. 3-tier Clos. Максимально возможный отказ.

Предположительно у нас разорвалась куча линков и количество хопов выросло до максимально возможного значения, при которого связь всё-таки сохраняется. Как видите, даже в такой ситуации мы видим значение равное 5. Ну, тоже ок.

Ладно, что я вам всё про 3-tier, когда раньше сказал про 160 коробок. Давайте смотреть 5-tier.

Вариант 3. 5-tier Clos. Штатная ситуация.

Тут разницы большой нет, тоже 5 хопов. Давайте что-нибудь сломаем.

Вариант 4. 5-tier Clos. Частичный отказ.

Сломал несколько выборочных линков, спровоцировал тем самым рост количества хопов до 7. Всё ещё допустимо…

Вариант 5. 5-tier Clos. Максимально возможный отказ.

Выше описана ситуация, с максимально возможным отказом, при котором сохраняется связь. Как видите, она в целом достаточно сложно воспроизводимая… Тут тебе отказали линки и между спайнами и суперспайнами, и между лифами и спайнами, и всё это ещё в каких-то причудливых последовательностях. Так вот, даже в такой, невероятной ситуации, мы всё равно видим количество хопов равное 9.

Какой вывод можно сделать?

Правильно. Нас всё устраивает. И этот минус для нас совершенно не актуален.

Идём дальше. Смотрим пункт 2.

Время реагирования — вечность.

Тут предлагаю не заниматься изобретением велосипедов и просто посмотреть на аналогичные примеры. Конкретно, у нас есть протокол, который имеет ровно такие же таймеры по умолчанию и вы не поверите кто это — eBGP.

Тоже 60×3 = 180 секунд.

Как вы все прекрасно знаете, благодаря всем известному RFC9738, он приобрёл огромную популярность, в котором однозначно определены таймеры для актуальности внутри ЦОДа, а именно 10×3 = 30 секунд.

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

Для наглядности, вот топология выше, но показанная под немного другим углом.

Параметры теста будут следующие:

ECMP включен

Профиль трафика:

  • L3

  • однонаправленный

  • поляризованный

  • pps = 138210

  • пакеты = 9000 байт

Сам тест схематично будет выглядеть вот так:

  • Трафик проходит по выбранному направлению, постоянно фиксируется количество отправленных и полученных пакетов.

  • Мы рвём линк между spine-1 и leaf-2. Фиксируем отказ и ждём восстановления.

  • После восстановления останавливаем тест и фиксируем количество отправленных и полученных пакетов. Так как PPS фиксированный, то мы можем очень точно получить то время, которое пакеты не приходили.

  • Заполняем полученные данные в таблицу и повторяем тест для другого протокола.

Все таймеры, которые используются, являются по сути рекомендованными значениями для сетей внутри ЦОД. Для OSPF и IS-IS — это дефолт, 10×4 и 10×3, соответственно. Для BGP и RIP — писал выше, 10×3.

Вот такие результаты я получил.

Как видите, RIP совсем не так уж и плох в сравнении с другими протоколами.

Что получается, это нас полностью удовлетворяет?

Хм. Разве кого-то из вас, устроит отказ длиной в 30 секунд? Ну или пусть даже 20?

Не уверен. Да и в самом начале, когда мы ставили задачу, я указал те таймеры, которые нас удовлетворят — 999 мс. Всё что больше — авария.

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

В итоге эта проблема тоже для нас неактуальна.

Смотрим дальше и наш третий пункт.

Каждый пакет — это полный набор маршрутной информации

Для наглядности, вот вам картинка.

Очевидно то, что для маршрутизации в Интернете — RIP ну совсем никак не подходит. Никому не захочется получать раз в несколько секунд full view.

Ранее, я указал что предполагаемый ЦОД, будет иметь масштабы в примерно 160 узлов. Если прикинуть, то получается ориентировочно 450+ маршрутов, с учетом loopback и p2p.

Идём на стенд.

Схематично тест будет выглядеть вот так:

  • сначала делаю редистрибьюцию в настроенный протокол 450 маршрутов

  • дальше включаю tcpdump

  • делаю reset сессии

  • жду 60 секунд и прекращаю tcpdump

  • анализирую и собираю всё в таблицу.

В итоге получилась вот такая картина:

В таблице указаны все пакеты, которые передаёт протокол, начиная с процесса установления сессии и дальше в течении 60 секунд. Идея в том, чтобы посмотреть на полный объём данных, который передаётся, а не только в какой-то короткий момент времени. На мой взгляд, это будет честнее.

Как видите RIP тут совсем не в лидерах, в какой-то степени даже проигравший. Правда если посмотреть на тот объём данных, которые передаёт IS-IS с дефолтной настройкой padding, то выходит в 4 раза больше, чем RIP.

Любопытно :)

Ладно, давайте теперь подумаем серьёзно.

Скажите мне, только пожалуйста честно, насколько для вас актуальна разница между передачей 18 пакетов и 45 Кб и допустим, в случае с BGP 18 пакетов и 3 Кб?

Вот серьёзно. У нас 100 Гб/с на Trident-3-x7. Мы реально хотим размышлять об экономии передачи СОРОКА ПЯТИ КИЛОБАЙТ и ВОСЕМНАДЦАТИ ПАКЕТОВ?

На мой взгляд проблема немного преувеличена.

Такс. Это был пункт номер 3. Остался последний.

Отсутствие всяких фич и прочих «приколов»

Тут на самом деле нет абсолютно точной картины, так как бывают варианты и вполне вероятно, что ваши требования смогут отличаться, но я отталкивался от среднестатистической сети EVPN-VXLAN. Вот что получилось:

ECMP — отлично поддерживается всеми протоколами, в том числе и RIP.

P2P authentication доступна из коробки и все вендоры это у себя реализовали.

Маршрутами управлять можно, добавляя те самые hop, и как вы помните у нас есть в запасе несколько.

Возможно что-то ещё? Я подумал и скажу так. Никакие LFA, CSPF и прочие «сложные» штуки, мы не делаем в underlay.

Ну и для наглядности вот вам картинка.

В результате, все тесты пройдены, а требования выполнены.

ДА ЧТО ВАМ ЕЩЁ НУЖНО? ОН ИДЕАЛЕН

В результате, мы видим, что протокол использовать можно, а делать это или нет — уже решайте сами.

Наконец-то мы подходим к финалу.

В заключении, хотел бы сказать следующее. На мой взгляд, залог успеха ваших заказчиков или бизнеса — в использовании того самого инженерного подхода к решению задач. Не бойтесь сомневаться и задавать себе вопрос «Почему?», а перед тем как что-то внедрять, не забывайте смотреть в справочник!

И как полагается, завершу это всё фразой, автора которой я не знаю, но которая мне очень понравилась:

Инженерия — это не просто знание и не просто искусство, а искусство применения знания.

На этом всё!

Надеюсь, было интересно, подписывайтесь на https://t.me/like_a_bus_channel, будет ещё.

© Habrahabr.ru