L3 OSPF — визуализированный

OSPF (Open Shortest Path First) — стандарт де-факто динамической маршрутизации внутри enterprise-сетей. Открытый (не привязан к вендору), быстрый, устойчивый к петлям. Если на собеседовании на сетевика спрашивают один протокол глубоко — это почти всегда OSPF. Разберём его так, чтобы ты не зубрил, а понимал, что происходит — с пакетами, состояниями и реальными конфигами.

Заявка из очереди

«Инцидент, 03:20. После ночных работ по включению jumbo frames на ядре филиал „Северный“ потерял все маршруты головного офиса. Роутер филиала видит соседа: show ip ospf neighbor — состояние EXSTART уже 40 минут. Дежурный перезагрузил OSPF-процесс — состояние снова доходит до EXSTART и замирает». Знакомая сетевику картина: соседство «почти поднялось» и застряло. Перезагрузки не помогут — EXSTART-залипание имеет ровно одну типовую причину, и она напрямую связана с ночными работами. Какую — поймёшь из раздела о состояниях соседства, а в плейбуке закроем инцидент за 10 минут вместо 40.

Что узнаешь — после урока ты сможешь
Вспомни из модуля 5

Link-state против distance-vector: OSPF — link-state, он не верит соседям на слово, а собирает полную карту и считает сам. AD 110: OSPF-маршрут проиграет статике (AD 1), но побьёт RIP (120) — при равной длине префикса. Порядок выбора LPM → AD → метрика никуда не делся: метрикой OSPF станет cost, сумма стоимостей интерфейсов по пути. И помни про floating static — она страхует именно OSPF-маршруты.

1. Главная идея: link-state и полная карта

Distance-vector протоколы (RIP) работают «по слухам»: сосед сказал «до сети X — 3 хопа», ты поверил. Ты не видишь топологию, только чужие пересказы — отсюда медленная сходимость и петли.

OSPF работает иначе. Каждый роутер рассылает описание своих линков (это LSA — Link-State Advertisement). Все LSA собираются в общую базу — LSDB (Link-State Database). В итоге у каждого роутера в области идентичная полная карта сети. Затем каждый сам запускает алгоритм Дейкстры (SPF) и считает кратчайшие пути до всех сетей — от себя. Как навигатор, у которого есть вся карта города, а не пересказ «поверни где-то там».

Три таблицы OSPF
1. Neighbor table кто мои соседи show ip ospf neighbor 2. LSDB (карта) полная топология show ip ospf database 3. Routing table лучшие пути (SPF) show ip route ospf Hello → SPF/Дейкстра →
Соседи строят общую карту (LSDB), из карты алгоритм SPF считает лучшие маршруты.

2. Пять типов пакетов OSPF

OSPF не использует TCP/UDP — он работает прямо поверх IP, protocol 89. Пять типов сообщений:

ТипИмяЗачем
1Helloнайти соседей и поддерживать соседство
2DBD (Database Description)«оглавление» моей LSDB — что у меня есть
3LSR (Link-State Request)«пришли мне вот эти LSA, которых у меня нет»
4LSU (Link-State Update)сами LSA (полезная нагрузка топологии)
5LSAckподтверждение получения LSA (надёжность)

Hello-пакет «на проводе» (упрощённый разбор Wireshark):

── OSPF Hello (IP proto 89, dst 224.0.0.5) ── Version: 2 # OSPFv2 для IPv4 Type: 1 (Hello) Router ID: 1.1.1.1 Area ID: 0.0.0.0 # area 0 (backbone) Network Mask: 255.255.255.252 Hello Interval: 10 # должен совпасть с соседом! Dead Interval: 40 # должен совпасть! Designated Router: 10.0.12.1 Neighbor: 2.2.2.2 # «я тебя вижу» → это даёт 2-Way

3. Hello: как находятся соседи

OSPF шлёт Hello-пакеты на multicast-адрес 224.0.0.5 со всех включённых интерфейсов. Так роутеры обнаруживают друг друга. Но соседство (adjacency) сложится только, если на обоих совпадает ряд параметров — иначе они «видят», но не «дружат». Это топ-источник проблем у джунов.

