Какие три инструкции описывают функции таблицы топологии ospf

OSPF расшифровывается как Open Shortest Path First. Если переводить дословно, получится что-то вроде «открытый короткий путь первым». Под названием скрывается протокол внутренней маршрутизации, который передает информацию по лучшему пути. Но, несмотря на название, он не всегда короткий. Чтобы найти лучший путь, протокол отслеживает состояние каналов, а путь рассчитывается по алгоритму Дейкстры. 

OSPF довольно просто настраивается по инструкциям, но вот объяснить порядок его работы довольно сложно. Попробуем это сделать.

Основы протокола OSPF

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

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

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

Аналогично в случае сбоев: со статической маршрутизацией тяжело отслеживать доступность сетей. Если канал между маршрутизаторами прерван, то пакеты, которые M2 получил от M1 (см. схему ниже), никуда не отправятся.

канал прерван

Если сети работают на протоколе OSPF, маршруты перестроятся автоматически.

автоматическая перестройка

OSPF — протокол внутренней маршрутизации. «Внутренней» означает, что маршрутизаторы связаны в замкнутой системе или в одном домене. Понимание принципов работы протокола и алгоритмов облегчат настройку OSPF, поэтому о них подробнее.

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

  • Автономная система — это сети под общим управлением, с едиными политиками маршрутизации для всех устройств.
  • Интерфейс — соединение маршрутизатора и сети. В контексте OSPF термины «интерфейс» и «канал» (link) синонимичны.
  • Area, или зона, — это условная «площадка» в виде комплекса маршрутизаторов, которые обмениваются LSA друг с другом. У маршрутизаторов в этой зоне единый идентификатор.
  • LSA, или Link State Advertisement, — это сообщение (объявление, пакеты) о состоянии канала между маршрутизаторами. В нем содержатся данные о каналах маршрутизатора и их состоянии — например, прерывании, маршруте, интерфейсах.
  • Состояние канала, или Link State, — состояние канала между двумя маршрутизаторами, которое обновляется посредством пакетов LSA.
  • LSU, или Link State Update, — это пакет, в котором передается LSA (один или несколько). 
  • Link-State DataBase — это база сообщений LSA, в ней содержатся все записи о состоянии каналов. Встречается также термин «топологическая база данных» (topological database), это синоним.
  • Router ID — индивидуальный и уникальный номер маршрутизатора для идентификации. Чаще всего это сетевой адрес интерфейса — 32-х битный номер.
  • Маршрутизаторы, у которых интерфейс в одной зоне, называются соседями. Список всех соседей содержится в базе данных соседей.
  • Для определения соседа маршрутизаторы обмениваются hello-сообщениями, или hello-пакетами. В hello-сообщениях содержатся LSA.
  • Состояние смежности, или Adjacency, — взаимосвязь между определенными соседними маршрутизаторами для обмена информацией о маршрутах.
  • Shortest Path First — алгоритм, который рассчитывает лучший маршрут между сетями.
  • Стоимость — это условный показатель «цены» пересылки данных по каналу. В OSPF стоимость зависит от разных факторов — например, пропускной способности канала.
  • Designated Router (DR) — выделенный маршрутизатор. Каждый маршрутизатор устанавливает с ним отношения, потому что DR управляет рассылкой LSA в сети и отправляет информацию остальным об изменениях в сети.
  • Backup Designated Router (BDR) — резервный выделенный маршрутизатор. Маршрутизатор на случай выхода DR из строя. Каждый маршрутизатор в сети также устанавливает с ним отношения.

Алгоритм работы протокола OSPF

Примечание. Здесь мы изначально считаем, что на маршрутизаторе и интерфейсе установлен и включен OSPF.

Как работает динамическая маршрутизация OSPF? Краткое описание:

  • Когда маршрутизатор включают, он выбирает Router ID, либо администратор устанавливает его значение вручную.
  • Протокол ищет другие маршрутизаторы — подключенных соседей, отправляя им через определенные промежутки времени hello-пакеты с информацией о соседях и состоянии каналов. 
  • Если маршрутизатор получает в ответ пакет по интерфейсу, на которых активирован OSPF, то устанавливает с ним «соседские» отношения. Если не получает, маршрутизатор считает устройство «мертвым» — не отправляет ему трафик и перестраивает маршруты.
  • После того как маршрутизаторы подружились, они обмениваются LSA-сообщениями о подключенных и доступных сетях, о соседском роутере и стоимости. Эти данные нужны, чтобы построить карту сети (топологию) — она пригодится для расчетов кратчайшего пути трафика. Карта одинакова на всех маршрутизаторах.
  • Маршрутизаторы синхронизируют общую базу LSDB, где хранят LSA.
  • В сети могут быть сотни или тысячи маршрутизаторов. Отправка сообщений LSA от каждого устройства к каждому обязательно забьет каналы. Чтобы этого не произошло, отправкой сообщений заведует DR: через него отправляется информация об изменениях в сети ко всем маршрутизаторам — например, когда какой-то маршрутизатор упал. Если DR не прописан изначально, то им становится маршрутизатор с самым большим IP-адресом.
  • Дальше запускается алгоритм SPF, который рассчитывает оптимальный маршрут к каждой сети. Процесс похож на построение дерева, где корень — маршрутизатор, а ветви — пути к доступным сетям. В общей таблице маршрутизации будут храниться лучшие пути к каждой сети.

Теперь подробнее о каждом этапе.

Запуск протокола

Для запуска OSPF-протокола нам нужно запустить процесс OSPF на маршрутизаторе подобной командой: 

selectel-gw1(config)# router OSPF 1

Мы сообщаем, что запускаем протокол, указываем, какой именно, уточняем номер процесса (в конце).

Автоматически назначается Router ID. По умолчанию это наибольший IP-адрес устройства. Но можно настроить идентификатор вручную: 

selectel-gw1(config-router)#router-id 172.16.255.1

Следующим шагом объявляем, какие сети будем передавать соседям OSPF. С помощью этой команды сообщаем, с каких интерфейсов будут отправляться hello-пакеты и какие сети хотим анонсировать другим маршрутизаторам:

selectel-gw1(config-router)#network 172.16.0.0 0.0.255.255 area 0

Первый параметр — номер сети, второй — wildcard-маска, последний — номер зоны. 

Готово! Если другие роутеры в сети настроены, то они установят соседские отношения.

Примечания. На соседских маршрутизаторах должны совпадать интервалы hello-пакетов, Dead Interval, интерфейсы и номера зон. 

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

Если есть Router ID, совпадают интерфейсы, запущен OSPF-протокол и указаны сети, которые необходимо анонсировать по OSPF, то маршрутизаторы установят отношения соседства и произойдет обмен маршрутов.

Установка отношений происходит в несколько этапов. Рассмотрим на примере, когда у нас есть четыре маршрутизатора M1, M2, M3 и M4, который считаем новым. При этом M2 выбран как DR, а M3 как BDR.

пример с четырьмя маршрутизаторами
  • Маршрутизатор M4 рассылает hello-сообщения на групповой адрес 224.0.0.5.
рассылка сообщения на групповой адрес
  • Маршрутизаторы M1, M2 и M3 получили сообщения и добавили M4 в список соседей. Его статус они определяют как Init (состояние попытки поиска).
  • Маршрутизаторы M1, M2, M3 отправляют сообщения маршрутизатору M4 с его Router ID и списком соседей. M4 добавляет их в список соседей.
список соседей
  • Устанавливаются симметричные соседские отношения 2-Way (состояние, когда есть обмен сообщениями, но без передачи маршрутов).

симметричные соседские отношения

  • Устройства обмениваются служебными сообщениями с кратким описанием базы данных маршрутов и LSR-сообщениями (Link State Request), запросами о неизвестных сетях. 
  • Устройства обмениваются сообщениями с более подробным описанием маршрутов и синхронизируют LSDB. Статус отношений устанавливается в Full, передаются маршруты.

Отношения соседства устанавливаются со всеми маршрутизаторами, включая DR и BDR.

Распределение ролей

Выше мы писали, что в сети назначаются две важные роли: 

  • Designated Router (DR) — выделенный маршрутизатор,
  • Backup Designated Router (BDR) — резервный выделенный маршрутизатор. 

DB и BDR назначаются администратором вручную или автоматически во время установления отношений соседства. Вручную обычно DR/BDR ставят корневые, а автоматически выбирается маршрутизатор с самым высоким приоритетом интерфейса OSPF или с наибольшим Router ID. BDR выбирается второй маршрутизатор по приоритету. Когда DR выходит из строя, то его заменяет BDR. Далее проводится выбор нового BDR.

Обе роли нужны, чтобы уменьшить количество LSA-сообщений. Работает это так. 

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

установка отношений через DR

После выбора DR соседи обмениваются DBD-сообщениями — они содержат описание LSDB (Link-State DataBase), чтобы синхронизироваться. Для этого за устройствами DR и BDR закрепляется групповой адрес — например, 224.0.0.5, как на схеме выше. 

Зоны OSPF: магистральная, стандартная, NSSA, stub area

OSPF позволяет делить сеть на зоны — логические объединения узлов и сетей. Зона — это набор маршрутизаторов со своей базой, LSA, топологией. Маршрутизаторы другой зоны не знают о топологии других зон. У каждой зоны есть свой идентификатор — area ID. Идентификатор может быть указан в формате IP-адреса, но это не IP-адреса. Идентификация маршрутизаторов зоны проходит с помощью Router ID.

В OSPF есть несколько зон.

Магистральная (Area 0, Backbone-area, зона 0.0.0.0). Она особенная — формирует ядро сети OSPF. Все остальные зоны подключаются к ней. Все пакеты от любой ненулевой зоны в другую ненулевую проходят через магистральную. Магистральный маршрутизатор — Backbone Router, у которого хотя бы один интерфейс принадлежит магистральной зоне. 

Стандартная (обычная, Normal). Это область без определенной цели: создается по умолчанию, принимает обновления каналов, суммарные и внешние маршруты.

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

NSSA (Not-so-stubby area). Это специфичная область, которая может инжектировать внешние маршруты сообщений в систему с помощью специального типа LSA и отправлять их в другие области. Но зона не может получать внешние маршруты из других областей.

Для передачи данных в этой зоне используется маршрутизатор ASBR, Autonomous System Boundary Router. Он применяется не только здесь, а, в целом, для получения маршрутов из внешних систем. Для передачи данных на границах зон используются пограничные маршрутизаторы ABR, или Area Border Router.

Тупикова зона (stub area). Эта зоне не принимает информацию о внешних маршрутах для автономной системы, но принимает маршруты из других зон. В тупиковой зоне не может находиться ASBR.  Для передачи сообщений за границу системы из тупиковой зоны маршрутизаторы используют маршрут по умолчанию. 

Также есть totally stub area — это «усиление» тупиковой зоны (термин внедрен компанией Cisco). В отличие от stub area в ней заменены на маршрут по умолчанию и внешние, и межзональные маршруты. 

Все маршрутизаторы, которые находятся внутри зон (магистральной тоже), называются Internal Router — внутренними. Их интерфейсы принадлежат одной зоне. У таких маршрутизаторов только одна база данных состояния каналов. 

Примечание. Маршрутизаторы могут выполнять несколько функций/ролей одновременно.

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

Мультизона и ее преимущества

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

  • Сегментировать сеть, например, по отделам или департаментам.
  • Снизить нагрузку на ЦПУ маршрутизаторов, потому что уменьшается количества перерасчетов по алгоритму SPF. Например, делим 100 роутеров на три зоны. При падении одного из них маршрут перестраивается не для всех, а лишь для трети роутеров.
  • Снизить размер таблиц маршрутизации, потому что маршруты на границах зон суммируются.
  • Снизить число пакетов LSA.

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

LSA, или Link State Advertisement, — это сообщение с описанием локального состояния маршрутизатора или сети. Вместе они создают базу данных состояния каналов LSDB. Есть 11 типов LSA сообщений (пакетов), у каждого своя функция. 

Рассмотрим каждый LSA type. 

LSA 1 (Router LSA). Каждый маршрутизатор создает этот тип. Он отправляется между маршрутизаторами одной зоны и дальше не идет. Содержит описание интерфейсов, как соединены маршрутизаторы и сети внутри зоны.

Router LSA

LSA 2 (Network). Этот тип рассылается между соседями в одной зоне, а создает его DR для описания маршрутизаторов, которые подключены к нему.

Network LSA

LSA 3 (Summary, Network Summary). Эти сообщения (пакеты) создает ABR, чтобы передать информацию о маршрутах соседей (из первого и второго типов) в другую область, в сокращенном виде. В сообщениях описываются подсети, стоимость маршрута, но не топология зоны. 

LSA 3
Маршрутизатор M2 ABR создает LSA 3 и отправляет в зону Area 0.

LSA 4 (ASBR Summary). Как третий тип, но передает маршрут до локального ASBR соседям из других зон.

LSA 4
Маршрутизатор M2 ABR принимает пакет LSA 1 от M1 и создает пакет LSA 4, который передает маршрут ASBR (из Area 1) и вводит его в Area 0. 

LSA 5 (External) содержат информацию из внешних систем — например, из другого протокола. Сообщения создает ASBR.

LSA 6 (Group Membership LSA) разработаны для протокола Multicast OSPF (MOSPF) , который поддерживает многоадресную маршрутизацию через OSPF. Не поддерживается Cisco. 

LSA 7 (NSSA External) как пятый тип, но создает ASBR, если он находится в зоне NSSA.

Тип LSA 8 используется для передачи атрибутов BGP через сеть OSPF, а специальные типы LSA с 9 до 11 — специальные, используются для расширения возможностей, например, потоковой передачи данных. 

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

LSA сами по себе не передаются. Маршрутизаторы передают LSA внутри других пакетов. Например, LSU или DD (Database Description), где передается описание всех LSA, которые хранятся в LSDB маршрутизатора. Кроме них, в OSPF используется  еще три типа пакетов: Hello, Link-State Request (LSR) и Link-State Acknowledgment (LSAck).

В заголовке любого OSPF-пакета передается такая информация:

  • Version — номер версии протокола OSPF.
  • Type — тип OSPF-пакета, например, Hello.
  • Packet length — длина пакета с заголовком в байтах.
  • Router ID — идентификатор маршрутизатора.
  • Area ID — 32-битный идентификатор зоны, определяет, в какой зоне создан пакет.
  • Checksum — контрольная сумма, для проверки целостности пакета.
  • Authentication type — тип используемой схемы аутентификации. Есть три типа: 0 (нет), 1 (есть аутентификация), 2 (MD5-аутентификация).
  • Authentication — поле данных аутентификации.

Каждый тип пакета передает еще дополнительную информацию, кроме общей.

Hello. Пакеты передаются маршрутизаторами для обнаружения соседей, подтверждения их работы и построения отношения. 

Пакет выглядит примерно так.

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

  • Network mask — сетевая маска интерфейса.
  • HelloInterval — информация о частоте отправки.
  • Options — дополнительные опции, которые поддерживает маршрутизатор, например, MC-bit.
  • Router Priority — приоритет маршрутизатора. Эта информация используется при выборе DR и BDR.
  • RouterDeadInterval — интервал времени, после которого сосед считается «мертвым».
  • Designated Router — IP-адрес DR для сети, в которую отправлен hello-пакет.
  • Backup Designated Router — IP-адрес BDR.
  • Neighbor — идентификаторы соседей-маршрутизаторов.

Database Description (DBD). Проверяет синхронизацию базы данных между маршрутизаторами. В пакете содержатся данные:

  • Interface MTU — максимальный размер в байтах IP-дейтаграммы, которая может быть отправлена через интерфейс без фрагментации.
  • I-бит — устанавливается для первого пакета в последовательности.
  • M-бит — указывает наличие последующих дополнительных пакетов.
  • MS-бит — устанавливается для ведущего.
  • DD sequence number — уникальное значение, устанавливается в начальном пакете; в каждом следующем увеличивается на единицу, пока не будет передана вся база данных.
  • LSA headers — массив заголовков базы данных состояния каналов.

Link-State Request (LSR). Предназначен для запроса части базы данных соседнего маршрутизатора. В пакете содержатся.

  • LS Type — тип сообщения.
  • Link State ID — идентификатор домена маршрутизации.
  • Advertising Router — идентификатор маршрутизатора, который создал объявление о состоянии канала.

Link-State Update (LSU). Предназначен для рассылки записей о состоянии каналов. В нем содержится Number of LSA — количество объявлений в пакете.

Link-State Acknowledgment (LSAck). Сообщение, которое подтверждает получение других типов пакетов.

Синхронизация LSDB

Все LSA всех типов образуют LSDB. У каждого маршрутизатора есть своя копия LSDB и они синхронизируют свою LSDB с DR. 

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

За извещение отвечает Flooding protocol — все маршрутизаторы пересылают сообщения об обновлении состояния связей (LSA). Получение подтверждается сообщениями LSA с типом OSPF, о котором говорили выше. У каждой записи в LSDB есть номер версии. У следующей записи номер больше, чем у предыдущей, чтобы в базу не попадали устаревшие версии.

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

За выбор лучшего маршрута отвечает алгоритм SPF. Например, у нас есть сеть в виде графа, в узлах которой маршрутизаторы, а за ними сети. Как выбрать маршрут передачи данных?

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

Когда топология известна, проводится расчет по алгоритму Дейкстры (SPF) — нидерландского ученого, который разработал его еще в 1959 году. Маршрутизатор выбирает маршрут на основании наименьшего значения стоимости пути.

Стоимость рассчитывается по нескольким метрикам. Метрикой может быть загрузка канала, задержка, надежность связи или полоса пропускания канала. Например, последнюю метрику производители устройств считают каждый по своему: для маршрутизаторов Cisco это время передачи 100 Мбит данных по каналу в секундах.

Также у маршрута есть приоритет (в порядке убывания):

  • Внутренние маршруты зоны.
  • Маршруты между зонами.
  • Внешние маршруты.

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

После расчета маршрутов создается дерево SPF. 

Маршруты добавляются в таблицу маршрутизации. 

Для получения маршрута маршрутизатор обращается к таблице LSDB. При этом таблица постоянно обновляется. Но обновление означает обнуление — маршруты строятся снова, с нуля, даже если изменились параметры всего одного маршрутизатора. Этот процесс сильно нагружает CPU.

От серверов до сетевых услуг и оборудования.

Реализации OSPF в Cisco и Juniper

Запуск и настройка OSPF протокола на оборудовании Cisco практически ничем не отличается от стандартного, описанного выше. Мы также включаем протокол на маршрутизаторах:

ter ospf 1

Задаем Router ID, сеть и зоны:

router ospf 1
 router-id 1.1.1.1
 log-adjacency-changes
 redistribute static
 network 1.1.1.1 0.0.0.0 area 0
 network 172.16.1.0 0.0.0.255 area 0
!

Проверяем, заработала ли маршрутизация:

show ip ospf neighbors

Проверяем таблицу маршрутизации:

show ip route

Реализация OSPF-протокола на устройствах Juniper аналогична, но команды другие. Включаем OSPF, определяем интерфейсы и зоны:

set protocols ospf area 0.0.0.0 interface ge-0/0/0.0
set protocols ospf area 0.0.0.0 interface ge-0/0/1.0

Здесь мы настроили область OSPF 0 (0.0.0.0) на интерфейсах ge-0/0/0.0 и ge-0/0/1.0 для маршрутизатора.

Для примера возьмем второй роутер:

set protocols ospf area 0.0.0.0 interface ge-0/0/0.0
set protocols ospf area 0.0.0.0 interface ge-0/0/2.0

Проверяем соседа:

root@R1> show ospf neighbor

Увидим подобный ответ — значит, сосед активен:

Address   Interface  State      ID Pri Dead
1.1.1.2 ge-0/0/0.0  Full     1.1.1.2 128 39

Проверяем интерфейсы:

root@R1> show ospf interface

Проверим маршруты, таблицу:

root@R1> show route

Готово.

OSPF для IPv6

IPv6 поддерживается протоколом OSPF, но только третьей версии. Версия OSPFv2 поддерживает только IPv4. При переходе на протокол OSPFv3 почти ничего не меняется — вся теория работает и на этой версии.

В целом, настройка выглядит примерно так же:

  • Включаем OSPF.
  • Задаем идентификатор маршрутизатора. В OSPFv3 Router ID. Для IPv6 он настраивается только вручную, если не настроен адрес IPv4.

Как это выглядит в виде команд:

ipv6 router ospf 1
 router-id 1.0.0.0
 exit
 
interface Serial0/0/0
 ipv6 ospf 1 area 0
 exit
 
interface Serial0/0/1
 ipv6 ospf 1 area 0
 exit

Команда для проверки базы LSDB:

show ipv6 ospf database
проверка базы LSDB
Пример базы данных OSPF в IPv6. Источник

Команда проверки соседей:

show ipv6 ospf neighbor
проверка соседей
Пример выдачи соседей

В контексте настроек OSPF для IPv6 остаются те же идентификаторы, те же области и зоны, так же настраиваются IP-адреса. При этом все маршрутизаторы Cisco поставляются с предварительно настроенными адресами IPv6.

Итог

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

  1. Основа OSPF — протокол SPF, вычисляющий лучший (не кратчайший) маршрут.
  2. Для вычислений в протоколе реализована общая база маршрутов LSDB.
  3. База синхронизируется благодаря постоянным LSA сообщениям о состоянии каналов от маршрутизаторов.
  4. OSPF инкапсулируется в IP, без TCP/UDP, их замена — hello-сообщения.
  5. Hello-сообщения помогают реализовать отношения соседства и смежности с другими маршрутизаторами. Это позволяет протоколу проверять состояния канала и автоматически перестраивать маршруты, используя SPF-алгоритм.
  6. Перестройка маршрутов происходит локально, поэтому быстро, но затратно для процессора и оперативной памяти.
  7. Протокол поддерживает иерархические структуры зон, а значит — масштабирование.
  8. Есть несколько версий протокола, чаще используется вторая, а третья поддерживает IPv6.

Все маршрутизаторы OSPF создают и поддерживают в своей базе данных две основные таблицы:

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

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

10.2.1 Таблица соседства

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

Пример 10.1 – Таблица соседства маршрутизатора OSPF

Neighbor ID

Pri

State

Dead Time

Address

Interface

10.95.72.271 2WAY/DROTHER 00:00:37 10.93.72.41 Vlan325

10.95.72.291 2WAY/DROTHER 00:00:32 10.93.72.42 Vlan325

10.95.120.22

1

FULL/BDR

00:00:35

10.93.72.34

Vlan325

10.95.120.23

1

FULL/DR

00:00:38

10.93.72.35

Vlan325

10.95.12.10

1

FULL/-

00:00:18

10.93.18.10

Serial0/0

Ниже описаны поля, содержащиеся в таблице соседства:

Идентификатор соседа (Neighbor ID). Уникальное число идентифицирующее соседний маршрутизатор.

Приоритет маршрутизатора (Pri). Приоритет соседнего маршрутизато-

ра.

Состояние (State). Состояние соседских отношений.

170

Время до разрыва соседских отношений (Dead Time). Временной интервал, по истечении которого будут разорваны соседские отношения, если до его окончания не придет ни одного пакета OSPF от данного соседа.

Адрес соседнего маршрутизатора (Address). Адрес сетевого уровня соседнего маршрутизатора.

Интерфейс (Interface). Локальный интерфейс маршрутизатора за которым находится сосед.

10.2.2 Таблица топологии

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

Пример 10.2 – Таблица топологии маршрутизатора OSPF

OSPF Router with ID (10.95.56.58) (Process ID 2)

Router Link States (Area 0)

Link ID

ADV Router

Age

Seq#

Checksum

Link count

10.95.56.33

10.95.56.33

60

0x8000127F

0x00BE67

2

10.95.56.34

10.95.56.34

1837

0x8000127D

0x00DD37

2

10.95.56.58

10.95.56.58

640

0x80001284

0x00E368

6

10.95.56.59

10.95.56.59

1677

0x8000127C

0x00E956

6

Net Link States

(Area 0)

Link ID

ADV Router

Age

Seq#

Checksum

10.93.254.2

10.95.56.33

1606

0x80000207

0x0082D9

10.93.255.158

10.95.56.33

1606

0x80000207

0x008E14

10.93.254.2

10.95.56.34

1606

0x80000204

0x0080D9

10.93.255.158

10.95.56.34

1606

0x80000204

0x008014

Summary Net Link States (Area 0)

Link ID

ADV Router

Age

Seq#

Checksum

0.0.0.0

10.95.56.33

60

0x80001278

0x00E60B

0.0.0.0

10.95.56.34

1837

0x80001278

0x00E010

Вывод, приведенный в примере 10.2, представляет собой таблицу топологии, созданную в результате обмена топологической информацией по про-

171

токолу OSPF. В примере имеются записи о четырех маршрутизаторах принадлежащих той же зоне, что и маршрутизатор рассматриваемый в примере. Также имеются записи о четырех сетях и о двух суммарных маршрутах на сеть

0.0.0.0.Ниже описаны поля, содержащиеся в таблице топологии:

Идентификатор топологического элемента (Link ID). Уникальное число идентифицирующее топологический элемент.

Маршрутизатор (ADV Router). Маршрутизатор объявивший топологический элемент.

Возраст (Age). Время существования топологического элемента.

Номер последнего LSA (Seq#). Последовательный номер последнего пришедшего LSA, о данном топологическом элементе.

Контрольная сумма (Checksum). Контрольная сумма последнего LSA.

Число интерфейсов (Link count). Количество интерфейсов маршрутизатора, на которых разрешен процесс OSPF.

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

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

Маршрутизатор создающий сообщение LSA объявляет (advertised) его в домен маршрутизации OSPF. Каждое отдельное сообщение LSA может объявить только один единственный маршрутизатор OSPF.

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

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

Достижение надежной рассылки LSA благодаря применению механизма отправки подтверждений о получении LSA;

Рассылка LSA производиться последовательно по всем маршрутизаторам входящим в зону или по всему домену маршрутизации, если не применяется разделение на зоны OSPF;

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

172

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

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

По истечении 30 минут маршрутизатор производит рассылку обновленных LSA сообщений, у которых параметр Seq увеличен на единицу. При получении LSA каждый маршрутизатор OSPF выполняет действия по следующему алгоритму, представленному на рисунке 10.2.

Начало

Есть запись

Нет

в таблице

топологии

Да

Тотже номер

LSA

Нет

Да

Игнорировать

LSA

Номер поступившей

Нет

LSA

меньше

Да

Добавить

LSA

в таблицутопологии .

Послать отправителю

Отправить подтверждение

о получении .

последнюю версию

LSA

Разослать

LSA соседям .

Обновить таблицу

маршрутизации .

Конец

Рисунок 10.2 – Алгоритм обработки поступившего LSA

173

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Время на прочтение
11 мин

Количество просмотров 161K

Данная статья была написана для себя, чтоб при необходимости быстро освежить память и разобраться с теорией. Решил ее опубликовать, возможно кому-то будет полезна, а может в чем то ошибаюсь.

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

OSPF (англ. Open Shortest Path First) — протокол динамической маршрутизации, основанный на технологии отслеживания состояния канала (link-state technology) и использующий для нахождения кратчайшего пути алгоритм Дейкстры.

Возникает сразу вопрос — Что есть технология отслеживания состояния канала? Данное название считаю не совсем удачным. Сложилось так, что существует два типа протоколов динамической маршрутизации: Link-state и Distance-Vector. Рассмотрим их принципы работы:

В Distance-Vector протоколах, маршрутизатор узнает информацию о маршрутах посредством маршрутизаторов непосредственно подключенных в один с ним сегмент сети. То есть, маршрутизатор имеет информацию о топологии только в границах его соседних маршрутизаторов и понятия не имеет как устроена топология за этими маршрутизаторами, ориентируясь только по метрикам. В Link-state протоколах каждый маршрутизатор должен непросто знать самые лучшие маршруты во все удалённые сети, но и иметь в памяти полную карту сети со всеми существующими связями между другими маршрутизаторами в том числе. Это достигается за счет построения специальной базы LSDB, но подробнее об этом позже.

Итак, начнем с того, как же строится LSDB из которой маршрутизатор узнает о всех-всех маршрутах? Построим начальную топологию для изучения. Выглядит она так:

image

Будем настраивать OSPF. С чего начинается OSPF? C установления соседства между маршрутизаторами — после активации OSPF на интерфейсах маршрутизатора, маршрутизаторы начинают рассылать Hello сообщения. Данное сообщение рассылается на мультикастовый адрес — 224.0.0.5 каждые 10 секунд (Hello Timer). Мы включим сначала OSPF на маршрутизаторе vIOS1.

Посмотрим как выглядит Hello-пакет:

image

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

1. Настроен специальной командой router-id A.B.C.D — в формате ip адерса.
2. Настроен один loopback-интерфейс и несколько интерфейсов с различными адресами:

  • Адрес присвоенный loopback-интерфейсу будет Router ID.

3. Настроены несколько loopback-интерфейсов с несколькими IP-адресами в каждом:

  • Наибольший IP-адрес присвоенный любому из loopback-интерфейсов будет Router ID.

4. Настроены несколько интерфейсов с IP-адресом на каждом:

  • Наибольший IP-адрес из всех активных интерфейсов будет Router ID.

Теперь перейдем к полю Area ID — это более важное и фундаментальное понятие в OSPF. Для работы с большим количеством маршрутизаторов, OSPF использует зоны. Каждый из интерфейсов маршрутизатора должен принадлежать какой-либо одной зоне. В нашей топологии интерфейсы Gi0/0 маршрутизаторов vIOS1, vIOS2, vIOS3, vIOS4 принадлежат зоне 0. Area 0 называется Backbone и является центром для всех остальных зон. Каждая другая зона должна быть подключена к Backbone зоне (virtual-link не рассматриваем пока). В дальнейшем разборе станут более ясными данные понятия.

Итак, мы включили OSPF на vIOS1 и он начал каждые 10 секунд отправлять Hello-пакеты. Включим OSPF на vIOS2 и проследим как будут устанавливаться отношения соседства.

image

Итак, внимательно следим за последовательностью сообщений. Сначала Hello отправляет только маршрутизатор 1.1.1.1 ( 192.168.1.1 ), как только мы включим OSPF на 192.168.1.2, то отправится Hello пакет. vIOS1 и vIOS2 получат Hello пакеты друг у друга и для того, чтоб соседство состоялось важно, чтобы в конфигурации OSPF на обоих маршрутизаторах были одинаковыми следующие параметры:

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

Если посмотреть на Hello пакет, показанный выше, все эти параметры указаны в Hello-пакете. Как только один из маршрутизаторов (vIOS1) получит новый Hello-пакет и проверит все условия, он сразу отправит Hello-пакет, где укажет в поле Active Neighbor адрес нового маршрутизатора (vIOS2), vIOS2 получив и увидев себя в поле соседей себя, добавит vIOS1 в соседи и отправит уже юникастовый пакет на 192.168.1.1 (vIOS1), где укажет его соседом. Так сказать, они стали соседями и теперь начинается самое интересное — обмен информацией и построение той самой базы LSDB. Про установление соседства советую прочитать следующую статью.

База LSDB будет содержать в себе информацию о маршрутах и данная LSDB после установления соседства должна быть идентичная на всех маршрутизаторах в пределе одной зоны. И, первым делом, маршрутизаторы после установления соседства начинают процесс синхронизаций своих баз данных друг с другом (vIOS1 c vIOS2). Как можно увидеть все начинается с обменом между собой сообщений DB Description (DBD). Чтоб стало более понятно, расскажем о типах сообщений, который использует OSPF:

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

Также важно ввести такое понятие как LSA:

Объявление о состоянии канала (Link State Advertisement, LSA) — единица данных, которая описывает локальное состояние маршрутизатора или сети. Множество всех LSA, описывающих маршрутизаторы и сети, образуют базу данных состояния каналов (LSDB). LSDB состоит из нескольких видов LSA. Очень подробно о каждом LSA написано в этой статье. В сообщениях DBD используется достаточно много флагов для определения состояния синхронизации, а также данные сообщения содержат информацию о собственной базе данных. То есть, vIOS1 сообщает в данных сообщениях, что в моей базе есть информация о таких сетях, как 192.168.0/24, 1.1.1.0/24 (LSA Type 1), а vIOS2 в свою очередь сообщает, что у него есть записи о сетях: 192.168.2.0/24, 2.2.2.0/24 (LSA Type 1). После получения сообщений DBD, каждый маршрутизатор отправляет LSAck в подтверждение о полученном сообщении, и, далее, сравнивает информацию в базе соседа со своей. Если найдено, что не достает какой-либо информации, то маршрутизатор отправляет LS Request, где запрашивает полную информацию о каком-либо LSA. Например, vIOS1 запросил LS Request у vIOS2, vIOS2 отправляет в ответ LS Update, в которой уже содержится подробная информация о каждом маршруте. Ниже показан LS Update:

image

Как видите, в данном сообщении vIOS2 рассказывает об известных ему подсетях и информацию связанную с ними. Также, vIOS1 рассказывает о своей LSDB. И в конце концов, маршрутизаторы имеют одинаковую LSDB. Как только процесс завершен, запускается алгоритм Дейкстры (Shortest Path First). Он рассчитывает все известные маршруты из LSDB и лучшие из них помещает в таблицу маршрутизации. Лучший, тот у которого метрика ниже, но об этом позже.

Задумаемся о вопросе, что будет, если мы активируем OSPF на vIOS3? Так как vIOS3 придется строить LSDB и синхронизировать её с другими маршрутизатора, то встает вопрос с кем именно синхронизировать? С vIOS1 или vIOS2? С каждым по отдельности? Насколько это оптимально? Поэтому в OSPF есть такое понятие как DR — Designated router. Введем данное понятие:

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

Другими словами, если в сегменте сети появляется новый маршрутизатор, то он будет синхронизировать свою LSDB именно с DR. Также важно заметить, что и не только новые, но и все остальные маршрутизаторы при изменении сети или появлении нового маршрута будут сообщать об этом DR, а остальные будут забирать данную информацию с DR. Но тут же возникают вопросы — Что будет, если DR выйдет из строя? Как выбирается DR?

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

Резервный выделенный маршрутизатор (backup designated router, BDR). Каждый маршрутизатор сети устанавливает отношения соседства не только с DR, но и BDR. DR и BDR также устанавливают отношения соседства и между собой. При выходе из строя DR, BDR становится DR и выполняет все его функции. Так как маршрутизаторы сети установили отношения соседства с BDR, то время недоступности сети минимизируется. Таким образом, у нас в сети получаются не только DR, но и BDR. Остальные маршрутизаторы будут получать и сообщать актуальную информацию о сети только посредством их. DR и BDR выбирается только внутри одного сегмента, а не зоны! То есть, у маршрутизаторов vIOS1, vIOS2, vIOS3, vIOS4 будут выбраны одни DR и BDR, а, например, между vIOS и vIOS1 будут определены свои DR и BDR уже относительно их сегмента сети, даже, если они в одной Area 0. Для общения с DR и BDR, маршрутизаторы используют мулитькастовый адрес — 224.0.0.6.

Следующий вопрос — Как выбирается DR/BDR? Применяются следующие критерии:

  1. DR: Маршрутизатор с самым высоким приоритетом интерфейса OSPF.
  2. BDR: Маршрутизатор со вторым самым высоким приоритетом интерфейса OSPF.
  3. Если приоритеты интерфейсов OSPF равны, самый высокий ID маршрутизатора используется, чтобы осуществить выбор. Как мы говорили, что маршрутизаторы определяют свой Router-ID. В начале, когда OSPF запускался на vIOS1 и vIOS2, помимо установления соседства, также происходили выборы DR/BDR. В данном споре победил vIOS2 c ID — 2.2.2.2, когда vIOS1 имел ID — 1.1.1.1. vIOS1 был выбран в качестве BDR. Важно заметить, что процесс выбора DR и BDR не происходит сразу после получения первых Hello-пакетов от второго маршрутизатора. Для этого существует специальный таймер равный Router Dead Interval — 40 секунд. Если за это время не будет получен Hello-пакет с лучшим ID, то произойдет выбор на основе уже имеющихся Hello-пакетов.

Только теперь мы можем вернуться к вопросу — что будет, если мы активируем OSPF на vIOS3? После активации OSPF, vIOS3 начнет отправлять и слушать Hello-пакеты. Получит Hello-пакеты от vIOS1 и vIOS2, в которых будет указано, какие маршрутизаторы являются DR и BDR и поймет с кем ему синхронизировать LSDB. Важно заметить, что при появлении маршрутизатора с лучшим ID, то DR/BDR не меняются, пока один из них не выйдет из строя. После чего, vIOS3 начинает синхронизировать свою LSDB с данными маршрутизаторами.

image

После получения новой информации от vIOS3, DR рассылает LS Update сообщения всем маршрутизаторам на адрес 224.0.0.5, на что остальные маршрутизаторы, получив пакет отправляют LS Acknowledge для DR, но уже на адрес 224.0.0.6 (адрес для DR/BDR).

По такой же схеме у нас подключается и vIOS4. После синхронизации, у всех маршрутизаторов одна и так же LSDB. Посмотрим как выглядят состояния соседства у vIOS3. Команда show ip ospf neighbor:

image

Как мы можем увидеть, DR — 2.2.2.2, BDR — 1.1.1.1, а с vIOS4 выбрано состояние 2WAY/DROTHER. О состояниях соседства была дана ссылка выше.

А вот состояния соседства на vIOS1 c установленном соседством c vIOS:

image

Как видите у него два DR потому, что у него имеется сосед и в другом сегменте сети.

Мультизоны

Рассмотрим принципы работы OSPF в случае, когда используется несколько зон. Изменим нашу топологию, добавив новые маршрутизаторы:

image

Начнем с того, что сконфигурируем OSPF на vIOS1 и vIOS так, что их интерфейсы Gi0/1 на vIOS и vIOS1 будут находиться в зоне 1. Посмотрим, что изменитcя. vIOS1 теперь имеет интерфейсы и в Area 0 (Gi0/0), и в Area 1 (Gi0/0). Такой маршрутизатор называется ABR — Area Border Router ( чуть ниже дадим более корректное определение ABR). ABR будет рассылать информацию о маршрутах из одной зоны в другую. Делается это посредством LSA Type 3:

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

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

По своей сути, между зонами принцип работы протокола напоминает собой работу Distance-vector протокола, передавая лишь информацию о маршруте с метрикой. Перед вами LS Update от vIOS1 в Area 0, который содержит в себе 3 штуки LSA Type 3:

image

По своей сути, структура LSA Type 3 не сильно отличается от LSA Type 1, но они по-разному влияют на работу протокола. При получения обновленного или при потере какого-либо LSA Type 1&2, запускается заново SPF (алгоритм вычисления кратчайшего пути) и пересчитывает LSDB.

При получении LSA Type 3, данный процесс не происходит — получается маршрут с метрикой в LSA Type 3. В этом LSA хранится данные о том, через какой ABR был получен данный маршрут ( ABR указан в поле Advertising Router) и метрика, чтоб достичь данный ABR уже имеется в LSDB. Таким образом, метрика из LSA Type 3 суммируется с метрикой маршрута до ABR и получаем готовый маршрут без перезапуска SPF. Данный процесс называется Partial SPF calculation. Это довольно важно потому, что в больших сетях размеры LSDB могут быть довольно большими и часто запускать SPF не есть хорошо. Также, создание LSA Type 3 говорит о том, что изменения и пересчет LSDB это дела одной зоны. ABR только сообщает, что с каким-то маршрутом что изменилось.

Также важно заметить, что любой маршрут из ненулевой зоны в любую ненулевую зону проходит через Area 0. Если есть ABR, он не может быть не подключен к Area 0 (исключаем вариант с virtual-link). Area 0 является ядром, которое соединяет все остальные зоны и обеспечивает маршрутизацию между зонами. Определение ABR выглядит так:

Пограничный маршрутизатор (area border router, ABR) — соединяет одну или больше зон с магистральной зоной и выполняет функции шлюза для межзонального трафика. У пограничного маршрутизатора всегда хотя бы один интерфейс принадлежит магистральной зоне. Для каждой присоединенной зоны маршрутизатор поддерживает отдельную базу данных состояния каналов.
Разобрались с установлением соседства, созданием LSDB и SPF, с обычной зоной. А сейчас разберемся с сходимостью и реакцией OSPF на изменения в топологии.

Посмотрим на нашу топологию и представим, что vIOS3 перестал работать (состояние каналов не изменилось). Поможет в перестроении топологии Dead Interval Timer — 40 секунд. Если в течении данного интервала, маршрутизатор не получает Hello-пакета от соседа, то рушится соседство. В нашем случае, DR разошлет LS Update с LSA Type 2, где укажется, что среди подключенных маршрутизаторов нет vIOS3, это приведет к тому, что запустится SPF и пересчитает LSDB уже без LSA полученных от vIOS3. Важно заметить, что на обычном маршрутизаторе типа vIOS4 даже исчерпание Dead Interval Timer и потеря соседства с vIOS3 не приводит к пересчету топологии, именно сообщение LS Update c LSA Type 2 запускает этот процесс.

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

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

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

Включим обратно vIOS3 и установим соседство заново. Следующим экспериментом будет — реакция на отключения интерфейса Gi0/1 на vIOS3. Как только vIOS3 детектирует падения линка, он моментально отправляет LS Update к DR на адрес 224.0.0.6, где сообщается о падении определенных маршрутов при помощи выставления флага в LSA — LS Age равный 3600 секунд. Для LSDB это Max Age и все LSA c Max Age не учитываются при SPF, поэтому их не будет в таблице маршрутизации. Возникает вопрос: А когда Age LSA естественным путем достигает Max Age, что происходит? Для этого в OSPF есть LSRefreshTime — равный половине Max Age, через каждые 1800 секунд отправляется LS Update с маршрутизатора для обновления данных таймеров:

image

Далее, DR обработав данный LS Update, отправляет всем остальным маршрутизаторам LS Update на адрес 224.0.0.5. Как только, маршрутизаторы получили новую информацию — они отправляют LSAck. Тем самым достигается хорошая сходимость в OSPF.

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

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

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

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

cost = reference bandwidth / link bandwidth. Reference bandwidth — базис пропусной способности. По умолчанию, на Cisco равен 100Mbit.

ABR Loop Prevention. Как мы говорили выше, между зонами принцип работы OSPF похож на distance-vector протокол. Используя механизмы предотвращения петель, можем получить, что выбирается неоптимальный путь. Например, между зонами существует правило подобное Split Horizon из distance-vector протоколов. Рассмотрим это на примере, если изменить нашу топологию на границе зоны 0 и 4 так:

image

то мы получим, что vIOS18 будет выбирать неоптимальный путь с метрикой 100 через интерфейс Gi0/0. Происходит это в силу того, что vIOS18 не будет учитывать LSA Type 3, полученные не от зоны 0. Также, выше указанное правило запрещает передавать данный LSA Type 3 обратно в зону 0.

Disclaimer:

произвольная трактовка алгоритма Дейкстры...

...Бесконечного спектакля
Быть свидетелем немым
И узорами пентакля
Очарованным... (ц) Пикник

dijkstra

Протокол OSPF (Open Short Path First) — link-state протокол динамической маршрутизации.

Общий принцип работы протокола заключается в том, что его участники обмениваются между собой состояниями своих линков и сетями, которые находятся за ними. Таким образом каждый участник протокола OSPF имеет в конечном счете информацию о всей топологии сети и уже в соответствии с этой информацией выбирает оптимальные маршруты к известным ему сетям по алгоритму Дейкстры (Short Path First — SPF).

Замечание

Один из маршрутизаторов каждой области обязательно входит в так называемую «Backbone» область. Уточню, что вышесказанное про топологию сети относится только к той области, в которую входит сам маршрутизатор. Информация об областях, не связанных напрямую передаются через корневую-Backbone (AREA 0) область, по сути как префиксы в дистантно-векторном протоколе без привязки к топологии соседней области.

Определения/терминология¶

В протоколе OSPF имеется множество определений и терминов. Принцип работы тесно связан с пониманием терминологии. Без погружения в терминологию практически невозможно понять детали его работы. Итак, разберу их здесь:

  1. LSA (Link State Advertisement) — анонсы, которыми обмениваются соседи. В данных сообщениях передается информация о линках и находящимися за ними сетями. LSA существует множества типов, которые передают информацию как внутри области так и между областями. Их типы опишу отдельным разделом.
  2. LSDB (Link State DB) — Link State DB — База данных, которая формируется на основании информации от LSA

Версии OSPF v2, v3¶

  OSPF v2 - работает только с ipv4
  OSPF v3 - работает как с ipv4, так и с ipv6 - прописывается в разных address family - прям как в BGP! :)

