OSPF

Материал из Xgu.ru

(Перенаправлено с ospf)
Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

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

Автор: Наташа Самойленко


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

  • Создан IETF в 1988 году (то есть, является стандартным протоколом)
  • OSPFv2 это текущая версия для IPv4 (описана в RFC 2328)
  • IGP-протокол: используется для передачи информации между маршрутизаторами в пределах одной автономной системы (AS)
  • Основан на технологии link-state (SPF)


На этой странице описаны общие принципы работы протокола, без привязки к конкретной реализации.

Содержание

[править] Основы протокола

(продублировано в Википедии: [1])

OSPF инкапсулируется в IP. Номер протокола 89.

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

  • 224.0.0.5 все маршрутизаторы OSPF
  • 224.0.0.6 все DR

OSPF представитель семейства Link-State протоколов.

[править] Терминология протокола OSPF

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

  • Канал/интерфейс (link/interface) — соединение маршрутизатора и одной из подключенных к нему сетей. При обсуждении OSPF термины интерфейс и канал (link) часто употребляются как синонимы
  • Метрика (metric) — условный показатель расстояния до сети назначения
  • Стоимость (cost) — условный показатель "стоимости" пересылки данных по каналу. В OSPF зависит от пропускной способности интерфейса (bandwidth)
  • Автономная система (autonomous system) — группа маршрутизаторов, обменивающаяся маршрутизирующей информацией с помощью одного протокола маршрутизации (определение соответствует тому, как этот термин используется в протоколах IGP)

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

  • Идентификатор маршрутизатора (router ID, RID) — уникальное 32-битовое число, которое уникально идентифицирует маршрутизатор в пределах одной автономной системы
  • Зона (area) — совокупность сетей и маршрутизаторов, имеющих один и тот же идентификатор зоны
  • Объявление о состоянии канала (link-state advertisement, LSA) — единица данных, которая описывает локальное состояние маршрутизатора или сети. Например, для маршрутизатора LSA включает описание состояния каналов и отношений соседства. Множество всех LSA, описывающих маршрутизаторы и сети, образуют базу данных состояния каналов (LSDB).
  • База данных состояния каналов (link state database, LSDB) — список всех записей о состоянии каналов (LSA). Встречается также термин топологическая база данных (topological database), употребляется как синоним базы данных состояния каналов

Соседи OSPF:

  • Соседи (neighbours) — два маршрутизатора, интерфейсы которых находятся в одном широковещательном сегменте (и на которых включен OSPF на этих интерфейсах)
  • Отношения соседства (adjacency) — взаимосвязь между соседними маршрутизаторами, установленная с целью синхронизации информации
  • Hello-протокол (hello protocol) — протокол, использующийся для установки и поддержания соседских отношений
  • База данных соседей (neighbours database) — список всех соседей (также используется термин neighbour table)

Пакеты OSPF:

  • Hello — пакеты, которые используются для обнаружения соседей, установки отношений соседства и мониторинга их доступности (keepalive)
  • DBD — пакеты, которые описывают содержание LSDB
  • LSR — пакеты, с помощью которых запрашивается полная информация об LSA, которых недостает в LSDB локального маршрутизатора
  • LSU — пакеты, которые передают полную информацию, которая содержится в LSA
  • LSAck — пакеты, с помощью которых подтверждается получение других пакетов

[править] Описание работы протокола

Тут приведено краткое описание работы протокола, которое подробнее описано ниже, в соответствующих разделах. Часть из этих этапов, специфичны для конкретной реализации, и указаны на соответствующих страницах настройки 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, до перезагрузки.

[править] Соседи. Установка отношений соседства

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

  1. протокол был включен глобально
  2. выбран Router ID
  3. OSPF включен на интерфейсах

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

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

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

  • Широковещательные сети со множественным доступом (broadcast): Ethernet
  • Точка-точка (point-to-point): Туннели, T1, E1, PPP, HDLC, Frame-Relay P-to-P
  • Нешироковещательные сети со множественным доступом (Non Broadcast Multiple Access, NBMA): Frame-Relay, ATM, X.25

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

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

  • point-to-point
  • broadcast

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