ПараметрДолжен совпадать?
Area ID✅ да — иначе соседства не будет
Subnet / маска на линке✅ да — должны быть в одной подсети
Hello / Dead интервалы✅ да — иначе flap
Authentication✅ да, если включена
Stub-флаг области✅ да
MTU✅ да — застрянет в ExStart/Exchange
Router-ID❌ должен быть уникальным, не совпадать
Router-ID выбирается так: вручную заданный (router-id) → иначе самый высокий IP на loopback → иначе самый высокий IP на активном интерфейсе. Всегда задавай вручную и стабильным (например 1.1.1.1) — иначе после перезагрузки RID может «прыгнуть» и сломать соседства.

4. Состояния соседства: Down → Full

Соседство проходит через ряд состояний. Здоровое соседство заканчивается на Full (или 2-Way для не-DR на multi-access). Если «застряло» — состояние подсказывает, где искать проблему:

Машина состояний соседства OSPF
Down Init 2-Way ExStart Exchange Loading Full видим Hello, но себя в нём нет застряли тут? проверь MTU! здоровое соседство Init/2-Way застряло → не совпадают Hello/Dead, area, auth, subnet. ExStart/Exchange застряло → почти всегда несовпадение MTU.
Запомни два диагностических факта: «застрял в Init» = не видят друг друга взаимно; «застрял в ExStart» = MTU.

Обмен базой: DBD → LSR → LSU → LSAck

После 2-Way (или ExStart) соседи синхронизируют LSDB. Это и есть «движок» OSPF:

Синхронизация LSDB между R1 и R2
R1 R2 DBD — «вот оглавление моей базы» DBD — «а вот моё» LSR — «пришли LSA, которых у меня нет» LSU — «держи запрошенные LSA» LSAck — «получил, спасибо» → базы идентичны → состояние Full
Дальше LSDB поддерживается инкрементально: новый/изменённый LSA «флудится» всем, каждый шлёт LSAck.

5. Типы сетей и DR/BDR

OSPF ведёт себя по-разному в зависимости от типа сети на интерфейсе:

Тип сетиDR/BDR?Где
Broadcast✅ даEthernet-сегмент (по умолчанию)
Point-to-Point❌ нетлинк между двумя роутерами (serial, /30, /31)
Non-broadcast (NBMA)✅ да (вручную)Frame Relay, старые WAN
Point-to-Multipoint❌ нетhub-and-spoke

На сети с множественным доступом (Ethernet-сегмент, где несколько роутеров на одном свитче) каждый роутер дружил бы с каждым — это N×(N−1)/2 соседств и лавина LSA. Чтобы этого избежать, выбирается DR (Designated Router) и BDR (резерв). Все остальные (DROther) дружат только с DR/BDR и общаются через них на адрес 224.0.0.6. Один центр вместо хаоса «все со всеми».

Без DR — хаос. С DR — звезда.
Без DR: каждый с каждым С DR: все через центр DR
DROther держат Full только с DR/BDR; между собой — состояние 2-Way (этого достаточно).

Кто становится DR:

На P2P-линках DR/BDR не выбираются — там всего два роутера, центр не нужен. DR/BDR — только для broadcast/NBMA сетей.

6. SPF / Дейкстра — из карты в дерево путей

Когда LSDB синхронизирована, каждый роутер запускает алгоритм Дейкстры: ставит себя в корень и строит дерево кратчайших путей (SPT) до всех сетей, суммируя cost по дороге. Лучшие пути попадают в таблицу маршрутизации.

SPF-дерево: R1 считает кратчайшие пути (cost на рёбрах)
R1 R2 R3 R4 10 1 10 5 3 До R4 лучший путь R1→R3→R4 = 1+5 = 6 (а не R1→R2→R4 = 20). SPF выбирает 6.
OSPF суммирует cost вдоль пути и выбирает минимальную сумму. Это и есть «shortest path first».

7. Areas: иерархия и backbone

Если все роутеры в одной области, LSDB растёт, и каждый пересчёт SPF при любом изменении нагружает всех. Решение — разбить сеть на области (areas). Внутри области — детальная карта; между областями передаётся уже суммированная информация. Изменение в одной области не запускает полный SPF в других.

Главное правило: есть backbone — area 0, и все остальные области должны подключаться к ней. Роутер на стыке областей — ABR (Area Border Router). Роутер, который вносит в OSPF внешние маршруты (из BGP, статики, другого протокола) — ASBR (Autonomous System Boundary Router).

