OSPF — это протокол состояния каналов, который считается самым известным протоколом из семейства протоколов внутренних шлюзов (IGP), разработанный в середине 1980-х годов рабочей группой OSPF в IETF.
В этой статье мы рассмотрим основные принципы работы данного протокола маршрутизации. Статья ориентирована прежде всего на начинающих сетевых инженеров, хотя возможно и CCIE найдут в ней что‑то интересное.
Построение топологической карты сети
При настройке OSPF прослушивает соседние маршрутизаторы и собирает все доступные данные о состоянии соединений, чтобы построить топологическую карту всех доступных маршрутов в сети, а затем сохраняет информацию в своей базе данных топологии, также известной как база данных состояния соединений (Link‑State Database, LSDB). Используя информацию из базы данных топологии, OSPF вычисляет наилучший кратчайший путь к каждой достижимой подсети/сети, используя алгоритм под названием Shortest Path First (SFP). Затем OSPF создает три таблицы для хранения следующей информации:
Neighbor Table: Содержит все обнаруженные соседние маршрутизаторы OSPF, с которыми будет происходить обмен информацией о маршрутах
Topology Table: Содержит всю карту сети со всеми доступными маршрутизаторами OSPF и рассчитанными наилучшими и альтернативными маршрутами.
Routing Table: Содержит текущие рабочие наилучшие маршруты, которые будут использоваться для пересылки трафика данных между соседями.
Понятие OSPF Routing Area
Одной из функций OSPF является разделение маршрутизаторов внутри одной автономной системы, работающей под управлением OSPF, на области (Area), где каждая область состоит из группы связанных маршрутизаторов.
Идея разделения сети OSPF на области заключается в упрощении администрирования и оптимизации доступных ресурсов. Оптимизация ресурсов особенно важна для крупных корпоративных сетей с множеством сетей и каналов связи. Наличие множества маршрутизаторов, обменивающихся базой состояния связей, может переполнить сеть и снизить ее эффективность — именно эта необходимость привела к созданию концепции областей.
Области — это логическая совокупность маршрутизаторов, имеющих одинаковый идентификатор или номер области в сети OSPF. Сама сеть OSPF может содержать несколько областей, первая и основная область называется магистральной областью «Область 0», все остальные области должны подключаться к области 0, как показано на схеме ниже:

Все маршрутизаторы в пределах одной области имеют одну и ту же Topology Table — базу состояния связей — но разные таблицы маршрутизации, поскольку OSPF рассчитывает различные оптимальные пути для каждого маршрутизатора в зависимости от его местоположения в топологии сети, хотя все они имеют одну и ту же топологию состояния связей.
Цель создания области — локализовать сеть следующим образом:
— Границы области дадут возможность использовать суммирование, так как в обычных протоколах состояния соединения суммирование сетевых префиксов невозможно, поскольку маршрутизаторы должны иметь одну и ту же топологию карты всей сети, совпадающую у всех соседей.
— Границы областей также помогают предотвратить локализацию сбоев, подавляя обновления, которые происходят, когда в сети происходят изменения, вызывающие поток обновлений между маршрутизаторами. Это также является недостатком протоколов состояния каналов: При соединении сетей большого размера очень трудно избежать переполнения базы данных состояния связей.
Разобравшись областями поговорим о типах пакетов OSPF.
Типы пакетов OSPF
Маршрутизаторы OSPF генерируют информационные пакеты, которыми обмениваются с соседними маршрутизаторами. Эти пакеты предназначены для различных целей, таких как формирование отношений между соседними маршрутизаторами, расчет стоимости и наилучшего пути для определенного маршрута и многое другое.
Ниже приведен список наиболее часто используемых пакетов OSPF:
Link State Advertisement (LSA): Основной способ связи между маршрутизаторами OSPF, это пакет, который несет всю основную информацию о топологии и передается между областями для выполнения различных функций.
База данных состояния каналов (LSDB): Пакет LSDB содержит всю обновленную информацию о состоянии связей, которой обменивается сеть, и все маршрутизаторы в одной области имеют идентичные LSDB, а когда два маршрутизатора формируют новое соседство, они синхронизируют свои LSDB, чтобы быть полностью смежными.
Запрос состояния соединения (LSR): После формирования соседских отношений между соседями и обмена LSDB соседние маршрутизаторы могут обнаружить недостающую информацию из базы LSDB, тогда они отправляют пакет запроса, чтобы получить недостающую часть, соседи получают этот пакет и отвечают LSU.
Обновление состояния канала (LSU): Ответный пакет отправляет определенный фрагмент информации LSDB, запрошенный соседом OSPF через пакет LSR.
Подтверждение состояния канала (LSAcK): Маршрутизатор, отправивший LSR‑пакет, подтверждает получение LSU от соседа, отправляя пакет подтверждения, подтверждающий получение запрошенных LSU.

