BGP – это протокол маршрутизации. Он же Border Gateway Protocol, он же Протокол Граничного Шлюза.
BGP позволяет обмениваться информацией о маршрутизации между автономными системами. Сети, при взаимодействии друг с другом, нуждаются в способе связи. Достичь этого можно с помощью пиринга, а BGP, в свою очередь, делает этот самый пиринг возможным.
Наряду с DNS он обеспечивает функционирование Интернета как такового.
Подробнее о протоколе BGP расскажем далее.
Содержание
- Принцип работы протокола BGP
- Почему используется?
- Принципы соседства BGP
- Форматы и типы сообщений
- Параметры протокола
Принцип работы протокола BGP
Cетевой маршрутизатор, подключающийся к другим сетям, сам по себе не знает, в какую сеть лучше всего отправлять данные. BGP же учитывает все различные варианты пиринга, которые есть у маршрутизатора, и выбирает ближайший к нему.
Иначе говоря: это оптимизированная служба доставки.
А работает это так, что каждый потенциальный пир передает имеющуюся у него информацию, которая хранится в информационной базе маршрутизации (она же RIB).
BGP получает доступ к этой информации и использует ее для определения оптимального пути.
Почему используется?
Потому что безопасно. Протокол осуществляет аутентификацию с помощью заранее настроенных паролей, через которые отсеивается несанкционированный трафик. И потому что масштабируемо – BGP поддерживает мультихоминг – конфигурацию сразу нескольких сетевых интерфейсов на одном устройстве.
Помимо прочего, оперирует огромными массивами данных. Для примера – в случае с IPv4 речь идет о более чем 500 тысячах маршрутах.
Принципы соседства BGP
Как уже упоминали чуть выше – BGP использует пиры между маршрутизаторами. Для проверки работоспособности соединения между соседями каждый такой маршрутизатор периодически (раз в минуту) отправляет keepalive-сообщения. Существует также и так называемый hold time – интервал, после которого при отсутствии сообщений маршрутизатор исключается из таблицы.
Как правило, hold time в 3 раза больше keepalive.
Обмен данными между пирами происходит по TCP-соединению. Помимо keepalive-сообщений, BGP формирует сеанс TCP с соседними маршрутизаторами – одноранговыми узлами. Также BGP использует FSM для ведения таблицы всех одноранговых узлов и состояния их работоспособности.
Состояний, кстати, бывает несколько. Предлагаем сейчас заостриться на них.
Idle
Начальное состояние работы. На этом этапе маршрутизатор, обнаружив запуск, пытается установить TCP-соединение со своим соседом. Это режим ожидания. Также на Idle происходит возврат – например, если 179 или 1023 порты оказываются закрыты.
Connect
Тут уже BGP активно пытается установить TCP-соединение. В случае успеха сессия сбрасывает таймер повторных попыток соединения (ConnectRetryTimer). Далее состояние меняется на OpenSent, но только после Active.
Active
Справедливости ради отметим, что Active, как состояние, следует выделять лишь номинально. Оно постоянное и не характеризуется какими-либо особыми паттернами.
Зато на ConnectRetry следует обратить внимание. Еще раз. Так, если таймер истечет, состояние снова сбросится – до Connect. BGP также будет продолжать мониторить входящие соединения на случай, если сосед предпримет еще одну попытку.
Впрочем, из этого состояния можно попасть и в другое – в Idle. Такое происходит при сбросе.
OpenSent
В этом состоянии BGP будет ожидать сообщения Open от соседа. Сначала оно будет проверено на наличие (отсутствие) ошибок. Если что-то не так, например, неправильные номера версий, AS (автономные системы, они же набор сетей с единой политикой маршрутизации), протокол ответит сообщением Notification и вернется в Idle.
Интересно, что при появлении вообще любых ошибок результат будет тем же – откат к Idle.
Примерно тут же BGP решает, что используется: EBGP или IBGP. Если все в порядке, дальше отправляется Keepalive, и сбрасывается предыдущий таймер.
EBGP – протокол, работающий между автономными системами. Подразумевается, что они должны быть соединены напрямую. IBGP же работает внутри, а потому непосредственное соединение не подразумевается.
Established
Когда отправляется новый Keepalive, состояние переводится в Established. Теперь маршрутизаторы будут отправлять пакеты для обмена информацией. И каждый раз, когда будет выводиться Keepalive или Update, таймер будет сбрасываться.
Форматы и типы сообщений
Протокол использует сообщения, состоящие из заголовка и данных.
Всего сообщений BGP четыре типа (Keepalive сознательно опустим, поскольку о нем упоминали выше):
- Open – служит для инициации и настройки соединения между двумя маршрутизаторами. Собственно, прежде чем стать полноценными *соседями*, оба устройства обмениваются информацией, содержащейся как раз в Open. Если конкретнее, то речь идет о версии протокола BGP, ASN, максимальном времени ожидания ответа и идентификаторе.
- Update – используется для управления маршрутами: может добавлять новые, изменять существующие или удалять утратившие актуальность. Сообщает о доступных сетевых маршрутах, включая префикс сети и его атрибуты (PA BGP). Помимо прочего, умеет отзывать более рание маршруты и нивелировать избыточный трафик.
- Notification – информирует соседнее устройство об ошибке, возникшей в рамках сессии. Отправляется в случаях, когда происходит сбой, например, истекает время. Получение Notification приводит к немедленному разрыву соединения.
Все они имеют общий формат заголовка.
Что до передачи, она осуществляется по TCP – через 179 порт. Размер сообщения варьируется от 19 до 4096 байт, в то время как сам заголовок BGP занимает 19 байт.
Параметры протокола
Наконец, находим смысл немного поговорить о параметрах протокола. Здесь у нас есть версия, где, собственно, указывается версия BGP, которую использует маршрутизатор, AS, где уточняется номер, усредненное время удержания, по истечению которых другая сторона считается «мертвой» и местный идентификатор маршрутизатора.
Интересно, что не все роутеры (даже сейчас) поддерживают BGP.