Протокол маршрутизации OSPF
Существует два класса протоколов маршрутизации внутри автономных систем: Distance Vector, к которому относятся RIP, EIGRP и Link State, к которому относятся OSPF и IS-IS. Идеология Link State подразумевает, что каждый маршрутизатор должен не просто знать самые лучшие маршруты во все удалённые сети, но и иметь в памяти полную карту сети со всеми существующими связями между другими маршрутизаторами в том числе.
OSPF – наиболее распространённый протокол маршрутизации.
Это связанно с тем, что его основной конкурент EIGRP вплоть до 2013 года был закрытым протоколом и мог использоваться только на оборудовании Cisco, в то время, как OSPF – это открытый протокол, и он изначально поддерживался как Cisco, так и другими производителями.
Принцип работы OSPF:
Логика работы протокола OSPF следующая:
- Маршрутизаторы обмениваются маленькими HELLO-пакетами
- Обменявшись пакетами, они устанавливают соседские отношения, добавляя каждый друг друга в свою локальную таблицу соседей
- Маршрутизаторы собирают состояния всех своих линков (связей с соседями), включающие в себя id Маршрутизатора, id соседа, сеть и префикс между ними, тип сети, стоимость линка (метрику) и формируют пакет, называемый LSA (Link State Advertisement) – сообщение о состоянии канала между маршрутизаторами.
- Маршрутизатор рассылает LSA своим соседям, те распространяют LSA дальше.
- Каждый маршрутизатор, получивший LSA добавляет в свою локальную табличку LSDB (Link State Database) информацию из LSA.
- В LSDB скапливается информация, обо всех парах соединённых в сети маршрутизаторов, то есть каждая строчка таблицы — это информация вида: «Маршрутизатор A имеет соединение со своим соседом маршрутизатором B, между ними сеть такая-то с такими-то свойствами».
- После обмена LSA, каждый маршрутизатор знает про все линки, на основании пар строится полная карта сети, включающая все маршрутизаторы и все связи между ними.
- На основании этой карты каждый маршрутизатор индивидуально ищет кратчайшие с точки зрения метрики маршруты во все сети и добавляет их в таблицу маршрутизации.
Как видно из описания алгоритма, он достаточно сложный и ресурсоёмкий. Это объясняет высокие требования OSPF к производительности маршрутизатора и оперативной памяти. Теперь, давайте представим, что происходит, если у одного из маршрутизаторов пропадает связь с соседом:
- Он рассылает всем новые LSA
- Все заново строят карту сети
- Заново считают кратчайшие маршруты во все сети
- Обновляют свою таблицу маршрутизации
Понятно, что если у нас много маршрутизаторов, много разных сетей, то такая ситуация будет происходить достаточно часто, вызывая постоянный пересчёт на всех маршрутизаторах и существенно их нагружая. По этой причине, в больших сетях используется разделение на зоны (area), в каждой зоне вычисления производятся автономно, а между зонами распространяется только результат этих вычислений, таким образом, использование зон важно в случае больших сетей.
Виды OSPF сообщений
Всего существует пять типов OSPF сообщений:
- Hello – отправляются регулярно для поиска соседей и установки соседских отношений
- Database Description (DBD) – используются для проверки синхронизации LSDB у соседних маршрутизаторов
- Link state request (LSR) – принудительный запрос у некого маршрутизатора его LSA. Может использоваться, например, когда маршрутизатор только включился и ему надо узнать текущие связи в сети, или, когда у маршрутизатора пропала сеть, и он хочет узнать нет ли у других маршрутизаторов альтернативных маршрутов к ней.
- Link state update (LSU) – содержит состояния связей маршрутизатора.
- Link State Acknowledgment (LSAck) – пакет-подтверждение, высылается в ответ на другие типы пакетов. Это связано с тем, что OSPF не использует протокол TCP и для надёжной доставки нужен свой собственный механизм подтверждений.