Содержание

OSPF

основано на http://xgu.ru/wiki/OSPF

OSPF (Open Shortest Path First) — протокол (3его уровня) динамической маршрутизации

OSPFv2 работает поверх IP, а конкретно, он заточен только под IPv4

OSPFv3 не зависит от протоколов 3-го уровня и потому может работать с IPv6

Основы

Термины

Базовые термины OSPF:

Соседи OSPF:

Пакеты OSPF:

Описание работы протокола

  1. Включить OSPF на маршрутизаторе
  2. Маршрутизатор выбирает Router ID (уникальное имя маршрутизатора)
  3. Включить OSPF на интерфейсах (чтобы протокол знал о каких интерфейсах можно сообщать другим маршрутиазторам)
  4. Обнаружение соседей с помощью Hello-пакетов
    1. Маршрутизаторы обмениваются hello-пакетами через все интерфейсы, на которых активирован OSPF.
    2. Маршрутизаторы, которые находятся в одном широковещательном сегменте, становятся соседями, когда они приходят к договоренности об определенных параметрах, указанных в их hello-пакетах.
  5. Adjacency (отношения соседства, отношения смежности) это тип соседства между маршрутизаторами, по которому они синхронизируют LSDB. Установка этих отношений зависит от типа сети:
    1. Если маршрутизаторы находятся в сети с множественным доступом, они выбирают DR и выполняют синхронизацию LSDB с ним
    2. Если маршрутизаторы находятся в сети point-to-point, они приступают к синхронизации LSDB друг с другом
  6. Синхронизация LSDB. Происходит в несколько этапов. По сформированным отношениям соседства происходит обмен такими пакетами:
    1. DBD (краткое описание LSA в LSDB). С помощью этих пакетов маршрутизаторы сообщают друг другу о том, какую информацию они знают, в сокращенном виде
    2. LSR. После обмена DBD-пакетами, с помощью LSR маршрутизаторы запрашивают у соседа недостающую информацию
    3. LSU (содержит полное описание LSA). В ответ на LSR, который ему прислал сосед, маршрутизатор отправляет LSU, с полным описанием информации, которой не хватает у соседа
    4. LSAck. После получения LSU от соседа, маршрутизатор отправляет подтверждение, что он получил информацию
    5. Если оба маршрутизатора должны запросить друг у друга информацию, то эта процедура повторяется и в другую сторону.
    6. После этого, LSDB синхронизирована, а значит, полностью одинакова между соседями
  7. После синхронизации LSDB, маршрутизатор отправляет обновление далее, своим соседям в других широковещательных сегментах
  8. Рассылая объявления через зону, все маршрутизаторы строят идентичную LSDB
  9. Когда база данных построена, каждый маршрутизатор использует алгоритм SPF (shortest path first) для вычисления графа без петель, который будет описывать кратчайший путь к каждому известному пункту назначения с собой в качестве корня. Этот граф — дерево кратчайшего пути.
  10. Каждый маршрутизатор строит таблицу маршрутизации, основываясь на своем дереве кратчайшего пути.

Выбор Router ID

При запуске процесса OSPF на любом маршрутизаторе, обязательно должен быть выбран Router ID.

Router ID — это уникальное имя маршрутизатора, по которому он известен в AS.

В зависимости от реализации, Router ID может выбираться по-разному: * минимальный IP-адрес или максимальный IP-адрес, который назначен на интерфейсах маршрутизатора * также обычно есть способ задания Router ID вручную * главное, чтобы Router ID был уникален в AS

После изменения Router ID, процесс OSPF должен быть перезагружен, а все LSA, которые сгенерировал этот маршрутизатор, должны быть удалены из AS, до перезагрузки.

Установка отношений соседства

Обнаружение соседей начинается после того как:

Для обнаружения и мониторинга соседей используются сообщения Hello.

Процедура установки отношений соседства зависит от типа сети, в которой работает OSPF

Типы сетей, поддерживаемые протоколом OSPF

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

В реальной жизни, чаще всего используются два типа сетей:

Для broadcast и nonbroadcast сетей (то есть, для сетей с множественным доступом), выбираются DR и BDR.

Как правило, тип сети определяется автоматически, по типу интерфейса. Но может быть задан и вручную.

Отношения соседства (adjacency)

Различают понятия сосед и отношения соседства:

Для того чтобы маршрутизаторы стали соседями:

OSPF не проверяет сеть и маску сети при установке отношений соседства в point-to-point сетях. Поэтому можно использовать IP unnumbered интерфейсы.
Для того чтобы маршрутизаторы установили отношения соседства у них, кроме уже перечисленных критериев, должны совпадать значения IP MTU на интерфейсах. Информация о значении IP MTU передается в DD-пакетах и сравнивается в начале обмена DD-пакетами.

Отношения соседства устанавливаются только на primary адресах.

На интерфейсе может быть настроен secondary адрес. Маршрутизаторы не отправляют hello-пакеты с secondary адреса, не устанавливают отношения соседства на secondary адресах, но сеть secondary адреса может анонсироваться.

Возможные состояния

Выделенный маршрутизатор (DR) и резервный выделенный маршрутизатор (BDR)

В сетях со множественным доступом отношения соседства должны быть установлены между всеми маршрутизаторами. Это приводит к тому, что рассылается большое количество копий LSA. Если, к примеру, количество маршрутизаторов в сети со множественным доступом равно n, то будет установлено n(n-1)/2 отношений соседства. Каждый маршрутизатор будет рассылать n-1 LSA своим соседям, плюс одно LSA для сети, в результате сеть сгенерирует n² LSA.

Для предотвращения проблемы рассылки копий LSA в сетях со множественным доступом выбираются DR и BDR.

Выделенный маршрутизатор (designated router, DR) — управляет процессом рассылки LSA в сети. Каждый маршрутизатор сети устанавливает отношения соседства с DR. Информация об изменениях в сети отправляется DR, маршрутизатором обнаружившим это изменение, а DR отвечает за то, чтобы эта информация была отправлена остальным маршрутизаторам сети.

Недостатком в схеме работы с DR маршрутизатором является то, что при выходе его из строя должен быть выбран новый DR. Новые отношения соседства должны быть сформированы и, пока базы данных маршрутизаторов не синхронизируются с базой данных нового DR, сеть будет недоступна для пересылки пакетов. Для устранения этого недостатка выбирается BDR.

Резервный выделенный маршрутизатор (backup designated router, BDR). Каждый маршрутизатор сети устанавливает отношения соседства не только с DR, но и BDR. DR и BDR также устанавливают отношения соседства и между собой. При выходе из строя DR, BDR становится DR и выполняет все его функции. Так как маршрутизаторы сети установили отношения соседства с BDR, то время недоступности сети минимизируется.

Маршрутизатор, выбранный DR или BDR в одной присоединенной к нему сети со множественным доступом, может не быть DR (BDR) в другой присоединенной сети. Роль DR (BDR) является свойством интерфейса, а не свойством всего маршрутизатора

Таймеры протокола

Константы протокола

Некоторым параметрам OSPF присвоены фиксированные значения. Ниже описаны эти параметры, их названия и соответствующие им значения:

  LSRefreshTime —
  MinLSInterval —
  MinLSArrival —
  MaxAge —
  CheckAge —
  MaxAgeDiff —
  LSInfinity —
  DefaultDestination —
  InitialSequenceNumber —
  MaxSequenceNumber — 

{{fixme}}

Каждые 5 минут (CheckAge) выполняется проверка контрольной суммы всех LSA (в Cisco каждые 10 минут).

Зоны OSPF

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

Разделение на зоны позволяет:

Каждой зоне присваивается идентификатор зоны (area ID). Идентификатор может быть указан в десятичном формате или в формате записи IP-адреса. Однако идентификаторы зон не являются IP-адресами, и могут совпадать с любым назначенным IP-адресом.

В OSPF взаимодействия между зонами возможно только через зону 0:
  • в зоне 0 не должно быть разрывов
  • если ненулевая зона должна быть присоединена к другой ненулевой, используется:
    • virtual-link
    • или обычный туннель настроенный вручную (например, GRE)

Коротко типы зон:

Название зоны Замена маршрутов Типы LSA Описание
Backbone (area 0) - Все LSA разрешены Разрешены все типы маршрутов
Normal - Все LSA разрешены Разрешены все типы маршрутов
Stub EX ⇒ IA 0.0.0.0/0
ASBR запрещен
LSA 5 запрещены Все внешние маршруты заменены на межзональный маршрут по умолчанию. ASBR не может находиться в зоне
Totally Stub EX и IA ⇒ IA 0.0.0.0/0 ASBR запрещен LSA 5 запрещены
Все LSA 3 заменены на LSA 3 0.0.0.0/0
Все внешние и межзональные маршруты заменены на межзональный маршрут по умолчанию. ASBR не может находиться в зоне
NSSA EX ⇒ 0.0.0.0
ASBR разрешен
LSA 5 запрещены
LSA 7 передает внешние маршруты только в NSSA
Все внешние маршруты должны быть заменены на межзональный маршрут по умолчанию. В зоне может быть ASBR
Totally NSSA EX и IA ⇒ 0.0.0.0
ASBR разрешен
LSA 5 запрещены
Все LSA 3 заменены на LSA 3 0.0.0.0/0
LSA 7 передает внешние маршруты только в NSSA
Все внешние и межзональные маршруты должны быть заменены на межзональный маршрут по умолчанию. В зоне может быть ASBR

Магистральная зона (backbone area)

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

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

Стандартная зона (standard area)

Обычная зона, которая создается по умолчанию. Эта зона принимает обновления каналов, суммарные маршруты и внешние маршруты.

Тупиковая зона (stub area)

Тупиковая зона:

Totally stubby area

Totally stubby area:

То есть, фактически totally stub зона это «усиление» тупиковой: в ней не только внешние маршруты, но и межзональные заменены на маршрут по умолчанию.

Термин totally stubby введен именно компанией Cisco, однако многое оборудование тоже может переводить тупиковую зону в totally stubby, отключая отправку суммарных маршрутов в обычную тупиковую зону.

В RFC такой термин явно не определен, но ABR могут регулировать отправку суммарных маршрутов в тупиковую зону любым образом, вплоть до отправки в зону только маршрута по умолчанию (totally stubby).

Not-so-stubby area (NSSA)

NSSA зона:

Totally NSSA

Totally NSSA зона:

Типы маршрутизаторов

Объявления о состоянии канала (LSA)

Объявление о состоянии канала (Link State Advertisement, LSA) — единица данных, которая описывает локальное состояние маршрутизатора или сети.

Множество всех LSA, описывающих маршрутизаторы и сети, образуют базу данных состояния каналов (LSDB).

У каждого типа LSA своя функция:

Фактически, сами по себе LSA маршрутизаторы не передают. Они передают LSA внутри других пакетов:

Суммарная информация о LSA

Номер LSA Название LSA Link-State ID Кто отправляет Область распространения
LSA 1 Router LSA Router ID отправителя Все маршрутизаторы Внутри зоны (IntraArea)
LSA 2 Network LSA IP-адрес интерфейса DR DR (в сетях со множественным доступом) Внутри зоны (IntraArea)
LSA 3 Network Summary LSA Сети назначения и маска сети ABR AS (InterArea)
LSA 4 ASBR Summary LSA Router ID ASBR ABR AS (InterArea)
LSA 5 AS External LSA Внешняя сеть и маска ASBR AS (InterArea)
LSA 7 AS External LSA for NSSA Внешняя сеть и маска ASBR в NSSA NSSA

Заголовок LSA

Все LSA начинаются с одинакового заголовка размером 20 байт.

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            LS age             |    Options    |    LS type    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Link State ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Advertising Router                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     LS sequence number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         LS checksum           |             length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Любое LSA уникально идентифицируют 3 поля заголовка:

Так как может существовать несколько копий одного и того же LSA, необходимо определять какая из копий актуальна. Это осуществляется с помощью анализа полей:

Описание полей заголовка LSA:

Type 1 LSA

Type 1 LSA — Router LSA — объявление о состоянии каналов маршрутизатора:

В Router LSA содержится:

LSA Type 1 link types и соответствующие link ID:

Type 2 LSA

Type 2 LSA — Network LSA — объявление о состоянии каналов сети:

В LSA содержится описание всех маршрутизаторов присоединенных к сети, включая DR и маска сети, за которую отвечает DR.

Зачастую возникает вопрос: «Зачем нужен LSA 2? Ведь в LSA 1 можно было бы тоже указать соседей и для сетей с множественным доступом, и, уж тем более, маску сети.»

Необходимость и преимущества LSA 2 понятны, если рассмотреть сеть, в которой в одном широковещательном сегменте будет много маршрутизаторов. Например, в одном широковещательном сегменте, 5 маршрутизаторов.

Тогда, если предположить, что информация передается в LSA 1, каждый из маршрутизаторов, должен бы был перечислить всех своих соседей, и указать в какой он сети. То есть, получаем, 5 * (5 -1) каналов (links) в LSDB.

LSA 2 позволяет существенно сократить количество каналов в LSDB.

В ситуации, когда сама сеть с множественным доступом, но в широковещательном сегменте всего два соседа OSPF (как правило, такое бывает для транзитных линков между сетевыми устройствами), LSA 2 и выбор DR не нужны, и можно перевести интерфейсы в режим point-to point.

Type 3 LSA

Type 3 LSA — Network Summary LSA — суммарное объявление о состоянии каналов сети:

Когда маршрутизатор получает Network Summary LSA от пограничного маршрутизатора он не запускает алгоритм вычисления кратчайшего пути. Маршрутизатор просто добавляет к стоимости маршрута указанного в LSA стоимость пути к пограничному маршрутизатору. Затем маршрут к сети через пограничный маршрутизатор помещается в таблицу маршрутизации.

Type 4 LSA

Type 4 LSA — ASBR Summary LSA — суммарное объявление о состоянии каналов пограничного маршрутизатора автономной системы:

Когда в домен OSPF помещаются сторонние маршруты, информация о них отправляется с помощью LSA 5. Но внутри этих LSA, указывается, что маршрут известен через ASBR. А путь к ASBR известен только тем маршрутизаторам, которые с ним в одной зоне.

Всем маршрутизаторам, которые находятся в другой зоне, необходимо сообщить о том, где находится ASBR. Это делает ABR, который находится в той же зоне, что и ASBR. Он сообщает о местоположении ASBR помощью LSA 4.

Type 5 LSA

Type 5 LSA — AS External LSA — объявления о состоянии внешних каналов автономной системы:

Type 7 LSA

Type 7 LSA — AS External LSA for NSSA — объявления о состоянии внешних каналов автономной системы в NSSA зоне:

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

OSPF использует 5 типов пакетов:

Формат заголовка пакета OSPF

Все пять типов пакетов OSPF инкапсулируются непосредственно в IP-пакет. Номер протокола OSPF в IP-заголовке — 89.

У всех пакетов OSPF одинаковый заголовок.

 
|<-------------------------- 32 бита --------------------------->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version #   |     Type      |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Поля заголовка пакета OSPF:

Поле «Данные» отличается для различных типов пакетов OSPF:

Hello

Hello-пакет используется для таких целей:

Кроме стандартного заголовка пакета OSPF, в hello-пакете содержится такая информация:

|<-------------------------- 32 бита --------------------------->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version #   |       1       |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Network Mask                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         HelloInterval         |    Options    |    Rtr Pri    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     RouterDeadInterval                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Designated Router                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Backup Designated Router                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Neighbor                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |

Database Description

DBD (Database Description) – пакет, который описывает содержание LSDB маршрутизатора. Эти пакеты позволяют маршрутизаторам обменяться информацией о том, что они знают и чего недостает в их LSDB.

Кроме стандартного заголовка пакета OSPF, в DBD-пакете содержится такая информация:

 
|<-------------------------- 32 бита --------------------------->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version #   |       2       |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Interface MTU         |    Options    |0|0|0|0|0|I|M|MS
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     DD sequence number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+-                                                             -+
|                                                               |
+-                      An LSA Header                          -+
|                                                               |
+-                                                             -+
|                                                               |
+-                                                             -+
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |

Запрос информации о состоянии канала. Этот тип пакетов запрашивает отдельные фрагменты базы данных состояния каналов маршрутизатора.

 
|<-------------------------- 32 бита --------------------------->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version #   |       3       |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          LS type                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Link State ID                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Advertising Router                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |
 
|<-------------------------- 32 бита --------------------------->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version #   |       4       |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            # LSAs                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+-                                                            +-+
|                             LSAs                              |
+-                                                            +-+
|                              ...                              |
|<-------------------------- 32 бита --------------------------->|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version #   |       5       |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+-                                                             -+
|                                                               |
+-                         An LSA Header                       -+
|                                                               |
+-                                                             -+
|                                                               |
+-                                                             -+
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |

Выбор лучшего маршрута

Маршрутизатор выбирает лучший маршрут на основании наименьшего значения метрики. Однако OSPF учитывает и несколько других факторов при выборе маршрута.

Выбор лучшего типа маршрута

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

Различные типы маршрутов, в порядке убывания приоритета:

Хотя стоимость маршрута E2 не меняется при передаче его по зонам (не добавляется стоимость пути к ASBR), при совпадении стоимости маршрутов E2 сравнивается стоимость пути к ASBR, который анонсирует маршрут.

Метрика OSPF

OSPF использует метрику, которая называется стоимость (cost). Стоимость сравнивается у маршрутов одного типа.