Note-icon.gif

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

[править] Отношения соседства (adjacency)

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

  • Сосед (neighbor) — два маршрутизатора, которые находятся в одном широковещательном сегменте и у которых совпали нужные поля в hello-пакетах
  • Отношения соседства (adjacency или full adjacency) — два соседа, которые завершили процесс синхронизации LSDB между собой.

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

  • необходимо чтобы в hello-пакетах совпали значения таких полей:
    • Hello Interval — частота отправки сообщений Hello
    • Router Dead Interval — период времени, по прохождению которого, сосед считается недоступным, если не было Hello
    • Area ID — так как в OSPF граница зоны проходит через маршрутизатор, то маршрутизаторы в одном широковещательном сегменте, должны быть в одной зоне (подробнее про зоны ниже)
    • Authentication — пароль использующийся для аутентификации и тип аутентификации. Маршрутизаторы не обязательно должны использовать аутентификацию, но если она используется, то пароли и тип должны совпадать
    • Stub area flag — не обязательный флаг, который устанавливается на всех маршрутизаторах, которые принадлежат тупиковой зоне (stub area)
  • у маршрутизаторов должны совпадать сеть и маска сети

Note-icon.gif

OSPF не проверяет сеть и маску сети при установке отношений соседства в point-to-point сетях. Поэтому можно использовать IP unnumbered интерфейсы.

Icon-caution.gif

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

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

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

[править] Возможные состояния

  1. Down — начальное состояние процесса обнаружения соседей. Это состояние указывает на то, что от соседей не была получена свежая информация. В NBMA сетях Hello-пакеты могут отправляться и соседям в состоянии Down, однако с меньшей частотой (PollInterval)
    Attempt — это состояние имеет смысл только для соседей, которые присоединены к NBMA сетям. Оно указывает на то, что от соседа не была получена свежая информация и что нужно сделать попытку связаться с соседом. Это делается путём отправки соседу сообщений Hello с промежутком времени Hello Interval (в Cisco в этом состоянии сообщения Hello отправляются каждый PollInterval. Имеет смысл для соседей в NBMA сетях, которые заданы командой neighbor)
  2. Init — состояние, в котором находится маршрутизатор, отправивший своему соседу hello и ожидающий от него ответного hello
  3. Two-way — при получении ответных hello маршрутизатор должен увидеть в них свой RID в списке соседей. Если это так, то он устанавливает отношения и переходит в состояние two-way
    Когда в широковещательном сегменте более 3х маршрутизаторов, то в этом состоянии остаются между собой маршрутизаторы DROTHER
  4. Exstart — маршрутизаторы определяют Master/Slave отношения на основании Router ID. Маршрутизатор с высшим RID становится Master-маршрутизатором, который определяет DD Sequence number, а также первым начинает обмен DD-пакетами
  5. Exchange — маршрутизаторы посылают друг другу database description пакеты (DD) с информацией о сетях, содержащихся в их собственной LSDB
  6. Loading — Если маршрутизатор видит, что части маршрутов нет в его LSDB, он посылает сообщение LSR с перечислением тех сетей, по которым он хочет получить дополнительную информацию.  Пока маршрутизатор находится в ожидании ответа в виде LSU сообщений, он пребывает в состоянии Loading
  7. Full — Когда маршрутизатор получил всю информацию и LSDB на обоих маршрутизаторах синхронизирована, оба маршрутизатора переходят в состояние fully adjacent (FULL)


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

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

Icon-caution.gif

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


