Протокол BGP
BGP (Border Gateway Protocol, протокол граничного шлюза) — это протокол динамической маршрутизации, относящийся к классу протоколов внешних шлюзов (EGP). Основной функцией BGP является обмен информацией о достижимости сетей между автономными системами (AS) в глобальной сети Интернет. BGP является де-факто стандартом для маршрутизации между различными интернет-провайдерами и крупными корпоративными сетями, обеспечивая связность всей сети Интернет.
История
Разработка BGP началась в конце 1980-х годов в ответ на рост масштабов Интернета и неэффективность предшествующего протокола — EGP (Exterior Gateway Protocol). Первая версия, BGP-1, была описана в RFC 1105 в 1989 году. Ключевым нововведением стало использование вектора пути (path vector), а не метрик расстояния, как в RIP, или состояния каналов, как в OSPF. Это позволило BGP учитывать политики маршрутизации, а не только топологию сети.
В 1990 году вышла версия BGP-2 (RFC 1163), а в 1991 — BGP-3 (RFC 1267). Современная версия, BGP-4, была стандартизирована в 1994 году (RFC 1654, затем обновлён в RFC 1771 и RFC 4271). Основным отличием BGP-4 стала поддержка бесклассовой междоменной маршрутизации (CIDR) и агрегации маршрутов, что позволило замедлить рост таблиц маршрутизации. С тех пор протокол неоднократно дополнялся расширениями, такими как поддержка IPv6 (MP-BGP, RFC 4760), маршрутизация на основе политик (BGP Communities) и защита от атак (RPKI, BGPsec).
Принцип работы
BGP работает на прикладном уровне модели OSI (уровень 4), используя TCP-порт 179 для установления соединения между маршрутизаторами. Это отличает его от большинства других протоколов маршрутизации, которые работают на сетевом уровне. BGP-соединение устанавливается между двумя маршрутизаторами, называемыми пирами (peers) или соседями (neighbors). После установления TCP-сессии пиры обмениваются сообщениями OPEN, содержащими номера AS, версии протокола и параметры аутентификации.
Типы сообщений
BGP использует четыре основных типа сообщений:
- OPEN — инициирует соединение и согласовывает параметры.
- UPDATE — передаёт информацию о новых маршрутах, их атрибутах и отзывает старые маршруты.
- KEEPALIVE — подтверждает активность соединения (отправляется каждые 30 секунд по умолчанию).
- NOTIFICATION — сообщает об ошибке и закрывает соединение.
Атрибуты маршрутов
Каждый маршрут в BGP сопровождается набором атрибутов, которые определяют политику выбора наилучшего пути. Ключевые атрибуты включают:
- AS_PATH — список автономных систем, через которые прошёл маршрут (используется для обнаружения петель).
- NEXT_HOP — IP-адрес следующего маршрутизатора на пути к сети назначения.
- LOCAL_PREF — локальное предпочтение маршрута (используется для выбора выходящего трафика).
- MULTI_EXIT_DISC (MED) — метрика, используемая для выбора входящего трафика между несколькими точками подключения.
- COMMUNITY — тег для группировки маршрутов и применения политик.
Выбор наилучшего маршрута
При получении нескольких маршрутов к одной сети BGP выбирает наилучший на основе последовательности критериев (в порядке приоритета):
- Наибольшее значение LOCAL_PREF.
- Кратчайший AS_PATH.
- Наименьший ORIGIN (IGP предпочтительнее EGP, EGP предпочтительнее INCOMPLETE).
- Наименьший MED.
- Предпочтение маршрутов, полученных через eBGP (внешний BGP), а не iBGP (внутренний BGP).
- Наименьшая стоимость до NEXT_HOP (метрика IGP).
- Наименьший IP-адрес маршрутизатора-отправителя.
Классификация
BGP делится на два основных типа в зависимости от расположения пиров:
eBGP (External BGP)
Используется для обмена маршрутами между разными автономными системами. Пиры eBGP обычно находятся в разных AS и подключаются напрямую (через одно физическое соединение). eBGP применяется для связи между интернет-провайдерами, а также между провайдером и клиентом. По умолчанию TTL (Time To Live) в eBGP-пакетах равен 1, что предотвращает распространение маршрутов за пределы прямого соединения.
iBGP (Internal BGP)
Используется для обмена маршрутами внутри одной автономной системы. Все маршрутизаторы внутри AS должны быть соединены в полную сетку (full mesh) или использовать маршрутизаторы-ретрансляторы (route reflectors) для избежания петель. iBGP не изменяет AS_PATH, что требует дополнительных механизмов для предотвращения циклов.
Применение
BGP является основой маршрутизации в Интернете. Он используется для:
- Межпровайдерского взаимодействия — провайдеры обмениваются маршрутами, чтобы обеспечить связность между своими сетями.
- Мультихоминга (multihoming) — подключение сети к нескольким провайдерам для повышения отказоустойчивости и балансировки нагрузки.
- Трафика инжиниринга — управление путями трафика с помощью атрибутов (например, LOCAL_PREF, MED, Communities).
- VPN-сервисов — MPLS VPN и VPLS используют MP-BGP для передачи информации о виртуальных сетях.
- CDN и облачных сервисов — BGP позволяет балансировать нагрузку между географически распределёнными серверами.
Безопасность
BGP изначально не имел встроенных механизмов безопасности, что делает его уязвимым для атак. Основные угрозы включают:
- Угон маршрутов (BGP hijacking) — злоумышленник объявляет маршрут к чужой сети, перенаправляя трафик на себя.
- Фальсификация AS_PATH — изменение пути для обхода фильтров.
- Атаки типа «человек посередине» — перехват трафика через подмену NEXT_HOP.
Для защиты используются:
- RPKI (Resource Public Key Infrastructure) — инфраструктура для проверки принадлежности IP-адресов и AS-номеров.
- BGPsec — расширение, добавляющее цифровые подписи к сообщениям UPDATE.
- Фильтрация префиксов — настройка списков разрешённых и запрещённых маршрутов.
- Мониторинг — системы обнаружения аномалий, такие как BGPmon.
Критика
BGP критикуется за сложность конфигурации и управления, особенно в крупных сетях. Отсутствие встроенной безопасности остаётся серьёзной проблемой: несмотря на внедрение RPKI, многие сети не используют его. Протокол также не поддерживает автоматическое обнаружение соседей и требует ручной настройки пиров. Кроме того, BGP медленно сходится при изменениях топологии, что может приводить к временным потерям связности.
Интересные факты
- Таблица маршрутизации BGP в глобальном Интернете превышает 1 миллион записей (по состоянию на 2024 год).
- BGP-сообщения могут быть размером до 4096 байт, что ограничивает количество маршрутов в одном UPDATE.
- Протокол используется не только в Интернете, но и в частных сетях, например, для связи между дата-центрами крупных компаний.
Источники
- RFC 4271 — A Border Gateway Protocol 4 (BGP-4)
- RFC 4760 — Multiprotocol Extensions for BGP-4
- RFC 8205 — BGPsec Protocol Specification
- Документация Cisco: «BGP Design and Implementation»
- Книга: «BGP in the Data Center» (O'Reilly Media, 2017)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →