No title

Протокол пограничной маршрутизации (BGP — Border Gateway Protocol)

Протокол пограничной маршрутизации (BGP — Border Gateway Protocol) – это протокол маршрутизации между автономными системами. Он основан на методах маршрутизации, называемых "маршрутизация вектором пути". Рассмотрим вначале принципы такой маршрутизации. Попробуем понять, почему два ранее показанных метода, а именно маршрутизация с помощью вектора расстояния маршрута (RIP) и маршрутизация по состоянию линии (OSF), не являются желательными для использования системой маршрутизации между автономными системами.

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

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

#### Маршрутизация с использованием вектора путей

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

Таблица маршрутного вектора пути
Сеть | Следующий маршрутизатор | Путь
N01 | R01 | AS14,AS23, AS67
N02 | R05 | AS22,AS67, AS05, AS89
N03 | R06 | AS67,AS89, AS09, AS34
N04 | R12 | AS62,AS02, AS09

#### Сообщения вектора путей

Автономный пограничный маршрутизатор, который участвует в маршрутизации с использованием вектора путей, извещает о достижимости сетей в их собственной автономной системе для соседних автономных пограничных маршрутизаторов. Концепция окружения здесь та же самая, как в уже рассмотренных протоколах RIP и OSPF. Два пограничных маршрутизатора автономных систем, подключенные к той же самой сети, – соседи.

Заметим, что пограничный маршрутизатор автономной системы получает свою информацию от внутреннего алгоритма маршрутизации, такого как RIP и OSPF.

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

Например, рис. 1 показывает сеть Интернет с четырьмя автономными системами. Маршрутизатор R1 посылает сообщение вектора путей, извещающего о достижимости N1, маршрутизатор R2 получает сообщение, обновляет свою таблицу маршрутизации, после этого добавляет свою информацию об автономной системе к информации пути и вставляет самого себя как соседний маршрутизатор, посылает сообщение к маршрутизатору R3. Маршрутизатор R3 получает сообщение, обновляет свою таблицу маршрутизации и посылает сообщение после изменения к маршрутизатору R4.

Рис. 1 Принцип формирования вектора путей

#### Предотвращение петли

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

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

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

#### Атрибуты пути

При рассматриваемом методе путь был представлен как список автономных систем, но фактически это список атрибутов.

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

Атрибуты разделяются на две категории: закрепленные (well-know) и опциональные.

Закрепленный атрибут — единица, которую каждый BGP-маршрутизатор должен распознавать. Опциональный атрибут — единица, которую не надо распознавать каждому BGP-маршрутизатору.

Закрепленный атрибут сам разделяется на две категории: обязательный и по усмотрению. Закрепленный атрибут по усмотрению — единица, которая должна быть опознана каждым маршрутизатором, но не требует включения в каждое обновленное сообщение.

Единица обязательного закрепленного атрибута – это ORGIN. Она определяет информацию об источнике маршрутизации (RIP, OSPF и так далее). Другой хорошо известный закрепленный обязательный атрибут – это AS_PATH. Он определяет список автономных систем, через которые может быть достигнут пункт назначения. Еще один обязательный атрибут – это NEXT-HOP, он определяет следующий маршрутизатор, к которому должен быть послан пакет данных.

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

#### Формат пакета

Все BGP-пакеты используют одни и те же заголовки. Перед изучением различных типов пакетов рассмотрим общий заголовок ( рис. 2). Поля этого заголовка приведены ниже.

Рис.2 Заголовок пакета BGP

- Маркер. Это 16-байтовое поле, зарезервированное для опознавания.
- Длина. Это поле в 2 байта, которое определяет длину полного сообщения, включающего заголовок.
- Тип. Это поле 1 байт — тип пакета. Как было сказано раньше, мы имеем четыре типа, от 1 до 4.

#### Типы пакетов

BGP использует четыре различных типа сообщений: открытия, обновления, дежурные и уведомления.

##### Сообщение "открытие"

Для того чтобы создать информацию об окружении, маршрутизатор, выполняющий протокол BGP, устанавливает TCP-соединение с соседями и посылает сообщение "открытие". Если сосед согласно политике принимает отношения соседства, он отвечает дежурным сообщением, которое означает, что отношения между двумя маршрутизаторами установлены. Описание формата "открытие" см. на рис. 3

Рис. 3. Сообщение открытия

Поля сообщения "открытие" приведены ниже.

- Версия. Это поле 1 байт, определяющее версию BGP. Текущая версия — 4.

- Моя автономная система. Это поле 2 байта, определяющее номер автономной системы.

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

