Протокол BGP

Сегодняшняя статья будет посвящена основному протоколу динамической маршрутизации – BGP (Border Gateway Protocol) . Почему основному? – Потому что с именно с помощью BGP организована топология всего Интернета.

Итак, в данной статье разберем следующие моменты:

  1. Основные термины протокола BGP
  2. Принципы работы протокола BGP
  3. Типы сообщений протокола BGP

Терминология

Когда речь идёт BGP, первое на чем необходимо остановиться - это понятие автономной системы AS(Autonomus System) . Автономная система - это совокупность точек маршрутизации и связей между ними, объединенная общей политикой взаимодействия, которая позволяет этой системе обмениваться данными с узлами, находящимися за ее пределами.

AS характеризуется (с недавних пор 32 битным) номером ASN (Autonomus System Number) и пулом IP-адресов. Выдачей и того и другого занимается организация IANA (Internet Assigned Numbers Authority), делегируя контроль за распределением ASN и других интернет ресурсов, региональным регистраторам.

Связность автономных систем достигается благодаря статической или динамической маршрутизации .

Со статической маршрутизацией всё просто. Вы заходите на устройство и вручную прописываете маршрут до его ближайшего соседа. На практике, связать даже 10 маршрутизаторов между собой уже представляется довольно сложной задачей.

Поэтому для больших сетей придумали динамическую маршрутизацию, при которой устройства автоматически делятся друг с другом информацией об имеющихся у них маршрутах и, более того, подстраиваются под изменения топологии.