[править] Таймеры протокола

  • HelloInterval — Интервал времени в секундах, по истечении которого маршрутизатор отправляет следующий hello-пакет с интерфейса. Для широковещательных сетей и сетей точка-точка значение по умолчанию, как правило, равно 10 секундам. Для нешироковещательных сетей со множественным доступом значение по умолчанию — 30 секунд.
  • RouterDeadInterval — Интервал времени в секундах, по истечении которого сосед будет считаться "мертвым" (dead). Этот интервал должен быть кратным значению HelloInterval. Как правило, RouterDeadInterval равен 4 интервалам отправки hello-пакетов, то есть 40 секундам.
  • Wait Timer — Интервал времени в секундах, по истечении которого маршрутизатор выберет DR в сети. Его значение равно значению интервала RouterDeadInterval.
  • RxmtInterval — Интервал времени в секундах, по истечении которого маршрутизатор повторно отправит пакет, на который не получил подтверждения о получении (например, Database Description пакет или Link State Request пакеты). Это интервал называется также Retransmit interval. Значение интервала — 5 секунд.

[править] Константы протокола

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

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

Note-icon.gif

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

[править] Зоны OSPF

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

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

  • Снизить нагрузку на ЦПУ маршрутизаторов за счет уменьшения количества перерасчетов по алгоритму SPF
  • Уменьшить размер таблиц маршрутизации (засчет суммирования маршрутов на границах зон)
  • Уменьшить количество пакетов обновлений состояния канала.

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

Icon-caution.gif

В 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)

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

  • Не принимает информацию о внешних маршрутах для автономной системы, но принимает маршруты из других зон.
  • Если маршрутизаторам из тупиковой зоны необходимо передавать информацию за границу автономной системы, то они используют маршрут по умолчанию
  • В тупиковой зоне не может находиться ASBR.
    • Исключение из этого правила — ABR может быть и ASBR.
  • На всех маршрутизаторах зоны должна быть указана "тупиковость"

[править] Totally stubby area

Totally stubby area:

  • Не принимает информацию о внешних маршрутах для автономной системы и маршруты из других зон.
  • Если маршрутизаторам из тупиковой зоны необходимо передавать информацию за границы зоны, то они используют маршрут по умолчанию
  • В totally stub зоне не может находиться ASBR.
    • Исключение из этого правила — ABR может быть и ASBR.
  • На всех маршрутизаторах зоны должна быть указана "тупиковость"
    • замена межзональных маршрутов на маршрут по умолчанию настраивается только на ABR зоны

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

Note-icon.gif

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

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

[править] Not-so-stubby area (NSSA)

NSSA зона:

  • Работает по тем же принципам, что и Stub-зона:
    • Единственное отличие в том, что в NSSA зоне может находиться ASBR.
    • Внешние маршруты других зон также заменены на маршрут по умолчанию
  • Так как до этого в RFC было определено, что в тупиковой зоне не может находится ASBR, и, следовательно, LSA 5, для NSSA зоны был создан специальный тип LSA: LSA type 7.
  • LSA 7 передает внешние маршруты в зоне NSSA и во всем соответствует LSA 5
    • Когда пограничный маршрутизатор зоны NSSA передает LSA 7 в другие зоны, вместо LSA 7 передается стандартный LSA 5.

[править] Totally NSSA

Totally NSSA зона:

  • Работает по тем же принципам, что и NSSA:
    • Единственное отличие в том, что в totally NSSA зоне все маршруты других зон и внешние маршруты для AS, заменяются на маршрут по умолчанию

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

  • Внутренний маршрутизатор (internal router) — маршрутизатор, все интерфейсы которого принадлежат одной зоне. У таких маршрутизаторов только одна база данных состояния каналов.
  • Пограничный маршрутизатор (area border router, ABR) — соединяет одну или больше зон с магистральной зоной и выполняет функции шлюза для межзонального трафика. У пограничного маршрутизатора всегда хотя бы один интерфейс принадлежит магистральной зоне. Для каждой присоединенной зоны маршрутизатор поддерживает отдельную базу данных состояния каналов.
  • Магистральный маршрутизатор (backbone router) — маршрутизатор, у которого всегда хотя бы один интерфейс принадлежит магистральной зоне. Определение похоже на пограничный маршрутизатор, однако магистральный маршрутизатор не всегда является пограничным. Внутренний маршрутизатор интерфейсы которого принадлежат нулевой зоне, также является магистральным.
  • Пограничный маршрутизатор автономной системы (AS boundary router, ASBR) — обменивается информацией с маршрутизаторами, принадлежащими другим автономным системам или не-OSPF маршрутизаторами. Пограничный маршрутизатор автономной системы может находиться в любом месте автономной системы и быть внутренним, пограничным или магистральным маршрутизатором.

