Подробный гайд для начинающих сетевых инженеров.
Данные между устройствами передаются через сеть, которая бывает глобальной или локальной (LAN) — в пределах дома или офиса. Чтобы данные достигли адресата, их нужно направлять по правильному пути. За это отвечает система маршрутизации, выполняющая роль навигатора для сетевого оборудования. Маршрутизация может быть статической или динамической.
При статической маршрутизации пути задаются вручную, и, если один из маршрутизаторов выходит из строя, передача данных может остановиться. При динамической маршрутизации пути автоматически корректируются в зависимости от состояния сети, за счёт чего снижается риск простоев.
Для динамической маршрутизации используются специальные протоколы — наборы правил, по которым маршрутизаторы обмениваются сведениями о состоянии сети и выбирают оптимальный маршрут. Один из таких протоколов — OSPF. Он эффективно решает задачи в крупных сетях, и его знание требуется практически в каждой вакансии сетевого инженера.
Основы протокола OSPF
OSPF (Open Shortest Path First) — протокол динамической маршрутизации, который автоматически находит и перестраивает маршруты при изменениях в сети. Он постоянно анализирует состояние всех доступных маршрутов и с помощью алгоритма выбирает лучший. Благодаря этому OSPF особенно эффективен в высоконагруженных сетях, где необходимо бесперебойно и без задержек передавать большие объёмы данных.
Для наглядности сравним OSPF с другими популярными протоколами динамической маршрутизации: RIP (Routing Information Protocol) и EIGRP (Enhanced Interior Gateway Routing Protocol):
- RIP ограничен 15 узлами и отправляет обновления маршрутов каждые 30 секунд. OSPF отправляет обновления только при изменениях топологии, что снижает нагрузку на сеть и экономит ресурсы.
- EIGRP — проприетарный протокол Cisco, а OSPF — открытый стандарт, поддерживаемый большинством производителей сетевого оборудования. OSPF можно внедрять на оборудовании разных производителей, что делает его более гибким для масштабирования.
OSPF можно сравнить с автомобильным навигатором: когда маршрутизатор имеет полную карту сети, он легко строит маршрут до любой точки. Это эффективно, поскольку вероятность возникновения ошибок или петель в такой ситуации минимальна. Однако чем больше маршрутов, тем больше времени и ресурсов требуется для поиска оптимального пути — как и при прокладывании маршрута на навигаторе: поиск пути от Москвы до Санкт-Петербурга занимает больше времени, чем поиск пути в соседний район.
Поэтому OSPF обычно используется внутри сети одной организации и не подходит для маршрутизации в интернете. Однако он может подключаться к внешним сетям через пограничные маршрутизаторы (ASBR) для обмена информацией между внутренней сетью и внешними провайдерами. Для глобальной маршрутизации в интернете чаще применяется протокол BGP.
В следующих частях статьи мы подробно разберём особенности протокола OSPF: от принципов работы до настройки на реальных маршрутизаторах.
Терминология
Прежде чем углубиться в детали, рассмотрим ключевые термины, которые понадобятся для объяснения принципов работы протокола OSPF.
Принцип работы OSPF
Каждый маршрутизатор, настроенный по протоколу OSPF, обменивается с соседними устройствами информацией о доступных маршрутах и их стоимости (OSPF Сost). Обмен данными происходит по принципу «все со всеми». Полученная информация сохраняется в базе данных LSDB, и на её основе маршрутизаторы определяют соседей и рассчитывают маршруты.
Представьте сеть из пяти маршрутизаторов, как на изображении ниже. Допустим, стоимость передачи данных через каждый интерфейс одинакова. Нам нужно выбрать наиболее быстрый путь для передачи данных с первого на третий маршрутизатор. Оптимальный путь пройдёт через второй маршрутизатор, поскольку задействование четвёртого маршрутизатора добавит лишний узел и увеличит задержку при передаче данных.
При одинаковой стоимости передачи данных через каждый интерфейс оптимальный путь — тот, что проходит через наименьшее количество маршрутизаторов между отправителем и получателем
Инфографика: Skillbox Media
При этом каждый маршрутизатор в OSPF автономно выбирает конкретный маршрут, а сообщения о доступных сетевых путях служат лишь справочной информацией. Например, если второй маршрутизатор будет перегружен, первый маршрутизатор может отправить данные через маршрутизатор 4 — в текущих условиях такой маршрут может оказаться оптимальным.
При одинаковой стоимости передачи данных через каждый интерфейс оптимальный путь может измениться, если один из маршрутизаторов окажется перегружен, недоступен или изменится пропускная способность сети
Инфографика: Skillbox Media
Запуск протокола
После запуска протокола OSPF каждый маршрутизатор отправляет Hello-пакеты в свой сегмент сети. Эти пакеты «приветствуют» другие маршрутизаторы, помогая установить связь, определить соседей и обменяться основной информацией для установления маршрутизации.
Каждый Hello-пакет содержит следующие основные сведения:
- Router ID — уникальный номер, который может быть назначен вручную или автоматически на основе IP-адреса маршрутизатора.
- OSPF-приоритет — это значение от 0 до 255, которое настраивается при конфигурации маршрутизатора. Оно показывает, может ли маршрутизатор стать выделенным маршрутизатором (DR). Чем выше приоритет, тем больше вероятность, что маршрутизатор будет DR. По умолчанию приоритет равен 1, но администратор сети может изменить его или установить 0, чтобы маршрутизатор не стал DR.
- Маска подсети — это число, которое помогает маршрутизатору понять, какая часть IP-адреса относится к сети, а какая — к устройству. Например, в маске 255.255.255.0 первые три части IP-адреса — это сеть, а последняя — устройство в этой сети.
- Идентификатор зоны OSPF — это номер зоны, к которой относится маршрутизатор. Например, зона может быть отдельным офисом или регионом внутри организации. Подробнее о зонах поговорим далее.
- Тип аутентификации — это метод защиты данных, который гарантирует, что обмен информацией происходит только между доверенными устройствами. Например, для аутентификации могут использоваться пароли или криптографические ключи.
Также Hello-пакеты содержат временные параметры, которые помогают маршрутизаторам поддерживать активные соединения:
- Интервал отправки Hello-пакетов — определяет, как часто маршрутизатор должен отправлять Hello-пакеты для проверки состояния своих соседей. В большинстве сетей этот интервал составляет 10 секунд, но при необходимости его можно изменить.
- Dead timer — это время ожидания Hello-пакета от соседнего маршрутизатора. Если ответа нет, маршрутизатор помечает соседа как недоступного и обновляет пути. По умолчанию этот интервал равен 40 секундам — в четыре раза больше интервала отправки пакетов.
Hello-пакеты помогают протоколу OSPF поддерживать актуальную информацию о маршрутах и быстро реагировать на изменения в сети.
Установка отношений соседства и распределение ролей
После отправки и получения Hello-пакетов маршрутизаторы проверяют совместимость: сверяют маску подсети, идентификаторы и другие параметры, полученные в этих пакетах. Если все параметры совпадают, маршрутизаторы добавляют друг друга в базы данных состояния сети (LSDB) и начинают обмен актуальной информацией о топологии.
После установления отношений соседства маршрутизаторы выбирают выделенный (DR) и резервный выделенный маршрутизатор (BDR) на основе их OSPF-приоритета. Если маршрутизатор с приоритетом 100 конкурирует с маршрутизатором с приоритетом 50, то первый станет DR, а второй — BDR.
Остальные маршрутизаторы получают статус DROTHER. Они могут устанавливать смежность только с DR и BDR, что помогает избежать излишнего обмена данными и оптимизировать сетевой трафик.
Типы интерфейсов
Протокол OSPF использует два основных типа интерфейсов для обмена информацией с соседними маршрутизаторами: Broadcast и Point-to-point.
Сочетание разных типов интерфейсов обеспечивает надёжную маршрутизацию и управление сетью. В широковещательных сетях Broadcast помогает уменьшить объём трафика, а интерфейс Point-to-Point обеспечивает простую и эффективную связь между парой устройств.
Зоны OSPF
По мере роста сети увеличивается количество устройств, настроенных по протоколу OSPF. В результате база данных состояния интерфейсов (LSDB) расширяется и занимает больше места, увеличивается количество доступных сетевых путей, а алгоритм нахождения кратчайшего пути усложняется. В таких сетях даже кратковременное отключение маршрутизатора приводит к повышенной нагрузке на оборудование.
Для решения проблемы OSPF использует деление сети на зоны (areas). Это снижает частоту обновления базы данных состояния интерфейсов и улучшает производительность сети. Каждый интерфейс маршрутизатора может принадлежать только одной зоне, а за обмен данными между зонами отвечают пограничные маршрутизаторы зон (ABR — area border routers).
Раньше, когда производительность маршрутизаторов была ограничена, существовало правило: включать не более 50 устройств в одну зону, чтобы минимизировать нагрузку на сеть. Сегодня одна зона может включать тысячи маршрутизаторов, поэтому зонирование используется больше для удобства управления, чем для решения вопросов масштабируемости.
Инфографика: Skillbox Media
Самая важная зона в OSPF — Backbone area, она также известна как магистральная зона или зона 0. Она соединяет все остальные зоны в сети OSPF. Вся маршрутная информация передаётся через Backbone area, обеспечивая централизованную маршрутизацию без сетевых петель.
Помимо Backbone area, в OSPF существуют и другие типы зон:
- Standard area — эти зоны обмениваются полной маршрутной информацией как внутри зоны, так и через Backbone Area.
- Stub area — это зоны, которые ограничивают объём информации о внешних маршрутах, снижая нагрузку на маршрутизаторы.
- Totally stubby area — это более строгая версия Stub Area, которая дополнительно фильтрует маршруты, за счёт чего ещё сильнее уменьшается объём передаваемой информации.
- NSSA (Not-so-stubby area) — это гибридная зона, которая может принимать ограниченные внешние маршруты, что делает её более гибкой при построении сети.
Представим сеть с тремя зонами: зона 0, зона 1 и зона 2. Чтобы передать данные из зоны 1 в зону 2, они должны пройти через зону 0 (Backbone area), и наоборот. Даже если маршрутизатор имеет интерфейсы, относящиеся к зонам 1 и 2, прямая передача данных невозможна — данные всегда будут проходить через Backbone
Инфографика: Skillbox Media
Типы пакетов
В OSPF есть пять типов пакетов, каждый из которых выполняет свою специфическую роль в передаче и обновлении данных. Ранее мы познакомились с Hello-пакетами, которые необходимы для установления и поддержания связи между маршрутизаторами. Теперь разберём остальные.
OSPF LSA — объявление о состоянии сети
В OSPF маршрутизаторы используют семь типов LSA-сообщений для обмена информацией о маршрутах и состоянии сети.
Инфографика: Skillbox Media
Инфографика: Skillbox Media
Инфографика: Skillbox Media
Инфографика: Skillbox Media
Инфографика: Skillbox Media
Инфографика: Skillbox Media
LSA-объявления обеспечивают бесперебойную работу протокола OSPF, позволяя маршрутизаторам получать актуальную информацию о маршрутах и оперативно адаптироваться к изменениям в сети.
Взаимодействие основных типов LSA-сообщений в OSPF
Инфографика: Skillbox Media
Синхронизация LSDB
LSDB — это карта сети на основе данных, полученных через LSA. Она предоставляет актуальные сведения о маршрутах и позволяет маршрутизаторам принимать обоснованные решения о передаче данных.
Синхронизация LSDB происходит в несколько этапов:
- Маршрутизаторы отправляют Hello-пакеты соседям.
- После установления соседства они обмениваются Database-description-пакетами, описывающие маршруты и состояния сети.
- Если у маршрутизатора отсутствуют данные, он отправляет Link-state-request-пакеты для обновления информации.
- Соседние маршрутизаторы отвечают Link-state-update-пакетами (LSU) с актуальными LSA-объявлениями.
- После получения обновлений маршрутизатор отправляет Link-state-acknowledge-пакет (LSAck) для подтверждения получения данных.
Несвоевременная синхронизация в OSPF может привести к некорректным маршрутам, задержкам или сбоям в передаче данных.
Выбор лучшего маршрута
После синхронизации LSDB маршрутизаторы выбирают маршрут для передачи данных на основе метрики OSPF cost и алгоритма Дейкстры.
Каждый интерфейс имеет свою стоимость: чем ниже значение Cost, тем лучше маршрут. OSPF использует алгоритм Дейкстры для анализа всех возможных маршрутов в сети и оценки их общей стоимости. Алгоритм построит граф, в котором узлы будут маршрутизаторами, а рёбра — соединениями с их стоимостью. Он последовательно выбирает узлы с меньшей стоимостью, обновляя пути до остальных, пока не найдёт лучший маршрут.
Например, интерфейс с пропускной способностью 1 Гбит/с будет иметь стоимость 1, а интерфейс с 100 Мбит/с — 10. Поэтому маршрутизатор выберет интерфейс с меньшей стоимостью. А если у интерфейсов будет одинаковая пропускная способность и стоимость, маршрутизатор может учитывать дополнительные параметры, такие как задержка или нагрузка.
Настройка OSPF в Cisco, Juniper и Huawei
Мы ознакомились с основами работы протокола и теперь перейдём к его настройке. Рассмотрим примеры конфигураций для популярных производителей сетевого оборудования: Cisco, Juniper и Huawei.
Базовая настройка OSPF схожа на всех платформах, хотя синтаксис команд может различаться. Поэтому для изучения подробностей мы рекомендуем ознакомиться со следующими спецификациями: Cisco Cloud Services Router 1000v, Junos OS и Huawei Configuration Guide.
Настройка OSPF в Cisco
R1#config t R1(config)#router ospf 1 R1(config-router)#router-id 1.1.1.1 R1(config-router)#network 1.1.1.1 255.255.255.255 area 0 R1(config-router)#network 12.12.12.0 0.0.0.255 area 0
Расшифровка параметров:
- router ospf 1 — активирует OSPF с идентификатором 1, чтобы маршрутизатор начал его использовать.
- router-id — задаёт уникальный номер для этого маршрутизатора.
- network — указывает, какие сети подключаются к OSPF и в какую зону они попадают.
Основные команды:
- R1# show ip ospf neighbor — показать соседей.
- R1# show ip ospf interface — отобразить доступные интерфейсы.
- R1# show ip route ospf — показать маршруты OSPF в таблице маршрутизации.
- R1# show ip ospf database — вывести содержимое LSDB.
- R1# show ip protocols — отобразить общую информацию о запущенных протоколах маршрутизации.
Настройка OSPF в Juniper
[edit] user@host# set protocols ospf area 0.0.0.0 interface ge-0/0/0 user@host# set protocols ospf area 0.0.0.0 interface lo0.0
Расшифровка параметров:
- area 0.0.0.0 — определяет область OSPF для интерфейса.
- interface ge-0/0/0 — указывает интерфейс, который будет использовать OSPF.
Основные команды:
- user@host# show ospf neighbor — список соседей.
- user@host# show ospf interface — состояние интерфейсов.
- user@host# show route protocol ospf — маршруты OSPF.
- user@host# show ospf database — база данных LSDB.
Настройка OSPF в Huawei
<R1> system-view [R1] router id 1.1.1.1 [R1] ospf 1 [R1-ospf-1] area 0 [R1-ospf-1-area-0.0.0.0] network 1.1.1.1 255.255.255.255 [R1-ospf-1-area-0.0.0.0] network 12.12.12.0 0.0.0.255
Расшифровка параметров:
- router id — задаёт уникальный идентификатор для маршрутизатора.
- ospf 1 — активирует OSPF с идентификатором 1.
- area 0 — указывает область OSPF для подключения интерфейсов.
- network — задаёт сети для OSPF и указывает их зону.
Основные команды:
- <R1> display ip routing-table — показать таблицу маршрутизации.
- <R1> display ospf peer — список соседей.
- <R1> display ospf interface — интерфейсы OSPF.
- <R1> display ospf routing — доступные маршруты.
- <R1> display ospf brief — сводная информация по OSPF.
Поддержка OSPF в IPv6: OSPFv3
С развитием сетевых технологий увеличилось количество устройств, подключённых к интернету. Это привело к исчерпанию адресного пространства в протоколе IPv4, который использовался для идентификации устройств в сети. Поэтому его заменили на IPv6, который предлагает больше адресов и позволяет обслуживать растущее число пользователей.
Для поддержки нового формата появилась версия протокола OSPFv3, возможности которой подробно описаны в спецификации RFC 5340. OSPFv3 сохраняет ключевые принципы OSPF и содержит несколько изменений:
- В OSPFv3 все пакеты маршрутизации работают с 128-битными адресами IPv6 вместо 32-битных адресов IPv4.
- Структура пакетов OSPF была адаптирована для IPv6 — добавлены новые поля для хранения 128-битных адресов.
- OSPFv3 позволяет разделять адреса и маршруты, что облегчает маршрутизаторам управление разными адресными пространствами.
- В OSPFv3 улучшены механизмы безопасности и защиты информации.
Перечисленные особенности делают OSPFv3 важным инструментом для современных сетей с IPv6, обеспечивает их совместимость с сетями на базе IPv4.
Протокол OSPF: за и против
OSPF — это мощный и гибкий протокол маршрутизации с множеством возможностей для эффективного управления большими сетями:
- Он поддерживается различными сетевыми устройствами.
- Работает без ограничения на количество узлов, через которые передаются данные.
- Позволяет использовать маски подсети переменной длины (VLSM), что важно для эффективного использования адресного пространства.
- Поддерживает мультикаст для отправки объявлений, снижая нагрузку на маршрутизаторы вне мультикаст-групп.
- Обновляет маршруты в режиме реального времени.
- Позволяет делить сеть на зоны, что сокращает объём LSA и агрегирует потоки данных на магистральных маршрутизаторах.
- Поддерживает различные способы аутентификации.
- Позволяет объявлять внешние маршруты и получать их по всей сети.
У OSPF есть и недостатки:
- Процесс вычисления кратчайшего пути и синхронизация требуют значительных ресурсов.
- Хранение данных о топологии сети занимает значительный объём оперативной памяти.
- Постоянные изменения в сети могут перегружать маршрутизаторы из-за необходимости пересчитывать маршруты.
Маршрутизатор — это устройство, которое направляет данные между сетями и выбирает оптимальный путь для их передачи. Это может быть специализированное оборудование для корпоративных сетей, например маршрутизаторы Cisco, Juniper или Huawei. Также маршрутизатором будет домашний Wi-Fi-роутер, соединяющий устройства с интернетом.
Высоконагруженные сети — это сети, обрабатывающие большое количество данных и подключений одновременно, при этом поддерживая стабильную работу под высокой нагрузкой. Такие сети используются в крупных компаниях, дата-центрах и онлайн-сервисах, где требуется быстрая передача данных и высокая производительность, — например, в интернет-магазинах или на стриминговых платформах.
Топология сети — это схема, по которой устройства в сети соединены друг с другом для передачи данных. Например, если все устройства подключены к центральному маршрутизатору, такая схема называется «звездой».
Проприетарный протокол Cisco — это закрытый сетевой протокол, разработанный компанией Cisco и работающий исключительно на её оборудовании.
Петли в сети — это ситуация, когда данные не могут достигнуть цели и начинают циркулировать между маршрутизаторами. Это перегружает сеть и замедляет передачу данных. OSPF постоянно обновляет информацию о маршрутах и выбирает оптимальный путь, что помогает избежать петель.
Пограничные маршрутизаторы (autonomous system boundary routers) — это маршрутизаторы, которые соединяют внутреннюю сеть (автономную систему) с внешними сетями, такими как интернет. Внутренние сети обычно используют OSPF, а для взаимодействия с внешними сетями нужен другой протокол — BGP. Пограничный маршрутизатор преобразует маршруты между этими протоколами, обеспечивая корректную и безопасную маршрутизацию данных между внутренней и внешней сетью.
Сегмент сети — это часть сети, в которой устройства подключены к одному общему каналу связи и могут напрямую обмениваться данными друг с другом. Например, если офисные компьютеры подключены к одному маршрутизатору, то считается, что они находятся в одном сегменте сети.
Логическое соединение — это виртуальная связь между устройствами в сети, которая не требует физического кабеля. Например, если два маршрутизатора подключены через VPN или виртуальные локальные сети (VLAN), это считается логическим соединением.