Описание работы BGP

 

Протокол BGP не предъявляет никаких требований к топологии сети. BGP может работать в режиме iBGP, так и eBGP.

iBGP — когда соседство между маршрутизаторами устанавливается внутри одной AS.

eBGP — соседство устанавливается между маршрутизаторами разных AS. 

Если рассматривать сеть Internet «глазами» протокола BGP, то это будет граф, состоящий из автономных систем (AS), где каждой AS соответствует уникальный номер. Соединение между двумя AS формирует путь, а информация о совокупности путей от одного узла в AS к узлу в другой AS составляет маршрут. Протокол BGP активно использует информацию о маршрутах к заданному пункту назначения, что позволяет избежать образования петель маршрутизации между доменами.

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

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

 

Изображение с ресурса xgu.ru как происходит процесс обработки маршрутной информации:

Формат сообщений BGP

Сообщение BGP состоит из двух частей — заголовка и части данных. BGP запускается путем отправки четырех типов сообщений: open, update, notification и keepalive. Формат заголовка у всех типов один. Передаются сообщения на основе TCP (порт 179). Длина может быть от 19 до 4096 октетов. Заголовок каждого сообщения BGP состоит из трех полей и составляет 19 октетов.

Типы сообщений BGP

BGP использует при работе четырех типа сообщений:

  1. OPEN — Устанавливает и настраивает смежность BGP.
    Сообщение OPEN используется для установки смежности BGP. Обе стороны согласовывают вероятности сеанса до установки пиринга. Сообщение OPEN содержит номер версии BGP, ASN исходного маршрутизатора, время удержания, идентификатор BGP и другие дополнительные параметры, которые определяют возможности сеанса.
  2.  UPDATE — Объявляет, обновляет или отменяет маршруты.
    Сообщение Update объявляет любые возможные маршруты, отменяет ранее объявленные или может делать и то, и другое. Сообщение UPDATE включает информацию о доступности сетевого уровня (NLRI), которая включает префикс и связанные с ним PA BGP при объявлении префиксов. Изъятые NLRI включают только префикс. Сообщение UPDATE может действовать как Keepalive для уменьшения ненужного трафика.
  3. NOTIFICATION — Указывает на состояние ошибки соседу BGP.
    Сообщение NOTIFICATION отправляется, когда в сеансе BGP обнаруживается ошибка, такая как истечение таймера удержания, изменение возможностей соседей или запрос сброса сеанса BGP. Это сообщение приводит к закрытию BGP-соединения.
  4. KEEPALIVE — Обеспечивает работоспособность соседей BGP.
    BGP не полагается на состояние TCP-соединения, чтобы гарантировать, что соседи все еще работают. Сообщения Keepalive обмениваются каждые треть таймера удержания, согласованного между двумя маршрутизаторами BGP. Если время удержания установлено равным нулю, сообщения Keepalive между соседями BGP не отправляются.

Состояния соседства BGP

BGP формирует сеанс TCP с соседними маршрутизаторами, известными как одноранговые узлы. BGP использует конечный автомат (FSM) для ведения таблицы всех одноранговых узлов BGP и состояния их работоспособности. Сеанс BGP может сообщать о следующих состояниях:

  • Idle:
    Это первый этап BGP FSM. BGP обнаруживает стартовое событие, пытается инициировать TCP-соединение с одноранговым узлом, а также ожидает нового соединения от однорангового маршрутизатора.
  • Connect:
    В этом состоянии BGP запускает TCP-соединение. Если трехстороннее подтверждение TCP завершается, установленный процесс BGP сеанса сбрасывает ConnectRetryTimer и отправляет сообщение Open соседу, а затем переключается в состояние OpenSent.
  • Active:
    В этом состоянии BGP начинает новое трехстороннее квитирование TCP. Если соединение установлено, отправляется сообщение Open, таймер удержания устанавливается на 4 минуты, и состояние переключается в OpenSent. Если эта попытка TCP-подключения не удалась, состояние возвращается в состояние Connect и сбрасывает ConnectRetryTimer.
  • OpenSent:
    В этом состоянии исходный маршрутизатор отправляет сообщение OPEN и находится в ожидании сообщения OPEN от другого маршрутизатора. После того, как исходный маршрутизатор получает сообщение OPEN от другого маршрутизатора. Оба сообщения проверяются на наличие ошибок.
  • OpenConfirm:
    В этом состоянии BGP ожидает сообщения Keepalive или Notification. После получения сообщения Keepalive от соседа состояние меняется на Established. Если время таймера удержания истекает, происходит событие остановки или получено сообщение NOTIFICATION, и BGP переключается в состояние IDLE.
  • Established:
    В этом состоянии сеанс BGP установлен. Соседи BGP обмениваются маршрутами через сообщения обновления. При получении сообщений Update и Keepalive таймер удержания сбрасывается. Если таймер удержания истекает, обнаруживается ошибка, и BGP переводит соседа обратно в состояние IDLE.

 

Атрибуты пути (path attributes)

Атрибуты пути разделены на 4 категории:

  1. Well-known mandatory — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).
  2. Well-known discretionary — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.
  3. Optional transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.
  4. Optional non-transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.

Примеры атрибутов BGP:

  • Well-known mandatory:
    • Autonomous system path
    • Next-hop
    • Origin
  • Well-known discretionary:
    • Local preference
    • Atomic aggregate
  • Optional transitive:
    • Aggregator
    • Communities
  • Optional non-transitive:
    • Multi-exit discriminator (MED)
    • Originator ID
    • Cluster list

Autonomous system path

 

Атрибут Autonomous system path (AS Path):

  • Описывает через какие автономные системы надо пройти, чтобы дойти до сети назначения.
  • Номер AS добавляется при передаче обновления из одной AS eBGP-соседу в другой AS.

Используется для:

  • обнаружения петель
  • применения политик

Каждый сегмент атрибута AS path представлен в виде поля TLV (path segment type, path segment length, path segment value):

  • path segment type — поле размером 1 байт для которого определены такие значения:
    • 1 — AS_SET: неупорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update,
    • 2 — AS_SEQUENCE: упорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update
  • path segment length — поле размером 1 байт. Указывает сколько автономных систем указано в поле path segment value
  • path segment value — номера автономных систем, каждая представлена полем размером 2 байта.

Next-hop

 

Атрибут Next-hop

  • IP-адрес следующей AS для достижения сети назначения.
  • Это IP-адрес eBGP-маршрутизатора, через который идет путь к сети назначения.
  • Атрибут меняется при передаче префикса в другую AS

 

Origin

Атрибут Origin — указывает на то, каким образом был получен маршрут в обновлении.

Возможные значения атрибута:

  • 0 — IGP: NLRI получена внутри исходной автономной системы;
  • 1 — EGP: NLRI выучена по протоколу Exterior Gateway Protocol (EGP). Предшественник BGP, не используется
  • 2 — Incomplete: NLRI была выучена каким-то другим образом

Local preference

Атрибут Local preference:

  • Указывает маршрутизаторам внутри автономной системы как выйти за её пределы.
  • Этот атрибут передается только в пределах одной автономной системы.
  • На маршрутизаторах Cisco по умолчанию значение атрибута — 100.
  • Выбирается та точка выхода у которой значение атрибута больше.
  • Если eBGP-сосед получает обновление с выставленным значением local preference, он игнорирует этот атрибут.

Atomic aggregate

Метка, указывающая, что NLRI является summary.

Aggregator

Список RID и ASN маршрутизаторов, создавших summary NLRI.

Communities

Атрибут community:

  • Тегирование маршрутов
  • Существуют предопределенные значения
  • По умолчанию не пересылаются соседям
  • Один из вариантов применения: передается соседней AS для управления входящим трафиком

Значения от 0x00000000 до 0x0000FFFF и от 0xFFFF0000 до 0xFFFFFFFF зарезервированы.

Как правило community отображаются в формате ASN:VALUE. В таком формате, доступны для использования community от 1:0 до 65534:65535. В первой части указывается номер автономной системы, а во второй значение community, которое определяет политику маршрутизации трафика.

Некоторые значения communities предопределены. RFC1997 определяет три значения таких community. Эти значения должны одинаково распознаваться и обрабатываться всеми реализациями BGP, которые распознают атрибут community.

Если маршрутизатор получает маршрут в котором указано предопределенное значение communities, то он выполняет специфическое, предопределенное действие основанное на значении атрибута.

Предопределенные значения communities (Well-known Communities):

  • no-export (0xFFFFFF01) — Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться за пределы конфедерации (автономная система, которая не является частью конфедерации считается конфедерацией). То есть, маршруты не анонсируются EBGP-соседям, но анонсируются внешним соседям в конфедерации,
  • no-advertise (0xFFFFFF02) — Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться другим BGP-соседям,
  • no-export-subconfed (0xFFFFFF03) — Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться внешним BGP-соседям (ни внешним в конфедерации, ни настоящим внешним соседям). В Cisco это значение встречается и под названием local-as.

Маршрутизаторы которые не поддерживают атрибут community, будут передавать его далее, так как это transitive атрибут.

Multi exit discriminator (MED)