Работа внутри одной области
Работа внутри области иерархически построена между маршрутизаторами, которые классифицируются следующим образом.
Пограничный маршрутизатор области (Area Border Router, ABR)
Маршрутизаторы, расположенные на границах каждой области, соединяющиеся с более чем одной областью OSPF, из которых одна является областью 0, называются ABR‑маршрутизаторами. Маршрутизаторы ABR отвечают за суммирование IP‑адресов каждой области.
Маршрутизатор границы автономной системы (Autonomous System Boundary Router, ASBR):
ASBR — это маршрутизатор, который имеет интерфейсы, подключенные к одной или нескольким областям OSPF, аналогично ABR, однако отличие ASBR в том, что он также подключается к другим системам маршрутизации, таким как BGP, EIGRP, Internet и другим. Маршрутизатор ASBR обычно рассылают маршруты из других систем маршрутизации в область OSPF, к которой он принадлежит.
Назначенный маршрутизатор (Designated Router, DR):
Назначенный маршрутизатор выбирается маршрутизаторами в сегментах множественного доступа (например, в локальной сети) на основе его приоритета (Router ID, приоритет). Маршрутизатор DR выполняет специальные функции, такие как генерация объявлений о состоянии соединения (LSA) и обмен информацией со всеми другими маршрутизаторами в той же области. Каждый маршрутизатор в той же области создает смежность с DR и BDR.
DR отправляет обновления всем маршрутизаторам области, используя мультикастовый адрес 224.0.0.5. Все маршрутизаторы OSPF, кроме DR, используют мультикастовый адрес 224.0.0.6 для отправки пакетов Link State Update (LSU) и Link State Advertisements (LSAs) на DR.
Резервный назначенный маршрутизатор (BDR)
BDR — это маршрутизатор, который становится DR в случае отказа существующего DR. BDR имеет второй по значению приоритет (DR имеет наивысший приоритет) в сети OSPF. Когда BDR становится DR, проводятся новые выборы для поиска нового BDR.
Состояния OSPF
Когда OSPF формирует смежность с соседями, соединение проходит через несколько состояний, прежде чем маршрутизаторы станут полностью смежными друг с другом, в этом разделе подробно описывается каждое состояние.
Но прежде чем мы начнем, давайте вкратце рассмотрим различные типы пакетов OSPF LSA, которые мы будем изучать:
LSA Type 1: OSPF Router LSA
LSA Type 2: OSPF Network LSA
LSA Type 3: OSPF Summary LSA
LSA Type 4: OSPF ASBR Summary LSA
LSA Type 5: OSPF ASBR External LSA
LSA Type 6: OSPF Group Membership LSA
LSA Type 7: OSPF Not So Stubby Area (NSSA) External LSA
LSA Type 8: OSPF External Attributes LSA (OSPFv2) / Link Local LSA (OSPFv3)
LSA Тип 9: OSPF Link Scope Opaque (OSPFv2) / Intra Area Prefix LSA (OSPFv3)
LSA Тип 10: OSPF Area Scope Opaque LSA
LSA Тип 11: OSPF AS (Autonomous System) Scope Opaque LSA
Полезная нагрузка LSA имеет разный размер в зависимости от типа LSA и информации, которую он содержит. На приведенной ниже диаграмме хорошо видно, как LSA содержатся в LSU:

Пакет LSA
Каждый пакет LSA состоит из заголовка и тела, содержащего всю информацию, необходимую для обмена сетевой информацией в сети OSPF. На диаграмме ниже показана структура пакета OSPF LSA:

