June 17, 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 и для надёжной доставки нужен свой собственный механизм подтверждений.