Атрибут MED:

  • Используется для информирования eBGP-соседей о том, какой путь в автономную систему более предпочтительный.
  • Атрибут передается между автономными системами.
  • Маршрутизаторы внутри соседней автономной системы используют этот атрибут, но, как только обновление выходит за пределы AS, атрибут MED отбрасывается.
  • Чем меньше значение атрибута, тем более предпочтительна точка входа в автономную систему.

Weight (проприетарный атрибут Cisco)

Атрибут Weight:

  • Позволяет назначить «вес» различным путям локально на маршрутизаторе.
  • Используется в тех случаях, когда у одного маршрутизатора есть несколько выходов из автономной системы (сам маршрутизатор является точкой выхода).
  • Имеет значение только локально, в пределах маршрутизатора.
  • Не передается в обновлениях.
  • Чем больше значение атрибута, тем более предпочтителен путь выхода.

Выбор пути

Характеристики процедуры выбора пути протоколом BGP:

  • В таблице BGP хранятся все известные пути, а в таблице маршрутизации — лучшие.
  • Пути выбираются на основании политик.
  • Пути не выбираются на основании пропускной способности.

Сначала проверяется:

  • Доступен ли next-hop (Route Resolvability Condition)
    Для того чтобы next-hop считался доступным (accessible), необходимо чтобы в таблице маршрутизации был IGP-маршрут, который ведет к нему.

Cisco

На маршрутизаторе Cisco, если не настроены никакие политики выбора пути, выбор пути происходит таким образом (на каждый следующий шаг маршрутизатор переходит только при совпадении значений на предыдущем):

  1. Максимальное значение weight (локально для маршрутизатора).
  2. Максимальное значение local preference (для всей AS).
  3. Предпочесть локальный маршрут маршрутизатора (next hop = 0.0.0.0).
  4. Кратчайший путь через автономные системы. (самый короткий AS_PATH)
  5. Минимальное значение origin code (IGP < EGP < incomplete).
  6. Минимальное значение MED (распространяется между автономными системами).
  7. Путь eBGP лучше чем путь iBGP.
  8. Выбрать путь через ближайшего IGP-соседа.
  9. Выбрать самый старый маршрут для eBGP-пути.
  10. Выбрать путь через соседа с наименьшим BGP router ID.
  11. Выбрать путь через соседа с наименьшим IP-адресом.

Juniper

Если существует несколько маршрутов до одной сети назначения, будет выбран только один из них. Каждый шаг в алгоритме выбора лучшего маршрута пытается устранить все, кроме одного маршруты к пункту назначения. Если на шаге алгоритма маршрутов все еще больше одного, будет выполнен переход на следующий шаг алгоритма. Таким образом, алгоритм работает до тех пор, пока это необходимо. В устройствах Juniper выбор наилучшего маршрута происходит по следующему алгоритму:

  1. проверка на доступность next-hop в локальной таблице маршрутизации. Если next-hop не доступен, маршрут отбрасывается.
  2. маршрутизатор выбирает маршрут с наибольшим Local Preference атрибутом.
  3. маршрутизатор выбирает маршрут с кратчайшим AS Path length.
  4. маршрутизатор выбирает маршрут с наименьшим значением атрибута Origin (то есть отдается предпочтение IGP).
  5. маршрутизатор выбирает маршрут с наименьшим значением MED. Этот шаг выполняется, по умолчанию, только для маршрутов из одной AS.
  6. маршрутизатор выбирает маршруты, полученные от соседей EBGP нежели полученные от IBGP соседей. Если остальные маршруты EBGP-маршруты, маршрутизатор переходит к шагу 9.
  7. маршрутизатор выбирает маршрут с наименьшей метрикой IGP к анонсируемому BGP Next Hop.
  8. если используется Route Reflection для IBGP пиринга, маршрутизатор выбирает путь с наименьшим Cluster-List length.
  9. маршрутизатор выбирает маршрут от партнера с наименьшим Router ID.
  10. маршрутизатор выбирает маршрут от партнера с наименьшим Peer Address.

 

Пример конфигурации

Juniper:

set protocols bgp group net-runner type internal
set protocols bgp group net-runner description “for_net-runner”
set protocols bgp group net-runner local-address 2.2.2.2
set protocols bgp group net-runner export send-direct
set protocols bgp group net-runner neighbor 192.163.6.4
set policy-options policy-statement send-direct term 2 from protocol direct
set policy-options policy-statement send-direct term 2 then accept
set routing-options router-id 2.2.2.2
set routing-options autonomous-system 666

Cisco:

router bgp 666
bgp router-id 1.1.1.1
neighbor 2.2.2.2 remote-as 666
neighbor 2.2.2.2 description “for_net-runner”
redistribute connected