BGP
BGP (англ. Border Gateway Protocol, протокол граничного шлюза) — это протокол динамической маршрутизации, предназначенный для обмена информацией о сетевых префиксах и маршрутах между автономными системами (AS) в глобальной сети Интернет. BGP является основным протоколом, обеспечивающим связность и маршрутизацию трафика между различными провайдерами, корпоративными сетями и точками обмена трафиком. Относится к классу протоколов внешней маршрутизации (EGP) и работает на основе вектора пути (path vector protocol), в отличие от протоколов внутренней маршрутизации (IGP), таких как OSPF или IS-IS.
История
BGP был разработан в конце 1980-х годов как замена устаревшему протоколу EGP (Exterior Gateway Protocol). Первая версия, BGP-1, была описана в RFC 1105 в 1989 году. Основной причиной создания нового протокола стала необходимость более эффективного и масштабируемого управления маршрутизацией в быстро растущем Интернете. EGP имел ограничения по топологии (требовал древовидной структуры) и не поддерживал политики маршрутизации.
В 1990 году вышла версия BGP-2 (RFC 1163), а в 1991 — BGP-3 (RFC 1267). Современная версия, BGP-4, была впервые опубликована в RFC 1654 в 1994 году. Ключевым нововведением BGP-4 стало введение бесклассовой междоменной маршрутизации (CIDR), что позволило агрегировать IP-адреса и уменьшить размер глобальных таблиц маршрутизации. Последующие уточнения и расширения протокола описаны в RFC 4271 (2006 год) и более поздних документах.
Принцип работы
BGP функционирует на прикладном уровне модели OSI (уровень 7) или на сетевом уровне (уровень 3) в зависимости от интерпретации, так как использует TCP (порт 179) для установления и поддержания сеансов связи между маршрутизаторами, называемыми BGP-пирами (peers) или соседями (neighbors).
Установление соединения
Процесс установления BGP-сессии включает несколько этапов:
- Открытие соединения: маршрутизаторы обмениваются OPEN-сообщениями, содержащими номер автономной системы, время удержания (hold timer) и параметры BGP-идентификатора.
- Обмен маршрутами: после успешного открытия пиры отправляют UPDATE-сообщения, содержащие информацию о новых маршрутах, а также withdrawn-маршруты (удаляемые).
- Поддержание активности: для проверки работоспособности соединения регулярно отправляются KEEPALIVE-сообщения (обычно каждые 60 секунд).
- Уведомления: при возникновении ошибок отправляются NOTIFICATION-сообщения, после чего сессия закрывается.
Атрибуты маршрутов
Каждый маршрут в BGP сопровождается набором атрибутов, которые определяют его характеристики и влияют на выбор наилучшего пути. Основные атрибуты включают:
- AS_PATH: список номеров автономных систем, через которые прошёл маршрут. Используется для предотвращения петель и выбора кратчайшего пути.
- NEXT_HOP: IP-адрес следующего маршрутизатора, на который следует отправлять пакеты.
- LOCAL_PREF: локальный приоритет маршрута, используемый для выбора предпочтительного пути внутри одной AS.
- MULTI_EXIT_DISC (MED): метрика, влияющая на выбор входящего трафика при наличии нескольких точек подключения к соседней AS.
- ORIGIN: источник маршрута (IGP, EGP или неполный).
- COMMUNITY: теги для групповой маркировки маршрутов, позволяющие применять политики.
Выбор наилучшего маршрута
BGP-маршрутизатор выбирает единственный наилучший маршрут для каждого префикса на основе последовательного сравнения атрибутов. Алгоритм выбора включает следующие шаги (в порядке приоритета):
- Маршрут с наивысшим LOCAL_PREF.
- Маршрут с кратчайшим AS_PATH.
- Маршрут с наименьшим ORIGIN (IGP предпочтительнее EGP).
- Маршрут с наименьшим MED.
- Предпочтение маршрутам через eBGP (внешние) перед iBGP (внутренние).
- Маршрут к ближайшему NEXT_HOP по метрике IGP.
- Маршрут от маршрутизатора с наименьшим BGP-идентификатором.
Типы BGP-сессий
BGP-сессии делятся на два основных типа в зависимости от расположения пиров относительно автономных систем:
- eBGP (External BGP): устанавливается между маршрутизаторами, принадлежащими разным AS. Используется для обмена маршрутами между провайдерами или между провайдером и клиентом. Значение AS_PATH в eBGP увеличивается при передаче маршрута.
- iBGP (Internal BGP): устанавливается между маршрутизаторами внутри одной AS. Требует полной связности (full mesh) между всеми iBGP-пирами, так как маршруты, полученные от одного iBGP-соседа, не передаются другим iBGP-соседям (правило split horizon). Для масштабирования используются маршрутизаторы-отражатели (route reflectors) и конфедерации.
Применение
BGP является критически важным протоколом для функционирования Интернета. Основные области применения:
- Интернет-провайдеры (ISP): используют BGP для обмена маршрутами с другими провайдерами и клиентами, а также для реализации политик трафика (например, выбор предпочтительного пути для входящего или исходящего трафика).
- Корпоративные сети: крупные организации с несколькими подключениями к разным провайдерам применяют BGP для обеспечения отказоустойчивости и балансировки нагрузки (multihoming).
- Точки обмена трафиком (IXP): на IXP маршрутизаторы участников обмениваются маршрутами через BGP, часто с использованием пиринговых соглашений.
- Центры обработки данных (ЦОД): в крупных ЦОД BGP используется для маршрутизации между различными сегментами сети, особенно в архитектурах с использованием протокола EVPN (Ethernet VPN) поверх BGP.
Проблемы и ограничения
Несмотря на свою универсальность, BGP имеет ряд недостатков:
- Медленная сходимость: при изменении топологии сети BGP может требовать значительного времени для обновления таблиц маршрутизации (от нескольких секунд до минут), что приводит к временной недоступности сетей.
- Отсутствие встроенной безопасности: BGP не аутентифицирует источники маршрутов, что делает его уязвимым для атак типа BGP hijacking (перехват маршрутов) и route leaks (утечка маршрутов). Для защиты используются расширения, такие как RPKI (Resource Public Key Infrastructure) и BGPsec.
- Сложность конфигурации: настройка BGP требует глубокого понимания политик маршрутизации и атрибутов, что может приводить к ошибкам при ручной конфигурации.
- Рост таблиц маршрутизации: глобальная таблица BGP содержит более 900 000 префиксов (по состоянию на 2024 год), что требует значительных ресурсов памяти и процессора на маршрутизаторах.
Интересные факты
- BGP часто называют «клеем, скрепляющим Интернет», так как без него глобальная сеть не могла бы функционировать как единое целое.
- В 2008 году из-за ошибки в конфигурации BGP пакистанским провайдером был перехвачен трафик к видеохостингу YouTube, что привело к временной недоступности сервиса по всему миру.
- Протокол BGP не использует метрики пропускной способности или задержки для выбора маршрута — он полагается исключительно на политики и атрибуты пути.
- В России BGP широко применяется как на уровне магистральных провайдеров, так и в корпоративных сетях, например, в сетях банков и государственных учреждений, где требуется резервирование подключений.
Источники
- RFC 4271 — Border Gateway Protocol 4 (BGP-4)
- RFC 4456 — BGP Route Reflection
- RFC 5065 — Autonomous System Confederations for BGP
- RFC 8205 — BGPsec Protocol Specification
- RFC 6811 — BGP Prefix Origin Validation
- Стивен Халбингер, «BGP. Управление маршрутизацией в Интернете», 2019
- Документация Cisco: BGP Configuration Guide
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →