Протокол OSPF Cisco — Теория (часть 1)

Принцип работы протокола OSPF

В протоколе маршрутизации cisco ospf есть множество сложных функций. Чтобы упростить процесс изучения этого протокола, функции разбиты на три большие категории: обнаружение соседних маршрутизаторов, обмен базами маршрутов и расчет оптимальных маршрутов. Сначала OSPF-маршрутизаторы обнаруживают соседние устройства, с которыми впоследствии они будут обмениваться информацией. После того как смежные устройства обнаружены, происходит обмен базами данных LSDB. Далее, когда у всех маршрутизаторов есть полная информация о топологии сети, используется алгоритм поиска первого кратчайшего пути Дейкстры (Dijkstra Shortest Path FirstSPF) для расчета оптимальных маршрутов ко всем известных подсетям и установки их в таблицу IP-маршрутизации.

Следует отметить, что в операционной системе Cisco IOS команды соответствуют такому разделению функций. В операционной системе есть таблица соседних устройств (show ip ospf neighbor), база LSDB протокола OSPF (show ip ospf database) и таблица IP-маршрутизации (show ip route).

Соседние OSPF-маршрутизаторы

Существует множество определений термина соседний, или смежный, маршрутизатор для протокола OSPF, тем не менее проще всего описать его так: с точки зрения какого-либо маршрутизатора смежный маршрутизатор OSPF — это устройство, подключенное к тому же самому каналу и участвующее в процессе обмена информацией протокола cisco ospf . Следует помнить, что смежное устройство характеризуется прежде всего тем, что участвует в процессе обмена информацией и маршрутизации. Сначала соседний маршрутизатор проверяет базовые настройки протокола OSPF перед тем, как начать обмен маршрутами: настройки должны совпадать, иначе протокол ospf работать не будет. Далее, смежные устройства отслеживают, когда партнер по протоколу работает нормально, а когда связь с ним потеряна. Если связь с соседним устройством потеряна, то следует пересчитать маршруты с учетом такого события и выбрать другие оптимальные маршруты, если это необходимо. Обнаружение и сопровождение соседних устройств обеспечивает с помощью специальных тестовых пакетов, Hello-пакетов, в протоколе OSPF: устройство самостоятельно обнаруживает смежные устройства, их не нужно указывать в конфигурации вручную.

Процесс обмена Hello-пакетами в чем-то напоминает то, что происходит после того, как вы переехали на новое место жительства. Допустим, вы переехали в новую квартиру, вы видите кого-либо из соседей, подходите к нему и здороваетесь. Так вы узнаете, как зовут ваших соседей. Поговорив немного с соседом, вы составляете первое впечатление о нем: интересно ли с ним общаться или же не стоит тратить свое время понапрасну. Аналогичным образом поступает протокол OSPF: сначала он рассылает Hello-сообщения. В таких сообщениях используются идентификаторы маршрутизаторов (Router ID — RID), которые можно сравнить с уникальным именем. Далее, протокол OSPF проверяет некоторую информацию в Hello-сообщениях, чтобы убедиться в том, что устройства могут стать смежными.

Идентификация OSPF-маршрутизаторов с помощью RID

В протоколе OSPF необходимо уникальным образом идентифицировать каждый маршрутизатор. OSPF-маршрутизаторам нужен некоторый идентификатор, чтобы определить, какое именно устройство переслало OSPF-сообщение. Более того, в топологической базе LSDB указан набор анонсов LSA, часть из которых описывает все маршрутизаторы в сети, следовательно, для каждого маршрутизатора нужен некоторый уникальный идентификатор. Такой идентификатор называют идентификатором маршрутизатора (router ID — RID).

В протоколе cisco ospf идентификаторы представляют собой 32-битовые номера, записанные в точечно-десятичном формате, поэтому в качестве идентификатора удобно использовать IP адрес. Протоколом выбирается определенный адрес из всех адресов на интерфейсах устройства, тем не менее идентификатор RID, можно указать вручную.

Обнаружение соседних устройств с помощью Hello-пакетов

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

Рассмотрим пример с двумя маршрутизаторами — А и Б, находящимися в пределах одной локальной сети. Оба маршрутизатора рассылают Hello-сообщения в локальную сеть. Такие сообщения рассылаются через равномерные временные интервалы, определяемые Hello-таймером. После того как устройства получат друг от друга Hello-сообщения, в которых указан их собственный идентификатор, маршрутизаторы обмениваются информацией о топологии сети. После этого устройства используют алгоритм Дейкстры для заполнения таблицы оптимальными маршрутами. Характеристики Hello-сообщений перечислены ниже.

  • Hello-сообщения представляют собой IP-пакеты, в которых указан тип протокола IP.
  • Такие сообщения отправляются по многоадресному IP-адресу 224.0.0.5, который является зарезервированным и описывает все OSPF-маршрутизаторы
  • OSPF-маршрутизаторы прослушивают групповой многоадресный IP-адрес 224.0.0.5 в надежде получить 224.0.0.5 Hello-сообщения и обнаружить смежные устройства.

Маршрутизаторы получают довольно много полезной информации в Hello-пакетах. В них содержится идентификатор маршрутизатора-отправителя (RID), идентификатор зоны OSPF (Area ID), Hello-интервал, интервал обнаружения неработоспособности устройства (dead interval), приоритет маршрутизатора (router priority), идентификатор RID выделенного маршрутизатора (designated router RID), идентификатор RID резервного выделенного маршрутизатора (backup designated router RID) и список соседних устройств, обнаруженных маршрутизатором-отправителем.

