Теория: OSPF: как работает протокол состояния канала
Каждый роутер строит полную карту сети и сам считает кратчайшие пути. Пакеты и состояния соседства, выборы DR/BDR, зоны и метрика — всё, что нужно до первой лабы. Прочитайте материал, а затем пройдите тест — следующий пункт курса откроется после верных ответов.
Зачем нужна динамическая маршрутизация
Представьте, что у вас 4 роутера, и при каждом изменении сети нужно вручную прописывать маршруты на каждом из них. Это работает, пока сеть маленькая, но быстро превращается в кошмар при росте: один забытый маршрут — и часть сети недоступна, а искать причину приходится вручную на каждом узле. Протоколы динамической маршрутизации решают эту проблему — роутеры сами обмениваются информацией о доступных сетях и сами пересчитывают таблицу маршрутизации при любых изменениях.
Два больших семейства протоколов
Протоколы маршрутизации делятся на внутренние (IGP — Interior Gateway Protocol) и внешние (EGP — Exterior Gateway Protocol). IGP работает внутри одной организации — например, OSPF, IS-IS, EIGRP. EGP используется для обмена маршрутами между разными организациями — это BGP (ему посвящена вторая лаба на этой платформе).
Среди IGP есть ещё одно важное деление: дистанционно-векторные протоколы (например RIP) просто говорят соседу «я могу добраться до сети X за N шагов», доверяя ему на слово. Протоколы состояния канала (link-state) — к ним относится OSPF — устроены умнее: каждый роутер строит полную карту всей сети и сам прокладывает по ней кратчайшие маршруты.
Среди IGP есть ещё одно важное деление: дистанционно-векторные протоколы (например RIP) просто говорят соседу «я могу добраться до сети X за N шагов», доверяя ему на слово. Протоколы состояния канала (link-state) — к ним относится OSPF — устроены умнее: каждый роутер строит полную карту всей сети и сам прокладывает по ней кратчайшие маршруты.
OSPF как протокол состояния канала
Идея OSPF: каждый роутер описывает свои прямые связи (какие у него интерфейсы, какие сети к ним подключены, какая «стоимость» у каждого линка) в виде маленького пакета данных — LSA (Link-State Advertisement). Эти LSA рассылаются всем роутерам в зоне (area), и каждый роутер складывает их в свою базу данных — LSDB (Link-State Database). Когда у роутера накопились LSA от всех соседей, у него получается полная карта сети. Дальше он запускает алгоритм Дейкстры (поиск кратчайшего пути) и сам вычисляет, куда направлять трафик до каждой известной сети.
Какими пакетами OSPF разговаривает
OSPF использует 5 типов пакетов:
• Hello — «я тут, кто рядом?» — рассылается регулярно (раз в 10 секунд на Ethernet) для обнаружения соседей и проверки, что они живы.
• DBD (Database Description) — краткое содержание своей LSDB, чтобы соседи поняли, чего у них не хватает.
• LSR (Link-State Request) — «пришли мне подробности об этой LSA».
• LSU (Link-State Update) — собственно сами LSA с полной информацией.
• LSAck — подтверждение получения, потому что LSU должны доставляться надёжно.
• Hello — «я тут, кто рядом?» — рассылается регулярно (раз в 10 секунд на Ethernet) для обнаружения соседей и проверки, что они живы.
• DBD (Database Description) — краткое содержание своей LSDB, чтобы соседи поняли, чего у них не хватает.
• LSR (Link-State Request) — «пришли мне подробности об этой LSA».
• LSU (Link-State Update) — собственно сами LSA с полной информацией.
• LSAck — подтверждение получения, потому что LSU должны доставляться надёжно.
Этапы установления соседства
Соседство (adjacency) проходит через несколько состояний, прежде чем дойти до Full:
Down → ничего не получено от соседаInit → получили Hello, но в нём пока нет упоминания нас самих2-Way → сосед упомянул нас в своём Hello — двустороннее общение подтверждено. На широковещательных сегментах (Ethernet) с несколькими роутерами большинство соседств на этом и останавливается — дальше только до DR и BDR.ExStart → Exchange → Loading → идёт обмен DBD/LSR/LSU, базы синхронизируютсяFull → базы полностью идентичны, соседство полностью установленоВ выводе
show ip ospf neighbor состояние пишется вместе с
ролью: Full/DR, Full/Backup, 2-Way/DROther. Смотреть надо на обе части —
2-Way у DROther это норма, а 2-Way с DR уже нет.Выборы DR и BDR
На сегменте, где сидит больше двух роутеров на одном Ethernet (общая среда), если бы все слали LSA друг другу напрямую, трафика было бы O(N²) — слишком много. Поэтому OSPF выбирает DR (Designated Router) — «главного» на этом сегменте, через которого идёт синхронизация, и BDR (Backup Designated Router) — запасного на случай отказа DR. Все остальные роутеры (DROther) устанавливают Full-соседство только с DR и BDR, а друг с другом остаются в 2-Way — и это нормально, не ошибка.
Выбор DR определяется приоритетом интерфейса (
Важный нюанс: DR/BDR избираются на сетях с типом broadcast (это тип по умолчанию для Ethernet-интерфейсов) — причём даже если на сегменте всего 2 роутера, как в нашей лабе. Поэтому в выводе
Выбор DR определяется приоритетом интерфейса (
ospf priority, по умолчанию 1) — выше приоритет побеждает; при равенстве — побеждает больший router-id.Важный нюанс: DR/BDR избираются на сетях с типом broadcast (это тип по умолчанию для Ethernet-интерфейсов) — причём даже если на сегменте всего 2 роутера, как в нашей лабе. Поэтому в выводе
show ip ospf neighbor вы увидите не просто Full, а Full/DR у одного соседа и Full/Backup у другого — это нормально, оба полностью синхронизированы. Чтобы DR/BDR не избирались вовсе, нужно явно сменить тип сети на point-to-point командой ip ospf network point-to-point на интерфейсе — в этой лабе мы этого не делаем.Area и зачем делить сеть на зоны
OSPF умеет делить сеть на зоны — area, чтобы крупные сети не захлёбывались в пересчётах при каждом изменении.
Area 0 называется backbone — все остальные зоны должны быть к ней привязаны. Для небольших лаб вроде нашей достаточно одной зоны — area 0 — и говорить про межзональные LSA (Type 3 Summary LSA и другие) пока не нужно, но важно знать, что они существуют, если сеть вырастет.Network statement и Cost
Чтобы роутер «рассказал» соседям про свою подсеть, её нужно явно указать командой
У каждого линка есть метрика — cost. По умолчанию она вычисляется по формуле:
network <подсеть> area 0 внутри router ospf. Без этой команды подсеть просто не попадёт в OSPF, даже если интерфейс настроен и работает.У каждого линка есть метрика — cost. По умолчанию она вычисляется по формуле:
cost = 100 000 000 / bandwidth (где bandwidth в bps) — то есть быстрые линки получают низкую стоимость, медленные — высокую. OSPF выбирает маршрут с наименьшей суммой cost по пути. Cost можно и задать вручную командой ip ospf cost <N> на интерфейсе.Passive-interface — зачем
На интерфейсах, которые смотрят в сторону рядовых компьютеров (а не других роутеров), OSPF-соседство не нужно — там просто нет других роутеров, с кем соседствовать. Нужно сказать OSPF: «анонсируй эту подсеть, но не рассылай туда Hello-пакеты». Здесь это делается командой
ip ospf passive на самом интерфейсе (в режиме interface eth2). Это не обязательно для работы лабы, но хорошая практика: меньше лишнего трафика и меньше потенциальных уязвимостей (никто посторонний не сможет «подружиться» с вашим OSPF через порт для ПК).Как проверять себя
Несколько ключевых команд:
show ip ospf neighbor — показывает, с кем установлено соседство и в каком состоянии. Ищите Full (или Full/DR, Full/Backup на широковещательных сегментах) — это значит, всё хорошо.show ip route ospf — показывает маршруты, изученные именно через OSPF (они помечены буквой O в начале строки). Если ожидаемой подсети там нет — значит, она не анонсирована.show ip ospf interface — показывает, в каком state находится интерфейс (DR/BDR/DROther/Point-to-Point) и какой у него cost.Частые ошибки
• Забыли
• На двух концах линка указаны разные
• Опечатка в маске подсети в network statement — OSPF может анонсировать не то, что вы ожидали, или не анонсировать вовсе.
• Несовпадение таймеров Hello/Dead на двух концах линка — соседство то появляется, то пропадает (flapping).
network для какой-то подсети — она не попадёт в OSPF.• На двух концах линка указаны разные
area — соседство не установится вообще (зависнет в состоянии, отличном от Full, например 2-Way или ExStart).• Опечатка в маске подсети в network statement — OSPF может анонсировать не то, что вы ожидали, или не анонсировать вовсе.
• Несовпадение таймеров Hello/Dead на двух концах линка — соседство то появляется, то пропадает (flapping).
Команды настройки — шпаргалка
Минимальный набор для поднятия OSPF (синтаксис, который используется в лабе):
# процесс и какие сети анонсировать
router ospf # всё, что дальше с отступом, относится к OSPF
network 10.0.0.0/24 area 0 # два аргумента: подсеть и номер зоны, куда её
# положить. Зона 0 магистральная, к ней
# подключаются остальные. Без команды подсеть
# в OSPF не попадёт, даже если порт работает
# настройки на самом интерфейсе
interface eth2
ip ospf passive # анонсировать подсеть порта, но не слать в него
# Hello. Для портов к хостам, где соседей нет
ip ospf cost 50 # метрика линка вручную вместо расчёта по скорости.
# Чем меньше, тем маршрут привлекательнее
ip ospf priority 100 # приоритет в выборах DR. Чем БОЛЬШЕ, тем выше
# шанс им стать; 0 — никогда не участвовать
ip ospf network point-to-point
# тип сети: отключить выборы DR/BDR там, где они
# не нужны, например на линке между двумя роутерами
# проверка
show ip ospf neighbor # с кем установлено соседство и в каком состоянии
show ip route ospf # какие маршруты пришли по OSPF
show ip ospf interface # как настроен каждый порт: зона, стоимость, таймерыКонтрольные вопросы
Дальше — лабораторная работа «OSPF-кольцо»
Для неё нужен аккаунт: стенд поднимается персонально под вас — свои роутеры, свои конфиги, никто в них не мешает. Регистрация — почта и пароль.
Теория прочитана. Дальше — руками.
Личный стенд из настоящих роутеров разворачивается за секунды. Платформа проверяет не ответы на тесты, а состояние вашей сети: поднялись ли соседства, сошлись ли маршруты, ходит ли ping. Рядом — AI-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.
Начать бесплатно →
бета открыта, доступ бесплатный