NetLab Academy

Сетевые лаборатории в браузере

Войти Начать бесплатно

Теория: 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 — устроены умнее: каждый роутер строит полную карту всей сети и сам прокладывает по ней кратчайшие маршруты.

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 должны доставляться надёжно.

Этапы установления соседства

Соседство (adjacency) проходит через несколько состояний, прежде чем дойти до Full:
Down → ничего не получено от соседа
Init → получили Hello, но в нём пока нет упоминания нас самих
2-Way → сосед упомянул нас в своём Hello — двустороннее общение подтверждено. На широковещательных сегментах (Ethernet) с несколькими роутерами большинство соседств на этом и останавливается — дальше только до DR и BDR.
ExStart → Exchange → Loading → идёт обмен DBD/LSR/LSU, базы синхронизируются
Full → базы полностью идентичны, соседство полностью установлено
Путь соседства от тишины до Full — и почему остановка на 2-Way не поломка
В выводе 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 определяется приоритетом интерфейса (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

Чтобы роутер «рассказал» соседям про свою подсеть, её нужно явно указать командой 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 для какой-то подсети — она не попадёт в 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-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.

Начать бесплатно → бета открыта, доступ бесплатный