[править] Объявления о состоянии канала (LSA)

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

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

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

  • Router LSA и Network LSA описывают каким образом соединены маршрутизаторы и сети внутри зоны.
  • Summary LSA предназначены для сокращения количества передаваемой информации о зонах. Описывают сети других зон для локальной.
  • ASBR Summary LSA описывает для других зон, как дойти до локального ASBR.
  • AS External LSA позволяет передавать по автономной системе информацию, которая получена из внешних источников (например, из другого протокола маршрутизации).

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

  • В Database Description передается описание всех LSA, которые хранятся в LSDB маршрутизатора,
  • В Link State Request передается запрос с описанием тех LSA, которых не хватает в LSDB,
  • В Link State Update передаются полные LSA,
  • В Link State Acknowledgment передается подтверждение о получении конкретных 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 поля заголовка:

  • LS type
  • Link State ID
  • Advertising Router

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

  • LS age
  • LS sequence number
  • LS checksum


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

  • LS age — время (в секундах) с момента генерации LSA
  • Options — дополнительные опции, которые может поддерживать маршрутизатор. Это поле есть в пакетах hello, DBD, LSA. Согласно RFC 2328 могут быть установлены такие 5 битов:
    • E-bit — указывает каким образом распространяются AS-external-LSA
    • MC-bit — указывает соответствует ли IP multicast датаграмма спецификациям RFC 1584;
    • N/P-bit — указывает как обрабатываются Type-7 LSA (RFC 1587);
    • EA-bit — указывает желание маршрутизатора получать и отправлять External-Attributes-LSA;
    • DC-bit — указывает как маршрутизатор работает с demand circuits (RFC 1793);
  • LS type — тип LSA. У каждый типа LSA свой формат, который описан в соответствующем разделе
  • Link State ID — о чем сообщает LSA. Содержание этого поля зависит от типа LSA. Значения поля для разных LSA описаны в соответствующих разделах
  • Advertising Router — Router ID маршуртизатора, который сгенерировал LSA
  • LS sequence number — версия LSA. Используется для обнаружения старых и дублирующихся LSA
  • LS checksum — контрольная сумма, для проверки целостности. Контрольная сумма берется со всего LSA, кроме поля LS age
  • Length — длина всего LSA (включая заголовок) в байтах

[править] Type 1 LSA

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

  • LSA распространяются всеми маршрутизаторами.
  • Распространяются только в пределах одной зоны.

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

  • описание всех каналов маршрутизатора
  • стоимость (cost) каждого канала
  • список соседей на каждом интерфейсе (в зоне маршрутизатора)
  • Link-state ID — Router ID маршрутизатора, который отправляет LSA

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

  • Point-to-point соединение с другим маршрутизатором — Router ID соседа
  • Соединение с тупиковой сетью (сеть, к которой присоединен только один маршрутизатор(локальный)) — сеть/маска
  • Соединение с транзитной сетью (сеть, в которой есть как минимум два непосредственно присоединенных маршрутизатора) — IP-адрес DR
  • Virtual link — Router ID соседа

[править] Type 2 LSA

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

  • Распространяется DR в сетях со множественным доступом
  • Network LSA не создается для сетей в которых не выбирается DR
  • Распространяются только в пределах одной зоны
  • Link-state ID — IP-адрес интерфейса DR

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

Note-icon.gif

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

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

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

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

Note-icon.gif

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