Иерархия областей вокруг backbone (area 0)
Area 0 — Backbone Rb1 Rb2 ABR ABR Area 1 Area 2 (+ASBR) ASBR
Все области касаются area 0. ABR соединяет область с backbone, ASBR заносит внешние маршруты.

8. Типы LSA и типы областей — обзорно, но понятно

Не нужно зубрить все. Нужно понимать, кто что описывает:

LSAКто генеритЧто описывает
Type 1 (Router)каждый роутерсвои линки внутри области
Type 2 (Network)DRmulti-access сегмент
Type 3 (Summary)ABRсети другой области (между областями)
Type 4 (ASBR Summary)ABRкак добраться до ASBR
Type 5 (External)ASBRвнешние маршруты (редистрибуция)
Type 7 (NSSA External)ASBR в NSSAвнешние в stub-подобной области

Типы областей — зачем

Чтобы маленькие края сети не тащили тяжёлые внешние LSA, область можно сделать «урезанной». Достаточно понимать идею: stub — не пускаем Type 5 (внешние), вместо них default route; totally stubby (Cisco) — не пускаем ещё и Type 3 (межобластные); NSSA — stub, но со своим ASBR (Type 7). Это оптимизация, на собесе достаточно объяснить «зачем».

9. Метрика — cost по полосе

OSPF считает стоимость пути как сумму cost исходящих интерфейсов. Cost по умолчанию = reference-bandwidth / bandwidth интерфейса, reference по умолчанию 100 Мбит/с.

ИнтерфейсCost при reference 100 Мбит/сCost при reference 100 Гбит/с
10 Мбит/с1010000
100 Мбит/с11000
1 Гбит/с1 (!)100
10 Гбит/с1 (!)10
100 Гбит/с1 (!)1
важная настройка При reference 100 Мбит/с и Gigabit, и 100G дают cost = 1 — OSPF их не различает! В современных сетях обязательно задавай auto-cost reference-bandwidth 100000 (или больше) на всех роутерах одинаково.

10. Полный конфиг multi-area (Cisco)

Сценарий: R1 в area 1, R2 — ABR (area 1 + area 0), R3 в area 0.

# === R1 (только area 1) === R1(config)# router ospf 1 R1(config-router)# router-id 1.1.1.1 R1(config-router)# auto-cost reference-bandwidth 100000 R1(config-router)# network 10.0.1.0 0.0.0.255 area 1 R1(config-router)# network 10.0.12.0 0.0.0.3 area 1 R1(config-router)# passive-interface gi0/0 # к хостам Hello не шлём # === R2 (ABR: area 1 ↔ area 0) === R2(config)# router ospf 1 R2(config-router)# router-id 2.2.2.2 R2(config-router)# auto-cost reference-bandwidth 100000 R2(config-router)# network 10.0.12.0 0.0.0.3 area 1 R2(config-router)# network 10.0.23.0 0.0.0.3 area 0 R2(config-router)# area 1 range 10.0.0.0 255.255.0.0 # суммаризация в area 0 # === R3 (area 0) === R3(config)# router ospf 1 R3(config-router)# router-id 3.3.3.3 R3(config-router)# auto-cost reference-bandwidth 100000 R3(config-router)# network 10.0.23.0 0.0.0.3 area 0

Проверка соседства и маршрутов:

R2# show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 1.1.1.1 1 FULL/ - 00:00:34 10.0.12.1 Gi0/1 3.3.3.3 1 FULL/DR 00:00:38 10.0.23.2 Gi0/2

Таймеры и аутентификация

# таймеры (должны совпадать с соседом!) R1(config-if)# ip ospf hello-interval 10 R1(config-if)# ip ospf dead-interval 40 # аутентификация соседства (SHA на современных IOS) R1(config-if)# ip ospf authentication message-digest R1(config-if)# ip ospf message-digest-key 1 md5 SecretKey

11. Troubleshooting — флоучарт

