BGP (Border Gateway Protocol) — это основной протокол динамической маршрутизации, который используется в Интернете.
Маршрутизаторы, использующие протокол BGP, обмениваются информацией о доступности сетей. Вместе с информацией о сетях передаются различные атрибуты этих сетей, с помощью которых BGP выбирает лучший маршрут и настраиваются политики маршрутизации.
Один из основных атрибутов, который передается с информацией о маршруте — это список автономных систем, через которые прошла эта информация. Эта информация позволяет BGP определять где находится сеть относительно автономных систем, исключать петли маршрутизации, а также может быть использована при настройке политик.
Маршрутизация осуществляется пошагово от одной автономной системы к другой. Все политики BGP настраиваются, в основном, по отношению к внешним/соседним автономным системам. То есть, описываются правила взаимодействия с ними.
Так как BGP оперирует большими объемами данных (текущий размер таблицы для IPv4 более 450 тысяч маршрутов), то принципы его настройки и работы отличаются от внутренних протоколов динамической маршрутизации (IGP).
'Внутренний протокол маршрутизации (interior gateway protocol)' – протокол, который используется для передачи информации о маршрутах внутри автономной системы.'Внешний протокол маршрутизации (exterior gateway protocol)' – протокол, который используется для передачи информации о маршрутах между автономными системами.'Автономная система (autonomous system, AS)' — набор маршрутизаторов, имеющих единые правила маршрутизации, управляемых одной технической администрацией и работающих на одном из протоколов IGP (для внутренней маршрутизации AS может использовать и несколько IGP).'Транзитная автономная система (transit AS)' — автономная система, через которую передается трафик других автономных систем.'Путь (path)' — последовательность состоящая из номеров автономных систем через которые нужно пройти для достижения сети назначения.'Атрибуты пути (path attributes, PA)' — характеристики пути, которые позволяют выбрать лучший путь.'BGP speaker' — маршрутизатор, на котором работает протокол BGP.'Соседи (neighbor, peer)' — любые два маршрутизатора, между которыми открыто TCP-соединение для обмена информацией о маршрутизации.'Информация сетевого уровня о доступности сети (Network Layer Reachability Information, NLRI)' — IP-префикс и длина префикса.BGP выбирает лучшие маршруты не на основании технических характеристик пути (пропускной способности, задержки и т.п.), а на основании политик.
В локальных сетях наибольшее значение имеет скорость сходимости сети, время реагирования на изменения.
И маршрутизаторы, которые используют внутренние протоколы динамической маршрутизации, при выборе маршрута, как правило, сравнивают какие-то технические характеристики пути, например, пропускную способность линков.
При выборе между каналами двух провайдеров, зачастую имеет значение не то, у какого канала лучше технические характеристики, а какие-то внутренние правила компании. Например, использование какого канала обходится компании дешевле.
Поэтому в BGP выбор лучшего маршрута осуществляется на основании политик, которые настраиваются с использованием фильтров, анонсирования маршрутов, и изменения атрибутов.
Если принимать решение о том как должен маршрутизироваться пакет, необходимо по каким-то дополнительным критериям, кроме адреса получателя, необходимо использовать механизм policy-based routing (PBR).
BGP это path-vector протокол с такими общими характеристиками:
Автономная система (autonomous system, AS) — это система IP-сетей и маршрутизаторов, управляемых одним или несколькими операторами, имеющими единую, четко определенную политику маршрутизации с Интернетом (RFC 1930).
Диапазоны номеров автономных систем (autonomous system number, ASN):
Использование:
По умолчанию BGP отправляет keepalive-сообщения каждые 60 секунд.
Если существует несколько путей к получателю, то маршрутизатор будет анонсировать соседям не все возможные варианты, а только лучший маршрут из таблицы BGP.
'Внутренний BGP (Internal BGP, iBGP)' — BGP работающий внутри автономной системы. iBGP-соседи не обязательно должны быть непосредственно соединены.'Внешний BGP (External BGP, eBGP)' — BGP работающий между автономными системами. По умолчанию, eBGP-соседи должны быть непосредственно соединены.Если iBGP-маршрутизаторы работают в нетранзитной AS, то соединение между ними должно быть full mesh.
Это следствие принципов работы протокола — если маршрутизатор, находящийся на границе AS, получил обновление, то он передает его всем соседям; соседи, которые находятся внутри автономной системы, больше это обновление не распространяют, так как считают, что все соседи внутри AS уже его получили.
'Keepalive Interval' — Интервал времени в секундах, между отправкой сообщений keepalive. По умолчанию 60 секунд.'Hold Time' — Интервал времени в секундах, по истечении которого сосед будет считаться недоступным. По умолчанию 180 секунд.У всех сообщений BGP такой формат заголовка:
|<-------------------------- 32 бита --------------------------->| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + + | Marker | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length | Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Поля заголовка BGP-сообщений:
Open — используется для установки отношений соседства и обмена базовыми параметрами. Отправляется сразу после установки TCP-соединения.
Формат сообщения Open:
|<-------------------------- 32 бита --------------------------->| +-+-+-+-+-+-+-+-+ | Version | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | My Autonomous System | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hold Time | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BGP Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Opt Parm Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Optional Parameters | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Кроме стандартного заголовка пакета BGP, в сообщении Open такие поля:
Update — используется для обмена информацией маршрутизации.
Формат сообщения Update:
+-----------------------------------------------------+ | Unfeasible Routes Length (2 octets) | +-----------------------------------------------------+ | Withdrawn Routes (variable) | +-----------------------------------------------------+ | Total Path Attribute Length (2 octets) | +-----------------------------------------------------+ | Path Attributes (variable) | +-----------------------------------------------------+ | Network Layer Reachability Information (variable) | +-----------------------------------------------------+
Notification — используется когда возникают ошибки BGP. После отправки сообщения сессия с соседом разрывается.
Формат сообщения Notification:
|<-------------------------- 32 бита --------------------------->| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Error code | Error subcode | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Кроме стандартного заголовка пакета BGP, в сообщении Notification такие поля:
Keepalive — используется для поддерживания отношений соседства, для обнаружения неактивных соседей.
Сообщения Keepalive состоят только из заголовка пакета (длина 19 октетов).
Если периодичность отправки keepalive-сообщений выставлена в 0, то сообщения не отправляются.
Для того чтобы установить отношения соседства, в BGP надо настроить вручную каждого соседа.
Когда указывается сосед локального маршрутизатора, обязательно указывается автономная система соседа. По этой информации BGP определяет тип соседа:
'Внутренний BGP сосед (iBGP-сосед)' — сосед, который находится в той же автономной системе, что и локальный маршрутизатор. iBGP-соседи не обязательно должны быть непосредственно соединены.'Внешний BGP сосед (eBGP-сосед)' — сосед, который находится в автономной системе отличной от локального маршрутизатора. По умолчанию, eBGP-соседи должны быть непосредственно соединены.Тип соседа мало влияет на установку отношений соседства. Более существенные отличия между различными типами соседей проявляются в процессе отправки обновлений BGP и добавлении маршрутов в таблицу маршрутизации.
BGP выполняет такие проверки, когда формирует отношения соседства:
'neighbor remote-as' (это требование не соблюдается при настройках конфедераций).BGP выполняет проверку таймеров keepalive и hold, однако несовпадение этих параметров не влияет на установку отношений соседства. Если таймеры не совпадают, то каждый маршрутизатор будет использовать меньшее значение таймера hold.
| Состояние | Ожидание TCP | Инициация TCP | Установлено TCP | Отправлено Open | Получено Open | Сосед Up |
|---|---|---|---|---|---|---|
| Idle | Нет | Нет | Нет | Нет | Нет | Нет |
| Connect | Да | Нет | Нет | Нет | Нет | Нет |
| Active | Да | Да | Нет | Нет | Нет | Нет |
| Open sent | Да | Да | Да | Да | Нет | Нет |
| Open confirm | Да | Да | Да | Да | Да | Нет |
| Established | Да | Да | Да | Да | Да | Да |
Если не совпали IP-адреса с соседом, то этот сосед будет в состоянии active.
Атрибуты пути разделены на 4 категории:
'Well-known mandatory' — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).'Well-known discretionary' — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.'Optional transitive' — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.'Optional non-transitive' — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.Примеры атрибутов BGP:
Атрибут Autonomous system path (AS Path):
Используется для:
Каждый сегмент атрибута AS path представлен в виде поля TLV (path segment type, path segment length, path segment value):
'path segment type' — поле размером 1 байт для которого определены такие значения:'path segment length' — поле размером 1 байт. Указывает сколько автономных систем указано в поле path segment value'path segment value' — номера автономных систем, каждая представлена полем размером 2 байта.Атрибут Next-hop
Third party next hop:
Атрибут Origin — указывает на то, каким образом был получен маршрут в обновлении.
Возможные значения атрибута:
'0' — IGP: NLRI получена внутри исходной автономной системы;'1' — EGP: NLRI выучена по протоколу Exterior Gateway Protocol (EGP). Предшественник BGP, не используется'2' — Incomplete: NLRI была выучена каким-то другим образомАтрибут Local preference:
Метка, указывающая, что NLRI является summary.
Список RID и ASN маршрутизаторов, создавших summary NLRI.
Атрибут community:
Значения от 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.Атрибут MED:
Атрибут Weight:
Характеристики процедуры выбора пути протоколом BGP:
Сначала проверяется:
Если существует несколько маршрутов до одной сети назначения, будет выбран только один из них. Каждый шаг в алгоритме выбора лучшего маршрута пытается устранить все, кроме одного маршруты к пункту назначения. Если на шаге алгоритма маршрутов все еще больше одного, будет выполнен переход на следующий
шаг алгоритма. Таким образом, алгоритм работает до тех пор, пока это необходимо. В устройствах Juniper выбор наилучшего маршрута происходит по следующему алгоритму: