Описание работы OSPF

И что он из себя представляет

OSPF — link-state IGP протокол.

Используются Hello пакеты для установления и поддержания соседства.

OSPF рассылает LSA (IP 89 порт, 224.0.0.5 адрес) во все порты на которых включен OSPF, кроме того, с которого прилетела LSA. С помощью LSA на каждом роутере строится топология сети и на основании этих данных затем производится расчёт кратчайшего маршрута.

На всех роутерах одной area поддерживается одинаковая копия LSDB. Расчёт пути ведется в рамках одной AREA.

Типы пакетов

Hello — используются для установления и поддержания соседства ospf. Отправляются на адрес 224.0.0.5 каждые 10 сек. Содержит в себе поля: network mask, hello interval, dead interval, options, (router priority, designated router, backup designated router, neighbor).

Database description (DD) — используется только во время установления соседства. Определяет кто отвечает за синхронизацию LSDB (выбирается роутер с бОльшим RID). Обменивается LSA до полной синхронизации. Содержит: ospf header, sequence number, lsa header.

Link-state request — отправляется роутером, когда тот понимает, что LSBD устарела. Содержит: ospf header, link-state type, link-state ID, advertising router.

Link-state update — отправляется на адрес: 224.0.0.5 (всем) или 225.0.0.6 (для DR). Отправляется либо в ответ на link-state request, либо если меняется информация о состоянии линка на локальном роутере. Передает одну или несколько LSA. Содержит: ospf header, numbers of advertisement, link-state avertisement.

Link-state acknowledgment — ответ на link-state update. Содержит: ospf header, list of LSA headers.

Установление соседства

Соседи используют hello пакеты для установления и поддержания соседства.

  • Down

Самое начало, ничего не происходит.

  • Init

В hello-packet в списке соседей нет router-id маршрутизатора, получившего этот пакет.

Если маршрутизатор не переходит в состояние 2-Way, а скачет — down > init > down > init… вероятно на маршрутизаторах не совпали параметры:

Area ID
Authentication
Network Mask
Hello Interva
Router Dead Interval
Options fields

Либо до удаленного маршрутизатора не доходят ваши сообщения hello (причиной могут быть неверно настроенные фаерволы)

  • 2-Way

В hello-packet в списке соседей появился RID роутера, получившего этот пакет.

  • ExStart

Выборы DR и BDR маршрутизаторов производятся в момент первоначальной установки соседских отношений по следующим правилам:

  • Роутер с наибольшим приоритетом становится DR;
  • Роутер со вторым по величине приоритетом становится BDR;
  • Если роутеры имеют равный приоритет, то в качестве DR выбирается роутер с наибольшим RID, BDR-ом становится роутер со вторым по величине RID;
  • Роутер, с приоритетом равным нулю, не принимает участия в выборах DR и BDR;
  • Если после выбора DR и BDR в сегменте сети добавляется роутер с более высоким приоритетом или бОльшим RID, то повторные выборы не производятся;
  • Повторные выборы производятся только после того как DR или BDR становится недоступными.