«Соседство не поднимается» — куда смотреть
show ip ospf neighbor Соседа нет совсемL1/L2 up? IP в одной сети? ACL/multicast? Init / 2-Wayarea, Hello/Dead, auth, маска, stub-флаг ExStart / Exchange→ MTU mismatch (90% случаев) Full ✅соседство ок → смотри LSDB/маршруты Маршрутов нет, а соседство Full? → reference-bandwidth, суммаризация, тип области, фильтры.
Состояние соседа сразу сужает поиск. Это и есть методология, которую ценят на работе.
R1# show ip ospf neighbor # соседи и их состояние R1# show ip ospf interface brief # area, cost, тип сети, DR/BDR R1# show ip ospf database # LSDB — карта сети R1# show ip route ospf # что OSPF положил в таблицу R1# debug ip ospf adj # процесс соседства (осторожно в проде!)

12. OSPFv3 для IPv6 — кратко

Для IPv6 есть OSPFv3 (RFC 5340). Та же логика (link-state, areas, DR/BDR, SPF), но: работает по link-local адресам, настраивается на интерфейсе (ipv6 ospf 1 area 0), а не через network, и может переносить и IPv4, и IPv6 (address families). Учить отдельно почти не нужно — знаешь OSPFv2, понимаешь и v3.

13. Мост в DevOps

Прямо OSPF в облаке ты почти не встретишь (там маршрутизацию делает провайдер/VPC). Но:

14. Вопросы с собеседования

❓ Что должно совпадать у соседей OSPF?
Area ID, маска подсети на линке, Hello/Dead интервалы, аутентификация, stub-флаг области и MTU. Router-ID, наоборот, должен быть уникальным.
❓ Соседи застряли в ExStart/Exchange. Причина?
Почти всегда несовпадение MTU на линке. Обмен DBD не проходит. Проверь и выровняй MTU.
❓ Зачем DR/BDR и где их НЕ выбирают?
Чтобы на multi-access сегменте не было full-mesh соседств и лавины LSA — все общаются через DR. На P2P-линках DR/BDR не выбираются.
❓ Что такое ABR и ASBR?
ABR — роутер на границе областей (одна нога в area 0). ASBR — роутер, вносящий в OSPF внешние маршруты (редистрибуция из BGP/статики).

15. Частые ошибки джунов

ошибка 1 Соседство застряло в ExStart/Exchange. В 9 случаях из 10 — несовпадение MTU на линке.
ошибка 2 Соседи не поднимаются совсем (Init/Down). Разные area, разные Hello/Dead, mismatch auth, разные подсети на линке или ACL режет multicast 224.0.0.5.
ошибка 3 Reference-bandwidth по умолчанию. 1G и 100G выглядят одинаково (cost 1) — OSPF выбирает кривые пути. Задай большой reference на всех роутерах одинаково.
ошибка 4 Область не касается area 0. Все non-backbone области обязаны подключаться к backbone (напрямую или через virtual-link, что само по себе «костыль»).
ошибка 5 Не задан router-id. После перезагрузки RID «прыгнул» на другой IP → соседства пересоздались, маршруты флапнули. Всегда задавай router-id вручную.

16. Плейбук: «EXSTART в 3:20» — закрываем ночной инцидент

Возвращаемся к филиалу «Северный»: после включения jumbo frames соседство циклится в EXSTART. Дежурный уже потратил 40 минут на перезагрузки. Правильные 10 минут выглядят так:

Прочитай состояние как симптом, а не как загадку
Таблица состояний из раздела 4 — это диагностическая карта: DOWN/INIT — не слышат друг друга (ACL, area, таймеры); 2-WAY навсегда — норма для не-DR на broadcast; EXSTART/EXCHANGE — в 9 случаях из 10 несовпадение MTU: Hello маленький и проходит, а большие DBD-пакеты с описанием базы — нет. Сосед виден, обмен не начинается — ровно наша картина.
Свяжи симптом с изменением
Что делали ночью? «Включали jumbo frames на ядре». То есть на стороне ГО интерфейс теперь MTU 9000, а на стороне филиала остался 1500. Правило инцидентов: «что сломалось» почти всегда отвечает на вопрос «что меняли». Проверка: show interface gi0/1 | include MTU с обеих сторон — 9000 против 1500.
Подтверди механику, не вери на слово
В DBD-обмене стороны сообщают свой MTU интерфейса; сторона с меньшим отбрасывает DBD от «большой» стороны (Cisco) — обмен виснет, dead-таймер сбрасывает сессию, цикл повторяется. В логах увидишь %OSPF-4-BADLSATYPE-подобный шум или просто циклы Neighbor Down: Dead timer expired. debug ip ospf adj покажет «Nbr has larger interface MTU».
Выровняй MTU — или скажи OSPF его игнорировать
Правильно: одинаковый MTU с обеих сторон стыка — mtu 9000 на филиальской стороне (если железо умеет) или откат ядра на 1500 до планового апгрейда филиала. Костыль на крайний случай: ip ospf mtu-ignore на интерфейсе — соседство поднимется, но риск остаётся: большие LSU могут молча теряться. Костыль применяй осознанно и с тикетом на устранение.
Дождись FULL и проверь маршруты
show ip ospf neighbor → FULL; show ip route ospf — маршруты ГО вернулись; пинг критичных сервисов из филиала. В отчёт: «Причина — рассинхрон MTU после включения jumbo frames (ядро 9000, филиал 1500): OSPF DBD-обмен блокировался, соседство циклилось в EXSTART. MTU выровнен, регламент работ дополнен пунктом „менять MTU одновременно с обеих сторон стыка“».

