Понимание терминологии и принципов работы протокола OSPF
Здесь описываются основные характеристики протокола маршрутизации OSPF, включая описание link-state протоколов маршрутизации, зонной структуры, соседства в link-state протоколах, вычисление метрики и структуры данных.
Содержание
Link-state протоколы маршрутизации
Необходимость преодолеть ограничения дистанционно-векторных протоколов привела к разработке протоколов маршрутизации link-state (состояния канала).
Link-state протоколы имеют следующие характеристики:
- Быстрая реакция на изменения в сети.
- Рассылка обновлений после изменения топологии.
- Периодическая рассылка обновлений (link-state refresh) через длительный интервал времени (30 мин. по умолчанию).
Link-state протоколы генерируют обновления маршрутизации только после изменений в топологии сети. Когда канал меняет состояние, устройство, которое обнаружило измнение, создаёт LSA-анонс (link-state advertisement - объявление состояния канала), относящийся к этому каналу (рис. 1). Обмен LSA между соседними маршрутизаторами информирует их о состоянии маршрутизаторов и соединений в сети. Каждый маршрутизатор хранит LSA, пересылает его соседям (в пределах зоны) и обновляет свою таблицу состояний каналов (link-state database - LSDB). LSA передаются всем соседним маршрутизаторам используя multicast-адрес 224.0.0.5. Когда маршрутизатор принимает LSA, он обновляет LSDB. LSDB используется для расчета лучшего маршрута по алгоритму Dijkstra, также известного как SPF (Shortest Path First), формируя SPF-дерево. Лучший маршрут, выбранный из SPF-дерева помещается в таблицу маршрутизации.
В одной зоне все маршрутизаторы содержат идентичные таблицы LSDB. Принцип LSDB похож на карту в торговом центре. На одном этаже все карты одинаковые, но отличаются только указателем "вы находитесь здесь".
OSPF и IS-IS относятся к link-state протоколам.
Маршрутизаторы с запущенным link-state протоколом собирают ото всех соседей в сети (или в зоне) маршрутную информацию и затем, независимо друг от друга, вычисляют наилучшие маршруты ко всем получателям использую алгоритм Дейкстры. Неверная инфомрация от какого-либо маршрутизатора имеет меньше шансов вызвать путаницу, т.к. у каждого маршрутизатора свой собственный взгляд на сеть.
Высокие требования к ресурсам памяти для поддержки таблиц соседей, топологии и маршрутизации являются единственным недостатком link-state протоколов.
Каждый OSPF-маршрутизатор должен иметь следующую информацию для принятия решения по выбору маршрута:
- Информация о соседних маршрутизаторах. Если маршрутизатор потеряет контакт с соседом, в течении нескольких секунд он сбросит все маршруты, проходящие через этого соседа и произведет их пересчет. Информация о соседях хранится в таблице соседей (neighbor table), также называемой базой данных смежности (adjacency database).
- Информация о всех маршрутизаторах области. Маршрутизатор распознает другие маршрутизаторы в области через LSA, которые распространяются в сети. LSA сохраняются в таблице топологии (LSDB).
- Информация о лучшем маршруте к сети назначения. Каждый маршрутизатор независимо рассчитывает лучший маршрут, используя алгоритм SPF. Все возможные маршруты хранятся в таблице LSDB. Лучший маршрут затем включается в таблицу маршрутизации, иногда называемую базой данных пересылки (forwarding database).
Внимание! OSPF neighbor table = adjacency database OSPF topology table = OSPF topology database = LSDB Routing table = Forwarding database
В отличии от маршрутизаторов, использующих дистанционно-векторные протоколы маршрутизации и полагающихся на решения соседей, link-state маршрутизаторы могут независимо друг от друга принимать решение, основанное на видении всей картины сети.
OSPF Area Structure
В малых сетях, структура соединений не является сложной, и маршруты к сетям назначений легко просчитываются. Однако, в больших сетях итоговая структура является весьма сложной, а количество альтернативных маршрутов - огромным. Поэтому операции SPF по анализу возможных маршрутов могут занимать значительное время и перегружать ресурсы CPU и ОЗУ.
Если зона становится слишком большой, то возникнут следующие проблемы:
- Частый запуск алгоритма перерасчёта SPF - в больших сетях изменения неизбежны, поэтому маршрутизаторы тратят множество своих ресурсов на перерасчёт и обновление таблиц маршрутизации.
- Большие таблицы маршрутизации - по умолчанию OSPF не суммирует маршруты вручную. Поэтому таблицы маршрутизации могут стать очень большими.
- Большие базы LSDB - так как LSDB содержит топологию всей сети, каждый маршрутизатор должен иметь запись для каждой сети в зоне (area), даже если не каждый маршрут будет представлен в таблице маршрутизации.
В целях уменьшения количества операций SPF протоколы link-state позволяют разбивать сеть на субдомены, называемые областями (area).
Область - это логическая совокупность OSPF-сетей, маршрутизаторов и соединений, которые имеют одинаковый идентификатор области. Маршрутизатор ведет базу данных топологии для своей области и не владеет детальной информацией о топологии вне области, что уменьшает размер LSDB. Число маршрутизаторов в области и число LSA небольшое, поэтому и сами базы LSDB имеют небольшой размер => вычисления по алгоритму Дейкстры занимают меньше времени и требуют меньше ресурсов.
Области ограничивают масштаб распространения информации о маршрутах и уменьшают количество объявляемых маршрутов. LSDB маршрутизаторы области могут синхронизироваться почти одновременно. Между областями возможно применение суммирования и фильтрации маршрутов.
При правильной адресации и конфигурации OSPF, использование множества областей имеет несколько существенных преимуществ:
- Сокращается частота пересчёта по SPF - потому что детальная инфа о маршрутах существует только в пределах какой-либо зоны. Нет необходимости распространять все изменения во все другие зоны. Таким образом, только маршрутизаторы, на которые влияют изменения, должны запускать SPF. Влияние изменений ограничено в пределах зоны.
- Небольшие таблицы маршрутизации - маршруты к специфическим сетям зоны остаются в зоне. Вместо их анонсирования за пределы зоны маршрутизаторы могут быть настроены для анонсирования суммированного маршрута, что сократит число LSA между зонами, а доступность сетей при этом не пострадает.
- Сокращение накладных расходов на LSU - LSU содержат различные типы LSA, включая информацию о состоянии каналов и суммировании. Вместо того чтобы отправить LSU с информацией о каждой сети в зоне, маршрутизатор может анонсировать один суммированный маршрут или небольшое число маршрутов между зонами, тем самым сократив накладные расходы связанные с LSU, при их переходы между зонами.
Протоколы link-state используют двухуровневую иерархию областей:
- Транзитная область (Backbone area). Промежуточный тип OSPF-области внутри одного домена, главной функцией которого является быстра и эффективная пересылка пакетов. В транзитной области нет конечных пользователей. Она связана с другими типами зон. Область 0 является транзитной областью или ядром.
- Обычная область (Regular area). Соединяет пользователей и ресурсы. Обычные области, как правило, устанавливаются по функциональному или географическому принципу. По умолчанию, обычная область не передает трафик от одной области к другой. Такой трафик должен передаваться через транзитную область. Обычная (немагистральная) область имеет ряд разновидностей: standard area, stub-area, totally stubby area (или totally NSSA, или totally stub NSSA, not-so-stubby area (NSSA).
Внимание! В некоторых доках Cisco вы можете встретить определение backbone как транзитной сети. Однако, в OSPF RFC транзитная зона относится к виртуальным каналам.
OSPF усиливает эту жесткую двухуровневую иерархию. Структура физических соединение должна быть отображена на двухуровневую иерархию областей, где все немагистральные области должны подключаться непосредственно к области 0.
Области OSPF
В link-state протоколах маршрутизации, все маршрутизаторы должны иметь копии LSDB. Чем больше маршрутизаторов (и больше каналов между ними), тем больше база LSDB. С одной стороны знание обо всех маршрутах можно отнести к преимуществу, но такой подход не применим к масштабированию в больших сетях. Подход с использованием зон - это компромис. Маршрутизаторы внутри зоны содержат детальную информацию обо всех каналах и маршрутизаторах этой зоны. OSPF можно настроить так, чтобы только общая или суммированная информация о маршрутизаторах и каналах других областей была в БД на маршрутизаторах этой области.
Если OSPF настроен правильно и отказывает канал и маршрутизатор, информация распространяется соседям в пределах этой зоны. Маршрутизаторы за зоной не получают эту информацию. Придерживаясь иерархической структуры и ограничивая число маршрутизаторов в зоне, можно масштабировать OSPF AS до очень больших размеров.
Как уже было сказано, OSPF требует иерархической структуры, т.е. требуя чтобы все зоны подключались напрямую к нулевой зоне. На рисунке справа показаны типы маршрутизаторов OSPF.
Рекомендации позволяющие не перегружать маршрутизаторы расчётами OSPF:
- Зона должна содержать не более 50 маршрутизаторов.
- Маршрутизатор должен быть не более чем в 3 зонах.
Конечно, не последюю роль играет стабильность каналов и дизайн сети.
Терминология зон
OSPF-маршрутизаторы классифицируются по функциям, которые они выполняют:
- Внутренние маршрутизаторы (internal routers). Маршрутизаторы, интерфейсы которых находятся в одной области, имеющие идентичные LSDB.
- Магистральные маршрутизаторы (backbone routers). Маршрутизаторы расположенные внутри периметра магистральной области, как минимум один интерфейс которых соединен с областью 0. Магистральные маршрутизаторы поддерживают информацию о маршутах, используя такие же процедуры как и внутренние маршрутизаторы.
- Пограничные маршрутизаторы области (area borders routers - ABR). Маршрутизаторы, интерфейсы которых подключены к нескольких областям. Ведут различные LSDB для каждой области, к которой они подключены, и маршрутизируют трафик из или в эти области. ABR - это точки выхода для области. Трафик, направленный в другую область, обязательно проходит через ABR. ABR могут (и только они) быть настроены на суммирование маршрутов своих областей. ABR передают информацию о маршрутах в магистральную область. Магистральные маршрутизаторы передают эту информацию другим ABR. ABR разделяют LSA flooding зоны и могут функционировать как источник default маршрутов. Зона может иметь один или несколько ABR.
- Пограничные маршрутизаторы автономной системы (autonomous system boundary routers - ASBR). Маршрутизаторы, как минимум один интерфейс которых подключен к внешней сети (другой автономной системе), например к неOSPF-сети. ASBR могут импортировать информацию о маршрутах из внешней сети в свою сеть, и наоборот. Этот процесс называется перерараспределением (redistribution). Пограничный маршрутизатор автономной системы может находиться в любом месте автономной системы и быть внутренним, пограничным или магистральным маршрутизатором.
Маршрутизатор может принадлежать к нескольким типам. Маршрутизатор для каждой зоны, к которой он подключён, имеет отдельную базу LSDB. Получается, что LSDB имеет одну базу для зоны 0 и ещё одну для другой зоны, в которую он включён.
LSDB синхронизируются между парой соседних маршрутизаторов.
Соседство в OSPF
В первую очередь OSPF-маршрутизатор должен установить смежность с соседями. Маршрутизатор достигает смежности путем обмена hello-пакетами:
- Маршрутизатор посылает и принимает hello-пакеты соседним маршрутизаторам. Multicast-адрес назначения hello-пакетов 224.0.0.5.
- Hello-пакеты содержат параметры смежности, которые маршрутизаторы принимают во внимание прежде, чем стать соседями. Параметры включают ID маршрутизатора и ID области (area ID), таймеры hello, которые должны совпадать, установки аутентификации, приоритет маршрутизатора, информацию о назначенном маршрутизаторе (DR - designated router) и резервном назначенном маршрутизатор (BDR - backup designated router).
- Маршрутизатор объявляет смежность с соседом, когда закончен обмен.
- После того, как два маршрутизатора установили смежность, они синхронизируют LSDB, обмениваясь LSA и подтверждая получение LSA от соседа. Соседи распознают, что они имеют синхронизированную LSDB. В этом случае маршрутизаторы переходят в состояние полной (full) смежности.
- Если необходимо, маршрутизаторы пересылают любые новые LSA другим соседям, гарантируя полную синхронизацию link-state информации внутри области.
Формирование смежности OSPF зависит и от типа сети. Например, два OSPF-маршрутизатора, соединенных последовательной линией, формируют смежность друг с другом, когда они соглашаются с назначенными параметрами. В широковещательной сети множественного доступа (например Ethernet) необходимы выборы маршрутизаторов в DR и BDR. OSPF-маршрутизаторы в сегменте LAN выбирают один маршрутизатор как DR и один как BDR. Остальные маршрутизаторы в данном сегменте LAN формируют полные смежности с DR и BDR и отбрасывают LSA от иных источников (т.е. пересылают LSA только DR и BDR). DR пересылает обновления от одного соседа другим в той же LAN. Одна из основных функций DR это гарантировать чтобы все маршрутизаторы в одной LAN имели одинаковые LSDB. Таким образом в широковещательных сетях LSDB сихронизируется между DROTHER (маршрутизатором, который не является DR или BDR) и его DR и BDR.
DR пересылает свою базу LSDB любому новому маршрутизатору, подключившемуся к этой LAN. Логически неэффективно, чтобы все маршрутизаторы в LAN отсылали идентичные БД новичку, поэтому один DR олицетворяет (represent) все другие маршрутизаторы для новичка.
Маршрутизаторы в LAN также поддерживают частичные соседские отношения ('partial-neighbor relationship), называемые two-way adjacency state, с другими маршрутизаторами, не являющимися DR или BDR (т.е. DROTHER).
Важно понимать, что принцип DR построен на канальном уровне. В широковещательной среде с множественным доступом, каждый сетевой сегмент будет иметь собственный DR и BDR. Маршрутизатор, подключённый к двум сетям, например, в одной может быть DR, а в другой DROTHER.
LSA также называют link state protocol data units (PSUs).
LSA сообщают состояние маршрутизаторов и канала между маршрутизаторами - отсюда и термин link state. Таким образом link-state информация должна быть синхронизированна между маршрутизаторами. Для выполнения этого LSA имеют следующие характеристики:
- LSA надёжны. Доставка покатов подтвержается.
- LSA рассылаются по всей зоне (или по всему домену, если зона всего одна)
- LSA имеет seq number и set lifetime. Таким образом каждый маршрутизатор может определить имеет ли он последнюю версию LSA.
- LSA периодически обновляются, чтобы подтвердить топологическую информацию прежде, чем она устареет в бд LSDB.
Только reliably рассылка link-state информации может гарантировать, что любой маршрутизатор в зоне или домене имеет точную топологическую картину. Только так маршрутизаторы смогут принять верное решение, согласующееся с решениями других маршрутизаторов сети.
Вычисление метрики в OSPF
Link-state протоколы используют алгоритм Dijkstra для поиска наилучшего пути к сети назначения. Каждому соединению присваивается стоимость (cost). Маршрутизатор назначает себя корнем SPF-дерева. Ветви дерева используются для выбора наилучшего пути к сети назначения.
По умолчанию стоимость соединения в OSPF рассчитывается по полосе пропускания - чем больше п/п, тем меньше cost. Стоимость соединения можно также задать и вручную, использую команду ip ospf cost, которая переопределяет значение по умолчанию.
По умолчанию формула расчёта стоимости в Cisco:
(100)/(п/п мбит/сек)
или
(10^8)/(bps)
OSPF RFC 2328 не определяет, что должно быть cost. В роутерах Cisco используется обратно пропорциональное п/п значение.
Если п/п канала изменить, то и стоимость OSPF тоже изменится. Только одно значение стоимости может быть присвоено интерфейсу. Это значение анонсируется в анонсах канала (link adv) как link cost. Стандартные значения OSPF cost:
- 56-кбит последовательный канал - 1785
- 64-кбит последовательный канал - 1562
- T1 (1,544 мбит) - 64
- E1 (2048) - 48
- Ethernet - 10
- Fast Ethernet - 1
- FDDI - 1
- ATM - 1
Для каждого интерфейса можно задать вручную значение стоимости.
На рисунке 4 показан пример вычисления.
- Маршрутизатор H объявляет о своем присутствии маршрутизатору E. Тот в свою очередь объявляет H и себя своим соседям (C и G). С и G поступают аналогично, и так далее.
- Распространение LSA следует правилу расщепления горизонта (split horizon), которое гласит, что маршрутизатор никогда не пересылает LSA соседу, от которого этот LSA был получен. В нашем примере E не посылает LSA о H обратно маршрутизатору H.
- X имеет четырех соседей: A, B, C, D. От них он получает LSA об остальных маршрутизаторах сети. На основании полученных LSA X делает выводы о структуре соединений между маршрутизаторами.
- Каждому Ethernet соединению назначена стоимость 10. Суммируя стоимости соединений для каждой сети назначения, маршрутизатор выбирает наилучшие маршруты.
- Правая часть рисунка демонстрирует итоговые наилучшие маршруты, которые X занесет в свою таблицу маршрутизации.
Структуры данных
Каждый LSA имеет собственное время жизни (aging timer, по умолчанию 30 минут), указанное в секундах в поле Link-State Age. После устаревания LSA, маршрутизатор, создавший его, посылает новый LSA с более высоким последовательным номером внутри LSU-пакета (link-state update) для того, чтобы проверить, что канал всё ещё активен. Если LSA достиг maxage = 60 min, он будет отброшен. LSU-пакет может содержать один или более LSA. Такой метод проверки LSA более экономично использует полосу пропускания по сравнению с дистанционно-векторными протоколами, в которых обновления посылаются намного чаще.
При получении LSU маршрутизатор действует следующим образом:
- Если LSA еще не существует, маршрутизатор добавляет его в свою LSDB, посылает подтверждение LSAck (link-state acknowledgment) обратно, распространяет информацию другим маршрутизаторам, запускает SFP и обновляет свою таблицу маршрутизации.
- Если LSA уже существует, и принимаемый LSA имеет такой же последовательный номер, то маршрутизатор игнорирует такой LSA.
- Если LSA уже существует, и принимаемый LSA имеет больший последовательный номер, то маршрутизатор добавляет информацию LSA в свою LSDB, послывает обратно LSAck, распространяет информацию другим маршрутизаторам, запускает SFP и обновляет свою таблицу маршрутизации.
- Если LSA уже существует, но принимаемый LSA имеет меньший последовательный номер, то маршрутизатор посылает отправителю LSU с актуальной информацией.