(Происходит обмен сообщениями DD (database descr), где заполнены только поля: router-id, neighbors, mtu.

Если маршрутизатор не переходит в следующее состояние, то вероятнее всего причина в несовпадении mtu на физических интерфейсах.

  • ExChange

Процесс обмена LSDB с помощью сообщений DD (database descr) (локальной базой маршрутов, их метриками, состояний линков)

  • Loading

Обмен сообщениями link-state request, link-state update. На каждом маршрутизаторе должна быть одинаковая LSDB. (Каждый роутер восполняет недостающие знания о новых маршрутах)

  • Full

Соседство установлено, LSDB синхронизированы. Последующие изменения в топологии передаются через сообщения link-state update, в ответ приходят link-state acknowledgment (в качестве подтверждения доставки).

Таймеры

  • Hello interval — установление и поддержание соседства = 10sec для broadcast и p2p networks; 30 sec — для nonbroadcast multiple access (NBMA).
  • Dead — интервал, в течение которого не приходит hello, чтобы считать соседа неоперабельным = 40 sec.
  • LSA retransmission interval — когда роутер отправил LSA, он ждет 5 sec ответа от соседа, что LSA получен (LSA ACK). Если ACK не пришел — делается повторная передача LSA.
  • Transit-delay — устанавливает время, необходимое для передачи link-state update на интерфейсе = 1sec. Менять дефолтное значение не советуется.
  • LSA refresh — интервал обновления LSA = 50min. Если LSA не обновилась через 60min, то инфо о ней считается устаревшей и она пропадает из LSDB.

Типы Area

Ненулевые area могут иметь один и тот же номер area, но такой подход — не правильный. При этом разные area с одним area-id не будут никогда считать себя одним сегментом сети.

area-id не передаются в LSA.

Если разбирать самые стандартные area (не stub, nssа и прочее):

  • area1 — area0 — area3 — ok. У всех area будет полная картина сети.
  • area1 — area2 — area3 — ok, только area2 будет иметь маршруты всей сети, а area1 и area3 будут иметь только свои маршруты + маршруты area2.
  • area1[1] — area0 — area1[2] — ok, НО конечно area1[1] будет видеть area1[2] как LSA3. Такой себе вариант.

backbone

Area 0 (к ней в обязательном порядке должны подключаться остальные area).

Но если area не имеет прямого физического подключения к backbone area, то она может соединяться с ней через virtual-link.

stub area

Обменивается маршрутами по ospf с ABR (LSA 3), не содержит с себе external routes, не принимает от ABR external routes (не принимает LSA 4,5). Доступность внешних маршрутов достигается анонсированием 0/0 со стороны ABR в сторону stub-area. Через stub-area нельзя построить virtual-link и в ней не может размещаться ASBR. Если все же сконфигурировать ASBR внутри stub-area, то роутер разместит LSA 5 в своей локальной базе данных, но не будет пересылать ее другим роутерам даже внутри area.

Все роутеры stub area должны быть сконфигурированы, как stub.

[edit protocols ospf area 0.0.0.20]
+ stub

Чтобы появился 0/0, на ABR настраиваем:

[edit protocols ospf area 0.0.0.20 stub]
+     default-metric 10;

stub with no summaries (totally stub)

В неё не анонсируется вообще никаких LSA. В area не вставляются LSA 3, 4, 5. По area гуляют только LSA 1 и LSA 2 [no-summaries как раз намекает на отсутствие LSA3]. Доступность маршрутов из остальных area достигается тем же анонсированием 0/0 со стороны ABR в сторону totally stub-area. И ASBR не флудит external routes в такой area. Также virtual-link не поддерживается в такой area.

[edit protocols ospf area 0.0.0.20]
+  stub default-metric 10 no-summaries;

not-so-stubby

Обменивается OSPF-маршрутами с ABR (LSA3), может содержать external routes (ASBR) — НО! в этой area external = LSA7 (NSSA). Не принимает external routes от ABR. (не принимает LSA 4,5). Внешние ресурсы также через 0/0 на ABR.

Конфигурация nssa делается на каждом роутере внутри area.

[edit protocols ospf area 0.0.0.30]
+nssa

на ABR:

   OSPF database, Area 0.0.0.30
Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
Router  *10.200.86.1      10.200.86.1      0x80000002    35  0x20 0xe809  48
Router   10.200.86.3      10.200.86.3      0x80000004    36  0x20 0xbdba  72
Router   10.200.86.9      10.200.86.9      0x80000004    42  0x20 0xabe2  48
Network  192.168.86.37    10.200.86.9      0x80000001    42  0x20 0xf1d7  32
Summary *10.100.86.8      10.200.86.1      0x80000001   129  0x20 0x67ad  28
...
Summary *192.168.86.48    10.200.86.1      0x80000001   129  0x20 0x3fb6  28
NSSA     172.16.0.0       10.200.86.9      
NSSA     172.16.1.0       10.200.86.9      - пришло от ASBR (LSA7) внутри area
NSSA     172.16.2.0       10.200.86.9      
   OSPF AS SCOPE link state database
Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
Extern  *172.16.0.0       10.200.86.1      
Extern  *172.16.1.0       10.200.86.1      - сгенерировал ABR (LSA7 -> LSA5) и послал в area0 
Extern  *172.16.2.0       10.200.86.1

Анонс 0/0 настраивается на ABR:

[edit protocols ospf area 0.0.0.30 nssa]
+      default-lsa default-metric 1;

Смотрим, что прилетело от ABR в NSSA area:

   OSPF database, Area 0.0.0.30
Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
NSSA     0.0.0.0          10.200.86.1      0x80000001    50  0x20 0x8681  36

Если на ABR добавляем no-summaries, то 0/0 прилетит как LSA3 (а не LSA7 (NSSA)):

   OSPF database, Area 0.0.0.30
Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
Summary  0.0.0.0          10.200.86.1      0x80000001     3  0x20 0xae65  28
NSSA     0.0.0.0          10.200.86.1      0x80000001  3600  0x20 0x8681  36

Чтобы при настроенном no-summaries 0/0 прилетал все же как LSA 7, то добавляем в конце type-7:

   OSPF database, Area 0.0.0.30
Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
Summary  0.0.0.0          10.200.86.1      0x80000001  3600  0x20 0xae65  28
NSSA     0.0.0.0          10.200.86.1      0x80000001     5  0x20 0x8681  36

Типы LSA

Все типы имеют одинаковый заголовок:

  • LS age — sec — время, когда LSA была впервые создана
  • Option — E-bit = External LSA, P bit = NSSA external LSA.
  • LS type.
  • Link-state ID — разные типы LSA используют поле по-разному.
  • Advertising router — роутер, который сгенерировал LSA.
  • LS sec number
  • LS checksum
  • Length

В выводе sh ospf database ID, отмеченный * — будет означать, что этот маршрут сгенерирован самим роутером.

  • Type 1 LSA (Router) — Описывает стоимость (metric) и состояние интерфейсов. Не передаются между Area. LSA1 = area scope.
  • Type 2 LSA (Network) — Отправляются DR. Описывает роутеры, подключенные в бродкаст сегменте + сам себя. Не передаются между area. В выводе sh ospf database: ID = DR, attached router = роутеры в бродкаст сегменте.
  • Type 3 LSA (Summary) — Отправляются ABR. Описывают сети, которые маршрутизатор получил из предыдущих типов LSA, и передает между Area. LSA будет флудиться каждому роутеру внутри area. ABR, получив LSA3 не перешлет ее другому ABR, а сгенерирует на основании полученной LSA3, LSA1, 2 новую LSA3, и уже ее передаст в соседние area. LSA3 = area scope.

Summary не означает агрегирование! ABR передает один в один LSA1 и LSA2 в другую area без какой-либо агрегации/суммаризации по дефолту.

  • Type 4 LSA (ASBR Summary) — Генерируются ABR, LSA содержит описание самих ASBR роутеров. В выводе sh ospf database: ID = ASBR router.
  • Type 5 LSA (External) — Описывают сети, полученные из других протоколов маршрутизации ASBR-ами. Рассылаются ими же. В выводе sh ospf database: ID + mask = external networks.
  • Type 6 LSA (Group membership) — Не используется, некогда планировался под MOSPF.
  • Type 7 LSA (NSSA External) — Генерируются ASBR-ами в NSSA. Передаются только внутри NSSA. Но на выходе из зоны ABR-ами транслируются в LSA Type 5. В выводе sh ospf database: ID + mask = external networks.
  • Type 9 (Graceful restart) — поддерживает graceful restart.
  • Type 10 LSA (Traffic Engineering) — Содержат информацию, которая в последствии находится в TED и используется при работе CSPF-алгоритма.

Типы интерфейсов

  • Broadcast — поведение аналогично тому, когда router включен в LAN сегмент. То есть дополнительно производится выбор DR, BDR среди роутеров. И если на интерфейсе висит несколько ip, то роутер сможет установить несколько соседств в каждой сети одновременно.
  • Point to point (p2p) — соединение между одним source и одним destination. Возможно установление только одного соседства с такого типа интерфейса. Можно назначать на ethernet интерфейсы без IP адресов.
  • Point to multipoint (p2mp) — соединение между одним source и несколькими destination. Сеть рассматривается как набор p2p линков. Т.к. нет autodiscovery механизма, от обязательно указывать соседа.
  • Nonebroadcast multiaccess (NBMA) — работает как p2mp, но может взаимодействовать с другим оборудованием.
  • Demand circuit — соединение на котором можно ограничить полосу или время доступа.
  • Passive — анонсирует адреса на интерфейсе, но не участвует в установлении OSPF соседства и вообще не обменивается hello-сообщениями. Также в passive можно использовать инфо об интерфейсе и его сетях для TE вычислений.
  • Disable — не участвует в OSPF и не передает о себе инфо в LSDB
  • Peer (для OSPFv2) — требуется GMPLS

Если на маршрутизаторах указаны разные типы интерфейсов, то они между собой соседство не поднимут.

Другие фичи

  • Аутентификация: простая (plain-text, simple), MD5, none. и еще IPSEC.
  • simple — только один ключ. По сути просто не дает левому роутеру подключиться к твоему ospf домену, из-за использованиях хоть такого метода защиты. Но ключ не шифруется. Так что только MD5, только безопасность!
  • md5 — можно использовать несколько ключей. Менять их по времени. Каждый md5 key — с уникальным id. По id определяется какой md5 key использовать.
  • Суммирование маршрутов (area-range), прилетающих в update сообщениях в backbone от других area.