
Описание работы 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.