Алгоритм работы¶

Алгоритм работы в общем случае строится на установлении «соседских» отношений между маршрутизаторами OSPF и обмен информацией о линках и маршрутах, находящихся за ними.

Изначально каждый маршрутизатор при инициализации протокола OSPF выбирает себе Router ID (RID). RID можно указать в в ручном режиме или в автоматическом режиме, тогда в качестве RID выбирается значение самого большого ip адреса активного интерфейса. Для упрощения траблшутинга как best-practice в качестве RID указывается вручную ip адрес loopback интерфейса.

Выбор DR/BDR¶

Выборы DR/BDR в броадкаст домене происходит посредством указания приоритета на интерфейсе маршрутизатора «ip ospf priority» (для cisco). Приоритет по умолчанию на интерфейсе равен 1. Нулевое значение приоритета, означает что интерфейс не может быть DR — это состояние называется DRother. Если приоритеты на интерфейсах одинаковые, то в качестве DR выбирается маршрутизатор с большим RID.

Таким же образом выбирается после выбора DR происходит выбор BDR.

Информация о приоритете OSPF на интерфейсе и RID передаются в «Hello» сообщениях.

Опишу алгоритм установления соседства тоже для броадкаст домена.

Для работы протокола OSPF используется протокол ip, где в качестве протокола следующего уровня используется protocol 89.

Cтруктура OSPF¶

Структура сообщения OSPF состоит из:

- OSPF Header - перечислю наиболее значимые:
  - Message Type здесь указывается тип сообщения следующей секции:
      - Hello packet   = 1 
      - DB Description = 2
      - LS Request     = 3
      - LS Update      = 4
      - LS Acknowledge = 5
    - Source OSPF Router - это как раз RID
    - Area ID

- Далее в зависимости от типа идет соответствующий пакет.

Важно

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

Виды сообщений OSPF/Структура сообщений OSPF¶

- Hello - сообщения, которыми обмениваются для установления "соседских" отношений. 

Каждый маршрутизатор изначально передает сообщение Hello на мультикаст ip адрес 224.0.0.5.

Структура протокола OSPF на примере OSPF Hello:

ospf-struct-hello

В нашем случае это OSPF Hello packet

- OSPF Hello packet 
 - Указывается сетевая маска
 - Приоритет
 - DR  - если таковой уже выбран
 - BDR - если таковой уже выбран

В вариант сообщения Hello, когда известны активные соседи (это важно для перехода в состояние TWO-WAY)

ospf-struct-hello-AN

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

пример DBD структура

ospf-struct-dbd-1

пример DBD структура с общей информацией об известных LSA

ospf-struct-dbd-2

Соответственно получив информацию об LSA в DBD пакете участники OSPF запрашивают и получают недостающие у них в LSDB детальные данные об LSA

- Link-State Request (LSR) - После обмена DBD сообщениями, с помощью LSR маршрутизаторы запрашивают 
  у соседа недостающую информацию.

ospf-struct-lsr

пример запроса информации об LSA 1 (RID 1.1.1.1) и LSA 2 (RID 3.3.3.3)

- Link-State Update (LSU) -  В ответ на LSR, который ему прислал сосед, маршрутизатор отправляет LSU, 
  с полным описанием информации, которой не хватает у соседу.

ospf-struct-lsu

пример ответа на запрос информации об LSA 1 (RID 1.1.1.1) и LSA 2 (RID 3.3.3.3)

- Link-State Acknowledgment (LSAck) - После получения LSU от соседа, 
  маршрутизатор отправляет подтверждение, что он получил информацию.

ospf-struct-lsack

пример подтверждения получения информации об LSA 1 (RID 1.1.1.1) и LSA 2 (RID 3.3.3.3)

Для Broadcast сред, таких как например, Ethernet для уменьшения нагрузки на сеть из участников OSPF домена выбираются маршрутизатор с ролью DR (Destignated Router) и BDR (Backup Destignated Router), с которыми каждый маршрутизатор OSPF домена устанавливает «соседство», и которые по сути передают и распространяют всю информацию о OSPF домене всем участникам OSPF домена.

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

Для того, чтобы машрутизаторы стали соседями необходимо, чтобы в сообщениях hello совпали следующие таймеры:

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

