L3 OSPF — визуализированный
OSPF (Open Shortest Path First) — стандарт де-факто динамической маршрутизации внутри enterprise-сетей. Открытый (не привязан к вендору), быстрый, устойчивый к петлям. Если на собеседовании на сетевика спрашивают один протокол глубоко — это почти всегда OSPF. Разберём его так, чтобы ты не зубрил, а понимал, что происходит — с пакетами, состояниями и реальными конфигами.
- Идея link-state: каждый роутер строит полную карту сети
- Три таблицы OSPF: соседей, LSDB (карта), маршрутов
- 5 типов пакетов OSPF и как они выглядят «на проводе»
- Hello-протокол: что должно совпасть, чтобы сложилось соседство
- Состояния соседства Down → Full и где они застревают
- Обмен базой: DBD → LSR → LSU → LSAck по шагам
- Типы сетей (broadcast, P2P, NBMA) и зачем DR/BDR
- SPF/Дейкстра — как из карты получается дерево кратчайших путей
- Areas, backbone area 0, ABR/ASBR, типы LSA и типы областей
- Cost-метрика, таймеры, аутентификация, суммаризация
- Полный конфиг multi-area + troubleshooting-флоучарт
- OSPFv3 для IPv6 и мост в DevOps
1. Главная идея: link-state и полная карта
Distance-vector протоколы (RIP) работают «по слухам»: сосед сказал «до сети X — 3 хопа», ты поверил. Ты не видишь топологию, только чужие пересказы — отсюда медленная сходимость и петли.
OSPF работает иначе. Каждый роутер рассылает описание своих линков (это LSA — Link-State Advertisement). Все LSA собираются в общую базу — LSDB (Link-State Database). В итоге у каждого роутера в области идентичная полная карта сети. Затем каждый сам запускает алгоритм Дейкстры (SPF) и считает кратчайшие пути до всех сетей — от себя. Как навигатор, у которого есть вся карта города, а не пересказ «поверни где-то там».
2. Пять типов пакетов OSPF
OSPF не использует TCP/UDP — он работает прямо поверх IP, protocol 89. Пять типов сообщений:
| Тип | Имя | Зачем |
|---|---|---|
| 1 | Hello | найти соседей и поддерживать соседство |
| 2 | DBD (Database Description) | «оглавление» моей LSDB — что у меня есть |
| 3 | LSR (Link-State Request) | «пришли мне вот эти LSA, которых у меня нет» |
| 4 | LSU (Link-State Update) | сами LSA (полезная нагрузка топологии) |
| 5 | LSAck | подтверждение получения LSA (надёжность) |
Hello-пакет «на проводе» (упрощённый разбор Wireshark):
3. Hello: как находятся соседи
OSPF шлёт Hello-пакеты на multicast-адрес 224.0.0.5 со всех включённых интерфейсов.
Так роутеры обнаруживают друг друга. Но соседство (adjacency) сложится только, если на обоих
совпадает ряд параметров — иначе они «видят», но не «дружат». Это топ-источник проблем у джунов.
| Параметр | Должен совпадать? |
|---|---|
| Area ID | ✅ да — иначе соседства не будет |
| Subnet / маска на линке | ✅ да — должны быть в одной подсети |
| Hello / Dead интервалы | ✅ да — иначе flap |
| Authentication | ✅ да, если включена |
| Stub-флаг области | ✅ да |
| MTU | ✅ да — застрянет в ExStart/Exchange |
| Router-ID | ❌ должен быть уникальным, не совпадать |
router-id) → иначе самый высокий IP на
loopback → иначе самый высокий IP на активном интерфейсе. Всегда задавай вручную и стабильным
(например 1.1.1.1) — иначе после перезагрузки RID может «прыгнуть» и сломать соседства.
4. Состояния соседства: Down → Full
Соседство проходит через ряд состояний. Здоровое соседство заканчивается на Full (или 2-Way для не-DR на multi-access). Если «застряло» — состояние подсказывает, где искать проблему:
Обмен базой: DBD → LSR → LSU → LSAck
После 2-Way (или ExStart) соседи синхронизируют LSDB. Это и есть «движок» OSPF:
5. Типы сетей и DR/BDR
OSPF ведёт себя по-разному в зависимости от типа сети на интерфейсе:
| Тип сети | DR/BDR? | Где |
|---|---|---|
| Broadcast | ✅ да | Ethernet-сегмент (по умолчанию) |
| Point-to-Point | ❌ нет | линк между двумя роутерами (serial, /30, /31) |
| Non-broadcast (NBMA) | ✅ да (вручную) | Frame Relay, старые WAN |
| Point-to-Multipoint | ❌ нет | hub-and-spoke |
На сети с множественным доступом (Ethernet-сегмент, где несколько роутеров на одном свитче) каждый роутер
дружил бы с каждым — это N×(N−1)/2 соседств и лавина LSA. Чтобы этого избежать, выбирается
DR (Designated Router) и BDR (резерв). Все остальные (DROther) дружат только
с DR/BDR и общаются через них на адрес 224.0.0.6. Один центр вместо хаоса «все со всеми».
Кто становится DR:
- Сначала — наибольший OSPF priority на интерфейсе (по умолчанию 1;
0= «никогда не DR»). - При равенстве — наибольший Router-ID.
- Выборы не вытесняющие: новый роутер с большим priority не «свергнет» действующий DR. DR меняется только при его пропаже.
6. SPF / Дейкстра — из карты в дерево путей
Когда LSDB синхронизирована, каждый роутер запускает алгоритм Дейкстры: ставит себя в корень и строит дерево кратчайших путей (SPT) до всех сетей, суммируя cost по дороге. Лучшие пути попадают в таблицу маршрутизации.
7. Areas: иерархия и backbone
Если все роутеры в одной области, LSDB растёт, и каждый пересчёт SPF при любом изменении нагружает всех. Решение — разбить сеть на области (areas). Внутри области — детальная карта; между областями передаётся уже суммированная информация. Изменение в одной области не запускает полный SPF в других.
Главное правило: есть backbone — area 0, и все остальные области должны подключаться к ней. Роутер на стыке областей — ABR (Area Border Router). Роутер, который вносит в OSPF внешние маршруты (из BGP, статики, другого протокола) — ASBR (Autonomous System Boundary Router).
8. Типы LSA и типы областей — обзорно, но понятно
Не нужно зубрить все. Нужно понимать, кто что описывает:
| LSA | Кто генерит | Что описывает |
|---|---|---|
| Type 1 (Router) | каждый роутер | свои линки внутри области |
| Type 2 (Network) | DR | multi-access сегмент |
| Type 3 (Summary) | ABR | сети другой области (между областями) |
| Type 4 (ASBR Summary) | ABR | как добраться до ASBR |
| Type 5 (External) | ASBR | внешние маршруты (редистрибуция) |
| Type 7 (NSSA External) | ASBR в NSSA | внешние в stub-подобной области |
Типы областей — зачем
Чтобы маленькие края сети не тащили тяжёлые внешние LSA, область можно сделать «урезанной». Достаточно понимать идею: stub — не пускаем Type 5 (внешние), вместо них default route; totally stubby (Cisco) — не пускаем ещё и Type 3 (межобластные); NSSA — stub, но со своим ASBR (Type 7). Это оптимизация, на собесе достаточно объяснить «зачем».
9. Метрика — cost по полосе
OSPF считает стоимость пути как сумму cost исходящих интерфейсов. Cost по умолчанию =
reference-bandwidth / bandwidth интерфейса, reference по умолчанию 100 Мбит/с.
| Интерфейс | Cost при reference 100 Мбит/с | Cost при reference 100 Гбит/с |
|---|---|---|
| 10 Мбит/с | 10 | 10000 |
| 100 Мбит/с | 1 | 1000 |
| 1 Гбит/с | 1 (!) | 100 |
| 10 Гбит/с | 1 (!) | 10 |
| 100 Гбит/с | 1 (!) | 1 |
auto-cost reference-bandwidth 100000 (или больше) на всех роутерах одинаково.
10. Полный конфиг multi-area (Cisco)
Сценарий: R1 в area 1, R2 — ABR (area 1 + area 0), R3 в area 0.
Проверка соседства и маршрутов:
Таймеры и аутентификация
11. Troubleshooting — флоучарт
12. OSPFv3 для IPv6 — кратко
Для IPv6 есть OSPFv3 (RFC 5340). Та же логика (link-state, areas, DR/BDR, SPF), но:
работает по link-local адресам, настраивается на интерфейсе (ipv6 ospf 1 area 0), а не через
network, и может переносить и IPv4, и IPv6 (address families). Учить отдельно почти не нужно — знаешь
OSPFv2, понимаешь и v3.
13. Мост в DevOps
Прямо OSPF в облаке ты почти не встретишь (там маршрутизацию делает провайдер/VPC). Но:
- В underlay дата-центров и у провайдеров OSPF/IS-IS — повседневность.
- Принцип link-state («полная карта → SPF») встречается в дизайне распределённых систем и в том, как Kubernetes-CNI распространяют маршруты.
- Понимание «соседство, состояние, сходимость, MTU ломает обмен» переносится 1-в-1 на отладку любых протоколов, включая BGP в Calico и туннели.
14. Вопросы с собеседования
15. Частые ошибки джунов
- OSPF — link-state поверх IP proto 89: общая LSDB (карта) → каждый сам считает SPF/Дейкстру.
- Три таблицы: соседи → LSDB → маршруты. Пять пакетов: Hello, DBD, LSR, LSU, LSAck.
- Hello на 224.0.0.5; для соседства совпадают area, маска, Hello/Dead, auth, MTU.
- Застрял в Init — не видят взаимно; в ExStart/Exchange — MTU.
- DR/BDR — только на multi-access; priority, потом Router-ID; выборы не вытесняющие.
- SPF строит дерево минимальной суммы cost от себя до всех сетей.
- Иерархия: backbone area 0, все области к ней; ABR — стык областей, ASBR — внешние маршруты.
- Cost = reference / bandwidth. Обязательно поднимай reference-bandwidth одинаково везде.
- Задавай router-id вручную;
passive-interfaceна хостовых портах — практика и безопасность. - OSPFv3 — то же для IPv6, настраивается на интерфейсе.