17. Мини-лаба: OSPF своими глазами

Прочитай живые OSPF-пакеты (без стенда, 10 минут)
wiki.wireshark.org → Sample Captures → найди «ospf.cap». Открой и посмотри: Hello на 224.0.0.5 (найди в нём area, hello/dead-интервалы, priority, список соседей), DBD, LSU с LSA внутри. Разверни LSA Type 1 и увидь «атом карты»: router-id и его линки с cost. Всё, о чём был раздел 2, — вот оно, в байтах.
Собери треугольник в Packet Tracer
Три роутера кольцом, между ними /30-стыки, у каждого loopback. На всех: router ospf 1 + network … area 0 (или ospf на интерфейсах). Смотри: show ip ospf neighbor (кто с кем FULL), show ip ospf database (одинаковая LSDB на всех трёх — проверь!), show ip route ospf (метка «O»).
Устрой аварию и посчитай сходимость
Запусти непрерывный пинг между дальними loopback'ами и выключи интерфейс на кратчайшем пути (shutdown). Сколько пингов потерялось? OSPF заметил обрыв, разослал обновлённые LSA, все пересчитали SPF — трафик поехал в обход за секунды. Теперь верни линк — путь вернётся на кратчайший. Это та самая динамика, ради которой отказались от статики.
Воспроизведи инцидент из заявки
На одном конце стыка: interface gi0/0 → mtu 1400. Смотри, как соседство падает и застревает в EXSTART (show ip ospf neighbor — состояние мигает EXSTART/DOWN). Полечи двумя способами: выровняй MTU обратно, а потом попробуй ip ospf mtu-ignore — прочувствуй разницу между решением и костылём.

18. Словарик урока

ТерминПо-английскиСмысл в одну строку
Состояние каналовlink-stateкаждый роутер знает полную карту; маршруты считает сам, а не верит соседям
База состоянийLSDB, link-state database«карта города»: одинакова у всех роутеров области — это святое
Анонс LSAlink-state advertisementкирпичик LSDB: «я такой-то, мои линки такие-то, cost такой-то»
ПриветствиеHelloпоиск и поддержание соседей: multicast 224.0.0.5, таймеры 10/40 c
Соседствоadjacency, FULLотношения обмена базой; FULL = базы синхронны
Идентификатор роутераrouter-id, RIDуникальное «имя» в OSPF; задавай руками, иначе прыгнет после ребута
DR / BDRdesignated router«старший» multi-access-сегмента: все синхронизируются через него, не full-mesh
Алгоритм SPFshortest path first, Дейкстраиз общей карты — дерево кратчайших путей от себя до всех сетей
Стоимостьcost = reference/bandwidthметрика интерфейса; reference-bandwidth поднимай одинаково на всех!
Областьarea, backbone area 0граница видимости LSA; все области обязаны касаться area 0
Пограничные роутерыABR / ASBRстык областей (нога в area 0) / вброс внешних маршрутов (из BGP, статики)
Тупиковая областьstub / totally stub / NSSAобласти-«умные дыры»: вместо внешних маршрутов — default от ABR
СуммаризацияsummarizationABR/ASBR сворачивает префиксы: меньше LSA — стабильнее и быстрее SPF
Пассивный интерфейсpassive-interfaceсеть анонсируется, но Hello не шлётся — стандарт для хостовых портов
Залипание EXSTARTEXSTART/EXCHANGE stuckподпись несовпадения MTU: Hello проходит, DBD — нет