Как известно, протоколы динамической маршрутизации классифицируются по двум основным признакам:

  1. Тип работы протокола относительно AS
  • IGP (Interior Gateway Protocol) – работают внутри автономной системы. Сюда относятся: RIP, OSPF, EIGRP, IS-IS
  • EGP (Exterior Gateway Protocol) – работают вне автономных систем и обеспечивают их связность. Сюда относится BGP
  • Алгоритм работы протокола
    • Distance-Vector - знает маршруты только до своих ближайших соседей и обменивается с ними таблицей маршрутизации. (RIP, EIGRP)
    • Link State – знает всю топологию сети и обменивается таблицей топологии со своими соседями (OSPF, IS-IS)

    Очевидно BGP не может быть Link State протоколом. Только представьте себе сколько автономных систем в Интернете, любой маршрутизатор просто выйдет из строя если получит такое количество информации.

    Итак, BGP – это протокол внешней маршрутизации, использующийся для соединения двух AS. Схема выглядит примерно так:

    Так как на BGP возложена великая задача – соединение автономных систем во всем Интернете, то он должен быть очень надежным. Для этих целей, в самом начале работы, BGP-маршрутизатор инициирует установление TCP сессии на 179 порт к своему соседу, происходит стандартных обмен SYN и ACK.

    Соединения по протоколу BGP должно быть абсолютно согласовано администраторами автономных систем, желающих организовать стык. Если, скажем, администратор AS402 запустил процесс BGP на маршрутизаторе BR2 (Border Router), указав в качестве соседа BR1 и его ASN, а администратор AS401 никаких действий не произвел, то TCP-сессия не поднимется и системы так и останутся несвязными. Кроме того, должны соблюдаться следующие условия:

    1. 179 порт не блокируется ACL (Access Control List)
    2. Маршрутизаторы пингуют друг друга
    3. При запуске BGP процесса ASN удаленной стороны был указан верно
    4. RouterID не совпадают

    Если TCP-сессия установлена успешно, то BGP-маршрутизаторы начинают обмен

    сообщениями OPEN, в котором сообщают свои ASN, RouterID и Hold timer. Hold timer это время, в течение которого будет поддерживаться TCP-сессия. Если условия, перечисленные ранее, не соблюдаются, например не совпадает информация о номере AS, то сообщением NOTIFICATION маршрутизатор, получивший неверный ASN уведомит об этом своего соседа и сбросит TCP-сессию.

    Если же все условия соблюдаются, то маршрутизаторы, с определенным интервалом, начинают высылать друг другу сообщения KEEPALIVE , означающие подтверждение параметров, принятых в OPEN и уведомление “я ещё жив”.

    Наконец, маршрутизаторы могут приступать к обмену маршрутной информацией по средствам сообщения UPDATE . Структура данного сообщения делится на две части:

    1. Path Attributes (Атрибуты пути). Здесь указывается из какой AS поступил маршрут, его происхождение и Next Hop для данного пути.
    2. NRLI (Network Layer Reachability Information). Здесь указывает информация непосредственно о сетях, подлежащих добавлению в таблицу маршрутизации, т.е IP-адрес сети и ее маска.

    Сообщение UPDATE будет передаваться каждый раз, когда один из маршрутизаторов получит информацию о новых сетях, а сообщение KEEPALIVE на протяжении всей TCP-сессии.

    Именно таким образом и работает маршрутизация во всем Интернете. Истории известно множество инцидентов, когда неправильная работа протокола BGP приводила к сбоям обширных частей глобальной сети, поэтому недооценивать его важность категорически нельзя.

    Полезна ли Вам эта статья?

    Пожалуйста, расскажите почему?

    Нам жаль, что статья не была полезна для вас:(Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

    Базовая настройка:

    Router(config)# router bgp
    remote-as
    ID маршрутизатора в BGP берется из следующих источников, в порядке предпочтения:
    1. Команда bgp router-id
    2. Наибольший IP петлевого (loopback) интерфейса
    3. Наибольший IP физического интерфейса
    В BGP по-умолчанию маршруты суммируются до границ своего класса. Как и в других протоколах, здесь это отключается той же командой no auto-summary .

    Маршруты, объявляемые вручную, указываются следующей командой:

    Включение редистрибуции:
    Router(config-router)# redistribute
    Маршруты, добавленные вручную (командой network ) помечаются как маршруты, происходящие из IGP ("i"), а маршруты, полученные при редистрибуции, помечаются как маршруты с неизвестным происхождением ("?").

    BGP-маршрутизатор может отдавать своим соседям маршрут по-умолчанию:

    Router(config-router)# neighbor
    default-originate
    Требование синхронизации маршрутов можно отключить, позволив тем самым BGP импортировать в свою таблицу внутренние маршруты, не известные IGP:
    Router(config-router)# no synchronization
    Атрибут "next hop" в маршрутах, рассылаемых iBGP-пирам, можно подменять на адрес объявляющего эти маршруты роутера:
    Router(config-router)# neighbor
    next-hop-self
    Регулировка таймеров (в секундах):
    Router(config-router)# bgp timers
    Исходный адрес, от имени которого устанавливаются связи с соседями, можно указывать вручную (особенно полезно, если исходный адрес висит на петлевом интерфейсе):
    Router(config-router)# neighbor
    update-source
    Для увеличения TTL в eBGP, которое по-умолчанию равно 1, используется "eBGP multihop":
    Router(config-router)# neighbor
    ebgp-multihop
    "eBGP multihop" обязателен, если используются петлевые интерфейсы.


    Агрегация маршрутов

    Статические маршруты:

    Router(config)# ip route 192.168.0.0 255.255.0.0 Null0
    ...
    Router(config-router)# network 192.168.0.0 mask 255.255.0.0
    Команда "aggregate-address":
    Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0
    Если используется ключевое слово summary-only , объявляется только агрегированный маршрут. Если же это ключевое слово не используется, то наряду с агрегированным маршрутом рассылаются и more-specific (морспецифики, более конкретные маршруты).

    С другой стороны, отдельные морспецифики можно фильтровать при помощи "подавления" (suppress map) :

    Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 suppress-map
    С целью изменения атрибутов агрегированному адресу можно назначить attribute map (например, для установки origin - происхождения маршрута):
    Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 attribute-map
    По-умолчанию в агрегированный маршрут не включается "AS Set". Для включения этого атрибута:
    Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 as-set
    При включении "AS Set" агрегированный маршрут наследует все атрибуты включенных в него маршрутов. Для наследования атрибутов только от избранных маршрутов используется "advertise map ":
    Router(config-router)# aggregate-address 192.168.0.0 255.255.0.0 as-set advertise-map
    Управление BGP-соединениями

    Для удобства каждому соседу можно назначить описание:

    Router(config-router)# neighbor 192.168.123.45 description R7 in Moscow
    Соединение с отдельным соседом можно спрятать под пароль (хэш MD5 включается в BGP-пакеты):
    Router(config-router)# neighbor 192.168.123.45 password FooBar
    Для каждого соседа можно настроить интервал рассылки (advertisement interval) , регулируя тем самым время ожидания перед отправкой объявлений (0-600 секунд):
    Router(config-router)# neighbor 192.168.123.45 advertisement-interval
    Переговоры между соседями об использовании версии BGP можно отключить, указав версию вручную:
    Router(config-router)# neighbor 192.168.123.45 version
    Можно настроить маршрутизатор таким образом, чтобы в процессе выбора наилучшего маршрута не учитывалась длина "AS Path":
    Router(config-router)# bgp bestpath as-path ignore
    Количество префиксов, получаемых от соседа, можно ограничить:
    Router(config-router)# neighbor 192.168.123.45 maximum-prefix []
    Здесь порог предупреждения (warning threshold) определяет процент от максимального количества префиксов, при превышении которого генерируется предупреждение. Ключевое слово warning-only позволяет соединению продолжать работу, даже если пир превысил максимальный порог префиксов.

    Для временного отключения соседа без удаления его конфигурации используется команда neighbor shutdown .

    Правила маршрутизации

    Для фильтрации принимаемых или рассылаемых маршрутов применяются списки дистрибуции (distribute list):

    Router(config-router)# neighbor distribute-list {in | out}
    Для фильтрации маршрутов, основываясь на их "AS Path", применяются списки фильтрации (filter list):
    Router(config)# ip as-path access-list 1 permit
    ...
    Router(config-router)# neighbor filter-list {in | out}
    Вместо списков дистрибуции или фильтрации можно использовать роутмапы (route map), которые позволяют производить более гибкую настройку и, в добавок, позволяют менять атрибуты. Применение route-map к соседу:
    Router(config-router)# neighbor route-map {in | out}
    Административный вес влияет на предпочтения среди маршрутов, полученных от BGP-пиров. Маршрутам от отдельного соседа этот вес (0-65535) можно назначить локально:
    Router(config-router)# neighbor weight
    По-умолчанию маршрутам, имеющим локальное происхождение, назначается вес 32768, в то время как вес всех остальных равен 0. Вес можно назначать и избранным маршрутам, применяя роутмапы или используя ключевое слово weight после параметра filter-list :
    Router(config-router)# neighbor filter-list weight
    Административная дистанция отличается от веса тем, что влияет на предпочтения среди маршрутов, полученных от разных протоколов маршрутизации. Чем меньше дистанция, тем предпочтительней. Административная дистанция внешних BGP-маршрутов равна 20. Дистанция внутренних и локальных (генерируемых данным роутером при помощи команды network ) BGP-маршрутов равна 200.

    Бэкдор (backdoor link, черный ход) - приватное соединение между AS, которому должно отдаваться предпочтение перед eBGP-маршрутами. Для чего административная дистанция внешнего маршрута должна быть искусственно завышена включением в BGP-процесс необходимой сети с ключевым словом backdoor :

    Router(config-router)# network backdoor
    Маршрут к указанной сети будет считаться локальным с административной дистанцией 200, из-за чего предпочтение будет отдаваться маршрутам, полученным из IGP, который работает в этом приватном линке, и трафик вместо внешнего маршрута потечет по бэкдору.

    Кроме того, iBGP-пиры обмениваются друг с другом локальными предпочтениями (local preference, 32-битная величина, по-умолчанию равная 100). Это значение можно установить командой ip default local-preference , либо set local-preference в роутмапе. В отличие от административного веса, действие локалпрефов распространяется за пределы локального роутера.

    Влияние на путь, которым трафик будет заходить в вашу AS из соседней, при наличии нескольких точек входа, оказывает MED (или "метрика"). Для установки MED BGP-маршрута равным значению метрики такого же маршрута из IGP, в роутмапе можно воспользоваться командой set metric-type internal . Для принудительного сравнения MED нескольких маршрутов к одному адресату, даже если они происходят из разных AS, в BGP-процессе применяется команда bgp always-compare-med .

    MED влияет только на поведение соседней AS. Повлиять аналогичным образом на поведение удаленных AS можно при помощи искусственного увеличения "AS Path" маршрутов. Для этого в роутмапе используется команда set as-path prepend . Обычно локальная AS "препендится" один или несколько раз. Например, для маршрутов AS 123:

    route-map PREPEND_AS permit 10
    match ip address
    set as-path prepend 123 123 123
    Для сохранения BGP-информации в процессе редистрибуции в/из IGP используется тегирование маршрутов (route tagging). По-умолчанию маршруты, передаваемые из BGP в IGP, тегируются собственным "AS Path". В тег можно добавить ещё происхождение маршрута командой set automatic-tag в роутмапе. Для автоматической установки атрибута "AS Path" из тега при редистрибуции маршрута из IGP обратно в BGP применяется команда set as-path tag в роутмапе. Также теги маршрутов могут применяться для хранения BGP-коммьюнити.

    Включение подавления маршрутов:

    Router(config-router)# bgp dampening [ ]

    Посмотреть подавленные маршруты можно командой show ip bgp dampened-paths . Команда show ip bgp flap-statistics позволяет просмотреть все текущие подавленные маршруты вместе с маршрутами, которые вообще когда-либо подавлялись. Команда clear ip bgp dampening возвращает подавленные маршруты обратно в обслуживание. Командой clear ip bgp flap-statistics стирается вся история "мигания" маршрутов.


    BGP в больших сетях

    Пример организации пиринговой группы:

    Router(config-router)# neighbor BRANCHES peer-group
    Router(config-router)# neighbor BRANCHES ebgp-multihop 2
    Router(config-router)# neighbor BRANCHES update-source Loopback 0
    Router(config-router)# neighbor 10.1.0.84 peer-group BRANCHES
    Router(config-router)# neighbor 10.1.0.84 remote-as 123
    Router(config)# ip community-list 101 {permit | deny}

    Критерий сравнения по коммьюнити-листу в роутмапе можно включать командой match community . Коммьюнити можно добавлять к маршруту без изменения уже присвоенных ему коммьюнити при помощи ключевого слова additive команды set community . Определенные коммьюнити, совпадающие с коммьюнити-листом, можно удалять командой set comm-list delete .

    Номера приватных AS

    Частные ASN находятся в промежутке с 64512 по 65535. В настройках соседа командой remove-private-as

    На роут-рефлекторе должны быть указаны внутренние пиры, которым он должен отражать маршруты:

    Router(config-router)# neighbor route-reflector-client

    Роут-рефлектор добавляет к маршрутам "Originator ID", указывающий на происхождение маршрута, и "Cluster List", определяющий рефлект-кластер во избежание появления маршрутных петель. По-умолчанию роут-рефлектор добавляет свой ID в список кластера. Но ID кластера можно указать вручную командой bgp cluster-id . Это необходимо, если в кластере несколько рефлекторов.

    Если клиенты рефлектора полносвязны между собой, для отключения отражения маршрутов между клиентами используется команда no bgp client-to-client reflection . Маршруты извне кластера будут продолжать отражаться обычным образом.

    BGP – это протокол маршрутизации внешнего шлюза, использующийся для проведения маршрутизации между маршрутными доменами (или автономными системами). BGP используются всеми поставщиками услуг Интернет, а также в ядрах очень крупных сетей.

    BGP – очень устойчивый и хорошо масштабируемый протокол маршрутизации. Протокол BGP проявляет исключительную стабильность в маршрутизации между автономными системами (AS) (даже при огромных таблицах маршрутизации) и предоставляет сетевым администраторам большую свободу действий и гибкость в создании правил маршрутизации.

    Принцип работы дистанционно–векторного протокола маршрутизации:

    Протокол BGP является протоколом вектора маршрута т.е. применяет информацию о векторе (направлении) и о пути к пункту назначения.

    Пример работы дистанционно–векторного протокола маршрутизации

    Предположим, что маршрутизатор А сгенерировал маршрут к сети 10.1.10/2А и объявил его маршрутизатору В. В информации о том, как достичь сети назначения 10.1.10/2А, маршрутизатор А указывает, что он является первым маршрутизатором в пути. Маршрутизатор В, получив этот маршрут, добавляет себя в путь и отправляет его маршрутизатору С, который, в свою очередь, добавляет себя в путь к сети 10.1.10/2А и отправляет маршрут маршрутизатору D. Когда маршрутизатор D получает маршрут к пункту назначения 10.1.10/2А, он обнаруживает, что путь к нему, проходит через маршрутизаторы С, В и А. Маршрутизатор D добавляет себя в путь и отсылает полученный маршрут обратно маршрутизатору А. Получив объявление маршрута, маршрутизатор А отвергает его, т. к. находит в соответствующем пути себя.

    Так работает протокол BGP, за исключением того, что информация добавляется в путь к сети назначения не отдельными маршрутизаторами, а автономными системами. Любой маршрутизатор, который получил маршрут, может определить наличие петли маршрутизации, проверив присутствие в пути к заданной сети назначения своей автономной системы.

    Протокол BGP не предъявляет никаких требований к топологии сети.

    Протоколом BGP на основе информации, полученной от различных маршругизаторов, выстраивается граф автономных систем со всеми связями между узлами. Каждой АS соответствует уникальный номер. Соединение между двумя АS формирует путь, а информация о совокупности путей от одного узла в АS к узлу в другой АS составляет маршрут. Протокол BGP активно использует информацию о маршрутах к заданному пункту назначения, что позволяет избежать образования петель маршрутизации между доменами.

    Выбор пути .Протокол BGP не использует метрики для определения петель в пути, они нужны ему для управления сетевыми правилами.

    Протокол BGP объявляет всем своим соседям только один оптимальный маршрут. Ниже приведен список метрик, упорядоченный по возрастанию значимости:

    · Административный вес;

    · Локальное предпочтение;

    · Локально созданные маршруты;

    · Кратчайший AS-путь;

    · Наиболее низкий источник;

    · Метрика МЕD (Мultiple Ехit Discriminator);

    · Предпочтительные внешние пути;

    · Путь через ближайшего соседа, если включена синхронизация;

    · Путь через соседа с наименьшим идентификатором маршрутизатора;

    Маршрут с кратчайшим AS – путем выбирается тогда, когда совпадают все более значимые факторы.

    Протоколы этого типа используются для определения маршрутов передачи данных между различными автономными системами. Такие протоколы обычно относят к классу Exterior Gateway Protocol. В настоящее время существуют два протокола данного типа:

    • Border Gateway Protocol
    • Exterior Gateway Protocol

    Особенности внешней маршрутизации

    Два маршрутизатора, которые обмениваются информацией о маршрутах, называются внутренними соседями в том случае, если они принадлежат к одной автономной системе и внешними – в том случае, если они принадлежат к различным автономным системам. На рисунке маршрутизаторы R2 R4 являются внутренними для автономных систем AS N и AS M соответственно. R1 и R3 совмещают функции внешнего и внутреннего маршрутизаторов. Маршрутизатор R1 представляет для автономной системы AS M маршруты к сетям, которые находятся в автономной системе AS N. Аналогичную функцию выполняет маршрутизатор R3 по отношению к маршрутам AS M.

    Основная особенность протоколов внешней маршрутизации заключается в том, что они представляют метрики маршрутов, которые рассчитываются относительно некоторой общей сети, а не относительно своих интерфейсов.

    Протокол маршрутизации EGP

    Основные принципы построения протокола маршрутизации EGP определены в RFC 904 . Этот протокол маршрутизации имеет три основные черты:

    • Использование механизма установления отношений между маршрутизаторами neighbor acquisition
    • Маршрутизаторы EGP используют специальный механизм для определения статуса свих партнеров по протоколу
    • Маршрутизаторы EGP периодически обмениваются информацией о достижимости сетей путем передачи сообщений об обновлениях маршрутов.

    В процессе установления партнерских отношений, а также для выполнения обмена информацией о маршрутах, маршрутизаторы EGP обмениваются специальными сообщениями, которые передаются в режиме с подтверждением приема. В зависимости от ситуации, эти сообщения могут быть нескольких типов:

    • Сообщения Neighbor Acquisition Messages
    • Сообщения Neighbor Reach ability Messages
    • Сообщения Poll Request Messages
    • Сообщения Routing Update Messages

    Сообщения об установлении отношений (Neighbor Acquisition)

    Сообщения этого типа маршрутизатор передает в том случае, когда собирается установить с другим маршрутизатором отношения в соответствии с алгоритмами информационного обмена EGP.

    Сообщения проверки состояния соседа Neighbor Reach ability

    Сообщения этого типа маршрутизатор передает в том случае, когда хочет установить в каком состоянии находится соседний маршрутизатор.

    Когда маршрутизатор находится в активном состоянии (см. рисунок) он периодически посылает сообщения Hello вместе с обновлениями маршрутов и ожидает ответа от соседа. Если маршрутизатор находится в пассивном режиме, он может использовать содержимое поля STATUS для определения состояния соседа вместо того, чтобы периодически опрашивать его. Обычно оба маршрутизатора находятся в активном состоянии.


    Сообщения проверки состояния маршрута Poll Request

    Сообщения этого типа маршрутизатор передает в том случае, когда хочет установить, достижима или нет сеть SOURCE NETWORK.

    Сообщения проверки состояния маршрута Routing Update

    Сообщения этого типа маршрутизатор передает в ответ на полученное сообщение Poll Request. В данном сообщении содержится информация о маршрутах данной автономной системы, которые источник хочет представить приемнику. На рисунке приведена структура сообщения Poll Request.

    Как уже было выше отмечено, описание метрики маршрута в протоколе EGP указывается относительно общей сети, которая называется SOURCE NETWORK. Это является существенным отличием данного протокола от протоколов класса IGP. Рассмотрим представленный на рисунке пример:


    В данном случае автономная система AS M использует маршрутизатор R1 для представления маршрутов к своим внутренним сетям для других автономных систем. В соответствии с принципом формирования информации о маршрутах, который принят в EGP, внутренние сети AS M будут представлены следующим образом:

    Маршрутизатор Сеть Дистанция
    R1 N3 1
    R1 N5 2
    R1 N4 3
    R2 N2 1
    R3 N1 1

    Сообщение Error Response/Indication

    Маршрутизатор EGP использует сообщения этого типа для того, чтобы предупредить соседний маршрутизатор о возникновении нештатной ситуации.

    Недостатки протокола EGP

    Протоколу EGP свойственен ряд существенных недостатков:

    1. Маршрутизатор EGP представляет только один путь до каждой сети. Это делает невозможным использование процедур динамического перераспределения нагрузки между параллельными каналами
    2. Маршрутизатор EGP не поддерживает внеклассовые сети.

    Протокол маршрутизации BGP

    Протокол маршрутизации BGP (Border Gateway Protocol RFC 1771) представляет собой более современный, чем протокол EGP, протокол внешней маршрутизации автономных систем. Оба этих протокола построены по примерно одинаковой схеме, однако протокол BGP имеет ряд существенных преимуществ по отношению к EGP.

    Основные принципы построения BGP

    Протокол BGP используется для передачи информации о внутренних маршрутах между автономными системами. Протокол BGP может быть использован для определения различных типов маршрутов –

    • Inter-autonomous system routing маршруты которые соединяют данную автономную систему с одной или несколькими другими автономными системами
    • Intra-autonomous system routing - протокол может быть использован для определения маршрута внутри автономной системы, в том случае, когда несколько маршрутизаторов участвуют в процессе определения маршрута BGP.
    • Pass-through autonomous system - протокол может быть использован для определения маршрутов, которые проходят через автономную систему, которая не участвует в процессе BGP

    Для обеспечения информационного обмена маршрутизаторы BGP используют сообщения стандартной формы. Для передачи этих сообщений в протоколе BGP предусматривается использование транспортного протокола TCP. Сообщения BGP передаются в следующих случаях:

    • Начало сеанса (Open)
    • Для периодической проверки состояния соседа (Keep Alive)
    • При изменении содержания таблицы маршрутов автономной системы(update)
    • При возникновении аварийной ситуации(Notification)

    Формат сообщения BGP

    Каждое сообщение BGP состоит из заголовка и последующих специфических полей:

    MARKER
    MARKER
    MARKER
    MARKER
    LENGTH TYPE

    В поле LENGTH помещается размер сообщения (вместе с заголовком), выраженный в байтах. В поле TYPE помещается код сообщения в соответствии со следующей таблицей:

    TYPE Сообщение
    1 OPEN
    2 UPDATE
    3 NOTIFICATION
    4 KEEPALIVE

    В поле маркера может быть помещена информация, которая необходима для выполнения операции аутентификации абонента. Если установление подлинности абонента не требуется, маркер формируется значениями – все «1».

    Сообщение OPEN

    Первое сообщение, которое должно быть передано маршрутизатором BGP после установления соединения TCP - сообщение OPEN.

    VERSION
    My Autonomous System
    Hold Time
    BGP Identifier
    Opt Parameter Len
    Optional Parameters
    …

    Поле VERSION

    В данном поле размещается информация о номере версии протокола BGP. В настоящий момент используется версия 4 этого протокола.

    Поле AS Number

    В этом поле размещается номер автономной системы, в которой находится источник данного сообщения.

    Поле Hold Time

    Значение этого поля определяет величину интервала времени, в течение которого отправитель будет ожидать получения ответного сообщения в подтверждение установления сессии BGP.

    Поле BGP Identifier

    В этом поле размещается идентификатор отправителя сообщения – в качестве этого идентификатора может быть использован IP адрес одного из интерфейсов маршрутизатора.

    В поле необязательные параметры может быть размещена информация, которая может быть использована для выполнения процедуры аутентификации абонента.

    Сообщение UPDATE

    Сообщение UPDATE используется для представления маршрута соседнему маршрутизатору BGP. Это сообщение одновременно может быть использовано для уничтожения маршрутов, которые перестали существовать.

    Unfeasible Routes Length
    Withdrawn Routes (Variable)
    Total Path Attribute Length
    Path Attributes
    Network Layer Reach ability Information (Variable)

    Поля Unfeasible Routes Length и Withdrawn Routes определяют уничтожаемые маршруты. В поле Withdrawn Routes размещаются описания отзываемых маршрутов. Если данное сообщение UPDATE не содержит уничтожаемых маршрутов, поле Unfeasible Routes Length должно иметь значение 0.

    В поле Total Path Attribute Length – содержится выраженная в байтах длина поля Path Attributes. Атрибут каждого маршрута представляет собой совокупность трех значений: . Содержимое этих полей используется для гибкого определения таких атрибутов маршрута, как – путь, по которому был получен данный маршрут, Next hop gateway, и т.д.

    В поле Network Layer Reach ability Information определяется собственно представляемая сеть. Для представления используются пара значений .

    Причем значение length представляет собой выраженную в битах длину префикса сети, а в поле prefix помещается собственно префикс.

    Множественный доступ в Интернет по протоколу BGP4

    Питер Морриси

    Е сли вы работаете в компании, являющейся поставщиком услуг Интернет (ISP), то вы, наверное, успели по достоинству оценить функциональную гибкость протокола BGP и предоставляемые им эффективные средства защиты. Этот протокол нацелен на обеспечение взаимодействия между сетями, лишенными единого административного управления, и как нельзя лучше подходит для организации доступа в Интернет.

    Если в вашей организации используется лишь одно Интернет-соединение, то вам, возможно, ни к чему даже знать расшифровку аббревиатуры BGP, не говоря уж о том, как протокол функционирует. Все, что вам нужно, вы можете получить, используя маршрут по умолчанию (по которому весь внешний трафик направляется на узел ISP) и предоставив штату этого ISP полную свободу по дальнейшей маршрутизации ваших пакетов. Однако если в целях резервирования или выравнивания нагрузки на своих серверах вы собираетесь добавить еще одно Интернет-соединение со вторым ISP, то в этой статье найдете ряд полезных сведений. Мы настоятельно советуем вам, чтобы, экспериментируя со средствами протокола BGP, влияние которых выходит за рамки вашей сети, вы работали в тесном контакте со своим поставщиком услуг.

    Представляем протокол BGP

    Протокол BGP - единственный протокол внешних шлюзов (Exterior Gateway Protocol - EGP), получивший широкое распространение. Впервые он был описан в 1989 г. в спецификации RFC 1105. Версия 4 этого протокола отражена в спецификации RFC 1654, опубликованной в 1994 г., и значительно усовершенствована в RFC 1771. Кроме того, в последующие годы был принят ряд документированных расширений этой версии протокола. Наиболее существенным достижением протокола BGP4 является использование им механизма внутридоменной бесклассовой маршрутизации (Classless Inter-Domain Routing - CIDR), который позволяет агрегировать сообщения об обновлении маршрутов, поступающих от множества соседних маршрутизаторов, в один элемент маршрутной таблицы. Протокол BGP4 был реализован в то время, когда гигантские маршрутные таблицы стали значительно замедлять работу маршрутизаторов. Техника бесклассовой маршрутизации CIDR позволяет устранить многие узкие места и повысить стабильность работы сети Интернет. Обеспечивая более эффективное распределение адресов, она заметно снижает риск истощения сетевого адресного пространства.

    После установки на ваш маршрутизатор протокола BGP4 он начинает организовывать связи со всеми смежными маршрутизаторами - так называемыми соседями. В отличие от протоколов OSPF (Open Shortest Path First) и EIGRP (Enhanced Interior Gateway Routing Protocol), обнаруживающих соседей автоматически, протокол BGP способен поддерживать обмен маршрутными таблицами только после того, как оба маршрутизатора сконфигурируют IP- и AS-адреса (Autonomous System Numbers - ASN) друг друга на своих интерфейсах. По завершении процедуры конфигурирования маршрутизаторы становятся одноранговыми, или равноправными.

    Маршрутизаторы-соседи обмениваются небольшими сообщениями, подтверждающими их активность на данный момент времени (keep-alive messages). Если сосед перестает получать подобные сообщения в течение некоторого предопределенного времени жизни маршрутов (hold time), он корректирует свою маршрутную таблицу, отражая в ней потерю части доступных маршрутов. Кроме того, протокол BGP4 рассылает частичные изменения, когда те или иные маршруты становятся недоступными. Таким образом, обмен полными маршрутными таблицами имеет место лишь тогда, когда два соседних маршрутизатора впервые устанавливают одноранговые отношения или когда такие отношения приходится переустанавливать повторно.

    Протокол BGP4 - это протокол векторов маршрутов (Path Vector Protocol), аналогичный протоколу векторов расстояний (Distance Vector Protocol), но с одним весьма существенным отличием. Протокол векторов расстояний выбирает лучший маршрут на основании числа “транзитов” (hops) и скоростей каналов. В противоположность этому протокол BGP4 выбирает тот маршрут, который проходит через наименьшее число автономных систем (Autonomous Systems - AS). Когда сообщение об обновлении маршрутной информации проходит через шлюз очередной автономной системы, BGP4 добавляет адрес ASN этой AS к цепочке адресов других автономных систем, через которые это сообщение прошло. По умолчанию маршрут с наименьшим числом адресов ASN хранится в маршрутной таблице в качестве оптимального пути к сети назначения. Одна автономная система может содержать множество внутренних маршрутизаторов, так что фактическое число переходов, как правило, всегда больше, чем указано в строке с адресами автономных систем.

    Тем не менее, воспользовавшись высокой гибкостью, присущей протоколу BGP4, можно дополнительно оптимизировать принятый по умолчанию вариант маршрутизации. Так, например, вы сумеете управлять выбором маршрута для покидающего вашу автономную систему трафика. По умолчанию протокол BGP4 определяет в качестве оптимального путь, проходящий через наименьшее число автономных систем. Однако при оценке маршрутов этот протокол не принимает во внимание ни скорости каналов, ни сетевую нагрузку на них, так что самый короткий путь может вполне оказаться далеко не самым оптимальным.

    Проблема решается с помощью атрибута Local-Pref протокола BGP4, позволяющего для следующего перехода выбрать вполне конкретный путь из всего множества существующих маршрутов. Системный администратор назначает всем маршрутам (или даже отдельной их группе), объявленным для одного из интерфейсов вашего маршрутизатора, более высокий весовой коэффициент Local-Pref, чем тем же маршрутам, объявленным для другого интерфейса. А поскольку значения этих весовых коэффициентов всегда учитываются раньше, чем вычисленные “длины” маршрутов, выраженные в числе транзитов, то окончательно выбранный маршрут пройдет через интерфейс с наиболее высоким весовым коэффициентом Local-Pref.

    Контролировать трафик, входящий в сеть, гораздо сложнее. Учитывая разное географическое положение компьютерных сетей, когда одно из соединений с ISP может оказаться значительно ближе к какой-либо части вашей автономной системы, чем другое, вам, возможно, придется использовать атрибут MED (МultiExit Discriminator, или многовыходной дискриминатор), с помощью которого можно задавать маршрут поступающего в сеть внешнего трафика, предназначенного для одной из ваших внутренних сетей. Хотя подход, предусматривающий использование атрибута MED для контроля за входящим трафиком, является довольно простым, он работает лишь в том случае, когда оба соединения с Интернет принадлежат одному и тому же ISP. Это связано с тем, что атрибут MED является локальным для автономной системы поставщика и его влияние не выходит за рамки последней. Другой метод контроля входящего трафика - подсчет числа транзитов (prepending).

    Маршрутизацию по протоколу BGP4 можно контролировать и с помощью атрибута Community, позволяющего задавать некий предопределенный код группе, или сообществу (community), маршрутов. Маршрутизатор, через который проходят эти маршруты, выполняет над ними данное действие, соотнесенное со значением этого кода. Код может определяться пользователем, но чаще всего применяется зарезервированное и весьма популярное среди пользователей сообщество, получившее название No-Export. Когда маршрутизатор BGP встречает маршрут с атрибутом No-Export, он не включает его в сообщения об обновлении маршрутов, высылаемые за пределы своей собственной автономной системы. Это довольно удобно для балансировки входящего трафика.

    Используйте маршрутную карту

    Реализация любой из рассмотренных выше схем требует применения маршрутной карты. Маршрутные карты определяют, как следует использовать атрибуты протокола BGP4 с конкретными маршрутами, получаемыми или объявляемыми вашими маршрутизаторами (см.: “Анатомия маршрутной карты”). Кроме того, маршрутные карты можно использовать для фильтрации получаемых или объявляемых маршрутов (то же самое осуществляется и посредством “списков распределения”).

    Настроив соответствующим образом маршрутную карту, вы можете быть уверены, что ваш маршрутизатор не будет объявлять маршруты, полученные им из Интернет, обратно в Интернет. В противном случае посторонние пользователи могли бы использовать вашу сеть и соединения с ISP в качестве трамплина для доступа к другой сети. Вы можете использовать маршрутные карты для фильтрации ваших сообщений об обновлении маршрутов, с тем чтобы оставлять в них лишь записи с маршрутами, принадлежащими вашей автономной системе. Конечно, вероятность того, что, обеспечивая получение сообщений об обновлении маршрутов лишь из вашей сети, ISP также использует фильтры, очень высока. Но если вы возьмете за практику делать то же самое, то только выиграете от этого.

    Выравнивание нагрузки

    Чаще всего протокол BGP применяют при наличии нескольких соединений с Интернет. Но если в ваши планы входит лишь эффективное распределение нагрузки на сеть, то вам удобнее поддерживать связь с Интернет только через одного поставщика услуг. В случае резервирования соединений с Интернет вам потребуется работать с двумя ISP, а это приведет к существенному усложнению процесса выравнивания нагрузки.

    Допустим, вы поддерживаете соединение лишь с одним поставщиком ISP и ваша автономная система связана с ним через один маршрутизатор. Тогда равномерное распределение исходящего трафика между соединениями с поставщиком - задача несложная. При этом обеспечивается максимальный контроль над маршрутами, по которым распространяются ваши пакеты. Более того, если оба интерфейса, связывающие вашу сеть с ISP, принадлежат одному и тому же маршрутизатору вашей автономной системы, вы можете вообще обойтись без протокола BGP. К примеру, маршрутизаторы фирмы Cisco Systems позволяют выравнивать нагрузку между двумя статическими маршрутами. Вполне вероятно, что и ваш ISP способен выравнивать ваш входящий трафик с помощью таких же статических маршрутов.

    Как мы уже говорили выше, в том случае, когда оба соединения поступают на одну автономную систему, для контроля за входящим трафиком вашей сети можно использовать атрибут MED. Если оба соединения принадлежат одному и тому же ISP, то с большой вероятностью они принадлежат и одной автономной системе. Что касается исходящего трафика, покидающего вашу сеть, то для контроля за способом его передачи можно также использовать атрибут Local-Pref.

    В случае сбоев протокол BGP4 способен автоматически переключать трафик с одного ISP на другого и таким образом обеспечивать устанавливаемую по умолчанию избыточность. Однако распределение нагрузки между несколькими поставщиками услуг способно превратиться в задачу, требующую немало усилий и изобретательности. Мы считаем, что наилучший подход к решению этой проблемы состоит в том, чтобы на первых порах ограничиться использованием установок протокола BGP4 по умолчанию и мониторинга входящего и исходящего трафика. Лишь накопив статистику, следует переходить к применению атрибута Local-Pref. Это позволит осуществлять достаточно точный контроль за трафиком, исходящим из вашей сети в конкретную внешнюю сеть или автономную систему. В сети Интернет насчитывается около 60 000 сетей, поэтому следует настраивать только маршруты с очень высоким уровнем трафика. Если время отклика линии вызывает нарекания со стороны пользователей, то в качестве эксперимента можно переключить маршруты, используемые для передачи наиболее важного трафика, с узла одного поставщика услуг на узел другого.

    Возможно, вы нуждаетесь в эффективном распределении поступающего в вашу сеть трафика между имеющимися соединениями. Как говорилось выше, проще всего это осуществить путем добавления дополнительных AS-адресов в сообщения об обновлении маршрутов. Этот подход реализуется наилучшим образом, если в автономной системе имеется несколько внутренних сетей. В таком случае вы можете скорректировать сообщения об объявлении маршрутов таким образом, чтобы для одной из сетей они были обозначены как более предпочтительные, чем для других, и тем самым обеспечить прохождение вашего входящего трафика через каналы соответствующего ISP.

    Другой подход к балансированию входящей нагрузки состоит в использовании соединения с одним ISP только для доставки трафика, идущего от этого ISP (и всех его абонентов), и использовании соединения с другим поставщиком для доставки оставшейся части трафика. Этот подход хорошо работает в том случае, когда боўльшая часть трафика идет от абонентов одного из ваших поставщиков, а также когда для связи с филиалами офиса или партнерами, использующими того же, что и вы, оператора связи, задействуются виртуальные частные сети (Virtual Private Networks - VPN). Чтобы информация вашей сети не выходила за пределы автономной системы вашего ISP, есть смысл использовать сообщество No-Export. В свою очередь, применение атрибута Local-Pref позволяет контролировать исходящий трафик, правда при условии, что он адресован автономной системе вашего ISP. Недостатком этого подхода является то, что приходится отчасти жертвовать резервированием соединений с Интернет. Если соединение с ISP, связывающее вас с всемирной сетью Интернет, выходит из строя, ваше другое соединение не сможет перехватить его трафик, пока вы не снимете с него атрибут No-Export.

    Протокол BGP предоставляет немало возможностей по управлению маршрутизацией трафика Интернет. Используя многочисленные его опции, работайте в тесном контакте со своим ISP. Следите за тем, чтобы такой глубокий уровень взаимодействия с Интернет не создавал дополнительных трудностей ни вам, ни его сообществу. А если вы собираетесь принимать маршруты из Интернет, вам придется потратиться на наращивание оперативной памяти и мощные процессоры для своих маршрутизаторов. Если вы планируете принимать полную таблицу маршрутизации от одного ISP, вам потребуется как минимум 64 Мбайт доступной оперативной памяти. Если вы будете принимать полные таблицы маршрутизации от двух поставщиков услуг в одном маршрутизаторе, то эта цифра удвоится. И прежде чем подписать контракт с поставщиком услуг Интернет, имейте в виду: нет никакой гарантии, что этот поставщик будет объявлять каждую сеть, принадлежащую автономной системе другого поставщика. Следует убедиться и в том, что новый ISP способен обеспечить резервирование и распределение нагрузки на линии связи в той степени, которая нужна вам.