BGP: что это и как расшифровывается
BGP расшифровывается как Border Gateway Protocol — дословно «протокол граничного шлюза». Название говорящее: протокол работает на границах между сетями и управляет тем, как данные передаются от одной сети к другой.
Впервые протокол был описан в 1989 году — в документе RFC 1105. С тех пор он прошел через несколько редакций, и сегодня актуальной версией считается BGP-4, закрепленная в RFC 4271. Именно эта версия используется повсеместно в глобальной маршрутизации.
Если попробовать объяснить «на пальцах» — BGP работает как огромная почтовая служба. Представьте, что вам нужно отправить посылку в другой город. Почта не везет ее напрямую: она передает ее между отделениями, выбирая наиболее удобный маршрут. BGP делает то же самое, только вместо посылок — пакеты данных, а вместо почтовых отделений — сети провайдеров и крупных компаний.
Важно не путать BGP с внутренними протоколами маршрутизации вроде OSPF или RIP. Те работают внутри одной организации. BGP же — это протокол категории EGP, то есть внешний протокол, предназначенный именно для взаимодействия между независимыми сетями.
Назначение и цели протокола BGP
Главная задача BGP — обеспечить связность между тысячами независимых сетей, из которых состоит глобальная сеть. Без него каждый провайдер, каждый дата-центр и каждая крупная компания существовали бы в изоляции друг от друга.
Конкретные цели, которые решает протокол:
- Обмен маршрутной информацией между независимыми сетями — BGP сообщает соседним узлам, какие адресные пространства доступны через него.
- Выбор оптимального пути для передачи трафика на основе множества критериев — не только длины маршрута, но и коммерческих соглашений между провайдерами.
- Обеспечение устойчивости — если один из путей становится недоступным, BGP перестраивает маршрутизацию и находит альтернативу.
- Масштабирование — протокол способен работать с сотнями тысяч маршрутов одновременно, что критично для глобальной инфраструктуры.
Стоит подчеркнуть, что BGP не занимается доставкой самих пакетов данных. Его задача — решить, куда эти пакеты должны пойти. Это протокол управления маршрутами, а не транспортный протокол.
Принципы работы BGP
BGP — это динамический протокол маршрутизации, который строит свою работу на установлении так называемых сессий между узлами сети. Два маршрутизатора, участвующих в BGP-сессии, называются «пирами» или «соседями» (BGP peers).
Для передачи данных между пирами BGP использует протокол TCP — конкретно порт 179. Это принципиальное отличие от многих других протоколов маршрутизации: BGP не полагается на широковещательные рассылки, а строит точные соединения между конкретными узлами.
После установки соединения маршрутизаторы обмениваются таблицами маршрутов. В дальнейшем они не пересылают таблицы целиком при каждом обновлении — передаются только изменения. Это существенно снижает нагрузку на канал.
BGP существует в двух разновидностях:
- iBGP (Internal BGP) — используется внутри одной автономной системы для синхронизации маршрутной информации между внутренними маршрутизаторами.
- eBGP (External BGP) — применяется для взаимодействия между разными автономными системами, то есть между разными организациями или провайдерами.
Ключевая концепция в работе BGP — атрибуты маршрутов.
Каждый маршрут несет с собой набор характеристик: откуда он пришел, через какие системы прошел, каков его приоритет. На основе этих атрибутов принимаются решения о предпочтительном пути.
Как автономные системы взаимодействуют через BGP
Чтобы понять BGP, нужно разобраться с понятием автономной системы. Автономная система (AS) — это совокупность IP-сетей и маршрутизаторов, управляемых одной организацией и придерживающихся единой политики маршрутизации. Каждому такому объединению присваивается уникальный номер — ASN (Autonomous System Number).
Например, интернет-провайдер — это одна автономная система. Корпорация с собственной инфраструктурой — другая. Google, Amazon, Cloudflare — у каждого свой ASN. Всего в мире зарегистрировано более 100 000 автономных систем.
BGP — это язык, на котором эти системы разговаривают друг с другом. Взаимодействие строится следующим образом:
- Каждая автономная система объявляет соседям, какие IP-префиксы она «знает» и может обслуживать.
- Соседние системы принимают эту информацию, применяют к ней собственную политику фильтрации и передают дальше.
- В итоге информация о маршрутах распространяется по всей глобальной сети — каждый узел знает, через какую систему можно добраться до нужного адреса.
Отношения между автономными системами бывают разными. Провайдеры могут быть в отношениях «клиент — поставщик», когда один платит другому за транзит трафика, или в отношениях «равноправного обмена» (peering), когда обе стороны обмениваются трафиком бесплатно на взаимовыгодных условиях. Эти коммерческие договоренности напрямую влияют на то, какие маршруты BGP будет предпочитать.
Как BGP устанавливает соединение: типы сообщений
Установка BGP-сессии — это многошаговый процесс, в котором маршрутизаторы проходят через несколько состояний. Весь обмен строится на четырех типах сообщений.
OPEN — первое сообщение, которое отправляет один маршрутизатор другому после установки TCP-соединения. В нем содержится версия протокола, номер автономной системы, время удержания сессии и идентификатор маршрутизатора. По сути, это «рукопожатие» — стороны представляются друг другу.
KEEPALIVE — периодическое сообщение, которое подтверждает, что соединение живо. Если в течение согласованного времени KEEPALIVE не пришел — сессия считается разорванной и маршрутизатор начинает поиск альтернативных путей.
UPDATE — основной рабочий тип сообщений. Он содержит информацию о новых доступных маршрутах или об отзыве ранее анонсированных. Именно через UPDATE маршрутизаторы обновляют свои таблицы.
NOTIFICATION — сообщение об ошибке. Если что-то пошло не так — неверный параметр, нарушение протокола, истекший таймер — один из маршрутизаторов отправляет NOTIFICATION и разрывает соединение.
Состояния, через которые проходит BGP-сессия при установке: Idle → Connect → Active → OpenSent → OpenConfirm → Established. Только достигнув состояния Established, маршрутизаторы начинают полноценный обмен маршрутной информацией.
Как BGP принимает решения о маршрутизации
Это, пожалуй, самая интересная часть. BGP — не тот протокол, который просто выбирает кратчайший путь. Его алгоритм принятия решений значительно сложнее и учитывает целый набор атрибутов, которые проверяются в строгом порядке приоритетов.
Вот упрощенная последовательность, по которой граничный маршрутизатор выбирает лучший маршрут среди нескольких кандидатов:
- Weight — локальный параметр Cisco, чем выше значение, тем предпочтительнее маршрут.
- Local Preference — приоритет внутри автономной системы; высокое значение означает предпочтение этого выхода.
- Locally Originated — маршруты, анонсированные самим маршрутизатором, предпочтительнее полученных от соседей.
- AS Path Length — чем меньше автономных систем на пути, тем лучше.
- Origin — тип происхождения маршрута: IGP предпочтительнее EGP, EGP — Unknown.
- MED (Multi-Exit Discriminator) — подсказка соседней AS о предпочтительном входе в сеть.
- eBGP над iBGP — внешний маршрут предпочтительнее внутреннего при прочих равных.
- IGP Metric — метрика до следующего хопа внутри AS.
Если после проверок маршруты остаются равнозначными, BGP может распределить нагрузку между ними — это называется балансировкой нагрузки.
Плюсы и минусы использования BGP в сетевой инфраструктуре
У Border Gateway Protocol десятилетняя история за плечами, и за это время он успел доказать свою состоятельность в условиях глобальной сети. Вместе с тем было бы нечестно представлять его как «идеальное решение на все случаи жизни». У BGP есть конкретные сильные стороны, которые делают его незаменимым в одних сценариях, и столь же конкретные ограничения, которые могут стать серьезной проблемой в других. Прежде чем принимать решение о внедрении BGP в инфраструктуру, стоит трезво взвесить обе стороны — тем более что цена ошибки здесь может быть очень высокой.
Преимущества
- Масштабируемость — протокол спроектирован для работы с огромным количеством маршрутов и автономных систем. Сегодня глобальная таблица BGP содержит более 900 000 префиксов, и протокол справляется с этим объемом без деградации производительности.
- Гибкость политик — администраторы могут тонко настраивать, какие маршруты принимать, какие отдавать и с каким приоритетом. Это дает полный контроль над потоками трафика и позволяет реализовывать сложные коммерческие договоренности между провайдерами.
- Устойчивость — при отказе одного из путей BGP перестраивает маршрутизацию, обеспечивая непрерывность работы сети. Эта характеристика делает его основой мультипровайдерных схем подключения.
- Поддержка сложных топологий — протокол одинаково хорошо работает как в простых схемах с одним провайдером, так и в сложных мультипровайдерных конфигурациях с десятками точек обмена трафиком.
- Независимость от технологии канала — BGP работает поверх TCP и не привязан к конкретному типу физического или канального уровня, что делает его универсальным решением для самых разных сред.
Недостатки
- Медленная конвергенция — при изменениях в сети BGP перестраивается не мгновенно. В некоторых сценариях это занимает минуты, что критично для высоконагруженных систем, где каждая секунда простоя стоит денег.
- Высокий порог вхождения — настройка BGP требует глубоких знаний протокола, понимания атрибутов маршрутов и логики принятия решений. Ошибка в конфигурации может привести к серьезным сбоям — вплоть до недоступности крупных сегментов сети.
- Доверительная модель — по умолчанию BGP доверяет анонсам соседей без какой-либо криптографической проверки. Это архитектурное решение, унаследованное с ранних лет протокола, сегодня является одним из главных источников угроз безопасности.
- Ресурсоемкость — хранение и обработка полной таблицы маршрутов требует значительных вычислительных ресурсов и объема оперативной памяти. Не каждое оборудование способно работать с полной BGP-таблицей без ограничений.
- Сложность отладки — диагностировать проблемы в BGP-сети бывает крайне непросто. Ошибка может проявляться далеко от своего источника, а ее поиск требует понимания всей цепочки распространения маршрутов.
Области применения протокола маршрутизации BGP
BGP уже не узкоспециализированный инструмент для провайдеров, а универсальный протокол, на котором держится маршрутизация в самых разных типах сетей. Если раньше с ним работали преимущественно крупные телекоммуникационные компании, то сегодня BGP встречается в корпоративных сетях, облачных платформах, CDN-инфраструктуре и даже в современных программно-определяемых сетях. Масштаб применения объясняется просто: как только сеть выходит за пределы одной организации или подключается к нескольким внешним каналам, BGP становится практически безальтернативным решением. Разберу конкретные сценарии, где этот протокол используется чаще всего.
Интернет-провайдеры — каждый ISP использует BGP для взаимодействия с другими провайдерами и для анонса своих IP-адресов в глобальную сеть. Без этого клиенты провайдера были бы недостижимы для остального мира.
Крупные корпорации с несколькими каналами связи — компании, подключенные к нескольким провайдерам одновременно (multihoming), используют BGP для управления входящим и исходящим трафиком. Это повышает надежность и позволяет оптимизировать расходы.
Облачные платформы — AWS, Google Cloud, Microsoft Azure активно используют BGP для управления связностью между своими регионами и для организации прямых соединений с клиентами (например, через AWS Direct Connect или Azure ExpressRoute).
Сети доставки контента (CDN) — Cloudflare, Akamai и другие CDN-провайдеры применяют BGP Anycast, чтобы направлять пользователей к ближайшему серверу автоматически.
SD-WAN и VPN-решения — современные корпоративные сети используют BGP как основной протокол для динамического управления маршрутами внутри распределенной инфраструктуры.
BGP hijacking и другие угрозы безопасности протокола
Это тема, о которой в отрасли говорят давно, но решение которой до сих пор внедряется крайне медленно. BGP проектировался во время, когда интернет был академической средой и вопрос доверия между участниками не стоял остро.
BGP hijacking — это атака, при которой злоумышленник объявляет чужие IP-префиксы как свои. Поскольку BGP доверяет анонсам соседей без криптографической проверки, другие маршрутизаторы могут принять ложный анонс и начать направлять трафик через атакующую сеть. Трафик при этом может перехватываться, анализироваться или просто теряться.
Случаи такого рода:
- В 2010 году китайский провайдер China Telecom случайно (или намеренно — до сих пор спорят) анонсировал около 15% всех мировых маршрутов, перехватив объем трафика почти на 18 минут.
- В 2018 году трафик ряда криптовалютных сервисов был перенаправлен через сети атакующих с целью кражи данных.
- В 2019 году произошел инцидент с перенаправлением трафика Google через Россию и Нигерию.
Другие угрозы:
- Утечка маршрутов (route leak) — ошибочное распространение маршрутов за пределы допустимых границ, что приводит к нежелательной маршрутизации трафика.
- Атаки на BGP-сессию — попытки разрушить TCP-соединение между пирами, чтобы вызвать нестабильность маршрутизации.
- Prefix deaggregation — намеренное дробление префиксов на мелкие, чтобы перехватить трафик.
Для защиты от этих угроз разработаны механизмы RPKI (Resource Public Key Infrastructure) — система криптографической проверки права на анонс конкретных префиксов. Внедрение идет, но медленно: многие провайдеры до сих пор не поддерживают RPKI в полном объеме. Также применяются фильтрация маршрутов на основе IRR-баз данных и инструменты мониторинга BGP-анонсов в реальном времени.
BGP — это протокол, который большинство людей никогда не увидят напрямую, но который влияет на работу интернета каждую секунду. Он связывает десятки тысяч независимых сетей в единую глобальную инфраструктуру, принимает миллионы маршрутных решений ежедневно и при этом несет в себе архитектурные уязвимости, унаследованные с эпохи, когда безопасность не была приоритетом. Понимать, как работает BGP — значит понимать, как устроен интернет на самом деле.
Если вы работаете с сетями или только начинаете разбираться в теме, напишите в комментариях — с какими трудностями вы сталкивались при работе с BGP или что показалось сложным для понимания?








