# 21. BGP атрибуты

## Выбор лучшего маршрута

* BGP по умолчанию не использует балансировку
* Его задача - найти лучшую точку выхода из автономной системы
  * Балансировать трафик одного приложения между разными AS - плохая идея
  * Если хочется, в пределах AS балансировку можно делать с помощью IGP
* Выбор лучшего маршрута основан на атрибутах

## Основные атрибуты BGP

* Маршрутизаторы обмениваются векторами матрик для путей
* Вектор метрик в анонсе складывается с вектором соседа

| Атрибут          | Описание                                                           |
| ---------------- | ------------------------------------------------------------------ |
| Next Hop         | IP-адрес Next Hop, меняется при отправке EBGP-соседу или политикой |
| AS Path          | Список номеров AS для пути, дополняется при отправке EBGP-соседу   |
| Local Preference | Приоритет маршрута в локальной AS, назначается политикой           |
| MED              | Приоритет маршрута в соседней AS, назначается или наследуется      |
| Origin           | Код происхождения маршрута, назначается или наследуется            |
| Community        | Список дополнительных меток, назначается политикой                 |

## Next Hop

* Адрес, который устанавливается в RIB в качестве шлюза для сети
  * Обычно не меняется при передаче по IBGP
  * Обязан резолвится в RIB (хотя бы рекурсивно)
  * Может быть доступен с учетом балансировки
* Устанавливается в собственный адрес для:
  * Анонсов локально импортированных маршрутов
  * EBGP-анонсов

## AS Path

* Список автономных систем, через которые проложен маршрут
  * Часто записывается в виде строки с номерами AS через пробел или запятую
  * Такая строка может содержать неожиданные знаки препинания
* Чем меньше длина, тем лучше
* На самом деле состоит из субкомпонентов
  * AS\_SEQUENCE, AS\_SET, AS\_CONFED\_SEQ, AS\_CONFED\_SET
* При отправке маршрута EBGP-соседу AS\_SEQUENCE дополняется номером собственной системы
* Служит инструментом защиты от петель между AS
  * Маршрутизатор не примет от EBGP-маршрут, если в AS PATH указан номер его автономной системы

![](https://804939388-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LUAmDRmV-jNSoF58Ufl%2F-Lce8Jg5XCcq1FdbwxN6%2F-Lce8m79w38fsNxVND3-%2Faspath2.PNG?alt=media\&token=029c8660-2da1-4ee5-aa9f-833d502ec9c2)

## Local Preference

* Приоритет маршрута в локальной автономной системе
  * Не отправляет соседям EBGP (маршруты получают LP по умолчанию)
* Удобный инструмент выбора маршрута для исходящего трафика
* 32-битное число (больше - лучше)

![](https://804939388-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LUAmDRmV-jNSoF58Ufl%2F-Lce8Jg5XCcq1FdbwxN6%2F-Lce8ch0CL9mc2jYMZFs%2Flocalprerf.PNG?alt=media\&token=4ecc4864-76f9-438f-bf0c-14f0f05c8057)

## MED

* Multi Exit Discriminator
* Инструмент указания предпочтения маршрута для соседней AS
* Предназначен для контроля **входящего** в нашу AS трафика
* 32-битное число (меньше - лучше)
* Часто наследуется от метрики IGP
* Атрибут не очень удобен в использовании
  * Не передается EBGP-соседям, если изучен по IBGP
    * Обычно проставляется на пограничных роутерах
    * Распространяется только по соседней автономной системе
  * Сравнение имеет смысл у EBGP-маршрутов из одной AS
    * Основная польза - при DualHomed подключении
* Часто для контроля входящего маршрута используют вместо MED
  * Атрибут Community
  * Технику AS Prepending (искусственное увеличение AS Path)

![](https://804939388-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LUAmDRmV-jNSoF58Ufl%2F-Lce8Jg5XCcq1FdbwxN6%2F-LceA4SBMVKMPfDz5B02%2Fmed.PNG?alt=media\&token=31e2e0e2-8369-44df-82b7-8ad40b1c756e)

## Community

* Расширение функциональности BGP с помощью добавления меток
  * Неупорядоченный список меток, проставленных транзитными роутерами
  * На самом деле атрибутов три, каждый для разных форматов меток:
    * Communities (RFC 1997) - записывается как \<ASN>:\<Value>, 16 бит ASN, 16 бит Value
    * Extended Communities (RFC 4360) - 16 бит ASN, несколько типов меток по 6 байт
    * Large Communities (RFC 8092) - 32 бита ASN, записывается \<ASN>:\<Value1>:\<Value2>
* Метка может обозначать все, что угодно, нужны договоренности
* Некоторые известные "стандартные" метки
  * NO\_EXPORT (65535:65281, 0xFFFFFF01) - не анонсировать EBGP-соседям
  * NO\_ADVERTISE (65535:65281, 0xFFFFFF02) - не анонсировать никому
  * BLACKHOLE (65535:666, 0xFFFF029A) - установить Next Hop в Null0

## Origin

* Код происхождения маршрута в BGP (меньше - лучше)
* Когда-то Origin позволял сосуществовать в Интернете BGP и EGP
  * EGP давно устарел, практического смысла сейчас не имеет
  * Правила хорошего тона предписывают анонсировать NLRI с ORIGIN=IGP

| Origin | Обозначение | Смысл                                        |
| ------ | ----------- | -------------------------------------------- |
| 0      | IGP         | NLRI принадлежит исходной AS                 |
| 1      | EGP         | NLRI в исходной AS получена по EGP           |
| 2      | INCOMPLETE  | NLRI в исходной AS появилась другим способом |

## Свойства атрибутов

* **Well-known mandatory** - атрибут обязан присутствовать в UPDATE
* **Well-known discretionary** - атрибут может не передаваться в UPDATE, но обязан поддерживаться в любой реализации
* **Optional Transitive** - атрибут может не поддерживаться в конкретной реализации, но в люом случае должен передаваться соседям
* **Optional Non-transitive** - если атрибут не поддерживается в конкретной реализации, он игнорируется и соседям не передается

| Атрибут    | Свойства                                                           |
| ---------- | ------------------------------------------------------------------ |
| Next Hop   | Well-known mandatory                                               |
| AS Path    | Well-known mandatory                                               |
| Local Pref | Well-known discretionary (mandatory в IBGP, отсутствует в EBGP)    |
| MED        | Optional Non-transitive (часто отсутствует, может быть удален)     |
| Origin     | Well-known mandatory                                               |
| Community  | Optional Transitive (часто присутствует, сохраняется при передаче) |

## Best Path Selection

При выборе маршрута RFC 4271 предписывает следовать следующему алгоритму:

1. Выбираются только доступные маршруты
   1. Next Hop доступен
   2. AS Path не содержит номер свой системы
2. Маршруты с бОльшим Local Preference
3. Маршруты с меньшим количеством AS в AS Path
4. Маршруты с меньшим Origin (IGP\<EGP\<INCOMPLETE)
5. Маршруты с меньшим MED
   1. MED сравнивается только для маршрутов, полученных из одной AS
   2. Если MED отсутствует, полагать его значение наименьшим возможным
6. Маршруты, полученные по EBGP
7. Маршруты с меньшей IGP-метрикой до Next Hop
8. Маршруты, полученные от соседа с бОльшим Router-ID
9. Маршрут, полученные от соседа с бОльшим IP-адресом

