Заголовок LSA — это раздел размером 20 байт (32×5 = 160 бит), состоящий из следующих полей:
LS Age (2 байта): Время, прошедшее с момента генерации LSA (в секундах).
Options (1 байт): Указывает на функции и опции OSPF, которые может поддерживать источник.
LS Type (1 байт): Определяет тип LSA (все типы будут описаны позже).
Link State ID (4 байта): Идентифицирует сетевой канал между маршрутизаторами OSPF (обычно IP‑адрес).
Advertising Router (4 байта): Указывает идентификатор исходного маршрутизатора.
LS Sequence Number (4 байта): Определенное число в каждом пакете LSA для фильтрации старых и повторяющихся
LS Checksum (2 байта): Определенное число, присваиваемое LS для сравнения и обнаружения ошибок.
Length (2 байта): Длина пакета LSA.
Типы LSA
LSA Type 1 (Router LSA):
LSA типа 1, рассылаются новым маршрутизатором в данной области. Описывает стоимость связей маршрутизатора с данной областью, никогда не пересекает область и передается только в эту область.

LSA типа 2 (сетевой LSA):
LSA типа 2 генерируются в сети с широковещательным множественным доступом (BMA). Только DR генерирует этот LSA. LSA типа 2 также передается по многоадресному IP‑адресу 224.0.0.5 в данной конкретной области. Эти пакеты описывают все маршрутизаторы, подключенные к сети, также они никогда не пересекают область и распространяется только в этой области.

LSA Type 3 (Summary LSA):
LSA типа 3, генерируемый маршрутизатором ABR. Описывает информацию (маршруты внутри области) о конкретной области. Передается в отдельную область.

LSA типа 4 (Summary LSA):
LSA типа 4 также генерируется маршрутизатором ABR, и если в нем указан IP‑адрес или ID маршрутизатора ASBR, то это LSA 4. Рассылает информацию об ASBR (Router ID или IP‑адрес ASBR).

LSA Type 5 (External LSA):
LSA типа 5, генерируемый ASBR. Описывает информацию о внешних маршрутах к AS.
LSA типа 7
LSA типа 7 также генерируется ASBR. Функция та же, что и у типа 5 — описание информации о внешних маршрутах, но в NSSA (Not So Stubby Area). В NSSA область будет заглушкой, и мы также можем разместить ASBR.

Специальные области OSPF
Выше упоминались специальные области OSPF, такие как NSSA. рассмотрим их подробнее.
Stub Area:
OSPF Stub Area — это область, в которую не могут попасть LSA типа 5. Она является RFC‑совместимой. Все маршрутизаторы в области stub должны быть настроены как Stub Area. Маршрут по умолчанию генерируется с LSA типа 3 вместо внешних маршрутов. ASBR не может размещаться в Stub Area. Область 0 не может быть сконфигурирована как заглушка (т. е. магистральная область никогда не может быть заглушкой).=
Totally Stub Area:
OSPF Totally Stub Area — это область, в которую не могут попасть LSA типа 5 (внешние LSA) и LSA типа 3 (генерируемые ABR). Это проприетарная технология Cisco. ABR настроен как Totally Stubby Area. Вместо внешних маршрутов и сводных маршрутов генерируется маршрут по умолчанию. ASBR не может размещаться в Totally Stubby Area.
Not‑So‑Stubby Area:
OSPF Not‑So‑Stubby Area — это такая же область, как и Stub Area, но в ней можно разместить ASBR. LSA типа 7 генерируется ASBR для рекламы внешних маршрутов. Затем ABR преобразует этот LSA типа 7 в LSA типа 5 для магистральной области.
Заключение
В этой статье мы рассмотрели основные компоненты протокола OSPF: какие пакеты он использует, как он осуществляет обмен маршрутной информацией и какие роли могут выполнять различные маршрутизаторы в сети OSPF.
Хотите разобраться в том, как работает OSPF и как настраиваются корпоративные сети? Присоединяйтесь к двум открытым урокам от OTUS — это отличная возможность погрузиться в тему под руководством экспертов.
Стек сетевых протоколов и с чем его едят. На примере TCP/IP — 2 июля в 20:00
VLAN и маршрутизация: почему без них не обойтись в любой компании — 23 июля в 20:00
А чтобы понять свой уровень знаний сетей и узнать, достаточно ли его для прохождения курса "Network Engineer. Basic", пройдите вступительное тестирование — это бесплатно и займет всего несколько минут.