[править] Type 3 LSA

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

  • Объявление распространяется пограничными маршрутизаторами
  • Объявление описывает маршруты к сетям вне локальной зоны
  • Содержит информацию о сетях и о стоимости пути к этим сетям, но не отправляет информацию о топологии сети
  • По умолчанию, пограничный маршрутизатор отправляет отдельное объявление для каждой известной ему сети
    • При необходимости, на ABR сети могут быть просуммированы
  • Link-state ID — номер сети назначения.

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

[править] Type 4 LSA

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

  • Объявление распространяется пограничными маршрутизаторами (ABR)
  • ASBR Summary LSA отличается от Network Summary LSA тем, что распространяется информация не о сети, а о пограничном маршрутизаторе автономной системы
  • Link-state ID — Router ID ASBR, информацию о котором отправляет LSA

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

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

[править] Type 5 LSA

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

  • Объявление распространяется пограничным маршрутизатором автономной системы в пределах всей автономной системы
  • Объявление описывает маршруты внешние для автономной системы OSPF или маршруты по умолчанию внешние для автономной системы OSPF
  • Link-state ID — номер внешней сети.

[править] Type 7 LSA

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

  • Это объявление может передаваться только в NSSA зоне
  • LSA 7 аналогично по содержанию LSA 5, но используется только в NSSA зоне
    • LSA 7 нужно было для того чтобы обойти ограничения, которые были заложены в определение Stub зоны
  • На границе зоны пограничный маршрутизатор преобразует type 7 LSA в type 5 LSA.

[править] Типы пакетов OSPF

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

  • Hello — используется для обнаружения соседе, построения отношений соседства с ними и мониторинга доступности.
  • Database Description (DBD) — проверяет синхронизацию базы данных между маршрутизаторами.
  • Link-State Request (LSR) — запрашивает определенные записи о состоянии каналов от маршрутизатора к маршрутизатору.
  • Link-State Update (LSU) — отправляет определенные записи о состоянии каналов в ответ на запрос.
  • Link-State Acknowledgment (LSAck) — подтверждает получение других типов пакетов.

[править] Формат заголовка пакета OSPF

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

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

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

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

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

  • Версия протокола (Version number) — версия протокола OSPF. Текущая версия для IPv4 — 2.
  • Тип пакета (Type) — указывает какой тип пакета OSPF передается:
    • 1 — Hello
    • 2 — Database Description
    • 3 — Link State Request
    • 4 — Link State Update
    • 5 — Link State Acknowledgment
  • Длина пакета (Packet length) — длина пакета OSPF в байтах. Длина включает в себя и заголовок.
  • Идентификатор маршрутизатора (Router ID) — определяет какой маршрутизатор отправил пакет.
  • Идентификатор зоны (Area ID) — определяет в какой зоне сгенерирован пакет.
  • Контрольная сумма (Checksum) — используется для проверки целостности пакета OSPF, для обнаружения ошибок при передаче.
  • Тип аутентификации (Authentication type) — тип аутентификации, который используется между маршрутизаторами:
    • 0 — аутентификация не используется,
    • 1 — аутентификация открытым текстом,
    • 2 — MD5-аутентификация.
  • Данные аутентификации (Authentication) — используется при аутентификации маршрутизаторов.

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

  • Hello — список известных соседей
  • DBD — содержит суммарную информацию базы данных состояний каналов, которая включает в себя все известные идентификаторы маршрутизаторов и их последние номера последовательностей (sequence number) и другую информацию.
  • LSR — содержит тип необходимого LSU и идентификатор маршрутизатора, у которого есть этот LSU.
  • LSU — содержит полные записи объявления о состоянии канала. Несколько LSA могут передаваться в одном пакете обновлений.
  • LSAck — поле пустое

