June 18, 2018

Протокол маршрутизации OSPF

Существует два класса протоколов маршрутизации внутри автономных систем: Distance Vector, к которому относятся RIP, EIGRP и Link State, к которому относятся OSPF и IS-IS. Идеология Link State подразумевает, что каждый маршрутизатор должен не просто знать самые лучшие маршруты во все удалённые сети, но и иметь в памяти полную карту сети со всеми существующими связями между другими маршрутизаторами в том числе.

OSPF – наиболее распространённый протокол маршрутизации.

Это связанно с тем, что его основной конкурент EIGRP вплоть до 2013 года был закрытым протоколом и мог использоваться только на оборудовании Cisco, в то время, как OSPF – это открытый протокол, и он изначально поддерживался как Cisco, так и другими производителями.

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

Логика работы протокола OSPF следующая:

  1. Маршрутизаторы обмениваются маленькими HELLO-пакетами
  2. Обменявшись пакетами, они устанавливают соседские отношения, добавляя каждый друг друга в свою локальную таблицу соседей
  3. Маршрутизаторы собирают состояния всех своих линков (связей с соседями), включающие в себя id Маршрутизатора, id соседа, сеть и префикс между ними, тип сети, стоимость линка (метрику) и формируют пакет, называемый LSA (Link State Advertisement) – сообщение о состоянии канала между маршрутизаторами.
  4. Маршрутизатор рассылает LSA своим соседям, те распространяют LSA дальше.
  5. Каждый маршрутизатор, получивший LSA добавляет в свою локальную табличку LSDB (Link State Database) информацию из LSA.
  6. В LSDB скапливается информация, обо всех парах соединённых в сети маршрутизаторов, то есть каждая строчка таблицы — это информация вида: «Маршрутизатор A имеет соединение со своим соседом маршрутизатором B, между ними сеть такая-то с такими-то свойствами».
  7. После обмена LSA, каждый маршрутизатор знает про все линки, на основании пар строится полная карта сети, включающая все маршрутизаторы и все связи между ними.
  8. На основании этой карты каждый маршрутизатор индивидуально ищет кратчайшие с точки зрения метрики маршруты во все сети и добавляет их в таблицу маршрутизации.

Как видно из описания алгоритма, он достаточно сложный и ресурсоёмкий. Это объясняет высокие требования OSPF к производительности маршрутизатора и оперативной памяти. Теперь, давайте представим, что происходит, если у одного из маршрутизаторов пропадает связь с соседом:

  1. Он рассылает всем новые LSA
  2. Все заново строят карту сети
  3. Заново считают кратчайшие маршруты во все сети
  4. Обновляют свою таблицу маршрутизации

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

Виды OSPF сообщений

Всего существует пять типов OSPF сообщений:

  1. Hello – отправляются регулярно для поиска соседей и установки соседских отношений
  2. Database Description (DBD) – используются для проверки синхронизации LSDB у соседних маршрутизаторов
  3. Link state request (LSR) – принудительный запрос у некого маршрутизатора его LSA. Может использоваться, например, когда маршрутизатор только включился и ему надо узнать текущие связи в сети, или, когда у маршрутизатора пропала сеть, и он хочет узнать нет ли у других маршрутизаторов альтернативных маршрутов к ней.
  4. Link state update (LSU) – содержит состояния связей маршрутизатора.
  5. Link State Acknowledgment (LSAck) – пакет-подтверждение, высылается в ответ на другие типы пакетов. Это связано с тем, что OSPF не использует протокол TCP и для надёжной доставки нужен свой собственный механизм подтверждений.