OSPF
OSPF (Open Shortest Path First, RFC 2328 для v2, RFC 5340 для v3) — самый распространённый IGP (Interior Gateway Protocol) для маршрутизации внутри автономной системы. В отличие от BGP (который для inter-AS), OSPF работает внутри одной сети — провайдера, компании, ДЦ.
Как работает
OSPF — link-state протокол. Каждый роутер:
- Знает своих соседей (через Hello-пакеты).
- Синхронизирует базу LSDB (Link-State Database) — знает всю топологию сети.
- Считает кратчайшие пути алгоритмом Dijkstra (SPF) для всех destination-префиксов.
- Пере-считывает при изменениях (link up/down, метрика).
Каждый роутер имеет полную карту сети — в отличие от distance-vector (RIP, EIGRP) где роутер знает только «через кого лучше идти».
Основные пакеты
| Тип | Что делает |
|---|---|
| Hello | Обнаружение соседей, keepalive (по умолчанию каждые 10 сек) |
| Database Description (DBD) | Summary LSDB после hello |
| Link State Request (LSR) | «Пришли мне LSA X» |
| Link State Update (LSU) | Содержит LSA (Link State Advertisement) |
| Link State Acknowledgment (LSAck) | Подтверждение получения LSU |
Работает поверх IP протокол 89, не TCP/UDP — свои механизмы reliability.
Типы LSA
| Тип | Название | Что описывает |
|---|---|---|
| 1 | Router LSA | Себя и свои интерфейсы. Разсылается только внутри area |
| 2 | Network LSA | Multi-access сегмент (broadcast/NBMA), от DR |
| 3 | Summary LSA | Префикс из другой area, от ABR |
| 4 | ASBR-Summary | Достижимость ASBR из другой area |
| 5 | AS-External | Префиксы редистрибутированные из другого протокола (BGP, RIP) |
| 7 | NSSA External | External в NSSA-area |
Areas
OSPF-сеть разбита на areas (области) для масштабируемости. Каждая area имеет свою LSDB. Между areas — только суммаризованные маршруты.
Area 0 (backbone)
┌───────────────┬───────────────┐
│ │ │
ABR-1 ABR-2 ABR-3
│ │ │
Area 1 Area 2 Area 3
- Area 0 — backbone, обязательна. Все остальные area должны подключаться к 0.
- ABR (Area Border Router) — стоит между областями.
- ASBR (AS Boundary Router) — соединяет OSPF с другим протоколом (BGP).
- Stub area — не принимает external LSA (тип 5). Меньше LSDB.
- NSSA (Not-So-Stubby) — как stub, но может иметь свои ASBR (типа 7 LSA).
DR / BDR
На broadcast/NBMA сегменте (Ethernet) — Designated Router и Backup DR. Все роутеры peer'ятся только с DR/BDR, не полный mesh. Уменьшает O(N²) до O(N) adjacencies.
Выбор DR — по Router Priority (по умолчанию 1), тайбрейк — highest Router-ID. Priority 0 = «не хочу быть DR».
Метрика — cost
Метрика = reference_bandwidth / interface_bandwidth. По умолчанию reference = 100 Мбит/с:
| Скорость | Cost (default) |
|---|---|
| 10 Мбит/с | 10 |
| 100 Мбит/с | 1 |
| 1 Гбит/с | 1 (клэмпится на минимум) |
| 10 Гбит/с | 1 |
В современных сетях reference-bandwidth поднимают до 10-100 Гбит/с чтобы различать быстрые линки.
OSPFv2 vs OSPFv3
| OSPFv2 | OSPFv3 | |
|---|---|---|
| IP | IPv4 | IPv6 (изначально), позже address-families для IPv4 тоже |
| Аутентификация | MD5, plain | IPsec AH/ESP |
| Multicast | 224.0.0.5, 224.0.0.6 | ff02::5, ff02::6 |
| Prefix в LSA | Встроен в Router-LSA | Отдельные Intra-Area-Prefix LSA |
Cisco IOS
router ospf 1
router-id 1.1.1.1
network 10.0.0.0 0.0.0.255 area 0
network 10.0.1.0 0.0.0.255 area 1
auto-cost reference-bandwidth 100000
interface Gi0/0
ip ospf 1 area 0
ip ospf hello-interval 5
ip ospf dead-interval 20
ip ospf network point-to-point
FRR (Linux)
# /etc/frr/frr.conf
router ospf
ospf router-id 1.1.1.1
network 10.0.0.0/24 area 0
interface eth0
ip ospf hello-interval 5
ip ospf dead-interval 20
OSPF vs IS-IS vs EIGRP
| OSPF | IS-IS | EIGRP | |
|---|---|---|---|
| Тип | Link-state | Link-state | Advanced distance-vector (DUAL) |
| Открытость | Открытый (RFC) | Открытый (ISO) | Открытый с 2013 (был Cisco-proprietary) |
| Транспорт | IP protocol 89 | Прямо в L2 (не в IP) | IP protocol 88 |
| Многолетний use | Enterprise, ДЦ | Провайдеры (тише, стабильнее) | Cisco-only исторически |
Сходимость
Классический OSPF сходится за 1-30 сек. Ускорения:
- BFD (Bidirectional Forwarding Detection) — обнаружение падения линка за 50 мс.
- LFA (Loop-Free Alternates) — pre-computed backup path.
- PRLFA/TI-LFA — топологическая защита.
- SPF-throttling — не пересчитывать чаще N мс.