OSPF
Open Shortest Path First — протокол динамической маршрутизации, который сам строит таблицу маршрутов по кратчайшим путям внутри сети.
Что такое OSPF
OSPF (Open Shortest Path First) — протокол динамической маршрутизации внутри одной автономной системы: своей сети, сети компании, ЦОД. Маршрутизаторы обмениваются информацией о доступных каналах, каждый строит у себя полную карту сети и сам вычисляет кратчайшие пути до всех подсетей.
Смысл — в отказе от ручных маршрутов. Статика работает, пока роутеров три, а изменений не бывает; как только появляются резервные каналы, поддерживать её невозможно — при обрыве линка никто маршруты не перепишет, и трафик уйдёт в чёрную дыру. OSPF замечает падение канала за секунды и пересчитывает пути сам.
Ключевые свойства: протокол открытый (в отличие от EIGRP), работает поверх IP напрямую (номер 89, не TCP и не UDP), относится к классу link-state.
Как он работает
Три шага, и в этом вся суть:
1. Hello маршрутизаторы находят соседей (multicast 224.0.0.5,
каждые 10 с) и устанавливают соседство
2. LSA обмениваются описаниями своих линков; в итоге у всех
одинаковая база данных — карта всей сети
3. SPF каждый запускает алгоритм Дейкстры по этой карте и
получает дерево кратчайших путей до каждой подсети
Отличие от distance-vector (RIP) принципиальное: там маршрутизатор верит соседу на слово, здесь — сам видит топологию целиком. Отсюда быстрая сходимость и отсутствие петель. Соседство держится на Hello-пакетах: не пришли в течение dead-интервала (по умолчанию 40 секунд) — сосед считается мёртвым, база обновляется, SPF пересчитывается.
Метрика: cost
Путь выбирается по суммарной стоимости, а не по числу переходов. Cost интерфейса считается как отношение опорной полосы к реальной:
cost = reference-bandwidth / полоса интерфейса
По умолчанию опорная полоса — 100 Мбит/с, и это ловушка родом из девяностых: гигабитный, десяти- и сорокагигабитный интерфейсы все получают cost = 1, и протокол перестаёт их различать. На современной сети опорную полосу поднимают явно — и одинаково на всех маршрутизаторах области.
Области
Гонять SPF по карте из тысячи линков дорого, поэтому большую сеть режут на области (area). Внутри области все знают полную топологию, между областями передаются только сводные маршруты.
area 1 ──┐
├── area 0 (backbone) ── area 3
area 2 ──┘
Area 0 — магистральная, и правило жёсткое: все остальные области подключаются к ней напрямую (virtual-link считается костылём). Маршрутизатор на стыке областей называется ABR и умеет агрегировать маршруты — этим и достигается экономия. Для сети из нескольких маршрутизаторов достаточно одной area 0; деление начинают, когда пересчёт SPF становится заметным.
OSPF на Linux
На сервере OSPF поднимают через FRRouting — это нужно, когда машина сама выступает маршрутизатором: пограничный узел, VPN-шлюз, хост в фабрике ЦОД.
router ospf
ospf router-id 10.0.0.1
auto-cost reference-bandwidth 100000 ! опорная полоса = 100 Гбит/с
network 10.0.0.0/24 area 0
network 10.0.1.0/24 area 0
interface eth0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 СЕКРЕТ
ip ospf hello-interval 5
ip ospf dead-interval 20
$ vtysh -c "show ip ospf neighbor"
Neighbor ID Pri State Dead Time Address Interface
10.0.0.2 1 Full/DR 00:00:33 10.0.0.2 eth0:10.0.0.1
Full — соседство установлено и базы синхронизированы. Состояние, застрявшее в Init или ExStart, — почти всегда несовпадение параметров: разные hello/dead-интервалы, разные MTU, разные area или ключи аутентификации.
Практические заметки:
- Аутентификацию включайте всегда. Без неё любой узел в сегменте объявит себя маршрутизатором и уведёт трафик на себя.
passive-interfaceна клиентских сетях. Рассылать Hello туда, где нет маршрутизаторов, незачем — это лишний вектор атаки.- Router-id задавайте явно. Иначе он выберется по адресу интерфейса и однажды поменяется при перезагрузке, порвав соседства.
Где OSPF, а где нет
OSPF — протокол внутренней маршрутизации, IGP. Между независимыми организациями и провайдерами работает BGP: там нужны политики и фильтры, а не кратчайший путь. Грубое разделение: внутри своей сети — OSPF, наружу — BGP. Второе ограничение: OSPFv2 знает только IPv4, для IPv6 есть отдельный OSPFv3 — фактически другой протокол, и запускают их параллельно.
Связанные термины
- IP-адрес — то, что OSPF маршрутизирует
- Маска подсети и CIDR — маршруты объявляются префиксами
- Модель OSI — маршрутизация это третий уровень
- Компьютерные сети — где нужна динамическая маршрутизация
- Каналы связи — их полоса задаёт метрику
- IPv4 и IPv6 — OSPFv2 против OSPFv3
Готовы запустить GPU-задачу?
Запустить GPU-сервер