19. Задачи на понимание

Задача 1. Соседи в 2-WAY и дальше не идут. На P2P-линке это авария, а на Ethernet-сегменте из 5 роутеров — возможно, норма. Объясни разницу.

На broadcast-сегменте полные соседства (FULL) строятся только с DR и BDR; между «рядовыми» (DROTHER) — ровно 2-WAY, это штатно. На P2P DR/BDR не выбираются, соседство обязано дойти до FULL — залипание в 2-WAY там означает проблему (например, priority 0 с обеих сторон на неверно определённом типе сети).

Задача 2. Путь А→Б: гигабитный линк (cost 1) + гигабитный линк (cost 1) = 2. Прямой линк А→Б на 100 Мбит/с — тоже cost 1?! Reference-bandwidth по умолчанию 100 Мбит/с. Куда пойдёт трафик и как починить?

С дефолтным reference 100M и гигабит, и сотка получают cost 1 (меньше единицы не бывает) — прямой медленный линк (cost 1) выиграет у быстрого пути (cost 2), и трафик поползёт через 100 Мбит/с. Лечение: auto-cost reference-bandwidth 100000 (100G) на всех роутерах одинаково — теперь гигабит = 100, сотка = 1000, и SPF выберет быстрый путь.

Задача 3. Компания: ядро + 30 филиалов на медленных линках. Всё в одной area 0. Какие две проблемы это создаёт и как их решает иерархия областей?

1) Каждый флап любого филиального линка порождает LSA, которое разлетается всем 30+ роутерам, и все пересчитывают SPF — CPU и нестабильность. 2) LSDB огромная — память и время сходимости. Иерархия: филиалы по своим областям (stub/totally stub — им хватит default от ABR), ядро — area 0, на ABR — суммаризация филиальных префиксов. Флап внутри area 1 не заставляет area 2 пересчитывать SPF: межобластные изменения приходят «готовыми» Type-3 LSA.

Задача 4. Нужно подключить OSPF-домен к интернету: провайдер отдаёт default по BGP. Каким типом роутера станет твой граничный маршрутизатор и как филиалы узнают путь в интернет?

Граничный роутер станет ASBR: он вносит внешний (не-OSPF) маршрут в домен — обычно командой default-information originate. По домену разойдётся Type-5 LSA с default 0.0.0.0/0 (метка O*E2 в таблицах). Филиалы в stub-областях получат default и без этого — от своего ABR, так устроена stub-область.

Задача 5. После замены коммутатора между двумя роутерами соседство поднимается до FULL, но каждые ~40 секунд падает с «Dead timer expired» и поднимается снова. Пинг между роутерами ходит. Твои гипотезы?

Hello ходят при установлении (unicast-часть и первые multicast прошли), но регулярные multicast-Hello теряются — dead-таймер (40 с) истекает. Главный подозреваемый — новый коммутатор режет или фильтрует multicast 224.0.0.5 (включён IGMP snooping без querier, storm-control по multicast, или ACL). Проверка: debug ip ospf hello — видно, что свои Hello уходят, чужие не приходят. Вторая гипотеза — односторонние потери на линке (CRC), смотри счётчики из модуля 1.

Задача 6. Чем плох virtual-link и в какой ситуации он всё же оправдан?

Virtual-link — «удлинитель» area 0 через другую область: хрупкий (зависит от транзитной области), усложняет отладку, не любит аутентификацию по умолчанию — признанный костыль. Оправдан временно: слияние двух компаний, когда новая область физически не касается backbone, а перестроить топологию прямо сейчас нельзя. Ставится с тикетом «убрать при редизайне» — постоянное решение это перепроектировать связность до area 0.

Мост к следующему модулю

OSPF безупречен внутри твоей сети: одна организация, одно доверие, одна цель — кратчайший путь. Но интернет — это 80 000+ независимых сетей (автономных систем), которые друг другу не доверяют и хотят не «кратчайшего», а выгодного: дешёвый транзит, платный пиринг, политика. Кратчайший путь тут никого не волнует. Для этого мира нужен другой протокол — BGP, самый важный протокол интернета. Следующий модуль — флагман трека: как AS договариваются, как выбирается best-path и как одна ошибка в анонсе кладёт пол-интернета.