Список соседних (т.е. смежных) устройств очень важен для OSPF-маршрутизатора. Рассмотрим ситуацию, когда маршрутизатор A получает Hello-сообщение от маршрутизатора Б. Устройству А нужно как-то уведомить маршрутизатор Б о том, что сообщение было получено. Маршрутизатор А добавляет идентификатор RID маршрутизатора Б в свое следующее (и все последующие) Hello-сообщение, рассылаемое многоадресным методом. аналогично, когда маршрутизатор Б получит Hello-сообщение, он добавит идентификатор RID устройства А в свои последующие Hello-сообщения.

Когда маршрутизатор обнаруживает свой идентификатор RID во входящем Hello-сообщении, он считает, что со смежным устройством был установлен двухсторонний канал (two-way). Установка двустороннего канала означает, что теперь два устройства могут обмениваться более специфической информацией, например анонсами LSA. В сегментах локальной сети с несколькими OSPF-маршрутизаторами устройство может установить двухсторонний канал и «застыть» в таком состоянии. Почему может возникнуть такая ситуация, описано ниже.

Ошибки при обнаружении соседних устройств

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

  • Маска подсети
  • Адрес подсети (рассчитываемый из IP-адреса интерфейса и маски подсети)
  • Интервал рассылки Hello-сообщений
  • Интервал обнаружения неработоспособности соседнего устройства (dead interval)
  • Идентификатор зоны OSPF (area ID)
  • Параметры аутентификации (если используется)
  • Значение флага тупиковой (stub) сети

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

Некоторые из указанных выше параметров протокола cisco ospf нужно объяснить более подробно. Вам нужно их хорошо понимать, чтобы проводить настройку cisco маршрутизаторов. Прежде всего OSPF-устройство проверяет, находится ли оно с соседом в одной и той же подсети, сравнивая IP-адрес подсети соседнего маршрутизатора и маску, указанные в Hello-сообщении, со своими собственными. Если оба устройства принадлежат одной подсети, проверка прошла успешно.

На следующем этапе проверяются два таймера, рассылки Hello-сообщений и обнаружения неработоспособности соседнего устройства (Hello interval и Dead interval), — они должны совпадать. Когда маршрутизатор не получает Hello-сообщений от соседа в течении времени, определяемого интервалом обнаружения неработоспособности, он предполагает, что соседнее устройство отказало, и пересчитывает свои маршруты. Например, для Ethernet-интерфейсов Hello-интервал равен 10 секундам, а dead-интервал в четыре раза больше — 40 секунд. Таким образом, если от соседнего устройства hello-сообщения не приходят 40 секунд, оно помечается как неработоспособное («down«) в таблице соседей. Далее устройство пересчитывает свои маршруты заново с учетом того, что соседнее устройство недоступно.

Состояние соседних устройств

В протоколе cisco ospf есть несколько механизмов, используемых соседними устройствами для обмена информацией. Чтобы отслеживать работу таких механизмов, в протоколе маршрутизации задано несколько стандартных состояний соседних устройств. Другими словами, состояние соседа или этап его работы позволяет определить, какая работа была проделана устройствами. Предположим, что есть два маршрутизатора, R1 и R2, которые подключены к одной и той же подсети. Устройства обнаружили друг друга, и состояние соседнего маршрутизатора в таблице соседей может сообщить нам, что происходит в данный момент между двумя устройствами. (Для определения состояния соседнего устройства используется команда show ip ospf neighbor).

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

Первые два состояния, выключенное (Down) и инициализация (Init), достаточно просты. Если маршрутизатор уже обнаружил соседнее устройство, но отказал ведущий к нему интерфейс, для такого соседнего устройства указывается выключенное состояние (Down). Как только интерфейс переходит в рабочий режим и два маршрутизатора могут рассылать Hello-сообщения, соединение соседнего устройства переходит в состояние инициализации (init). Это состояние сигнализирует о том, что выполняется попытка установления связи со смежным маршрутизатором.

Соединение переходит из состояния инициализации в двусторонний канал (two-way), когда выполнены два требования: в полученном от соседа Hello-сообщении присутствует собственный идентификатор RID маршрутизатора и устройство проверило, что все важные параметры протокола OSPF совпадают. На данном этапе, как уже упоминалось, устройство считывает из Hello-сообщения настройки ospf протокола на соседнем устройстве и сравнивает их со своими. Если все параметры совпадают, а также маршрутизатор обнаруживает собственный идентификатор в списке известных смежному устройству маршрутизаторов, то устанавливается двусторонний канал.

В нашем примере, маршрутизатор R2 принимает первый Hello-пакет, в котором в списке известных соседу устройств никого нет. Следовательно, маршрутизатор R1 еще не обнаружил потенциальные смежные маршрутизаторы. Далее, маршрутизатор R2 пересылает свое Hello-сообщение, в котором указан идентификатор (RID) маршрутизатора R1. Такое сообщение сигнализирует о том, что устройство R2 получило Hello-сообщение от маршрутизатора R1 и все параметры протокола cisco ospf для двух устройств совпали. Маршрутизатор R1 пересылает через стандартный промежуток времени третье Hello-сообщение. После того как устройства установили двусторонний канал, они могу обменяться информацией о топологии сети.



Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>