Состояния установки соединения OSPF¶

1. DOWN - начальное состояние обнаружения соседей.
2. INIT -  состояние, в котором находится маршрутизатор, 
   отправивший своему соседу сообщение Нello и ожидающий ответного Hello
3. TWO-WAY - при получении ответных Hello маршрутизатор должен увидеть в них свой RID в списке соседей. 
   Если это так, то он устанавливает отношения и переходит в состояние TWO-WAY 
4. EXSTART - определяются DR/BDR и готовятся к обмену DBD
5. EXCHANGE - маршрутизаторы посылают друг другу пакеты DBD с информацией о сетях, 
   содержащихся в их собственной LSDB
6. LOADING - Если маршрутизатор видит, что части маршрутов нет в его LSDB, 
   он посылает сообщение LSR с перечислением тех сетей, по которым он хочет  получить дополнительную информацию.  
   Пока маршрутизатор находится в ожидании ответа в виде LSU сообщений, он пребывает в состоянии Loading.
7. FULL STATE -  Когда маршрутизатор получил всю информацию и LSDB синхронизирована маршрутизаторы 
   переходят в состояние FULLY ADJACENT.

После этого начинается расчет по алгоритму Дейкстры (SPF) и наполнения маршрутной информацией RIB.

типы LSA¶

- LSA 1 - "Router LSA" - Маршрутизатор OSPF использует пакеты LSA Type 1 
  для описания своих собственных интерфейсов, а также передает информацию 
  о своих соседях маршрутизаторам в той же области. 
  Эти LSA распространяются каждым маршрутизатором,
  там содержится описание всех каналов маршрутизатора и стоимость (cost) каждого канала. 
  Распространяются только в внутри области.

ospf-lsa1

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

ospf-lsa2

- LSA 3 - "Network Summary LSA" — генерируются с помощью пограничных маршрутизаторов ABR 
  и содержат суммарное сообщение о непосредственно подключенной к ним области 
  и сообщают информацию в другие зоны, к которым подключен ABR.
  Пакеты LSA Type 3 отправляются в несколько зон по всей сети.

ospf-lsa3

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

  На схеме, когда R2 (ABR) принимает пакет LSA Type 1 от R1, он создаст пакет LSA Type 4 (Summary ASBR LSA),
  который передает маршрут ASBR, полученный из Area 1, и вводит его в Area 0. 
  Хотя пакеты LSA Type 4 используются ABR для объявления маршрута ASBR через их зоны, 
  он не будет использоваться самим ASBR в пределах его локальной зоны (Area 1); 
  ASBR использует LSA Type 1 для информирования своих соседей (в данном случае R2) в своих сетях.

ospf-lsa4

- LSA 5 - "AS External LSA" - генерируются ASBR для передачи внешних перераспределенных маршрутов 
  в автономную систему (AS) OSPF. Типичным примером LSA Type 5 будет внешний префикс 
  или маршрут по умолчанию (default router), как показано на схеме.

ospf-lsa5

- LSA 6 - "Group Membership LSA" были разработаны для протокола Multicast OSPF (MOSPF), 
  который поддерживает многоадресную маршрутизацию через OSPF. 
  MOSPF не поддерживается Cisco и не пользуется широкой популярностью.
- LSA 7 - "AS External LSA for NSSA" — объявления о состоянии внешних каналов автономной системы в NSSA зоне 
 (в NSSA  блокируется распространение LSA Type 5). 
 Это объявление может передаваться только в NSSA зоне. 
 На границе зоны пограничный маршрутизатор преобразует type 7 LSA в type 5 LSA.

ospf-lsa7

На схеме ABR R2 переводит LSA Type 7 в LSA Type 5 и рассылает его в сеть OSPF.

- LSA 8 - в OSPFv2 (IPv4) называются внешними атрибутами LSA и используются 
  для передачи атрибутов BGP через сеть OSPF, в то время как адреса BGP передаются через LSA Type 5 пакеты, 
  однако, эта функция не поддерживается большинством маршрутизаторов. С OSPFv3 (IPv6), 
  LSA Type 8 переопределяется для передачи информации IPv6 через сеть OSPF.
- LSA 9 - Opaque MPLS TE - непрозрачные для OSPF анонсы, т.е. не участвуют в OSPF.
- LSA 10 - Opaque MPLS TE - непрозрачные для OSPF анонсы, т.е. не участвуют в OSPF.
- LSA 11 - Opaque MPLS TE - непрозрачные для OSPF анонсы, т.е. не участвуют в OSPF.

Роли маршрутизаторов в сети OSPF¶

- DR - "Designated Router" - Выделенный маршрутизатор в броадкаст сетях, для информирование об изменений DRD, 
  а также общения со всеми маршрутизаторами области 
- BDR - "Backup Designated Router" - Резервный Выделенный маршрутизатор в броадкаст сетях, 
  для информирование об изменений DRD, а также общения со всеми маршрутизаторами области 
- IR - "Internal Router" - маршрутизатор, который всеми интерфейсами находится внутри одной области OSPF
- ABR - "Area Border Router" - маршрутизатор, у которого интерфейсы находятся в нескольких смежных областях, 
  в т.ч. и смежные с AREA 0
- ASBR - "AS Border Router" - маршрутизаторы, являющиеся шлюзами между протоколом OSPF 
  и любым другим протоколом динамической маршрутизации.
  Как правило таковыми на практике оказываются пограничные маршрутизаторы сети.

Типы областей¶

Типы областей Stub, NSSA, TSA задаются в конфигурации вручную для того, чтобы не принимать/отдавать лишние LSA, т.о. уменьшения/оптимизации информацию в LSDB.

Пример для оборудования cisco Stub area

router ospf 100
    network 192.168.14.0.0 0.0.0.255 area 0
    network 192.168.15.0.0 0.0.0.255 area 2
    area 2 stub

Описание типов областей.

- "Backbone Area (BA)" - основная область OSPF, которая по сути соедитняет между собой все осстальные области.
- "Standart Area" - обычная зона, которая принимает и отправляет обновления, суммарнеые и внешние маршруты.
- "Stub Area" - тупиковая зона - не принимает информацию о внешних маршрутах для автономной системы, 
  но принимает маршруты из других зон. Если маршрутизаторам из тупиковой зоны необходимо передавать информацию 
  за границу автономной системы, то они используют маршрут по умолчанию. 
  В тупиковой зоне не может находиться ASBR.
- "Totally Stub Area (TSA)" - полностью тупиковая зона - не принимает информацию о внешних маршрутах 
  для автономной системы и маршруты из других зон. 
  если маршрутизаторам необходимо передавать информацию за пределы зоны, то они используют маршрут по умолчанию
- "Not So Stub Area (NSSA)" - Работает по тем же принципам, что и Stub Area единственное отличие в том, 
  что в NSSA зоне может находиться ASBR. 
  Внешние маршруты других зон также заменены на маршрут по умолчанию. 
  Также определяется дополнительный тип LSA — LSA type 7. В NSSA зоне может находиться ASBR.

Настройки/Таймеры/Способы фильтрации/Тюнинг¶

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

- "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 в RIB¶

При настройке OSPF для работы с одной зоной, в таблице маршрутизации (команда show ip route) все маршруты обозначались буквой «O». При многозонных конфигурациях возможны следующие типы маршрутов:

- "O" – маршруты, посчитанные на этом маршрутизаторе используя полученные LSA типа 1 и LSA типа 2.
- "O IA" – это маршруты, переданные в зону из другой зоны маршрутизатором, 
   находящимся в роле ABR, но относящиеся тем не менее к OSPF домену.
- "O E1" и "O E2" – внешние по отношению ко всему домену OSPF маршруты. 
   Например, статический маршрут по умолчанию, редистрибутированный на ASBR будет отмечен как "O E2".

Способы фильтрации в OSPF¶

1. Фильтрация между областями OSPF¶

Возможна только на маршрутизаторах границах области, таких как ABR и ASBR, это фильтрация LSA 3 (Network Summary LSA). Фильтрация осуществляется с помощью префикс листов (prefix list)

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

Для настройки фильтрации применяется команда

area area-num filter-list prefix prefix-list-name {in | out}

в интерфейсе конфигурации OSPF. Как видно, здесь применяются списки префиксов или prefix-list, о которых мы говорили в предыдущей статье. Маршрут не анонсируется если попадает под действие deny в списке префиксов.