[править] Hello

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

  • С помощью него каждый маршрутизатор обнаруживает своих соседей;
  • Он передает параметры о которых маршрутизаторы должны договориться прежде чем они станут соседями;
  • Hello-пакеты выполняют роль keepalive-пакетов между соседями;
  • Отвечает за установление двухсторонних коммуникаций между соседними маршрутизаторами (двухсторонняя коммуникация установлена тогда, когда маршрутизатор увидит себя в списке соседей hello-пакета полученного от соседнего маршрутизатора);
  • Он выбирает DR и BDR в широковещательных и нешироковещательных сетях со множественным доступом.

Кроме стандартного заголовка пакета 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                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |
  • Network mask — сетевая маска назначенная на интерфейсе с которого отправляется hello-пакет;
  • HelloInterval — частота отправки hello-пакетов;
  • Options — дополнительные опции, которые может поддерживать маршрутизатор. Это поле есть в пакетах hello, DBD, LSA. Согласно RFC 2328 могут быть установлены такие 5 битов:
    • E-bit — указывает каким образом распространяются AS-external-LSA
    • MC-bit — указывает соответствует ли IP multicast датаграмма спецификациям RFC 1584;
    • N/P-bit — указывает как обрабатываются Type-7 LSA (RFC 1587);
    • EA-bit — указывает желание маршрутизатора получать и отправлять External-Attributes-LSA;
    • DC-bit — указывает как маршрутизатор работает с demand circuits (RFC 1793);
  • Rtr Pri — приоритет маршрутизатора. Используется для выбора DR и BDR. Если приоритет установлен в 0, то маршрутизатор не может стать DR или BDR;
  • RouterDeadInterval — интервал времени по истечению которого сосед будет считаться "мертвым";
  • Designated Router — IP-адрес DR для сети в которую отправлен hello-пакет, с точки зрения отправляющего маршрутизатора. Поле установлено в значение 0.0.0.0, если в сети нет DR;
  • Backup Designated Router — IP-адрес BDR для сети в которую отправлен hello-пакет, с точки зрения отправляющего маршрутизатора. Поле установлено в значение 0.0.0.0, если в сети нет BDR;
  • Neighbor — идентификаторы всех маршрутизаторов от который маршрутизатор-отправитель получал hello-пакеты в течение последнего интервала RouterDeadInterval.

[править] 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                          -+
|                                                               |
+-                                                             -+
|                                                               |
+-                                                             -+
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |
  • Interface MTU — максимальный размер IP-пакета, который можно отправить с соответствующего интерфейса без фрагментации
  • Options — дополнительные опции, которые может поддерживать маршрутизатор. Это поле есть в пакетах hello, DBD, LSA. Согласно RFC 2328 могут быть установлены такие 5 битов:
    • E-bit — указывает каким образом распространяются AS-external-LSA
    • MC-bit — указывает соответствует ли IP multicast датаграмма спецификациям RFC 1584;
    • N/P-bit — указывает как обрабатываются Type-7 LSA (RFC 1587);
    • EA-bit — указывает желание маршрутизатора получать и отправлять External-Attributes-LSA;
    • DC-bit — указывает как маршрутизатор работает с demand circuits (RFC 1793);
  • I-bit — Init bit. Значение бита равное 1, означает, что этот пакет первый в последовательности DBD-пакетов
  • M-bit — More bit. Значение бита равное 1, означает, что далее последуют дополнительные DBD-пакеты
  • MS-bit — Master/Slave bit. Значение бита равное 1, означает, что маршрутизатор получил роль Master, в процессе обмена информацией в LSDB. Иначе, маршрутизатор Slave.
  • DD sequence number — номер последовательности, который используется для нумерации наборов DBD-пакетов.
    • Начальный номер должен быть уникальным (Init bit оповещает о начальном пакете и номер в этом пакете и есть начальный)
    • В процессе обмена DBD-пакетами DD sequence number растет, пока не завершится описание LSDB
  • LSA header — в этом поле передаются заголовки тех LSA, которые находятся в LSDB:
    • Заголовка LSA достаточно, так как информации, которая передается в заголовке, достаточно чтобы уникально идентифицировать LSA

[править] Link State Request

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

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

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version #   |       3       |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          LS type                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Link State ID                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Advertising Router                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |

[править] Link State Update

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

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version #   |       4       |         Packet length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Router ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Area ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |             AuType            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Authentication                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            # LSAs                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+-                                                            +-+
|                             LSAs                              |
+-                                                            +-+
|                              ...                              |

[править] Link State Acknowledgment

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

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

[править] LSDB

[править] Синхронизация LSDB

[править] SPF

[править] Incremental SPF

[править] Partial SPF calculation

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

Метрика для этих сетей высчитывается на основании стоимости, которая анонсируется в Network Summary LSA плюс стоимость пути до ABR, который отправил LSA.

Если в зоне произошли изменения, то маршрутизаторы в других зонах не запускают SPF, а используют новую метрику, которая приходит в Network Summary LSA, добавляют к ней стоимость пути к ABR и помещают маршрут в таблицу маршрутизации — это и называется Partial SPF calculation.

Partial SPF calculation выполняется независимо от того настроено суммирование маршрутов на границе зоны или нет.

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

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

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

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

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

  • Внутренние маршруты зоны (intra-area)
  • Маршруты между зонами (interarea)
  • Внешние маршруты типа 1 (E1)
  • Внешние маршруты типа 2 (E2)

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

Подробное описание выбора лучшего маршрута с учетом специфики Cisco OSPF route selection rules

[править] Метрика OSPF

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

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

Поэтому, в мультивендорной среде, стоит обратить на это внимание.

Например, в Cisco стоимость интерфейса считается по формуле:

cost = reference bandwidth / link bandwidth

Reference bandwidth это пропускная способность, относительно которой высчитывается, по умолчанию стоимость интерфейса. Она равна 100Mb, но может быть изменена.

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

Для того чтобы обозначить недоступную сеть, OSPF использует метрику равную 16777215 (224 —1), которая считается недостижимой метрикой для OSPF.

[править] ABR Loop Prevention

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

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

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

[править] Внешние маршруты

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

  • Type 1 external routes (E1)
  • Type 2 external routes (E2)

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

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

  • метрику внешнего маршрута, которая указана в type 5 LSA,
  • стоимость пути к ASBR, которая анонсируется в type 4 LSA,
  • стоимость пути к ABR, который анонсировал type 4 LSA.

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

Note-icon.gif

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

[править] Forwarding address в Type 5 LSA

В RFC 2328, в разделе 16.4 (Calculating AS external routes), указано:

If the forwarding address is non-zero, look up the forwarding address in the routing table. The matching routing table entry must specify an intra-area or inter-area path; if no such path exists, do nothing with the LSA and consider the next in the list.

Если forwarding address не равен 0.0.0.0, то для него выполняется проверка в таблице маршрутизации. Маршрут к этому адресу должен быть внутризональным или межзональным (не может быть внешним). Иначе изначальный внешний маршрут не учитывается.

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

[2] [3] [4]


[править] Вычисление таблицы маршрутизации

В этом разделе описывается каким образом OSPF заполняет таблицу маршрутизации. Используя базы данных состояния каналов для зон к которым он подключен, маршрутизатор выполняет описанную последовательность действий, строя таблицу маршрутизации шаг за шагом. На каждом этапе маршрутизатор обращается к определенным участкам LSDB. Если в LSDB есть LSA у которых LS age равно MaxAge, то они не учитываются при вычислении таблицы маршрутизации.

Процесс построения таблицы маршрутизации:

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

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

[править] Вычисление next hop

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

[править] Equal-cost multipath

[править] Реализации OSPF

[править] OSPF в Cisco

Основная страница: OSPF в Cisco

[править] OSPF в ProCurve

Основная страница: OSPF в ProCurve

[править] OSPF в Quagga

[править] OSPF в Juniper JUNOS

Основная страница: OSPF_в_Juniper

[править] OSPF для IPv6

[править] OSPFv3

Основная страница: OSPFv3

[править] Дополнительная информация

Источник — «http://xgu.ru/wiki/OSPF»