В RFC 2328 не описывается как именно должна рассчитываться стоимость (cost) интерфейса. Определен только диапазон значений: 1-65535. В мультивендорной среде на это стоит обратить внимание.

Пример (Cisco): <pre> cost = reference bandwidth / link bandwidth </pre> Reference bandwidth — пропускная способность, относительно которой вычисляется стоимость; по умолчанию 100Mb, но может быть изменена.

Суммарная стоимость маршрута считается суммированием стоимости исходящих интерфейсов по пути передачи LSA.

Для обозначения недоступной сети OSPF использует метрику 16777215 (2^24 — 1), которая считается недостижимой метрикой.

ABR Loop Prevention

Внутри зон OSPF использует логику link-state протокола, но между зонами он в некотором смысле работает как дистанционно-векторный протокол.

При анонсировании в зону type 3 LSA передается информация о сети назначения, стоимости пути и ABR, через которого сеть достижима — параметры аналогичны дистанционно-векторным протоколам.

OSPF не использует традиционные механизмы дистанционно-векторных протоколов для предотвращения петель. OSPF применяет ряд правил распространения LSA между зонами, что исключает возможность возникновения петель, но это может привести к тому, что передача данных будет не по лучшему пути.

Внешние маршруты

OSPF использует два типа маршрутов для описания сетей вне автономной системы:

Type 1 external routes — к метрике внешнего маршрута добавляется стоимость пути к ASBR, который анонсирует этот маршрут. Используется, когда несколько маршрутизаторов анонсируют внешнюю сеть. Когда ABR передает type 5 LSA в другую зону, он создает type 4 LSA, которое указывает стоимость пути от этого ABR до ASBR, который создал type 5 LSA.

Маршрутизатор (не ABR), который находится в разных зонах с ASBR, будет вычислять метрику внешнего маршрута E1 суммированием:

Type 2 external routes (по умолчанию) — используется только стоимость внешнего маршрута и при передаче по сети стоимость не увеличивается. При получении type 5 LSA маршрутизаторы добавляют в таблицу маршрут во внешнюю сеть со стоимостью, указанной в type 5 LSA.

Хотя стоимость маршрута E2 не меняется при передаче его по зонам, при совпадении стоимости маршрутов E2 сравнивается стоимость пути к ASBR, который анонсирует маршрут.

Forwarding address в Type 5 LSA

В RFC 2328 (раздел 16.4) указано: если forwarding address не нулевой, нужно посмотреть этот forwarding address в таблице маршрутизации. Соответствующая запись должна быть внутризональной или межзональной; если такого пути нет — LSA игнорируется.

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

Вычисление таблицы маршрутизации

Маршрутизатор, используя LSDB зон, к которым он подключен, строит таблицу маршрутизации по следующей последовательности. LSA с LS age = MaxAge не учитываются.

Процесс:

1. Текущая таблица маршрутизации обнуляется — строится заново. Старая таблица сохраняется для обнаружения изменений.
2. С помощью построения дерева кратчайшего пути для каждой присоединённой зоны вычисляются внутризональные маршруты. Во время вычисления дерева для зоны также вычисляется TransitCapability, используемая позднее. Все записи с Destination Type = area border router вычисляются на этом этапе. Этап состоит из двух частей:
   * Сначала дерево строится с учётом только линков между маршрутизаторами и транзитными сетями.
   * Затем тупиковые сети включаются в дерево.
3. Межзональные маршруты вычисляются просмотром summary LSA. Если маршрутизатор пограничный, просматриваются summary LSA только магистральной зоны.
4. На пограничных маршрутизаторах, присоединённых к одной или более транзитным зонам (не backbone зоны, где TransitCapability = TRUE), проверяются summary LSA транзитных зон на предмет лучших путей, чем найденные на этапах 2–3.
5. Вычисляются маршруты к внешним сетям — просматриваются AS-external-LSA. Местонахождение ASBR было обнаружено на этапах 2–4.

Вычисление дерева кратчайшего пути для зоны

{{fixme}}

(раздел для подробного описания алгоритма SPF — оставить заглушку для последующего наполнения)

Вычисление next hop

{{fixme}}

(раздел для описания логики определения следующего хопа — оставить заглушку для последующего наполнения)

Вычисление внешних маршрутов

{{fixme}}

(раздел для подробного описания вычисления E1/E2 и взаимодействия с type4/type5 — оставить заглушку)

Equal-cost multipath

{{fixme}}

(раздел для описания ECMP в OSPF — оставить заглушку)