Протокол BGP использует множество сообщений для установления соединения, обмена информацией о маршрутизации, проверки наличия удаленного соседа BGP и / или уведомлений, если возникают какие-либо ошибки. Для этого BGP использует 4 типа сообщений: Open, Update, Keepalive и Notification. Данные сообщения используют заголовок фиксированного размера, он включает в себя поле type, которое указывает, какого типа данное сообщение. В этой статье рассмотрены сообщения BGP с примерами перехвата Wireshark.
Содержание:
Топология
Исследуемая топология состоит из двух маршрутизаторов (Cisco 1941 с образомCisco IOS Version 15.9(3)M6). Допускается использование других моделей маршрутизаторов и версий программного обеспечения Cisco IOS. В зависимости от модели маршрутизатора и версии программного обеспечения Cisco IOS, доступные команды и полученные результаты могут отличаться от показанных в этой статье.
Схема топологии следующая:
Настройки маршрутизатора R1
Настройки маршрутизатора R2
Сообщение Open
Как только два маршрутизатора BGP завершили «трехстороннее рукопожатие» TCP, они попытаются установить сеанс BGP с использованием сообщений Open. В сообщении Open информация должна быть согласована и принята обоими маршрутизаторами, прежде чем они смогут обменяться любой информацией о маршрутизации. Несколько пунктов, которые можно найти в сообщении типа Open:
- Version: версия BGP, которую использует маршрутизатор. Текущая версия BGP — это версия 4, которая описана в RFC 4271. Два маршрутизатора BGP будут пытаться согласовать совместимую версию. При несоответствии установление сеанса невозможно.
- My AS: номер AS маршрутизатора BGP. Маршрутизаторы должны будут согласовать номера AS, а также определить, будут ли они работать с iBGP или eBGP.
- Hold Time: максимальное время в секундах, которое может пройти между получением Keepalive и сообщением Update. Если BGP не получает никаких сообщений о сохранении или обновлении с другой стороны в течение времени удержания (hold time), тогда он объявит другую сторону недоступной и завершит сеанс BGP. По умолчанию hold time на маршрутизаторах Cisco IOS составляет 180 секунд, сообщение Keepalive отправляется каждые 60 секунд. Оба маршрутизатора должны согласовать hold time или установление сеанса BGP будет невозможно.
- BGP Identifier: выбирает путь пересылки BGP-сообщений при наличии более одного канала связи между BGP-соседями. Локальный идентификатор маршрутизатора (router-ID) BGP выбирается приоритетно (так же, как и OSPF):
- Используйте router-ID, который можно настроить вручную с помощью команды
bgp router-id
. - Используйте самый большой IP-адрес в интерфейсе loopback (в состоянии up / up).
- Используйте самый большой IP-адрес на физическом интерфейсе (в состоянии up / up).
- Используйте router-ID, который можно настроить вручную с помощью команды
- Optional Parameters: поле добавлено для дополнительных возможностей и функций маршрутизатора BGP без необходимости создания новой версии. Здесь можно найти:
- поддержку MP-BGP (Multi Protocol BGP);
- поддержку BGP Soft Reconfiguration;
- поддержку 4-байтовые номера AS.
Пример захвата Wireshark сообщения Open между R1 и R2:
В примере можно увидеть версию BGP, номер AS, время ожидания, идентификатор BGP и дополнительные параметры (обновление MP-BGP и маршрута). Верхнее поле marker используется для указания того, применяется ли проверка подлинности MD5 или нет. Когда это поле заполняется единицами, аутентификация не используется.
Сообщение Update
Как только два маршрутизатора станут соседями BGP, они могут начать обмен информацией о маршрутизации. Это делается с помощью сообщений Update. В сообщениях Update находится информация об объявляемых маршрутах. Сообщение Update включает в себя информацию о доступности сетевого уровня (NLRI, Network Layer Reachability Information), которая содержит маршрут и связанные с ним Path Attributes BGP при объявлении маршрутов. Несколько пунктов, которые можно найти в сообщении типа Update:
- Withdrawn Route Length: в этом поле отображается длина поля Withdrawn Routes в байтах. Когда оно заполнено нулями, маршрутов нет, и поле Withdrawn Routes не будет отображаться.
- Withdrawn Routes: в этом поле отображаются все маршруты, которые должны быть удалены из таблицы BGP.
- Total Path Attribute Length: общая длина поля Path Attributes.
- Path Attributes: здесь хранятся атрибуты BGP для маршрута (например, origin, as_path, next_hop, med, local preference и т. д.). Эти атрибуты пути хранятся в TLV-формате (Type, Length, Value).
Каждый из атрибутов BGP также имеет флаг атрибута (attribute flag), который сообщает BGP-маршрутизатору, как обрабатывать атрибут. Вот несколько битовых флагов:
- Optional: когда атрибут хорошо известен, этот бит установлен в 0, а когда он optional, то бит = 1.
- Transitive: когда optional-атрибут не является транзитивным, этот бит устанавливается равным 0, когда он является транзитивным, он устанавливается в 1.
- Partial: когда атрибут optional завершен, этот бит устанавливается в 0, когда он завершен частично, он устанавливается в 1.
- Extended Length: когда длина атрибута равна 1 октету, бит равен 0, для 2 октетов значение равно 1. Этот флаг расширенной длины может использоваться только в том случае, если длина значения атрибута превышает 255 октетов.
Давайте посмотрим на сообщение об обновлении от R1, после объявления своей сети в BGP:
Вот захват wireshark:
Никакие маршруты не выводятся, и также есть несколько атрибутов BGP. Атрибут AS_PATH является Transitive, а MULTI_EXIT_DISC является Optional. Также можно найти информацию о NLRI с маршрутом.
Отключим интерфейс loopback на R1, чтобы увидеть withdrawn в сообщении Update:
Вот захват wireshark:
Withdrawn Route Length составляет 5 байтов. В поле Withdrawn Routes виден маршрут 1.1.1.1/32, который следует удалить.
Сообщения Keepalive
Чтобы убедиться, что другая сторона «всё ещё существует», используются периодические сообщения Keepalive. По умолчанию BGP отправляет 19-байтовые сообщения Keepalive каждые 60 секунд. Когда удаленный сосед BGP пропускает три Keepalives (3 x 60 = 180 секунд, значение времени удержания), он будет очищать маршруты от соседа BGP. Значение Keepalive должно быть согласовано между двумя маршрутизаторами BGP. Если время удержания установлено равным нулю, сообщения Keepalive между соседями BGP не отправляются.
Вот захват сообщения Keepalive:
Сообщение Keepalive действительно очень простое, это просто базовый заголовок с длиной (19 байт) и типом.
Сообщения Notification
Сообщение Notification используется, когда возникает ошибка, которая приведет к прекращению существования соседства BGP. Когда что-то пойдет не так, уведомление будет отправлено, и сеанс будет прекращен.
Сессия TCP будет очищена, все записи от этого соседа BGP будут удалены из таблицы BGP, и сообщения Update с Withdrawn Routes будут отправлены другим соседям BGP.
Существует список с кодами ошибок BGP, и каждый код ошибки имеет подтип. Вот примеры Error Code:
- 1 — Message Header Error
- 2 — OPEN Message Error
- 3 — UPDATE Message Error
- 4 — Hold Timer Expired
- 5 — Finite State Machine Error
- 6 — Cease
Для каждого из них есть подтип, который объясняет ошибку детальнее. Например, для OPEN Message Error ниже приведены некоторые подтипы:
- Unsupported version number
- Bad peer AS
- Bad BGP identifier
- Unsupported optional parameter
- Unacceptable hold time
Примечание: список со всеми кодами ошибок и их подтипами довольно велик. Чтобы увидеть больше, загляните в этот список IANA.
Создадим пример такого уведомления. На R2 изменим номер AS с 2 на 22:
Вот захват wireshark:
R1 отправляет R2 сообщение Notification с основной ошибкой OPEN Message Error и подтипом Bad peer AS.
Выводы
Спасибо за уделенное время на прочтение статьи. Теперь Вы знаете больше о сообщениях BGP при установлении соединения.
Если возникли вопросы, задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet (программируемые сети) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.