- BGP-идентификатор. Это поле 4 байта, определяющее маршрутизатор, который прислал сообщения "открытие". Маршрутизатор обычно использует для этой цели один из своих адресов IP (потому что он уникален).

- Длина параметра опции. Сообщение "открытие" может содержать некоторые параметры опции. Если это так, то здесь содержится 1 байт, определяющий длину всех параметров опции. Если параметров опции нет, значение этого поля — ноль.

- Параметры опции. Если значение длины параметров опции не равно нулю, это означает, что имеются некоторые параметры опций. Каждый параметр опции сам имеет два подполя: длина параметра и значение параметра.

Единственный параметр опции, определенный до сих пор, — аутентификация.

##### Сообщение "обновление"

Сообщение "обновление" — основа протокола BGP — используется маршрутизатором для изменения пункта назначения, который был заявлен раньше, объявления маршрута к новому конечному пункту или замены обеих пунктов назначения. Заметим, что BGP может отозвать несколько пунктов назначений, которые были переданы раньше, но может известить только один новый пункт назначения в одном сообщении. Формат обновленного сообщения показан на рис. 4.

Рис. 4. Сообщение обновления

Поля сообщения обновления перечислены ниже.

Длина отзываемых маршрутов. Это поле определяет длину следующего за ним поля.

- Отзываемый маршрут. Это поле — список всех маршрутов, которые должны быть удалены из предыдущего объявленного списка.
- Длина атрибутов пути. Это поле 2 байта определяет длину следующего поля.
- Атрибуты пути. Это поле определяет атрибуты пути (маршрута) к сети, которая достижима и объявлена в этом маршруте.
- Информация достижимости сетевого уровня. Это поле определяет сеть, которая заявлена этим сообщением. Оно имеет длину поля и префикс IP-адреса. Длина определяет число бит в префиксе. Префикс определяет общую часть сетевого адреса. Например, 153.18.7.0/24.

Префикс 153.18.7, длина префикса – это 24 бита. Это означает, что BGP4 поддерживает классическую адресацию и CIDR (Classes InterDomain Routing – бесклассовая междоменная маршрутизация).

##### Дежурное сообщение

Маршрутизатор (называемый равный – peers на языке BGP), выполняющий BGP-протоколы, обменивается регулярно с соседями дежурными сообщениями (прежде чем истечет время удержания) для того, чтобы сказать друг другу, что они в режиме ожидания. Дежурные сообщения, с типом сообщений 3 (поле Тип = 3), содержат только общий заголовок, показанный на рисунке 3.

##### Сообщение уведомления

Сообщение уведомления посылается маршрутизатором всегда, когда обнаружены признаки ошибки или маршрутизатор завершает соединение. Формат сообщения показан на рисунке 5.

рис. 5 Сообщение уведомления

Поля, содержащиеся в поле извещения, следующие:

- Код ошибки. Это поле 1 байт, определяющее категорию ошибки.
- Подкод ошибки. Это поле 1 байт дополнительно определяет тип ошибки в каждой категории.
- Данные об ошибке. Это поле может быть использовано, чтобы дать больше диагностической информации об ошибке.

BGP инкапсулируются в TCP-сегменты, использующие закрепленный порт 179. Это означает, что не нужен контроль ошибок и управление потоком. Когда TCP-соединение открывается, обмен сообщениями обновления, дежурными и уведомления продолжается до тех пор, пока не будет послано сообщение уведомления.

Коды ошибок
Код ошибки | Описание подкода ошибки | Описание подкода ошибки
1 | Ошибка заголовка сообщения | Определены три различных подкода для этого типа ошибки: проблемы синхронизации(1), плохая длина сообщения (2), плохой тип сообщения (3)
2 | Ошибка сообщения открытия | Определены 6 различных подкодов для этого типа ошибки: номер неподдерживаемой версии (1), плохой прямой АС (2), плохой идентификатор BGP (3), неподдерживаемые опциональные параметры (4), ошибка опознавания (5), неприемлемое время удержания (6)
3 | Ошибка сообщения обновления | Определены 6 различных подкодов для этого типа ошибки: плохо сформированный список атрибутов (1), неопознанные атрибуты хорошо известного порта (3), ошибка флага атрибутов(5), ошибка длины атрибутов (6), АС-зацикливание маршрутизации (7), недействительный атрибут следующего участка (8), ошибка опциональных атрибутов (9), недействительное поле сети (10), плохо сформированный AS_PATH (11)
4 | Истекло время удержания | Подкод не определен
5 | Ошибка автомата с конечным числом состояний | Это определенная процедурная ошибка. Подкод не определен.
6 | Прекращение | Подкод не определен