Камнем преткновения в данной команде являются ключевые слова in и out. Эти параметры определяют направление фильтрации в зависимости от номера области, указанного в команде area are-num filter. А работают они следующим образом:

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

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

Пример фильтрации между областями OSPF:¶

Для примера рассмотрим два маршрутизатора (R1 и R5) из моей лабы:

R1 - это ABR маршрутизатор, находящийся в двух областях бекбон области (Area 0) 
     и смежной с ней областью Area 5
R5 - марпшрутизатор польностью находящийся в Area 5

ospf-laba

До фильтрации имеется наличие LSA type 3 в LSDB

ospf-lsa3-filter-before

Таблица маршрутизации на R5 изначально выглядит следующим образом:

"IA - OSPF inter area" - как раз обозначает маршруты переданные в LSA 3.

ospf-rib-lsa3-filter-before

После применения фильтра (фильтровать все LSA 3) на ABR маршрутизатор R1

R1#

ip prefix-list FILTER-FOR-AREA-5 seq 5 deny 0.0.0.0/0 le 32
!
router ospf 1
 router-id 1.1.1.1
 log-adjacency-changes
 area 5 filter-list prefix FILTER-FOR-AREA-5 in
 redistribute connected subnets
 network 10.1.1.0 0.0.0.255 area 0
 network 10.1.5.0 0.0.0.255 area 5

После фильтрации в LSDB на R5 уже нет LSA type 3

ospf-lsa3-filter-after

Таблица маршрутизации на R5 после фильтрации выглядит следующим образом:

ospf-rib-lsa3-filter-after

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

Подробные примеры приведены тут

2. Фильтрация внутри области OSPF¶

Применяется команда distribute-list.

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

Важное замечание

            При настройки distribute-list в OSPF нужно учесть следующие аспекты:
            Команда distribute-list требует указания параметров in | out, 
            но только при применении in фильтрация будет работать.
            Для фильтрации команда может использовать ACL, prefix-list или route-map.
            Можно также добавить параметр interface interface-type-number, 
            чтобы применить фильтрацию для конкретного интерфейса.

Пример настройки distribute-list на оборудовании cisco¶

R5#
!
ip prefix-list FILTER-11.11.11.11 seq 5 deny 11.11.11.11/32
ip prefix-list FILTER-11.11.11.11 seq 10 permit 0.0.0.0/0 le 32
!
router ospf 1
 router-id 5.5.5.5
 log-adjacency-changes
 redistribute connected subnets
 network 10.1.5.0 0.0.0.255 area 5
 distribute-list prefix FILTER-11.11.11.11 in

До применения фильтра¶

Таблица RIB на R5 до применения фильтра

ospf-dl-rib-filter-before

После применения фильтра¶

Таблица RIB на R5 после применения фильтра

ospf-dl-rib-filter

Таблица RIB OSPF на R5

ospf-dl-rib-ospf-filter

OSPF LSDB

ospf-dl-lsdb-filter

Выводы:

Как видно в LSDB и RIB OSPF информация о префиксе 11.11.11.11/32 присутствуют, 
но за счет применения фильтра в основной RIB информации о сети 11.11.11.11/32 нет.

OSPF Loop prevention¶

https://www.networkworld.com/article/2348778/my-favorite-interview-question.html

Весьма неплохое объяснение общей концепции работы протокола + объяснение каверзного вопроса, который очень любят задавать на собесе: «Как в OSPF протоколе осуществляется защита от петель?»

Ответ на этот вопрос весьма прост, но для его ответа надо понимать фундаментальные моменты работы протокола: Изначально внутри области каждый маршрутизатор знает полностью ее топологию и строит оптимальный граф по алгоритму Дейкстры (SPF), в котором нет по определению петель. Весь вопрос в том, что при принятии маршрутов от соседних областей OSPF работает как дистантно-векторный протокол и тут гипотетически могут возникнуть петли… ! Но вопрос решается именно архитектурным решением самого протокола OSPF: информация об областях не связанных напрямую передается только через «Backbone AREA», таким образом в самой «AREA 0» формируются лучшие маршруты до смежных с ней областей, без петель и именно эта информация и передается через ABR в каждую область, что предотвращает созданию петель в OSPF.

Литература¶

  • 1. XGURU OSPF
  • 2. СДСМ часть.6
  • 3. Википедия OSPF
  • 4. ВАЖНОЕ ПРО OSPF LSA
  • 5. Руководство по проектированию OSPF
  • 6. My Favorite Interview Question
  • 7. Inter-Area Loop Prevention in OSPF Petr Lapukhov 4xCCIE/CCDE
  • 8. CHEAT SHEETS
  • 9. Конфигурирование и проверка работы продвинутых функций протокола OSPF
  • 10. Принципы работы OSPF для нескольких зон
  • 11. ФИЛЬТРАЦИЯ МАРШРУТОВ В OSPF
  • 12. Алгоритм Дейксты

Пример дампа в wireshark можно посмотреть здесь

Пример дампа в wireshark в лабе R1 f0/0 можно посмотреть здесь


Последнее обновление: 2022-06-10

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

Перейти к: навигация, поиск

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

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

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

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

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

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

Содержание

  • 1 Основы протокола
    • 1.1 Терминология протокола OSPF
    • 1.2 Описание работы протокола
  • 2 Выбор Router ID
  • 3 Соседи. Установка отношений соседства
    • 3.1 Типы сетей, поддерживаемые протоколом OSPF
    • 3.2 Отношения соседства (adjacency)
      • 3.2.1 Возможные состояния
    • 3.3 Выделенный маршрутизатор (DR) и резервный выделенный маршрутизатор (BDR)
    • 3.4 Таймеры протокола
      • 3.4.1 Константы протокола
  • 4 Зоны OSPF
    • 4.1 Магистральная зона (backbone area)
    • 4.2 Стандартная зона (standard area)
    • 4.3 Тупиковая зона (stub area)
    • 4.4 Totally stubby area
    • 4.5 Not-so-stubby area (NSSA)
    • 4.6 Totally NSSA
    • 4.7 Типы маршрутизаторов
  • 5 Объявления о состоянии канала (LSA)
    • 5.1 Суммарная информация о LSA
    • 5.2 Заголовок LSA
    • 5.3 Type 1 LSA
    • 5.4 Type 2 LSA
    • 5.5 Type 3 LSA
    • 5.6 Type 4 LSA
    • 5.7 Type 5 LSA
    • 5.8 Type 7 LSA
  • 6 Типы пакетов OSPF
    • 6.1 Формат заголовка пакета OSPF
    • 6.2 Hello
    • 6.3 Database Description
    • 6.4 Link State Request
    • 6.5 Link State Update
    • 6.6 Link State Acknowledgment
  • 7 LSDB
    • 7.1 Синхронизация LSDB
  • 8 SPF
    • 8.1 Incremental SPF
    • 8.2 Partial SPF calculation
  • 9 Выбор лучшего маршрута
    • 9.1 Выбор лучшего типа маршрута
    • 9.2 Метрика OSPF
    • 9.3 ABR Loop Prevention
    • 9.4 Внешние маршруты
      • 9.4.1 Forwarding address в Type 5 LSA
    • 9.5 Вычисление таблицы маршрутизации
      • 9.5.1 Вычисление дерева кратчайшего пути для зоны
      • 9.5.2 Вычисление next hop
      • 9.5.3 Вычисление внешних маршрутов
      • 9.5.4 Equal-cost multipath
  • 10 Реализации OSPF
    • 10.1 OSPF в Cisco
    • 10.2 OSPF в ProCurve
    • 10.3 OSPF в Quagga
    • 10.4 OSPF в Juniper JUNOS
  • 11 OSPF для IPv6
    • 11.1 OSPFv3
  • 12 Дополнительная информация

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

(продублировано в Википедии: [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

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

  • Интересная анимация SPF

Понравилась статья? Поделить с друзьями:
  • Какие требования предъявляются к разработке инструкции о мерах пожарной безопасности
  • Какие требования предъявляются к инструкциям по охране труда
  • Какие требования должны содержать инструкции по охране труда разрабатываемые работодателем
  • Какие требования должна определять общая инструкция о мерах пожарной безопасности
  • Какие типы значения может вернуть функция инструкцией return php